diff --git a/README-cn.md b/README-cn.md index 5c72db3..2b151f5 100644 --- a/README-cn.md +++ b/README-cn.md @@ -13,12 +13,7 @@ ## Gradle ```groovy -compile('com.jayfeng:lesscode-core:0.9.1') { - // exclusion for update the android support jar - // for example, you can use the appcompat-v7 in your project - exclude group: 'com.android.support', module: 'support-v4' - exclude group: 'com.android.support', module: 'appcompat-v7' -} +implementation 'com.jayfeng:lesscode-core:2.4.2' ``` ## Features @@ -45,7 +40,7 @@ compile('com.jayfeng:lesscode-core:0.9.1') { |SharedPreferenceLess|简化和增强SharedPreference的操作| |StorageLess|手机存储相关,包括:手机内存,内置存储卡(Sdcard),外置存储卡(ExtSdcard)| |ToastLess|简化Toast的使用| -|UpdateLess/UpdateService|简单但完整的自动更新实现,无缝对接| +|UpdateLess/UpdateService|简单但完整的自动更新实现,无缝对接(已分离到LessCode-Update项目)| |ViewLess|简化繁琐的findViewById和强制转换| ## Usage diff --git a/README.md b/README.md index af3484c..c5f87c8 100644 --- a/README.md +++ b/README.md @@ -18,12 +18,7 @@ less code, more efficient for android, for the best android tools library! ## Gradle ```groovy -compile('com.jayfeng:lesscode-core:0.9.6.1') { - // exclusion for update the android support jar - // for example, you can use the appcompat-v7 in your project - exclude group: 'com.android.support', module: 'support-v4' - exclude group: 'com.android.support', module: 'appcompat-v7' -} +implementation 'com.jayfeng:lesscode-core:2.4.2' ``` ## Features @@ -50,7 +45,7 @@ compile('com.jayfeng:lesscode-core:0.9.6.1') { |SharedPreferenceLess|简化和增强SharedPreference的操作| |StorageLess|手机存储相关,包括:手机内存,内置存储卡(Sdcard),外置存储卡(ExtSdcard)| |ToastLess|简化Toast的使用| -|UpdateLess/UpdateService|简单但完整的自动更新实现,无缝对接| +|UpdateLess/UpdateService|简单但完整的自动更新实现,无缝对接(已分离到LessCode-Update项目)| |ViewLess|简化繁琐的findViewById和强制转换| ## Usage diff --git a/app/build.gradle b/app/build.gradle index 6b6502d..3384bef 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,13 +1,13 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 23 - buildToolsVersion "23.0.2" + compileSdkVersion 27 + buildToolsVersion '27.0.3' defaultConfig { applicationId "com.jayfeng.lesscode.app" - minSdkVersion 9 - targetSdkVersion 21 + minSdkVersion 14 + targetSdkVersion 27 versionCode 1 versionName "1.0" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e62253b..dfbd8b5 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -24,9 +24,6 @@ - diff --git a/app/src/main/java/com/jayfeng/lesscode/app/activity/AdapterActivity.java b/app/src/main/java/com/jayfeng/lesscode/app/activity/AdapterActivity.java deleted file mode 100644 index b581a68..0000000 --- a/app/src/main/java/com/jayfeng/lesscode/app/activity/AdapterActivity.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.jayfeng.lesscode.app.activity; - -import android.app.Activity; -import android.content.Intent; -import android.os.Bundle; -import android.view.View; -import android.widget.AdapterView; -import android.widget.BaseAdapter; -import android.widget.ListView; -import android.widget.TextView; - -import com.jayfeng.lesscode.app.R; -import com.jayfeng.lesscode.app.model.LessItem; -import com.jayfeng.lesscode.core.AdapterLess; -import com.jayfeng.lesscode.core.ViewLess; - -import java.util.ArrayList; -import java.util.List; - -public class AdapterActivity extends Activity { - - List list; - ListView listView; - BaseAdapter adapter; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_adapter); - - listView = ViewLess.$(this, R.id.listview); - - initData(); - - adapter = AdapterLess.$base(this, list, R.layout.activity_main_list_item, - new AdapterLess.CallBack() { - @Override - public View getView(int position, View convertView, AdapterLess.ViewHolder holder, LessItem lessItem) { - TextView nameView = holder.$view(convertView, R.id.name); - nameView.setText(lessItem.getName()); - return convertView; - } - }); - listView.setAdapter(adapter); - listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - Intent intent = new Intent(); - intent.setClassName(AdapterActivity.this, "com.jayfeng.lesscode.app.activity.adapterless." + list.get(position).getClassName()); - startActivity(intent); - } - }); - } - - private void initData() { - list = new ArrayList<>(); - - LessItem lessItem = new LessItem(); - lessItem.setName("AdapterLess.$base的使用"); - lessItem.setClassName("BaseAdapterActivity"); - list.add(lessItem); - - lessItem = new LessItem(); - lessItem.setName("AdapterLess.$pager的使用"); - lessItem.setClassName("PagerAdapterActivity"); - list.add(lessItem); - - lessItem = new LessItem(); - lessItem.setName("AdapterLess.$recycler的使用"); - lessItem.setClassName("RecyclerAdapterActivity"); - list.add(lessItem); - } - -} diff --git a/app/src/main/java/com/jayfeng/lesscode/app/activity/DisplayActivity.java b/app/src/main/java/com/jayfeng/lesscode/app/activity/DisplayActivity.java index 27f0b24..6470ea4 100644 --- a/app/src/main/java/com/jayfeng/lesscode/app/activity/DisplayActivity.java +++ b/app/src/main/java/com/jayfeng/lesscode/app/activity/DisplayActivity.java @@ -15,6 +15,7 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_display); + ToastLess.$(this, DisplayLess.$width(this) + "x" + DisplayLess.$height(this)); new Handler().postDelayed(new Runnable() { @Override diff --git a/app/src/main/java/com/jayfeng/lesscode/app/activity/DrawableActivity.java b/app/src/main/java/com/jayfeng/lesscode/app/activity/DrawableActivity.java index 800cc86..b04f197 100644 --- a/app/src/main/java/com/jayfeng/lesscode/app/activity/DrawableActivity.java +++ b/app/src/main/java/com/jayfeng/lesscode/app/activity/DrawableActivity.java @@ -6,18 +6,13 @@ import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; import android.os.Bundle; -import android.support.v4.graphics.drawable.DrawableCompat; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; -import android.widget.BaseAdapter; -import android.widget.Button; import android.widget.ImageView; import android.widget.Spinner; import com.jayfeng.lesscode.app.R; -import com.jayfeng.lesscode.core.AdapterLess; -import com.jayfeng.lesscode.core.AppLess; import com.jayfeng.lesscode.core.DrawableLess; import com.jayfeng.lesscode.core.ToastLess; import com.jayfeng.lesscode.core.ViewLess; diff --git a/app/src/main/java/com/jayfeng/lesscode/app/activity/MainActivity.java b/app/src/main/java/com/jayfeng/lesscode/app/activity/MainActivity.java index b57dd9b..8e12900 100644 --- a/app/src/main/java/com/jayfeng/lesscode/app/activity/MainActivity.java +++ b/app/src/main/java/com/jayfeng/lesscode/app/activity/MainActivity.java @@ -1,27 +1,21 @@ package com.jayfeng.lesscode.app.activity; import android.app.Activity; -import android.content.Intent; import android.os.Bundle; -import android.view.View; -import android.widget.AdapterView; +import android.os.Environment; import android.widget.BaseAdapter; import android.widget.ListView; -import android.widget.TextView; import com.jayfeng.lesscode.app.R; import com.jayfeng.lesscode.app.model.LessItem; -import com.jayfeng.lesscode.app.model.Person; import com.jayfeng.lesscode.core.ActivityLess; -import com.jayfeng.lesscode.core.AdapterLess; +import com.jayfeng.lesscode.core.HttpLess; import com.jayfeng.lesscode.core.LogLess; -import com.jayfeng.lesscode.core.NetworkLess; -import com.jayfeng.lesscode.core.SerializeLess; -import com.jayfeng.lesscode.core.SharedPreferenceLess; import com.jayfeng.lesscode.core.ToastLess; import com.jayfeng.lesscode.core.ViewLess; import java.io.File; +import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; @@ -43,32 +37,63 @@ protected void onCreate(Bundle savedInstanceState) { initData(); - adapter = AdapterLess.$base(this, list, R.layout.activity_main_list_item, - new AdapterLess.CallBack() { - @Override - public View getView(int position, View convertView, AdapterLess.ViewHolder holder, LessItem lessItem) { - TextView nameView = holder.$view(convertView, R.id.name); - nameView.setText(lessItem.getName()); - return convertView; - } - }); - listView.setAdapter(adapter); - listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + final File mDestDir = new File(Environment.getExternalStorageDirectory().getPath() + "/lesscode-download"); + if (mDestDir.exists() && !mDestDir.isDirectory()) { + mDestDir.delete(); + } + if (mDestDir.exists() || mDestDir.mkdirs()) { + + } + final File mDestFile = new File(mDestDir.getPath() + "/" + URLEncoder.encode("http://www.vpngo.com/download/vpngo-release-v1.3.1-46.apk")); + new Thread() { @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - Intent intent = new Intent(); - intent.setClassName(MainActivity.this, "com.jayfeng.lesscode.app.activity." + list.get(position).getClassName()); - startActivity(intent); + public void run() { + try { + HttpLess.$download("http://www.vpngo.com/download/vpngo-release-v1.3.1-46.apk", mDestFile, false, new HttpLess.DownloadCallBack() { + @Override + public void onDownloading(int progress) { + + } + + @Override + public void onDownloaded() { + LogLess.$d("下载完成"); + } + }); + } catch (Exception e) { + e.printStackTrace(); + LogLess.$d(e.getMessage()); + } } - }); - - LogLess.$d("network: %s, type: %s", NetworkLess.$online(), NetworkLess.$type()); - - Person person = new Person("fengj"); - SerializeLess.$se(new File(getCacheDir(), "person").getAbsolutePath(), person); - - Person person1 = SerializeLess.$de(new File(getCacheDir(), "person").getAbsolutePath()); - ToastLess.$(this, person1.getName()); + }.start(); + + +// adapter = AdapterLess.$base(this, list, R.layout.activity_main_list_item, +// new AdapterLess.CallBack() { +// @Override +// public View getView(int position, View convertView, AdapterLess.ViewHolder holder, LessItem lessItem) { +// TextView nameView = holder.$view(convertView, R.id.name); +// nameView.setText(lessItem.getName()); +// return convertView; +// } +// }); +// listView.setAdapter(adapter); +// listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { +// @Override +// public void onItemClick(AdapterView parent, View view, int position, long id) { +// Intent intent = new Intent(); +// intent.setClassName(MainActivity.this, "com.jayfeng.lesscode.app.activity." + list.get(position).getClassName()); +// startActivity(intent); +// } +// }); +// +// LogLess.$d("network: %s, type: %s", NetworkLess.$online(), NetworkLess.$type()); +// +// Person person = new Person("fengj"); +// SerializeLess.$se(new File(getCacheDir(), "person").getAbsolutePath(), person); +// +// Person person1 = SerializeLess.$de(new File(getCacheDir(), "person").getAbsolutePath()); +// ToastLess.$(this, person1.getName()); } @@ -80,11 +105,6 @@ private void initData() { lessItem.setClassName("ActivityActivity"); list.add(lessItem); - lessItem = new LessItem(); - lessItem.setName("AdapterLess的使用"); - lessItem.setClassName("AdapterActivity"); - list.add(lessItem); - lessItem = new LessItem(); lessItem.setName("AppLess的使用"); lessItem.setClassName("AppActivity"); diff --git a/app/src/main/java/com/jayfeng/lesscode/app/activity/SharedPreferenceActivity.java b/app/src/main/java/com/jayfeng/lesscode/app/activity/SharedPreferenceActivity.java index 92fe23e..7156472 100644 --- a/app/src/main/java/com/jayfeng/lesscode/app/activity/SharedPreferenceActivity.java +++ b/app/src/main/java/com/jayfeng/lesscode/app/activity/SharedPreferenceActivity.java @@ -15,17 +15,17 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_shared_preference); - SharedPreferenceLess.$put(this, "key1", 333); - SharedPreferenceLess.$put(this, "key2", 0.5f); - SharedPreferenceLess.$put(this, "key3", true); - SharedPreferenceLess.$put(this, "key4", 100000L); - SharedPreferenceLess.$put(this, "key5", "i am a string"); - SharedPreferenceLess.$put(this, "key5", null); + SharedPreferenceLess.$put("key1", 333); + SharedPreferenceLess.$put("key2", 0.5f); + SharedPreferenceLess.$put("key3", true); + SharedPreferenceLess.$put("key4", 100000L); + SharedPreferenceLess.$put("key5", "i am a string"); + SharedPreferenceLess.$put("key5", null); - LogLess.$d(SharedPreferenceLess.$get(this, "key1", 0) + ""); - LogLess.$d(SharedPreferenceLess.$get(this, "key2", 0f) + ""); - LogLess.$d(SharedPreferenceLess.$get(this, "key3", false) + ""); - LogLess.$d(SharedPreferenceLess.$get(this, "key4", 0L) + ""); - LogLess.$d(SharedPreferenceLess.$get(this, "key5", "")); + LogLess.$d(SharedPreferenceLess.$get("key1", 0) + ""); + LogLess.$d(SharedPreferenceLess.$get("key2", 0f) + ""); + LogLess.$d(SharedPreferenceLess.$get("key3", false) + ""); + LogLess.$d(SharedPreferenceLess.$get("key4", 0L) + ""); + LogLess.$d(SharedPreferenceLess.$get("key5", "")); } } diff --git a/app/src/main/java/com/jayfeng/lesscode/app/activity/ToastActivity.java b/app/src/main/java/com/jayfeng/lesscode/app/activity/ToastActivity.java index e830192..71721b8 100644 --- a/app/src/main/java/com/jayfeng/lesscode/app/activity/ToastActivity.java +++ b/app/src/main/java/com/jayfeng/lesscode/app/activity/ToastActivity.java @@ -4,6 +4,7 @@ import android.os.Bundle; import com.jayfeng.lesscode.app.R; +import com.jayfeng.lesscode.core.ToastLess; public class ToastActivity extends Activity { @@ -11,5 +12,8 @@ public class ToastActivity extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_toast); + + + ToastLess.$("xxxxx"); } } diff --git a/app/src/main/java/com/jayfeng/lesscode/app/activity/adapterless/BaseAdapterActivity.java b/app/src/main/java/com/jayfeng/lesscode/app/activity/adapterless/BaseAdapterActivity.java deleted file mode 100644 index d4deedd..0000000 --- a/app/src/main/java/com/jayfeng/lesscode/app/activity/adapterless/BaseAdapterActivity.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.jayfeng.lesscode.app.activity.adapterless; - -import android.app.Activity; -import android.os.Bundle; -import android.view.View; -import android.widget.BaseAdapter; -import android.widget.ListView; -import android.widget.TextView; - -import com.jayfeng.lesscode.app.R; -import com.jayfeng.lesscode.app.model.Person; -import com.jayfeng.lesscode.core.AdapterLess; -import com.jayfeng.lesscode.core.ViewLess; - -import java.util.ArrayList; -import java.util.List; - -public class BaseAdapterActivity extends Activity { - - List list; - ListView listView; - BaseAdapter adapter; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_adapter_base); - listView = ViewLess.$(this, R.id.listview); - initData(); - - // simple callback - /* - adapter = AdapterLess.$base(this, list, R.layout.activity_main_list_item, - new AdapterLess.CallBack() { - @Override - public View getView(int position, View convertView, AdapterLess.ViewHolder holder, Person person) { - TextView nameView = holder.$view(convertView, R.id.name); - nameView.setText(person.getName()); - return convertView; - } - }); - */ - adapter = AdapterLess.$base(this, list, - new int[] { R.layout.activity_main_list_item, R.layout.adapter_list_item_header}, - new AdapterLess.FullCallBack() { - @Override - public View getView(int position, View convertView, AdapterLess.ViewHolder holder, Person person) { - TextView nameView = holder.$view(convertView, R.id.name); - nameView.setText(person.getName()); - return convertView; - } - - @Override - public int getItemViewType(int position) { - Person person = list.get(position); - if ("header".equals(person.getName())) { - return 1; - } else { - return 0; - } - } - - @Override - public boolean isEnabled(int position) { - Person person = list.get(position); - if ("header".equals(person.getName())) { - return false; - } - return true; - } - }); - // full callback - - listView.setAdapter(adapter); - } - - private void initData() { - list = new ArrayList<>(); - list.add(new Person("header")); - list.add(new Person("jay")); - list.add(new Person("bee")); - list.add(new Person("header")); - list.add(new Person("chras")); - list.add(new Person("nichid")); - } - -} diff --git a/app/src/main/java/com/jayfeng/lesscode/app/activity/adapterless/PagerAdapterActivity.java b/app/src/main/java/com/jayfeng/lesscode/app/activity/adapterless/PagerAdapterActivity.java deleted file mode 100644 index ea3ca7a..0000000 --- a/app/src/main/java/com/jayfeng/lesscode/app/activity/adapterless/PagerAdapterActivity.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.jayfeng.lesscode.app.activity.adapterless; - -import android.app.Activity; -import android.os.Bundle; -import android.support.v4.view.PagerAdapter; -import android.support.v4.view.ViewPager; -import android.view.View; -import android.widget.BaseAdapter; -import android.widget.ListView; -import android.widget.TextView; - -import com.jayfeng.lesscode.app.R; -import com.jayfeng.lesscode.app.model.Person; -import com.jayfeng.lesscode.core.AdapterLess; -import com.jayfeng.lesscode.core.ViewLess; - -import java.util.ArrayList; -import java.util.List; - -public class PagerAdapterActivity extends Activity { - - List list; - ViewPager viewPager; - PagerAdapter adapter; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_adapter_pager); - viewPager = ViewLess.$(this, R.id.viewpager); - initData(); - - adapter = AdapterLess.$pager(this, list, - R.layout.activity_main_list_item, - new AdapterLess.PageCallBack() { - @Override - public void instantiateItem(int position, View view, Person person) { - TextView nameView = ViewLess.$(view, R.id.name); - nameView.setText("page " + position + ":" + person.getName()); - } - }); - - viewPager.setAdapter(adapter); - } - - private void initData() { - list = new ArrayList<>(); - list.add(new Person("header")); - list.add(new Person("jay")); - list.add(new Person("bee")); - list.add(new Person("header")); - list.add(new Person("chras")); - list.add(new Person("nichid")); - } - -} diff --git a/app/src/main/java/com/jayfeng/lesscode/app/activity/adapterless/RecyclerAdapterActivity.java b/app/src/main/java/com/jayfeng/lesscode/app/activity/adapterless/RecyclerAdapterActivity.java deleted file mode 100644 index a9163ef..0000000 --- a/app/src/main/java/com/jayfeng/lesscode/app/activity/adapterless/RecyclerAdapterActivity.java +++ /dev/null @@ -1,115 +0,0 @@ -package com.jayfeng.lesscode.app.activity.adapterless; - -import android.app.Activity; -import android.graphics.Color; -import android.graphics.drawable.ColorDrawable; -import android.graphics.drawable.GradientDrawable; -import android.os.Bundle; -import android.support.v7.widget.GridLayoutManager; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.widget.TextView; - -import com.jayfeng.lesscode.app.R; -import com.jayfeng.lesscode.app.model.Person; -import com.jayfeng.lesscode.core.AdapterLess; -import com.jayfeng.lesscode.core.DisplayLess; -import com.jayfeng.lesscode.core.ViewLess; -import com.jayfeng.lesscode.core.other.DividerItemDecoration; - -import java.util.ArrayList; -import java.util.List; - -public class RecyclerAdapterActivity extends Activity { - - List list; - RecyclerView recyclerView; - RecyclerView.LayoutManager layoutManager; - RecyclerView.Adapter adapter; - DividerItemDecoration dividerItemDecoration; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_adapter_recycler); - recyclerView = ViewLess.$(this, R.id.recycler); - -// layoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false); - layoutManager = new GridLayoutManager(this, 4); - recyclerView.setLayoutManager(layoutManager); - dividerItemDecoration = new DividerItemDecoration(this, DividerItemDecoration.GRID_LIST, new ColorDrawable(Color.parseColor("#00000000"))); - dividerItemDecoration.setWidth(DisplayLess.$dp2px(4)); - dividerItemDecoration.setHeight(DisplayLess.$dp2px(4)); - - initData(); - - adapter = AdapterLess.$recycler(this, list, - R.layout.activity_main_list_item, - new AdapterLess.RecyclerCallBack() { - - @Override - public void onBindViewHolder(int position, AdapterLess.RecyclerViewHolder recyclerViewHolder, Person person) { - TextView nameView = recyclerViewHolder.$view(R.id.name); - nameView.setText(person.getName()); - } - }); - - recyclerView.setAdapter(adapter); - - recyclerView.addItemDecoration(dividerItemDecoration); - } - - private void initData() { - list = new ArrayList<>(); - list.add(new Person("header")); - list.add(new Person("jay")); - list.add(new Person("bee")); - list.add(new Person("header")); - list.add(new Person("chras")); - list.add(new Person("nichid")); - list.add(new Person("header")); - list.add(new Person("jay")); - list.add(new Person("bee")); - list.add(new Person("header")); - list.add(new Person("chras")); - list.add(new Person("nichid")); - list.add(new Person("header")); - list.add(new Person("jay")); - list.add(new Person("bee")); - list.add(new Person("header")); - list.add(new Person("chras")); - list.add(new Person("nichid")); - list.add(new Person("header")); - list.add(new Person("jay")); - list.add(new Person("bee")); - list.add(new Person("header")); - list.add(new Person("chras")); - list.add(new Person("nichid")); - list.add(new Person("header")); - list.add(new Person("jay")); - list.add(new Person("bee")); - list.add(new Person("header")); - list.add(new Person("chras")); - list.add(new Person("nichid")); - list.add(new Person("header")); - list.add(new Person("jay")); - list.add(new Person("bee")); - list.add(new Person("header")); - list.add(new Person("chras")); - list.add(new Person("nichid")); - list.add(new Person("header")); - list.add(new Person("jay")); - list.add(new Person("bee")); - list.add(new Person("header")); - list.add(new Person("chras")); - list.add(new Person("nichid")); - list.add(new Person("header")); - list.add(new Person("jay")); - list.add(new Person("bee")); - list.add(new Person("header")); - list.add(new Person("chras")); - list.add(new Person("nichid")); - list.add(new Person("nichid")); - } - -} diff --git a/app/src/main/res/layout/activity_main_list_item.xml b/app/src/main/res/layout/activity_main_list_item.xml index e36b1db..847d0ee 100644 --- a/app/src/main/res/layout/activity_main_list_item.xml +++ b/app/src/main/res/layout/activity_main_list_item.xml @@ -1,7 +1,6 @@ + android:layout_height="wrap_content"> r - * @return - */ - public static RecyclerView.Adapter $recycler(final Context context, - final List list, - final int layoutId, - final RecyclerCallBack recyclerCallBack) { - RecyclerView.Adapter result = new RecyclerView.Adapter() { - @Override - public RecyclerViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { - View view = LayoutInflater.from(context) - .inflate(layoutId, viewGroup, false); - RecyclerViewHolder recyclerViewHolder = new RecyclerViewHolder(view); - return recyclerViewHolder; - } - - @Override - public void onBindViewHolder(RecyclerViewHolder viewHolder, int position) { - T t = null; - if (position < list.size()) { - t = list.get(position); - } - recyclerCallBack.onBindViewHolder(position, viewHolder, t); - } - - @Override - public int getItemCount() { - if (list != null) { - return list.size(); - } - return 0; - } - }; - return result; - } - - /** - * 创建一个RecyclerView.Adapter - * 面向: RecyclerView - * 支持多布局,也多增加了两个回调方法,便于自定义: - * 1. getViewType - * - * @param context - * @param list model的列表 - * @param layoutIds 布局xml的id - * @param fullRecyclerCallBack 包含nBindViewHolder方法的回调 - * @param r - * @return - */ - public static RecyclerView.Adapter $recycler(final Context context, - final List list, - final int[] layoutIds, - final FullRecyclerCallBack fullRecyclerCallBack) { - RecyclerView.Adapter result = new RecyclerView.Adapter() { - @Override - public RecyclerViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { - View view = LayoutInflater.from(context) - .inflate(layoutIds[viewType], viewGroup, false); - RecyclerViewHolder recyclerViewHolder = new RecyclerViewHolder(view); - return recyclerViewHolder; - } - - @Override - public void onBindViewHolder(RecyclerViewHolder viewHolder, int position) { - T t = null; - if (position < list.size()) { - t = list.get(position); - } - fullRecyclerCallBack.onBindViewHolder(position, viewHolder, t); - } - - @Override - public int getItemCount() { - if (list != null) { - return list.size(); - } - return 0; - } - - @Override - public int getItemViewType(int position) { - return fullRecyclerCallBack.getItemViewType(position); - } - }; - return result; - } - - /** - * 创建BaseAdapter - * 面向: AbsListView - * 1. 抽象出重复代码,默认实现一些常规代码 - * 2. 封装了ViewHolder - * 3. 自动传递Model给getView - * - * @param context - * @param list model的列表 - * @param layoutId 布局xml的id - * @param callBack 包含getView方法的回调 - * @param - * @return - */ - public static BaseAdapter $base(final Context context, - final List list, - final int layoutId, - final CallBack callBack) { - - BaseAdapter result = new BaseAdapter() { - - @Override - public int getCount() { - if (list != null) { - return list.size(); - } - return 0; - } - - @Override - public T getItem(int position) { - return list.get(position); - } - - @Override - public long getItemId(int position) { - return 0; - } - - @Override - public View getView(int position, View convertView, ViewGroup parent) { - ViewHolder holder; - if (null == convertView) { - holder = new ViewHolder(); - convertView = LayoutInflater.from(context).inflate(layoutId, null); - convertView.setTag(holder); - } else { - holder = (ViewHolder) convertView.getTag(); - } - T t = null; - if (position < list.size()) { - t = getItem(position); - } - return callBack.getView(position, convertView, holder, t); - } - - }; - return result; - } - - - /** - * 同上,也是创建了BaseAdapter - * 面向: AbsListView - * 支持多布局,也多增加了两个回调方法,便于自定义: - * 1. getViewType - * 2. isEnabled - * - * @param context - * @param list model列表 - * @param layoutIds 布局xml的id数组 - * @param fullCallBack 包含getView,getViewType,isEnabled方法的回调 - * @param - * @return - */ - public static BaseAdapter $base(final Context context, - final List list, - final int[] layoutIds, - final FullCallBack fullCallBack) { - - BaseAdapter result = new BaseAdapter() { - - @Override - public int getCount() { - if (list != null) { - return list.size(); - } - return 0; - } - - @Override - public T getItem(int position) { - return list.get(position); - } - - @Override - public long getItemId(int position) { - return 0; - } - - @Override - public int getItemViewType(int position) { - return fullCallBack.getItemViewType(position); - } - - @Override - public int getViewTypeCount() { - return layoutIds.length; - } - - @Override - public boolean isEnabled(int position) { - return fullCallBack.isEnabled(position); - } - - @Override - public View getView(int position, View convertView, ViewGroup parent) { - ViewHolder[] holders = new ViewHolder[layoutIds.length]; - int i = getItemViewType(position); - if (null == convertView) { - holders[i] = new ViewHolder(); - convertView = LayoutInflater.from(context).inflate(layoutIds[i], null); - convertView.setTag(holders[i]); - } else { - holders[i] = (ViewHolder) convertView.getTag(); - } - T t = null; - if (position < list.size()) { - t = getItem(position); - } - return fullCallBack.getView(position, convertView, holders[i], t); - } - - }; - return result; - } - - /** - * 创建PagerAdapter - * 面向: ViewPager - * 主要是: - * 1. 抽象出重复代码,默认实现一些常规代码 - * 2. 封装了instantiateItem - * 3. 自动传递Model给getView - * - * @param context - * @param list - * @param layoutId - * @param pageCallBack - * @param - * @return - */ - public static PagerAdapter $pager(final Context context, - final List list, - final int layoutId, - final PageCallBack pageCallBack) { - PagerAdapter result = new PagerAdapter() { - - @Override - public int getCount() { - return list.size(); - } - - @Override - public boolean isViewFromObject(View view, Object object) { - return view == object; - } - - @Override - public Object instantiateItem(ViewGroup container, int position) { - View view = LayoutInflater.from(context).inflate(layoutId, null); - container.addView(view); - pageCallBack.instantiateItem(position, view, list.get(position)); - return view; - } - - @Override - public void destroyItem(ViewGroup container, int position, Object object) { - container.removeView((View) object); - } - }; - return result; - } - - /** - * 创建PagerAdapter - * 面向: ViewPager - * 主要是: - * 1. 增加destroyItem - * - * @param context - * @param list - * @param layoutId - * @param fullPageCallBack - * @param - * @return - */ - public static PagerAdapter $pager(final Context context, - final List list, - final int layoutId, - final FullPageCallBack fullPageCallBack) { - PagerAdapter result = new PagerAdapter() { - - @Override - public int getCount() { - return list.size(); - } - - @Override - public boolean isViewFromObject(View view, Object object) { - return view == object; - } - - @Override - public Object instantiateItem(ViewGroup container, int position) { - View view = LayoutInflater.from(context).inflate(layoutId, null); - container.addView(view); - fullPageCallBack.instantiateItem(position, view, list.get(position)); - return view; - } - - @Override - public void destroyItem(ViewGroup container, int position, Object object) { - container.removeView((View) object); - fullPageCallBack.destroyItem(container, position, object, list.get(position)); - } - }; - return result; - } - - public static PagerAdapter $pagerWithDataChanged(final Context context, - final List list, - final int layoutId, - final FullPageCallBack fullPageCallBack) { - PagerAdapter result = new PagerAdapter() { - - private int mChildCount = 0; - - @Override - public int getCount() { - return list.size(); - } - - @Override - public boolean isViewFromObject(View view, Object object) { - return view == object; - } - - @Override - public Object instantiateItem(ViewGroup container, int position) { - View view = LayoutInflater.from(context).inflate(layoutId, null); - container.addView(view); - fullPageCallBack.instantiateItem(position, view, list.get(position)); - return view; - } - - @Override - public void destroyItem(ViewGroup container, int position, Object object) { - container.removeView((View) object); - fullPageCallBack.destroyItem(container, position, object, list.get(position)); - } - - @Override - public int getItemPosition(Object object) { - if (mChildCount > 0) { - mChildCount--; - return POSITION_NONE; - } - return super.getItemPosition(object); - } - - @Override - public void notifyDataSetChanged() { - mChildCount = getCount(); - super.notifyDataSetChanged(); - } - }; - return result; - } - - /** - * 创建了FragmentPagerAdapter - * 面向: ViewPager - * 主要是: - * 1. 抽象出重复代码,默认实现getCount方法 - * - * @param fragmentManager - * @param count - * @param fragmentPagerCallBack - * @param - * @return - */ - public static FragmentPagerAdapter $pager(FragmentManager fragmentManager, - final int count, - final FragmentPagerCallBack fragmentPagerCallBack) { - FragmentPagerAdapter result = new FragmentPagerAdapter(fragmentManager) { - @Override - public Fragment getItem(int position) { - return fragmentPagerCallBack.getItem(position); - } - - @Override - public int getCount() { - return count; - } - }; - return result; - } - - /** - * 同上,创建了FragmentPagerAdapter - * 面向: ViewPager - * 通过getPageTitle回调方法支持fragment标题定义 - * 主要是: - * 1. 抽象出重复代码,默认实现getCount方法 - * - * @param fragmentManager - * @param count - * @param fullFragmentPagerCallBack - * @param - * @return - */ - public static FragmentPagerAdapter $pager(final FragmentManager fragmentManager, - final int count, - final FullFragmentPagerCallBack fullFragmentPagerCallBack) { - FragmentPagerAdapter result = new FragmentPagerAdapter(fragmentManager) { - @Override - public Fragment getItem(int position) { - return fullFragmentPagerCallBack.getItem(position); - } - - @Override - public int getCount() { - return count; - } - - @Override - public String getPageTitle(int position) { - return fullFragmentPagerCallBack.getPageTitle(position); - } - }; - return result; - } - - /** - * RecyclerCallBack - * - * @param - */ - public interface RecyclerCallBack { - void onBindViewHolder(int position, RecyclerViewHolder recyclerViewHolder, T t); - } - - /** - * RecyclerCallBack - * - * @param - */ - public interface FullRecyclerCallBack { - void onBindViewHolder(int position, RecyclerViewHolder recyclerViewHolder, T t); - - int getItemViewType(int position); - } - - /** - * 简化版本的$base的CallBack - * - * @param - */ - public interface CallBack { - View getView(int position, View convertView, ViewHolder holder, T t); - } - - /** - * 增强版本的$base的CallBack - * - * @param - */ - public interface FullCallBack { - View getView(int position, View convertView, ViewHolder holder, T t); - - int getItemViewType(int position); - - boolean isEnabled(int position); - } - - /** - * 简化版本的$pager的CallBack - * - * @param - */ - public interface PageCallBack { - void instantiateItem(int position, View view, T t); - } - - /** - * 简化版本的$pager的CallBack - * - * @param - */ - public interface FullPageCallBack { - void instantiateItem(int position, View view, T t); - - void destroyItem(ViewGroup container, int position, Object object, T t); - } - - /** - * 简化版本的$pager的CallBack(针对fragment) - */ - public interface FragmentPagerCallBack { - Fragment getItem(int position); - } - - /** - * 增强版本的$pager的CallBack(针对fragment) - */ - public interface FullFragmentPagerCallBack { - Fragment getItem(int position); - - String getPageTitle(int position); - } - - - /** - * ViewHolder类相当于一个享元模式的工厂类 - * 主要用了以下优化点: - * 1. 缓存了findViewById的view,如果已经创建,则直接返回,提高了性能 - * 2. 用SparseArray代替HashMap优化性能 - */ - public static class ViewHolder { - public SparseArray views = new SparseArray<>(); - - /** - * 从缓存里获取viewId对应的View - * - * @param convertView - * @param viewId - * @param - * @return - */ - public T $view(View convertView, int viewId) { - View v = views.get(viewId); - if (null == v) { - v = ViewLess.$(convertView, viewId); - views.put(viewId, v); - } - return (T) v; - } - } - - /** - * 单独封装了RecyclerView的ViewHolder - */ - public static class RecyclerViewHolder extends RecyclerView.ViewHolder { - public RecyclerViewHolder(View itemView) { - super(itemView); - } - - public T $view(int viewId) { - return ViewLess.$(itemView, viewId); - } - } -} diff --git a/lesscode-core/src/main/java/com/jayfeng/lesscode/core/ApplicationLess.java b/lesscode-core/src/main/java/com/jayfeng/lesscode/core/ApplicationLess.java index 7c13710..4a521bb 100644 --- a/lesscode-core/src/main/java/com/jayfeng/lesscode/core/ApplicationLess.java +++ b/lesscode-core/src/main/java/com/jayfeng/lesscode/core/ApplicationLess.java @@ -14,7 +14,7 @@ public final class ApplicationLess { * @param context * @return */ - private static boolean $init(Context context) { + public static boolean $init(Context context) { ActivityManager am = ((ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE)); List processInfos = am.getRunningAppProcesses(); String mainProcessName = context.getPackageName(); diff --git a/lesscode-core/src/main/java/com/jayfeng/lesscode/core/DeviceLess.java b/lesscode-core/src/main/java/com/jayfeng/lesscode/core/DeviceLess.java index b99a9ba..c226f7e 100644 --- a/lesscode-core/src/main/java/com/jayfeng/lesscode/core/DeviceLess.java +++ b/lesscode-core/src/main/java/com/jayfeng/lesscode/core/DeviceLess.java @@ -7,6 +7,7 @@ import java.io.File; import java.io.FileInputStream; +import java.io.IOException; /** * 设备相关的工具类 @@ -24,21 +25,41 @@ public final class DeviceLess { try { String path = "sys/class/net/wlan0/address"; if ((new File(path)).exists()) { - FileInputStream fis = new FileInputStream(path); - byte[] buffer = new byte[8192]; - int byteCount = fis.read(buffer); - if (byteCount > 0) { - result = new String(buffer, 0, byteCount, "utf-8"); + FileInputStream fis = null; + try { + fis = new FileInputStream(path); + byte[] buffer = new byte[8192]; + int byteCount = fis.read(buffer); + if (byteCount > 0) { + result = new String(buffer, 0, byteCount, "utf-8"); + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (fis != null) { + fis.close(); + } } + } if (TextUtils.isEmpty(result)) { path = "sys/class/net/eth0/address"; - FileInputStream fis_name = new FileInputStream(path); - byte[] buffer_name = new byte[8192]; - int byteCount_name = fis_name.read(buffer_name); - if (byteCount_name > 0) { - result = new String(buffer_name, 0, byteCount_name, "utf-8"); + FileInputStream fis_name = null; + try { + fis_name = new FileInputStream(path); + byte[] buffer_name = new byte[8192]; + int byteCount_name = fis_name.read(buffer_name); + if (byteCount_name > 0) { + result = new String(buffer_name, 0, byteCount_name, "utf-8"); + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (fis_name != null) { + fis_name.close(); + } } + } if (TextUtils.isEmpty(result)) { diff --git a/lesscode-core/src/main/java/com/jayfeng/lesscode/core/DisplayLess.java b/lesscode-core/src/main/java/com/jayfeng/lesscode/core/DisplayLess.java index 969d054..561a340 100644 --- a/lesscode-core/src/main/java/com/jayfeng/lesscode/core/DisplayLess.java +++ b/lesscode-core/src/main/java/com/jayfeng/lesscode/core/DisplayLess.java @@ -8,6 +8,7 @@ import android.graphics.Rect; import android.util.DisplayMetrics; import android.view.Window; +import android.view.WindowManager; import java.lang.reflect.Field; @@ -19,24 +20,26 @@ public final class DisplayLess { /** * 屏幕宽度 * - * @param activity + * @param context * @return */ - public static int $width(Activity activity) { + public static int $width(Context context) { DisplayMetrics displayMetrics = new DisplayMetrics(); - activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); + WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); + windowManager.getDefaultDisplay().getMetrics(displayMetrics); return displayMetrics.widthPixels; } /** * 屏幕高度 * - * @param activity + * @param context * @return */ - public static int $height(Activity activity) { + public static int $height(Context context) { DisplayMetrics displayMetrics = new DisplayMetrics(); - activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); + WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); + windowManager.getDefaultDisplay().getMetrics(displayMetrics); return displayMetrics.heightPixels; } diff --git a/lesscode-core/src/main/java/com/jayfeng/lesscode/core/HttpLess.java b/lesscode-core/src/main/java/com/jayfeng/lesscode/core/HttpLess.java index f0759ac..d0936f3 100644 --- a/lesscode-core/src/main/java/com/jayfeng/lesscode/core/HttpLess.java +++ b/lesscode-core/src/main/java/com/jayfeng/lesscode/core/HttpLess.java @@ -52,7 +52,12 @@ public final class HttpLess { String value = entry.getValue().toString(); conn.setRequestProperty(key, value); } - if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) { + if (conn.getResponseCode() == HttpURLConnection.HTTP_MOVED_PERM + || conn.getResponseCode()== HttpURLConnection.HTTP_MOVED_TEMP) { + // 重定向地址下载 + String redirectDownloadUrl = conn.getHeaderField("location"); + return $get(redirectDownloadUrl, header); + } else if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) { is = conn.getInputStream(); return FileLess.$read(is); } @@ -264,7 +269,12 @@ public void run() { String value = entry.getValue().toString(); conn.setRequestProperty(key, value); } - if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) { + if (conn.getResponseCode() == HttpURLConnection.HTTP_MOVED_PERM + || conn.getResponseCode()== HttpURLConnection.HTTP_MOVED_TEMP) { + // 重定向地址下载 + String redirectDownloadUrl = conn.getHeaderField("location"); + return $download(redirectDownloadUrl, dest, append, header, callBack); + } else if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) { is = conn.getInputStream(); remoteSize = conn.getContentLength(); String contentEndcoding = conn.getHeaderField("Content-Encoding"); @@ -293,10 +303,8 @@ public void run() { totalSize = 0; } } - } catch (IOException e) { - e.printStackTrace(); } catch (Exception e) { - e.printStackTrace(); + throw e; } finally { if (os != null) { os.close(); diff --git a/lesscode-core/src/main/java/com/jayfeng/lesscode/core/NetworkLess.java b/lesscode-core/src/main/java/com/jayfeng/lesscode/core/NetworkLess.java index 7024c49..c532f5a 100644 --- a/lesscode-core/src/main/java/com/jayfeng/lesscode/core/NetworkLess.java +++ b/lesscode-core/src/main/java/com/jayfeng/lesscode/core/NetworkLess.java @@ -60,6 +60,7 @@ public static enum NetworkType { if (type == ConnectivityManager.TYPE_MOBILE) { switch (subType) { case TelephonyManager.NETWORK_TYPE_GPRS: + case TelephonyManager.NETWORK_TYPE_GSM: case TelephonyManager.NETWORK_TYPE_EDGE: case TelephonyManager.NETWORK_TYPE_CDMA: case TelephonyManager.NETWORK_TYPE_1xRTT: @@ -75,10 +76,15 @@ public static enum NetworkType { case TelephonyManager.NETWORK_TYPE_EVDO_B: case TelephonyManager.NETWORK_TYPE_EHRPD: case TelephonyManager.NETWORK_TYPE_HSPAP: + case TelephonyManager.NETWORK_TYPE_TD_SCDMA: return NetworkType.MOBILE_MIDDLE;// 3G case TelephonyManager.NETWORK_TYPE_LTE: + case TelephonyManager.NETWORK_TYPE_IWLAN: + case 19: // TelephonyManager.NETWORK_TYPE_LTE_CA return NetworkType.MOBILE_FAST; // 4G + default: // we think the network will be more and more better + return NetworkType.MOBILE_FAST; } } diff --git a/lesscode-core/src/main/java/com/jayfeng/lesscode/core/SharedPreferenceLess.java b/lesscode-core/src/main/java/com/jayfeng/lesscode/core/SharedPreferenceLess.java index f110fff..88f75b1 100644 --- a/lesscode-core/src/main/java/com/jayfeng/lesscode/core/SharedPreferenceLess.java +++ b/lesscode-core/src/main/java/com/jayfeng/lesscode/core/SharedPreferenceLess.java @@ -10,8 +10,8 @@ public final class SharedPreferenceLess { public static final String SHARED_NAME = "shared_name"; - public static void $put(Context context, String key, T value) { - SharedPreferences sp = context.getSharedPreferences(SHARED_NAME, + public static void $put(String key, T value) { + SharedPreferences sp = $.sAppContext.getSharedPreferences(SHARED_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); @@ -37,46 +37,46 @@ public final class SharedPreferenceLess { SharedPreferencesCompat.apply(editor); } - public static String $get(Context context, String key, String defaultValue) { - SharedPreferences sp = context.getSharedPreferences(SHARED_NAME, + public static String $get(String key, String defaultValue) { + SharedPreferences sp = $.sAppContext.getSharedPreferences(SHARED_NAME, Context.MODE_PRIVATE); return sp.getString(key, defaultValue); } - public static boolean $get(Context context, String key, boolean defaultValue) { - SharedPreferences sp = context.getSharedPreferences(SHARED_NAME, + public static boolean $get(String key, boolean defaultValue) { + SharedPreferences sp = $.sAppContext.getSharedPreferences(SHARED_NAME, Context.MODE_PRIVATE); return sp.getBoolean(key, defaultValue); } - public static float $get(Context context, String key, float defaultValue) { - SharedPreferences sp = context.getSharedPreferences(SHARED_NAME, + public static float $get(String key, float defaultValue) { + SharedPreferences sp = $.sAppContext.getSharedPreferences(SHARED_NAME, Context.MODE_PRIVATE); return sp.getFloat(key, defaultValue); } - public static int $get(Context context, String key, int defaultValue) { - SharedPreferences sp = context.getSharedPreferences(SHARED_NAME, + public static int $get(String key, int defaultValue) { + SharedPreferences sp = $.sAppContext.getSharedPreferences(SHARED_NAME, Context.MODE_PRIVATE); return sp.getInt(key, defaultValue); } - public static long $get(Context context, String key, long defaultValue) { - SharedPreferences sp = context.getSharedPreferences(SHARED_NAME, + public static long $get(String key, long defaultValue) { + SharedPreferences sp = $.sAppContext.getSharedPreferences(SHARED_NAME, Context.MODE_PRIVATE); return sp.getLong(key, defaultValue); } - public static void $remove(Context context, String key) { - SharedPreferences sp = context.getSharedPreferences(SHARED_NAME, + public static void $remove(String key) { + SharedPreferences sp = $.sAppContext.getSharedPreferences(SHARED_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); editor.remove(key); SharedPreferencesCompat.apply(editor); } - public static void $clear(Context context) { - SharedPreferences sp = context.getSharedPreferences(SHARED_NAME, + public static void $clear() { + SharedPreferences sp = $.sAppContext.getSharedPreferences(SHARED_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); editor.clear(); diff --git a/lesscode-core/src/main/java/com/jayfeng/lesscode/core/StorageLess.java b/lesscode-core/src/main/java/com/jayfeng/lesscode/core/StorageLess.java index 8b046e9..d881dc2 100644 --- a/lesscode-core/src/main/java/com/jayfeng/lesscode/core/StorageLess.java +++ b/lesscode-core/src/main/java/com/jayfeng/lesscode/core/StorageLess.java @@ -186,17 +186,29 @@ public static class ExtSdcard { } private static long total(File path) { - StatFs stat = new StatFs(path.getPath()); - long blockSize = stat.getBlockSize(); - long totalBlocks = stat.getBlockCount(); - return blockSize * totalBlocks; + try { + StatFs stat = new StatFs(path.getPath()); + long blockSize = stat.getBlockSize(); + long totalBlocks = stat.getBlockCount(); + return blockSize * totalBlocks; + } catch (Exception e) { + e.printStackTrace(); + } + + return 0; } private static long free(File path) { - StatFs stat = new StatFs(path.getPath()); - long blockSize = stat.getBlockSize(); - long freeBlocks = stat.getAvailableBlocks(); - return blockSize * freeBlocks; + try { + StatFs stat = new StatFs(path.getPath()); + long blockSize = stat.getBlockSize(); + long freeBlocks = stat.getAvailableBlocks(); + return blockSize * freeBlocks; + } catch (Exception e) { + e.printStackTrace(); + } + + return 0; } private static long used(File path) { diff --git a/lesscode-core/src/main/java/com/jayfeng/lesscode/core/ToastLess.java b/lesscode-core/src/main/java/com/jayfeng/lesscode/core/ToastLess.java index 31e5005..c28d5b9 100644 --- a/lesscode-core/src/main/java/com/jayfeng/lesscode/core/ToastLess.java +++ b/lesscode-core/src/main/java/com/jayfeng/lesscode/core/ToastLess.java @@ -8,12 +8,21 @@ */ public final class ToastLess { + @Deprecated public static void $(Context context, String message) { Toast.makeText(context.getApplicationContext(), message, Toast.LENGTH_SHORT).show(); } + @Deprecated public static void $(Context context, int stringId) { Toast.makeText(context.getApplicationContext(), stringId, Toast.LENGTH_SHORT).show(); } + public static void $(String message) { + Toast.makeText($.sAppContext, message, Toast.LENGTH_SHORT).show(); + } + + public static void $(int stringId) { + Toast.makeText($.sAppContext, stringId, Toast.LENGTH_SHORT).show(); + } } diff --git a/lesscode-core/src/main/java/com/jayfeng/lesscode/core/other/ViewThrottleClickListener.java b/lesscode-core/src/main/java/com/jayfeng/lesscode/core/other/ViewThrottleClickListener.java index daf412d..98a1cb9 100644 --- a/lesscode-core/src/main/java/com/jayfeng/lesscode/core/other/ViewThrottleClickListener.java +++ b/lesscode-core/src/main/java/com/jayfeng/lesscode/core/other/ViewThrottleClickListener.java @@ -14,6 +14,7 @@ public abstract class ViewThrottleClickListener implements View.OnClickListener public long getThrottleTime() { return THROTTLE_TIME_DEFAULT; } + public void discardClick() {} public abstract void throttleClick(View view); @@ -23,6 +24,8 @@ public void onClick(View v) { if (currentTime - mLastClickTime > getThrottleTime()) { mLastClickTime = currentTime; throttleClick(v); + } else { + discardClick(); } } }