From 46820d20a5e00886a827d63e19d0fc98fd7b310f Mon Sep 17 00:00:00 2001
From: guiying712
Date: Sun, 30 Jul 2017 18:59:42 +0800
Subject: [PATCH 01/38] =?UTF-8?q?1=EF=BC=9A=E4=BF=AE=E6=94=B9PhotoView?=
=?UTF-8?q?=E5=A4=9A=E6=AC=A1=E6=94=BE=E5=A4=A7=E7=BC=A9=E5=B0=8F=E5=B4=A9?=
=?UTF-8?q?=E6=BA=83=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../com/guiying/common/HackyViewPager.java | 30 +++++++++++++++++++
.../guiying/common/base/BaseApplication.java | 8 ++---
.../com/guiying/girls/girl/GirlActivity.java | 3 +-
3 files changed, 34 insertions(+), 7 deletions(-)
create mode 100644 lib_common/src/main/java/com/guiying/common/HackyViewPager.java
diff --git a/lib_common/src/main/java/com/guiying/common/HackyViewPager.java b/lib_common/src/main/java/com/guiying/common/HackyViewPager.java
new file mode 100644
index 0000000..f3a1692
--- /dev/null
+++ b/lib_common/src/main/java/com/guiying/common/HackyViewPager.java
@@ -0,0 +1,30 @@
+package com.guiying.common;
+
+import android.content.Context;
+import android.support.v4.view.ViewPager;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+
+/**
+ * 解决图片缩放崩溃的问题
+ */
+public class HackyViewPager extends ViewPager {
+
+ public HackyViewPager(Context context) {
+ super(context);
+ }
+
+ public HackyViewPager(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ @Override
+ public boolean onInterceptTouchEvent(MotionEvent ev) {
+ try {
+ return super.onInterceptTouchEvent(ev);
+ } catch (IllegalArgumentException | ArrayIndexOutOfBoundsException e) {
+ e.printStackTrace();
+ }
+ return false;
+ }
+}
diff --git a/lib_common/src/main/java/com/guiying/common/base/BaseApplication.java b/lib_common/src/main/java/com/guiying/common/base/BaseApplication.java
index 5f4b920..319ee04 100644
--- a/lib_common/src/main/java/com/guiying/common/base/BaseApplication.java
+++ b/lib_common/src/main/java/com/guiying/common/base/BaseApplication.java
@@ -38,12 +38,8 @@ public void onCreate() {
super.onCreate();
sInstance = this;
Utils.init(this);
- if (Utils.isAppDebug()) {
- //只有debug模式才会打印日志
- Logger.init("Petrel").logLevel(LogLevel.FULL);
- } else {
- Logger.init("Petrel").logLevel(LogLevel.NONE);
- }
+
+ Logger.init("pattern").logLevel(LogLevel.FULL);
}
/**
diff --git a/module_girls/src/main/java/com/guiying/girls/girl/GirlActivity.java b/module_girls/src/main/java/com/guiying/girls/girl/GirlActivity.java
index a36b1e0..6a000d0 100644
--- a/module_girls/src/main/java/com/guiying/girls/girl/GirlActivity.java
+++ b/module_girls/src/main/java/com/guiying/girls/girl/GirlActivity.java
@@ -4,6 +4,7 @@
import android.support.v4.view.ViewPager;
import android.view.WindowManager;
+import com.guiying.common.HackyViewPager;
import com.guiying.common.base.BaseActivity;
import com.guiying.girls.Constants;
import com.guiying.girls.data.bean.Girls;
@@ -27,7 +28,7 @@ protected void onCreate(Bundle savedInstanceState) {
if (getIntent() != null) {
List mData = getIntent().getParcelableArrayListExtra(Constants.INTENT_GIRLS);
int mCurrentIndex = getIntent().getIntExtra(Constants.INTENT_INDEX, 0);
- ViewPager viewPager = new ViewPager(this);
+ HackyViewPager viewPager = new HackyViewPager(this);
setContentView(viewPager);
GirlAdapter adapter = new GirlAdapter(this, mData);
viewPager.setAdapter(adapter);
From b82fe1981afd4094f325f5ecc077a9a78f727914 Mon Sep 17 00:00:00 2001
From: guiying712
Date: Tue, 15 Aug 2017 10:23:37 +0800
Subject: [PATCH 02/38] =?UTF-8?q?1=EF=BC=9A=E5=B0=86=E9=BB=98=E8=AE=A4?=
=?UTF-8?q?=E5=BC=80=E5=8F=91=E6=A8=A1=E5=BC=8F=E6=94=B9=E4=B8=BA=E9=9B=86?=
=?UTF-8?q?=E6=88=90=E5=BC=80=E5=8F=91=E6=A8=A1=E5=BC=8F=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
gradle.properties | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gradle.properties b/gradle.properties
index cd29d22..d817325 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -25,4 +25,4 @@ localGradlePluginVersion=2.3.3
# ÿθġisModuleֵҪ "Sync Project" ť
# isModuleǡɿģʽ͡ģʽл
-isModule=true
+isModule=false
From 335064003cfd199781e91263eedd5e3191c653a1 Mon Sep 17 00:00:00 2001
From: guiying712
Date: Tue, 22 Aug 2017 19:30:10 +0800
Subject: [PATCH 03/38] =?UTF-8?q?1=EF=BC=9A=E4=BD=BF=E7=94=A8=E9=98=BF?=
=?UTF-8?q?=E9=87=8CARouter=E6=9B=BF=E6=8D=A2ActivityRouter=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
build.gradle | 6 +++---
lib_common/build.gradle | 2 +-
module_main/build.gradle | 12 ++++++++----
.../src/main/java/com/guiying/main/Main.java | 17 -----------------
.../java/com/guiying/main/MainActivity.java | 15 ++++++++++++---
module_news/build.gradle | 14 ++++++++------
.../src/main/java/com/guiying/news/News.java | 14 --------------
.../guiying/news/detail/NewsDetailActivity.java | 2 ++
.../guiying/news/main/NewsCenterActivity.java | 11 +++++++++--
.../com/guiying/news/main/NewsListAdapter.java | 2 --
10 files changed, 43 insertions(+), 52 deletions(-)
delete mode 100644 module_main/src/main/java/com/guiying/main/Main.java
delete mode 100644 module_news/src/main/java/com/guiying/news/News.java
diff --git a/build.gradle b/build.gradle
index 8eb9b72..3874a63 100644
--- a/build.gradle
+++ b/build.gradle
@@ -52,9 +52,9 @@ ext {
gsonVersion = "2.8.0"
photoViewVersion = "2.0.0"
- //需检查升级版本
- annotationProcessor = "1.1.7"
- routerVersion = "1.2.2"
+ //检查时间:2017.6.6
+ annotationProcessor = "1.0.3"
+ routerVersion = "1.2.1.1"
easyRecyclerVersion = "4.4.0"
cookieVersion = "v1.0.1"
toastyVersion = "1.1.3"
diff --git a/lib_common/build.gradle b/lib_common/build.gradle
index 304022c..1ec98ca 100644
--- a/lib_common/build.gradle
+++ b/lib_common/build.gradle
@@ -33,5 +33,5 @@ dependencies {
compile "com.github.GrenderG:Toasty:$rootProject.toastyVersion"
//router
- compile "com.github.mzule.activityrouter:activityrouter:$rootProject.routerVersion"
+ compile "com.alibaba:arouter-api:$rootProject.routerVersion"
}
diff --git a/module_main/build.gradle b/module_main/build.gradle
index 61955fc..f41c59f 100644
--- a/module_main/build.gradle
+++ b/module_main/build.gradle
@@ -13,6 +13,13 @@ android {
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode rootProject.ext.versionCode
versionName rootProject.ext.versionName
+
+ //ARouter
+ javaCompileOptions {
+ annotationProcessorOptions {
+ arguments = [moduleName: project.getName()]
+ }
+ }
}
@@ -29,14 +36,11 @@ android {
}
}
}
- //设置了resourcePrefix值后,所有的资源名必须以指定的字符串做前缀,否则会报错。
- //但是resourcePrefix这个值只能限定xml里面的资源,并不能限定图片资源,所有图片资源仍然需要手动去修改资源名。
- //resourcePrefix "girls_"
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
- annotationProcessor "com.github.mzule.activityrouter:compiler:$rootProject.annotationProcessor"
+ annotationProcessor "com.alibaba:arouter-compiler:$rootProject.annotationProcessor"
compile project(':lib_common')
}
diff --git a/module_main/src/main/java/com/guiying/main/Main.java b/module_main/src/main/java/com/guiying/main/Main.java
deleted file mode 100644
index 87e625b..0000000
--- a/module_main/src/main/java/com/guiying/main/Main.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.guiying.main;
-
-import com.github.mzule.activityrouter.annotation.Module;
-
-/**
- * 声明主要组件
- *
- * 这个组件是应用默认启动的组件
- *
- * @author 张华洋 2017/4/1 12:39
- * @version V1.2.0
- * @name Main
- */
-
-@Module("main")
-public class Main {
-}
diff --git a/module_main/src/main/java/com/guiying/main/MainActivity.java b/module_main/src/main/java/com/guiying/main/MainActivity.java
index 8ac0a15..dbcb530 100644
--- a/module_main/src/main/java/com/guiying/main/MainActivity.java
+++ b/module_main/src/main/java/com/guiying/main/MainActivity.java
@@ -5,11 +5,18 @@
import android.view.View;
import android.widget.Button;
-import com.github.mzule.activityrouter.router.Routers;
+import com.alibaba.android.arouter.launcher.ARouter;
import com.guiying.common.base.BaseActivity;
import com.guiying.common.base.BaseApplication;
import com.guiying.common.utils.ToastUtils;
+/**
+ *
类说明
+ *
+ * @author 张华洋 2017/7/1 13:13
+ * @version V1.2.0
+ * @name MainActivity
+ */
public class MainActivity extends BaseActivity implements View.OnClickListener {
private long exitTime = 0;
@@ -29,9 +36,11 @@ protected void onCreate(Bundle savedInstanceState) {
@Override
public void onClick(View view) {
if (view.getId() == R.id.news_button) {
- Routers.open(MainActivity.this, "module://news");
+ //跳转到NewsCenterActivity
+ ARouter.getInstance().build("/news/center").navigation();
} else if (view.getId() == R.id.girls_button) {
- Routers.open(MainActivity.this, "module://girls");
+ //跳转到GirlsActivity
+ ARouter.getInstance().build("/girls/list").navigation();
}
}
diff --git a/module_news/build.gradle b/module_news/build.gradle
index 00f6fec..4014b71 100644
--- a/module_news/build.gradle
+++ b/module_news/build.gradle
@@ -13,6 +13,13 @@ android {
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode rootProject.ext.versionCode
versionName rootProject.ext.versionName
+
+ //ARouter
+ javaCompileOptions {
+ annotationProcessorOptions {
+ arguments = [moduleName: project.getName()]
+ }
+ }
}
sourceSets {
@@ -29,15 +36,10 @@ android {
}
}
- //设置了resourcePrefix值后,所有的资源名必须以指定的字符串做前缀,否则会报错。
- //但是resourcePrefix这个值只能限定xml里面的资源,并不能限定图片资源,所有图片资源仍然需要手动去修改资源名。
- //resourcePrefix "girls_"
-
-
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
- annotationProcessor "com.github.mzule.activityrouter:compiler:$rootProject.annotationProcessor"
+ annotationProcessor "com.alibaba:arouter-compiler:$rootProject.annotationProcessor"
compile project(':lib_common')
}
diff --git a/module_news/src/main/java/com/guiying/news/News.java b/module_news/src/main/java/com/guiying/news/News.java
deleted file mode 100644
index fb73939..0000000
--- a/module_news/src/main/java/com/guiying/news/News.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.guiying.news;
-
-import com.github.mzule.activityrouter.annotation.Module;
-
-/**
- * 类说明
- *
- * @author 张华洋 2017/2/15 16:31
- * @version V1.2.0
- * @name news
- */
-@Module("news")
-public class News {
-}
diff --git a/module_news/src/main/java/com/guiying/news/detail/NewsDetailActivity.java b/module_news/src/main/java/com/guiying/news/detail/NewsDetailActivity.java
index 2317f9d..ed3a197 100644
--- a/module_news/src/main/java/com/guiying/news/detail/NewsDetailActivity.java
+++ b/module_news/src/main/java/com/guiying/news/detail/NewsDetailActivity.java
@@ -2,6 +2,7 @@
import android.os.Bundle;
+import com.alibaba.android.arouter.facade.annotation.Route;
import com.guiying.common.base.BaseActivity;
/**
@@ -11,6 +12,7 @@
* @version V1.2.0
* @name NewsDetailActivity
*/
+@Route(path = "/news/detail")
public class NewsDetailActivity extends BaseActivity {
@Override
diff --git a/module_news/src/main/java/com/guiying/news/main/NewsCenterActivity.java b/module_news/src/main/java/com/guiying/news/main/NewsCenterActivity.java
index ee24aa6..4bec37c 100644
--- a/module_news/src/main/java/com/guiying/news/main/NewsCenterActivity.java
+++ b/module_news/src/main/java/com/guiying/news/main/NewsCenterActivity.java
@@ -5,7 +5,7 @@
import android.support.v4.view.ViewPager;
import android.support.v7.widget.Toolbar;
-import com.github.mzule.activityrouter.annotation.Router;
+import com.alibaba.android.arouter.facade.annotation.Route;
import com.guiying.common.base.BaseActivity;
import com.guiying.news.R;
@@ -15,7 +15,14 @@
import java.util.List;
import java.util.Locale;
-@Router("news")
+/**
+ * 类说明
+ *
+ * @author 张华洋 2017/4/20 22:26
+ * @version V1.2.0
+ * @name NewsCenterActivity
+ */
+@Route(path = "/news/center")
public class NewsCenterActivity extends BaseActivity {
protected Toolbar mToolBar;
diff --git a/module_news/src/main/java/com/guiying/news/main/NewsListAdapter.java b/module_news/src/main/java/com/guiying/news/main/NewsListAdapter.java
index c8e8ce6..d832569 100644
--- a/module_news/src/main/java/com/guiying/news/main/NewsListAdapter.java
+++ b/module_news/src/main/java/com/guiying/news/main/NewsListAdapter.java
@@ -22,8 +22,6 @@
* @version V1.2.0
* @name NewsListAdapter
*/
-
-
public class NewsListAdapter extends RecyclerArrayAdapter {
public NewsListAdapter(Context context) {
From 6c15fc60372f5b550933b44a93a64ddb8fdf29a3 Mon Sep 17 00:00:00 2001
From: guiying712
Date: Tue, 22 Aug 2017 19:31:22 +0800
Subject: [PATCH 04/38] =?UTF-8?q?1=EF=BC=9A=E6=9B=BF=E6=8D=A2=E9=98=BF?=
=?UTF-8?q?=E9=87=8CARouter=EF=BC=8C=E4=BF=AE=E6=94=B9=E5=85=A8=E5=B1=80Gr?=
=?UTF-8?q?adle=E8=84=9A=E6=9C=AC=EF=BC=8C=E4=BB=A5=E5=8F=8A=E8=B7=AF?=
=?UTF-8?q?=E7=94=B1=E8=B7=B3=E8=BD=AC=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
module_app/build.gradle | 4 +--
module_app/src/main/AndroidManifest.xml | 13 ----------
.../androidmodulepattern/MyApplication.java | 26 ++++++++++++-------
module_girls/build.gradle | 14 +++++-----
.../main/java/com/guiying/girls/Girls.java | 14 ----------
.../com/guiying/girls/girl/GirlActivity.java | 2 ++
.../com/guiying/girls/main/GirlsActivity.java | 4 +--
7 files changed, 31 insertions(+), 46 deletions(-)
delete mode 100644 module_girls/src/main/java/com/guiying/girls/Girls.java
diff --git a/module_app/build.gradle b/module_app/build.gradle
index d3fd2bf..37c526b 100644
--- a/module_app/build.gradle
+++ b/module_app/build.gradle
@@ -22,7 +22,7 @@ android {
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode rootProject.ext.versionCode
versionName rootProject.ext.versionName
- multiDexEnabled false
+ multiDexEnabled true
//打包时间
resValue "string", "build_time", buildTime()
}
@@ -61,7 +61,7 @@ android {
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
- annotationProcessor "com.github.mzule.activityrouter:compiler:$rootProject.annotationProcessor"
+ compile 'com.android.support:multidex:1.0.1'
if (isModule.toBoolean()) {
compile project(':lib_common')
} else {
diff --git a/module_app/src/main/AndroidManifest.xml b/module_app/src/main/AndroidManifest.xml
index 1fe6dcd..725abcf 100644
--- a/module_app/src/main/AndroidManifest.xml
+++ b/module_app/src/main/AndroidManifest.xml
@@ -10,19 +10,6 @@
android:supportsRtl="true"
android:theme="@style/AppTheme">
-
-
-
-
-
-
-
-
-
-
-
这里是整个组件化项目管理各个组件的地方,所有需要使用的组件必须在此声明
+ * 这里仅需做一些初始化的工作
*
* @author 张华洋 2017/2/15 20:14
* @version V1.2.0
@@ -36,25 +38,31 @@
resToastText = R.string.crash_toast_text,
resDialogText = R.string.crash_dialog_text,
resDialogTitle = R.string.crash_dialog_title)
-@Modules({"main", "girls", "news"})
public class MyApplication extends BaseApplication {
@Override
public void onCreate() {
super.onCreate();
+ if (Utils.isAppDebug()) {
+ //开启InstantRun之后,一定要在ARouter.init之前调用openDebug
+ ARouter.openDebug();
+ ARouter.openLog();
+ }
+ ARouter.init(this);
//崩溃日志记录初始化
ACRA.init(this);
ACRA.getErrorReporter().removeAllReportSenders();
ACRA.getErrorReporter().setReportSender(new CrashReportSender());
}
-// @Override
-// protected void attachBaseContext(Context base) {
-// super.attachBaseContext(base);
-// // dex突破65535的限制
-// MultiDex.install(this);
-// }
+
+ @Override
+ protected void attachBaseContext(Context base) {
+ super.attachBaseContext(base);
+ // dex突破65535的限制
+ MultiDex.install(this);
+ }
/**
diff --git a/module_girls/build.gradle b/module_girls/build.gradle
index fbf8446..4014b71 100644
--- a/module_girls/build.gradle
+++ b/module_girls/build.gradle
@@ -13,8 +13,14 @@ android {
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode rootProject.ext.versionCode
versionName rootProject.ext.versionName
- }
+ //ARouter
+ javaCompileOptions {
+ annotationProcessorOptions {
+ arguments = [moduleName: project.getName()]
+ }
+ }
+ }
sourceSets {
main {
@@ -29,15 +35,11 @@ android {
}
}
}
- //设置了resourcePrefix值后,所有的资源名必须以指定的字符串做前缀,否则会报错。
- //但是resourcePrefix这个值只能限定xml里面的资源,并不能限定图片资源,所有图片资源仍然需要手动去修改资源名。
- //resourcePrefix "girls_"
-
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
- annotationProcessor "com.github.mzule.activityrouter:compiler:$rootProject.annotationProcessor"
+ annotationProcessor "com.alibaba:arouter-compiler:$rootProject.annotationProcessor"
compile project(':lib_common')
}
diff --git a/module_girls/src/main/java/com/guiying/girls/Girls.java b/module_girls/src/main/java/com/guiying/girls/Girls.java
deleted file mode 100644
index 3386507..0000000
--- a/module_girls/src/main/java/com/guiying/girls/Girls.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.guiying.girls;
-
-import com.github.mzule.activityrouter.annotation.Module;
-
-/**
- * 类说明
- *
- * @author 张华洋 2017/2/15 16:34
- * @version V1.2.0
- * @name Girls
- */
-@Module("girls")
-public class Girls {
-}
diff --git a/module_girls/src/main/java/com/guiying/girls/girl/GirlActivity.java b/module_girls/src/main/java/com/guiying/girls/girl/GirlActivity.java
index 6a000d0..9551bb6 100644
--- a/module_girls/src/main/java/com/guiying/girls/girl/GirlActivity.java
+++ b/module_girls/src/main/java/com/guiying/girls/girl/GirlActivity.java
@@ -4,6 +4,7 @@
import android.support.v4.view.ViewPager;
import android.view.WindowManager;
+import com.alibaba.android.arouter.facade.annotation.Route;
import com.guiying.common.HackyViewPager;
import com.guiying.common.base.BaseActivity;
import com.guiying.girls.Constants;
@@ -18,6 +19,7 @@
* @version V1.1
* @name GirlActivity
*/
+@Route(path = "/girls/detail")
public class GirlActivity extends BaseActivity {
@Override
diff --git a/module_girls/src/main/java/com/guiying/girls/main/GirlsActivity.java b/module_girls/src/main/java/com/guiying/girls/main/GirlsActivity.java
index b0a0851..9ebdf52 100644
--- a/module_girls/src/main/java/com/guiying/girls/main/GirlsActivity.java
+++ b/module_girls/src/main/java/com/guiying/girls/main/GirlsActivity.java
@@ -2,11 +2,11 @@
import android.os.Bundle;
-import com.github.mzule.activityrouter.annotation.Router;
+import com.alibaba.android.arouter.facade.annotation.Route;
import com.guiying.common.base.BaseActionBarActivity;
import com.guiying.girls.R;
-@Router("girls")
+@Route(path = "/girls/list")
public class GirlsActivity extends BaseActionBarActivity {
private GirlsView mView;
From 805ae81ea89cdbe163926f3bcff1af7ecc82f622 Mon Sep 17 00:00:00 2001
From: guiying712
Date: Tue, 22 Aug 2017 19:52:04 +0800
Subject: [PATCH 05/38] =?UTF-8?q?1=EF=BC=9A=E6=A0=B9=E6=8D=AE=E4=BF=AE?=
=?UTF-8?q?=E6=94=B9=E5=86=85=E5=AE=B9=E6=9B=B4=E6=96=B0=EF=BC=B2=EF=BC=A5?=
=?UTF-8?q?=EF=BC=A1=EF=BC=A4=EF=BC=AD=EF=BC=A5=E6=96=87=E6=A1=A3=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 26 ++++++++++++++++++++------
screenshots/develper.PNG | Bin 0 -> 6158 bytes
2 files changed, 20 insertions(+), 6 deletions(-)
create mode 100644 screenshots/develper.PNG
diff --git a/README.md b/README.md
index c6c57c2..27bf1e9 100644
--- a/README.md
+++ b/README.md
@@ -9,25 +9,39 @@
# AndroidModulePattern
+
Android项目组件化示例代码
-博客:http://blog.csdn.net/guiying712/article/details/55213884
+**Android组件化方案**:http://blog.csdn.net/guiying712/article/details/55213884
+
+Android组件化方案中的路由使用了ActivityRouter,但是因为ActivityRouter对于初学者不太友好,
+总是出现莫名其妙的错误,因此现在的 AndroidModulePattern 已经改为使用 阿里ARouter作为路由。
+
+## 集成开发模式和组件开发模式转换
+
+**1、首先打开Android项目的 gradle.properties 文件,然后将 isModule 改为你需要的开发模式,
+然后点击 "Sync Project" 按钮同步项目;**
+
+**2、 在运行之前,请先按照图中选择一个能够运行的组件;**
+
+
+## 组件功能介绍
-### app组件功能:
-1. app组件主要用于管理其他组件;
+### app组件功能(空壳工程):
+1. 配置整个项目的Gradle脚本,例如 混淆、签名等;
2. app组件中可以初始化全局的库,例如Lib.init(this);
3. 添加 multiDex 功能
-### main组件功能:
+### main组件功能(业务组件):
1. 声明应用的launcherActivity----->android.intent.category.LAUNCHER;
2. 添加SplashActivity;
3. 添加LoginActivity;
4. 添加MainActivity;
-### girls/news组件功能:
+### girls/news组件功能(业务组件):
1. 这两个组件都是业务组件,根据产品的业务逻辑独立成一个组件;
-### common组件功能:
+### common组件功能(功能组件):
1. common组件是基础库,添加一些公用的类;
2. 例如:网络请求、图片加载、工具类、base类等等;
3. 声明APP需要的uses-permission;
diff --git a/screenshots/develper.PNG b/screenshots/develper.PNG
new file mode 100644
index 0000000000000000000000000000000000000000..9d6b8b6155a4e53456538f29b3fdf1cf82754cb4
GIT binary patch
literal 6158
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
Date: Tue, 22 Aug 2017 20:00:36 +0800
Subject: [PATCH 06/38] =?UTF-8?q?1=EF=BC=9A=E6=A0=B9=E6=8D=AE=E4=BF=AE?=
=?UTF-8?q?=E6=94=B9=E5=86=85=E5=AE=B9=E6=9B=B4=E6=96=B0README=E6=96=87?=
=?UTF-8?q?=E6=A1=A3=EF=BC=9B=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 27bf1e9..ed413cd 100644
--- a/README.md
+++ b/README.md
@@ -22,7 +22,7 @@ Android组件化方案中的路由使用了ActivityRouter,但是因为Activity
**1、首先打开Android项目的 gradle.properties 文件,然后将 isModule 改为你需要的开发模式,
然后点击 "Sync Project" 按钮同步项目;**
-**2、 在运行之前,请先按照图中选择一个能够运行的组件;**
+**2、 在运行之前,请先按照图中选择一个能够运行的组件;**
## 组件功能介绍
From 42f6be0cca6fade0d1b23861a0bd41151ee1b6f3 Mon Sep 17 00:00:00 2001
From: guiying712
Date: Tue, 26 Sep 2017 22:20:38 +0800
Subject: [PATCH 07/38] =?UTF-8?q?1=EF=BC=9A=E4=BF=AE=E6=94=B9BaseActivity?=
=?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=8A=A0BaseFragment=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../com/guiying/common/base/BaseActivity.java | 60 +++++++++++++++++
.../com/guiying/common/base/BaseFragment.java | 65 +++++++++++++++++++
.../java/com/guiying/common/utils/Utils.java | 26 ++++++++
3 files changed, 151 insertions(+)
create mode 100644 lib_common/src/main/java/com/guiying/common/base/BaseFragment.java
diff --git a/lib_common/src/main/java/com/guiying/common/base/BaseActivity.java b/lib_common/src/main/java/com/guiying/common/base/BaseActivity.java
index 5e9b3f5..4c763c3 100644
--- a/lib_common/src/main/java/com/guiying/common/base/BaseActivity.java
+++ b/lib_common/src/main/java/com/guiying/common/base/BaseActivity.java
@@ -8,6 +8,7 @@
import android.view.View;
import com.guiying.common.R;
+import com.guiying.common.utils.Utils;
/**
* Activity基类
@@ -66,4 +67,63 @@ public boolean onSupportNavigateUp() {
return true;
}
+ //添加fragment
+ protected void addFragment(BaseFragment fragment, @IdRes int frameId) {
+ Utils.checkNotNull(fragment);
+ getSupportFragmentManager().beginTransaction()
+ .add(frameId, fragment, fragment.getClass().getSimpleName())
+ .addToBackStack(fragment.getClass().getSimpleName())
+ .commitAllowingStateLoss();
+
+ }
+
+ //替换fragment
+ protected void replaceFragment(BaseFragment fragment, @IdRes int frameId) {
+ Utils.checkNotNull(fragment);
+ getSupportFragmentManager().beginTransaction()
+ .replace(frameId, fragment, fragment.getClass().getSimpleName())
+ .addToBackStack(fragment.getClass().getSimpleName())
+ .commitAllowingStateLoss();
+
+ }
+
+ //隐藏fragment
+ protected void hideFragment(BaseFragment fragment) {
+ Utils.checkNotNull(fragment);
+ getSupportFragmentManager().beginTransaction()
+ .hide(fragment)
+ .commitAllowingStateLoss();
+
+ }
+
+
+ //显示fragment
+ protected void showFragment(BaseFragment fragment) {
+ Utils.checkNotNull(fragment);
+ getSupportFragmentManager().beginTransaction()
+ .show(fragment)
+ .commitAllowingStateLoss();
+
+ }
+
+
+ protected void removeFragment(BaseFragment fragment) {
+ Utils.checkNotNull(fragment);
+ getSupportFragmentManager().beginTransaction()
+ .remove(fragment)
+ .commitAllowingStateLoss();
+
+ }
+
+
+ //移除fragment
+ protected void popFragment() {
+ if (getSupportFragmentManager().getBackStackEntryCount() > 1) {
+ getSupportFragmentManager().popBackStack();
+ } else {
+ finish();
+ }
+ }
+
+
}
diff --git a/lib_common/src/main/java/com/guiying/common/base/BaseFragment.java b/lib_common/src/main/java/com/guiying/common/base/BaseFragment.java
new file mode 100644
index 0000000..e79c36a
--- /dev/null
+++ b/lib_common/src/main/java/com/guiying/common/base/BaseFragment.java
@@ -0,0 +1,65 @@
+package com.guiying.common.base;
+
+import android.content.Context;
+import android.support.annotation.IdRes;
+import android.support.v4.app.Fragment;
+
+import com.guiying.common.utils.Utils;
+
+public abstract class BaseFragment extends Fragment {
+
+ protected BaseActivity mActivity;
+
+
+ //获取宿主Activity
+ protected BaseActivity getHoldingActivity() {
+ return mActivity;
+ }
+
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ this.mActivity = (BaseActivity) context;
+ }
+
+
+ //添加fragment
+ protected void addFragment(BaseFragment fragment, @IdRes int frameId) {
+ Utils.checkNotNull(fragment);
+ getHoldingActivity().addFragment(fragment, frameId);
+
+ }
+
+ //替换fragment
+ protected void replaceFragment(BaseFragment fragment, @IdRes int frameId) {
+ Utils.checkNotNull(fragment);
+ getHoldingActivity().replaceFragment(fragment, frameId);
+ }
+
+ //隐藏fragment
+ protected void hideFragment(BaseFragment fragment) {
+ Utils.checkNotNull(fragment);
+ getHoldingActivity().hideFragment(fragment);
+ }
+
+
+ //显示fragment
+ protected void showFragment(BaseFragment fragment) {
+ Utils.checkNotNull(fragment);
+ getHoldingActivity().showFragment(fragment);
+ }
+
+
+ protected void removeFragment(BaseFragment fragment) {
+ Utils.checkNotNull(fragment);
+ getHoldingActivity().removeFragment(fragment);
+
+ }
+
+
+ //移除fragment
+ protected void popFragment() {
+ getHoldingActivity().popFragment();
+ }
+
+}
diff --git a/lib_common/src/main/java/com/guiying/common/utils/Utils.java b/lib_common/src/main/java/com/guiying/common/utils/Utils.java
index 6c8b104..ff9ff74 100644
--- a/lib_common/src/main/java/com/guiying/common/utils/Utils.java
+++ b/lib_common/src/main/java/com/guiying/common/utils/Utils.java
@@ -1,5 +1,6 @@
package com.guiying.common.utils;
+
import android.app.Activity;
import android.content.Context;
import android.content.ContextWrapper;
@@ -7,6 +8,9 @@
import android.content.pm.PackageManager;
import android.support.annotation.NonNull;
import android.support.annotation.StringRes;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentTransaction;
import android.view.View;
/**
@@ -87,4 +91,26 @@ public static boolean isAppDebug() {
}
}
+
+ /**
+ * The {@code fragment} is added to the container view with id {@code frameId}. The operation is
+ * performed by the {@code fragmentManager}.
+ */
+ public static void addFragmentToActivity(@NonNull FragmentManager fragmentManager,
+ @NonNull Fragment fragment, int frameId) {
+ checkNotNull(fragmentManager);
+ checkNotNull(fragment);
+ FragmentTransaction transaction = fragmentManager.beginTransaction();
+ transaction.add(frameId, fragment);
+ transaction.commit();
+ }
+
+
+ public static T checkNotNull(T obj) {
+ if (obj == null) {
+ throw new NullPointerException();
+ }
+ return obj;
+ }
+
}
\ No newline at end of file
From e9eb9591ea3a233431ab237e2f878afe18f8f7a6 Mon Sep 17 00:00:00 2001
From: guiying712
Date: Wed, 27 Sep 2017 10:31:32 +0800
Subject: [PATCH 08/38] =?UTF-8?q?1=EF=BC=9A=E8=B0=83=E6=95=B4=E7=9B=AE?=
=?UTF-8?q?=E5=BD=95=E7=BB=93=E6=9E=84=EF=BC=8C=E5=A2=9E=E5=8A=A0Fragment?=
=?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=8C=96=E6=96=B9=E6=A1=88=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
lib_common/src/main/AndroidManifest.xml | 4 +-
.../common/base/ApplicationDelegate.java | 22 ++
.../common/base/BaseActionBarActivity.java | 4 +-
.../common/base/BaseActivity.java | 10 +-
.../module/common/base/BaseApplication.java | 48 +++
.../common/base/BaseFragment.java | 4 +-
.../common/base/BasePresenter.java | 2 +-
.../{ => module}/common/base/BaseView.java | 2 +-
.../module/common/base/ClassUtils.java | 276 ++++++++++++++++++
.../common/base/InfoCallback.java | 2 +-
.../common/base/ViewManager.java} | 80 +++--
.../common/glide/OkHttpGlideModule.java | 2 +-
.../common/glide/OkHttpStreamFetcher.java | 4 +-
.../common/glide/OkHttpUrlLoader.java | 2 +-
.../{ => module}/common/http/ApiService.java | 2 +-
.../common/http/DataParseUtil.java | 2 +-
.../{ => module}/common/http/DataType.java | 2 +-
.../{ => module}/common/http/HttpClient.java | 12 +-
.../{ => module}/common/http/HttpsUtils.java | 4 +-
.../common/http/LoggerInterceptor.java | 2 +-
.../common/http/OnResultListener.java | 2 +-
.../{ => module}/common/utils/CloseUtils.java | 2 +-
.../common/utils/NetworkUtils.java | 2 +-
.../{ => module}/common/utils/ShellUtils.java | 2 +-
.../common/utils/StringUtils.java | 2 +-
.../{ => module}/common/utils/ToastUtils.java | 2 +-
.../{ => module}/common/utils/Utils.java | 2 +-
.../common/widget}/HackyViewPager.java | 7 +-
.../common/widget/NoScrollViewPager.java | 41 +++
29 files changed, 478 insertions(+), 70 deletions(-)
create mode 100644 lib_common/src/main/java/com/guiying/module/common/base/ApplicationDelegate.java
rename lib_common/src/main/java/com/guiying/{ => module}/common/base/BaseActionBarActivity.java (95%)
rename lib_common/src/main/java/com/guiying/{ => module}/common/base/BaseActivity.java (93%)
create mode 100644 lib_common/src/main/java/com/guiying/module/common/base/BaseApplication.java
rename lib_common/src/main/java/com/guiying/{ => module}/common/base/BaseFragment.java (94%)
rename lib_common/src/main/java/com/guiying/{ => module}/common/base/BasePresenter.java (58%)
rename lib_common/src/main/java/com/guiying/{ => module}/common/base/BaseView.java (64%)
create mode 100644 lib_common/src/main/java/com/guiying/module/common/base/ClassUtils.java
rename lib_common/src/main/java/com/guiying/{ => module}/common/base/InfoCallback.java (85%)
rename lib_common/src/main/java/com/guiying/{common/base/BaseApplication.java => module/common/base/ViewManager.java} (58%)
rename lib_common/src/main/java/com/guiying/{ => module}/common/glide/OkHttpGlideModule.java (98%)
rename lib_common/src/main/java/com/guiying/{ => module}/common/glide/OkHttpStreamFetcher.java (95%)
rename lib_common/src/main/java/com/guiying/{ => module}/common/glide/OkHttpUrlLoader.java (98%)
rename lib_common/src/main/java/com/guiying/{ => module}/common/http/ApiService.java (97%)
rename lib_common/src/main/java/com/guiying/{ => module}/common/http/DataParseUtil.java (98%)
rename lib_common/src/main/java/com/guiying/{ => module}/common/http/DataType.java (95%)
rename lib_common/src/main/java/com/guiying/{ => module}/common/http/HttpClient.java (97%)
rename lib_common/src/main/java/com/guiying/{ => module}/common/http/HttpsUtils.java (99%)
rename lib_common/src/main/java/com/guiying/{ => module}/common/http/LoggerInterceptor.java (99%)
rename lib_common/src/main/java/com/guiying/{ => module}/common/http/OnResultListener.java (94%)
rename lib_common/src/main/java/com/guiying/{ => module}/common/utils/CloseUtils.java (96%)
rename lib_common/src/main/java/com/guiying/{ => module}/common/utils/NetworkUtils.java (99%)
rename lib_common/src/main/java/com/guiying/{ => module}/common/utils/ShellUtils.java (99%)
rename lib_common/src/main/java/com/guiying/{ => module}/common/utils/StringUtils.java (99%)
rename lib_common/src/main/java/com/guiying/{ => module}/common/utils/ToastUtils.java (99%)
rename lib_common/src/main/java/com/guiying/{ => module}/common/utils/Utils.java (98%)
rename lib_common/src/main/java/com/guiying/{common => module/common/widget}/HackyViewPager.java (80%)
create mode 100644 lib_common/src/main/java/com/guiying/module/common/widget/NoScrollViewPager.java
diff --git a/lib_common/src/main/AndroidManifest.xml b/lib_common/src/main/AndroidManifest.xml
index 5b1cff1..cca80d3 100644
--- a/lib_common/src/main/AndroidManifest.xml
+++ b/lib_common/src/main/AndroidManifest.xml
@@ -1,5 +1,5 @@
+ package="com.guiying.module.common">
@@ -16,7 +16,7 @@
diff --git a/lib_common/src/main/java/com/guiying/module/common/base/ApplicationDelegate.java b/lib_common/src/main/java/com/guiying/module/common/base/ApplicationDelegate.java
new file mode 100644
index 0000000..1e98f86
--- /dev/null
+++ b/lib_common/src/main/java/com/guiying/module/common/base/ApplicationDelegate.java
@@ -0,0 +1,22 @@
+package com.guiying.module.common.base;
+
+/**
+ * 类说明
+ *
+ * @author 张华洋 2017/9/20 22:23
+ * @version V2.8.3
+ * @name ApplicationDelegate
+ */
+
+
+public interface ApplicationDelegate {
+
+ void onCreate();
+
+ void onTerminate();
+
+ void onLowMemory();
+
+ void onTrimMemory(int level);
+
+}
diff --git a/lib_common/src/main/java/com/guiying/common/base/BaseActionBarActivity.java b/lib_common/src/main/java/com/guiying/module/common/base/BaseActionBarActivity.java
similarity index 95%
rename from lib_common/src/main/java/com/guiying/common/base/BaseActionBarActivity.java
rename to lib_common/src/main/java/com/guiying/module/common/base/BaseActionBarActivity.java
index a14d93d..ffe9243 100644
--- a/lib_common/src/main/java/com/guiying/common/base/BaseActionBarActivity.java
+++ b/lib_common/src/main/java/com/guiying/module/common/base/BaseActionBarActivity.java
@@ -5,13 +5,13 @@
* @Description: 本内容仅限于杭州海康威视系统技术公有限司内部使用,禁止转发.
*/
-package com.guiying.common.base;
+package com.guiying.module.common.base;
import android.os.Bundle;
import android.support.annotation.StringRes;
import android.support.v7.app.ActionBar;
-import com.guiying.common.R;
+import com.guiying.module.common.R;
/**
* BaseActionBarActivity继承于BaseActivity,封装了actionBar的逻辑;
diff --git a/lib_common/src/main/java/com/guiying/common/base/BaseActivity.java b/lib_common/src/main/java/com/guiying/module/common/base/BaseActivity.java
similarity index 93%
rename from lib_common/src/main/java/com/guiying/common/base/BaseActivity.java
rename to lib_common/src/main/java/com/guiying/module/common/base/BaseActivity.java
index 4c763c3..a108bb5 100644
--- a/lib_common/src/main/java/com/guiying/common/base/BaseActivity.java
+++ b/lib_common/src/main/java/com/guiying/module/common/base/BaseActivity.java
@@ -1,4 +1,4 @@
-package com.guiying.common.base;
+package com.guiying.module.common.base;
import android.os.Bundle;
import android.support.annotation.IdRes;
@@ -7,8 +7,8 @@
import android.support.v7.widget.Toolbar;
import android.view.View;
-import com.guiying.common.R;
-import com.guiying.common.utils.Utils;
+import com.guiying.module.common.R;
+import com.guiying.module.common.utils.Utils;
/**
* Activity基类
@@ -51,14 +51,14 @@ protected void setupToolBar(Toolbar toolbar, boolean hideTitle) {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- BaseApplication.getIns().addActivity(this);
+ ViewManager.getInstance().addActivity(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
- BaseApplication.getIns().finishActivity(this);
+ ViewManager.getInstance().finishActivity(this);
}
@Override
diff --git a/lib_common/src/main/java/com/guiying/module/common/base/BaseApplication.java b/lib_common/src/main/java/com/guiying/module/common/base/BaseApplication.java
new file mode 100644
index 0000000..fc5ebbd
--- /dev/null
+++ b/lib_common/src/main/java/com/guiying/module/common/base/BaseApplication.java
@@ -0,0 +1,48 @@
+package com.guiying.module.common.base;
+
+import android.app.Application;
+
+import com.guiying.module.common.utils.Utils;
+import com.orhanobut.logger.LogLevel;
+import com.orhanobut.logger.Logger;
+
+import java.util.List;
+
+/**
+ * 要想使用BaseApplication,必须在组件中实现自己的Application,并且继承BaseApplication;
+ * 组件中实现的Application必须在debug包中的AndroidManifest.xml中注册,否则无法使用;
+ * 组件的Application需置于java/debug文件夹中,不得放于主代码;
+ * 组件中获取Context的方法必须为:Utils.getContext(),不允许其他写法;
+ * BaseApplication主要用来管理全局Activity;
+ *
+ * @author 2016/12/2 17:02
+ * @version V1.0.0
+ * @name BaseApplication
+ */
+public class BaseApplication extends Application {
+
+ public static final String ROOT_PACKAGE = "com.guiying.module";
+
+ private static BaseApplication sInstance;
+
+ private List delegateList;
+
+
+ public static BaseApplication getIns() {
+ return sInstance;
+ }
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ sInstance = this;
+ Utils.init(this);
+ delegateList = ClassUtils.getObjectsWithInterface(this, ApplicationDelegate.class, ROOT_PACKAGE);
+ for (ApplicationDelegate delegate : delegateList) {
+ delegate.onCreate();
+ }
+ Logger.init("pattern").logLevel(LogLevel.FULL);
+ }
+
+
+}
diff --git a/lib_common/src/main/java/com/guiying/common/base/BaseFragment.java b/lib_common/src/main/java/com/guiying/module/common/base/BaseFragment.java
similarity index 94%
rename from lib_common/src/main/java/com/guiying/common/base/BaseFragment.java
rename to lib_common/src/main/java/com/guiying/module/common/base/BaseFragment.java
index e79c36a..a957ff1 100644
--- a/lib_common/src/main/java/com/guiying/common/base/BaseFragment.java
+++ b/lib_common/src/main/java/com/guiying/module/common/base/BaseFragment.java
@@ -1,10 +1,10 @@
-package com.guiying.common.base;
+package com.guiying.module.common.base;
import android.content.Context;
import android.support.annotation.IdRes;
import android.support.v4.app.Fragment;
-import com.guiying.common.utils.Utils;
+import com.guiying.module.common.utils.Utils;
public abstract class BaseFragment extends Fragment {
diff --git a/lib_common/src/main/java/com/guiying/common/base/BasePresenter.java b/lib_common/src/main/java/com/guiying/module/common/base/BasePresenter.java
similarity index 58%
rename from lib_common/src/main/java/com/guiying/common/base/BasePresenter.java
rename to lib_common/src/main/java/com/guiying/module/common/base/BasePresenter.java
index c05c925..d7468af 100644
--- a/lib_common/src/main/java/com/guiying/common/base/BasePresenter.java
+++ b/lib_common/src/main/java/com/guiying/module/common/base/BasePresenter.java
@@ -1,4 +1,4 @@
-package com.guiying.common.base;
+package com.guiying.module.common.base;
public interface BasePresenter {
diff --git a/lib_common/src/main/java/com/guiying/common/base/BaseView.java b/lib_common/src/main/java/com/guiying/module/common/base/BaseView.java
similarity index 64%
rename from lib_common/src/main/java/com/guiying/common/base/BaseView.java
rename to lib_common/src/main/java/com/guiying/module/common/base/BaseView.java
index debd151..7d557ea 100644
--- a/lib_common/src/main/java/com/guiying/common/base/BaseView.java
+++ b/lib_common/src/main/java/com/guiying/module/common/base/BaseView.java
@@ -1,4 +1,4 @@
-package com.guiying.common.base;
+package com.guiying.module.common.base;
public interface BaseView {
diff --git a/lib_common/src/main/java/com/guiying/module/common/base/ClassUtils.java b/lib_common/src/main/java/com/guiying/module/common/base/ClassUtils.java
new file mode 100644
index 0000000..1033887
--- /dev/null
+++ b/lib_common/src/main/java/com/guiying/module/common/base/ClassUtils.java
@@ -0,0 +1,276 @@
+package com.guiying.module.common.base;
+
+// Copy from galaxy sdk ${com.alibaba.android.galaxy.utils.ClassUtils}
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.os.Build;
+import android.util.Log;
+
+import com.alibaba.android.arouter.launcher.ARouter;
+
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import dalvik.system.DexFile;
+
+import static com.alibaba.android.arouter.launcher.ARouter.logger;
+import static com.alibaba.android.arouter.utils.Consts.TAG;
+
+/**
+ * Scanner, find out class with any conditions, copy from google source code.
+ *
+ * @author 正纬 Contact me.
+ * @version 1.0
+ * @since 16/6/27 下午10:58
+ */
+public class ClassUtils {
+ private static final String EXTRACTED_NAME_EXT = ".classes";
+ private static final String EXTRACTED_SUFFIX = ".zip";
+
+ private static final String SECONDARY_FOLDER_NAME = "code_cache" + File.separator + "secondary-dexes";
+
+ private static final String PREFS_FILE = "multidex.version";
+ private static final String KEY_DEX_NUMBER = "dex.number";
+
+ private static final int VM_WITH_MULTIDEX_VERSION_MAJOR = 2;
+ private static final int VM_WITH_MULTIDEX_VERSION_MINOR = 1;
+
+ private static SharedPreferences getMultiDexPreferences(Context context) {
+ return context.getSharedPreferences(PREFS_FILE, Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB ? Context.MODE_PRIVATE : Context.MODE_PRIVATE | Context.MODE_MULTI_PROCESS);
+ }
+
+
+ public static List getObjectsWithInterface(Context context, Class clazz, String path) {
+ List objectList = new ArrayList<>();
+ try {
+ // These class was generate by arouter-compiler.
+ List classFileNames = getFileNameByPackageName(context, path);
+
+ for (String className : classFileNames) {
+ Class aClass = Class.forName(className);
+ if (clazz.isAssignableFrom(aClass) && !clazz.equals(aClass) && !aClass.isInterface()) {
+ objectList.add((T) Class.forName(className).getConstructor().newInstance());
+ }
+ }
+
+ if (objectList.size() == 0) {
+ logger.error(TAG, "No files were found, check your configuration please!");
+ }
+ } catch (Exception e) {
+ e.getStackTrace();
+ Log.e("ARouter", "getObjectsWithInterface error, " + e.getMessage());
+ }
+
+ return objectList;
+ }
+
+ public static List getObjectsWithInterface(Context context, Class clazz, List pathList) {
+ List objectList = new ArrayList<>();
+// try {
+// // These class was generate by arouter-compiler.
+// List classFileNames = getFileNameByPackageName(context, path);
+//
+// for (String className : classFileNames) {
+// Class aClass = Class.forName(className);
+// if (clazz.isAssignableFrom(aClass) && !clazz.equals(aClass) && !aClass.isInterface()) {
+// objectList.add((T) Class.forName(className).getConstructor().newInstance());
+// }
+// }
+//
+// if (objectList.size() == 0) {
+// logger.error(TAG, "No files were found, check your configuration please!");
+// }
+// } catch (Exception e) {
+// e.getStackTrace();
+// }
+
+ return objectList;
+ }
+
+
+ /**
+ * 通过指定包名,扫描包下面包含的所有的ClassName
+ *
+ * @param context U know
+ * @param packageName 包名
+ * @return 所有class的集合
+ */
+ public static List getFileNameByPackageName(Context context, String packageName) throws PackageManager.NameNotFoundException, IOException {
+ List classNames = new ArrayList<>();
+ for (String path : getSourcePaths(context)) {
+ DexFile dexfile = null;
+
+ try {
+ if (path.endsWith(EXTRACTED_SUFFIX)) {
+ //NOT use new DexFile(path), because it will throw "permission error in /data/dalvik-cache"
+ dexfile = DexFile.loadDex(path, path + ".tmp", 0);
+ } else {
+ dexfile = new DexFile(path);
+ }
+ Enumeration dexEntries = dexfile.entries();
+ while (dexEntries.hasMoreElements()) {
+ String className = dexEntries.nextElement();
+ if (className.contains(packageName)) {
+ classNames.add(className);
+ }
+ }
+ } catch (Throwable ignore) {
+ Log.e("ARouter", "Scan map file in dex files made error.", ignore);
+ } finally {
+ if (null != dexfile) {
+ try {
+ dexfile.close();
+ } catch (Throwable ignore) {
+ }
+ }
+ }
+ }
+
+ Log.d("ARouter", "Filter " + classNames.size() + " classes by packageName <" + packageName + ">");
+ return classNames;
+ }
+
+ /**
+ * get all the dex path
+ *
+ * @param context the application context
+ * @return all the dex path
+ * @throws PackageManager.NameNotFoundException
+ * @throws IOException
+ */
+ public static List getSourcePaths(Context context) throws PackageManager.NameNotFoundException, IOException {
+ ApplicationInfo applicationInfo = context.getPackageManager().getApplicationInfo(context.getPackageName(), 0);
+ File sourceApk = new File(applicationInfo.sourceDir);
+
+ List sourcePaths = new ArrayList<>();
+ sourcePaths.add(applicationInfo.sourceDir); //add the default apk path
+
+ //the prefix of extracted file, ie: test.classes
+ String extractedFilePrefix = sourceApk.getName() + EXTRACTED_NAME_EXT;
+
+// 如果VM已经支持了MultiDex,就不要去Secondary Folder加载 Classesx.zip了,那里已经么有了
+// 通过是否存在sp中的multidex.version是不准确的,因为从低版本升级上来的用户,是包含这个sp配置的
+ if (!isVMMultidexCapable()) {
+ //the total dex numbers
+ int totalDexNumber = getMultiDexPreferences(context).getInt(KEY_DEX_NUMBER, 1);
+ File dexDir = new File(applicationInfo.dataDir, SECONDARY_FOLDER_NAME);
+
+ for (int secondaryNumber = 2; secondaryNumber <= totalDexNumber; secondaryNumber++) {
+ //for each dex file, ie: test.classes2.zip, test.classes3.zip...
+ String fileName = extractedFilePrefix + secondaryNumber + EXTRACTED_SUFFIX;
+ File extractedFile = new File(dexDir, fileName);
+ if (extractedFile.isFile()) {
+ sourcePaths.add(extractedFile.getAbsolutePath());
+ //we ignore the verify zip part
+ } else {
+ throw new IOException("Missing extracted secondary dex file '" + extractedFile.getPath() + "'");
+ }
+ }
+ }
+
+ if (ARouter.debuggable()) { // Search instant run support only debuggable
+ sourcePaths.addAll(tryLoadInstantRunDexFile(applicationInfo));
+ }
+ return sourcePaths;
+ }
+
+ /**
+ * Get instant run dex path, used to catch the branch usingApkSplits=false.
+ */
+ private static List tryLoadInstantRunDexFile(ApplicationInfo applicationInfo) {
+ List instantRunSourcePaths = new ArrayList<>();
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && null != applicationInfo.splitSourceDirs) {
+ // add the splite apk, normally for InstantRun, and newest version.
+ instantRunSourcePaths.addAll(Arrays.asList(applicationInfo.splitSourceDirs));
+ Log.d("ARouter", "Found InstantRun support");
+ } else {
+ try {
+ // This man is reflection from Google instant run sdk, he will tell me where the dex files go.
+ Class pathsByInstantRun = Class.forName("com.android.tools.fd.runtime.Paths");
+ Method getDexFileDirectory = pathsByInstantRun.getMethod("getDexFileDirectory", String.class);
+ String instantRunDexPath = (String) getDexFileDirectory.invoke(null, applicationInfo.packageName);
+
+ File instantRunFilePath = new File(instantRunDexPath);
+ if (instantRunFilePath.exists() && instantRunFilePath.isDirectory()) {
+ File[] dexFile = instantRunFilePath.listFiles();
+ for (File file : dexFile) {
+ if (null != file && file.exists() && file.isFile() && file.getName().endsWith(".dex")) {
+ instantRunSourcePaths.add(file.getAbsolutePath());
+ }
+ }
+ Log.d("ARouter", "Found InstantRun support");
+ }
+
+ } catch (Exception e) {
+ Log.e("ARouter", "InstantRun support error, " + e.getMessage());
+ }
+ }
+
+ return instantRunSourcePaths;
+ }
+
+ /**
+ * Identifies if the current VM has a native support for multidex, meaning there is no need for
+ * additional installation by this library.
+ *
+ * @return true if the VM handles multidex
+ */
+ private static boolean isVMMultidexCapable() {
+ boolean isMultidexCapable = false;
+ String vmName = null;
+
+ try {
+ if (isYunOS()) { // YunOS需要特殊判断
+ vmName = "'YunOS'";
+ isMultidexCapable = Integer.valueOf(System.getProperty("ro.build.version.sdk")) >= 21;
+ } else { // 非YunOS原生Android
+ vmName = "'Android'";
+ String versionString = System.getProperty("java.vm.version");
+ if (versionString != null) {
+ Matcher matcher = Pattern.compile("(\\d+)\\.(\\d+)(\\.\\d+)?").matcher(versionString);
+ if (matcher.matches()) {
+ try {
+ int major = Integer.parseInt(matcher.group(1));
+ int minor = Integer.parseInt(matcher.group(2));
+ isMultidexCapable = (major > VM_WITH_MULTIDEX_VERSION_MAJOR)
+ || ((major == VM_WITH_MULTIDEX_VERSION_MAJOR)
+ && (minor >= VM_WITH_MULTIDEX_VERSION_MINOR));
+ } catch (NumberFormatException ignore) {
+ // let isMultidexCapable be false
+ }
+ }
+ }
+ }
+ } catch (Exception ignore) {
+
+ }
+
+ Log.i("galaxy", "VM with name " + vmName + (isMultidexCapable ? " has multidex support" : " does not have multidex support"));
+ return isMultidexCapable;
+ }
+
+ /**
+ * 判断系统是否为YunOS系统
+ */
+ private static boolean isYunOS() {
+ try {
+ String version = System.getProperty("ro.yunos.version");
+ String vmName = System.getProperty("java.vm.name");
+ return (vmName != null && vmName.toLowerCase().contains("lemur"))
+ || (version != null && version.trim().length() > 0);
+ } catch (Exception ignore) {
+ return false;
+ }
+ }
+}
\ No newline at end of file
diff --git a/lib_common/src/main/java/com/guiying/common/base/InfoCallback.java b/lib_common/src/main/java/com/guiying/module/common/base/InfoCallback.java
similarity index 85%
rename from lib_common/src/main/java/com/guiying/common/base/InfoCallback.java
rename to lib_common/src/main/java/com/guiying/module/common/base/InfoCallback.java
index 0024e7a..96e6d21 100644
--- a/lib_common/src/main/java/com/guiying/common/base/InfoCallback.java
+++ b/lib_common/src/main/java/com/guiying/module/common/base/InfoCallback.java
@@ -1,4 +1,4 @@
-package com.guiying.common.base;
+package com.guiying.module.common.base;
/**
* 数据回调接口
diff --git a/lib_common/src/main/java/com/guiying/common/base/BaseApplication.java b/lib_common/src/main/java/com/guiying/module/common/base/ViewManager.java
similarity index 58%
rename from lib_common/src/main/java/com/guiying/common/base/BaseApplication.java
rename to lib_common/src/main/java/com/guiying/module/common/base/ViewManager.java
index 319ee04..1b421f2 100644
--- a/lib_common/src/main/java/com/guiying/common/base/BaseApplication.java
+++ b/lib_common/src/main/java/com/guiying/module/common/base/ViewManager.java
@@ -1,64 +1,80 @@
-package com.guiying.common.base;
+package com.guiying.module.common.base;
import android.app.Activity;
-import android.app.ActivityManager;
-import android.app.Application;
import android.content.Context;
import android.util.Log;
-import com.guiying.common.utils.Utils;
-import com.orhanobut.logger.LogLevel;
-import com.orhanobut.logger.Logger;
-
+import java.util.ArrayList;
+import java.util.List;
import java.util.Stack;
/**
- * 要想使用BaseApplication,必须在组件中实现自己的Application,并且继承BaseApplication;
- * 组件中实现的Application必须在debug包中的AndroidManifest.xml中注册,否则无法使用;
- * 组件的Application需置于java/debug文件夹中,不得放于主代码;
- * 组件中获取Context的方法必须为:Utils.getContext(),不允许其他写法;
- * BaseApplication主要用来管理全局Activity;
+ *
*
- * @author 2016/12/2 17:02
- * @version V1.0.0
- * @name BaseApplication
+ * @author 张华洋 2017/9/26 22:26
+ * @version V1.1
+ * @name ViewManager
*/
-public class BaseApplication extends Application {
+public class ViewManager {
+
+ private static Stack activityStack;
+ private static List fragmentList;
+
+ public static ViewManager getInstance() {
+ return ViewManagerHolder.sInstance;
+ }
- private static BaseApplication sInstance;
+ private static class ViewManagerHolder {
+ private static final ViewManager sInstance = new ViewManager();
+ }
- private Stack activityStack;
+ private ViewManager() {
+ }
- public static BaseApplication getIns() {
- return sInstance;
+ public void addFragment(int index, BaseFragment fragment) {
+ if (fragmentList == null) {
+ fragmentList = new ArrayList<>();
+ }
+ fragmentList.add(index, fragment);
+ }
+
+
+ public BaseFragment getFragment(int index) {
+ if (fragmentList != null) {
+ return fragmentList.get(index);
+ }
+ return null;
}
- @Override
- public void onCreate() {
- super.onCreate();
- sInstance = this;
- Utils.init(this);
- Logger.init("pattern").logLevel(LogLevel.FULL);
+ public List getAllFragment() {
+ if (fragmentList != null) {
+ return fragmentList;
+ }
+ return null;
}
+
/**
* 添加指定Activity到堆栈
*/
public void addActivity(Activity activity) {
if (activityStack == null) {
- activityStack = new Stack<>();
+ activityStack = new Stack();
}
activityStack.add(activity);
}
+
/**
* 获取当前Activity
*/
public Activity currentActivity() {
- return activityStack.lastElement();
+ Activity activity = activityStack.lastElement();
+ return activity;
}
+
/**
* 结束当前Activity
*/
@@ -67,6 +83,7 @@ public void finishActivity() {
finishActivity(activity);
}
+
/**
* 结束指定的Activity
*/
@@ -78,6 +95,7 @@ public void finishActivity(Activity activity) {
}
}
+
/**
* 结束指定Class的Activity
*/
@@ -90,6 +108,7 @@ public void finishActivity(Class> cls) {
}
}
+
/**
* 结束全部的Activity
*/
@@ -102,6 +121,7 @@ public void finishAllActivity() {
activityStack.clear();
}
+
/**
* 退出应用程序
*/
@@ -109,13 +129,11 @@ public void exitApp(Context context) {
try {
finishAllActivity();
//杀死后台进程需要在AndroidManifest中声明android.permission.KILL_BACKGROUND_PROCESSES;
- ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
+ android.app.ActivityManager activityManager = (android.app.ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
activityManager.killBackgroundProcesses(context.getPackageName());
//System.exit(0);
} catch (Exception e) {
Log.e("ActivityManager", "app exit" + e.getMessage());
}
}
-
-
}
diff --git a/lib_common/src/main/java/com/guiying/common/glide/OkHttpGlideModule.java b/lib_common/src/main/java/com/guiying/module/common/glide/OkHttpGlideModule.java
similarity index 98%
rename from lib_common/src/main/java/com/guiying/common/glide/OkHttpGlideModule.java
rename to lib_common/src/main/java/com/guiying/module/common/glide/OkHttpGlideModule.java
index ba8969a..1fedd2e 100644
--- a/lib_common/src/main/java/com/guiying/common/glide/OkHttpGlideModule.java
+++ b/lib_common/src/main/java/com/guiying/module/common/glide/OkHttpGlideModule.java
@@ -1,4 +1,4 @@
-package com.guiying.common.glide;
+package com.guiying.module.common.glide;
import android.content.Context;
diff --git a/lib_common/src/main/java/com/guiying/common/glide/OkHttpStreamFetcher.java b/lib_common/src/main/java/com/guiying/module/common/glide/OkHttpStreamFetcher.java
similarity index 95%
rename from lib_common/src/main/java/com/guiying/common/glide/OkHttpStreamFetcher.java
rename to lib_common/src/main/java/com/guiying/module/common/glide/OkHttpStreamFetcher.java
index 358afd3..efd1560 100644
--- a/lib_common/src/main/java/com/guiying/common/glide/OkHttpStreamFetcher.java
+++ b/lib_common/src/main/java/com/guiying/module/common/glide/OkHttpStreamFetcher.java
@@ -1,10 +1,10 @@
-package com.guiying.common.glide;
+package com.guiying.module.common.glide;
import com.bumptech.glide.Priority;
import com.bumptech.glide.load.data.DataFetcher;
import com.bumptech.glide.load.model.GlideUrl;
import com.bumptech.glide.util.ContentLengthInputStream;
-import com.guiying.common.utils.CloseUtils;
+import com.guiying.module.common.utils.CloseUtils;
import java.io.IOException;
import java.io.InputStream;
diff --git a/lib_common/src/main/java/com/guiying/common/glide/OkHttpUrlLoader.java b/lib_common/src/main/java/com/guiying/module/common/glide/OkHttpUrlLoader.java
similarity index 98%
rename from lib_common/src/main/java/com/guiying/common/glide/OkHttpUrlLoader.java
rename to lib_common/src/main/java/com/guiying/module/common/glide/OkHttpUrlLoader.java
index 89f166d..c456435 100644
--- a/lib_common/src/main/java/com/guiying/common/glide/OkHttpUrlLoader.java
+++ b/lib_common/src/main/java/com/guiying/module/common/glide/OkHttpUrlLoader.java
@@ -1,4 +1,4 @@
-package com.guiying.common.glide;
+package com.guiying.module.common.glide;
import android.content.Context;
diff --git a/lib_common/src/main/java/com/guiying/common/http/ApiService.java b/lib_common/src/main/java/com/guiying/module/common/http/ApiService.java
similarity index 97%
rename from lib_common/src/main/java/com/guiying/common/http/ApiService.java
rename to lib_common/src/main/java/com/guiying/module/common/http/ApiService.java
index fa73d0a..895b72e 100644
--- a/lib_common/src/main/java/com/guiying/common/http/ApiService.java
+++ b/lib_common/src/main/java/com/guiying/module/common/http/ApiService.java
@@ -1,4 +1,4 @@
-package com.guiying.common.http;
+package com.guiying.module.common.http;
import java.util.Map;
diff --git a/lib_common/src/main/java/com/guiying/common/http/DataParseUtil.java b/lib_common/src/main/java/com/guiying/module/common/http/DataParseUtil.java
similarity index 98%
rename from lib_common/src/main/java/com/guiying/common/http/DataParseUtil.java
rename to lib_common/src/main/java/com/guiying/module/common/http/DataParseUtil.java
index dafb631..9cbc61b 100644
--- a/lib_common/src/main/java/com/guiying/common/http/DataParseUtil.java
+++ b/lib_common/src/main/java/com/guiying/module/common/http/DataParseUtil.java
@@ -1,4 +1,4 @@
-package com.guiying.common.http;
+package com.guiying.module.common.http;
import android.text.TextUtils;
diff --git a/lib_common/src/main/java/com/guiying/common/http/DataType.java b/lib_common/src/main/java/com/guiying/module/common/http/DataType.java
similarity index 95%
rename from lib_common/src/main/java/com/guiying/common/http/DataType.java
rename to lib_common/src/main/java/com/guiying/module/common/http/DataType.java
index 906fde6..7847996 100644
--- a/lib_common/src/main/java/com/guiying/common/http/DataType.java
+++ b/lib_common/src/main/java/com/guiying/module/common/http/DataType.java
@@ -1,4 +1,4 @@
-package com.guiying.common.http;
+package com.guiying.module.common.http;
import android.support.annotation.IntDef;
diff --git a/lib_common/src/main/java/com/guiying/common/http/HttpClient.java b/lib_common/src/main/java/com/guiying/module/common/http/HttpClient.java
similarity index 97%
rename from lib_common/src/main/java/com/guiying/common/http/HttpClient.java
rename to lib_common/src/main/java/com/guiying/module/common/http/HttpClient.java
index 8ebbd04..ce38bfa 100644
--- a/lib_common/src/main/java/com/guiying/common/http/HttpClient.java
+++ b/lib_common/src/main/java/com/guiying/module/common/http/HttpClient.java
@@ -1,4 +1,4 @@
-package com.guiying.common.http;
+package com.guiying.module.common.http;
import android.support.annotation.NonNull;
import android.text.TextUtils;
@@ -7,11 +7,11 @@
import com.franmontiel.persistentcookiejar.PersistentCookieJar;
import com.franmontiel.persistentcookiejar.cache.SetCookieCache;
import com.franmontiel.persistentcookiejar.persistence.SharedPrefsCookiePersistor;
-import com.guiying.common.R;
-import com.guiying.common.utils.NetworkUtils;
-import com.guiying.common.utils.StringUtils;
-import com.guiying.common.utils.ToastUtils;
-import com.guiying.common.utils.Utils;
+import com.guiying.module.common.R;
+import com.guiying.module.common.utils.NetworkUtils;
+import com.guiying.module.common.utils.StringUtils;
+import com.guiying.module.common.utils.ToastUtils;
+import com.guiying.module.common.utils.Utils;
import com.orhanobut.logger.Logger;
import java.io.IOException;
diff --git a/lib_common/src/main/java/com/guiying/common/http/HttpsUtils.java b/lib_common/src/main/java/com/guiying/module/common/http/HttpsUtils.java
similarity index 99%
rename from lib_common/src/main/java/com/guiying/common/http/HttpsUtils.java
rename to lib_common/src/main/java/com/guiying/module/common/http/HttpsUtils.java
index 9245b8b..314d6ce 100644
--- a/lib_common/src/main/java/com/guiying/common/http/HttpsUtils.java
+++ b/lib_common/src/main/java/com/guiying/module/common/http/HttpsUtils.java
@@ -1,10 +1,10 @@
-package com.guiying.common.http;
+package com.guiying.module.common.http;
import android.content.Context;
import android.support.annotation.RawRes;
import android.text.TextUtils;
-import com.guiying.common.utils.CloseUtils;
+import com.guiying.module.common.utils.CloseUtils;
import java.io.ByteArrayInputStream;
import java.io.IOException;
diff --git a/lib_common/src/main/java/com/guiying/common/http/LoggerInterceptor.java b/lib_common/src/main/java/com/guiying/module/common/http/LoggerInterceptor.java
similarity index 99%
rename from lib_common/src/main/java/com/guiying/common/http/LoggerInterceptor.java
rename to lib_common/src/main/java/com/guiying/module/common/http/LoggerInterceptor.java
index 46cbff8..16d0660 100644
--- a/lib_common/src/main/java/com/guiying/common/http/LoggerInterceptor.java
+++ b/lib_common/src/main/java/com/guiying/module/common/http/LoggerInterceptor.java
@@ -1,4 +1,4 @@
-package com.guiying.common.http;
+package com.guiying.module.common.http;
import android.text.TextUtils;
diff --git a/lib_common/src/main/java/com/guiying/common/http/OnResultListener.java b/lib_common/src/main/java/com/guiying/module/common/http/OnResultListener.java
similarity index 94%
rename from lib_common/src/main/java/com/guiying/common/http/OnResultListener.java
rename to lib_common/src/main/java/com/guiying/module/common/http/OnResultListener.java
index 6274b58..527f5f0 100644
--- a/lib_common/src/main/java/com/guiying/common/http/OnResultListener.java
+++ b/lib_common/src/main/java/com/guiying/module/common/http/OnResultListener.java
@@ -1,4 +1,4 @@
-package com.guiying.common.http;
+package com.guiying.module.common.http;
/**
* 在Retrofit中接口会导致泛型擦除,所以这里回调使用Class
diff --git a/lib_common/src/main/java/com/guiying/common/utils/CloseUtils.java b/lib_common/src/main/java/com/guiying/module/common/utils/CloseUtils.java
similarity index 96%
rename from lib_common/src/main/java/com/guiying/common/utils/CloseUtils.java
rename to lib_common/src/main/java/com/guiying/module/common/utils/CloseUtils.java
index dae8eca..336cde0 100644
--- a/lib_common/src/main/java/com/guiying/common/utils/CloseUtils.java
+++ b/lib_common/src/main/java/com/guiying/module/common/utils/CloseUtils.java
@@ -1,4 +1,4 @@
-package com.guiying.common.utils;
+package com.guiying.module.common.utils;
import java.io.Closeable;
import java.io.IOException;
diff --git a/lib_common/src/main/java/com/guiying/common/utils/NetworkUtils.java b/lib_common/src/main/java/com/guiying/module/common/utils/NetworkUtils.java
similarity index 99%
rename from lib_common/src/main/java/com/guiying/common/utils/NetworkUtils.java
rename to lib_common/src/main/java/com/guiying/module/common/utils/NetworkUtils.java
index 06c8800..e788077 100644
--- a/lib_common/src/main/java/com/guiying/common/utils/NetworkUtils.java
+++ b/lib_common/src/main/java/com/guiying/module/common/utils/NetworkUtils.java
@@ -1,4 +1,4 @@
-package com.guiying.common.utils;
+package com.guiying.module.common.utils;
import android.content.Context;
import android.content.Intent;
diff --git a/lib_common/src/main/java/com/guiying/common/utils/ShellUtils.java b/lib_common/src/main/java/com/guiying/module/common/utils/ShellUtils.java
similarity index 99%
rename from lib_common/src/main/java/com/guiying/common/utils/ShellUtils.java
rename to lib_common/src/main/java/com/guiying/module/common/utils/ShellUtils.java
index 138f7d5..ff326cc 100644
--- a/lib_common/src/main/java/com/guiying/common/utils/ShellUtils.java
+++ b/lib_common/src/main/java/com/guiying/module/common/utils/ShellUtils.java
@@ -1,4 +1,4 @@
-package com.guiying.common.utils;
+package com.guiying.module.common.utils;
import java.io.BufferedReader;
import java.io.DataOutputStream;
diff --git a/lib_common/src/main/java/com/guiying/common/utils/StringUtils.java b/lib_common/src/main/java/com/guiying/module/common/utils/StringUtils.java
similarity index 99%
rename from lib_common/src/main/java/com/guiying/common/utils/StringUtils.java
rename to lib_common/src/main/java/com/guiying/module/common/utils/StringUtils.java
index ccfbd93..e09c3ae 100644
--- a/lib_common/src/main/java/com/guiying/common/utils/StringUtils.java
+++ b/lib_common/src/main/java/com/guiying/module/common/utils/StringUtils.java
@@ -1,4 +1,4 @@
-package com.guiying.common.utils;
+package com.guiying.module.common.utils;
/**
* 字符串相关工具类
diff --git a/lib_common/src/main/java/com/guiying/common/utils/ToastUtils.java b/lib_common/src/main/java/com/guiying/module/common/utils/ToastUtils.java
similarity index 99%
rename from lib_common/src/main/java/com/guiying/common/utils/ToastUtils.java
rename to lib_common/src/main/java/com/guiying/module/common/utils/ToastUtils.java
index 5b0fe84..1fd0cdb 100644
--- a/lib_common/src/main/java/com/guiying/common/utils/ToastUtils.java
+++ b/lib_common/src/main/java/com/guiying/module/common/utils/ToastUtils.java
@@ -1,4 +1,4 @@
-package com.guiying.common.utils;
+package com.guiying.module.common.utils;
import android.os.Handler;
import android.os.Looper;
diff --git a/lib_common/src/main/java/com/guiying/common/utils/Utils.java b/lib_common/src/main/java/com/guiying/module/common/utils/Utils.java
similarity index 98%
rename from lib_common/src/main/java/com/guiying/common/utils/Utils.java
rename to lib_common/src/main/java/com/guiying/module/common/utils/Utils.java
index ff9ff74..a06d64d 100644
--- a/lib_common/src/main/java/com/guiying/common/utils/Utils.java
+++ b/lib_common/src/main/java/com/guiying/module/common/utils/Utils.java
@@ -1,4 +1,4 @@
-package com.guiying.common.utils;
+package com.guiying.module.common.utils;
import android.app.Activity;
diff --git a/lib_common/src/main/java/com/guiying/common/HackyViewPager.java b/lib_common/src/main/java/com/guiying/module/common/widget/HackyViewPager.java
similarity index 80%
rename from lib_common/src/main/java/com/guiying/common/HackyViewPager.java
rename to lib_common/src/main/java/com/guiying/module/common/widget/HackyViewPager.java
index f3a1692..a9ace60 100644
--- a/lib_common/src/main/java/com/guiying/common/HackyViewPager.java
+++ b/lib_common/src/main/java/com/guiying/module/common/widget/HackyViewPager.java
@@ -1,4 +1,4 @@
-package com.guiying.common;
+package com.guiying.module.common.widget;
import android.content.Context;
import android.support.v4.view.ViewPager;
@@ -6,7 +6,10 @@
import android.view.MotionEvent;
/**
- * 解决图片缩放崩溃的问题
+ * 解决图片缩放崩溃的问题
+ * @name HackyViewPager
+ * @author 张华洋 2017/9/27 10:10
+ * @version V1.1
*/
public class HackyViewPager extends ViewPager {
diff --git a/lib_common/src/main/java/com/guiying/module/common/widget/NoScrollViewPager.java b/lib_common/src/main/java/com/guiying/module/common/widget/NoScrollViewPager.java
new file mode 100644
index 0000000..be8f2b9
--- /dev/null
+++ b/lib_common/src/main/java/com/guiying/module/common/widget/NoScrollViewPager.java
@@ -0,0 +1,41 @@
+package com.guiying.module.common.widget;
+
+import android.content.Context;
+import android.support.v4.view.ViewPager;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+
+/**
+ * 可以禁止滑动翻页的ViewPager
+ *
+ * @author 张华洋 2017/9/27 10:10
+ * @version V1.1
+ * @name NoScrollViewPager
+ */
+public class NoScrollViewPager extends ViewPager {
+
+ private boolean isPagingEnabled = true;
+
+ public NoScrollViewPager(Context context) {
+ super(context);
+ }
+
+ public NoScrollViewPager(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent event) {
+ return this.isPagingEnabled && super.onTouchEvent(event);
+ }
+
+ @Override
+ public boolean onInterceptTouchEvent(MotionEvent event) {
+ return this.isPagingEnabled && super.onInterceptTouchEvent(event);
+ }
+
+ public void setPagerEnabled(boolean b) {
+ this.isPagingEnabled = b;
+ }
+
+}
From 5caabd1d52e08048c7a0b60cf34893e663f7f0fc Mon Sep 17 00:00:00 2001
From: guiying712
Date: Wed, 27 Sep 2017 10:32:44 +0800
Subject: [PATCH 09/38] =?UTF-8?q?1=EF=BC=9A=E8=B0=83=E6=95=B4=E7=9B=AE?=
=?UTF-8?q?=E5=BD=95=E7=BB=93=E6=9E=84=EF=BC=8C=E5=A2=9E=E5=8A=A0Fragment?=
=?UTF-8?q?=E7=A4=BA=E4=BE=8B=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
module_app/build.gradle | 2 +-
module_app/src/main/AndroidManifest.xml | 4 +--
.../MyApplication.java | 6 ++--
module_girls/src/main/AndroidManifest.xml | 2 +-
.../guiying/{ => module}/girls/Constants.java | 2 +-
.../guiying/module/girls/GirlsFragment.java | 32 +++++++++++++++++
.../com/guiying/module/girls/MyDelegate.java | 34 +++++++++++++++++++
.../girls/data/GirlsDataSource.java | 4 +--
.../{ => module}/girls/data/bean/Girls.java | 2 +-
.../girls/data/bean/GirlsParser.java | 2 +-
.../data/source/RemoteGirlsDataSource.java | 14 ++++----
.../{ => module}/girls/girl/GirlActivity.java | 10 +++---
.../{ => module}/girls/girl/GirlAdapter.java | 6 ++--
.../girls/main/GirlsActivity.java | 6 ++--
.../{ => module}/girls/main/GirlsAdapter.java | 6 ++--
.../girls/main/GirlsContract.java | 8 ++---
.../girls/main/GirlsPresenter.java | 8 ++---
.../{ => module}/girls/main/GirlsView.java | 12 +++----
.../src/main/java/debug/GirlsApplication.java | 6 ++--
.../src/main/module/AndroidManifest.xml | 2 +-
.../src/main/res/layout/activity_girls.xml | 2 +-
.../src/main/res/layout/fragment_girls.xml | 12 +++++++
22 files changed, 130 insertions(+), 52 deletions(-)
rename module_app/src/main/java/com/guiying/{androidmodulepattern => module}/MyApplication.java (95%)
rename module_girls/src/main/java/com/guiying/{ => module}/girls/Constants.java (88%)
create mode 100644 module_girls/src/main/java/com/guiying/module/girls/GirlsFragment.java
create mode 100644 module_girls/src/main/java/com/guiying/module/girls/MyDelegate.java
rename module_girls/src/main/java/com/guiying/{ => module}/girls/data/GirlsDataSource.java (71%)
rename module_girls/src/main/java/com/guiying/{ => module}/girls/data/bean/Girls.java (98%)
rename module_girls/src/main/java/com/guiying/{ => module}/girls/data/bean/GirlsParser.java (96%)
rename module_girls/src/main/java/com/guiying/{ => module}/girls/data/source/RemoteGirlsDataSource.java (72%)
rename module_girls/src/main/java/com/guiying/{ => module}/girls/girl/GirlActivity.java (87%)
rename module_girls/src/main/java/com/guiying/{ => module}/girls/girl/GirlAdapter.java (93%)
rename module_girls/src/main/java/com/guiying/{ => module}/girls/main/GirlsActivity.java (82%)
rename module_girls/src/main/java/com/guiying/{ => module}/girls/main/GirlsAdapter.java (93%)
rename module_girls/src/main/java/com/guiying/{ => module}/girls/main/GirlsContract.java (76%)
rename module_girls/src/main/java/com/guiying/{ => module}/girls/main/GirlsPresenter.java (84%)
rename module_girls/src/main/java/com/guiying/{ => module}/girls/main/GirlsView.java (94%)
create mode 100644 module_girls/src/main/res/layout/fragment_girls.xml
diff --git a/module_app/build.gradle b/module_app/build.gradle
index 37c526b..1e084f4 100644
--- a/module_app/build.gradle
+++ b/module_app/build.gradle
@@ -17,7 +17,7 @@ android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
defaultConfig {
- applicationId "com.guiying.androidmodulepattern"
+ applicationId "com.guiying.module"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode rootProject.ext.versionCode
diff --git a/module_app/src/main/AndroidManifest.xml b/module_app/src/main/AndroidManifest.xml
index 725abcf..315d6cb 100644
--- a/module_app/src/main/AndroidManifest.xml
+++ b/module_app/src/main/AndroidManifest.xml
@@ -1,9 +1,9 @@
+ package="com.guiying.module">
+ package="com.guiying.module.girls">
类说明
+ *
+ * @author 张华洋 2017/9/20 22:29
+ * @version V2.8.3
+ * @name MyDelegate
+ */
+public class MyDelegate implements ApplicationDelegate {
+
+ @Override
+ public void onCreate() {
+ ViewManager.getInstance().addFragment(0, new GirlsFragment());
+ }
+
+ @Override
+ public void onTerminate() {
+
+ }
+
+ @Override
+ public void onLowMemory() {
+
+ }
+
+ @Override
+ public void onTrimMemory(int level) {
+
+ }
+}
diff --git a/module_girls/src/main/java/com/guiying/girls/data/GirlsDataSource.java b/module_girls/src/main/java/com/guiying/module/girls/data/GirlsDataSource.java
similarity index 71%
rename from module_girls/src/main/java/com/guiying/girls/data/GirlsDataSource.java
rename to module_girls/src/main/java/com/guiying/module/girls/data/GirlsDataSource.java
index 4e92618..3f2755d 100644
--- a/module_girls/src/main/java/com/guiying/girls/data/GirlsDataSource.java
+++ b/module_girls/src/main/java/com/guiying/module/girls/data/GirlsDataSource.java
@@ -1,6 +1,6 @@
-package com.guiying.girls.data;
+package com.guiying.module.girls.data;
-import com.guiying.girls.data.bean.GirlsParser;
+import com.guiying.module.girls.data.bean.GirlsParser;
public interface GirlsDataSource {
diff --git a/module_girls/src/main/java/com/guiying/girls/data/bean/Girls.java b/module_girls/src/main/java/com/guiying/module/girls/data/bean/Girls.java
similarity index 98%
rename from module_girls/src/main/java/com/guiying/girls/data/bean/Girls.java
rename to module_girls/src/main/java/com/guiying/module/girls/data/bean/Girls.java
index 162b6b5..26573c9 100644
--- a/module_girls/src/main/java/com/guiying/girls/data/bean/Girls.java
+++ b/module_girls/src/main/java/com/guiying/module/girls/data/bean/Girls.java
@@ -1,4 +1,4 @@
-package com.guiying.girls.data.bean;
+package com.guiying.module.girls.data.bean;
import android.os.Parcel;
import android.os.Parcelable;
diff --git a/module_girls/src/main/java/com/guiying/girls/data/bean/GirlsParser.java b/module_girls/src/main/java/com/guiying/module/girls/data/bean/GirlsParser.java
similarity index 96%
rename from module_girls/src/main/java/com/guiying/girls/data/bean/GirlsParser.java
rename to module_girls/src/main/java/com/guiying/module/girls/data/bean/GirlsParser.java
index b18db5c..d9c4d34 100644
--- a/module_girls/src/main/java/com/guiying/girls/data/bean/GirlsParser.java
+++ b/module_girls/src/main/java/com/guiying/module/girls/data/bean/GirlsParser.java
@@ -1,4 +1,4 @@
-package com.guiying.girls.data.bean;
+package com.guiying.module.girls.data.bean;
import java.util.List;
diff --git a/module_girls/src/main/java/com/guiying/girls/data/source/RemoteGirlsDataSource.java b/module_girls/src/main/java/com/guiying/module/girls/data/source/RemoteGirlsDataSource.java
similarity index 72%
rename from module_girls/src/main/java/com/guiying/girls/data/source/RemoteGirlsDataSource.java
rename to module_girls/src/main/java/com/guiying/module/girls/data/source/RemoteGirlsDataSource.java
index ae343f3..457f412 100644
--- a/module_girls/src/main/java/com/guiying/girls/data/source/RemoteGirlsDataSource.java
+++ b/module_girls/src/main/java/com/guiying/module/girls/data/source/RemoteGirlsDataSource.java
@@ -1,12 +1,12 @@
-package com.guiying.girls.data.source;
+package com.guiying.module.girls.data.source;
-import com.guiying.common.http.DataType;
-import com.guiying.common.http.HttpClient;
-import com.guiying.common.http.OnResultListener;
-import com.guiying.girls.Constants;
-import com.guiying.girls.data.GirlsDataSource;
-import com.guiying.girls.data.bean.GirlsParser;
+import com.guiying.module.common.http.DataType;
+import com.guiying.module.common.http.HttpClient;
+import com.guiying.module.common.http.OnResultListener;
+import com.guiying.module.girls.Constants;
+import com.guiying.module.girls.data.GirlsDataSource;
+import com.guiying.module.girls.data.bean.GirlsParser;
diff --git a/module_girls/src/main/java/com/guiying/girls/girl/GirlActivity.java b/module_girls/src/main/java/com/guiying/module/girls/girl/GirlActivity.java
similarity index 87%
rename from module_girls/src/main/java/com/guiying/girls/girl/GirlActivity.java
rename to module_girls/src/main/java/com/guiying/module/girls/girl/GirlActivity.java
index 9551bb6..bd1dd78 100644
--- a/module_girls/src/main/java/com/guiying/girls/girl/GirlActivity.java
+++ b/module_girls/src/main/java/com/guiying/module/girls/girl/GirlActivity.java
@@ -1,14 +1,14 @@
-package com.guiying.girls.girl;
+package com.guiying.module.girls.girl;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.view.WindowManager;
import com.alibaba.android.arouter.facade.annotation.Route;
-import com.guiying.common.HackyViewPager;
-import com.guiying.common.base.BaseActivity;
-import com.guiying.girls.Constants;
-import com.guiying.girls.data.bean.Girls;
+import com.guiying.module.common.base.BaseActivity;
+import com.guiying.module.common.widget.HackyViewPager;
+import com.guiying.module.girls.Constants;
+import com.guiying.module.girls.data.bean.Girls;
import java.util.List;
diff --git a/module_girls/src/main/java/com/guiying/girls/girl/GirlAdapter.java b/module_girls/src/main/java/com/guiying/module/girls/girl/GirlAdapter.java
similarity index 93%
rename from module_girls/src/main/java/com/guiying/girls/girl/GirlAdapter.java
rename to module_girls/src/main/java/com/guiying/module/girls/girl/GirlAdapter.java
index 6c2bb1d..dce7361 100644
--- a/module_girls/src/main/java/com/guiying/girls/girl/GirlAdapter.java
+++ b/module_girls/src/main/java/com/guiying/module/girls/girl/GirlAdapter.java
@@ -1,4 +1,4 @@
-package com.guiying.girls.girl;
+package com.guiying.module.girls.girl;
import android.content.Context;
import android.support.v4.view.PagerAdapter;
@@ -8,8 +8,8 @@
import com.bumptech.glide.Glide;
import com.github.chrisbanes.photoview.PhotoView;
-import com.guiying.girls.R;
-import com.guiying.girls.data.bean.Girls;
+import com.guiying.module.girls.R;
+import com.guiying.module.girls.data.bean.Girls;
import java.util.List;
diff --git a/module_girls/src/main/java/com/guiying/girls/main/GirlsActivity.java b/module_girls/src/main/java/com/guiying/module/girls/main/GirlsActivity.java
similarity index 82%
rename from module_girls/src/main/java/com/guiying/girls/main/GirlsActivity.java
rename to module_girls/src/main/java/com/guiying/module/girls/main/GirlsActivity.java
index 9ebdf52..9a64571 100644
--- a/module_girls/src/main/java/com/guiying/girls/main/GirlsActivity.java
+++ b/module_girls/src/main/java/com/guiying/module/girls/main/GirlsActivity.java
@@ -1,10 +1,10 @@
-package com.guiying.girls.main;
+package com.guiying.module.girls.main;
import android.os.Bundle;
import com.alibaba.android.arouter.facade.annotation.Route;
-import com.guiying.common.base.BaseActionBarActivity;
-import com.guiying.girls.R;
+import com.guiying.module.common.base.BaseActionBarActivity;
+import com.guiying.module.girls.R;
@Route(path = "/girls/list")
public class GirlsActivity extends BaseActionBarActivity {
diff --git a/module_girls/src/main/java/com/guiying/girls/main/GirlsAdapter.java b/module_girls/src/main/java/com/guiying/module/girls/main/GirlsAdapter.java
similarity index 93%
rename from module_girls/src/main/java/com/guiying/girls/main/GirlsAdapter.java
rename to module_girls/src/main/java/com/guiying/module/girls/main/GirlsAdapter.java
index eefbad0..6ee991a 100644
--- a/module_girls/src/main/java/com/guiying/girls/main/GirlsAdapter.java
+++ b/module_girls/src/main/java/com/guiying/module/girls/main/GirlsAdapter.java
@@ -1,4 +1,4 @@
-package com.guiying.girls.main;
+package com.guiying.module.girls.main;
import android.content.Context;
import android.view.View;
@@ -7,8 +7,8 @@
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
-import com.guiying.girls.R;
-import com.guiying.girls.data.bean.Girls;
+import com.guiying.module.girls.R;
+import com.guiying.module.girls.data.bean.Girls;
import com.jude.easyrecyclerview.adapter.BaseViewHolder;
import com.jude.easyrecyclerview.adapter.RecyclerArrayAdapter;
diff --git a/module_girls/src/main/java/com/guiying/girls/main/GirlsContract.java b/module_girls/src/main/java/com/guiying/module/girls/main/GirlsContract.java
similarity index 76%
rename from module_girls/src/main/java/com/guiying/girls/main/GirlsContract.java
rename to module_girls/src/main/java/com/guiying/module/girls/main/GirlsContract.java
index d4cd0d5..fd57180 100644
--- a/module_girls/src/main/java/com/guiying/girls/main/GirlsContract.java
+++ b/module_girls/src/main/java/com/guiying/module/girls/main/GirlsContract.java
@@ -1,8 +1,8 @@
-package com.guiying.girls.main;
+package com.guiying.module.girls.main;
-import com.guiying.common.base.BasePresenter;
-import com.guiying.common.base.BaseView;
-import com.guiying.girls.data.bean.Girls;
+import com.guiying.module.common.base.BasePresenter;
+import com.guiying.module.common.base.BaseView;
+import com.guiying.module.girls.data.bean.Girls;
import java.util.List;
diff --git a/module_girls/src/main/java/com/guiying/girls/main/GirlsPresenter.java b/module_girls/src/main/java/com/guiying/module/girls/main/GirlsPresenter.java
similarity index 84%
rename from module_girls/src/main/java/com/guiying/girls/main/GirlsPresenter.java
rename to module_girls/src/main/java/com/guiying/module/girls/main/GirlsPresenter.java
index 8a3bca0..a94fa8b 100644
--- a/module_girls/src/main/java/com/guiying/girls/main/GirlsPresenter.java
+++ b/module_girls/src/main/java/com/guiying/module/girls/main/GirlsPresenter.java
@@ -1,8 +1,8 @@
-package com.guiying.girls.main;
+package com.guiying.module.girls.main;
-import com.guiying.girls.data.GirlsDataSource;
-import com.guiying.girls.data.bean.GirlsParser;
-import com.guiying.girls.data.source.RemoteGirlsDataSource;
+import com.guiying.module.girls.data.GirlsDataSource;
+import com.guiying.module.girls.data.bean.GirlsParser;
+import com.guiying.module.girls.data.source.RemoteGirlsDataSource;
/**
* 类说明
diff --git a/module_girls/src/main/java/com/guiying/girls/main/GirlsView.java b/module_girls/src/main/java/com/guiying/module/girls/main/GirlsView.java
similarity index 94%
rename from module_girls/src/main/java/com/guiying/girls/main/GirlsView.java
rename to module_girls/src/main/java/com/guiying/module/girls/main/GirlsView.java
index 1c23e23..dc83d90 100644
--- a/module_girls/src/main/java/com/guiying/girls/main/GirlsView.java
+++ b/module_girls/src/main/java/com/guiying/module/girls/main/GirlsView.java
@@ -1,4 +1,4 @@
-package com.guiying.girls.main;
+package com.guiying.module.girls.main;
import android.content.Context;
import android.content.Intent;
@@ -11,11 +11,11 @@
import android.view.ViewStub;
import android.widget.FrameLayout;
-import com.guiying.common.utils.Utils;
-import com.guiying.girls.Constants;
-import com.guiying.girls.R;
-import com.guiying.girls.data.bean.Girls;
-import com.guiying.girls.girl.GirlActivity;
+import com.guiying.module.common.utils.Utils;
+import com.guiying.module.girls.Constants;
+import com.guiying.module.girls.R;
+import com.guiying.module.girls.data.bean.Girls;
+import com.guiying.module.girls.girl.GirlActivity;
import com.jude.easyrecyclerview.EasyRecyclerView;
import com.jude.easyrecyclerview.adapter.BaseViewHolder;
import com.jude.easyrecyclerview.adapter.RecyclerArrayAdapter;
diff --git a/module_girls/src/main/java/debug/GirlsApplication.java b/module_girls/src/main/java/debug/GirlsApplication.java
index b93eb55..052a4e6 100644
--- a/module_girls/src/main/java/debug/GirlsApplication.java
+++ b/module_girls/src/main/java/debug/GirlsApplication.java
@@ -1,8 +1,8 @@
package debug;
-import com.guiying.common.base.BaseApplication;
-import com.guiying.common.http.HttpClient;
-import com.guiying.common.http.OnResultListener;
+import com.guiying.module.common.base.BaseApplication;
+import com.guiying.module.common.http.HttpClient;
+import com.guiying.module.common.http.OnResultListener;
import com.orhanobut.logger.Logger;
/**
diff --git a/module_girls/src/main/module/AndroidManifest.xml b/module_girls/src/main/module/AndroidManifest.xml
index 4ae8556..f283bb9 100644
--- a/module_girls/src/main/module/AndroidManifest.xml
+++ b/module_girls/src/main/module/AndroidManifest.xml
@@ -1,6 +1,6 @@
+ package="com.guiying.module.girls">
+ tools:context=".girls.main.GirlsActivity">
+
+
+
+
+
From 2c2239498212663d3f9a6a34e6ded41d75dcbadb Mon Sep 17 00:00:00 2001
From: guiying712
Date: Wed, 27 Sep 2017 10:33:22 +0800
Subject: [PATCH 10/38] =?UTF-8?q?1=EF=BC=9A=E8=B0=83=E6=95=B4=E7=9B=AE?=
=?UTF-8?q?=E5=BD=95=E7=BB=93=E6=9E=84=EF=BC=8C=E5=A2=9E=E5=8A=A0Fragment?=
=?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=8C=96=E7=A4=BA=E4=BE=8B=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
module_main/build.gradle | 4 ++
module_main/src/main/AndroidManifest.xml | 12 +++-
.../module/main/BottomNavigationActivity.java | 68 +++++++++++++++++++
.../guiying/module/main/FragmentAdapter.java | 40 +++++++++++
.../{ => module}/main/MainActivity.java | 29 ++++----
.../src/main/java/debug/MainApplication.java | 6 +-
.../src/main/module/AndroidManifest.xml | 4 +-
.../res/drawable/ic_dashboard_black_24dp.xml | 9 +++
.../main/res/drawable/ic_home_black_24dp.xml | 9 +++
.../drawable/ic_notifications_black_24dp.xml | 9 +++
.../res/layout/activity_bottom_navigation.xml | 24 +++++++
.../src/main/res/layout/activity_main.xml | 9 ++-
module_main/src/main/res/menu/navigation.xml | 19 ++++++
module_main/src/main/res/values/strings.xml | 4 ++
14 files changed, 222 insertions(+), 24 deletions(-)
create mode 100644 module_main/src/main/java/com/guiying/module/main/BottomNavigationActivity.java
create mode 100644 module_main/src/main/java/com/guiying/module/main/FragmentAdapter.java
rename module_main/src/main/java/com/guiying/{ => module}/main/MainActivity.java (63%)
create mode 100644 module_main/src/main/res/drawable/ic_dashboard_black_24dp.xml
create mode 100644 module_main/src/main/res/drawable/ic_home_black_24dp.xml
create mode 100644 module_main/src/main/res/drawable/ic_notifications_black_24dp.xml
create mode 100644 module_main/src/main/res/layout/activity_bottom_navigation.xml
create mode 100644 module_main/src/main/res/menu/navigation.xml
diff --git a/module_main/build.gradle b/module_main/build.gradle
index f41c59f..bba5baa 100644
--- a/module_main/build.gradle
+++ b/module_main/build.gradle
@@ -20,6 +20,7 @@ android {
arguments = [moduleName: project.getName()]
}
}
+ vectorDrawables.useSupportLibrary = true
}
@@ -37,10 +38,13 @@ android {
}
}
+
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
annotationProcessor "com.alibaba:arouter-compiler:$rootProject.annotationProcessor"
compile project(':lib_common')
+ compile 'com.android.support:design:25.3.1'
+ compile 'com.android.support:support-vector-drawable:25.3.1'
}
diff --git a/module_main/src/main/AndroidManifest.xml b/module_main/src/main/AndroidManifest.xml
index 4249b68..7601b45 100644
--- a/module_main/src/main/AndroidManifest.xml
+++ b/module_main/src/main/AndroidManifest.xml
@@ -1,14 +1,20 @@
+
+ package="com.guiying.module.main">
-
+
+
+
+
-
+
\ No newline at end of file
diff --git a/module_main/src/main/java/com/guiying/module/main/BottomNavigationActivity.java b/module_main/src/main/java/com/guiying/module/main/BottomNavigationActivity.java
new file mode 100644
index 0000000..f0d0a35
--- /dev/null
+++ b/module_main/src/main/java/com/guiying/module/main/BottomNavigationActivity.java
@@ -0,0 +1,68 @@
+package com.guiying.module.main;
+
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.design.widget.BottomNavigationView;
+import android.view.MenuItem;
+
+import com.guiying.module.common.base.BaseActivity;
+import com.guiying.module.common.base.BaseFragment;
+import com.guiying.module.common.base.ViewManager;
+import com.guiying.module.common.widget.NoScrollViewPager;
+
+import java.util.List;
+
+/**
+ *
+ *
+ * @author 张华洋 2017/9/27 10:23
+ * @version V1.1
+ * @name BottomNavigationActivity
+ */
+public class BottomNavigationActivity extends BaseActivity {
+
+ private NoScrollViewPager mPager;
+ private List mFragments;
+ private FragmentAdapter mAdapter;
+
+ private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
+ = new BottomNavigationView.OnNavigationItemSelectedListener() {
+
+ @Override
+ public boolean onNavigationItemSelected(@NonNull MenuItem item) {
+ int i = item.getItemId();
+ if (i == R.id.navigation_home) {
+ mPager.setCurrentItem(0);
+ return true;
+ } else if (i == R.id.navigation_dashboard) {
+ mPager.setCurrentItem(1);
+ return true;
+ } else if (i == R.id.navigation_notifications) {
+ mPager.setCurrentItem(2);
+ return true;
+ }
+ return false;
+ }
+
+ };
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_bottom_navigation);
+ BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
+ navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
+ initViewPager();
+ }
+
+ private void initViewPager() {
+ mFragments = ViewManager.getInstance().getAllFragment();
+ mPager = (NoScrollViewPager) findViewById(R.id.container_pager);
+ mAdapter = new FragmentAdapter(getSupportFragmentManager(), mFragments);
+ mPager.setPagerEnabled(false);
+ mPager.setAdapter(mAdapter);
+ }
+
+
+}
diff --git a/module_main/src/main/java/com/guiying/module/main/FragmentAdapter.java b/module_main/src/main/java/com/guiying/module/main/FragmentAdapter.java
new file mode 100644
index 0000000..dc5b82b
--- /dev/null
+++ b/module_main/src/main/java/com/guiying/module/main/FragmentAdapter.java
@@ -0,0 +1,40 @@
+package com.guiying.module.main;
+
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentStatePagerAdapter;
+
+import com.guiying.module.common.base.BaseFragment;
+
+import java.util.List;
+
+/**
+ * Fragments适配器
+ *
+ * @author 张华洋 2017/9/27 10:14
+ * @version V1.1
+ * @name ResourcePagerAdapter
+ */
+public class FragmentAdapter extends FragmentStatePagerAdapter {
+ private List mFragments;
+
+ public FragmentAdapter(FragmentManager fm, List mFragments) {
+ super(fm);
+ this.mFragments = mFragments;
+ }
+
+ @Override
+ public Fragment getItem(int position) {
+ return mFragments.get(position);
+ }
+
+ @Override
+ public int getCount() {
+ return mFragments != null ? mFragments.size() : 0;
+ }
+
+ @Override
+ public int getItemPosition(Object object) {
+ return android.support.v4.view.PagerAdapter.POSITION_NONE;
+ }
+}
diff --git a/module_main/src/main/java/com/guiying/main/MainActivity.java b/module_main/src/main/java/com/guiying/module/main/MainActivity.java
similarity index 63%
rename from module_main/src/main/java/com/guiying/main/MainActivity.java
rename to module_main/src/main/java/com/guiying/module/main/MainActivity.java
index dbcb530..db0fb8b 100644
--- a/module_main/src/main/java/com/guiying/main/MainActivity.java
+++ b/module_main/src/main/java/com/guiying/module/main/MainActivity.java
@@ -1,14 +1,14 @@
-package com.guiying.main;
+package com.guiying.module.main;
+import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
-import android.widget.Button;
import com.alibaba.android.arouter.launcher.ARouter;
-import com.guiying.common.base.BaseActivity;
-import com.guiying.common.base.BaseApplication;
-import com.guiying.common.utils.ToastUtils;
+import com.guiying.module.common.base.BaseActivity;
+import com.guiying.module.common.base.ViewManager;
+import com.guiying.module.common.utils.ToastUtils;
/**
* 类说明
@@ -19,18 +19,15 @@
*/
public class MainActivity extends BaseActivity implements View.OnClickListener {
- private long exitTime = 0;
- protected Button newsButton;
- protected Button girlsButton;
+ private long mExitTime = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
- newsButton = (Button) findViewById(R.id.news_button);
- newsButton.setOnClickListener(MainActivity.this);
- girlsButton = (Button) findViewById(R.id.girls_button);
- girlsButton.setOnClickListener(MainActivity.this);
+ findViewById(R.id.news_button).setOnClickListener(this);
+ findViewById(R.id.girls_button).setOnClickListener(this);
+ findViewById(R.id.fragment_button).setOnClickListener(this);
}
@Override
@@ -41,6 +38,8 @@ public void onClick(View view) {
} else if (view.getId() == R.id.girls_button) {
//跳转到GirlsActivity
ARouter.getInstance().build("/girls/list").navigation();
+ } else if (view.getId() == R.id.fragment_button) {
+ startActivity(new Intent(this, BottomNavigationActivity.class));
}
}
@@ -49,11 +48,11 @@ public void onClick(View view) {
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
//两秒之内按返回键就会退出
- if ((System.currentTimeMillis() - exitTime) > 2000) {
+ if ((System.currentTimeMillis() - mExitTime) > 2000) {
ToastUtils.showShortToast(getString(R.string.app_exit_hint));
- exitTime = System.currentTimeMillis();
+ mExitTime = System.currentTimeMillis();
} else {
- BaseApplication.getIns().exitApp(this);
+ ViewManager.getInstance().exitApp(this);
}
return true;
}
diff --git a/module_main/src/main/java/debug/MainApplication.java b/module_main/src/main/java/debug/MainApplication.java
index 293f166..24509f5 100644
--- a/module_main/src/main/java/debug/MainApplication.java
+++ b/module_main/src/main/java/debug/MainApplication.java
@@ -1,8 +1,8 @@
package debug;
-import com.guiying.common.base.BaseApplication;
-import com.guiying.common.http.HttpClient;
-import com.guiying.common.http.OnResultListener;
+import com.guiying.module.common.base.BaseApplication;
+import com.guiying.module.common.http.HttpClient;
+import com.guiying.module.common.http.OnResultListener;
import com.orhanobut.logger.Logger;
/**
diff --git a/module_main/src/main/module/AndroidManifest.xml b/module_main/src/main/module/AndroidManifest.xml
index fc3933a..a5eb0d9 100644
--- a/module_main/src/main/module/AndroidManifest.xml
+++ b/module_main/src/main/module/AndroidManifest.xml
@@ -1,6 +1,6 @@
+ package="com.guiying.module">
-
+
diff --git a/module_main/src/main/res/drawable/ic_dashboard_black_24dp.xml b/module_main/src/main/res/drawable/ic_dashboard_black_24dp.xml
new file mode 100644
index 0000000..ae6a446
--- /dev/null
+++ b/module_main/src/main/res/drawable/ic_dashboard_black_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/module_main/src/main/res/drawable/ic_home_black_24dp.xml b/module_main/src/main/res/drawable/ic_home_black_24dp.xml
new file mode 100644
index 0000000..0c36320
--- /dev/null
+++ b/module_main/src/main/res/drawable/ic_home_black_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/module_main/src/main/res/drawable/ic_notifications_black_24dp.xml b/module_main/src/main/res/drawable/ic_notifications_black_24dp.xml
new file mode 100644
index 0000000..0262382
--- /dev/null
+++ b/module_main/src/main/res/drawable/ic_notifications_black_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/module_main/src/main/res/layout/activity_bottom_navigation.xml b/module_main/src/main/res/layout/activity_bottom_navigation.xml
new file mode 100644
index 0000000..060e7be
--- /dev/null
+++ b/module_main/src/main/res/layout/activity_bottom_navigation.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
diff --git a/module_main/src/main/res/layout/activity_main.xml b/module_main/src/main/res/layout/activity_main.xml
index e5e21fe..c4c16f8 100644
--- a/module_main/src/main/res/layout/activity_main.xml
+++ b/module_main/src/main/res/layout/activity_main.xml
@@ -9,7 +9,7 @@
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
- tools:context="com.guiying.main.MainActivity">
+ tools:context="com.guiying.module.main.MainActivity">
+
+
+
diff --git a/module_main/src/main/res/menu/navigation.xml b/module_main/src/main/res/menu/navigation.xml
new file mode 100644
index 0000000..f4de4f8
--- /dev/null
+++ b/module_main/src/main/res/menu/navigation.xml
@@ -0,0 +1,19 @@
+
+
diff --git a/module_main/src/main/res/values/strings.xml b/module_main/src/main/res/values/strings.xml
index 01beb45..177710e 100644
--- a/module_main/src/main/res/values/strings.xml
+++ b/module_main/src/main/res/values/strings.xml
@@ -2,5 +2,9 @@
main组件
再按一次退出程序
+ BottomNavigationActivity
+ Home
+ Dashboard
+ Notifications
From fdd6dd38d64f92c0242473ff1db67890f1558c50 Mon Sep 17 00:00:00 2001
From: guiying712
Date: Wed, 27 Sep 2017 10:33:47 +0800
Subject: [PATCH 11/38] =?UTF-8?q?1=EF=BC=9A=E8=B0=83=E6=95=B4=E7=9B=AE?=
=?UTF-8?q?=E5=BD=95=E7=BB=93=E6=9E=84=EF=BC=8C=E5=A2=9E=E5=8A=A0Fragment?=
=?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=8C=96=E7=A4=BA=E4=BE=8B=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
module_news/build.gradle | 1 +
module_news/src/main/AndroidManifest.xml | 2 +-
.../guiying/{ => module}/news/Constants.java | 2 +-
.../com/guiying/module/news/MyDelegate.java | 36 +++++++++++++++++++
.../com/guiying/module/news/NewsFragment.java | 32 +++++++++++++++++
.../news/data/NewsDataSource.java | 8 ++---
.../news/data/bean/MessageDetail.java | 2 +-
.../{ => module}/news/data/bean/Story.java | 2 +-
.../news/data/bean/StoryList.java | 2 +-
.../data/source/RemoteNewsDataSource.java | 18 +++++-----
.../news/detail/NewsDetailActivity.java | 4 +--
.../news/detail/NewsDetailContract.java | 8 ++---
.../news/detail/NewsDetailPresenter.java | 10 +++---
.../news/detail/NewsDetailView.java | 6 ++--
.../news/main/NewsCenterActivity.java | 6 ++--
.../news/main/NewsListAdapter.java | 8 ++---
.../news/main/NewsListContract.java | 8 ++---
.../news/main/NewsListPresenter.java | 10 +++---
.../{ => module}/news/main/NewsListView.java | 6 ++--
.../news/main/NewsListViewAdapter.java | 2 +-
.../src/main/java/debug/LauncherActivity.java | 2 +-
.../src/main/java/debug/NewsApplication.java | 12 +++----
.../src/main/module/AndroidManifest.xml | 2 +-
.../src/main/res/layout/fragment_news.xml | 14 ++++++++
module_news/src/main/res/values/strings.xml | 3 ++
25 files changed, 146 insertions(+), 60 deletions(-)
rename module_news/src/main/java/com/guiying/{ => module}/news/Constants.java (92%)
create mode 100644 module_news/src/main/java/com/guiying/module/news/MyDelegate.java
create mode 100644 module_news/src/main/java/com/guiying/module/news/NewsFragment.java
rename module_news/src/main/java/com/guiying/{ => module}/news/data/NewsDataSource.java (72%)
rename module_news/src/main/java/com/guiying/{ => module}/news/data/bean/MessageDetail.java (98%)
rename module_news/src/main/java/com/guiying/{ => module}/news/data/bean/Story.java (97%)
rename module_news/src/main/java/com/guiying/{ => module}/news/data/bean/StoryList.java (92%)
rename module_news/src/main/java/com/guiying/{ => module}/news/data/source/RemoteNewsDataSource.java (80%)
rename module_news/src/main/java/com/guiying/{ => module}/news/detail/NewsDetailActivity.java (87%)
rename module_news/src/main/java/com/guiying/{ => module}/news/detail/NewsDetailContract.java (71%)
rename module_news/src/main/java/com/guiying/{ => module}/news/detail/NewsDetailPresenter.java (78%)
rename module_news/src/main/java/com/guiying/{ => module}/news/detail/NewsDetailView.java (96%)
rename module_news/src/main/java/com/guiying/{ => module}/news/main/NewsCenterActivity.java (94%)
rename module_news/src/main/java/com/guiying/{ => module}/news/main/NewsListAdapter.java (91%)
rename module_news/src/main/java/com/guiying/{ => module}/news/main/NewsListContract.java (71%)
rename module_news/src/main/java/com/guiying/{ => module}/news/main/NewsListPresenter.java (78%)
rename module_news/src/main/java/com/guiying/{ => module}/news/main/NewsListView.java (95%)
rename module_news/src/main/java/com/guiying/{ => module}/news/main/NewsListViewAdapter.java (98%)
create mode 100644 module_news/src/main/res/layout/fragment_news.xml
diff --git a/module_news/build.gradle b/module_news/build.gradle
index 4014b71..7c5b438 100644
--- a/module_news/build.gradle
+++ b/module_news/build.gradle
@@ -42,4 +42,5 @@ dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
annotationProcessor "com.alibaba:arouter-compiler:$rootProject.annotationProcessor"
compile project(':lib_common')
+ compile 'com.android.support:support-v4:25.3.1'
}
diff --git a/module_news/src/main/AndroidManifest.xml b/module_news/src/main/AndroidManifest.xml
index 6873b60..14b08f4 100644
--- a/module_news/src/main/AndroidManifest.xml
+++ b/module_news/src/main/AndroidManifest.xml
@@ -1,5 +1,5 @@
+ package="com.guiying.module.news">
类说明
+ *
+ * @author 张华洋 2017/9/20 22:29
+ * @version V2.8.3
+ * @name MyDelegate
+ */
+
+
+public class MyDelegate implements ApplicationDelegate {
+
+ @Override
+ public void onCreate() {
+ ViewManager.getInstance().addFragment(0, new NewsFragment());
+ }
+
+ @Override
+ public void onTerminate() {
+
+ }
+
+ @Override
+ public void onLowMemory() {
+
+ }
+
+ @Override
+ public void onTrimMemory(int level) {
+
+ }
+}
diff --git a/module_news/src/main/java/com/guiying/module/news/NewsFragment.java b/module_news/src/main/java/com/guiying/module/news/NewsFragment.java
new file mode 100644
index 0000000..e316af6
--- /dev/null
+++ b/module_news/src/main/java/com/guiying/module/news/NewsFragment.java
@@ -0,0 +1,32 @@
+package com.guiying.module.news;
+
+
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.guiying.module.common.base.BaseFragment;
+
+
+/**
+ * A simple {@link Fragment} subclass.
+ */
+public class NewsFragment extends BaseFragment {
+
+
+ public NewsFragment() {
+ // Required empty public constructor
+ }
+
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Inflate the layout for this fragment
+ return inflater.inflate(R.layout.fragment_news, container, false);
+ }
+
+
+}
diff --git a/module_news/src/main/java/com/guiying/news/data/NewsDataSource.java b/module_news/src/main/java/com/guiying/module/news/data/NewsDataSource.java
similarity index 72%
rename from module_news/src/main/java/com/guiying/news/data/NewsDataSource.java
rename to module_news/src/main/java/com/guiying/module/news/data/NewsDataSource.java
index 07d6fbd..8990f08 100644
--- a/module_news/src/main/java/com/guiying/news/data/NewsDataSource.java
+++ b/module_news/src/main/java/com/guiying/module/news/data/NewsDataSource.java
@@ -1,8 +1,8 @@
-package com.guiying.news.data;
+package com.guiying.module.news.data;
-import com.guiying.common.base.InfoCallback;
-import com.guiying.news.data.bean.MessageDetail;
-import com.guiying.news.data.bean.StoryList;
+import com.guiying.module.common.base.InfoCallback;
+import com.guiying.module.news.data.bean.MessageDetail;
+import com.guiying.module.news.data.bean.StoryList;
/**
* 类说明
diff --git a/module_news/src/main/java/com/guiying/news/data/bean/MessageDetail.java b/module_news/src/main/java/com/guiying/module/news/data/bean/MessageDetail.java
similarity index 98%
rename from module_news/src/main/java/com/guiying/news/data/bean/MessageDetail.java
rename to module_news/src/main/java/com/guiying/module/news/data/bean/MessageDetail.java
index b853f15..204bb82 100644
--- a/module_news/src/main/java/com/guiying/news/data/bean/MessageDetail.java
+++ b/module_news/src/main/java/com/guiying/module/news/data/bean/MessageDetail.java
@@ -1,4 +1,4 @@
-package com.guiying.news.data.bean;
+package com.guiying.module.news.data.bean;
import java.util.List;
diff --git a/module_news/src/main/java/com/guiying/news/data/bean/Story.java b/module_news/src/main/java/com/guiying/module/news/data/bean/Story.java
similarity index 97%
rename from module_news/src/main/java/com/guiying/news/data/bean/Story.java
rename to module_news/src/main/java/com/guiying/module/news/data/bean/Story.java
index 7b7cef2..af488ca 100644
--- a/module_news/src/main/java/com/guiying/news/data/bean/Story.java
+++ b/module_news/src/main/java/com/guiying/module/news/data/bean/Story.java
@@ -1,4 +1,4 @@
-package com.guiying.news.data.bean;
+package com.guiying.module.news.data.bean;
/**
* 日报新闻实体类
diff --git a/module_news/src/main/java/com/guiying/news/data/bean/StoryList.java b/module_news/src/main/java/com/guiying/module/news/data/bean/StoryList.java
similarity index 92%
rename from module_news/src/main/java/com/guiying/news/data/bean/StoryList.java
rename to module_news/src/main/java/com/guiying/module/news/data/bean/StoryList.java
index 99f3f5e..58ba7e0 100644
--- a/module_news/src/main/java/com/guiying/news/data/bean/StoryList.java
+++ b/module_news/src/main/java/com/guiying/module/news/data/bean/StoryList.java
@@ -1,4 +1,4 @@
-package com.guiying.news.data.bean;
+package com.guiying.module.news.data.bean;
import java.util.List;
diff --git a/module_news/src/main/java/com/guiying/news/data/source/RemoteNewsDataSource.java b/module_news/src/main/java/com/guiying/module/news/data/source/RemoteNewsDataSource.java
similarity index 80%
rename from module_news/src/main/java/com/guiying/news/data/source/RemoteNewsDataSource.java
rename to module_news/src/main/java/com/guiying/module/news/data/source/RemoteNewsDataSource.java
index 51075f2..05d4d84 100644
--- a/module_news/src/main/java/com/guiying/news/data/source/RemoteNewsDataSource.java
+++ b/module_news/src/main/java/com/guiying/module/news/data/source/RemoteNewsDataSource.java
@@ -1,13 +1,13 @@
-package com.guiying.news.data.source;
+package com.guiying.module.news.data.source;
-import com.guiying.common.base.InfoCallback;
-import com.guiying.common.http.DataType;
-import com.guiying.common.http.HttpClient;
-import com.guiying.common.http.OnResultListener;
-import com.guiying.news.Constants;
-import com.guiying.news.data.NewsDataSource;
-import com.guiying.news.data.bean.MessageDetail;
-import com.guiying.news.data.bean.StoryList;
+import com.guiying.module.common.base.InfoCallback;
+import com.guiying.module.common.http.DataType;
+import com.guiying.module.common.http.HttpClient;
+import com.guiying.module.common.http.OnResultListener;
+import com.guiying.module.news.Constants;
+import com.guiying.module.news.data.NewsDataSource;
+import com.guiying.module.news.data.bean.MessageDetail;
+import com.guiying.module.news.data.bean.StoryList;
/**
* 类说明
diff --git a/module_news/src/main/java/com/guiying/news/detail/NewsDetailActivity.java b/module_news/src/main/java/com/guiying/module/news/detail/NewsDetailActivity.java
similarity index 87%
rename from module_news/src/main/java/com/guiying/news/detail/NewsDetailActivity.java
rename to module_news/src/main/java/com/guiying/module/news/detail/NewsDetailActivity.java
index ed3a197..1539ad9 100644
--- a/module_news/src/main/java/com/guiying/news/detail/NewsDetailActivity.java
+++ b/module_news/src/main/java/com/guiying/module/news/detail/NewsDetailActivity.java
@@ -1,9 +1,9 @@
-package com.guiying.news.detail;
+package com.guiying.module.news.detail;
import android.os.Bundle;
import com.alibaba.android.arouter.facade.annotation.Route;
-import com.guiying.common.base.BaseActivity;
+import com.guiying.module.common.base.BaseActivity;
/**
* 类说明
diff --git a/module_news/src/main/java/com/guiying/news/detail/NewsDetailContract.java b/module_news/src/main/java/com/guiying/module/news/detail/NewsDetailContract.java
similarity index 71%
rename from module_news/src/main/java/com/guiying/news/detail/NewsDetailContract.java
rename to module_news/src/main/java/com/guiying/module/news/detail/NewsDetailContract.java
index fb0f422..6a21ef5 100644
--- a/module_news/src/main/java/com/guiying/news/detail/NewsDetailContract.java
+++ b/module_news/src/main/java/com/guiying/module/news/detail/NewsDetailContract.java
@@ -1,8 +1,8 @@
-package com.guiying.news.detail;
+package com.guiying.module.news.detail;
-import com.guiying.common.base.BasePresenter;
-import com.guiying.common.base.BaseView;
-import com.guiying.news.data.bean.MessageDetail;
+import com.guiying.module.common.base.BasePresenter;
+import com.guiying.module.common.base.BaseView;
+import com.guiying.module.news.data.bean.MessageDetail;
/**
* 类说明
diff --git a/module_news/src/main/java/com/guiying/news/detail/NewsDetailPresenter.java b/module_news/src/main/java/com/guiying/module/news/detail/NewsDetailPresenter.java
similarity index 78%
rename from module_news/src/main/java/com/guiying/news/detail/NewsDetailPresenter.java
rename to module_news/src/main/java/com/guiying/module/news/detail/NewsDetailPresenter.java
index f2b718c..f517ae7 100644
--- a/module_news/src/main/java/com/guiying/news/detail/NewsDetailPresenter.java
+++ b/module_news/src/main/java/com/guiying/module/news/detail/NewsDetailPresenter.java
@@ -1,9 +1,9 @@
-package com.guiying.news.detail;
+package com.guiying.module.news.detail;
-import com.guiying.common.base.InfoCallback;
-import com.guiying.news.data.NewsDataSource;
-import com.guiying.news.data.bean.MessageDetail;
-import com.guiying.news.data.source.RemoteNewsDataSource;
+import com.guiying.module.common.base.InfoCallback;
+import com.guiying.module.news.data.NewsDataSource;
+import com.guiying.module.news.data.bean.MessageDetail;
+import com.guiying.module.news.data.source.RemoteNewsDataSource;
/**
* 类说明
diff --git a/module_news/src/main/java/com/guiying/news/detail/NewsDetailView.java b/module_news/src/main/java/com/guiying/module/news/detail/NewsDetailView.java
similarity index 96%
rename from module_news/src/main/java/com/guiying/news/detail/NewsDetailView.java
rename to module_news/src/main/java/com/guiying/module/news/detail/NewsDetailView.java
index 164f1fb..6be1e58 100644
--- a/module_news/src/main/java/com/guiying/news/detail/NewsDetailView.java
+++ b/module_news/src/main/java/com/guiying/module/news/detail/NewsDetailView.java
@@ -1,4 +1,4 @@
-package com.guiying.news.detail;
+package com.guiying.module.news.detail;
import android.content.Context;
import android.graphics.Bitmap;
@@ -17,8 +17,8 @@
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.animation.GlideAnimation;
import com.bumptech.glide.request.target.SimpleTarget;
-import com.guiying.news.R;
-import com.guiying.news.data.bean.MessageDetail;
+import com.guiying.module.news.R;
+import com.guiying.module.news.data.bean.MessageDetail;
/**
* 类说明
diff --git a/module_news/src/main/java/com/guiying/news/main/NewsCenterActivity.java b/module_news/src/main/java/com/guiying/module/news/main/NewsCenterActivity.java
similarity index 94%
rename from module_news/src/main/java/com/guiying/news/main/NewsCenterActivity.java
rename to module_news/src/main/java/com/guiying/module/news/main/NewsCenterActivity.java
index 4bec37c..af806e2 100644
--- a/module_news/src/main/java/com/guiying/news/main/NewsCenterActivity.java
+++ b/module_news/src/main/java/com/guiying/module/news/main/NewsCenterActivity.java
@@ -1,4 +1,4 @@
-package com.guiying.news.main;
+package com.guiying.module.news.main;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
@@ -6,8 +6,8 @@
import android.support.v7.widget.Toolbar;
import com.alibaba.android.arouter.facade.annotation.Route;
-import com.guiying.common.base.BaseActivity;
-import com.guiying.news.R;
+import com.guiying.module.common.base.BaseActivity;
+import com.guiying.module.news.R;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
diff --git a/module_news/src/main/java/com/guiying/news/main/NewsListAdapter.java b/module_news/src/main/java/com/guiying/module/news/main/NewsListAdapter.java
similarity index 91%
rename from module_news/src/main/java/com/guiying/news/main/NewsListAdapter.java
rename to module_news/src/main/java/com/guiying/module/news/main/NewsListAdapter.java
index d832569..76e452f 100644
--- a/module_news/src/main/java/com/guiying/news/main/NewsListAdapter.java
+++ b/module_news/src/main/java/com/guiying/module/news/main/NewsListAdapter.java
@@ -1,4 +1,4 @@
-package com.guiying.news.main;
+package com.guiying.module.news.main;
import android.content.Context;
import android.content.Intent;
@@ -9,9 +9,9 @@
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
-import com.guiying.news.R;
-import com.guiying.news.data.bean.Story;
-import com.guiying.news.detail.NewsDetailActivity;
+import com.guiying.module.news.R;
+import com.guiying.module.news.data.bean.Story;
+import com.guiying.module.news.detail.NewsDetailActivity;
import com.jude.easyrecyclerview.adapter.BaseViewHolder;
import com.jude.easyrecyclerview.adapter.RecyclerArrayAdapter;
diff --git a/module_news/src/main/java/com/guiying/news/main/NewsListContract.java b/module_news/src/main/java/com/guiying/module/news/main/NewsListContract.java
similarity index 71%
rename from module_news/src/main/java/com/guiying/news/main/NewsListContract.java
rename to module_news/src/main/java/com/guiying/module/news/main/NewsListContract.java
index 782c2a7..6a7106d 100644
--- a/module_news/src/main/java/com/guiying/news/main/NewsListContract.java
+++ b/module_news/src/main/java/com/guiying/module/news/main/NewsListContract.java
@@ -1,8 +1,8 @@
-package com.guiying.news.main;
+package com.guiying.module.news.main;
-import com.guiying.common.base.BasePresenter;
-import com.guiying.common.base.BaseView;
-import com.guiying.news.data.bean.StoryList;
+import com.guiying.module.common.base.BasePresenter;
+import com.guiying.module.common.base.BaseView;
+import com.guiying.module.news.data.bean.StoryList;
/**
* 类说明
diff --git a/module_news/src/main/java/com/guiying/news/main/NewsListPresenter.java b/module_news/src/main/java/com/guiying/module/news/main/NewsListPresenter.java
similarity index 78%
rename from module_news/src/main/java/com/guiying/news/main/NewsListPresenter.java
rename to module_news/src/main/java/com/guiying/module/news/main/NewsListPresenter.java
index 96b9f20..8ac69db 100644
--- a/module_news/src/main/java/com/guiying/news/main/NewsListPresenter.java
+++ b/module_news/src/main/java/com/guiying/module/news/main/NewsListPresenter.java
@@ -1,9 +1,9 @@
-package com.guiying.news.main;
+package com.guiying.module.news.main;
-import com.guiying.common.base.InfoCallback;
-import com.guiying.news.data.NewsDataSource;
-import com.guiying.news.data.bean.StoryList;
-import com.guiying.news.data.source.RemoteNewsDataSource;
+import com.guiying.module.common.base.InfoCallback;
+import com.guiying.module.news.data.NewsDataSource;
+import com.guiying.module.news.data.bean.StoryList;
+import com.guiying.module.news.data.source.RemoteNewsDataSource;
/**
* 类说明
diff --git a/module_news/src/main/java/com/guiying/news/main/NewsListView.java b/module_news/src/main/java/com/guiying/module/news/main/NewsListView.java
similarity index 95%
rename from module_news/src/main/java/com/guiying/news/main/NewsListView.java
rename to module_news/src/main/java/com/guiying/module/news/main/NewsListView.java
index 70ce0d1..254aca0 100644
--- a/module_news/src/main/java/com/guiying/news/main/NewsListView.java
+++ b/module_news/src/main/java/com/guiying/module/news/main/NewsListView.java
@@ -1,4 +1,4 @@
-package com.guiying.news.main;
+package com.guiying.module.news.main;
import android.content.Context;
import android.support.v4.content.ContextCompat;
@@ -6,8 +6,8 @@
import android.support.v7.widget.LinearLayoutManager;
import android.util.AttributeSet;
-import com.guiying.news.R;
-import com.guiying.news.data.bean.StoryList;
+import com.guiying.module.news.R;
+import com.guiying.module.news.data.bean.StoryList;
import com.jude.easyrecyclerview.EasyRecyclerView;
import com.jude.easyrecyclerview.adapter.RecyclerArrayAdapter;
import com.jude.easyrecyclerview.decoration.DividerDecoration;
diff --git a/module_news/src/main/java/com/guiying/news/main/NewsListViewAdapter.java b/module_news/src/main/java/com/guiying/module/news/main/NewsListViewAdapter.java
similarity index 98%
rename from module_news/src/main/java/com/guiying/news/main/NewsListViewAdapter.java
rename to module_news/src/main/java/com/guiying/module/news/main/NewsListViewAdapter.java
index dbd36af..4fe1893 100644
--- a/module_news/src/main/java/com/guiying/news/main/NewsListViewAdapter.java
+++ b/module_news/src/main/java/com/guiying/module/news/main/NewsListViewAdapter.java
@@ -1,4 +1,4 @@
-package com.guiying.news.main;
+package com.guiying.module.news.main;
import android.support.v4.view.PagerAdapter;
import android.view.View;
diff --git a/module_news/src/main/java/debug/LauncherActivity.java b/module_news/src/main/java/debug/LauncherActivity.java
index 02fdca3..373f765 100644
--- a/module_news/src/main/java/debug/LauncherActivity.java
+++ b/module_news/src/main/java/debug/LauncherActivity.java
@@ -4,7 +4,7 @@
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
-import com.guiying.news.detail.NewsDetailActivity;
+import com.guiying.module.news.detail.NewsDetailActivity;
/**
* 组件开发模式下,用于传递数据的启动Activity,集成模式下无效
diff --git a/module_news/src/main/java/debug/NewsApplication.java b/module_news/src/main/java/debug/NewsApplication.java
index e6af33e..8bcfdcb 100644
--- a/module_news/src/main/java/debug/NewsApplication.java
+++ b/module_news/src/main/java/debug/NewsApplication.java
@@ -1,11 +1,11 @@
package debug;
-import com.guiying.common.base.BaseApplication;
-import com.guiying.common.http.DataType;
-import com.guiying.common.http.HttpClient;
-import com.guiying.common.http.OnResultListener;
-import com.guiying.news.Constants;
-import com.guiying.news.data.bean.StoryList;
+import com.guiying.module.common.base.BaseApplication;
+import com.guiying.module.common.http.DataType;
+import com.guiying.module.common.http.HttpClient;
+import com.guiying.module.common.http.OnResultListener;
+import com.guiying.module.news.Constants;
+import com.guiying.module.news.data.bean.StoryList;
import com.orhanobut.logger.Logger;
/**
diff --git a/module_news/src/main/module/AndroidManifest.xml b/module_news/src/main/module/AndroidManifest.xml
index 000e4ab..d16a659 100644
--- a/module_news/src/main/module/AndroidManifest.xml
+++ b/module_news/src/main/module/AndroidManifest.xml
@@ -1,6 +1,6 @@
+ package="com.guiying.module.news">
+
+
+
+
+
diff --git a/module_news/src/main/res/values/strings.xml b/module_news/src/main/res/values/strings.xml
index ae57d42..3ac24fd 100644
--- a/module_news/src/main/res/values/strings.xml
+++ b/module_news/src/main/res/values/strings.xml
@@ -3,4 +3,7 @@
News
+
+ Hello blank fragment
+
From 1483376839bc64a35e2cb36efdfec00e1f49b531 Mon Sep 17 00:00:00 2001
From: guiying712
Date: Wed, 27 Sep 2017 17:04:14 +0800
Subject: [PATCH 12/38] =?UTF-8?q?1=EF=BC=9A=E4=BF=AE=E5=A4=8D=E5=8A=A0?=
=?UTF-8?q?=E8=BD=BD=E5=9B=BE=E7=89=87=E5=B4=A9=E6=BA=83=E7=9A=84bug?=
=?UTF-8?q?=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
lib_common/src/main/AndroidManifest.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib_common/src/main/AndroidManifest.xml b/lib_common/src/main/AndroidManifest.xml
index cca80d3..8039311 100644
--- a/lib_common/src/main/AndroidManifest.xml
+++ b/lib_common/src/main/AndroidManifest.xml
@@ -16,7 +16,7 @@
From cf8cb5ca4ccfabdf32cc3e000f3eb9d87657215a Mon Sep 17 00:00:00 2001
From: guiying712
Date: Sat, 30 Sep 2017 14:17:51 +0800
Subject: [PATCH 13/38] =?UTF-8?q?1=EF=BC=9A=E4=BF=AE=E6=94=B9ClassUtils?=
=?UTF-8?q?=E6=96=B9=E6=B3=95=EF=BC=8C=E5=A2=9E=E5=8A=A0=E5=A4=9A=E4=B8=AA?=
=?UTF-8?q?=E8=B7=AF=E5=BE=84=E4=B8=8B=E5=AF=BB=E6=89=BE=E7=B1=BB=E7=9A=84?=
=?UTF-8?q?=E6=96=B9=E6=B3=95=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../module/common/base/BaseActivity.java | 76 ++++++++++-----
.../module/common/base/BaseApplication.java | 10 +-
.../module/common/base/BaseFragment.java | 53 +++++++---
.../module/common/base/ClassUtils.java | 97 +++++++++++--------
.../module/common/http/HttpClient.java | 2 +-
5 files changed, 156 insertions(+), 82 deletions(-)
diff --git a/lib_common/src/main/java/com/guiying/module/common/base/BaseActivity.java b/lib_common/src/main/java/com/guiying/module/common/base/BaseActivity.java
index a108bb5..340afa2 100644
--- a/lib_common/src/main/java/com/guiying/module/common/base/BaseActivity.java
+++ b/lib_common/src/main/java/com/guiying/module/common/base/BaseActivity.java
@@ -19,26 +19,6 @@
*/
public abstract class BaseActivity extends AppCompatActivity {
- /**
- * Setup the toolbar.
- *
- * @param toolbar toolbar
- * @param hideTitle 是否隐藏Title
- */
- protected void setupToolBar(Toolbar toolbar, boolean hideTitle) {
- setSupportActionBar(toolbar);
- ActionBar actionBar = getSupportActionBar();
- if (actionBar != null) {
- actionBar.setHomeAsUpIndicator(R.drawable.ic_arrow_back);
- actionBar.setDisplayHomeAsUpEnabled(true);
- actionBar.setDisplayShowHomeEnabled(true);
- if (hideTitle) {
- //隐藏Title
- actionBar.setDisplayShowTitleEnabled(false);
- }
- }
- }
-
/**
* 封装的findViewByID方法
@@ -48,6 +28,7 @@ protected void setupToolBar(Toolbar toolbar, boolean hideTitle) {
return (T) super.findViewById(id);
}
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -67,7 +48,34 @@ public boolean onSupportNavigateUp() {
return true;
}
- //添加fragment
+
+ /**
+ * Setup the toolbar.
+ *
+ * @param toolbar toolbar
+ * @param hideTitle 是否隐藏Title
+ */
+ protected void setupToolBar(Toolbar toolbar, boolean hideTitle) {
+ setSupportActionBar(toolbar);
+ ActionBar actionBar = getSupportActionBar();
+ if (actionBar != null) {
+ actionBar.setHomeAsUpIndicator(R.drawable.ic_arrow_back);
+ actionBar.setDisplayHomeAsUpEnabled(true);
+ actionBar.setDisplayShowHomeEnabled(true);
+ if (hideTitle) {
+ //隐藏Title
+ actionBar.setDisplayShowTitleEnabled(false);
+ }
+ }
+ }
+
+
+ /**
+ * 添加fragment
+ *
+ * @param fragment
+ * @param frameId
+ */
protected void addFragment(BaseFragment fragment, @IdRes int frameId) {
Utils.checkNotNull(fragment);
getSupportFragmentManager().beginTransaction()
@@ -77,7 +85,12 @@ protected void addFragment(BaseFragment fragment, @IdRes int frameId) {
}
- //替换fragment
+
+ /**
+ * 替换fragment
+ * @param fragment
+ * @param frameId
+ */
protected void replaceFragment(BaseFragment fragment, @IdRes int frameId) {
Utils.checkNotNull(fragment);
getSupportFragmentManager().beginTransaction()
@@ -87,7 +100,11 @@ protected void replaceFragment(BaseFragment fragment, @IdRes int frameId) {
}
- //隐藏fragment
+
+ /**
+ * 隐藏fragment
+ * @param fragment
+ */
protected void hideFragment(BaseFragment fragment) {
Utils.checkNotNull(fragment);
getSupportFragmentManager().beginTransaction()
@@ -97,7 +114,10 @@ protected void hideFragment(BaseFragment fragment) {
}
- //显示fragment
+ /**
+ * 显示fragment
+ * @param fragment
+ */
protected void showFragment(BaseFragment fragment) {
Utils.checkNotNull(fragment);
getSupportFragmentManager().beginTransaction()
@@ -107,6 +127,10 @@ protected void showFragment(BaseFragment fragment) {
}
+ /**
+ * 移除fragment
+ * @param fragment
+ */
protected void removeFragment(BaseFragment fragment) {
Utils.checkNotNull(fragment);
getSupportFragmentManager().beginTransaction()
@@ -116,7 +140,9 @@ protected void removeFragment(BaseFragment fragment) {
}
- //移除fragment
+ /**
+ * 弹出栈顶部的Fragment
+ */
protected void popFragment() {
if (getSupportFragmentManager().getBackStackEntryCount() > 1) {
getSupportFragmentManager().popBackStack();
diff --git a/lib_common/src/main/java/com/guiying/module/common/base/BaseApplication.java b/lib_common/src/main/java/com/guiying/module/common/base/BaseApplication.java
index fc5ebbd..bd692aa 100644
--- a/lib_common/src/main/java/com/guiying/module/common/base/BaseApplication.java
+++ b/lib_common/src/main/java/com/guiying/module/common/base/BaseApplication.java
@@ -13,7 +13,6 @@
* 组件中实现的Application必须在debug包中的AndroidManifest.xml中注册,否则无法使用;
* 组件的Application需置于java/debug文件夹中,不得放于主代码;
* 组件中获取Context的方法必须为:Utils.getContext(),不允许其他写法;
- * BaseApplication主要用来管理全局Activity;
*
* @author 2016/12/2 17:02
* @version V1.0.0
@@ -25,7 +24,7 @@ public class BaseApplication extends Application {
private static BaseApplication sInstance;
- private List delegateList;
+ private List mAppDelegateList;
public static BaseApplication getIns() {
@@ -36,12 +35,13 @@ public static BaseApplication getIns() {
public void onCreate() {
super.onCreate();
sInstance = this;
+ Logger.init("pattern").logLevel(LogLevel.FULL);
Utils.init(this);
- delegateList = ClassUtils.getObjectsWithInterface(this, ApplicationDelegate.class, ROOT_PACKAGE);
- for (ApplicationDelegate delegate : delegateList) {
+ mAppDelegateList = ClassUtils.getObjectsWithInterface(this, ApplicationDelegate.class, ROOT_PACKAGE);
+ for (ApplicationDelegate delegate : mAppDelegateList) {
delegate.onCreate();
}
- Logger.init("pattern").logLevel(LogLevel.FULL);
+
}
diff --git a/lib_common/src/main/java/com/guiying/module/common/base/BaseFragment.java b/lib_common/src/main/java/com/guiying/module/common/base/BaseFragment.java
index a957ff1..116ab50 100644
--- a/lib_common/src/main/java/com/guiying/module/common/base/BaseFragment.java
+++ b/lib_common/src/main/java/com/guiying/module/common/base/BaseFragment.java
@@ -10,12 +10,6 @@ public abstract class BaseFragment extends Fragment {
protected BaseActivity mActivity;
-
- //获取宿主Activity
- protected BaseActivity getHoldingActivity() {
- return mActivity;
- }
-
@Override
public void onAttach(Context context) {
super.onAttach(context);
@@ -23,33 +17,68 @@ public void onAttach(Context context) {
}
- //添加fragment
+ /**
+ * 获取宿主Activity
+ *
+ * @return BaseActivity
+ */
+ protected BaseActivity getHoldingActivity() {
+ return mActivity;
+ }
+
+
+ /**
+ * 添加fragment
+ *
+ * @param fragment
+ * @param frameId
+ */
protected void addFragment(BaseFragment fragment, @IdRes int frameId) {
Utils.checkNotNull(fragment);
getHoldingActivity().addFragment(fragment, frameId);
}
- //替换fragment
+
+ /**
+ * 替换fragment
+ *
+ * @param fragment
+ * @param frameId
+ */
protected void replaceFragment(BaseFragment fragment, @IdRes int frameId) {
Utils.checkNotNull(fragment);
getHoldingActivity().replaceFragment(fragment, frameId);
}
- //隐藏fragment
+
+ /**
+ * 隐藏fragment
+ *
+ * @param fragment
+ */
protected void hideFragment(BaseFragment fragment) {
Utils.checkNotNull(fragment);
getHoldingActivity().hideFragment(fragment);
}
- //显示fragment
+ /**
+ * 显示fragment
+ *
+ * @param fragment
+ */
protected void showFragment(BaseFragment fragment) {
Utils.checkNotNull(fragment);
getHoldingActivity().showFragment(fragment);
}
+ /**
+ * 移除Fragment
+ *
+ * @param fragment
+ */
protected void removeFragment(BaseFragment fragment) {
Utils.checkNotNull(fragment);
getHoldingActivity().removeFragment(fragment);
@@ -57,7 +86,9 @@ protected void removeFragment(BaseFragment fragment) {
}
- //移除fragment
+ /**
+ * 弹出栈顶部的Fragment
+ */
protected void popFragment() {
getHoldingActivity().popFragment();
}
diff --git a/lib_common/src/main/java/com/guiying/module/common/base/ClassUtils.java b/lib_common/src/main/java/com/guiying/module/common/base/ClassUtils.java
index 1033887..d767f26 100644
--- a/lib_common/src/main/java/com/guiying/module/common/base/ClassUtils.java
+++ b/lib_common/src/main/java/com/guiying/module/common/base/ClassUtils.java
@@ -1,7 +1,5 @@
package com.guiying.module.common.base;
-// Copy from galaxy sdk ${com.alibaba.android.galaxy.utils.ClassUtils}
-
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo;
@@ -9,7 +7,7 @@
import android.os.Build;
import android.util.Log;
-import com.alibaba.android.arouter.launcher.ARouter;
+import com.guiying.module.common.utils.Utils;
import java.io.File;
import java.io.IOException;
@@ -23,17 +21,13 @@
import dalvik.system.DexFile;
-import static com.alibaba.android.arouter.launcher.ARouter.logger;
-import static com.alibaba.android.arouter.utils.Consts.TAG;
-
/**
+ * Copy from galaxy sdk ${com.alibaba.android.galaxy.utils.ClassUtils}
* Scanner, find out class with any conditions, copy from google source code.
- *
- * @author 正纬 Contact me.
- * @version 1.0
- * @since 16/6/27 下午10:58
*/
public class ClassUtils {
+ private static final String TAG = "ClassUtils";
+
private static final String EXTRACTED_NAME_EXT = ".classes";
private static final String EXTRACTED_SUFFIX = ".zip";
@@ -50,10 +44,19 @@ private static SharedPreferences getMultiDexPreferences(Context context) {
}
+ /**
+ * 获取单一路径下所有实现了接口的类对象
+ *
+ * @param context U know
+ * @param clazz 接口
+ * @param path 包路径
+ * @param U know
+ * @return 对象列表
+ */
public static List getObjectsWithInterface(Context context, Class clazz, String path) {
List objectList = new ArrayList<>();
try {
- // These class was generate by arouter-compiler.
+ //找出所有路径中的类名,主要用于各个组件根包名一致的情况
List classFileNames = getFileNameByPackageName(context, path);
for (String className : classFileNames) {
@@ -64,35 +67,48 @@ public static List getObjectsWithInterface(Context context, Class claz
}
if (objectList.size() == 0) {
- logger.error(TAG, "No files were found, check your configuration please!");
+ Log.e(TAG, "No files were found, check your configuration please!");
}
} catch (Exception e) {
e.getStackTrace();
- Log.e("ARouter", "getObjectsWithInterface error, " + e.getMessage());
+ Log.e(TAG, "getObjectsWithInterface error, " + e.getMessage());
}
return objectList;
}
+
+ /**
+ * 获取多路径下所有实现了接口的类对象
+ *
+ * @param context U know
+ * @param clazz 接口
+ * @param pathList 包路径列表
+ * @param U know
+ * @return 对象列表
+ */
public static List getObjectsWithInterface(Context context, Class clazz, List pathList) {
List objectList = new ArrayList<>();
-// try {
-// // These class was generate by arouter-compiler.
-// List classFileNames = getFileNameByPackageName(context, path);
-//
-// for (String className : classFileNames) {
-// Class aClass = Class.forName(className);
-// if (clazz.isAssignableFrom(aClass) && !clazz.equals(aClass) && !aClass.isInterface()) {
-// objectList.add((T) Class.forName(className).getConstructor().newInstance());
-// }
-// }
-//
-// if (objectList.size() == 0) {
-// logger.error(TAG, "No files were found, check your configuration please!");
-// }
-// } catch (Exception e) {
-// e.getStackTrace();
-// }
+ try {
+ for (String path : pathList) {
+ //找出所有路径中的类名,主要用于各个组件根包名不一致的情况
+ List classFileNames = getFileNameByPackageName(context, path);
+
+ for (String className : classFileNames) {
+ Class aClass = Class.forName(className);
+ if (clazz.isAssignableFrom(aClass) && !clazz.equals(aClass) && !aClass.isInterface()) {
+ objectList.add((T) Class.forName(className).getConstructor().newInstance());
+ }
+ }
+ }
+
+ if (objectList.size() == 0) {
+ Log.e(TAG, "No files were found, check your configuration please!");
+ }
+ } catch (Exception e) {
+ e.getStackTrace();
+ Log.e(TAG, "getObjectsWithInterface error, " + e.getMessage());
+ }
return objectList;
}
@@ -125,7 +141,7 @@ public static List getFileNameByPackageName(Context context, String pack
}
}
} catch (Throwable ignore) {
- Log.e("ARouter", "Scan map file in dex files made error.", ignore);
+ Log.e(TAG, "Scan map file in dex files made error.", ignore);
} finally {
if (null != dexfile) {
try {
@@ -136,7 +152,7 @@ public static List getFileNameByPackageName(Context context, String pack
}
}
- Log.d("ARouter", "Filter " + classNames.size() + " classes by packageName <" + packageName + ">");
+ Log.d(TAG, "Filter " + classNames.size() + " classes by packageName <" + packageName + ">");
return classNames;
}
@@ -145,8 +161,8 @@ public static List getFileNameByPackageName(Context context, String pack
*
* @param context the application context
* @return all the dex path
- * @throws PackageManager.NameNotFoundException
- * @throws IOException
+ * @throws PackageManager.NameNotFoundException Exception
+ * @throws IOException Exception
*/
public static List getSourcePaths(Context context) throws PackageManager.NameNotFoundException, IOException {
ApplicationInfo applicationInfo = context.getPackageManager().getApplicationInfo(context.getPackageName(), 0);
@@ -158,8 +174,8 @@ public static List getSourcePaths(Context context) throws PackageManager
//the prefix of extracted file, ie: test.classes
String extractedFilePrefix = sourceApk.getName() + EXTRACTED_NAME_EXT;
-// 如果VM已经支持了MultiDex,就不要去Secondary Folder加载 Classesx.zip了,那里已经么有了
-// 通过是否存在sp中的multidex.version是不准确的,因为从低版本升级上来的用户,是包含这个sp配置的
+ //如果VM已经支持了MultiDex,就不要去Secondary Folder加载 Classesx.zip了,那里已经么有了
+ //通过是否存在sp中的multidex.version是不准确的,因为从低版本升级上来的用户,是包含这个sp配置的
if (!isVMMultidexCapable()) {
//the total dex numbers
int totalDexNumber = getMultiDexPreferences(context).getInt(KEY_DEX_NUMBER, 1);
@@ -178,7 +194,8 @@ public static List getSourcePaths(Context context) throws PackageManager
}
}
- if (ARouter.debuggable()) { // Search instant run support only debuggable
+ if (Utils.isAppDebug()) {
+ // Search instant run support only debuggable
sourcePaths.addAll(tryLoadInstantRunDexFile(applicationInfo));
}
return sourcePaths;
@@ -193,7 +210,7 @@ private static List tryLoadInstantRunDexFile(ApplicationInfo application
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && null != applicationInfo.splitSourceDirs) {
// add the splite apk, normally for InstantRun, and newest version.
instantRunSourcePaths.addAll(Arrays.asList(applicationInfo.splitSourceDirs));
- Log.d("ARouter", "Found InstantRun support");
+ Log.d(TAG, "Found InstantRun support");
} else {
try {
// This man is reflection from Google instant run sdk, he will tell me where the dex files go.
@@ -209,11 +226,11 @@ private static List tryLoadInstantRunDexFile(ApplicationInfo application
instantRunSourcePaths.add(file.getAbsolutePath());
}
}
- Log.d("ARouter", "Found InstantRun support");
+ Log.d(TAG, "Found InstantRun support");
}
} catch (Exception e) {
- Log.e("ARouter", "InstantRun support error, " + e.getMessage());
+ Log.e(TAG, "InstantRun support error, " + e.getMessage());
}
}
diff --git a/lib_common/src/main/java/com/guiying/module/common/http/HttpClient.java b/lib_common/src/main/java/com/guiying/module/common/http/HttpClient.java
index ce38bfa..2be900b 100644
--- a/lib_common/src/main/java/com/guiying/module/common/http/HttpClient.java
+++ b/lib_common/src/main/java/com/guiying/module/common/http/HttpClient.java
@@ -141,7 +141,7 @@ public void onResponse(Call call, Response response)
try {
String result = response.body().string();
parseData(result, builder.clazz, builder.bodyType, onResultListener);
- } catch (IOException e) {
+ } catch (IOException | IllegalStateException e) {
e.printStackTrace();
}
}
From 37ea9ccd5800a6cff34bf8d806b8a7f6e00601c9 Mon Sep 17 00:00:00 2001
From: guiying712
Date: Sat, 30 Sep 2017 14:23:20 +0800
Subject: [PATCH 14/38] =?UTF-8?q?1=EF=BC=9A=E4=BF=AE=E6=94=B9BaseApplicati?=
=?UTF-8?q?on=E7=B1=BB=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../module/common/base/BaseApplication.java | 22 +++++++++++++++++++
.../module/main/BottomNavigationActivity.java | 2 +-
2 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/lib_common/src/main/java/com/guiying/module/common/base/BaseApplication.java b/lib_common/src/main/java/com/guiying/module/common/base/BaseApplication.java
index bd692aa..b8d634a 100644
--- a/lib_common/src/main/java/com/guiying/module/common/base/BaseApplication.java
+++ b/lib_common/src/main/java/com/guiying/module/common/base/BaseApplication.java
@@ -41,8 +41,30 @@ public void onCreate() {
for (ApplicationDelegate delegate : mAppDelegateList) {
delegate.onCreate();
}
+ }
+ @Override
+ public void onTerminate() {
+ super.onTerminate();
+ for (ApplicationDelegate delegate : mAppDelegateList) {
+ delegate.onTerminate();
+ }
}
+ @Override
+ public void onLowMemory() {
+ super.onLowMemory();
+ for (ApplicationDelegate delegate : mAppDelegateList) {
+ delegate.onLowMemory();
+ }
+ }
+
+ @Override
+ public void onTrimMemory(int level) {
+ super.onTrimMemory(level);
+ for (ApplicationDelegate delegate : mAppDelegateList) {
+ delegate.onTrimMemory(level);
+ }
+ }
}
diff --git a/module_main/src/main/java/com/guiying/module/main/BottomNavigationActivity.java b/module_main/src/main/java/com/guiying/module/main/BottomNavigationActivity.java
index f0d0a35..9af5f0c 100644
--- a/module_main/src/main/java/com/guiying/module/main/BottomNavigationActivity.java
+++ b/module_main/src/main/java/com/guiying/module/main/BottomNavigationActivity.java
@@ -39,7 +39,7 @@ public boolean onNavigationItemSelected(@NonNull MenuItem item) {
mPager.setCurrentItem(1);
return true;
} else if (i == R.id.navigation_notifications) {
- mPager.setCurrentItem(2);
+ mPager.setCurrentItem(0);
return true;
}
return false;
From 38a63a7b3363bb4dbd1ee4527fda467798198647 Mon Sep 17 00:00:00 2001
From: guiying712
Date: Sat, 30 Sep 2017 14:32:55 +0800
Subject: [PATCH 15/38] =?UTF-8?q?1=EF=BC=9A=E4=BF=AE=E6=94=B9README?=
=?UTF-8?q?=E6=96=87=E6=A1=A3=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 5 +-
.../module/common/glide/ImageUtils.java | 133 ++++++++++++++++++
screenshots/Screenshot_4.png | Bin 0 -> 11673 bytes
3 files changed, 136 insertions(+), 2 deletions(-)
create mode 100644 lib_common/src/main/java/com/guiying/module/common/glide/ImageUtils.java
create mode 100644 screenshots/Screenshot_4.png
diff --git a/README.md b/README.md
index ed413cd..3f0cc4c 100644
--- a/README.md
+++ b/README.md
@@ -5,6 +5,7 @@
 |
 |
 |
+  |
@@ -14,8 +15,7 @@ Android项目组件化示例代码
**Android组件化方案**:http://blog.csdn.net/guiying712/article/details/55213884
-Android组件化方案中的路由使用了ActivityRouter,但是因为ActivityRouter对于初学者不太友好,
-总是出现莫名其妙的错误,因此现在的 AndroidModulePattern 已经改为使用 阿里ARouter作为路由。
+现在的 AndroidModulePattern 使用 阿里ARouter作为路由,并且已经支持**Fragment组件化**,使用方法请下载Demo查看。
## 集成开发模式和组件开发模式转换
@@ -31,6 +31,7 @@ Android组件化方案中的路由使用了ActivityRouter,但是因为Activity
1. 配置整个项目的Gradle脚本,例如 混淆、签名等;
2. app组件中可以初始化全局的库,例如Lib.init(this);
3. 添加 multiDex 功能
+4. 业务组件管理(组装);
### main组件功能(业务组件):
1. 声明应用的launcherActivity----->android.intent.category.LAUNCHER;
diff --git a/lib_common/src/main/java/com/guiying/module/common/glide/ImageUtils.java b/lib_common/src/main/java/com/guiying/module/common/glide/ImageUtils.java
new file mode 100644
index 0000000..6bd37ee
--- /dev/null
+++ b/lib_common/src/main/java/com/guiying/module/common/glide/ImageUtils.java
@@ -0,0 +1,133 @@
+package com.guiying.module.common.glide;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.drawable.Drawable;
+import android.view.View;
+import android.widget.ImageView;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.engine.DiskCacheStrategy;
+import com.bumptech.glide.load.resource.drawable.GlideDrawable;
+import com.bumptech.glide.request.animation.GlideAnimation;
+import com.bumptech.glide.request.target.GlideDrawableImageViewTarget;
+import com.bumptech.glide.request.target.SimpleTarget;
+import com.guiying.module.common.utils.Utils;
+
+/**
+ * 图片加载工具类
+ *
+ * @name ImageUtils
+ */
+public class ImageUtils {
+
+ /**
+ * 默认加载
+ */
+ public static void loadImageView(String path, ImageView mImageView) {
+ Glide.with(mImageView.getContext()).load(path).into(mImageView);
+ }
+
+ public static void loadImageWithError(String path, int errorRes, ImageView mImageView) {
+ Glide.with(mImageView.getContext())
+ .load(path)
+ .crossFade()
+ .diskCacheStrategy(DiskCacheStrategy.SOURCE)
+ .error(errorRes)
+ .into(mImageView);
+ }
+
+ /**
+ * 设置加载中以及加载失败图片
+ */
+ public static void loadImageWithLoading(String path, ImageView mImageView, int lodingImage, int errorRes) {
+ Glide.with(mImageView.getContext()).load(path).placeholder(lodingImage).
+ error(errorRes).into(mImageView);
+ }
+
+ /**
+ * 设置加载动画
+ * api也提供了几个常用的动画:比如crossFade()
+ */
+ public static void loadImageViewAnim(String path, int anim, ImageView mImageView) {
+ Glide.with(mImageView.getContext()).load(path).animate(anim).into(mImageView);
+ }
+
+
+ /**
+ * 加载为bitmap
+ *
+ * @param path 图片地址
+ * @param listener 回调
+ */
+ public static void loadBitMap(String path, final onLoadBitmap listener) {
+ Glide.with(Utils.getContext()).load(path).asBitmap().into(new SimpleTarget() {
+
+ @Override
+ public void onResourceReady(Bitmap bitmap, GlideAnimation super Bitmap> glideAnimation) {
+ listener.onReady(bitmap);
+ }
+
+ @Override
+ public void onLoadFailed(Exception e, Drawable errorDrawable) {
+ listener.onFailed();
+ }
+ });
+ }
+
+ /**
+ * 显示加载进度
+ *
+ * @param path 图片地址
+ * @param mImageView 图片控件
+ * @param loadView 加载view
+ */
+ public static void loadImageWithProgress(String path, final ImageView mImageView, final View loadView, int errorRes) {
+ Glide.with(mImageView.getContext()).load(path).error(errorRes).into(new GlideDrawableImageViewTarget(mImageView) {
+ @Override
+ public void onResourceReady(GlideDrawable resource, GlideAnimation super GlideDrawable> animation) {
+ super.onResourceReady(resource, animation);
+ loadView.setVisibility(View.GONE);
+ }
+
+ @Override
+ public void onLoadFailed(Exception e, Drawable errorDrawable) {
+ super.onLoadFailed(e, errorDrawable);
+ loadView.setVisibility(View.GONE);
+ }
+ });
+ }
+
+ /**
+ * 清除view上的图片
+ *
+ * @param view 视图
+ */
+ public static void clearImageView(View view) {
+ Glide.clear(view);
+ }
+
+ /**
+ * 清理磁盘缓存需要在子线程中执行
+ */
+ public static void GuideClearDiskCache(Context mContext) {
+ Glide.get(mContext).clearDiskCache();
+ }
+
+ /**
+ * 清理内存缓存可以在UI主线程中进行
+ */
+ public static void GuideClearMemory(Context mContext) {
+ Glide.get(mContext).clearMemory();
+ }
+
+ /**
+ * 加载bitmap回调
+ */
+ public interface onLoadBitmap {
+ void onReady(Bitmap resource);
+
+ void onFailed();
+ }
+
+}
\ No newline at end of file
diff --git a/screenshots/Screenshot_4.png b/screenshots/Screenshot_4.png
new file mode 100644
index 0000000000000000000000000000000000000000..6f930e4be5a1468ed0841db7a763286ceee7fe07
GIT binary patch
literal 11673
zcmeHtX*65y+pmt=nA$%|)$r(Krb=3~mR4J89%2Yusw5F}j73Y)8mdoCMNu_N%o4;@
z6g3l)5VIIcgc?F6!pU>ahqKOybJlv-`=0mH|HEGQ+I#JN-D_RLef@sFeZ4m^dc*|~
z0JOUgghJDNx^exSx-jePI$1E6TW7TblA!Vg;!ZOr(N$G-e+U0O5`|v
zeui~_-s`cAFB=#*uL{daJ*JOEx;CVPM&S!
z0{Hv;MTJ)GhMi+RAAu}UAAuv)#la)En;KPM!Ue{66lCY-prNg-U^6@t(I6hslb+u9
z9=`Hr7V$-(F0*la>SHUF^b6bJyJMNV+V2o=M*55aaFqfPP
zcoehR5I1ygX)8}Rh@NcnYWEGdI&!=f^wU0gj)%uDxajycA3Kd}K*^D-^F(6z&Z4$j
za?fm#v!rpRa4&B+T5QwxP&(Uysk;*o(t-R=x>J5nD&aDr1=Y(bBDfte^^DxvqN#gS
zC_`Eid#cg11IiNHCOYu>q~*X@@-R8A%MmX~4dFi>@Bgm#%gYG6s$zQ
zojMZ^SgN|Fn>(qA*x~0Mh+B#Ja&mDab6sQjz%+1f!$e56zIy7N%F+HJICy2?g-uk)
z+ZAUoO?b*#Lz&jwiqR7#JqNTEK|s-s(VE4pWWtk?Y
z&&u-1jD#pF**uq6rYM@qA2K5rx#J^~2k3bdf&BA$N}?mDBu6w&q1z;z$UKhfTV|$t
z(XSK7#%J4x4QSx0?78|^uNAJ`L!5O4N4d>FzK@TzY;RSMwYnoZ*=aKd
zNe0~E_*-W1yqt^!&%lmrOzPdV8|Ykp%ER2@>a}S>eGn*3W{On?d#e|RGOti0D%g6u
zzxU6Q910_?Vdmzho5=Bl=
zz6*w;b4lBPziS%`NKb=E`PhRfcJjmK@QSs-ptbybFiLaDvsFuqSGQ#M@Z6*a1q<|-
zUpfwc=w^c{raS0IGP>gqZ}@-Ucm8NyW?-+#UhHit73joU=CbsJ+uqH#)0Srs6&C?ggci$Mifluw|(&g_qM%#&=6<&@&NyW>TV>ol!l!e(Cl
zVw<8Fj&TFcft?VWmg^3hGnL$$_Mv0`R+sHH&Wh^
zpBQS=8t-&}9}e8XMO7_Vww*L!YLtn=V+RW9ym}HQ^SO(s(U*RHZP~MxfRa=_(3Rt)
z%A@j!J5GPTKu@^ZOI5iaMfb_RLvYRcwYowP}%6{49;iOWFmaMP=;6Oa}iRoKA-Z=!W~SWHl<+#VIe(9Kz`
z>|D-GMQ3=Dv3aN1LCNYncSVZ2WpteRZ7m3D=VVY|c)B$+KmFWYZi|}t1LafvD+IAw
zE|)ULlB#POgs<)mwQ)D(M{{SN0D-hCM29(avo-l~=HK0KXO7!m$O#mLhG|Q|LSwGN
z?D@4XgV}~JUj(yFiPy8$>w2B=ikUk($K7`3yU739=>CH*3|?eU%eFQP{L><|AKe}r
zKr+|o-h2CDP(EPG@zapsvAsynQ@(Bv`_0;eN3
+ android:label="@string/title_activity_fragment_module">
diff --git a/module_main/src/main/res/values/strings.xml b/module_main/src/main/res/values/strings.xml
index 177710e..ca0b880 100644
--- a/module_main/src/main/res/values/strings.xml
+++ b/module_main/src/main/res/values/strings.xml
@@ -2,9 +2,9 @@
main组件
再按一次退出程序
- BottomNavigationActivity
- Home
- Dashboard
- Notifications
+ Fragment组件化
+ news
+ girls
+ 预留
diff --git a/module_news/src/main/res/layout/fragment_news.xml b/module_news/src/main/res/layout/fragment_news.xml
index b00a5e4..d0e7792 100644
--- a/module_news/src/main/res/layout/fragment_news.xml
+++ b/module_news/src/main/res/layout/fragment_news.xml
@@ -9,6 +9,6 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
- android:text="这里是新闻 " />
+ android:text="我是来自news组件的Fragment " />
diff --git a/screenshots/Screenshot_4.png b/screenshots/Screenshot_4.png
index 6f930e4be5a1468ed0841db7a763286ceee7fe07..3c7b130a3619db95f6149a3c695325d22f621768 100644
GIT binary patch
literal 10626
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
literal 11673
zcmeHtX*65y+pmt=nA$%|)$r(Krb=3~mR4J89%2Yusw5F}j73Y)8mdoCMNu_N%o4;@
z6g3l)5VIIcgc?F6!pU>ahqKOybJlv-`=0mH|HEGQ+I#JN-D_RLef@sFeZ4m^dc*|~
z0JOUgghJDNx^exSx-jePI$1E6TW7TblA!Vg;!ZOr(N$G-e+U0O5`|v
zeui~_-s`cAFB=#*uL{daJ*JOEx;CVPM&S!
z0{Hv;MTJ)GhMi+RAAu}UAAuv)#la)En;KPM!Ue{66lCY-prNg-U^6@t(I6hslb+u9
z9=`Hr7V$-(F0*la>SHUF^b6bJyJMNV+V2o=M*55aaFqfPP
zcoehR5I1ygX)8}Rh@NcnYWEGdI&!=f^wU0gj)%uDxajycA3Kd}K*^D-^F(6z&Z4$j
za?fm#v!rpRa4&B+T5QwxP&(Uysk;*o(t-R=x>J5nD&aDr1=Y(bBDfte^^DxvqN#gS
zC_`Eid#cg11IiNHCOYu>q~*X@@-R8A%MmX~4dFi>@Bgm#%gYG6s$zQ
zojMZ^SgN|Fn>(qA*x~0Mh+B#Ja&mDab6sQjz%+1f!$e56zIy7N%F+HJICy2?g-uk)
z+ZAUoO?b*#Lz&jwiqR7#JqNTEK|s-s(VE4pWWtk?Y
z&&u-1jD#pF**uq6rYM@qA2K5rx#J^~2k3bdf&BA$N}?mDBu6w&q1z;z$UKhfTV|$t
z(XSK7#%J4x4QSx0?78|^uNAJ`L!5O4N4d>FzK@TzY;RSMwYnoZ*=aKd
zNe0~E_*-W1yqt^!&%lmrOzPdV8|Ykp%ER2@>a}S>eGn*3W{On?d#e|RGOti0D%g6u
zzxU6Q910_?Vdmzho5=Bl=
zz6*w;b4lBPziS%`NKb=E`PhRfcJjmK@QSs-ptbybFiLaDvsFuqSGQ#M@Z6*a1q<|-
zUpfwc=w^c{raS0IGP>gqZ}@-Ucm8NyW?-+#UhHit73joU=CbsJ+uqH#)0Srs6&C?ggci$Mifluw|(&g_qM%#&=6<&@&NyW>TV>ol!l!e(Cl
zVw<8Fj&TFcft?VWmg^3hGnL$$_Mv0`R+sHH&Wh^
zpBQS=8t-&}9}e8XMO7_Vww*L!YLtn=V+RW9ym}HQ^SO(s(U*RHZP~MxfRa=_(3Rt)
z%A@j!J5GPTKu@^ZOI5iaMfb_RLvYRcwYowP}%6{49;iOWFmaMP=;6Oa}iRoKA-Z=!W~SWHl<+#VIe(9Kz`
z>|D-GMQ3=Dv3aN1LCNYncSVZ2WpteRZ7m3D=VVY|c)B$+KmFWYZi|}t1LafvD+IAw
zE|)ULlB#POgs<)mwQ)D(M{{SN0D-hCM29(avo-l~=HK0KXO7!m$O#mLhG|Q|LSwGN
z?D@4XgV}~JUj(yFiPy8$>w2B=ikUk($K7`3yU739=>CH*3|?eU%eFQP{L><|AKe}r
zKr+|o-h2CDP(EPG@zapsvAsynQ@(Bv`_0;eN3