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、![Image](develper.PNG) 在运行之前,请先按照图中选择一个能够运行的组件;** + + +## 组件功能介绍 -### 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、![Image](develper.PNG) 在运行之前,请先按照图中选择一个能够运行的组件;** +**2、![Image](/screenshots/develper.PNG) 在运行之前,请先按照图中选择一个能够运行的组件;** ## 组件功能介绍 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">