Browse Source

1:调整目录结构,增加Fragment组件化方案;

guiying712 8 years ago
parent
commit
e9eb9591ea
29 changed files with 478 additions and 70 deletions
  1. 2 2
      lib_common/src/main/AndroidManifest.xml
  2. 22 0
      lib_common/src/main/java/com/guiying/module/common/base/ApplicationDelegate.java
  3. 2 2
      lib_common/src/main/java/com/guiying/module/common/base/BaseActionBarActivity.java
  4. 5 5
      lib_common/src/main/java/com/guiying/module/common/base/BaseActivity.java
  5. 48 0
      lib_common/src/main/java/com/guiying/module/common/base/BaseApplication.java
  6. 2 2
      lib_common/src/main/java/com/guiying/module/common/base/BaseFragment.java
  7. 1 1
      lib_common/src/main/java/com/guiying/module/common/base/BasePresenter.java
  8. 1 1
      lib_common/src/main/java/com/guiying/module/common/base/BaseView.java
  9. 276 0
      lib_common/src/main/java/com/guiying/module/common/base/ClassUtils.java
  10. 1 1
      lib_common/src/main/java/com/guiying/module/common/base/InfoCallback.java
  11. 49 31
      lib_common/src/main/java/com/guiying/module/common/base/ViewManager.java
  12. 1 1
      lib_common/src/main/java/com/guiying/module/common/glide/OkHttpGlideModule.java
  13. 2 2
      lib_common/src/main/java/com/guiying/module/common/glide/OkHttpStreamFetcher.java
  14. 1 1
      lib_common/src/main/java/com/guiying/module/common/glide/OkHttpUrlLoader.java
  15. 1 1
      lib_common/src/main/java/com/guiying/module/common/http/ApiService.java
  16. 1 1
      lib_common/src/main/java/com/guiying/module/common/http/DataParseUtil.java
  17. 1 1
      lib_common/src/main/java/com/guiying/module/common/http/DataType.java
  18. 6 6
      lib_common/src/main/java/com/guiying/module/common/http/HttpClient.java
  19. 2 2
      lib_common/src/main/java/com/guiying/module/common/http/HttpsUtils.java
  20. 1 1
      lib_common/src/main/java/com/guiying/module/common/http/LoggerInterceptor.java
  21. 1 1
      lib_common/src/main/java/com/guiying/module/common/http/OnResultListener.java
  22. 1 1
      lib_common/src/main/java/com/guiying/module/common/utils/CloseUtils.java
  23. 1 1
      lib_common/src/main/java/com/guiying/module/common/utils/NetworkUtils.java
  24. 1 1
      lib_common/src/main/java/com/guiying/module/common/utils/ShellUtils.java
  25. 1 1
      lib_common/src/main/java/com/guiying/module/common/utils/StringUtils.java
  26. 1 1
      lib_common/src/main/java/com/guiying/module/common/utils/ToastUtils.java
  27. 1 1
      lib_common/src/main/java/com/guiying/module/common/utils/Utils.java
  28. 5 2
      lib_common/src/main/java/com/guiying/module/common/widget/HackyViewPager.java
  29. 41 0
      lib_common/src/main/java/com/guiying/module/common/widget/NoScrollViewPager.java

+ 2 - 2
lib_common/src/main/AndroidManifest.xml

@@ -1,5 +1,5 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.guiying.common">
+    package="com.guiying.module.common">
 
     <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
@@ -16,7 +16,7 @@
 
     <application>
         <meta-data
-            android:name="com.guiying.common.glide.OkHttpGlideModule"
+            android:name=".glide.OkHttpGlideModule"
             android:value="GlideModule" />
 
     </application>

+ 22 - 0
lib_common/src/main/java/com/guiying/module/common/base/ApplicationDelegate.java

