From 42f6be0cca6fade0d1b23861a0bd41151ee1b6f3 Mon Sep 17 00:00:00 2001 From: guiying712 Date: Tue, 26 Sep 2017 22:20:38 +0800 Subject: [PATCH 01/32] =?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 02/32] =?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 03/32] =?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 04/32] =?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">