diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..78a0eaa
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,15 @@
+language: android
+android:
+ components:
+ # Uncomment the lines below if you want to
+ # use the latest revision of Android SDK Tools
+ # - platform-tools
+ # - tools
+
+ # The BuildTools version used by your project
+ - tools
+ - build-tools-23.0.2
+
+ # The SDK version used to compile your project
+ - android-23
+ - extra-android-m2repository
diff --git a/README-cn.md b/README-cn.md
index 9ec97d2..2b151f5 100644
--- a/README-cn.md
+++ b/README-cn.md
@@ -1,4 +1,4 @@
-# LessCode [](https://bintray.com/openproject/maven/lesscode)
+# LessCode [](https://bintray.com/openproject/maven/lesscode) [](https://travis-ci.org/openproject/LessCode)
打造精简、高效的最好Android工具库!
@@ -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 2b92b06..c5f87c8 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,10 @@
#### [中文版文档](https://github.com/openproject/LessCode/blob/master/README-cn.md)
-# LessCode [](https://bintray.com/openproject/maven/lesscode)
+[](https://bintray.com/openproject/maven/lesscode)
+[](https://travis-ci.org/openproject/LessCode)
+[![MethodCount][methodcount-svg]][methodcount-link]
+# LessCode
less code, more efficient for android, for the best android tools library!
## Overview
@@ -9,18 +12,13 @@ less code, more efficient for android, for the best android tools library!
> * support more effective methods than android
> * high performence
> * easy integration
-> * small size (less than 50k, only 45k+ by proguard)
+> * small size (only 45k~ by proguard)
> * open source
## 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
@@ -47,7 +45,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
@@ -128,3 +126,5 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
```
+[methodcount-svg]: https://img.shields.io/badge/Methodscount-717-e91e63.svg
+[methodcount-link]: http://www.methodscount.com/?lib=com.jayfeng%3Alesscode-core%3A0.9.6.1
diff --git a/app-ref-lesscode-core/.gitignore b/app-ref-lesscode-core/.gitignore
deleted file mode 100644
index 796b96d..0000000
--- a/app-ref-lesscode-core/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/build
diff --git a/app-ref-lesscode-core/build.gradle b/app-ref-lesscode-core/build.gradle
deleted file mode 100644
index c26e719..0000000
--- a/app-ref-lesscode-core/build.gradle
+++ /dev/null
@@ -1,29 +0,0 @@
-apply plugin: 'com.android.application'
-
-android {
- compileSdkVersion 23
- buildToolsVersion "23.0.2"
-
- defaultConfig {
- applicationId "com.jayfeng.lesscode.app.ref.lesscodecore"
- minSdkVersion 9
- targetSdkVersion 23
- versionCode 1
- versionName "1.0"
- }
- buildTypes {
- release {
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
- }
- }
-}
-
-dependencies {
- compile fileTree(dir: 'libs', include: ['*.jar'])
- compile 'com.android.support:appcompat-v7:23.2.1'
- compile('com.jayfeng:lesscode-core:0.7.8') {
- exclude group: 'com.android.support', module: 'support-v4'
- exclude group: 'com.android.support', module: 'appcompat-v7'
- }
-}
diff --git a/app-ref-lesscode-core/proguard-rules.pro b/app-ref-lesscode-core/proguard-rules.pro
deleted file mode 100644
index 3ffecd2..0000000
--- a/app-ref-lesscode-core/proguard-rules.pro
+++ /dev/null
@@ -1,17 +0,0 @@
-# Add project specific ProGuard rules here.
-# By default, the flags in this file are appended to flags specified
-# in /home/jay/tools/android-sdk/tools/proguard/proguard-android.txt
-# You can edit the include path and order by changing the proguardFiles
-# directive in build.gradle.
-#
-# For more details, see
-# http://developer.android.com/guide/developing/tools/proguard.html
-
-# Add any project specific keep options here:
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-# public *;
-#}
diff --git a/app-ref-lesscode-core/src/androidTest/java/com/jayfeng/lesscode/app/ref/lesscodecore/ApplicationTest.java b/app-ref-lesscode-core/src/androidTest/java/com/jayfeng/lesscode/app/ref/lesscodecore/ApplicationTest.java
deleted file mode 100644
index 2a9b149..0000000
--- a/app-ref-lesscode-core/src/androidTest/java/com/jayfeng/lesscode/app/ref/lesscodecore/ApplicationTest.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.jayfeng.lesscode.app.ref.lesscodecore;
-
-import android.app.Application;
-import android.test.ApplicationTestCase;
-
-/**
- * Testing Fundamentals
- */
-public class ApplicationTest extends ApplicationTestCase {
- public ApplicationTest() {
- super(Application.class);
- }
-}
\ No newline at end of file
diff --git a/app-ref-lesscode-core/src/main/AndroidManifest.xml b/app-ref-lesscode-core/src/main/AndroidManifest.xml
deleted file mode 100644
index b52f528..0000000
--- a/app-ref-lesscode-core/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app-ref-lesscode-core/src/main/java/com/jayfeng/lesscode/app/ref/lesscodecore/MainActivity.java b/app-ref-lesscode-core/src/main/java/com/jayfeng/lesscode/app/ref/lesscodecore/MainActivity.java
deleted file mode 100644
index 6fcff14..0000000
--- a/app-ref-lesscode-core/src/main/java/com/jayfeng/lesscode/app/ref/lesscodecore/MainActivity.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package com.jayfeng.lesscode.app.ref.lesscodecore;
-
-import android.app.Activity;
-import android.os.Bundle;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.widget.TextView;
-
-import com.jayfeng.lesscode.core.AdapterLess;
-import com.jayfeng.lesscode.core.ToastLess;
-import com.jayfeng.lesscode.core.ViewLess;
-
-import java.util.ArrayList;
-import java.util.List;
-
-
-public class MainActivity extends Activity {
-
- private TextView textView;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
-
- textView = ViewLess.$(this, R.id.text);
-
- ToastLess.$(this, textView.getText().toString());
-
- List list = new ArrayList<>();
- list.add("A");
- list.add("B");
-
-
- AdapterLess.$pager(this, list, R.layout.activity_main, new AdapterLess.PageCallBack() {
- @Override
- public void instantiateItem(int i, View view, Object o) {
-
- }
- });
- }
-
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- // Inflate the menu; this adds items to the action bar if it is present.
- getMenuInflater().inflate(R.menu.menu_main, menu);
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- // Handle action bar item clicks here. The action bar will
- // automatically handle clicks on the Home/Up button, so long
- // as you specify a parent activity in AndroidManifest.xml.
- int id = item.getItemId();
-
- //noinspection SimplifiableIfStatement
- if (id == R.id.action_settings) {
- return true;
- }
-
- return super.onOptionsItemSelected(item);
- }
-}
diff --git a/app-ref-lesscode-core/src/main/res/layout/activity_main.xml b/app-ref-lesscode-core/src/main/res/layout/activity_main.xml
deleted file mode 100644
index cb4b9cb..0000000
--- a/app-ref-lesscode-core/src/main/res/layout/activity_main.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
diff --git a/app-ref-lesscode-core/src/main/res/menu/menu_main.xml b/app-ref-lesscode-core/src/main/res/menu/menu_main.xml
deleted file mode 100644
index c24a41e..0000000
--- a/app-ref-lesscode-core/src/main/res/menu/menu_main.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
diff --git a/app-ref-lesscode-core/src/main/res/mipmap-hdpi/ic_launcher.png b/app-ref-lesscode-core/src/main/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index cde69bc..0000000
Binary files a/app-ref-lesscode-core/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ
diff --git a/app-ref-lesscode-core/src/main/res/mipmap-mdpi/ic_launcher.png b/app-ref-lesscode-core/src/main/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index c133a0c..0000000
Binary files a/app-ref-lesscode-core/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ
diff --git a/app-ref-lesscode-core/src/main/res/mipmap-xhdpi/ic_launcher.png b/app-ref-lesscode-core/src/main/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index bfa42f0..0000000
Binary files a/app-ref-lesscode-core/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/app-ref-lesscode-core/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app-ref-lesscode-core/src/main/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index 324e72c..0000000
Binary files a/app-ref-lesscode-core/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/app-ref-lesscode-core/src/main/res/values-w820dp/dimens.xml b/app-ref-lesscode-core/src/main/res/values-w820dp/dimens.xml
deleted file mode 100644
index 63fc816..0000000
--- a/app-ref-lesscode-core/src/main/res/values-w820dp/dimens.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- 64dp
-
diff --git a/app-ref-lesscode-core/src/main/res/values/dimens.xml b/app-ref-lesscode-core/src/main/res/values/dimens.xml
deleted file mode 100644
index 47c8224..0000000
--- a/app-ref-lesscode-core/src/main/res/values/dimens.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
- 16dp
- 16dp
-
diff --git a/app-ref-lesscode-core/src/main/res/values/strings.xml b/app-ref-lesscode-core/src/main/res/values/strings.xml
deleted file mode 100644
index 8878ed6..0000000
--- a/app-ref-lesscode-core/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
- AppRef-LesscodeCore
-
- Hello world!
- Settings
-
diff --git a/app-ref-lesscode-core/src/main/res/values/styles.xml b/app-ref-lesscode-core/src/main/res/values/styles.xml
deleted file mode 100644
index 9812b28..0000000
--- a/app-ref-lesscode-core/src/main/res/values/styles.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
diff --git a/app/build.gradle b/app/build.gradle
index f0b6b51..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"
}
@@ -17,6 +17,10 @@ android {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
+
+ lintOptions {
+ abortOnError false
+ }
}
dependencies {
diff --git a/app/src/androidTest/java/com/jayfeng/lesscode/app/ApplicationTest.java b/app/src/androidTest/java/com/jayfeng/lesscode/app/ApplicationTest.java
deleted file mode 100644
index c8260ef..0000000
--- a/app/src/androidTest/java/com/jayfeng/lesscode/app/ApplicationTest.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.jayfeng.lesscode.app;
-
-import android.app.Application;
-import android.test.ApplicationTestCase;
-
-/**
- * Testing Fundamentals
- */
-public class ApplicationTest extends ApplicationTestCase {
- public ApplicationTest() {
- super(Application.class);
- }
-}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 6023813..dfbd8b5 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -6,7 +6,6 @@
@@ -25,9 +24,6 @@
-
@@ -37,9 +33,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 b341140..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");
@@ -165,11 +185,6 @@ private void initData() {
lessItem.setClassName("ToastActivity");
list.add(lessItem);
- lessItem = new LessItem();
- lessItem.setName("UpdateLess的使用");
- lessItem.setClassName("UpdateActivity");
- list.add(lessItem);
-
lessItem = new LessItem();
lessItem.setName("ViewLess的使用");
lessItem.setClassName("ViewActivity");
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/UpdateActivity.java b/app/src/main/java/com/jayfeng/lesscode/app/activity/UpdateActivity.java
deleted file mode 100644
index 3dbb731..0000000
--- a/app/src/main/java/com/jayfeng/lesscode/app/activity/UpdateActivity.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.jayfeng.lesscode.app.activity;
-
-import android.app.Activity;
-import android.os.Bundle;
-
-import com.jayfeng.lesscode.app.R;
-import com.jayfeng.lesscode.core.UpdateLess;
-
-public class UpdateActivity extends Activity {
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_update);
-
- String updateJson = "{\n" +
- " \"vercode\":112,\n" +
- " \"vername\":\"V1.1\",\n" +
- " \"download\":\"http://www.apk.anzhi.com/data3/apk/201506/09/3a978f27369b4a8bf6de1270da9871ec_86281300.apk\",\n" +
- " \"log\":\"upgrade content\"\n" +
- " }";
- UpdateLess.$check(this, updateJson);
- }
-}
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 8362bbd..0000000
--- a/app/src/main/java/com/jayfeng/lesscode/app/activity/adapterless/RecyclerAdapterActivity.java
+++ /dev/null
@@ -1,69 +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.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);
- recyclerView.setLayoutManager(layoutManager);
- dividerItemDecoration = new DividerItemDecoration(this, DividerItemDecoration.HORIZONTAL_LIST, getResources().getDrawable(R.drawable.list_divider));
- dividerItemDecoration.setWidth(DisplayLess.$dp2px(16) + 1);
-
- 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"));
- }
-
-}
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 ca83f07..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,5 +1,5 @@
Testing Fundamentals
- */
-public class ApplicationTest extends ApplicationTestCase {
- public ApplicationTest() {
- super(Application.class);
- }
-}
\ No newline at end of file
diff --git a/lesscode-core/src/main/AndroidManifest.xml b/lesscode-core/src/main/AndroidManifest.xml
index a015d3a..25dc021 100644
--- a/lesscode-core/src/main/AndroidManifest.xml
+++ b/lesscode-core/src/main/AndroidManifest.xml
@@ -8,9 +8,6 @@
-
-
-
-
+
diff --git a/lesscode-core/src/main/java/com/jayfeng/lesscode/core/AdapterLess.java b/lesscode-core/src/main/java/com/jayfeng/lesscode/core/AdapterLess.java
deleted file mode 100644
index b13271a..0000000
--- a/lesscode-core/src/main/java/com/jayfeng/lesscode/core/AdapterLess.java
+++ /dev/null
@@ -1,462 +0,0 @@
-package com.jayfeng.lesscode.core;
-
-import android.content.Context;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentPagerAdapter;
-import android.support.v4.view.PagerAdapter;
-import android.support.v7.widget.RecyclerView;
-import android.util.SparseArray;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.BaseAdapter;
-
-import java.util.List;
-
-/**
- * 适配器简化相关的工具类
- * 常用于:ListView,ViewPager,RecyclerView
- */
-public final class AdapterLess {
-
- /**
- * 创建一个RecyclerView.Adapter
- * 面向: RecyclerView
- * 主要是:
- * 1. 抽象出重复代码,默认实现一些常规代码
- * 2. 封装了RecyclerViewHolder
- * 3. 自动传递Model给getView
- * @param context
- * @param list model的列表
- * @param layoutId 布局xml的id
- * @param recyclerCallBack 包含nBindViewHolder方法的回调
- * @param 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;
- }
-
- /**
- * 创建了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(针对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
new file mode 100644
index 0000000..4a521bb
--- /dev/null
+++ b/lesscode-core/src/main/java/com/jayfeng/lesscode/core/ApplicationLess.java
@@ -0,0 +1,29 @@
+package com.jayfeng.lesscode.core;
+
+import android.app.ActivityManager;
+import android.content.Context;
+import android.os.Process;
+
+import java.util.List;
+
+public final class ApplicationLess {
+
+ /**
+ * 根据进程名称判断第一次真正的初始化
+ *
+ * @param context
+ * @return
+ */
+ public static boolean $init(Context context) {
+ ActivityManager am = ((ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE));
+ List processInfos = am.getRunningAppProcesses();
+ String mainProcessName = context.getPackageName();
+ int myPid = Process.myPid();
+ for (ActivityManager.RunningAppProcessInfo info : processInfos) {
+ if (info.pid == myPid && mainProcessName.equals(info.processName)) {
+ return true;
+ }
+ }
+ return false;
+ }
+}
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 ba73365..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;
@@ -18,28 +19,33 @@ 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;
}
/**
* dp转px
+ *
* @param dp
* @return
*/
@@ -47,9 +53,21 @@ public final class DisplayLess {
return (int) (dp * Resources.getSystem().getDisplayMetrics().density);
}
+ /**
+ * sp转px
+ *
+ * @param sp
+ * @return
+ */
+ public static int $sp2px(float sp) {
+ float scale = Resources.getSystem().getDisplayMetrics().scaledDensity;
+ return (int) (sp * scale + 0.5f);
+ }
+
/**
* 获取状态栏高度
* 注: 该方法在onCreate中获取值为0
+ *
* @param activity
* @return
*/
@@ -62,6 +80,7 @@ public final class DisplayLess {
/**
* 获取状态栏高度
* 注: 该方法在onCreate中获取值为0
+ *
* @param resources
* @return
*/
@@ -77,7 +96,7 @@ public final class DisplayLess {
field = c.getField("status_bar_height");
x = Integer.parseInt(field.get(obj).toString());
statusBarHeight = resources.getDimensionPixelSize(x);
- } catch(Exception e) {
+ } catch (Exception e) {
e.printStackTrace();
}
return statusBarHeight;
@@ -85,6 +104,7 @@ public final class DisplayLess {
/**
* 获取标题栏高度
+ *
* @param activity
* @return
*/
@@ -96,6 +116,7 @@ public final class DisplayLess {
/**
* 是否为平板
+ *
* @param context
* @return
*/
@@ -111,22 +132,31 @@ public final class DisplayLess {
* 各大设备密度判断
* ****************************
*/
- public static boolean isLdpi() {
+ public static boolean $ldpi() {
return $.sAppContext.getResources().getBoolean(R.bool.less_ldpi);
}
- public static boolean isMdpi() {
+
+ public static boolean $mdpi() {
return $.sAppContext.getResources().getBoolean(R.bool.less_mdpi);
}
- public static boolean isTVdpi() {
+
+ public static boolean $tvdpi() {
return $.sAppContext.getResources().getBoolean(R.bool.less_tvdpi);
}
- public static boolean isHdpi() {
+
+ public static boolean $hdpi() {
return $.sAppContext.getResources().getBoolean(R.bool.less_hdpi);
}
- public static boolean isXHdpi() {
+
+ public static boolean $xhdpi() {
return $.sAppContext.getResources().getBoolean(R.bool.less_xhdpi);
}
- public static boolean isXXHdpi() {
+
+ public static boolean $xxhdpi() {
return $.sAppContext.getResources().getBoolean(R.bool.less_xxhdpi);
}
+
+ public static boolean $xxxhdpi() {
+ return $.sAppContext.getResources().getBoolean(R.bool.less_xxxhdpi);
+ }
}
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/UpdateLess.java b/lesscode-core/src/main/java/com/jayfeng/lesscode/core/UpdateLess.java
deleted file mode 100644
index 467426a..0000000
--- a/lesscode-core/src/main/java/com/jayfeng/lesscode/core/UpdateLess.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package com.jayfeng.lesscode.core;
-
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-
-import org.json.JSONException;
-import org.json.JSONObject;
-
-/**
- * 检查更新工具类
- * {
- * "vercode":1,
- * "vername":"v1.1",
- * "download":"http://www.jayfeng.com/lesscode-app.apk",
- * "log":"upgrade content"
- * }
- */
-public final class UpdateLess {
-
- /**
- * 解析json和本地信息比较,判断是否有更新
- * @return 有更新则返回true,否则返回false
- */
- public static boolean $check(final Context context, String updateJson) {
- int vercode = 0;
- String vername = "";
- String log = "";
- String download;
-
- JSONObject jsonObject;
- try {
- jsonObject = new JSONObject(updateJson);
- vercode = jsonObject.optInt("vercode");
- vername = jsonObject.optString("vername");
- download = jsonObject.optString("download");
- log = jsonObject.optString("log");
- } catch (JSONException e) {
- e.printStackTrace();
- return false;
- }
-
- return $check(context, vercode, vername, download, log);
- }
-
- /**
- * 根据解析的结果来比较是否有更新
- * @param context
- * @param vercode
- * @param vername
- * @param download
- * @param log
- * @return
- */
- public static boolean $check(final Context context,
- int vercode,
- String vername,
- final String download,
- String log) {
- // 无更新
- if (!$hasUpdate(vercode)) {
- return false;
- }
-
- // 有更新,则弹出对话框告知用户
- new AlertDialog.Builder(context)
- .setTitle(context.getString(R.string.less_app_download_dialog_title) + vername)
- .setMessage(log)
- .setNegativeButton(android.R.string.cancel, null)
- .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- Intent intent = new Intent(context, UpdateService.class);
- intent.putExtra($.KEY_DOWNLOAD_URL, download);
- context.startService(intent);
- }
- }).show();
-
- return true;
- }
-
- /**
- * 根据版本判断是否有更新
- * @param vercode
- * @return
- */
- public static boolean $hasUpdate(int vercode) {
- if (vercode <= AppLess.$vercode()) {
- return false;
- }
- return true;
- }
-
- /**
- * 启动下载服务,开始下载APK文件
- * @param context
- * @param download
- */
- public static void $download(Context context, String download) {
- Intent intent = new Intent(context, UpdateService.class);
- intent.putExtra($.KEY_DOWNLOAD_URL, download);
- context.startService(intent);
- }
-}
diff --git a/lesscode-core/src/main/java/com/jayfeng/lesscode/core/UpdateService.java b/lesscode-core/src/main/java/com/jayfeng/lesscode/core/UpdateService.java
deleted file mode 100644
index 97da256..0000000
--- a/lesscode-core/src/main/java/com/jayfeng/lesscode/core/UpdateService.java
+++ /dev/null
@@ -1,268 +0,0 @@
-package com.jayfeng.lesscode.core;
-
-import android.app.Notification;
-import android.app.NotificationManager;
-import android.app.PendingIntent;
-import android.app.Service;
-import android.content.Intent;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager;
-import android.net.Uri;
-import android.os.Environment;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.Message;
-import android.text.TextUtils;
-import android.view.View;
-import android.widget.RemoteViews;
-import android.widget.Toast;
-
-import java.io.File;
-import java.net.URLEncoder;
-
-/**
- * 检查更新后台下载服务
- */
-public class UpdateService extends Service {
-
- private static final int DOWNLOAD_STATE_FAILURE = -1;
- private static final int DOWNLOAD_STATE_SUCCESS = 0;
- private static final int DOWNLOAD_STATE_START = 1;
- private static final int DOWNLOAD_STATE_INSTALL = 2;
- private static final int DOWNLOAD_STATE_ERROR_SDCARD = 3;
- private static final int DOWNLOAD_STATE_ERROR_URL = 4;
-
- private static final int NOTIFICATION_ID = 3956;
- private NotificationManager mNotificationManager = null;
- private Notification mNotification = null;
- private PendingIntent mPendingIntent = null;
-
- private String mDownloadSDPath;
- private String mDownloadUrl;
- private File mDestDir;
- private File mDestFile;
-
- private boolean mIsDownloading = false;
-
- private Handler.Callback mHandlerCallBack = new Handler.Callback() {
- @Override
- public boolean handleMessage(Message msg) {
- switch (msg.what) {
- case DOWNLOAD_STATE_SUCCESS:
- Toast.makeText(getApplicationContext(), R.string.less_app_download_success, Toast.LENGTH_LONG).show();
- install(mDestFile);
- break;
- case DOWNLOAD_STATE_FAILURE:
- Toast.makeText(getApplicationContext(), R.string.less_app_download_failure, Toast.LENGTH_LONG).show();
- mNotificationManager.cancel(NOTIFICATION_ID);
- break;
- case DOWNLOAD_STATE_START:
- Toast.makeText(getApplicationContext(), R.string.less_app_download_start, Toast.LENGTH_LONG).show();
- break;
- case DOWNLOAD_STATE_INSTALL:
- Toast.makeText(getApplicationContext(), R.string.less_app_download_install, Toast.LENGTH_LONG).show();
- break;
- case DOWNLOAD_STATE_ERROR_SDCARD:
- Toast.makeText(getApplicationContext(), R.string.less_app_download_error_sdcard, Toast.LENGTH_LONG).show();
- break;
- case DOWNLOAD_STATE_ERROR_URL:
- Toast.makeText(getApplicationContext(), R.string.less_app_download_error_url, Toast.LENGTH_LONG).show();
- break;
- default:
- break;
- }
- return true;
- }
- };
- private Handler mHandler = new Handler(mHandlerCallBack);
-
- private HttpLess.DownloadCallBack mDownloadCallBack = new HttpLess.DownloadCallBack() {
-
- @Override
- public void onDownloading(int progress) {
- if (progress % $.sNotificationFrequent == 0 || progress == 1 || progress == 100) {
- mNotification.contentView.setProgressBar(R.id.less_app_update_progressbar, 100, progress, false);
- mNotification.contentView.setTextViewText(R.id.less_app_update_progress_text, progress + "%");
- mNotificationManager.notify(NOTIFICATION_ID, mNotification);
- }
- }
-
- @Override
- public void onDownloaded() {
- mNotification.contentView.setViewVisibility(R.id.less_app_update_progress_block, View.GONE);
- mNotification.defaults = Notification.DEFAULT_SOUND;
- mNotification.contentIntent = mPendingIntent;
- mNotification.contentView.setTextViewText(R.id.less_app_update_progress_text, getText(R.string.less_app_download_notification_success));
- mNotificationManager.notify(NOTIFICATION_ID, mNotification);
- if (mDestFile.exists() && mDestFile.isFile() && checkApkFile(mDestFile.getPath())) {
- Message msg = mHandler.obtainMessage();
- msg.what = DOWNLOAD_STATE_SUCCESS;
- mHandler.sendMessage(msg);
- }
- mNotificationManager.cancel(NOTIFICATION_ID);
- }
- };
-
- @Override
- public int onStartCommand(Intent intent, int flags, int startId) {
-
- // check downloading state
- if (mIsDownloading) {
- ToastLess.$(this, R.string.less_app_download_downloading);
- return super.onStartCommand(intent, flags, startId);
- }
-
- mDownloadUrl = intent.getStringExtra($.KEY_DOWNLOAD_URL);
- if (TextUtils.isEmpty($.sDownloadSDPath)) {
- mDownloadSDPath = getPackageName() + "/download";
- } else {
- mDownloadSDPath = $.sDownloadSDPath;
- }
-
- if (TextUtils.isEmpty(mDownloadUrl)) {
- sendMessage(DOWNLOAD_STATE_ERROR_URL);
- return super.onStartCommand(intent, flags, startId);
- }
-
- if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
- mDestDir = new File(Environment.getExternalStorageDirectory().getPath()
- + "/" + mDownloadSDPath);
- if (mDestDir.exists()) {
- File destFile = new File(mDestDir.getPath() + "/" + URLEncoder.encode(mDownloadUrl));
- if (destFile.exists() && destFile.isFile() && checkApkFile(destFile.getPath())) {
-
- sendMessage(DOWNLOAD_STATE_INSTALL);
- install(destFile);
- stopSelf();
- return super.onStartCommand(intent, flags, startId);
- }
- }
- } else {
- sendMessage(DOWNLOAD_STATE_ERROR_SDCARD);
- return super.onStartCommand(intent, flags, startId);
- }
-
- mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
- mNotification = new Notification();
-
- mNotification.contentView = new RemoteViews(getApplication().getPackageName(), R.layout.less_app_update_notification);
-
- Intent completingIntent = new Intent();
- completingIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
- completingIntent.setClass(getApplicationContext(), UpdateService.class);
-
- mPendingIntent = PendingIntent.getActivity(UpdateService.this, R.string.less_app_name, completingIntent, PendingIntent.FLAG_UPDATE_CURRENT);
-
- mNotification.icon = $.sUpdateIcon != 0 ? $.sUpdateIcon : R.drawable.less_app_update_icon;
- mNotification.tickerText = getText(R.string.less_app_download_notification_start);
- mNotification.contentIntent = mPendingIntent;
- mNotification.contentView.setProgressBar(R.id.less_app_update_progressbar, 100, 0, false);
- mNotification.contentView.setTextViewText(R.id.less_app_update_progress_text, "0%");
- if ($.sUpdateIcon != 0) {
- mNotification.contentView.setImageViewResource(R.id.less_app_update_progress_icon, $.sUpdateIcon);
- }
- mNotificationManager.cancel(NOTIFICATION_ID);
- mNotificationManager.notify(NOTIFICATION_ID, mNotification);
-
- // 启动线程开始下载
- new UpdateThread().start();
-
- return super.onStartCommand(intent, flags, startId);
- }
-
- /**
- * 检查apk文件是否有效(是正确下载,没有损坏的)
- * @param apkFilePath
- * @return
- */
- public boolean checkApkFile(String apkFilePath) {
- boolean result;
- try {
- PackageManager pManager = getPackageManager();
- PackageInfo pInfo = pManager.getPackageArchiveInfo(apkFilePath, PackageManager.GET_ACTIVITIES);
- if (pInfo == null) {
- result = false;
- } else {
- result = true;
- }
- } catch (Exception e) {
- result = false;
- e.printStackTrace();
- }
- return result;
- }
-
- /**
- * 调用系统Intent安装apk包
- * @param apkFile
- */
- private void install(File apkFile) {
- Uri uri = Uri.fromFile(apkFile);
- Intent intent = new Intent(Intent.ACTION_VIEW);
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- intent.setDataAndType(uri, "application/vnd.android.package-archive");
- startActivity(intent);
- }
-
- private void sendMessage(int what) {
- Message msg = mHandler.obtainMessage();
- msg.what = what;
- mHandler.sendMessage(msg);
- }
-
- @Override
- public IBinder onBind(Intent intent) {
- return null;
- }
-
- @Override
- public void onDestroy() {
- super.onDestroy();
- mHandler.removeCallbacksAndMessages(null);
- }
-
- /**
- * 下载线程
- */
- class UpdateThread extends Thread {
-
- @Override
- public void run() {
- if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
- if (mDestDir == null) {
- mDestDir = new File(Environment.getExternalStorageDirectory().getPath()
- + "/" + mDownloadSDPath);
- }
-
- if (mDestDir.exists() && !mDestDir.isDirectory()) {
- mDestDir.delete();
- }
-
- if (mDestDir.exists() || mDestDir.mkdirs()) {
- mDestFile = new File(mDestDir.getPath()
- + "/" + URLEncoder.encode(mDownloadUrl));
-
- if (mDestFile.exists()
- && mDestFile.isFile()
- && checkApkFile(mDestFile.getPath())) {
- sendMessage(DOWNLOAD_STATE_INSTALL);
- install(mDestFile);
- } else {
- try {
- sendMessage(DOWNLOAD_STATE_START);
- mIsDownloading = true;
- HttpLess.$download(mDownloadUrl, mDestFile, false, mDownloadCallBack);
- } catch (Exception e) {
- sendMessage(DOWNLOAD_STATE_FAILURE);
- e.printStackTrace();
- }
- }
- }
- } else {
- sendMessage(DOWNLOAD_STATE_ERROR_SDCARD);
- }
- mIsDownloading = false;
- stopSelf();
- }
- }
-}
diff --git a/lesscode-core/src/main/java/com/jayfeng/lesscode/core/other/DividerItemDecoration.java b/lesscode-core/src/main/java/com/jayfeng/lesscode/core/other/DividerItemDecoration.java
index 04755ca..dd6ff88 100644
--- a/lesscode-core/src/main/java/com/jayfeng/lesscode/core/other/DividerItemDecoration.java
+++ b/lesscode-core/src/main/java/com/jayfeng/lesscode/core/other/DividerItemDecoration.java
@@ -6,6 +6,7 @@
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.support.v4.view.ViewCompat;
+import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
@@ -16,6 +17,7 @@
* 2. 支持自定义Drawable类型
* 3. 支持水平和垂直方向
* 4. 修复了官方垂直Divider显示的bug
+ * 5. 增加支持GRID_LIST的分割线, 但仅支持空视图分割(如果嫌弃左右上下多余的padding, 可以在RecyclerView中设置padding为负值解决)
* 扩展自官方android sdk下的Support7Demos下的DividerItemDecoration
*/
public class DividerItemDecoration extends RecyclerView.ItemDecoration {
@@ -25,8 +27,8 @@ public class DividerItemDecoration extends RecyclerView.ItemDecoration {
};
public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL;
-
public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL;
+ public static final int GRID_LIST = LinearLayoutManager.VERTICAL + 1;
private Drawable mDivider;
private int mWidth;
@@ -54,7 +56,9 @@ public DividerItemDecoration(Context context, int orientation, Drawable dividerD
}
public void setOrientation(int orientation) {
- if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) {
+ if (orientation != HORIZONTAL_LIST
+ && orientation != VERTICAL_LIST
+ && orientation != GRID_LIST) {
throw new IllegalArgumentException("invalid orientation");
}
mOrientation = orientation;
@@ -62,6 +66,7 @@ public void setOrientation(int orientation) {
/**
* 新增:支持手动为无高宽的drawable制定宽度
+ *
* @param width
*/
public void setWidth(int width) {
@@ -70,6 +75,7 @@ public void setWidth(int width) {
/**
* 新增:支持手动为无高宽的drawable制定高度
+ *
* @param height
*/
public void setHeight(int height) {
@@ -80,51 +86,56 @@ public void setHeight(int height) {
public void onDraw(Canvas c, RecyclerView parent) {
if (mOrientation == VERTICAL_LIST) {
drawVertical(c, parent);
- } else {
+ } else if (mOrientation == HORIZONTAL_LIST) {
drawHorizontal(c, parent);
}
}
public void drawVertical(Canvas c, RecyclerView parent) {
- final int left = parent.getPaddingLeft();
- final int right = parent.getWidth() - parent.getPaddingRight();
+ int left = parent.getPaddingLeft();
+ int right = parent.getWidth() - parent.getPaddingRight();
final int childCount = parent.getChildCount();
for (int i = 0; i < childCount; i++) {
final View child = parent.getChildAt(i);
final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
.getLayoutParams();
- final int top = child.getBottom() + params.bottomMargin +
+ int top = child.getBottom() + params.bottomMargin +
Math.round(ViewCompat.getTranslationY(child));
- final int bottom = top + getDividerHeight();
+ int bottom = top + getDividerHeight();
+
+
mDivider.setBounds(left, top, right, bottom);
mDivider.draw(c);
}
}
public void drawHorizontal(Canvas c, RecyclerView parent) {
- final int top = parent.getPaddingTop();
- final int bottom = parent.getHeight() - parent.getPaddingBottom();
+ int top = parent.getPaddingTop();
+ int bottom = parent.getHeight() - parent.getPaddingBottom();
final int childCount = parent.getChildCount();
for (int i = 0; i < childCount; i++) {
final View child = parent.getChildAt(i);
final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
.getLayoutParams();
- final int left = child.getRight() + params.rightMargin +
+ int left = child.getRight() + params.rightMargin +
Math.round(ViewCompat.getTranslationX(child));
- final int right = left + getDividerWidth();
+ int right = left + getDividerWidth();
+
mDivider.setBounds(left, top, right, bottom);
mDivider.draw(c);
}
}
@Override
- public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) {
+ public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
if (mOrientation == VERTICAL_LIST) {
outRect.set(0, 0, 0, getDividerHeight());
- } else {
+ } else if (mOrientation == HORIZONTAL_LIST) {
outRect.set(0, 0, getDividerWidth(), 0);
+ } else if (mOrientation == GRID_LIST) {
+ outRect.set(getDividerWidth(), getDividerHeight(), getDividerWidth(), getDividerHeight());
}
}
diff --git a/lesscode-core/src/main/java/com/jayfeng/lesscode/core/other/SpaceDividerView.java b/lesscode-core/src/main/java/com/jayfeng/lesscode/core/other/SpaceDividerView.java
index 589d83d..6a3492c 100644
--- a/lesscode-core/src/main/java/com/jayfeng/lesscode/core/other/SpaceDividerView.java
+++ b/lesscode-core/src/main/java/com/jayfeng/lesscode/core/other/SpaceDividerView.java
@@ -63,4 +63,29 @@ protected void onDraw(Canvas canvas) {
canvas.drawRect(0, getMeasuredHeight() - mSpaceBottom, getMeasuredWidth(), getMeasuredHeight(), mPaint);
}
}
+
+ public void setSpaceLeft(int spaceLeft) {
+ this.mSpaceLeft = spaceLeft;
+ invalidate();
+ }
+
+ public void setSpaceTop(int spaceTop) {
+ this.mSpaceTop = spaceTop;
+ invalidate();
+ }
+
+ public void setSpaceRight(int spaceRight) {
+ this.mSpaceRight = spaceRight;
+ invalidate();
+ }
+
+ public void setSpaceBottom(int spaceBottom) {
+ this.mSpaceBottom = spaceBottom;
+ invalidate();
+ }
+
+ public void setSpaceColor(int spaceColor) {
+ this.mSpaceColor = spaceColor;
+ invalidate();
+ }
}
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 0f838b3..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
@@ -9,20 +9,23 @@
*/
public abstract class ViewThrottleClickListener implements View.OnClickListener {
private static final int THROTTLE_TIME_DEFAULT = 1000; // 1s
- public long lastClickTime = 0;
+ private long mLastClickTime = 0;
public long getThrottleTime() {
return THROTTLE_TIME_DEFAULT;
}
+ public void discardClick() {}
public abstract void throttleClick(View view);
@Override
public void onClick(View v) {
long currentTime = Calendar.getInstance().getTimeInMillis();
- if (currentTime - lastClickTime > getThrottleTime()) {
- lastClickTime = currentTime;
+ if (currentTime - mLastClickTime > getThrottleTime()) {
+ mLastClickTime = currentTime;
throttleClick(v);
+ } else {
+ discardClick();
}
}
}
diff --git a/lesscode-core/src/main/java/com/jayfeng/lesscode/core/other/WeakHandler.java b/lesscode-core/src/main/java/com/jayfeng/lesscode/core/other/WeakHandler.java
new file mode 100644
index 0000000..8256131
--- /dev/null
+++ b/lesscode-core/src/main/java/com/jayfeng/lesscode/core/other/WeakHandler.java
@@ -0,0 +1,17 @@
+package com.jayfeng.lesscode.core.other;
+
+import android.os.Handler;
+
+import java.lang.ref.WeakReference;
+
+public abstract class WeakHandler extends Handler {
+ private WeakReference mOwner;
+
+ public WeakHandler(T owner) {
+ mOwner = new WeakReference<>(owner);
+ }
+
+ public T getOwner() {
+ return mOwner.get();
+ }
+}
diff --git a/lesscode-core/src/main/res/drawable-xhdpi/less_app_update_icon.png b/lesscode-core/src/main/res/drawable-xhdpi/less_app_update_icon.png
deleted file mode 100644
index cf16b95..0000000
Binary files a/lesscode-core/src/main/res/drawable-xhdpi/less_app_update_icon.png and /dev/null differ
diff --git a/lesscode-core/src/main/res/layout/less_app_update_notification.xml b/lesscode-core/src/main/res/layout/less_app_update_notification.xml
deleted file mode 100755
index 53ba61c..0000000
--- a/lesscode-core/src/main/res/layout/less_app_update_notification.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/lesscode-core/src/main/res/values-hdpi/bools.xml b/lesscode-core/src/main/res/values-hdpi/bools.xml
index 9ee1bad..15e7bf1 100644
--- a/lesscode-core/src/main/res/values-hdpi/bools.xml
+++ b/lesscode-core/src/main/res/values-hdpi/bools.xml
@@ -6,4 +6,5 @@
true
false
false
+ false
\ No newline at end of file
diff --git a/lesscode-core/src/main/res/values-ldpi/bools.xml b/lesscode-core/src/main/res/values-ldpi/bools.xml
index 9d45f0e..af66e2a 100644
--- a/lesscode-core/src/main/res/values-ldpi/bools.xml
+++ b/lesscode-core/src/main/res/values-ldpi/bools.xml
@@ -6,4 +6,5 @@
false
false
false
+ false
\ No newline at end of file
diff --git a/lesscode-core/src/main/res/values-mdpi/bools.xml b/lesscode-core/src/main/res/values-mdpi/bools.xml
index e5d0e67..b6e468c 100644
--- a/lesscode-core/src/main/res/values-mdpi/bools.xml
+++ b/lesscode-core/src/main/res/values-mdpi/bools.xml
@@ -6,4 +6,5 @@
false
false
false
+ false
\ No newline at end of file
diff --git a/lesscode-core/src/main/res/values-tvdpi/bools.xml b/lesscode-core/src/main/res/values-tvdpi/bools.xml
index 9214cf2..8bb3bf4 100644
--- a/lesscode-core/src/main/res/values-tvdpi/bools.xml
+++ b/lesscode-core/src/main/res/values-tvdpi/bools.xml
@@ -6,4 +6,5 @@
false
false
false
+ false
\ No newline at end of file
diff --git a/lesscode-core/src/main/res/values-xhdpi/bools.xml b/lesscode-core/src/main/res/values-xhdpi/bools.xml
index f74fff0..2071961 100644
--- a/lesscode-core/src/main/res/values-xhdpi/bools.xml
+++ b/lesscode-core/src/main/res/values-xhdpi/bools.xml
@@ -6,4 +6,5 @@
false
true
false
+ false
\ No newline at end of file
diff --git a/lesscode-core/src/main/res/values-xxhdpi/bools.xml b/lesscode-core/src/main/res/values-xxhdpi/bools.xml
index 1eb0eb7..7696bba 100644
--- a/lesscode-core/src/main/res/values-xxhdpi/bools.xml
+++ b/lesscode-core/src/main/res/values-xxhdpi/bools.xml
@@ -6,4 +6,5 @@
false
false
true
+ false
\ No newline at end of file
diff --git a/lesscode-core/src/main/res/values-xxxhdpi/bools.xml b/lesscode-core/src/main/res/values-xxxhdpi/bools.xml
new file mode 100644
index 0000000..c6c675c
--- /dev/null
+++ b/lesscode-core/src/main/res/values-xxxhdpi/bools.xml
@@ -0,0 +1,10 @@
+
+
+ false
+ false
+ false
+ false
+ false
+ false
+ true
+
\ No newline at end of file
diff --git a/lesscode-core/src/main/res/values/strings.xml b/lesscode-core/src/main/res/values/strings.xml
index f22b5d3..26de80e 100644
--- a/lesscode-core/src/main/res/values/strings.xml
+++ b/lesscode-core/src/main/res/values/strings.xml
@@ -1,14 +1,3 @@
LessCode Core
-
- 发现新版本:
- 开始下载
- 下载完成。
- 新版本下载成功,开始安装。
- 新版本下载失败,请稍后再试。
- 已经在下载中
- 开始下载
- 准备安装
- 未找到SD卡,无法下载。
- 下载地址错误,无法下载。
\ No newline at end of file
diff --git a/settings.gradle b/settings.gradle
index 174e218..e414997 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1 +1 @@
-include ':app', ':lesscode-core', ':app-ref-lesscode-core'
+include ':app', ':lesscode-core'