@@ -0,0 +1,22 @@
+package com.guiying.module.common.base;
+
+/**
+ * <p>类说明</p>
+ *
+ * @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);
+
+}

+ 2 - 2
lib_common/src/main/java/com/guiying/common/base/BaseActionBarActivity.java → 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的逻辑;

+ 5 - 5
lib_common/src/main/java/com/guiying/common/base/BaseActivity.java → 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.app.AppCompatActivity;
 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;
 
 /**
  * <p>Activity基类 </p>
@@ -51,14 +51,14 @@ public abstract class BaseActivity extends AppCompatActivity {
     @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

+ 48 - 0
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<ApplicationDelegate> 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);
+    }
+
+
+}

+ 2 - 2
lib_common/src/main/java/com/guiying/common/base/BaseFragment.java → 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 {
 

+ 1 - 1
lib_common/src/main/java/com/guiying/common/base/BasePresenter.java → 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 {
 

+ 1 - 1
lib_common/src/main/java/com/guiying/common/base/BaseView.java → 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<T> {
 

+ 276 - 0
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 正纬 <a href="mailto:zhilong.liu@aliyun.com">Contact me.</a>
+ * @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 <T> List<T> getObjectsWithInterface(Context context, Class<T> clazz, String path) {
+        List<T> objectList = new ArrayList<>();
+        try {
+            // These class was generate by arouter-compiler.
+            List<String> 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 <T> List<T> getObjectsWithInterface(Context context, Class<T> clazz, List<String> pathList) {
+        List<T> objectList = new ArrayList<>();
+//        try {
+//            // These class was generate by arouter-compiler.
+//            List<String> 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<String> getFileNameByPackageName(Context context, String packageName) throws PackageManager.NameNotFoundException, IOException {
+        List<String> 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<String> 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<String> getSourcePaths(Context context) throws PackageManager.NameNotFoundException, IOException {
+        ApplicationInfo applicationInfo = context.getPackageManager().getApplicationInfo(context.getPackageName(), 0);
+        File sourceApk = new File(applicationInfo.sourceDir);
+
+        List<String> 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<String> tryLoadInstantRunDexFile(ApplicationInfo applicationInfo) {
+        List<String> 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;
+        }
+    }
+}

+ 1 - 1
lib_common/src/main/java/com/guiying/common/base/InfoCallback.java → 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;
 
 /**
  * <p>数据回调接口</p>

+ 49 - 31
lib_common/src/main/java/com/guiying/common/base/BaseApplication.java → 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;
+ * <p></p>
  *
- * @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<Activity> activityStack;
+    private static List<BaseFragment> 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<Activity> 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<BaseFragment> getAllFragment() {
+        if (fragmentList != null) {
+            return fragmentList;
+        }
+        return null;
     }
 
+
     /**
      * 添加指定Activity到堆栈
      */
     public void addActivity(Activity activity) {
         if (activityStack == null) {
-            activityStack = new Stack<>();
+            activityStack = new Stack<Activity>();
         }
         activityStack.add(activity);
     }
 
+
     /**
      * 获取当前Activity
      */
     public Activity currentActivity() {
-        return activityStack.lastElement();
+        Activity activity = activityStack.lastElement();
+        return activity;
     }
 
+
     /**
      * 结束当前Activity
      */
@@ -67,6 +83,7 @@ public class BaseApplication extends Application {
         finishActivity(activity);
     }
 
+
     /**
      * 结束指定的Activity
      */
@@ -78,6 +95,7 @@ public class BaseApplication extends Application {
         }
     }
 
+
     /**
      * 结束指定Class的Activity
      */
@@ -90,6 +108,7 @@ public class BaseApplication extends Application {
         }
     }
 
+
     /**
      * 结束全部的Activity
      */
@@ -102,6 +121,7 @@ public class BaseApplication extends Application {
         activityStack.clear();
     }
 
+
     /**
      * 退出应用程序
      */
@@ -109,13 +129,11 @@ public class BaseApplication extends Application {
         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());
         }
     }
-
-
 }

+ 1 - 1
lib_common/src/main/java/com/guiying/common/glide/OkHttpGlideModule.java → 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;
 

+ 2 - 2
lib_common/src/main/java/com/guiying/common/glide/OkHttpStreamFetcher.java → 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;

+ 1 - 1
lib_common/src/main/java/com/guiying/common/glide/OkHttpUrlLoader.java → 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;
 

+ 1 - 1
lib_common/src/main/java/com/guiying/common/http/ApiService.java → 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;
 

+ 1 - 1
lib_common/src/main/java/com/guiying/common/http/DataParseUtil.java → 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;
 

+ 1 - 1
lib_common/src/main/java/com/guiying/common/http/DataType.java → 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;
 

+ 6 - 6
lib_common/src/main/java/com/guiying/common/http/HttpClient.java → 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.ClearableCookieJar;
 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;

+ 2 - 2
lib_common/src/main/java/com/guiying/common/http/HttpsUtils.java → 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;

+ 1 - 1
lib_common/src/main/java/com/guiying/common/http/LoggerInterceptor.java → 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;
 

+ 1 - 1
lib_common/src/main/java/com/guiying/common/http/OnResultListener.java → 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;
 
 /**
  * <p>在Retrofit中接口会导致泛型擦除,所以这里回调使用Class</p>

+ 1 - 1
lib_common/src/main/java/com/guiying/common/utils/CloseUtils.java → 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;

+ 1 - 1
lib_common/src/main/java/com/guiying/common/utils/NetworkUtils.java → 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;

+ 1 - 1
lib_common/src/main/java/com/guiying/common/utils/ShellUtils.java → 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;

+ 1 - 1
lib_common/src/main/java/com/guiying/common/utils/StringUtils.java → 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;
 
 /**
  * 字符串相关工具类

+ 1 - 1
lib_common/src/main/java/com/guiying/common/utils/ToastUtils.java → 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;

+ 1 - 1
lib_common/src/main/java/com/guiying/common/utils/Utils.java → 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;

+ 5 - 2
lib_common/src/main/java/com/guiying/common/HackyViewPager.java → 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.util.AttributeSet;
 import android.view.MotionEvent;
 
 /**
- * <p>解决图片缩放崩溃的问题</p>
+ * <p> 解决图片缩放崩溃的问题</p>
+ * @name HackyViewPager
+ * @author 张华洋 2017/9/27 10:10
+ * @version V1.1
  */
 public class HackyViewPager extends ViewPager {
 

+ 41 - 0
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;
+
+/**
+ * <p>可以禁止滑动翻页的ViewPager </p>
+ *
+ * @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;
+    }
+
+}