diff --git a/.idea/checkstyle-idea.xml b/.idea/checkstyle-idea.xml
new file mode 100644
index 0000000..ef7efd6
--- /dev/null
+++ b/.idea/checkstyle-idea.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
new file mode 100644
index 0000000..ae78c11
--- /dev/null
+++ b/.idea/codeStyles/Project.xml
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
+
+
+ xmlns:android
+
+ ^$
+
+
+
+
+
+
+
+
+ xmlns:.*
+
+ ^$
+
+
+ BY_NAME
+
+
+
+
+
+
+ .*:id
+
+ http://schemas.android.com/apk/res/android
+
+
+
+
+
+
+
+
+ .*:name
+
+ http://schemas.android.com/apk/res/android
+
+
+
+
+
+
+
+
+ name
+
+ ^$
+
+
+
+
+
+
+
+
+ style
+
+ ^$
+
+
+
+
+
+
+
+
+ .*
+
+ ^$
+
+
+ BY_NAME
+
+
+
+
+
+
+ .*
+
+ http://schemas.android.com/apk/res/android
+
+
+ ANDROID_ATTRIBUTE_ORDER
+
+
+
+
+
+
+ .*
+
+ .*
+
+
+ BY_NAME
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..af0bbdd
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..b7b8e95
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml
new file mode 100644
index 0000000..7f68460
--- /dev/null
+++ b/.idea/runConfigurations.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/.gitignore b/app/.gitignore
new file mode 100644
index 0000000..796b96d
--- /dev/null
+++ b/app/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/app/build.gradle b/app/build.gradle
new file mode 100644
index 0000000..92f128b
--- /dev/null
+++ b/app/build.gradle
@@ -0,0 +1,54 @@
+apply plugin: 'com.android.application'
+
+android {
+ compileSdkVersion 28
+ defaultConfig {
+ applicationId "com.example.administrator.newjiajiesone"
+ minSdkVersion 15
+ targetSdkVersion 28
+ versionCode 1
+ versionName "1.0"
+ testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+}
+
+dependencies {
+ implementation fileTree(include: ['*.jar'], dir: 'libs')
+ //noinspection GradleCompatible
+ implementation 'com.android.support:appcompat-v7:28.0.0'
+ implementation 'com.android.support:support-v4:28.0.0'
+ implementation 'com.android.support:design:28.0.0'
+ implementation 'com.android.support.constraint:constraint-layout:1.1.3'
+ testImplementation 'junit:junit:4.12'
+ androidTestImplementation 'com.android.support.test:runner:1.0.2'
+ androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
+ implementation project(path: ':baselibs')
+ implementation 'com.squareup.retrofit2:retrofit:2.4.0'
+ // implementation 'com.squareup.okhttp3:okhttp:3.11.0'
+ // implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
+ implementation 'com.hannesdorfmann.mosby3:mvp:3.0.0-alpha4'
+ //RecyclerAdapter框架
+ implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30'
+ implementation 'com.jcodecraeer:xrecyclerview:1.3.2'
+ implementation 'com.android.support:recyclerview-v7:28.0.0'
+ implementation 'com.journeyapps:zxing-android-embedded:3.3.0'
+ //状态栏颜色
+ implementation 'com.readystatesoftware.systembartint:systembartint:1.0.4'
+ implementation 'io.reactivex:rxjava:1.0.14'
+ implementation 'io.reactivex:rxandroid:1.0.1'
+ implementation 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
+ implementation files('libs/wechat-sdk-android-without-mta-1.0.2.jar')
+ implementation files('libs/ShareSDK-Wechat-Core-2.8.3.jar')
+ implementation files('libs/tbs_sdk_thirdapp_v3.2.0.1104_43200_sharewithdownload_withfilereader_withoutGame_obfs_20170609_115346.jar')
+
+ //必须使用
+ implementation 'com.lzy.net:okgo:3.0.4'
+ implementation 'com.lzy.net:okrx2:2.0.2'
+ implementation 'com.lzy.net:okserver:2.0.5'
+}
diff --git a/app/libs/ShareSDK-Wechat-Core-2.8.3.jar b/app/libs/ShareSDK-Wechat-Core-2.8.3.jar
new file mode 100644
index 0000000..ead868f
Binary files /dev/null and b/app/libs/ShareSDK-Wechat-Core-2.8.3.jar differ
diff --git a/app/libs/tbs_sdk_thirdapp_v3.2.0.1104_43200_sharewithdownload_withfilereader_withoutGame_obfs_20170609_115346.jar b/app/libs/tbs_sdk_thirdapp_v3.2.0.1104_43200_sharewithdownload_withfilereader_withoutGame_obfs_20170609_115346.jar
new file mode 100644
index 0000000..61a947f
Binary files /dev/null and b/app/libs/tbs_sdk_thirdapp_v3.2.0.1104_43200_sharewithdownload_withfilereader_withoutGame_obfs_20170609_115346.jar differ
diff --git a/app/libs/wechat-sdk-android-without-mta-1.0.2.jar b/app/libs/wechat-sdk-android-without-mta-1.0.2.jar
new file mode 100644
index 0000000..decb68d
Binary files /dev/null and b/app/libs/wechat-sdk-android-without-mta-1.0.2.jar differ
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
new file mode 100644
index 0000000..f1b4245
--- /dev/null
+++ b/app/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/app/src/androidTest/java/com/example/administrator/seven/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/example/administrator/seven/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..4d44d8e
--- /dev/null
+++ b/app/src/androidTest/java/com/example/administrator/seven/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package com.example.administrator.seven;
+
+import android.content.Context;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getTargetContext();
+
+ assertEquals("com.example.administrator.newjiajiesone", appContext.getPackageName());
+ }
+}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..1649b7f
--- /dev/null
+++ b/app/src/main/AndroidManifest.xml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/example/administrator/seven/BaseApplication.java b/app/src/main/java/com/example/administrator/seven/BaseApplication.java
new file mode 100644
index 0000000..f7fe94e
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/BaseApplication.java
@@ -0,0 +1,176 @@
+package com.example.administrator.seven;
+
+import android.app.Application;
+import android.content.Context;
+
+import com.example.administrator.seven.utils.checkVersionsUtils.ProfileSpUtils;
+import com.lzy.okgo.OkGo;
+import com.lzy.okgo.cache.CacheEntity;
+import com.lzy.okgo.cache.CacheMode;
+import com.lzy.okgo.cookie.CookieJarImpl;
+import com.lzy.okgo.cookie.store.DBCookieStore;
+import com.lzy.okgo.https.HttpsUtils;
+import com.lzy.okgo.interceptor.HttpLoggingInterceptor;
+import com.lzy.okgo.model.HttpHeaders;
+import com.lzy.okgo.model.HttpParams;
+
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+import java.util.concurrent.TimeUnit;
+import java.util.logging.Level;
+
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.X509TrustManager;
+
+import okhttp3.OkHttpClient;
+
+
+/**
+ * Created by: xudiwei
+ *
+ * on: 2017/3/13.
+ *
+ * 描述:Base Application
+ * 123
+ */
+
+public class BaseApplication extends Application {
+
+ private static Context mContext;
+
+
+
+ private String str;
+
+
+ public static Context getContext() {
+ return mContext;
+ }
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ mContext = this;
+ //用户资料存储工具
+ ProfileSpUtils.init(this);
+ initOkGo();
+ }
+
+ @Override
+ protected void attachBaseContext(Context base) {
+ super.attachBaseContext(base);
+
+ }
+
+ public String getStr() {
+ return str;
+ }
+
+ public void setStr(String str) {
+ this.str = str;
+ }
+
+
+
+
+
+
+
+
+ private void initOkGo() {
+ //---------这里给出的是示例代码,告诉你可以这么传,实际使用的时候,根据需要传,不需要就不传-------------//
+ HttpHeaders headers = new HttpHeaders();
+ headers.put("commonHeaderKey1", "commonHeaderValue1"); //header不支持中文,不允许有特殊字符
+ headers.put("commonHeaderKey2", "commonHeaderValue2");
+ HttpParams params = new HttpParams();
+ params.put("commonParamsKey1", "commonParamsValue1"); //param支持中文,直接传,不要自己编码
+ params.put("commonParamsKey2", "这里支持中文参数");
+ //----------------------------------------------------------------------------------------//
+
+ OkHttpClient.Builder builder = new OkHttpClient.Builder();
+ //log相关
+ HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor("OkGo");
+ loggingInterceptor.setPrintLevel(HttpLoggingInterceptor.Level.BODY); //log打印级别,决定了log显示的详细程度
+ loggingInterceptor.setColorLevel(Level.INFO); //log颜色级别,决定了log在控制台显示的颜色
+ builder.addInterceptor(loggingInterceptor); //添加OkGo默认debug日志
+ //第三方的开源库,使用通知显示当前请求的log,不过在做文件下载的时候,这个库好像有问题,对文件判断不准确
+ //builder.addInterceptor(new ChuckInterceptor(this));
+
+ //超时时间设置,默认60秒
+ builder.readTimeout(OkGo.DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS); //全局的读取超时时间
+ builder.writeTimeout(OkGo.DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS); //全局的写入超时时间
+ builder.connectTimeout(OkGo.DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS); //全局的连接超时时间
+
+ //自动管理cookie(或者叫session的保持),以下几种任选其一就行
+ //builder.cookieJar(new CookieJarImpl(new SPCookieStore(this))); //使用sp保持cookie,如果cookie不过期,则一直有效
+ builder.cookieJar(new CookieJarImpl(new DBCookieStore(this))); //使用数据库保持cookie,如果cookie不过期,则一直有效
+ //builder.cookieJar(new CookieJarImpl(new MemoryCookieStore())); //使用内存保持cookie,app退出后,cookie消失
+
+ //https相关设置,以下几种方案根据需要自己设置
+ //方法一:信任所有证书,不安全有风险
+ HttpsUtils.SSLParams sslParams1 = HttpsUtils.getSslSocketFactory();
+ //方法二:自定义信任规则,校验服务端证书
+ HttpsUtils.SSLParams sslParams2 = HttpsUtils.getSslSocketFactory(new SafeTrustManager());
+ //方法三:使用预埋证书,校验服务端证书(自签名证书)
+ //HttpsUtils.SSLParams sslParams3 = HttpsUtils.getSslSocketFactory(getAssets().open("srca.cer"));
+ //方法四:使用bks证书和密码管理客户端证书(双向认证),使用预埋证书,校验服务端证书(自签名证书)
+ //HttpsUtils.SSLParams sslParams4 = HttpsUtils.getSslSocketFactory(getAssets().open("xxx.bks"), "123456", getAssets().open("yyy.cer"));
+ builder.sslSocketFactory(sslParams1.sSLSocketFactory, sslParams1.trustManager);
+ //配置https的域名匹配规则,详细看demo的初始化介绍,不需要就不要加入,使用不当会导致https握手失败
+ builder.hostnameVerifier(new SafeHostnameVerifier());
+
+ // 其他统一的配置
+ // 详细说明看GitHub文档:https://github.com/jeasonlzy/
+ OkGo.getInstance().init(this) //必须调用初始化
+ .setOkHttpClient(builder.build()) //建议设置OkHttpClient,不设置会使用默认的
+ .setCacheMode(CacheMode.NO_CACHE) //全局统一缓存模式,默认不使用缓存,可以不传
+ .setCacheTime(CacheEntity.CACHE_NEVER_EXPIRE) //全局统一缓存时间,默认永不过期,可以不传
+ .setRetryCount(3); //全局统一超时重连次数,默认为三次,那么最差的情况会请求4次(一次原始请求,三次重连请求),不需要可以设置为0
+// .addCommonHeaders(headers) //全局公共头
+// .addCommonParams(params); //全局公共参数
+ }
+
+ /**
+ * 这里只是我谁便写的认证规则,具体每个业务是否需要验证,以及验证规则是什么,请与服务端或者leader确定
+ * 这里只是我谁便写的认证规则,具体每个业务是否需要验证,以及验证规则是什么,请与服务端或者leader确定
+ * 这里只是我谁便写的认证规则,具体每个业务是否需要验证,以及验证规则是什么,请与服务端或者leader确定
+ * 重要的事情说三遍,以下代码不要直接使用
+ */
+ private class SafeTrustManager implements X509TrustManager {
+ @Override
+ public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
+ }
+
+ @Override
+ public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
+ try {
+ for (X509Certificate certificate : chain) {
+ certificate.checkValidity(); //检查证书是否过期,签名是否通过等
+ }
+ } catch (Exception e) {
+ throw new CertificateException(e);
+ }
+ }
+
+ @Override
+ public X509Certificate[] getAcceptedIssuers() {
+ return new X509Certificate[0];
+ }
+ }
+
+ /**
+ * 这里只是我谁便写的认证规则,具体每个业务是否需要验证,以及验证规则是什么,请与服务端或者leader确定
+ * 这里只是我谁便写的认证规则,具体每个业务是否需要验证,以及验证规则是什么,请与服务端或者leader确定
+ * 这里只是我谁便写的认证规则,具体每个业务是否需要验证,以及验证规则是什么,请与服务端或者leader确定
+ * 重要的事情说三遍,以下代码不要直接使用
+ */
+ private class SafeHostnameVerifier implements HostnameVerifier {
+ @Override
+ public boolean verify(String hostname, SSLSession session) {
+ //验证主机名是否匹配
+ //return hostname.equals("server.jeasonlzy.com");
+ return true;
+ }
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/JsonUtils.java b/app/src/main/java/com/example/administrator/seven/JsonUtils.java
new file mode 100644
index 0000000..e0b8c3a
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/JsonUtils.java
@@ -0,0 +1,126 @@
+/*
+ * Copyright (C) 2016 android@19code.com
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.administrator.seven;
+
+import com.google.gson.Gson;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.json.JSONTokener;
+
+import java.lang.reflect.Array;
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * Json工具类
+ *
+ * Create by h4de5ing 2016/5/7 007
+ */
+public class JsonUtils {
+ public static String toJson(Object obj) {
+ Gson gson = new Gson();
+ return gson.toJson(obj);
+ }
+
+ public static T fromJson(String str, Class type) {
+ Gson gson = new Gson();
+ return gson.fromJson(str, type);
+ }
+
+ public static JSONObject map2Json(Map, ?> data) {
+ JSONObject object = new JSONObject();
+
+ for (Map.Entry, ?> entry : data.entrySet()) {
+ String key = (String) entry.getKey();
+ if (key == null) {
+ throw new NullPointerException("key == null");
+ }
+ try {
+ object.put(key, wrap(entry.getValue()));
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+ }
+
+ return object;
+ }
+
+ public static JSONArray collection2Json(Collection> data) {
+ JSONArray jsonArray = new JSONArray();
+ if (data != null) {
+ for (Object aData : data) {
+ jsonArray.put(wrap(aData));
+ }
+ }
+ return jsonArray;
+ }
+
+ public static JSONArray object2Json(Object data) throws JSONException {
+ if (!data.getClass().isArray()) {
+ throw new JSONException("Not a primitive data: " + data.getClass());
+ }
+ final int length = Array.getLength(data);
+ JSONArray jsonArray = new JSONArray();
+ for (int i = 0; i < length; ++i) {
+ jsonArray.put(wrap(Array.get(data, i)));
+ }
+
+ return jsonArray;
+ }
+
+ private static Object wrap(Object o) {
+ if (o == null) {
+ return null;
+ }
+ if (o instanceof JSONArray || o instanceof JSONObject) {
+ return o;
+ }
+ try {
+ if (o instanceof Collection) {
+ return collection2Json((Collection>) o);
+ } else if (o.getClass().isArray()) {
+ return object2Json(o);
+ }
+ if (o instanceof Map) {
+ return map2Json((Map, ?>) o);
+ }
+
+ if (o instanceof Boolean || o instanceof Byte || o instanceof Character || o instanceof Double || o instanceof Float || o instanceof Integer || o instanceof Long
+ || o instanceof Short || o instanceof String) {
+ return o;
+ }
+ if (o.getClass().getPackage().getName().startsWith("java.")) {
+ return o.toString();
+ }
+ } catch (Exception ignored) {
+ }
+ return null;
+ }
+
+ public static JSONObject string2JSONObject(String json) {
+ JSONObject jsonObject = null;
+ try {
+ JSONTokener jsonParser = new JSONTokener(json);
+ jsonObject = (JSONObject) jsonParser.nextValue();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return jsonObject;
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/base/BaseActivity.java b/app/src/main/java/com/example/administrator/seven/base/BaseActivity.java
new file mode 100644
index 0000000..86af0fe
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/base/BaseActivity.java
@@ -0,0 +1,196 @@
+package com.example.administrator.seven.base;
+
+import android.app.Activity;
+import android.app.ProgressDialog;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Color;
+import android.os.Bundle;
+import android.support.annotation.IdRes;
+import android.support.annotation.Nullable;
+import android.support.annotation.StringRes;
+import android.support.v4.widget.SwipeRefreshLayout;
+import android.support.v7.app.AppCompatActivity;
+import android.text.TextPaint;
+import android.util.TypedValue;
+import android.view.View;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.ImageView;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.example.administrator.seven.R;
+import com.example.administrator.seven.utils.StatusBarUtils;
+
+
+/**
+ * 日期:2017.01.03
+ *
+ * 作者:xudiwei
+ *
+ * 描述:Baseactivity添加相关的方法
+ *
+ *
+ */
+public class BaseActivity extends AppCompatActivity {
+
+ private ProgressDialog mProgressDialog;
+
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ initStyle();
+ }
+
+ /**
+ * 初始化状态栏
+ */
+ public void initStyle() {
+ StatusBarUtils.setStateBaeColor(this, Color.parseColor("#131313"));
+ }
+ /**
+ * 字体加粗
+ */
+ protected void Thickening(TextView mLayTopTitle) {
+ TextPaint tp = mLayTopTitle.getPaint();
+ tp.setFakeBoldText(true);
+ }
+
+
+
+
+
+
+ public void toast(String msg) {
+ Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
+ }
+
+ public void toast(@StringRes int ids) {
+ this.toast(getString(ids));
+ }
+
+ /**
+ * 线程安全的toast
+ *
+ * @param msg
+ */
+ public void toastThreadSafe(final String msg) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ toast(msg);
+ }
+ });
+
+ }
+
+
+ /**
+ * 开启一个Activity
+ *
+ * @param clz
+ */
+ public void startActivity(Class extends Activity> clz) {
+ startActivity(new Intent(this, clz));
+ }
+
+ /**
+ * 开启一个Activity并关闭当前Activity
+ *
+ * @param clz
+ */
+ public void startActivityAndFinishSelf(Class extends Activity> clz) {
+ startActivity(clz);
+ finish();
+ }
+
+ /**
+ * 初始化进度对话框
+ */
+ public void showProgressDialog(String dialogMessage) {
+ mProgressDialog = new ProgressDialog(this);
+ mProgressDialog.setCanceledOnTouchOutside(false);
+ mProgressDialog.setMessage(dialogMessage);
+ mProgressDialog.show();
+ }
+
+ /**
+ * 关闭进度对话框
+ */
+ public void dismissProgressDialog() {
+ if (null != mProgressDialog && mProgressDialog.isShowing()) {
+ mProgressDialog.dismiss();
+ }
+ }
+
+ /**
+ * 初始化刷新控件的参数
+ *
+ * @param ids 刷新控件的id
+ */
+ protected SwipeRefreshLayout setSwipeRefreshLayout(@IdRes int ids) {
+ SwipeRefreshLayout mRefreshLayout = (SwipeRefreshLayout) findViewById(ids);
+ mRefreshLayout.setProgressViewOffset(false, 0,
+ (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 24, getResources().getDisplayMetrics()));
+ mRefreshLayout.setColorSchemeResources(R.color.colorPrimary);
+ return mRefreshLayout;
+ }
+
+
+ /**
+ * 显示或隐藏软键盘,如果当时是显示则隐藏,如果当前是隐藏则显示
+ */
+ public void showOrHide() {
+ InputMethodManager imm = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
+ // 得到InputMethodManager的实例
+ if (imm.isActive()) {
+ // 如果开启
+ imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT,
+ InputMethodManager.HIDE_NOT_ALWAYS);
+
+ }
+ }
+
+
+ /**
+ * 隐藏软键盘
+ */
+ public void hintKb() {
+ InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+ /**点击空白处隐藏键盘*/
+ if (getCurrentFocus() != null && getCurrentFocus().getWindowToken() != null) {
+ imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
+ }
+
+ }
+
+ /**
+ * 显示软键盘
+ *
+ * @param view
+ */
+ public void showKb(View view) {
+ InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+ imm.showSoftInput(view, InputMethodManager.RESULT_SHOWN);
+ imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
+ }
+
+ /**
+ * 初始化一般返回按钮事件
+ */
+ public void initNormalBack() {
+
+ ImageView iv_back = (ImageView) findViewById(R.id.iv_left_btn);
+
+ if (iv_back != null) {
+ iv_back.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ finish();
+ }
+ });
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/base/BaseBean.java b/app/src/main/java/com/example/administrator/seven/base/BaseBean.java
new file mode 100644
index 0000000..912117a
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/base/BaseBean.java
@@ -0,0 +1,15 @@
+package com.example.administrator.seven.base;
+
+import java.io.Serializable;
+
+/**
+ * @description 实体基类
+ * @author fangyan
+ * @date 2015年8月1日
+ */
+public class BaseBean implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/base/BaseFragment.java b/app/src/main/java/com/example/administrator/seven/base/BaseFragment.java
new file mode 100644
index 0000000..4665112
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/base/BaseFragment.java
@@ -0,0 +1,76 @@
+package com.example.administrator.seven.base;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.os.Build;
+import android.support.v4.app.Fragment;
+import android.support.v4.content.ContextCompat;
+import android.text.TextPaint;
+import android.widget.TextView;
+
+/**
+ * 项目名:erp
+ * 包名:com.realize.erp.view.fragment
+ * 文件名:BaseFragment
+ * 创建者:任剑波
+ * 创建时间:2017/9/29 17:42
+ * 描述:TODO
+ */
+public class BaseFragment extends Fragment {
+
+ protected Activity mContext;
+
+
+
+ /**
+ * 申请指定的权限.
+ */
+ public void requestPermission(int code, String... permissions) {
+
+ if (Build.VERSION.SDK_INT >= 23) {
+ requestPermissions(permissions, code);
+ }
+ }
+
+ /**s
+ * 判断是否有指定的权限
+ */
+ public boolean hasPermission(String... permissions) {
+
+ for (String permisson : permissions) {
+ if (ContextCompat.checkSelfPermission(getActivity(), permisson)
+ != PackageManager.PERMISSION_GRANTED) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+
+ public void doOpenCamera() {
+
+ }
+
+ public void doWriteSDCard() {
+
+ }
+ /**
+ * 字体加粗
+ */
+ protected void Thickening(TextView mLayTopTitle) {
+ TextPaint tp = mLayTopTitle.getPaint();
+ tp.setFakeBoldText(true);
+ }
+
+ /**
+ * 开启一个Activity
+ *
+ * @param clz 需要开启的Activity
+ */
+ public void startActivity(Context mContext,Class extends Activity> clz) {
+ startActivity(new Intent(mContext, clz));
+ }
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/base/BaseTreeActivity.java b/app/src/main/java/com/example/administrator/seven/base/BaseTreeActivity.java
new file mode 100644
index 0000000..8fba225
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/base/BaseTreeActivity.java
@@ -0,0 +1,219 @@
+package com.example.administrator.seven.base;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Color;
+import android.os.Bundle;
+import android.support.annotation.IdRes;
+import android.support.annotation.Nullable;
+import android.support.annotation.StringRes;
+import android.support.v4.widget.SwipeRefreshLayout;
+import android.util.TypedValue;
+import android.view.View;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.ImageButton;
+import android.widget.ImageView;
+import android.widget.Toast;
+
+
+import com.example.administrator.seven.R;
+import com.example.administrator.seven.dialog.LoadingDialogy;
+import com.example.administrator.seven.utils.StatusBarUtils;
+import com.hannesdorfmann.mosby3.mvp.MvpActivity;
+import com.hannesdorfmann.mosby3.mvp.MvpPresenter;
+import com.hannesdorfmann.mosby3.mvp.MvpView;
+
+/**
+ * BaseTreeActivity
+ * (๑• . •๑)
+ * 类描述: 使用第三方MVP库的BaseActivity
+ * Created by LeiXiaoXing on 2017/3/14 09:54
+ */
+
+public abstract class BaseTreeActivity> extends MvpActivity implements BaseTreeView {
+ private final String TAG = getClass().getSimpleName();
+ protected Context mContext;
+ private LoadingDialogy mProgressDialog;
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(getLayoutId());
+ mContext = this;
+ initStyle();
+ initView();
+ initData();
+ initEvent();
+ initNormalBack();
+ }
+
+ /**
+ * 获取布局文件ID
+ *
+ * @return 布局文件ID
+ */
+ protected abstract int getLayoutId();
+
+ /**
+ * 初始化视图状态
+ */
+ protected abstract void initView();
+
+ /**
+ * 初始化数据参数
+ */
+ protected abstract void initData();
+
+ /**
+ * 初始化操作事件
+ */
+ protected abstract void initEvent();
+
+
+ public void toast(String msg) {
+ Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
+ }
+
+ public void toast(@StringRes int ids) {
+ this.toast(getString(ids));
+ }
+
+ /**
+ * 线程安全的toast
+ *
+ * @param ids toast内容
+ */
+ public void toastThreadSafe(@StringRes final int ids) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ toast(ids);
+ }
+ });
+
+ }
+
+ /**
+ * 开启一个Activity
+ *
+ * @param clz 需要开启的Activity
+ */
+ public void startActivity(Class extends Activity> clz) {
+ startActivity(new Intent(this, clz));
+ }
+
+ /**
+ * 开启一个Activity并关闭当前Activity
+ *
+ * @param clz 需要开启的Activity
+ */
+ public void startActivityAndFinishSelf(Class extends Activity> clz) {
+ startActivity(clz);
+ finish();
+ }
+
+ /**
+ * 初始化进度对话框
+ */
+ @Override
+ public void showProgressDialog(String dialogMessage) {
+ mProgressDialog = LoadingDialogy.showDialog(mContext, dialogMessage);
+ mProgressDialog.show();
+ }
+
+ /**
+ * 关闭进度对话框
+ */
+ @Override
+ public void dismissProgressDialog() {
+ if (null != mProgressDialog && mProgressDialog.isShowing()) {
+ mProgressDialog.dismiss();
+ }
+ }
+
+
+ /**
+ * 初始化刷新控件的参数
+ *
+ * @param ids 刷新控件的id
+ */
+ protected SwipeRefreshLayout setSwipeRefreshLayout(@IdRes int ids) {
+ SwipeRefreshLayout mRefreshLayout = (SwipeRefreshLayout) findViewById(ids);
+ mRefreshLayout.setProgressViewOffset(false, 0,
+ (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 24, getResources().getDisplayMetrics()));
+ mRefreshLayout.setColorSchemeResources(R.color.colorPrimary);
+ return mRefreshLayout;
+ }
+
+ /**
+ * 显示或隐藏软键盘,如果当时是显示则隐藏,如果当前是隐藏则显示
+ */
+ public void showOrHide() {
+ InputMethodManager imm = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
+ // 得到InputMethodManager的实例
+ if (imm.isActive()) {
+ // 如果开启
+ imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT,
+ InputMethodManager.HIDE_NOT_ALWAYS);
+
+ }
+ }
+
+
+ /**
+ * 隐藏软键盘
+ */
+ public void hintKb() {
+ InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+ /**点击空白处隐藏键盘*/
+ if (getCurrentFocus() != null && getCurrentFocus().getWindowToken() != null) {
+ imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
+ }
+
+ }
+
+ /**
+ * 显示软键盘
+ *
+ * @param view
+ */
+ public void showKb(View view) {
+ InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+ imm.showSoftInput(view, InputMethodManager.RESULT_SHOWN);
+ imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
+ }
+
+ /**
+ * 初始化一般返回按钮事件
+ */
+ private void initNormalBack() {
+ ImageButton ib_back = (ImageButton) findViewById(R.id.ib_back);
+ ImageView iv_back = (ImageView) findViewById(R.id.iv_left_btn);
+ if (ib_back != null) {
+ ib_back.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ finish();
+ }
+ });
+
+ }
+ if (iv_back != null) {
+ iv_back.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ finish();
+ }
+ });
+ }
+ }
+
+
+ /**
+ * 初始化状态栏
+ */
+ protected void initStyle() {
+ StatusBarUtils.setStateBaeColor(this, Color.parseColor("#131313"));
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/base/BaseTreeFragment.java b/app/src/main/java/com/example/administrator/seven/base/BaseTreeFragment.java
new file mode 100644
index 0000000..c1e364a
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/base/BaseTreeFragment.java
@@ -0,0 +1,279 @@
+package com.example.administrator.seven.base;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.content.res.Configuration;
+import android.os.Bundle;
+import android.support.annotation.IdRes;
+import android.support.annotation.Nullable;
+import android.support.annotation.StringRes;
+import android.support.v4.widget.SwipeRefreshLayout;
+import android.util.Log;
+import android.util.TypedValue;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Toast;
+
+import com.example.administrator.seven.R;
+import com.example.administrator.seven.dialog.LoadingDialog;
+import com.example.administrator.seven.widget.TitleBar;
+import com.hannesdorfmann.mosby3.mvp.MvpFragment;
+import com.hannesdorfmann.mosby3.mvp.MvpPresenter;
+import com.hannesdorfmann.mosby3.mvp.MvpView;
+
+/**
+ * BaseTreeFragment
+ * (๑• . •๑)
+ * 类描述: Fragment基类,使用第三方MVP
+ * Created by LeiXiaoXing on 2017/3/14 09:57
+ */
+
+public abstract class BaseTreeFragment> extends MvpFragment {
+
+ protected final String TAG = getClass().getSimpleName();
+ protected Context mContext;
+ protected Activity mActivity;
+ private LoadingDialog mProgressDialog;
+ /**
+ * 视图是否已经初初始化
+ */
+ protected boolean isInit = false;
+ protected boolean isLoad = false;
+
+ @Nullable
+ @Override
+ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+
+ return inflater.inflate(getFragmentLayoutId(), container, false);
+ }
+
+
+ @Override
+ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ initView(view);
+ initData();
+ initEvent(view);
+ isInit = true;
+ isCanLoadData();
+ }
+
+ /**
+ * 获取Fragment布局文件id
+ *
+ * @return Fragment布局文件id
+ */
+ protected abstract int getFragmentLayoutId();
+
+ /**
+ * 初始化视图状态
+ */
+ protected abstract void initView(View view);
+
+ /**
+ * 初始化数据参数
+ */
+ protected abstract void initData();
+
+ /**
+ * 初始化操作事件
+ */
+ protected abstract void initEvent(View view);
+
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ mContext = context;
+ mActivity = getActivity();
+
+ }
+
+ /**
+ * 视图是否已经对用户可见,系统的方法,setUserVisibleHint在onCreate之前调用
+ * 1.第一次创建Fragment时,加载数据会报空指针异常,所以要加个判断是否已经初始化
+ * 2.当Fragment已经初始化,再次可见时会直接调用此方法,此时可以直接加载数据
+ * 所以要在两个地方调用加载数据
+ */
+ @Override
+ public void setUserVisibleHint(boolean isVisibleToUser) {
+ super.setUserVisibleHint(isVisibleToUser);
+ isCanLoadData();
+ }
+
+ /**
+ * 是否可以加载数据
+ * 可以加载数据的条件:
+ * 1.视图已经初始化
+ * 2.视图对用户可见
+ */
+ private void isCanLoadData() {
+ if (!isInit) {
+ return;
+ }
+
+ if (getUserVisibleHint()) {
+ setUpView();
+ isLoad = true;
+ } else {
+ if (isLoad) {
+ stopLoad();
+ }
+ }
+ }
+
+ /**
+ * 当视图初始化并且对用户可见的时候去真正的加载数据
+ */
+ protected void setUpView() {
+ }
+
+ /**
+ * 当视图已经对用户不可见并且加载过数据,如果需要在切换到其他页面时停止加载数据,可以调用此方法
+ */
+ protected void stopLoad() {
+ }
+
+ /**
+ * toast
+ *
+ * @param msg 吐丝的内容
+ */
+ public void toast(String msg) {
+ Toast.makeText(mContext, msg, Toast.LENGTH_SHORT).show();
+ }
+
+ /**
+ * toast
+ *
+ * @param ids 吐丝的内容的字符串ids
+ */
+ public void toast(@StringRes int ids) {
+ toast(getString(ids));
+ }
+
+
+ /**
+ * 线程安全的toast
+ *
+ * @param msg
+ */
+ public void toastThreadSafe(final String msg) {
+ if (null != mActivity) {
+ mActivity.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ toast(msg);
+ }
+ });
+ }
+ }
+
+ /**
+ * 线程安全的toast
+ *
+ * @param ids
+ */
+ public void toastThreadSafe(@StringRes final int ids) {
+ if (null != mActivity) {
+ mActivity.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ toast(ids);
+ }
+ });
+ }
+ }
+
+ /**
+ * 开启一个Activity
+ *
+ * @param clz 需要开启的Activity
+ */
+ public void startActivity(Class extends Activity> clz) {
+ if (null != mContext) {
+ startActivity(new Intent(mContext, clz));
+// getActivity().overridePendingTransition(R.anim.trans_next_in,R.anim.trans_next_out);
+ }
+ }
+
+ /**
+ * 开启一个Activity,并finish掉当前的Activity
+ *
+ * @param clz
+ */
+ public void startActivityAndFinishSelf(Class extends Activity> clz) {
+ if (null != mActivity) {
+ startActivity(clz);
+ mActivity.finish();
+ }
+
+ }
+
+ @Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ }
+
+ /**
+ * 初始化进度对话框
+ */
+
+ public void showProgressDialog(String dialogMessage) {
+ mProgressDialog = new LoadingDialog(mContext);
+ mProgressDialog.setCanceledOnTouchOutside(false);
+// mProgressDialog.setMessage(dialogMessage);
+ mProgressDialog.show();
+ }
+
+
+ @Override
+ public void onHiddenChanged(boolean hidden) {
+ super.onHiddenChanged(hidden);
+ Log.d(TAG, "onHiddenChanged");
+ }
+
+ /**
+ * 关闭进度对话框
+ */
+
+ public void dismissProgressDialog() {
+ if (null != mProgressDialog && mProgressDialog.isShowing()) {
+ mProgressDialog.dismiss();
+ }
+ }
+
+ /**
+ * 初始化刷新控件的参数
+ *
+ * @param ids 刷新控件的id
+ */
+ protected SwipeRefreshLayout setSwipeRefreshLayout(@IdRes int ids) {
+ SwipeRefreshLayout mRefreshLayout = (SwipeRefreshLayout) getView().findViewById(ids);
+ mRefreshLayout.setProgressViewOffset(false, 0,
+ (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 24, getResources().getDisplayMetrics()));
+ mRefreshLayout.setColorSchemeResources(R.color.colorPrimary);
+ return mRefreshLayout;
+ }
+
+ /**
+ * 设置标题栏参数
+ *
+ * @param titleIds 标题栏的id
+ * @param title 标题
+ * @param goneLeftBtn 左边按钮是否显示
+ * @param goneRightBtn 右边按钮是否显示
+ * @param titleBarClickListener 左右边的按钮点击事件回调接口
+ * @return 返回设置好的titlebar
+ */
+ public TitleBar setTitleBar(@IdRes int titleIds, String title
+ , boolean goneLeftBtn, boolean goneRightBtn, TitleBar.OnTitleBarClickListener titleBarClickListener) {
+ TitleBar titleBar = (TitleBar) getView().findViewById(titleIds);
+ titleBar.setTitle(title);
+ titleBar.visibleIvLeftBtn(goneLeftBtn);
+ titleBar.visibleIvRightBtn(goneRightBtn);
+ titleBar.setOnTitleBarClickListener(titleBarClickListener);
+ return titleBar;
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/base/BaseTreeView.java b/app/src/main/java/com/example/administrator/seven/base/BaseTreeView.java
new file mode 100644
index 0000000..27e752c
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/base/BaseTreeView.java
@@ -0,0 +1,62 @@
+package com.example.administrator.seven.base;
+
+import android.app.Activity;
+import android.support.annotation.StringRes;
+import android.support.annotation.UiThread;
+
+import com.hannesdorfmann.mosby3.mvp.MvpView;
+
+/**
+ * BaseTreeView
+ * (๑• . •๑)
+ * 类描述:基础View接口
+ * Created by LeiXiaoXing on 2017/3/13 18:20
+ */
+
+public interface BaseTreeView extends MvpView {
+
+ /**
+ * 显示加载中对话框
+ */
+ @UiThread
+
+ void showProgressDialog(String dialogMessage);
+
+ /**
+ * 隐藏加载中对话框
+ */
+ @UiThread
+
+ void dismissProgressDialog();
+
+
+ /**
+ * toast
+ *
+ * @param msg 吐丝的内容
+ */
+ void toast(String msg);
+
+ /**
+ * toast
+ *
+ * @param ids 吐丝的内容的字符串ids
+ */
+ void toast(@StringRes int ids);
+
+
+ /**
+ * 开启一个Activity
+ *
+ * @param clz 需要开启的Activity
+ */
+ void startActivity(Class extends Activity> clz);
+
+ /**
+ * 开启一个Activity,并finish掉当前的Activity
+ *
+ * @param clz 消息内容
+ */
+ void startActivityAndFinishSelf(Class extends Activity> clz);
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/dialog/BaseDialog.java b/app/src/main/java/com/example/administrator/seven/dialog/BaseDialog.java
new file mode 100644
index 0000000..f790424
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/dialog/BaseDialog.java
@@ -0,0 +1,65 @@
+package com.example.administrator.seven.dialog;
+
+import android.app.Activity;
+import android.app.Dialog;
+import android.content.Context;
+import android.view.Display;
+import android.view.View;
+import android.view.WindowManager;
+
+/**
+ * 日期:2017.01.11
+ *
+ * 作者:xudiwei
+ *
+ * 描述:base对话框
+ */
+public class BaseDialog extends Dialog implements View.OnClickListener {
+
+ protected Context mContext;
+ private View view;
+ private boolean isDismiss = true;
+
+ public BaseDialog(Context context) {
+ super(context);
+ }
+
+ public BaseDialog(Context context, int themeResId) {
+ super(context, themeResId);
+ }
+
+ public BaseDialog(Context context, View view, int themeResId) {
+ super(context, themeResId);
+ this.mContext = context;
+ this.view = view;
+ this.view.setOnClickListener(this);
+ setContentView(view);
+ }
+
+ @Override
+ public void show() {
+ super.show();
+
+ WindowManager windowManager = ((Activity) mContext).getWindowManager();
+ Display display = windowManager.getDefaultDisplay();
+ WindowManager.LayoutParams lp = getWindow().getAttributes();
+ lp.width = display.getWidth(); //设置宽度
+ getWindow().setAttributes(lp);
+ }
+
+ @Override
+ public void onClick(View v) {
+ if (isDismiss) {
+ dismiss();
+ }
+ }
+
+ /**
+ * 当点击对话框外面时是否关闭对话框,默认是要关闭对话框
+ *
+ * @param b
+ */
+ public void clickOutsideDismiss(boolean b) {
+ this.isDismiss = b;
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/dialog/BaseTipsDialog.java b/app/src/main/java/com/example/administrator/seven/dialog/BaseTipsDialog.java
new file mode 100644
index 0000000..f5a0b96
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/dialog/BaseTipsDialog.java
@@ -0,0 +1,86 @@
+package com.example.administrator.seven.dialog;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.text.Html;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.TextView;
+
+import com.example.administrator.seven.R;
+
+/**
+ * Time: 2020/7/14
+ * Author: jianbo
+ * Description:
+ */
+public class BaseTipsDialog {
+ Context mcontext;
+ ClickListener clickListener;
+
+ public void showDownloadDialog(Context mcontext,final String s1, final String s2, final ClickListener clickListener) {
+ this.clickListener=clickListener;
+ this.mcontext=mcontext;
+ final Dialog dialog = new Dialog(mcontext, R.style.DialogStyle);
+ dialog.setCancelable(false);
+ dialog.setCanceledOnTouchOutside(false);
+ View view = LayoutInflater.from(mcontext).inflate(R.layout.item_base_dialog, null);
+ dialog.setContentView(view);
+ TextView tv_title = (TextView) view.findViewById(R.id.tv_title);
+ TextView tvSexCancel = (TextView) view.findViewById(R.id.tvSexCancel);
+ TextView tvPhone = (TextView) view.findViewById(R.id.tvPhone);
+ TextView tvSexSend = (TextView) view.findViewById(R.id.tvSexSend);
+ tv_title.setText("温馨提示");
+ tvPhone.setText(Html.fromHtml(s1));
+ tvSexSend.setText(s2);
+ tvPhone.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+
+ }
+ });
+ tvSexSend.setOnClickListener(new View.OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+// if (pagetype.equals("3")) {
+// updClerkStore(updClerkStoreBean.getTrans_storeid(), updClerkStoreBean.getTrans_usertype(), updClerkStoreBean.getHand_uid());
+// } else {
+// updLeaveTime(updClerkStoreBean.getHand_uid());
+// }
+ clickListener.confirm();
+ dialog.dismiss();
+
+
+ }
+ });
+ tvSexCancel.setOnClickListener(new View.OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+
+ clickListener.cancle();
+ dialog.dismiss();
+
+ }
+ });
+ Window mWindow = dialog.getWindow();
+ WindowManager.LayoutParams lp = mWindow.getAttributes();
+ lp.width = MyDialog.getScreenWidth(mcontext);
+ mWindow.setGravity(Gravity.CENTER);
+ // mWindow.setWindowAnimations(R.style.dialogAnim);
+ mWindow.setAttributes(lp);
+ dialog.show();
+ }
+
+ public interface ClickListener{
+
+ void confirm();
+ void cancle();
+
+ }
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/dialog/LoadingDialog.java b/app/src/main/java/com/example/administrator/seven/dialog/LoadingDialog.java
new file mode 100644
index 0000000..82ec72d
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/dialog/LoadingDialog.java
@@ -0,0 +1,46 @@
+package com.example.administrator.seven.dialog;
+
+import android.app.Activity;
+import android.content.Context;
+import android.view.View;
+
+import com.example.administrator.seven.R;
+
+/**
+ * Created by: xudiwei
+ *
+ * on: 2017/5/16.
+ *
+ * 描述:加载中禁止用户手机关闭的对话框
+ */
+
+public class LoadingDialog extends BaseDialog {
+ private boolean mClose = true;
+
+ public LoadingDialog(Context context) {
+ super(context, View.inflate(context, R.layout.dialog_loading, null), R.style.avatar_dialog_style);
+ setCanceledOnTouchOutside(false);
+ }
+
+
+ @Override
+ public void onClick(View v) {
+// super.onClick(v);
+ }
+
+ @Override
+ public void onBackPressed() {
+ super.onBackPressed();
+ if (mClose) {
+ ((Activity) mContext).finish();
+ }
+ }
+
+ /**
+ * 当用户按下返回键时是否关闭Activity
+ * @param close
+ */
+ public void setPressBackCloseActivity(boolean close) {
+ this.mClose = close;
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/dialog/LoadingDialogy.java b/app/src/main/java/com/example/administrator/seven/dialog/LoadingDialogy.java
new file mode 100644
index 0000000..e955513
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/dialog/LoadingDialogy.java
@@ -0,0 +1,54 @@
+package com.example.administrator.seven.dialog;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+import com.example.administrator.seven.R;
+
+/**
+ * on: 2018/11/2
+ *
+ * 描述:加载中禁止用户手机关闭的对话框
+ */
+
+public class LoadingDialogy extends Dialog {
+
+
+ private Context context;
+ private static LoadingDialogy dialog;
+ private ProgressBar ivProgress;
+ private String showContent;
+
+
+ public LoadingDialogy(Context context , String showContent) {
+ super(context);
+ this.context = context;
+ this.showContent = showContent;
+ }
+
+ public LoadingDialogy(Context context, int themeResId, String showContent) {
+ super(context, themeResId);
+ this.context = context;
+ this.showContent = showContent;
+
+
+ }
+ //显示dialog的方法
+ public static LoadingDialogy showDialog(Context context , String content){
+ dialog = new LoadingDialogy(context, R.style.loadingDialog ,content);//dialog样式
+ dialog.setContentView(R.layout.dialog_loading);//dialog布局文件
+ dialog.setCanceledOnTouchOutside(false);//点击外部不允许关闭dialog
+ return dialog;
+ }
+
+ @Override
+ public void onWindowFocusChanged(boolean hasFocus) {
+ super.onWindowFocusChanged(hasFocus);
+ if(hasFocus && dialog != null){
+ ivProgress = (ProgressBar) dialog.findViewById(R.id.ivProgress);
+ TextView textView = (TextView) dialog.findViewById(R.id.tv_content);
+ textView.setText(showContent);
+ }
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/dialog/MyDialog.java b/app/src/main/java/com/example/administrator/seven/dialog/MyDialog.java
new file mode 100644
index 0000000..72b118c
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/dialog/MyDialog.java
@@ -0,0 +1,16 @@
+package com.example.administrator.seven.dialog;
+
+import android.app.Activity;
+import android.content.Context;
+import android.util.DisplayMetrics;
+
+
+public class MyDialog {
+
+
+ public static int getScreenWidth(Context context){
+ DisplayMetrics dm = new DisplayMetrics();
+ ((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(dm);
+ return dm.widthPixels;
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/Fragment/HomeFragment.java b/app/src/main/java/com/example/administrator/seven/main/Fragment/HomeFragment.java
new file mode 100644
index 0000000..2a871a6
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/Fragment/HomeFragment.java
@@ -0,0 +1,50 @@
+package com.example.administrator.seven.main.Fragment;
+
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import com.example.administrator.seven.R;
+import com.example.administrator.seven.base.BaseFragment;
+
+
+/**
+ * 项目名:jiajiesong
+ * 包名:com.example.administrator.newjiajiesone.main.activity.mvp.Fragment
+ * 文件名:HomeFragment
+ * 创建者:mengjuan
+ * 创建时间:2018/11/1
+ * 描述:TODO
+ */
+public class HomeFragment extends BaseFragment {
+
+ private View mContentView;
+ private TextView titleTv;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ mContext = getActivity();
+ mContentView = inflater.inflate(R.layout.fragment_home_layout, container, false);
+ initView(mContentView);
+ initData();
+ return mContentView;
+ }
+
+
+ private void initView(View mContentView){
+ titleTv = (TextView)mContentView.findViewById(R.id.tv_title);
+ }
+
+ private void initData(){
+ titleTv.setVisibility(View.VISIBLE);
+ titleTv.setText(R.string.text_home_fragment);
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/administrator/seven/main/Fragment/MapFragment.java b/app/src/main/java/com/example/administrator/seven/main/Fragment/MapFragment.java
new file mode 100644
index 0000000..34e43ec
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/Fragment/MapFragment.java
@@ -0,0 +1,6 @@
+package com.example.administrator.seven.main.Fragment;
+
+import com.example.administrator.seven.base.BaseFragment;
+
+public class MapFragment extends BaseFragment{
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/Fragment/MoFragment.java b/app/src/main/java/com/example/administrator/seven/main/Fragment/MoFragment.java
new file mode 100644
index 0000000..9614696
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/Fragment/MoFragment.java
@@ -0,0 +1,215 @@
+package com.example.administrator.seven.main.Fragment;
+
+import android.annotation.SuppressLint;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.support.v4.widget.SwipeRefreshLayout;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.example.administrator.seven.R;
+import com.example.administrator.seven.base.BaseFragment;
+import com.example.administrator.seven.main.entity.Savaselect;
+
+import java.util.List;
+
+
+@SuppressLint("ValidFragment")
+public abstract class MoFragment extends BaseFragment {
+ public static final String ARG_PAGE = "ARG_PAGE";
+ private boolean IS_LOADED = false;
+ private static int mSerial = 0;
+ private boolean isFirst = true;
+ @SuppressLint("HandlerLeak")
+ private Handler handler = new Handler() {
+ public void handleMessage(Message msg) {
+ Log.e("tag", "IS_LOADED=" + IS_LOADED);
+ if (!IS_LOADED) {
+ IS_LOADED = true;
+ //请求我的客户已流失数据
+ requesdata();
+ }
+ return;
+ }
+
+ };
+ public Savaselect savaselectbean;
+ private RelativeLayout rl_top;
+ private RelativeLayout layTop_left_tv;
+
+ public MoFragment(Savaselect savaselect) {
+ this.savaselectbean = savaselect;
+ }
+ public BaseQuickAdapter markingtwoAdapter;
+ public void sendMessage() {
+ Message message = handler.obtainMessage();
+ message.sendToTarget();
+ }
+
+ private String uid;
+ public RecyclerView mMarkingFragmentRecyclerView;
+ public SwipeRefreshLayout mSwl;
+ public int mNextRequestPage = 1;
+ private static final int PAGE_SIZE = 10;
+ View view;
+ public View notDataView;
+ public View errorView;
+ public TextView mLayTopTitle;
+ //头部图片(轮播图的高度)
+ public int mRecyclerHeaderBannerHeight;
+ //头部的高度
+ public int mRecyclerHeaderHeight;
+ private int mTextViewHeight;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ mContext = getActivity();
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ if (view != null) {
+ ViewGroup parent = (ViewGroup) view.getParent();
+ if (parent != null) {
+ parent.removeView(view);
+ }
+ return view;
+ }
+ view = inflater.inflate(R.layout.mobanfragment, container, false);
+ initView(view);
+ //设置页和当前页一致时加载,防止预加载
+ if (isFirst) {
+ isFirst = false;
+ sendMessage();
+ }
+ return view;
+ }
+
+ private void initView(View mContentView) {
+
+ rl_top = (RelativeLayout) view.findViewById(R.id.rl_top);
+ mLayTopTitle = (TextView) view.findViewById(R.id.layTop_title);
+ layTop_left_tv = (RelativeLayout) view.findViewById(R.id.layTop_left_tv);
+ layTop_left_tv.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ getActivity().finish();
+ }
+ });
+ mLayTopTitle.setText("账户余额");
+ Thickening(mLayTopTitle);
+ //获取到文本的高度
+ mTextViewHeight = rl_top.getHeight();
+ //header高度
+ mRecyclerHeaderBannerHeight = 400;
+ mMarkingFragmentRecyclerView = (RecyclerView) view.findViewById(R.id.marking_fragment_recyclerView);
+ mSwl = mContentView.findViewById(R.id.srl);
+ notDataView = getActivity().getLayoutInflater().inflate(R.layout.empty_view, (ViewGroup) mMarkingFragmentRecyclerView.getParent(), false);
+ notDataView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ // refresh();
+ }
+ });
+ errorView = getActivity().getLayoutInflater().inflate(R.layout.error_view, (ViewGroup) mMarkingFragmentRecyclerView.getParent(), false);
+ errorView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ // onRefresh();
+ }
+ });
+
+ }
+ /**
+ * 计算RecyclerView滑动的距离
+ * @param hasHead 是否有头部
+ * @param headerHeight RecyclerView的头部高度
+ * @return 滑动的距离
+ */
+ public int getScollYHeight(boolean hasHead, int headerHeight) {
+ LinearLayoutManager layoutManager = (LinearLayoutManager) mMarkingFragmentRecyclerView.getLayoutManager();
+ //获取到第一个可见的position,其添加的头部不算其position当中
+ int position = layoutManager.findFirstVisibleItemPosition();
+ //通过position获取其管理器中的视图
+ View firstVisiableChildView = layoutManager.findViewByPosition(position);
+ //获取自身的高度
+ int itemHeight = firstVisiableChildView.getHeight();
+ //有头部
+ if(hasHead) {
+ return headerHeight + itemHeight*position - firstVisiableChildView.getTop();
+ }else {
+ return itemHeight*position - firstVisiableChildView.getTop();
+ }
+ }
+
+ public void requesdata() {
+ initAdapter();
+ initRefreshLayout();
+ mSwl.setRefreshing(true);
+ refresh();
+ }
+
+ public abstract void initAdapter();
+
+
+ private void initRefreshLayout() {
+ mSwl.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
+ @Override
+ public void onRefresh() {
+ refresh();
+ }
+ });
+ }
+
+ private void refresh() {
+ mNextRequestPage = 1;
+ markingtwoAdapter.setEnableLoadMore(false);//这里的作用是防止下拉刷新的时候还可以上拉加载
+ requestData();
+ }
+
+ public void loadMore() {
+ requestData();
+ }
+
+ public void setData(boolean isRefresh, List data) {
+ mNextRequestPage++;
+ final int size = data == null ? 0 : data.size();
+ if (isRefresh) {
+ markingtwoAdapter.setNewData(data);
+ } else {
+ if (size > 0) {
+ markingtwoAdapter.addData(data);
+ }
+ }
+ if (size < PAGE_SIZE) {
+ //第一页如果不够一页就不显示没有更多数据布局
+ markingtwoAdapter.loadMoreEnd(isRefresh);
+ } else {
+ markingtwoAdapter.loadMoreComplete();
+ }
+ }
+
+
+ public abstract void requestData();
+
+ public void getAdpter(BaseQuickAdapter markingtwoAdapter){
+ this.markingtwoAdapter=markingtwoAdapter;
+ }
+
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+
+ }
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/Fragment/MyFragment.java b/app/src/main/java/com/example/administrator/seven/main/Fragment/MyFragment.java
new file mode 100644
index 0000000..1f98a7c
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/Fragment/MyFragment.java
@@ -0,0 +1,190 @@
+package com.example.administrator.seven.main.Fragment;
+
+
+import android.content.Intent;
+import android.support.annotation.NonNull;
+import android.support.v4.content.ContextCompat;
+import android.support.v4.widget.SwipeRefreshLayout;
+import android.view.View;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.example.administrator.seven.R;
+import com.example.administrator.seven.base.BaseTreeFragment;
+import com.example.administrator.seven.dialog.BaseTipsDialog;
+import com.example.administrator.seven.main.Fragment.mvp.contract.MyContract;
+import com.example.administrator.seven.main.Fragment.mvp.presenter.MyPresenterImpl;
+import com.example.administrator.seven.main.activity.LoginPasswordActivity;
+import com.example.administrator.seven.main.activity.Main2Activity;
+import com.example.administrator.seven.utils.ToolsUtils;
+import com.example.administrator.seven.utils.checkVersionsUtils.ProfileSpUtils;
+import com.example.administrator.seven.view.webview.XfiveWebActivity;
+import com.example.administrator.seven.widget.CircleImageView;
+import com.example.administrator.seven.widget.ItemView;
+import com.tencent.mm.opensdk.openapi.IWXAPI;
+
+
+/**
+ * MyFragment
+ * (๑• . •๑)
+ * 类描述: 个人中心
+ */
+public class MyFragment
+ extends BaseTreeFragment
+ implements View.OnClickListener, ItemView.OnItemViewClickListener
+ , MyContract.View {
+
+
+ private SwipeRefreshLayout mSwipeRefreshLayout;
+ private CircleImageView rivAvatar;
+ private TextView tvNickname;
+ private TextView tvPhone;
+ private TextView tvCompany;
+ private TextView tvPost;
+ private ProfileSpUtils profileSpUtils;
+ private TextView tvVipInfo;
+ private TextView tvVipStatus;
+ private TextView tvRole;
+ private IWXAPI mApi;
+ private int role = 0;
+ private String days = "";
+ private String dangqianversion;//当前版本号
+ private TextView tv_my_version;
+ private RelativeLayout my_rl_01;
+
+ @Override
+ protected int getFragmentLayoutId() {
+ return R.layout.fragment_my;
+ }
+
+ @Override
+ protected void initView(View view) {
+ mSwipeRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.SwipeRefreshLayout);
+ mSwipeRefreshLayout.setColorSchemeColors(ContextCompat.getColor(mContext, R.color.colorAccent));
+ //初始化用户资料控件
+ rivAvatar = (CircleImageView) view.findViewById(R.id.riv_avatar);
+ tvPhone = (TextView) view.findViewById(R.id.tv_phone);
+ tvNickname = (TextView) view.findViewById(R.id.tv_nickname);
+ tv_my_version = (TextView) view.findViewById(R.id.tv_my_version);
+ my_rl_01 = (RelativeLayout) view.findViewById(R.id.my_rl_01);
+ ToolsUtils.setText(tv_my_version, ToolsUtils.getVersion(getActivity()));
+ }
+
+ @Override
+ protected void initData() {
+ // mApi = WXAPIFactory.createWXAPI(mContext, WXEntryActivity.WEIXIN_APP_ID, true);
+ profileSpUtils = ProfileSpUtils.getInstance();
+ refreshData();
+ }
+
+ @Override
+ protected void initEvent(View view) {
+ view.findViewById(R.id.view_personal_profile).setOnClickListener(this);
+ ((ItemView) view.findViewById(R.id.item_my_twitter)).setOnItemViewClickListener(this);
+ my_rl_01.setOnClickListener(this);
+ mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
+ @Override
+ public void onRefresh() {
+ getPresenter().refresh();
+ }
+ });
+ view.findViewById(R.id.lay_out).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+
+ new BaseTipsDialog().showDownloadDialog(getActivity(), "确认要退出登录吗?", "确定", new BaseTipsDialog.ClickListener() {
+ @Override
+ public void confirm() {
+ ProfileSpUtils.getInstance().saveLoginSatus(false);
+ Intent intent = new Intent(getActivity(), LoginPasswordActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
+ startActivity(intent);
+ }
+
+ @Override
+ public void cancle() {
+
+ }
+ });
+ }
+ });
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ //获取数据
+ if (profileSpUtils.isLogin()) {
+ getPresenter().refresh();
+ } else {
+ refreshData();
+ }
+ }
+
+ @NonNull
+ @Override
+ public MyPresenterImpl createPresenter() {
+ return new MyPresenterImpl();
+ }
+
+ @Override
+ public void onClick(View v) {
+ //如果没有登录跳转到登录页面
+ if (!ProfileSpUtils.getInstance().isLogin()) {
+ startActivity(LoginPasswordActivity.class);
+ return;
+ }
+ switch (v.getId()) {
+ case R.id.my_rl_01:
+
+ startActivity(Main2Activity.class);
+
+ break;
+ }
+ }
+
+ @Override
+ public IWXAPI getWxApi() {
+ return mApi;
+ }
+ @Override
+ public void onItemViewClick(View view) {
+ //如果没有登录跳转到登录页面
+ if (!ProfileSpUtils.getInstance().isLogin()) {
+ startActivity(LoginPasswordActivity.class);
+ return;
+ }
+ switch (view.getId()) {
+
+ case R.id.item_my_twitter:
+ XfiveWebActivity.runActivity(getActivity(), "隐私政策", "http://www.fenghoo.cn/public/statement/statement");
+ break;
+// case R.id.item_attact_wechat:
+// //关联微信
+// getPresenter().weChatBind();
+// break;
+ }
+ }
+
+
+
+ // @Override
+// public IWXAPI getWxApi() {
+// return mApi;
+// }
+
+ @Override
+ public void refreshData() {
+ mSwipeRefreshLayout.setRefreshing(false);
+// TreeUserEntity userEntity = ProfileSpUtils.getInstance().getUserProfie();
+// UserHeadEntity headEntity = ProfileSpUtils.getInstance().getHeadImage();
+// tvNickname.setText(userEntity.getNick_name());
+// tvPhone.setText(userEntity.getPhone());
+// tvCompany.setText(userEntity.getJob());
+// tvPost.setText(userEntity.getPosition());
+ if (profileSpUtils.isLogin()) {
+
+ }
+
+
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/Fragment/SendFragment.java b/app/src/main/java/com/example/administrator/seven/main/Fragment/SendFragment.java
new file mode 100644
index 0000000..77de41c
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/Fragment/SendFragment.java
@@ -0,0 +1,40 @@
+package com.example.administrator.seven.main.Fragment;
+
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import com.example.administrator.seven.R;
+import com.example.administrator.seven.base.BaseFragment;
+
+public class SendFragment extends BaseFragment{
+
+ private View mContentView;
+ private TextView titleTv;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ mContext = getActivity();
+ mContentView = inflater.inflate(R.layout.fragment_home_layout, container, false);
+ initView(mContentView);
+ initData();
+ return mContentView;
+ }
+
+
+ private void initView(View mContentView){
+ titleTv = (TextView)mContentView.findViewById(R.id.tv_title);
+ }
+
+ private void initData(){
+ titleTv.setVisibility(View.VISIBLE);
+ titleTv.setText(R.string.text_home_fragment);
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/Fragment/XikeInfoFragment.java b/app/src/main/java/com/example/administrator/seven/main/Fragment/XikeInfoFragment.java
new file mode 100644
index 0000000..1144e71
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/Fragment/XikeInfoFragment.java
@@ -0,0 +1,155 @@
+package com.example.administrator.seven.main.Fragment;
+
+import android.annotation.SuppressLint;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.util.Log;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import com.example.administrator.seven.JsonUtils;
+import com.example.administrator.seven.R;
+import com.example.administrator.seven.main.adapter.mine.XikeInfoAdapter;
+import com.example.administrator.seven.main.entity.Savaselect;
+import com.example.administrator.seven.main.entity.XikeInfoBean;
+import com.example.administrator.seven.okgonet.NetApi;
+import com.example.administrator.seven.okgonet.Observer;
+import com.lzy.okgo.model.Response;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 惜客指数详情
+ */
+@SuppressLint("ValidFragment")
+public class XikeInfoFragment extends MoFragment {
+
+ private TextView xike_01;
+ private String xike;
+
+ public XikeInfoFragment(Savaselect savaselect) {
+ super(savaselect);
+ }
+
+ @Override
+ public void initAdapter() {
+ mMarkingFragmentRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
+ XikeInfoAdapter markingtwoAdapter = new XikeInfoAdapter(mContext, null);
+ getAdpter(markingtwoAdapter);
+ final View headerView = getHeaderView();
+ markingtwoAdapter.addHeaderView(headerView);
+ mMarkingFragmentRecyclerView.setAdapter(markingtwoAdapter);
+ mMarkingFragmentRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
+ @Override
+ public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
+ super.onScrollStateChanged(recyclerView, newState);
+
+ //onScrollStateChanged 方法
+ RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
+//判断是当前layoutManager是否为LinearLayoutManager
+//只有LinearLayoutManager才有查找第一个和最后一个可见view位置的方法
+ if (layoutManager instanceof LinearLayoutManager) {
+ LinearLayoutManager linearManager = (LinearLayoutManager) layoutManager;
+ //获取最后一个可见view的位置
+ int lastItemPosition = linearManager.findLastVisibleItemPosition();
+ Log.d("获取最后一个可见view的位置",lastItemPosition+"");
+ //获取第一个可见view的位置
+ int firstItemPosition = linearManager.findFirstVisibleItemPosition();
+ Log.d("获取第一个可见view的位置",firstItemPosition+"");
+ if(firstItemPosition==0){
+ mLayTopTitle.setText("账户余额");
+ }else {
+ mLayTopTitle.setText("当前余额(元):128.56");
+ }
+ }}
+
+ @Override
+ public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
+ super.onScrolled(recyclerView, dx, dy);
+ //设置其透明度
+ float alpha = 0;
+ int scollYHeight = getScollYHeight(true, mRecyclerHeaderHeight);
+ //起始截止变化高度,如可以变化高度为mRecyclerHeaderHeight
+ //int baseHeight = mRecyclerHeaderBannerHeight + mTextViewHeight;
+ int baseHeight = mRecyclerHeaderBannerHeight + dy;
+ if(scollYHeight >= baseHeight) {
+ //完全不透明
+ alpha = 1;
+
+ }else {
+
+ //产生渐变效果
+ // alpha = scollYHeight / (baseHeight*1.0f);
+ alpha = (baseHeight*1.0f)/scollYHeight ;
+ }
+ Log.d("高度"," scollYHeight: "+scollYHeight+" baseHeight: "+baseHeight+" alpha: "+alpha);
+ headerView.setAlpha(alpha);
+ }
+ });
+ }
+
+ private View getHeaderView() {
+ View view = getLayoutInflater().inflate(R.layout.xikeinfo_head_view, (ViewGroup) mMarkingFragmentRecyclerView.getParent(), false);
+ // xike_01 = (TextView) view.findViewById(R.id.xike_01);
+ return view;
+ }
+
+ @Override
+ public void requestData() {
+ new NetApi().xikeInfo("b886798bdce09746a787651013f2c6e6").subscribe(new Observer() {
+ @Override
+ public void onNext(Response response) {
+ String body = (String) response.body();
+ XikeInfoBean.ResultBean esdv = JsonUtils.fromJson(body, XikeInfoBean.class).getResult();
+ mSwl.setRefreshing(false);
+ if (esdv != null && String.valueOf(esdv.getSuccess()).equals("0")) {
+ xike = esdv.getXike();
+ // WidgetTools.setTextfive(xike_01, "", xike);
+ // List data = esdv.getData();
+
+
+ List data = new ArrayList();
+ for (int i = 0; i < 20; i++)
+ {
+ XikeInfoBean.ResultBean.DataBean dataBean = new XikeInfoBean.ResultBean.DataBean();
+ dataBean.setTime("2020-07-01 12:00:00");
+ dataBean.setXike_num("+89.00");
+ dataBean.setXike_remark("收益账户转入");
+ data.add(dataBean);
+ }
+
+ if (data.size() == 0) {
+ //markingtwoAdapter.setEmptyView(notDataView);
+ return;
+ }
+ if (mNextRequestPage == 1) {
+ setData(true, data);
+ } else {
+ setData(false, data);
+ }
+ } else {
+ setData(true, null);
+ markingtwoAdapter.setEmptyView(notDataView);
+ mSwl.setRefreshing(false);
+ }
+
+ }
+
+ @Override
+ public void onError(Exception e) {
+ e.printStackTrace();
+ markingtwoAdapter.setEmptyView(errorView);
+ mSwl.setRefreshing(false);
+ }
+ });
+
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ }
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/Fragment/mvp/contract/MyContract.java b/app/src/main/java/com/example/administrator/seven/main/Fragment/mvp/contract/MyContract.java
new file mode 100644
index 0000000..a4ec876
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/Fragment/mvp/contract/MyContract.java
@@ -0,0 +1,70 @@
+package com.example.administrator.seven.main.Fragment.mvp.contract;
+
+import com.example.administrator.seven.base.BaseTreeView;
+import com.example.administrator.seven.main.entity.mine.TreeUserEntity;
+import com.example.administrator.seven.network.ApiCallBack;
+import com.tencent.mm.opensdk.openapi.IWXAPI;
+
+/**
+ * MyContract
+ * (๑• . •๑)
+ * 类描述:
+ * Created by LeiXiaoXing on 2017/5/25 14:04
+ */
+
+public class MyContract {
+
+ public interface View extends BaseTreeView {
+ /**
+ * 获取微信APi
+ *
+ * @return 微信APi
+ */
+ IWXAPI getWxApi();
+
+ /**
+ * 刷新资料数据
+ */
+ void refreshData();
+ }
+
+ public interface Presenter {
+ /**
+ * 微信绑定
+ */
+ void weChatBind();
+
+ /**
+ * 刷新资料数据
+ */
+ void refresh();
+ }
+
+ public interface Model {
+ /**
+ * 是否绑定微信
+ *
+ * @return
+ */
+ boolean isBindWeChat();
+
+ /**
+ * 微信绑定
+ */
+ void weChatBind(ApiCallBack callBack);
+
+ /**
+ * 刷新用户数据
+ */
+ void refresh(ApiCallBack callBack);
+
+ /**
+ * 保存用户资料
+ *
+ * @param entity 用户资料
+ */
+ void save(TreeUserEntity entity);
+ }
+
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/administrator/seven/main/Fragment/mvp/model/MyModelImpl.java b/app/src/main/java/com/example/administrator/seven/main/Fragment/mvp/model/MyModelImpl.java
new file mode 100644
index 0000000..d1ceb5d
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/Fragment/mvp/model/MyModelImpl.java
@@ -0,0 +1,95 @@
+package com.example.administrator.seven.main.Fragment.mvp.model;
+
+import com.example.administrator.seven.main.Fragment.mvp.contract.MyContract;
+import com.example.administrator.seven.main.entity.mine.TreeUserEntity;
+import com.example.administrator.seven.network.ApiCallBack;
+import com.example.administrator.seven.network.http.ApiUtils;
+import com.example.administrator.seven.network.http.ResponseBean;
+import com.example.administrator.seven.utils.checkVersionsUtils.ProfileSpUtils;
+import com.example.administrator.seven.wxapi.WXEntryActivity;
+
+import io.reactivex.Observable;
+import io.reactivex.ObservableEmitter;
+import io.reactivex.ObservableOnSubscribe;
+import io.reactivex.ObservableSource;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.annotations.NonNull;
+import io.reactivex.functions.Consumer;
+import io.reactivex.functions.Function;
+import io.reactivex.schedulers.Schedulers;
+
+/**
+ * Created by Administrator on 2017/05/25
+ */
+
+public class MyModelImpl implements MyContract.Model {
+
+ @Override
+ public boolean isBindWeChat() {
+ return "2".equals(ProfileSpUtils.getInstance()
+ .getUserProfie()
+ .getIs_bind_wechat());
+ }
+
+ @Override
+ public void weChatBind(final ApiCallBack callBack) {
+ WXEntryActivity.getObservable()
+ .flatMap(new Function, ObservableSource>>() {
+ @Override
+ public ObservableSource> apply(@NonNull final ResponseBean treeUserEntityResponseBean) throws Exception {
+ if (treeUserEntityResponseBean.getStatus() != ResponseBean.SUCCESS) {
+ return Observable.create(new ObservableOnSubscribe>() {
+ @Override
+ public void subscribe(@NonNull ObservableEmitter> e) throws Exception {
+ // e.onError(new LifeTreeAPIException(-1,treeUserEntityResponseBean.getMsg()));
+ }
+ });
+ }
+ //绑定成功后刷新资料
+ return ApiUtils.getApi()
+ .userIdentity(ProfileSpUtils.getInstance()
+ .getUserProfie()
+ .getIm_identifier());
+ }
+ })
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Consumer>() {
+ @Override
+ public void accept(@NonNull ResponseBean treeUserEntityResponseBean) throws Exception {
+ callBack.onResponse(treeUserEntityResponseBean);
+ }
+ }, new Consumer() {
+ @Override
+ public void accept(@NonNull Throwable throwable) throws Exception {
+ callBack.onFailure(throwable);
+ }
+ });
+ }
+
+ @Override
+ public void refresh(final ApiCallBack callBack) {
+ ApiUtils.getApi()
+ .userIdentity(ProfileSpUtils.getInstance()
+ .getUserProfie()
+ .getIm_identifier())
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Consumer>() {
+ @Override
+ public void accept(@NonNull ResponseBean treeUserEntityResponseBean) throws Exception {
+ callBack.onResponse(treeUserEntityResponseBean);
+ }
+ }, new Consumer() {
+ @Override
+ public void accept(@NonNull Throwable throwable) throws Exception {
+ callBack.onFailure(throwable);
+ }
+ });
+ }
+
+ @Override
+ public void save(TreeUserEntity entity) {
+ ProfileSpUtils.getInstance().saveProfile(entity);
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/administrator/seven/main/Fragment/mvp/presenter/MyPresenterImpl.java b/app/src/main/java/com/example/administrator/seven/main/Fragment/mvp/presenter/MyPresenterImpl.java
new file mode 100644
index 0000000..5598dd9
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/Fragment/mvp/presenter/MyPresenterImpl.java
@@ -0,0 +1,95 @@
+package com.example.administrator.seven.main.Fragment.mvp.presenter;
+
+import com.example.administrator.seven.main.Fragment.mvp.contract.MyContract;
+import com.example.administrator.seven.main.Fragment.mvp.model.MyModelImpl;
+import com.example.administrator.seven.main.entity.mine.TreeUserEntity;
+import com.example.administrator.seven.network.ApiCallBack;
+import com.example.administrator.seven.wxapi.WXEntryActivity;
+import com.hannesdorfmann.mosby3.mvp.MvpBasePresenter;
+import com.tencent.mm.opensdk.modelmsg.SendAuth;
+import com.tencent.mm.opensdk.openapi.IWXAPI;
+
+/**
+ * Created by Administrator on 2017/05/25
+ */
+
+public class MyPresenterImpl extends MvpBasePresenter implements MyContract.Presenter {
+
+ private MyModelImpl mModel;
+
+ public MyPresenterImpl() {
+ mModel = new MyModelImpl();
+ }
+
+ @Override
+ public void weChatBind() {
+ if (getView() == null) {
+ return;
+ }
+
+ boolean is_bind_wechat = mModel.isBindWeChat();
+
+ if (is_bind_wechat) {
+ getView().toast("已绑定微信账号");
+ return;
+ }
+
+ IWXAPI wxApi = getView().getWxApi();
+ wxApi.registerApp(WXEntryActivity.WEIXIN_APP_ID);
+
+ if (wxApi != null && wxApi.isWXAppInstalled()) {
+ SendAuth.Req req = new SendAuth.Req();
+ req.scope = "snsapi_userinfo";
+ req.state = "wechat_sdk_demo_test_neng";
+ getView().showProgressDialog("");
+ wxApi.sendReq(req);
+ } else {
+ getView().toast("未安装微信");
+ }
+
+ mModel.weChatBind(new ApiCallBack() {
+ @Override
+ protected void onSuccess(TreeUserEntity responseData, String message) {
+ if (getView() == null) {
+ return;
+ }
+ getView().dismissProgressDialog();
+ getView().refreshData();
+ }
+
+ @Override
+ protected void onFailure(String error) {
+ if (getView() == null) {
+ return;
+ }
+ getView().dismissProgressDialog();
+ getView().toast(error);
+ }
+ });
+ }
+
+ @Override
+ public void refresh() {
+
+ mModel.refresh(new ApiCallBack() {
+ @Override
+ protected void onSuccess(TreeUserEntity responseData, String message) {
+ if (getView() == null) {
+ return;
+ }
+ getView().dismissProgressDialog();
+ mModel.save(responseData);
+ getView().refreshData();
+ }
+
+ @Override
+ protected void onFailure(String error) {
+ if (getView() == null) {
+ return;
+ }
+ getView().dismissProgressDialog();
+ getView().toast(error);
+ }
+ });
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/administrator/seven/main/activity/LoginActivity.java b/app/src/main/java/com/example/administrator/seven/main/activity/LoginActivity.java
new file mode 100644
index 0000000..a10682b
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/activity/LoginActivity.java
@@ -0,0 +1,160 @@
+package com.example.administrator.seven.main.activity;
+
+import android.os.Bundle;
+import android.os.CountDownTimer;
+import android.support.annotation.NonNull;
+import android.text.Html;
+import android.view.View;
+import android.widget.Button;
+import android.widget.CheckBox;
+import android.widget.EditText;
+import android.widget.TextView;
+
+import com.example.administrator.seven.R;
+import com.example.administrator.seven.base.BaseTreeActivity;
+import com.example.administrator.seven.main.activity.mvp.contract.LoginContract;
+import com.example.administrator.seven.main.activity.mvp.presenterImpl.LoginPresenterImpl;
+
+/**
+ * LoginActivity
+ * 类描述:登录页面
+ * 2018/10/30 5:06
+ * mengjuan
+ */
+
+public class LoginActivity extends BaseTreeActivity implements LoginContract.View,View.OnClickListener {
+
+ private EditText mEtcode;
+ private Button mBtnsendcode;
+ private CheckBox mCheckBox;
+ private TextView loginTv;//登录
+ /**
+ * 请输入手机号
+ */
+ private EditText mEtPhone;
+ /**
+ * 请输入验证码
+ */
+ private EditText mEtCode;
+ /**
+ * 获取验证码
+ */
+ private TextView mTvGetCode;
+ /**
+ * 验证码错误请重新输入!
+ */
+ private TextView mTvCodeError;
+ /**
+ * 登录
+ */
+ private Button mBtnLogin;
+
+ private CountDownTimer timer = new CountDownTimer(60000, 1000) {
+ @Override
+ public void onTick(long millisUntilFinished) {
+ mTvGetCode.setText(Html.fromHtml("" + (millisUntilFinished / 1000) + "秒后可重发"));
+ }
+
+ @Override
+ public void onFinish() {
+ mTvGetCode.setClickable(true);
+ mTvGetCode.setText("发送验证码");
+ }
+ };
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ // TODO:OnCreate Method has been created, run FindViewById again to generate code
+ setContentView(R.layout.activity_login);
+ initView();
+ }
+
+ @Override
+ public int getLayoutId() {
+ return R.layout.activity_login;
+ }
+
+ @Override
+ protected void initView() {
+ mEtPhone = (EditText) findViewById(R.id.et_phone);
+ mEtCode = (EditText) findViewById(R.id.et_code);
+ mTvGetCode = (TextView) findViewById(R.id.tv_get_code);
+ mTvGetCode.setOnClickListener(this);
+ mTvCodeError = (TextView) findViewById(R.id.tv_code_error);
+ mBtnLogin = (Button) findViewById(R.id.btn_login);
+ mBtnLogin.setOnClickListener(this);
+ }
+
+ @Override
+ protected void initData() {
+ getPresenter().initData();
+ }
+
+ @Override
+ protected void initEvent() {
+
+ }
+
+
+ @Override
+ public void onClick(View view) {
+ switch (view.getId()) {
+ case R.id.btn_login://登录
+ getPresenter().login();
+ break;
+ case R.id.tv_get_code://获取验证码
+ //发送验证码
+ getPresenter().sendCode();
+ break;
+ }
+ }
+
+
+ @NonNull
+ @Override
+ public LoginPresenterImpl createPresenter() {
+ return new LoginPresenterImpl();
+ }
+
+ @Override
+ public String getMobile() {
+ return mEtPhone.getText().toString();
+ }
+
+ @Override
+ public void setMobile(String mobile) {
+
+ }
+
+ @Override
+ public String getPassWord() {
+ return null;
+ }
+
+ @Override
+ public void setPassWord(String passWord) {
+
+ }
+
+ @Override
+ public String getCode() {
+ return mEtCode.getText().toString();
+ }
+
+ @Override
+ public boolean isSavePassword() {
+ return false;
+ }
+
+ @Override
+ public void setCodeBtnEnable(boolean enable) {
+
+ }
+
+ @Override
+ public void setCodeBtnText(String msg) {
+
+ }
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/activity/LoginPasswordActivity.java b/app/src/main/java/com/example/administrator/seven/main/activity/LoginPasswordActivity.java
new file mode 100644
index 0000000..6e27744
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/activity/LoginPasswordActivity.java
@@ -0,0 +1,103 @@
+package com.example.administrator.seven.main.activity;
+
+import android.os.CountDownTimer;
+import android.support.annotation.NonNull;
+import android.text.Html;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.TextView;
+
+import com.example.administrator.seven.R;
+import com.example.administrator.seven.base.BaseTreeActivity;
+import com.example.administrator.seven.main.activity.mvp.contract.LoginPasswordContract;
+import com.example.administrator.seven.main.activity.mvp.presenterImpl.LoginPasswordPresenterImpl;
+
+/**
+ * LoginActivity
+ * 类描述:登录页面
+ */
+
+public class LoginPasswordActivity extends BaseTreeActivity implements LoginPasswordContract.View,View.OnClickListener {
+
+ private EditText et_pass;
+ private EditText mEtPhone;
+ private TextView mTvGetCode;
+ private Button mBtnLogin;
+
+ private CountDownTimer timer = new CountDownTimer(60000, 1000) {
+ @Override
+ public void onTick(long millisUntilFinished) {
+ mTvGetCode.setText(Html.fromHtml("" + (millisUntilFinished / 1000) + "秒后可重发"));
+ }
+
+ @Override
+ public void onFinish() {
+ mTvGetCode.setClickable(true);
+ mTvGetCode.setText("发送验证码");
+ }
+ };
+
+ @Override
+ public int getLayoutId() {
+ return R.layout.activity_password_login;
+ }
+
+ @Override
+ protected void initView() {
+ mEtPhone = (EditText) findViewById(R.id.et_phone);
+ et_pass = (EditText) findViewById(R.id.et_pass);
+ mBtnLogin = (Button) findViewById(R.id.btn_login);
+ mBtnLogin.setOnClickListener(this);
+ }
+
+ @Override
+ protected void initData() {
+ getPresenter().initData();
+ }
+
+ @Override
+ protected void initEvent() {
+
+ }
+
+ @Override
+ public void onClick(View view) {
+ switch (view.getId()) {
+ case R.id.btn_login://登录
+ getPresenter().login();
+ break;
+ }
+ }
+
+ @Override
+ public String getMobile() {
+ return mEtPhone.getText().toString();
+ }
+
+ @Override
+ public void setMobile(String mobile) {
+ mEtPhone.setText(mobile);
+ }
+
+ @Override
+ public String getPassWord() {
+ return et_pass.getText().toString();
+ }
+
+ @Override
+ public void setPassWord(String passWord) {
+ et_pass.setText(passWord);
+ }
+
+ @Override
+ public boolean isSavePassword() {
+ return false;
+ }
+
+ @NonNull
+ @Override
+ public LoginPasswordPresenterImpl createPresenter() {
+ return new LoginPasswordPresenterImpl();
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/activity/Main2Activity.java b/app/src/main/java/com/example/administrator/seven/main/activity/Main2Activity.java
new file mode 100644
index 0000000..9791f85
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/activity/Main2Activity.java
@@ -0,0 +1,20 @@
+package com.example.administrator.seven.main.activity;
+
+import android.os.Bundle;
+
+import com.example.administrator.seven.R;
+import com.example.administrator.seven.base.BaseActivity;
+import com.example.administrator.seven.main.Fragment.XikeInfoFragment;
+import com.example.administrator.seven.main.entity.Savaselect;
+
+public class Main2Activity extends BaseActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main2);
+
+ getSupportFragmentManager().beginTransaction().replace(R.id.container,new XikeInfoFragment(new Savaselect())).commit();
+ }
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/activity/MainActivity.java b/app/src/main/java/com/example/administrator/seven/main/activity/MainActivity.java
new file mode 100644
index 0000000..a8da85f
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/activity/MainActivity.java
@@ -0,0 +1,199 @@
+package com.example.administrator.seven.main.activity;
+
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentTransaction;
+import android.view.View;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.example.administrator.seven.R;
+import com.example.administrator.seven.base.BaseActivity;
+import com.example.administrator.seven.main.Fragment.HomeFragment;
+import com.example.administrator.seven.main.Fragment.MapFragment;
+import com.example.administrator.seven.main.Fragment.MyFragment;
+import com.example.administrator.seven.main.Fragment.SendFragment;
+
+public class MainActivity extends BaseActivity implements View.OnClickListener{
+
+ /**
+ * 首页
+ */
+ private TextView mTvHome;
+ private TextView mTvHomeImg;
+ private RelativeLayout mRlHome;
+ /**
+ * 地图
+ */
+ private TextView mTvMap;
+ private RelativeLayout mRlMap;
+ private TextView mTvMapImg;
+ /**
+ * 配送
+ */
+ private TextView mTvSend;
+ private RelativeLayout mRlSend;
+ private TextView mTvSendImg;
+ /**
+ * 我的
+ */
+ private TextView mTvMy;
+ private RelativeLayout mRlMine;
+ private TextView mTvMineImg;
+
+ private FragmentManager fm;
+
+ private HomeFragment mHomeFragment;
+ private SendFragment mSendFragment;
+ private MapFragment mMapFragment;
+ private MyFragment mMineFragment;
+ private Fragment mCurrent;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+ initView();
+ initFragment();
+ }
+
+ private void initView() {
+ mTvHomeImg = (TextView) findViewById(R.id.tv_home_img);
+ mTvHome = (TextView) findViewById(R.id.tv_home);
+ mRlHome = (RelativeLayout) findViewById(R.id.rl_home);
+ mRlHome.setOnClickListener(this);
+ mTvMapImg = (TextView) findViewById(R.id.tv_map_img);
+ mTvMap = (TextView) findViewById(R.id.tv_map);
+ mRlMap = (RelativeLayout) findViewById(R.id.rl_map);
+ mRlMap.setOnClickListener(this);
+ mTvSendImg = (TextView) findViewById(R.id.tv_send_img);
+ mTvSend = (TextView) findViewById(R.id.tv_send);
+ mRlSend = (RelativeLayout) findViewById(R.id.rl_send);
+ mRlSend.setOnClickListener(this);
+ mTvMineImg = (TextView) findViewById(R.id.tv_mine_img);
+ mTvMy = (TextView) findViewById(R.id.tv_mine);
+ mRlMine = (RelativeLayout) findViewById(R.id.rl_mine);
+ mRlMine.setOnClickListener(this);
+
+ mTvHomeImg.setBackgroundResource(R.mipmap.icon_task);
+ mTvHome.setTextColor(getResources().getColor(R.color.colortheme));
+ }
+
+ private void initFragment(){
+ mHomeFragment = new HomeFragment();
+ fm = getSupportFragmentManager();
+ fm.beginTransaction();
+ FragmentTransaction fragmentTransaction = fm.beginTransaction();
+ fragmentTransaction.replace(R.id.content_layout, mHomeFragment);
+ fragmentTransaction.commit();
+ }
+
+ @Override
+ public void onClick(View v) {
+ FragmentTransaction fragmentTransaction = fm.beginTransaction();
+ switch (v.getId()) {
+ case R.id.rl_home:
+ mTvHomeImg.setBackgroundResource(R.mipmap.icon_task);
+ mTvSendImg.setBackgroundResource(R.mipmap.icon_zhibohui);
+ mTvMapImg.setBackgroundResource(R.mipmap.icon_kehuhui);
+ mTvMineImg.setBackgroundResource(R.mipmap.icon_wodehui);
+
+ mTvHome.setTextColor(getResources().getColor(R.color.colortheme));
+ mTvSend.setTextColor(getResources().getColor(R.color.colorhui));
+ mTvMap.setTextColor(getResources().getColor(R.color.colorhui));
+ mTvMy.setTextColor(getResources().getColor(R.color.colorhui));
+
+
+ hideFragment(mSendFragment, fragmentTransaction);
+ hideFragment(mMapFragment, fragmentTransaction);
+ hideFragment(mMineFragment, fragmentTransaction);
+ if (mHomeFragment == null) {
+ fragmentTransaction.add(R.id.content_layout, mHomeFragment);
+ } else {
+ mCurrent = mHomeFragment;
+ fragmentTransaction.show(mHomeFragment);
+ }
+ break;
+ case R.id.rl_send:
+ mTvHomeImg.setBackgroundResource(R.mipmap.icon_task_hui);
+ mTvSendImg.setBackgroundResource(R.mipmap.icon_zhibo);
+ mTvMapImg.setBackgroundResource(R.mipmap.icon_kehuhui);
+ mTvMineImg.setBackgroundResource(R.mipmap.icon_wodehui);
+
+ mTvHome.setTextColor(getResources().getColor(R.color.colorhui));
+ mTvSend.setTextColor(getResources().getColor(R.color.colortheme));
+ mTvMap.setTextColor(getResources().getColor(R.color.colorhui));
+ mTvMy.setTextColor(getResources().getColor(R.color.colorhui));
+
+
+ hideFragment(mHomeFragment, fragmentTransaction);
+ hideFragment(mMapFragment, fragmentTransaction);
+ hideFragment(mMineFragment, fragmentTransaction);
+ if (mSendFragment == null) {
+ mSendFragment = new SendFragment();
+ fragmentTransaction.add(R.id.content_layout, mSendFragment);
+ } else {
+ mCurrent = mSendFragment;
+ fragmentTransaction.show(mSendFragment);
+ }
+ break;
+ case R.id.rl_map:
+ mTvHomeImg.setBackgroundResource(R.mipmap.icon_task_hui);
+ mTvSendImg.setBackgroundResource(R.mipmap.icon_zhibohui);
+ mTvMapImg.setBackgroundResource(R.mipmap.icon_kehu);
+ mTvMineImg.setBackgroundResource(R.mipmap.icon_wodehui);
+
+ mTvHome.setTextColor(getResources().getColor(R.color.colorhui));
+ mTvSend.setTextColor(getResources().getColor(R.color.colorhui));
+ mTvMap.setTextColor(getResources().getColor(R.color.colortheme));
+ mTvMy.setTextColor(getResources().getColor(R.color.colorhui));
+
+
+ hideFragment(mHomeFragment, fragmentTransaction);
+ hideFragment(mSendFragment, fragmentTransaction);
+ hideFragment(mMineFragment, fragmentTransaction);
+ if (mMapFragment == null) {
+ mMapFragment = new MapFragment();
+ fragmentTransaction.add(R.id.content_layout, mMapFragment);
+ } else {
+ mCurrent = mMapFragment;
+ fragmentTransaction.show(mMapFragment);
+ }
+ break;
+ case R.id.rl_mine:
+ mTvHomeImg.setBackgroundResource(R.mipmap.icon_task_hui);
+ mTvSendImg.setBackgroundResource(R.mipmap.icon_zhibohui);
+ mTvMapImg.setBackgroundResource(R.mipmap.icon_kehuhui);
+ mTvMineImg.setBackgroundResource(R.mipmap.icon_wode);
+
+ mTvHome.setTextColor(getResources().getColor(R.color.colorhui));
+ mTvSend.setTextColor(getResources().getColor(R.color.colorhui));
+ mTvMap.setTextColor(getResources().getColor(R.color.colorhui));
+ mTvMy.setTextColor(getResources().getColor(R.color.colortheme));
+
+
+ hideFragment(mHomeFragment, fragmentTransaction);
+ hideFragment(mSendFragment, fragmentTransaction);
+ hideFragment(mMapFragment, fragmentTransaction);
+ if (mMineFragment == null) {
+ mMineFragment = new MyFragment();
+ fragmentTransaction.add(R.id.content_layout, mMineFragment);
+ } else {
+ mCurrent = mMineFragment;
+ fragmentTransaction.show(mMineFragment);
+ }
+ break;
+ default:
+ break;
+
+ }
+ fragmentTransaction.commit();
+ }
+
+ private void hideFragment(Fragment fragment, FragmentTransaction ft) {
+ if (fragment != null) {
+ ft.hide(fragment);
+ }
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/activity/SplashActivity.java b/app/src/main/java/com/example/administrator/seven/main/activity/SplashActivity.java
new file mode 100644
index 0000000..1ad5af2
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/activity/SplashActivity.java
@@ -0,0 +1,53 @@
+package com.example.administrator.seven.main.activity;
+
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.support.annotation.Nullable;
+import android.view.KeyEvent;
+import android.view.WindowManager;
+import com.example.administrator.seven.base.BaseActivity;
+import com.example.administrator.seven.utils.checkVersionsUtils.ProfileSpUtils;
+
+/**
+ * SplashActivity
+ * 类描述:启动页
+ * 2018-9-30 9:17
+ * author:mengjuan
+ */
+
+public class SplashActivity extends BaseActivity {
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ //将屏幕设置为全屏
+ getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ handler.sendEmptyMessageDelayed(0, 2000);
+ }
+
+ private Handler handler = new Handler() {
+ @Override
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case 0:
+ startActivity();
+ break;
+ }
+ }
+ };
+
+ private void startActivity(){
+ if (ProfileSpUtils.getInstance().isLogin()) {
+ startActivity(MainActivity.class);
+ } else {
+ startActivity(LoginPasswordActivity.class);
+ }
+ finish();
+ }
+
+ @Override
+ public boolean onKeyDown(int keyCode, KeyEvent event) {
+ //禁用返回
+ return true;
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/activity/mine/InboundHistoryActivity.java b/app/src/main/java/com/example/administrator/seven/main/activity/mine/InboundHistoryActivity.java
new file mode 100644
index 0000000..01c158a
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/activity/mine/InboundHistoryActivity.java
@@ -0,0 +1,79 @@
+package com.example.administrator.seven.main.activity.mine;
+
+import android.os.Bundle;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.example.administrator.seven.R;
+import com.example.administrator.seven.base.BaseActivity;
+import com.example.administrator.seven.main.adapter.mine.InboundHistoryAdapter;
+import com.example.administrator.seven.main.entity.mine.InboundHistoryResBean;
+import com.example.administrator.seven.utils.SpaceItemDecoration;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class InboundHistoryActivity extends BaseActivity {
+
+ private ImageView mIvBack;
+ private TextView mTvTitle;
+ private ImageView mIvSearch;
+ private RecyclerView mRcyInboundHistory;
+ private List inboundHistoryList = new ArrayList<>();
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_mine_inbound_history);
+ initView();
+ initData();
+ initRecyleview();
+ }
+
+ private void initView() {
+ mIvBack = (ImageView) findViewById(R.id.iv_back);
+ mTvTitle = (TextView) findViewById(R.id.tv_title);
+ mIvSearch = (ImageView)findViewById(R.id.iv_search);
+ mRcyInboundHistory = (RecyclerView) findViewById(R.id.rcy_inbound_history);
+ }
+
+ private void initData(){
+ mIvBack.setVisibility(View.VISIBLE);
+ mTvTitle.setVisibility(View.VISIBLE);
+ mTvTitle.setText(R.string.inbound_history);
+ mIvSearch.setVisibility(View.VISIBLE);
+ //
+ InboundHistoryResBean messageNoticeResBean = new InboundHistoryResBean();
+ InboundHistoryResBean messageNoticeResBean1 = new InboundHistoryResBean();
+ InboundHistoryResBean messageNoticeResBean2 = new InboundHistoryResBean();
+ InboundHistoryResBean messageNoticeResBean3 = new InboundHistoryResBean();
+ InboundHistoryResBean messageNoticeResBean4 = new InboundHistoryResBean();
+ inboundHistoryList.add(messageNoticeResBean);
+ inboundHistoryList.add(messageNoticeResBean1);
+ inboundHistoryList.add(messageNoticeResBean2);
+ inboundHistoryList.add(messageNoticeResBean3);
+ inboundHistoryList.add(messageNoticeResBean4);
+
+ }
+ private void initRecyleview(){
+ InboundHistoryAdapter messageNoticeAdapter = new InboundHistoryAdapter(this,inboundHistoryList);
+ LinearLayoutManager manager = new LinearLayoutManager(this);
+ mRcyInboundHistory.addItemDecoration(new SpaceItemDecoration(0, 20));
+ mRcyInboundHistory.setLayoutManager(manager);
+ mRcyInboundHistory.setAdapter(messageNoticeAdapter);
+ messageNoticeAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
+ @Override
+ public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
+// mBean = messgeList.get(position);
+// MineMessagePresenterImpl.OneReadMessgae(messgeList.get(position).getId());
+
+ }
+ });
+ }
+
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/activity/mine/MessageNoticeActivity.java b/app/src/main/java/com/example/administrator/seven/main/activity/mine/MessageNoticeActivity.java
new file mode 100644
index 0000000..373423d
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/activity/mine/MessageNoticeActivity.java
@@ -0,0 +1,125 @@
+package com.example.administrator.seven.main.activity.mine;
+
+import android.os.Bundle;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.example.administrator.seven.R;
+import com.example.administrator.seven.base.BaseActivity;
+import com.example.administrator.seven.main.adapter.mine.MessageNoticeAdapter;
+import com.example.administrator.seven.main.entity.mine.MessageNoticeResBean;
+import com.example.administrator.seven.utils.SpaceItemDecoration;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class MessageNoticeActivity extends BaseActivity implements View.OnClickListener{
+
+
+ private ImageView mIvBack;
+ private TextView mTvTitle;
+ /**
+ * 今天
+ */
+ private TextView mTvToday;
+ /**
+ * 昨天
+ */
+ private TextView mTvYesterday;
+ /**
+ * 历史
+ */
+ private TextView mTvHistory;
+ private RecyclerView mRcyContent;
+
+ private List messageNoticeResBeanList = new ArrayList<>();
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_mine_messgae_notice);
+ initView();
+ initData();
+ initRecyleview();
+ }
+
+ private void initView() {
+ mIvBack = (ImageView) findViewById(R.id.iv_back);
+ mTvTitle = (TextView) findViewById(R.id.tv_title);
+ mTvToday = (TextView) findViewById(R.id.tv_today);
+ mTvToday.setOnClickListener(this);
+ mTvYesterday = (TextView) findViewById(R.id.tv_yesterday);
+ mTvYesterday.setOnClickListener(this);
+ mTvHistory = (TextView) findViewById(R.id.tv_history);
+ mTvHistory.setOnClickListener(this);
+ mRcyContent = (RecyclerView) findViewById(R.id.rcy_content);
+ }
+
+ private void initData(){
+ mIvBack.setVisibility(View.VISIBLE);
+ mTvTitle.setVisibility(View.VISIBLE);
+ mTvTitle.setText(R.string.message_notice);
+ //
+ MessageNoticeResBean messageNoticeResBean = new MessageNoticeResBean();
+ MessageNoticeResBean messageNoticeResBean1 = new MessageNoticeResBean();
+ MessageNoticeResBean messageNoticeResBean2 = new MessageNoticeResBean();
+ MessageNoticeResBean messageNoticeResBean3 = new MessageNoticeResBean();
+ MessageNoticeResBean messageNoticeResBean4 = new MessageNoticeResBean();
+ messageNoticeResBeanList.add(messageNoticeResBean);
+ messageNoticeResBeanList.add(messageNoticeResBean1);
+ messageNoticeResBeanList.add(messageNoticeResBean2);
+ messageNoticeResBeanList.add(messageNoticeResBean3);
+ messageNoticeResBeanList.add(messageNoticeResBean4);
+
+ }
+
+ private void initRecyleview(){
+ MessageNoticeAdapter messageNoticeAdapter = new MessageNoticeAdapter(this,messageNoticeResBeanList);
+ LinearLayoutManager manager = new LinearLayoutManager(this);
+ mRcyContent.addItemDecoration(new SpaceItemDecoration(0, 20));
+ mRcyContent.setLayoutManager(manager);
+ mRcyContent.setAdapter(messageNoticeAdapter);
+ messageNoticeAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
+ @Override
+ public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
+// mBean = messgeList.get(position);
+// MineMessagePresenterImpl.OneReadMessgae(messgeList.get(position).getId());
+
+ }
+ });
+ }
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()){
+ case R.id.tv_today://今天
+ mTvToday.setBackgroundResource(R.color.color_ffc107);
+ mTvToday.setTextColor(getResources().getColor(R.color.colorBlack));
+ mTvYesterday.setBackgroundResource(R.color.color_303030);
+ mTvYesterday.setTextColor(getResources().getColor(R.color.colorWhite));
+ mTvHistory.setBackgroundResource(R.color.color_303030);
+ mTvHistory.setTextColor(getResources().getColor(R.color.colorWhite));
+ break;
+ case R.id.tv_yesterday://昨天
+ mTvToday.setBackgroundResource(R.color.color_303030);
+ mTvToday.setTextColor(getResources().getColor(R.color.colorWhite));
+ mTvYesterday.setBackgroundResource(R.color.color_ffc107);
+ mTvYesterday.setTextColor(getResources().getColor(R.color.colorBlack));
+ mTvHistory.setBackgroundResource(R.color.color_303030);
+ mTvHistory.setTextColor(getResources().getColor(R.color.colorWhite));
+ break;
+ case R.id.tv_history://历史
+ mTvToday.setBackgroundResource(R.color.color_303030);
+ mTvToday.setTextColor(getResources().getColor(R.color.colorWhite));
+ mTvYesterday.setBackgroundResource(R.color.color_303030);
+ mTvYesterday.setTextColor(getResources().getColor(R.color.colorWhite));
+ mTvHistory.setBackgroundResource(R.color.color_ffc107);
+ mTvHistory.setTextColor(getResources().getColor(R.color.colorBlack));
+ break;
+ }
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/activity/mine/OutboundHistoryActivity.java b/app/src/main/java/com/example/administrator/seven/main/activity/mine/OutboundHistoryActivity.java
new file mode 100644
index 0000000..3610850
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/activity/mine/OutboundHistoryActivity.java
@@ -0,0 +1,79 @@
+package com.example.administrator.seven.main.activity.mine;
+
+import android.os.Bundle;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.example.administrator.seven.R;
+import com.example.administrator.seven.base.BaseActivity;
+import com.example.administrator.seven.main.adapter.mine.OutboundHistoryAdapter;
+import com.example.administrator.seven.main.entity.mine.OutboundHistoryResBean;
+import com.example.administrator.seven.utils.SpaceItemDecoration;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class OutboundHistoryActivity extends BaseActivity {
+
+ private ImageView mIvBack;
+ private TextView mTvTitle;
+ private ImageView mIvSearch;
+ private RecyclerView mRcyOutboundHistory;
+ private List outboundHistoryList = new ArrayList<>();
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_mine_outbound_history);
+ initView();
+ initData();
+ initRecyleview();
+ }
+
+ private void initView() {
+ mIvBack = (ImageView) findViewById(R.id.iv_back);
+ mTvTitle = (TextView) findViewById(R.id.tv_title);
+ mIvSearch = (ImageView)findViewById(R.id.iv_search);
+ mRcyOutboundHistory = (RecyclerView) findViewById(R.id.rcy_outbound_history);
+ }
+
+ private void initData(){
+ mIvBack.setVisibility(View.VISIBLE);
+ mTvTitle.setVisibility(View.VISIBLE);
+ mTvTitle.setText(R.string.outbound_history);
+ mIvSearch.setVisibility(View.VISIBLE);
+ //
+ OutboundHistoryResBean messageNoticeResBean = new OutboundHistoryResBean();
+ OutboundHistoryResBean messageNoticeResBean1 = new OutboundHistoryResBean();
+ OutboundHistoryResBean messageNoticeResBean2 = new OutboundHistoryResBean();
+ OutboundHistoryResBean messageNoticeResBean3 = new OutboundHistoryResBean();
+ OutboundHistoryResBean messageNoticeResBean4 = new OutboundHistoryResBean();
+ outboundHistoryList.add(messageNoticeResBean);
+ outboundHistoryList.add(messageNoticeResBean1);
+ outboundHistoryList.add(messageNoticeResBean2);
+ outboundHistoryList.add(messageNoticeResBean3);
+ outboundHistoryList.add(messageNoticeResBean4);
+
+ }
+ private void initRecyleview(){
+ OutboundHistoryAdapter messageNoticeAdapter = new OutboundHistoryAdapter(this,outboundHistoryList);
+ LinearLayoutManager manager = new LinearLayoutManager(this);
+ mRcyOutboundHistory.addItemDecoration(new SpaceItemDecoration(0, 20));
+ mRcyOutboundHistory.setLayoutManager(manager);
+ mRcyOutboundHistory.setAdapter(messageNoticeAdapter);
+ messageNoticeAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
+ @Override
+ public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
+// mBean = messgeList.get(position);
+// MineMessagePresenterImpl.OneReadMessgae(messgeList.get(position).getId());
+
+ }
+ });
+ }
+
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/activity/mvp/contract/LoginContract.java b/app/src/main/java/com/example/administrator/seven/main/activity/mvp/contract/LoginContract.java
new file mode 100644
index 0000000..6baa51d
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/activity/mvp/contract/LoginContract.java
@@ -0,0 +1,132 @@
+package com.example.administrator.seven.main.activity.mvp.contract;
+
+
+import com.example.administrator.seven.base.BaseTreeView;
+import com.example.administrator.seven.main.entity.LoginBean;
+import com.example.administrator.seven.network.ApiCallBack;
+
+/**
+ * LoginContract
+ * (๑• . •๑)
+ * 类描述:
+ * Created by LeiXiaoXing on 2017/4/19 15:53
+ */
+
+public class LoginContract {
+ public interface View extends BaseTreeView {
+
+ /**
+ * 获取手机号
+ *
+ * @return 手机号
+ */
+ String getMobile();
+
+ /**
+ * 设置手机号码
+ *
+ * @param mobile 手机号
+ */
+ void setMobile(String mobile);
+
+ /**
+ * 获取密码
+ *
+ * @return 密码
+ */
+ String getPassWord();
+
+ /**
+ * 设置密码
+ *
+ * @param passWord 登陆密码
+ */
+ void setPassWord(String passWord);
+
+ /**
+ * 获取验证码
+ *
+ * @return 验证码
+ */
+ String getCode();
+
+ /**
+ * 是否记住密码
+ *
+ * @return
+ */
+ boolean isSavePassword();
+
+
+
+
+ /**
+ * 设置发送验证码按钮是否可用
+ *
+ * @param enable 是否可用
+ */
+ void setCodeBtnEnable(boolean enable);
+
+ /**
+ * 设置发送验证码按钮文本内容
+ *
+ * @param msg
+ */
+ void setCodeBtnText(String msg);
+
+
+
+
+ }
+
+ public interface Presenter {
+
+ /**
+ * 初始化数据
+ */
+ void initData();
+
+ /**
+ * 登录
+ */
+ void login();
+
+ /**
+ * 发送验证码
+ */
+ void sendCode();
+
+
+ }
+
+ public interface Model {
+
+ /**
+ * 获取保存的手机号码
+ *
+ * @return 手机号码
+ */
+ String getSaveMobli();
+
+ /**
+ * 获取保存的密码
+ *
+ * @return 密码
+ */
+ String getSavePassword();
+
+ /**
+ * 登录
+ *
+ * @param mobile 手机号
+ * @param code 验证码
+ * @param callBack 回调函数
+ */
+ void login(String mobile, String code, ApiCallBack callBack);
+
+
+ void sendCode(String mobile, ApiCallBack callBack);
+ }
+
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/administrator/seven/main/activity/mvp/contract/LoginPasswordContract.java b/app/src/main/java/com/example/administrator/seven/main/activity/mvp/contract/LoginPasswordContract.java
new file mode 100644
index 0000000..c2e1297
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/activity/mvp/contract/LoginPasswordContract.java
@@ -0,0 +1,121 @@
+package com.example.administrator.seven.main.activity.mvp.contract;
+
+
+import com.example.administrator.seven.base.BaseTreeView;
+import com.example.administrator.seven.main.entity.LoginBean;
+import com.example.administrator.seven.network.ApiCallBack;
+
+/**
+ * LoginContract
+ * (๑• . •๑)
+ * 类描述:
+ * Created by LeiXiaoXing on 2017/4/19 15:53
+ */
+
+public class LoginPasswordContract {
+ public interface View extends BaseTreeView {
+
+ /**
+ * 获取手机号
+ *
+ * @return 手机号
+ */
+ String getMobile();
+
+ /**
+ * 设置手机号码
+ *
+ * @param mobile 手机号
+ */
+ void setMobile(String mobile);
+
+ /**
+ * 获取密码
+ *
+ * @return 密码
+ */
+ String getPassWord();
+
+ /**
+ * 设置密码
+ *
+ * @param passWord 登陆密码
+ */
+ void setPassWord(String passWord);
+
+ /**
+ * 是否记住密码
+ *
+ * @return
+ */
+ boolean isSavePassword();
+
+ }
+
+ public interface Presenter {
+
+ /**
+ * 初始化数据
+ */
+ void initData();
+
+ /**
+ * 登录
+ */
+ void login();
+
+
+ }
+
+ public interface Model {
+
+ /**
+ * 获取保存的手机号码
+ *
+ * @return 手机号码
+ */
+ String getSaveMobli();
+
+ /**
+ * 设置登录状态
+ *
+ * @param isLogin
+ */
+ void setLogin(boolean isLogin);
+
+
+ /**
+ * 保存用户数据
+ *
+ * @param data 用户数据
+ */
+ void saveUserInfo(LoginBean data);
+
+
+ /**
+ * 记住密码
+ *
+ * @param mobile 手机号
+ * @param password 密码
+ */
+ void savePassword(String mobile, String password);
+
+ /**
+ * 获取保存的密码
+ *
+ * @return 密码
+ */
+ String getSavePassword();
+
+ /**
+ * 登录
+ *
+ * @param mobile 手机号
+ * @param code 验证码
+ * @param callBack 回调函数
+ */
+ void login(String mobile, String code, ApiCallBack callBack);
+
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/administrator/seven/main/activity/mvp/model/LoginModelImpl.java b/app/src/main/java/com/example/administrator/seven/main/activity/mvp/model/LoginModelImpl.java
new file mode 100644
index 0000000..bc35fb0
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/activity/mvp/model/LoginModelImpl.java
@@ -0,0 +1,75 @@
+package com.example.administrator.seven.main.activity.mvp.model;
+
+
+import com.example.administrator.seven.main.activity.mvp.contract.LoginContract;
+import com.example.administrator.seven.main.entity.LoginBean;
+import com.example.administrator.seven.network.ApiCallBack;
+import com.example.administrator.seven.network.http.ApiUtils;
+import com.example.administrator.seven.network.http.ResponseBean;
+import com.example.administrator.seven.utils.checkVersionsUtils.ProfileSpUtils;
+
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.annotations.NonNull;
+import io.reactivex.functions.Consumer;
+import io.reactivex.schedulers.Schedulers;
+
+/**
+ * Created by Administrator on 2017/04/19
+ */
+
+public class LoginModelImpl implements LoginContract.Model {
+
+
+
+ @Override
+ public String getSaveMobli() {
+ return ProfileSpUtils.getInstance().getKeyMobile();
+ }
+
+ @Override
+ public String getSavePassword() {
+ return ProfileSpUtils.getInstance().getKeyPassword();
+ }
+
+ @Override
+ public void login(String mobile, String code, final ApiCallBack callBack) {
+
+ ApiUtils.getApi()
+ .login(mobile, code)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Consumer() {
+ @Override
+ public void accept(@NonNull ResponseBean responseBean) throws Exception {
+ callBack.onResponse(responseBean);
+ }
+ }, new Consumer() {
+ @Override
+ public void accept(@NonNull Throwable throwable) throws Exception {
+ callBack.onFailure(throwable);
+ }
+ });
+ }
+
+
+ @Override
+ public void sendCode( String mobile, final ApiCallBack callBack) {
+ ApiUtils.getApi()
+ .pin(mobile)
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribeOn(Schedulers.io())
+ .subscribe(new Consumer() {
+ @Override
+ public void accept(@NonNull ResponseBean responseBean) throws Exception {
+ callBack.onResponse(responseBean);
+ }
+ }, new Consumer() {
+ @Override
+ public void accept(@NonNull Throwable throwable) throws Exception {
+ callBack.onFailure(throwable);
+ }
+ });
+ }
+
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/administrator/seven/main/activity/mvp/model/LoginPasswordModelImpl.java b/app/src/main/java/com/example/administrator/seven/main/activity/mvp/model/LoginPasswordModelImpl.java
new file mode 100644
index 0000000..1934cb2
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/activity/mvp/model/LoginPasswordModelImpl.java
@@ -0,0 +1,69 @@
+package com.example.administrator.seven.main.activity.mvp.model;
+
+
+import com.example.administrator.seven.main.activity.mvp.contract.LoginPasswordContract;
+import com.example.administrator.seven.main.entity.LoginBean;
+import com.example.administrator.seven.network.ApiCallBack;
+import com.example.administrator.seven.network.http.ApiUtils;
+import com.example.administrator.seven.network.http.ResponseBean;
+import com.example.administrator.seven.utils.checkVersionsUtils.ProfileSpUtils;
+
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.annotations.NonNull;
+import io.reactivex.functions.Consumer;
+import io.reactivex.schedulers.Schedulers;
+
+/**
+ * Created by Administrator on 2017/04/19
+ */
+
+public class LoginPasswordModelImpl implements LoginPasswordContract.Model {
+
+
+
+ @Override
+ public String getSaveMobli() {
+ return ProfileSpUtils.getInstance().getKeyMobile();
+ }
+
+ @Override
+ public void setLogin(boolean isLogin) {
+ ProfileSpUtils.getInstance().saveLoginSatus(isLogin);
+ }
+
+ @Override
+ public void saveUserInfo(LoginBean data) {
+
+ }
+
+ @Override
+ public void savePassword(String mobile, String password) {
+
+ }
+
+ @Override
+ public String getSavePassword() {
+ return ProfileSpUtils.getInstance().getKeyPassword();
+ }
+
+ @Override
+ public void login(String mobile, String pwd, final ApiCallBack callBack) {
+
+ ApiUtils.getApi()
+ .loginpwd(mobile, pwd)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Consumer() {
+ @Override
+ public void accept(@NonNull ResponseBean responseBean) throws Exception {
+ callBack.onResponse(responseBean);
+ }
+ }, new Consumer() {
+ @Override
+ public void accept(@NonNull Throwable throwable) throws Exception {
+ callBack.onFailure(throwable);
+ }
+ });
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/administrator/seven/main/activity/mvp/presenterImpl/LoginPasswordPresenterImpl.java b/app/src/main/java/com/example/administrator/seven/main/activity/mvp/presenterImpl/LoginPasswordPresenterImpl.java
new file mode 100644
index 0000000..9d40028
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/activity/mvp/presenterImpl/LoginPasswordPresenterImpl.java
@@ -0,0 +1,84 @@
+package com.example.administrator.seven.main.activity.mvp.presenterImpl;
+
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.example.administrator.seven.main.activity.MainActivity;
+import com.example.administrator.seven.main.activity.mvp.contract.LoginPasswordContract;
+import com.example.administrator.seven.main.activity.mvp.model.LoginPasswordModelImpl;
+import com.example.administrator.seven.main.entity.LoginBean;
+import com.example.administrator.seven.network.ApiCallBack;
+import com.hannesdorfmann.mosby3.mvp.MvpBasePresenter;
+import com.hannesdorfmann.mosby3.mvp.MvpPresenter;
+
+/**
+ * Time: 2020/8/10
+ * Author: jianbo
+ * Description:
+ */
+public class LoginPasswordPresenterImpl extends MvpBasePresenter implements LoginPasswordContract.Presenter, MvpPresenter {
+
+ private LoginPasswordModelImpl mModel;
+
+ public LoginPasswordPresenterImpl() {
+ mModel = new LoginPasswordModelImpl();
+ }
+
+ @Override
+ public void initData() {
+ if (getView() == null) {
+ return;
+ }
+ String saveMobli = mModel.getSaveMobli();
+ if (!TextUtils.isEmpty(saveMobli)) {
+ getView().setMobile(saveMobli);
+ }
+ String savePassword = mModel.getSavePassword();
+ if (!TextUtils.isEmpty(savePassword)) {
+ getView().setPassWord(savePassword);
+ }
+ }
+
+ @Override
+ public void login() {
+ if (getView() == null) {
+ return;
+ }
+ //验证手机号码规范
+ final String mobile = getView().getMobile();
+ if (TextUtils.isEmpty(mobile) || mobile.length() != 11) {
+ getView().toast("请输入正确的手机号码");
+ return;
+ }
+ //验证密码规范
+ final String passWord = getView().getPassWord();
+
+ getView().showProgressDialog("登录中...");
+ mModel.login(mobile, passWord, new ApiCallBack() {
+ @Override
+ protected void onSuccess(LoginBean data, String message) {
+ if (getView() == null) {
+ return;
+ }
+ getView().dismissProgressDialog();
+ mModel.setLogin(true);
+ mModel.saveUserInfo(data);
+ Log.d("LoginPresenterImpl: ", data.toString());
+ //记住密码
+// boolean savePassword = getView().isSavePassword();
+// mModel.savePassword(savePassword ? mobile : null, savePassword ? passWord : null);
+ getView().startActivity(MainActivity.class);
+ }
+
+ @Override
+ protected void onFailure(String error) {
+ if (getView() == null) {
+ return;
+ }
+ getView().dismissProgressDialog();
+ getView().toast(error);
+ }
+ });
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/administrator/seven/main/activity/mvp/presenterImpl/LoginPresenterImpl.java b/app/src/main/java/com/example/administrator/seven/main/activity/mvp/presenterImpl/LoginPresenterImpl.java
new file mode 100644
index 0000000..de853c1
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/activity/mvp/presenterImpl/LoginPresenterImpl.java
@@ -0,0 +1,188 @@
+package com.example.administrator.seven.main.activity.mvp.presenterImpl;
+
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.example.administrator.seven.main.activity.MainActivity;
+import com.example.administrator.seven.main.activity.mvp.contract.LoginContract;
+import com.example.administrator.seven.main.activity.mvp.model.LoginModelImpl;
+import com.example.administrator.seven.main.entity.LoginBean;
+import com.example.administrator.seven.network.ApiCallBack;
+import com.hannesdorfmann.mosby3.mvp.MvpBasePresenter;
+
+import java.util.concurrent.TimeUnit;
+
+import io.reactivex.Observable;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.annotations.NonNull;
+import io.reactivex.disposables.Disposable;
+import io.reactivex.functions.Consumer;
+import io.reactivex.functions.Function;
+import io.reactivex.observers.DefaultObserver;
+
+/**
+ * Created by Administrator on 2017/04/19
+ */
+
+public class LoginPresenterImpl extends MvpBasePresenter implements LoginContract.Presenter{
+
+ private LoginModelImpl mModel;
+
+ public LoginPresenterImpl() {
+ mModel = new LoginModelImpl();
+ }
+
+ @Override
+ public void initData() {
+ if (getView() == null) {
+ return;
+ }
+ String saveMobli = mModel.getSaveMobli();
+ if (!TextUtils.isEmpty(saveMobli)) {
+ getView().setMobile(saveMobli);
+ }
+ String savePassword = mModel.getSavePassword();
+ if (!TextUtils.isEmpty(savePassword)) {
+ getView().setPassWord(savePassword);
+ }
+ }
+
+ @Override
+ public void login() {
+ getView().startActivity(MainActivity.class);
+ if (getView() == null) {
+ return;
+ }
+ //验证手机号码规范
+ final String mobile = getView().getMobile();
+ if (TextUtils.isEmpty(mobile) || mobile.length() != 11) {
+ getView().toast("请输入正确的手机号码");
+ return;
+ }
+ //验证密码规范
+ final String passWord = getView().getPassWord();
+
+ //验证验证规范
+ String code = getView().getCode();
+ if (TextUtils.isEmpty(code) || code.length() != 6) {
+ getView().toast("请输入正确的验证码");
+ return;
+ }
+ getView().showProgressDialog("登录中...");
+ mModel.login(mobile, code, new ApiCallBack() {
+ @Override
+ protected void onSuccess(LoginBean data, String message) {
+ if (getView() == null) {
+ return;
+ }
+ //getView().dismissProgressDialog();
+// mModel.setLogin(true);
+// mModel.saveUserInfo(data);
+ Log.d("LoginPresenterImpl: ", data.toString());
+
+ //记住密码
+// boolean savePassword = getView().isSavePassword();
+// mModel.savePassword(savePassword ? mobile : null, savePassword ? passWord : null);
+
+ //toLive(ProfileSpUtils.getInstance().getUserProfie().getDefault_live_id());
+ getView().startActivity(MainActivity.class);
+ }
+
+ @Override
+ protected void onFailure(String error) {
+ if (getView() == null) {
+ return;
+ }
+ getView().dismissProgressDialog();
+ getView().toast(error);
+ }
+ });
+ }
+
+
+ @Override
+ public void sendCode() {
+ //验证手机号码规范
+ if (getView() == null) {
+ return;
+ }
+ String mobile = getView().getMobile();
+ if (TextUtils.isEmpty(mobile) || mobile.length() != 11) {
+ getView().toast("请输入正确的手机号码");
+ return;
+ }
+ getView().showProgressDialog("验证码发送中");
+ mModel.sendCode(mobile, new ApiCallBack() {
+ @Override
+ protected void onSuccess(Object responseData, String message) {
+ if (getView() == null) {
+ return;
+ }
+ getView().dismissProgressDialog();
+ getView().toast("发送成功,请注意查收");
+ //发送成功开始倒计时
+ final int count = 60;
+ Observable.interval(0, 1, TimeUnit.SECONDS)//设置0秒延迟,每隔1秒发送一次数据
+ .take(count + 1)//循环61次
+ .map(new Function() {
+ @Override
+ public Long apply(@NonNull Long aLong) throws Exception {
+ return count - aLong;
+ }
+ })
+ .observeOn(AndroidSchedulers.mainThread())
+ .doOnSubscribe(new Consumer() {
+ @Override
+ public void accept(@NonNull Disposable disposable) throws Exception {
+ if (getView() == null) {
+ return;
+ }
+ //在发送数据时按钮不可点击
+ getView().setCodeBtnEnable(false);
+ }
+ })
+ .subscribe(new DefaultObserver() {
+ @Override
+ public void onNext(Long aLong) {
+ if (getView() == null) {
+ return;
+ }
+ getView().setCodeBtnText("(" + aLong + "s)获取验证码");
+ }
+
+ @Override
+ public void onError(Throwable e) {
+ if (getView() == null) {
+ return;
+ }
+ //异常,停止计时
+ getView().setCodeBtnEnable(true);
+ getView().setCodeBtnText("获取验证码");
+ getView().toast(e.getMessage());
+ }
+
+ @Override
+ public void onComplete() {
+ if (getView() == null) {
+ return;
+ }
+ getView().setCodeBtnEnable(true);
+ getView().setCodeBtnText("获取验证码");
+
+ }
+ });
+ }
+
+ @Override
+ protected void onFailure(String error) {
+ if (getView() != null) {
+ getView().dismissProgressDialog();
+ getView().toast(error);
+ }
+ }
+ });
+
+ }
+
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/administrator/seven/main/adapter/GuideViewPagerAdapter.java b/app/src/main/java/com/example/administrator/seven/main/adapter/GuideViewPagerAdapter.java
new file mode 100644
index 0000000..f121e59
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/adapter/GuideViewPagerAdapter.java
@@ -0,0 +1,44 @@
+package com.example.administrator.seven.main.adapter;
+
+import android.content.Context;
+import android.support.v4.view.PagerAdapter;
+import android.view.View;
+import android.view.ViewGroup;
+import java.util.List;
+
+/**
+ * 引导页适配器
+ */
+public class GuideViewPagerAdapter extends PagerAdapter {
+
+ private List views;
+ private Context context;
+
+ public GuideViewPagerAdapter(List views, Context context){
+ this.views = views;
+ this.context = context;
+
+ }
+
+
+ @Override
+ public void destroyItem(ViewGroup container, int position, Object object) {
+ container.removeView(views.get(position));
+ }
+
+ @Override
+ public Object instantiateItem(ViewGroup container, int position) {
+ container.addView(views.get(position));
+ return views.get(position);
+ }
+
+ @Override
+ public int getCount() {
+ return views.size();
+ }
+
+ @Override
+ public boolean isViewFromObject(View view, Object object) {
+ return (view == object);
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/adapter/mine/InboundHistoryAdapter.java b/app/src/main/java/com/example/administrator/seven/main/adapter/mine/InboundHistoryAdapter.java
new file mode 100644
index 0000000..baedf05
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/adapter/mine/InboundHistoryAdapter.java
@@ -0,0 +1,29 @@
+package com.example.administrator.seven.main.adapter.mine;
+
+import android.content.Context;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.BaseViewHolder;
+import com.example.administrator.seven.R;
+import com.example.administrator.seven.main.entity.mine.InboundHistoryResBean;
+import com.example.administrator.seven.main.entity.mine.MessageNoticeResBean;
+
+import java.util.List;
+
+public class InboundHistoryAdapter extends BaseQuickAdapter {
+
+ private Context context;
+ private List list;
+
+ public InboundHistoryAdapter(Context context, List list) {
+ super(R.layout.mine_inbound_history_item, list);
+ this.context = context;
+ this.list = list;
+ }
+
+
+ @Override
+ protected void convert(BaseViewHolder helper, InboundHistoryResBean item) {
+
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/adapter/mine/MessageNoticeAdapter.java b/app/src/main/java/com/example/administrator/seven/main/adapter/mine/MessageNoticeAdapter.java
new file mode 100644
index 0000000..b6ad513
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/adapter/mine/MessageNoticeAdapter.java
@@ -0,0 +1,28 @@
+package com.example.administrator.seven.main.adapter.mine;
+
+import android.content.Context;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.BaseViewHolder;
+import com.example.administrator.seven.R;
+import com.example.administrator.seven.main.entity.mine.MessageNoticeResBean;
+
+import java.util.List;
+
+public class MessageNoticeAdapter extends BaseQuickAdapter {
+
+ private Context context;
+ private List list;
+
+ public MessageNoticeAdapter(Context context, List list) {
+ super(R.layout.mine_messgae_item, list);
+ this.context = context;
+ this.list = list;
+ }
+
+
+ @Override
+ protected void convert(BaseViewHolder helper, MessageNoticeResBean item) {
+
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/adapter/mine/OutboundHistoryAdapter.java b/app/src/main/java/com/example/administrator/seven/main/adapter/mine/OutboundHistoryAdapter.java
new file mode 100644
index 0000000..39f2cd2
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/adapter/mine/OutboundHistoryAdapter.java
@@ -0,0 +1,28 @@
+package com.example.administrator.seven.main.adapter.mine;
+
+import android.content.Context;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.BaseViewHolder;
+import com.example.administrator.seven.R;
+import com.example.administrator.seven.main.entity.mine.OutboundHistoryResBean;
+
+import java.util.List;
+
+public class OutboundHistoryAdapter extends BaseQuickAdapter {
+
+ private Context context;
+ private List list;
+
+ public OutboundHistoryAdapter(Context context, List list) {
+ super(R.layout.mine_outbound_history_item, list);
+ this.context = context;
+ this.list = list;
+ }
+
+
+ @Override
+ protected void convert(BaseViewHolder helper, OutboundHistoryResBean item) {
+
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/adapter/mine/XikeInfoAdapter.java b/app/src/main/java/com/example/administrator/seven/main/adapter/mine/XikeInfoAdapter.java
new file mode 100644
index 0000000..7b700c9
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/adapter/mine/XikeInfoAdapter.java
@@ -0,0 +1,29 @@
+package com.example.administrator.seven.main.adapter.mine;
+
+import android.content.Context;
+import android.widget.TextView;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.BaseViewHolder;
+import com.example.administrator.seven.R;
+import com.example.administrator.seven.main.entity.XikeInfoBean;
+import com.example.administrator.seven.utils.WidgetTools;
+
+import java.util.List;
+
+
+public class XikeInfoAdapter extends BaseQuickAdapter {
+ Context mcontext;
+ public XikeInfoAdapter(Context context, List list) {
+ super(R.layout.xikeinfo_item, list);
+ this.mcontext = context;
+ }
+ @Override
+ protected void convert(final BaseViewHolder helper, final XikeInfoBean.ResultBean.DataBean item) {
+ WidgetTools.setTextfive((TextView) helper.getView(R.id.xike_tv_01), "", item.getXike_remark());
+ WidgetTools.setTextfive((TextView) helper.getView(R.id.xike_tv_02), "", item.getTime());
+ WidgetTools.setTextfive((TextView) helper.getView(R.id.xike_tv_03), "", item.getXike_num());
+
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/administrator/seven/main/entity/LoginBean.java b/app/src/main/java/com/example/administrator/seven/main/entity/LoginBean.java
new file mode 100644
index 0000000..6cfa755
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/entity/LoginBean.java
@@ -0,0 +1,127 @@
+package com.example.administrator.seven.main.entity;
+
+import java.io.Serializable;
+
+public class LoginBean implements Serializable {
+
+
+ /**
+ * msg : 登陆成功
+ * data : {"store_id":"1","industry_name":"家具","user_head":"","user_type":"2","user_name":"admin","phone_number":"18629010714","uuid":"1","status":"0"}
+ * success : 0
+ */
+
+ private String msg;
+ private DataBean data;
+ private int success;
+
+ public String getMsg() {
+ return msg;
+ }
+
+ public void setMsg(String msg) {
+ this.msg = msg;
+ }
+
+ public DataBean getData() {
+ return data;
+ }
+
+ public void setData(DataBean data) {
+ this.data = data;
+ }
+
+ public int getSuccess() {
+ return success;
+ }
+
+ public void setSuccess(int success) {
+ this.success = success;
+ }
+
+ public static class DataBean {
+ /**
+ * store_id : 1
+ * industry_name : 家具
+ * user_head :
+ * user_type : 2
+ * user_name : admin
+ * phone_number : 18629010714
+ * uuid : 1
+ * status : 0
+ */
+
+ private String store_id;
+ private String industry_name;
+ private String user_head;
+ private String user_type;
+ private String user_name;
+ private String phone_number;
+ private String uuid;
+ private String status;
+
+ public String getStore_id() {
+ return store_id;
+ }
+
+ public void setStore_id(String store_id) {
+ this.store_id = store_id;
+ }
+
+ public String getIndustry_name() {
+ return industry_name;
+ }
+
+ public void setIndustry_name(String industry_name) {
+ this.industry_name = industry_name;
+ }
+
+ public String getUser_head() {
+ return user_head;
+ }
+
+ public void setUser_head(String user_head) {
+ this.user_head = user_head;
+ }
+
+ public String getUser_type() {
+ return user_type;
+ }
+
+ public void setUser_type(String user_type) {
+ this.user_type = user_type;
+ }
+
+ public String getUser_name() {
+ return user_name;
+ }
+
+ public void setUser_name(String user_name) {
+ this.user_name = user_name;
+ }
+
+ public String getPhone_number() {
+ return phone_number;
+ }
+
+ public void setPhone_number(String phone_number) {
+ this.phone_number = phone_number;
+ }
+
+ public String getUuid() {
+ return uuid;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ public String getStatus() {
+ return status;
+ }
+
+ public void setStatus(String status) {
+ this.status = status;
+ }
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/entity/Savaselect.java b/app/src/main/java/com/example/administrator/seven/main/entity/Savaselect.java
new file mode 100644
index 0000000..4f3ce63
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/entity/Savaselect.java
@@ -0,0 +1,23 @@
+package com.example.administrator.seven.main.entity;
+
+public class Savaselect {
+ private String serchuid="";
+
+ public String getSerchuid() {
+ return serchuid;
+ }
+
+ public void setSerchuid(String serchuid) {
+ this.serchuid = serchuid;
+ }
+
+ public String getUser_name() {
+ return user_name;
+ }
+
+ public void setUser_name(String user_name) {
+ this.user_name = user_name;
+ }
+
+ private String user_name="";
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/entity/SendSmsBean.java b/app/src/main/java/com/example/administrator/seven/main/entity/SendSmsBean.java
new file mode 100644
index 0000000..67f945c
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/entity/SendSmsBean.java
@@ -0,0 +1,55 @@
+package com.example.administrator.seven.main.entity;
+
+public class SendSmsBean {
+
+
+ /**
+ * result : {"msg":"发送成功","success":0}
+ * status : 0
+ */
+
+ private ResultBean result;
+ private int status;
+
+ public ResultBean getResult() {
+ return result;
+ }
+
+ public void setResult(ResultBean result) {
+ this.result = result;
+ }
+
+ public int getStatus() {
+ return status;
+ }
+
+ public void setStatus(int status) {
+ this.status = status;
+ }
+
+ public static class ResultBean {
+ /**
+ * msg : 发送成功
+ * success : 0
+ */
+
+ private String msg;
+ private int success;
+
+ public String getMsg() {
+ return msg;
+ }
+
+ public void setMsg(String msg) {
+ this.msg = msg;
+ }
+
+ public int getSuccess() {
+ return success;
+ }
+
+ public void setSuccess(int success) {
+ this.success = success;
+ }
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/entity/UserInfoModel.java b/app/src/main/java/com/example/administrator/seven/main/entity/UserInfoModel.java
new file mode 100644
index 0000000..c814d1a
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/entity/UserInfoModel.java
@@ -0,0 +1,179 @@
+package com.example.administrator.seven.main.entity;
+
+import com.example.administrator.seven.base.BaseBean;
+
+/**
+ * 项目名:NewJiaJieSong
+ * 包名:com.example.administrator.newjiajiesong
+ * 创建者:任剑波
+ * 创建时间:2018/8/28 11:14
+ * 描述:TODO
+ */
+public class UserInfoModel extends BaseBean {
+
+ /**
+ * status : 0
+ * result : {"success":0,"msg":"登陆成功","data":{"store_name":"红星美凯龙太白店荣麟京瓷","uuid":"0a10f99c198b3cb659a62a765c83c648","phone_number":"13201532560","pet_name":"胡坚强","user_birthday":"","user_head":"http://www.fenghoo.cn/templates/fenghu/img/photo_icon.png","type":"1"}}
+ */
+
+ private int status;
+ private ResultBean result;
+
+ public int getStatus() {
+ return status;
+ }
+
+ public void setStatus(int status) {
+ this.status = status;
+ }
+
+ public ResultBean getResult() {
+ return result;
+ }
+
+ public void setResult(ResultBean result) {
+ this.result = result;
+ }
+
+ @Override
+ public String toString() {
+ return "LoginRestwo{" +
+ "status=" + status +
+ ", result=" + result +
+ '}';
+ }
+
+ public static class ResultBean{
+ /**
+ * success : 0
+ * msg : 登陆成功
+ * data : {"store_name":"红星美凯龙太白店荣麟京瓷","uuid":"0a10f99c198b3cb659a62a765c83c648","phone_number":"13201532560","pet_name":"胡坚强","user_birthday":"","user_head":"http://www.fenghoo.cn/templates/fenghu/img/photo_icon.png","type":"1"}
+ */
+
+ private int success;
+ private String msg;
+ private DataBean data;
+
+ public int getSuccess() {
+ return success;
+ }
+
+ public void setSuccess(int success) {
+ this.success = success;
+ }
+
+ public String getMsg() {
+ return msg;
+ }
+
+ public void setMsg(String msg) {
+ this.msg = msg;
+ }
+
+ public DataBean getData() {
+ return data;
+ }
+
+ public void setData(DataBean data) {
+ this.data = data;
+ }
+
+ @Override
+ public String toString() {
+ return "ResultBean{" +
+ "success=" + success +
+ ", msg='" + msg + '\'' +
+ ", data=" + data +
+ '}';
+ }
+
+ public static class DataBean{
+ /**
+ * store_name : 红星美凯龙太白店荣麟京瓷
+ * uuid : 0a10f99c198b3cb659a62a765c83c648
+ * phone_number : 13201532560
+ * pet_name : 胡坚强
+ * user_birthday :
+ * user_head : http://www.fenghoo.cn/templates/fenghu/img/photo_icon.png
+ * type : 1
+ */
+
+ private String store_name;
+ private String uuid;
+ private String phone_number;
+ private String pet_name;
+ private String user_birthday;
+ private String user_head;
+ private String type;
+
+ public String getStore_name() {
+ return store_name;
+ }
+
+ public void setStore_name(String store_name) {
+ this.store_name = store_name;
+ }
+
+ public String getUuid() {
+ return uuid;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ public String getPhone_number() {
+ return phone_number;
+ }
+
+ public void setPhone_number(String phone_number) {
+ this.phone_number = phone_number;
+ }
+
+ public String getPet_name() {
+ return pet_name;
+ }
+
+ public void setPet_name(String pet_name) {
+ this.pet_name = pet_name;
+ }
+
+ public String getUser_birthday() {
+ return user_birthday;
+ }
+
+ public void setUser_birthday(String user_birthday) {
+ this.user_birthday = user_birthday;
+ }
+
+ public String getUser_head() {
+ return user_head;
+ }
+
+ public void setUser_head(String user_head) {
+ this.user_head = user_head;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ @Override
+ public String toString() {
+ return "DataBean{" +
+ "store_name='" + store_name + '\'' +
+ ", uuid='" + uuid + '\'' +
+ ", phone_number='" + phone_number + '\'' +
+ ", pet_name='" + pet_name + '\'' +
+ ", user_birthday='" + user_birthday + '\'' +
+ ", user_head='" + user_head + '\'' +
+ ", type='" + type + '\'' +
+ '}';
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/entity/XikeInfoBean.java b/app/src/main/java/com/example/administrator/seven/main/entity/XikeInfoBean.java
new file mode 100644
index 0000000..038912c
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/entity/XikeInfoBean.java
@@ -0,0 +1,115 @@
+package com.example.administrator.seven.main.entity;
+
+import com.example.administrator.seven.test.BaseModel;
+
+import java.util.List;
+
+public class XikeInfoBean extends BaseModel {
+
+
+ /**
+ * result : {"msg":"获取成功","xike":"98","data":[{"xike_remark":"待完善客户超时","time":"2020-07-17 13:34:33","xike_num":"-1"}],"success":0}
+ * status : 0
+ */
+
+ private ResultBean result;
+ private int status;
+
+ public ResultBean getResult() {
+ return result;
+ }
+
+ public void setResult(ResultBean result) {
+ this.result = result;
+ }
+
+ public int getStatus() {
+ return status;
+ }
+
+ public void setStatus(int status) {
+ this.status = status;
+ }
+
+ public static class ResultBean {
+ /**
+ * msg : 获取成功
+ * xike : 98
+ * data : [{"xike_remark":"待完善客户超时","time":"2020-07-17 13:34:33","xike_num":"-1"}]
+ * success : 0
+ */
+
+ private String msg;
+ private String xike;
+ private int success;
+ private List data;
+
+ public String getMsg() {
+ return msg;
+ }
+
+ public void setMsg(String msg) {
+ this.msg = msg;
+ }
+
+ public String getXike() {
+ return xike;
+ }
+
+ public void setXike(String xike) {
+ this.xike = xike;
+ }
+
+ public int getSuccess() {
+ return success;
+ }
+
+ public void setSuccess(int success) {
+ this.success = success;
+ }
+
+ public List getData() {
+ return data;
+ }
+
+ public void setData(List data) {
+ this.data = data;
+ }
+
+ public static class DataBean {
+ /**
+ * xike_remark : 待完善客户超时
+ * time : 2020-07-17 13:34:33
+ * xike_num : -1
+ */
+
+ private String xike_remark;
+ private String time;
+ private String xike_num;
+
+ public String getXike_remark() {
+ return xike_remark;
+ }
+
+ public void setXike_remark(String xike_remark) {
+ this.xike_remark = xike_remark;
+ }
+
+ public String getTime() {
+ return time;
+ }
+
+ public void setTime(String time) {
+ this.time = time;
+ }
+
+ public String getXike_num() {
+ return xike_num;
+ }
+
+ public void setXike_num(String xike_num) {
+ this.xike_num = xike_num;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/entity/mine/InboundHistoryResBean.java b/app/src/main/java/com/example/administrator/seven/main/entity/mine/InboundHistoryResBean.java
new file mode 100644
index 0000000..389ab37
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/entity/mine/InboundHistoryResBean.java
@@ -0,0 +1,4 @@
+package com.example.administrator.seven.main.entity.mine;
+
+public class InboundHistoryResBean {
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/entity/mine/MessageNoticeResBean.java b/app/src/main/java/com/example/administrator/seven/main/entity/mine/MessageNoticeResBean.java
new file mode 100644
index 0000000..4a15541
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/entity/mine/MessageNoticeResBean.java
@@ -0,0 +1,7 @@
+package com.example.administrator.seven.main.entity.mine;
+
+
+public class MessageNoticeResBean {
+
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/entity/mine/OutboundHistoryResBean.java b/app/src/main/java/com/example/administrator/seven/main/entity/mine/OutboundHistoryResBean.java
new file mode 100644
index 0000000..5af1e7e
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/entity/mine/OutboundHistoryResBean.java
@@ -0,0 +1,4 @@
+package com.example.administrator.seven.main.entity.mine;
+
+public class OutboundHistoryResBean {
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/entity/mine/TreeUserEntity.java b/app/src/main/java/com/example/administrator/seven/main/entity/mine/TreeUserEntity.java
new file mode 100644
index 0000000..a0cb61c
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/entity/mine/TreeUserEntity.java
@@ -0,0 +1,581 @@
+package com.example.administrator.seven.main.entity.mine;
+
+import java.io.Serializable;
+
+/**
+ * TreeUserEntity
+ * (๑• . •๑)
+ * 类描述:用户资料实体类
+ * Created by LeiXiaoXing on 2017/4/11 10:56
+ */
+
+public class TreeUserEntity implements Serializable {
+
+ /**
+ * id : eb4a5d4f6ded79f8b0bb09c895fc13fd
+ * student_id : 10006496
+ * im_identifier : a87ff679a2f3e71d9181a67b7542122c
+ * im_user_sig : eJxljktPg0AUhff8CsLa6DwYHu4UpIEWBWlrZEPGebSTKox02rQ1-ncVm0ji3X7fOed*WLZtO-NZdUkZ63atacxRC8e*th3gXPxBrRVvqGlwz-9BcdCqFw2VRvQDhIQQBMDYUVy0Rkl1NmjgS*n5IUUSCx-yEAaQev6LT1wEEWKj5JZvmmH*t9r97kWB5*KxolYDzO*eo7SMimn0UDOeJCYuwXK*fs0EOLiQcB1PbhmNVpNFUIcKpnWZrm*m7318Yo*brDqJqqSFyxa5vzvm912VoT3OxbJ4ujI6mcliNGnUmzg-FBLoeRiQEd2Lfqu6dhAQgAQiDH7OsT6tLzv6YyM_
+ * sig_expire_time : 1510718305
+ * member_id : 4
+ * recommend_id : 0
+ * nick_name : 雷小星
+ * squad_id : 19
+ * class_manage_id : 1
+ * class_last_time : 1497758305
+ * position : 酱油
+ * job : 打酱油
+ * telephone : 10086
+ * province_id : 44
+ * province : 广东
+ * city_id : 4401
+ * city : 广州
+ * district_id : 440101
+ * district : 市辖区
+ * address : 高德置地
+ * openid : 0
+ * unionid : 0
+ * wx_info_id : 0
+ * integral : 860
+ * recommendnum : 0
+ * role : 1
+ *
+ * is_study : 0
+ * add_time : 1495166305
+ * phone : 13628310040
+ * is_bind_wechat : 1
+ * im_group_id : ab97e028a5aae8d637cb1a70569638d7
+ * number : 549111
+ * class_name : 婆婆破
+ * membernum : 49
+ * intro : 口号啥的不重要吗好尴尬
+ * mission : 使命啥的也不重要吗?
+ * slogan : 重要的是看班级口号牛不牛吗SOHO哦寂寞
+ * thumb : 20170526/5927c0931333d.jpg
+ * wx_nick_name :
+ * vip_level : 0
+ * vip_last_time
+ * uid : 4
+ * origin_img : /Uploads/app_user_head_img/origin/20170519/591e6de477393.png
+ * Home_Page_Size : /Uploads/app_user_head_img/Home_Page_Size/20170519/591e6de477393.png
+ * info_page_size : /Uploads/app_user_head_img/info_page_size/20170519/591e6de477393.png
+ * user_list_size : /Uploads/app_user_head_img/user_list_size/20170519/591e6de477393.png
+ * user_token : eb4a5d4f6ded79f8b0bb09c895fc13fd
+ * squad_im_group_id : 9b8a64a9b23d58fb021e0b2d20405b09
+ * squad_name : 神
+ */
+
+ private String id;
+ private String student_id;
+ private String im_identifier;
+ private String im_user_sig;
+ private String sig_expire_time;
+ private String member_id;
+ private String recommend_id;
+ private String nick_name;
+ private String squad_id;
+ private String class_manage_id;
+ private String class_last_time;
+ private String position;
+ private String job;
+ private String telephone;
+ private String province_id;
+ private String province;
+ private String city_id;
+ private String city;
+ private String district_id;
+ private String district;
+ private String address;
+ private String openid;
+ private String unionid;
+ private String wx_info_id;
+ private String integral;
+ private String recommendnum;
+ private String role;
+ private String role_1;
+ private String role_2;
+ private String role_3;
+ private String role_4;
+ private String role_5;
+ private String is_study;
+ private String add_time;
+ private String phone;
+ private String is_bind_wechat;
+ private String im_group_id;
+ private String number;
+ private String class_name;
+ private String membernum;
+ private String intro;
+ private String mission;
+ private String slogan;
+ private String thumb;
+ private String wx_nick_name;
+ private String vip_level;
+ private String vip_last_time;
+ private String uid;
+ private String origin_img;
+ private String Home_Page_Size;
+ private String info_page_size;
+ private String user_list_size;
+ private String user_token;
+ private String squad_im_group_id;
+ private String squad_name;
+ private String vip_log_id;
+ private String default_live_id;
+
+ public String getDefault_live_id() {
+ return default_live_id;
+ }
+
+ public void setDefault_live_id(String default_live_id) {
+ this.default_live_id = default_live_id;
+ }
+
+ public String getVip_log_id() {
+ return vip_log_id;
+ }
+
+ public void setVip_log_id(String vip_log_id) {
+ this.vip_log_id = vip_log_id;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getStudent_id() {
+ return student_id;
+ }
+
+ public void setStudent_id(String student_id) {
+ this.student_id = student_id;
+ }
+
+ public String getIm_identifier() {
+ return im_identifier;
+ }
+
+ public void setIm_identifier(String im_identifier) {
+ this.im_identifier = im_identifier;
+ }
+
+ public String getIm_user_sig() {
+ return im_user_sig;
+ }
+
+ public void setIm_user_sig(String im_user_sig) {
+ this.im_user_sig = im_user_sig;
+ }
+
+ public String getSig_expire_time() {
+ return sig_expire_time;
+ }
+
+ public void setSig_expire_time(String sig_expire_time) {
+ this.sig_expire_time = sig_expire_time;
+ }
+
+ public String getMember_id() {
+ return member_id;
+ }
+
+ public void setMember_id(String member_id) {
+ this.member_id = member_id;
+ }
+
+ public String getRecommend_id() {
+ return recommend_id;
+ }
+
+ public void setRecommend_id(String recommend_id) {
+ this.recommend_id = recommend_id;
+ }
+
+ public String getNick_name() {
+ return nick_name;
+ }
+
+ public void setNick_name(String nick_name) {
+ this.nick_name = nick_name;
+ }
+
+ public String getSquad_id() {
+ return squad_id;
+ }
+
+ public void setSquad_id(String squad_id) {
+ this.squad_id = squad_id;
+ }
+
+ public String getClass_manage_id() {
+ return class_manage_id;
+ }
+
+ public void setClass_manage_id(String class_manage_id) {
+ this.class_manage_id = class_manage_id;
+ }
+
+ public String getClass_last_time() {
+ return class_last_time;
+ }
+
+ public void setClass_last_time(String class_last_time) {
+ this.class_last_time = class_last_time;
+ }
+
+ public String getPosition() {
+ return position;
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+ public String getJob() {
+ return job;
+ }
+
+ public void setJob(String job) {
+ this.job = job;
+ }
+
+ public String getTelephone() {
+ return telephone;
+ }
+
+ public void setTelephone(String telephone) {
+ this.telephone = telephone;
+ }
+
+ public String getProvince_id() {
+ return province_id;
+ }
+
+ public void setProvince_id(String province_id) {
+ this.province_id = province_id;
+ }
+
+ public String getProvince() {
+ return province;
+ }
+
+ public void setProvince(String province) {
+ this.province = province;
+ }
+
+ public String getCity_id() {
+ return city_id;
+ }
+
+ public void setCity_id(String city_id) {
+ this.city_id = city_id;
+ }
+
+ public String getCity() {
+ return city;
+ }
+
+ public void setCity(String city) {
+ this.city = city;
+ }
+
+ public String getDistrict_id() {
+ return district_id;
+ }
+
+ public void setDistrict_id(String district_id) {
+ this.district_id = district_id;
+ }
+
+ public String getDistrict() {
+ return district;
+ }
+
+ public void setDistrict(String district) {
+ this.district = district;
+ }
+
+ public String getAddress() {
+ return address;
+ }
+
+ public void setAddress(String address) {
+ this.address = address;
+ }
+
+ public String getOpenid() {
+ return openid;
+ }
+
+ public void setOpenid(String openid) {
+ this.openid = openid;
+ }
+
+ public String getUnionid() {
+ return unionid;
+ }
+
+ public void setUnionid(String unionid) {
+ this.unionid = unionid;
+ }
+
+ public String getWx_info_id() {
+ return wx_info_id;
+ }
+
+ public void setWx_info_id(String wx_info_id) {
+ this.wx_info_id = wx_info_id;
+ }
+
+ public String getIntegral() {
+ return integral;
+ }
+
+ public void setIntegral(String integral) {
+ this.integral = integral;
+ }
+
+ public String getRecommendnum() {
+ return recommendnum;
+ }
+
+ public void setRecommendnum(String recommendnum) {
+ this.recommendnum = recommendnum;
+ }
+
+ public String getRole() {
+ return role;
+ }
+
+ public void setRole(String role) {
+ this.role = role;
+ }
+
+ public String getRole_1() {
+ return role_1;
+ }
+
+ public void setRole_1(String role_1) {
+ this.role_1 = role_1;
+ }
+
+ public String getRole_2() {
+ return role_2;
+ }
+
+ public void setRole_2(String role_2) {
+ this.role_2 = role_2;
+ }
+
+ public String getRole_3() {
+ return role_3;
+ }
+
+ public void setRole_3(String role_3) {
+ this.role_3 = role_3;
+ }
+
+ public String getRole_4() {
+ return role_4;
+ }
+
+ public void setRole_4(String role_4) {
+ this.role_4 = role_4;
+ }
+
+ public String getRole_5() {
+ return role_5;
+ }
+
+ public void setRole_5(String role_5) {
+ this.role_5 = role_5;
+ }
+
+ public String getIs_study() {
+ return is_study;
+ }
+
+ public void setIs_study(String is_study) {
+ this.is_study = is_study;
+ }
+
+ public String getAdd_time() {
+ return add_time;
+ }
+
+ public void setAdd_time(String add_time) {
+ this.add_time = add_time;
+ }
+
+ public String getPhone() {
+ return phone;
+ }
+
+ public void setPhone(String phone) {
+ this.phone = phone;
+ }
+
+ public String getIs_bind_wechat() {
+ return is_bind_wechat;
+ }
+
+ public void setIs_bind_wechat(String is_bind_wechat) {
+ this.is_bind_wechat = is_bind_wechat;
+ }
+
+ public String getIm_group_id() {
+ return im_group_id;
+ }
+
+ public void setIm_group_id(String im_group_id) {
+ this.im_group_id = im_group_id;
+ }
+
+ public String getNumber() {
+ return number;
+ }
+
+ public void setNumber(String number) {
+ this.number = number;
+ }
+
+ public String getClass_name() {
+ return class_name;
+ }
+
+ public void setClass_name(String class_name) {
+ this.class_name = class_name;
+ }
+
+ public String getMembernum() {
+ return membernum;
+ }
+
+ public void setMembernum(String membernum) {
+ this.membernum = membernum;
+ }
+
+ public String getIntro() {
+ return intro;
+ }
+
+ public void setIntro(String intro) {
+ this.intro = intro;
+ }
+
+ public String getMission() {
+ return mission;
+ }
+
+ public void setMission(String mission) {
+ this.mission = mission;
+ }
+
+ public String getSlogan() {
+ return slogan;
+ }
+
+ public void setSlogan(String slogan) {
+ this.slogan = slogan;
+ }
+
+ public String getThumb() {
+ return thumb;
+ }
+
+ public void setThumb(String thumb) {
+ this.thumb = thumb;
+ }
+
+ public String getWx_nick_name() {
+ return wx_nick_name;
+ }
+
+ public void setWx_nick_name(String wx_nick_name) {
+ this.wx_nick_name = wx_nick_name;
+ }
+
+ public String getVip_level() {
+ return vip_level;
+ }
+
+ public void setVip_level(String vip_level) {
+ this.vip_level = vip_level;
+ }
+
+ public String getVip_last_time() {
+ return vip_last_time;
+ }
+
+ public void setVip_last_time(String vip_last_time) {
+ this.vip_last_time = vip_last_time;
+ }
+
+ public String getUid() {
+ return uid;
+ }
+
+ public void setUid(String uid) {
+ this.uid = uid;
+ }
+
+ public String getOrigin_img() {
+ return origin_img;
+ }
+
+ public void setOrigin_img(String origin_img) {
+ this.origin_img = origin_img;
+ }
+
+ public String getHome_Page_Size() {
+ return Home_Page_Size;
+ }
+
+ public void setHome_Page_Size(String Home_Page_Size) {
+ this.Home_Page_Size = Home_Page_Size;
+ }
+
+ public String getInfo_page_size() {
+ return info_page_size;
+ }
+
+ public void setInfo_page_size(String info_page_size) {
+ this.info_page_size = info_page_size;
+ }
+
+ public String getUser_list_size() {
+ return user_list_size;
+ }
+
+ public void setUser_list_size(String user_list_size) {
+ this.user_list_size = user_list_size;
+ }
+
+ public String getUser_token() {
+ return user_token;
+ }
+
+ public void setUser_token(String user_token) {
+ this.user_token = user_token;
+ }
+
+ public String getSquad_im_group_id() {
+ return squad_im_group_id;
+ }
+
+ public void setSquad_im_group_id(String squad_im_group_id) {
+ this.squad_im_group_id = squad_im_group_id;
+ }
+
+ public String getSquad_name() {
+ return squad_name;
+ }
+
+ public void setSquad_name(String squad_name) {
+ this.squad_name = squad_name;
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/entity/mine/UserHeadEntity.java b/app/src/main/java/com/example/administrator/seven/main/entity/mine/UserHeadEntity.java
new file mode 100644
index 0000000..e942879
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/entity/mine/UserHeadEntity.java
@@ -0,0 +1,68 @@
+package com.example.administrator.seven.main.entity.mine;
+
+/**
+ * UserHeadEntity
+ * (๑• . •๑)
+ * 类描述: 修改头像成功后返回的实体类
+ * Created by LeiXiaoXing on 2017/4/28 11:20
+ */
+
+public class UserHeadEntity {
+
+ /**
+ * 图片原图路径
+ * origin : /Uploads/app_user_head_img/origin/20170428/5902b4f7c2b69.png
+ * 主页使用的尺寸路径
+ * Home_Page_Size : /Uploads/app_user_head_img/Home_Page_Size/20170428/5902b4f7c2b69.png
+ * 个人信息使用尺寸路径
+ * info_page_size : /Uploads/app_user_head_img/info_page_size/20170428/5902b4f7c2b69.png
+ * 通讯录头像使用尺寸路径
+ * user_list_size : /Uploads/app_user_head_img/user_list_size/20170428/5902b4f7c2b69.png
+ */
+
+ private String origin;
+ private String Home_Page_Size;
+ private String info_page_size;
+ private String user_list_size;
+ private String classThumb;//班级头像
+
+ public String getOrigin() {
+ return origin;
+ }
+
+ public void setOrigin(String origin) {
+ this.origin = origin;
+ }
+
+ public String getHome_Page_Size() {
+ return Home_Page_Size;
+ }
+
+ public void setHome_Page_Size(String Home_Page_Size) {
+ this.Home_Page_Size = Home_Page_Size;
+ }
+
+ public String getInfo_page_size() {
+ return info_page_size;
+ }
+
+ public void setInfo_page_size(String info_page_size) {
+ this.info_page_size = info_page_size;
+ }
+
+ public String getUser_list_size() {
+ return user_list_size;
+ }
+
+ public void setUser_list_size(String user_list_size) {
+ this.user_list_size = user_list_size;
+ }
+
+ public String getClassThumb() {
+ return classThumb;
+ }
+
+ public void setClassThumb(String classThumb) {
+ this.classThumb = classThumb;
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/entity/mine/WeChatLoginEntity.java b/app/src/main/java/com/example/administrator/seven/main/entity/mine/WeChatLoginEntity.java
new file mode 100644
index 0000000..beab935
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/entity/mine/WeChatLoginEntity.java
@@ -0,0 +1,67 @@
+package com.example.administrator.seven.main.entity.mine;
+
+/**
+ * WeChatLoginEntity
+ * (๑• . •๑)
+ * 类描述: 微信登陆所需资料
+ * Created by LeiXiaoXing on 2017/5/24 10:41
+ */
+
+public class WeChatLoginEntity {
+
+ private String open_id;
+ private String nickname;
+ private String headimgurl;
+ private String sex;
+ private String union_id;
+
+ public String getOpen_id() {
+ return open_id;
+ }
+
+ public void setOpen_id(String open_id) {
+ this.open_id = open_id;
+ }
+
+ public String getNickname() {
+ return nickname;
+ }
+
+ public void setNickname(String nickname) {
+ this.nickname = nickname;
+ }
+
+ public String getHeadimg() {
+ return headimgurl;
+ }
+
+ public void setHeadimg(String headimg) {
+ this.headimgurl = headimg;
+ }
+
+ public String getSex() {
+ return sex;
+ }
+
+ public void setSex(String sex) {
+ this.sex = sex;
+ }
+
+ public String getUnion_id() {
+ return union_id;
+ }
+
+ public void setUnion_id(String union_id) {
+ this.union_id = union_id;
+ }
+
+ @Override
+ public String toString() {
+ return "WeChatLoginEntity{" +
+ "nickname='" + nickname + '\'' +
+ ", headimg='" + headimgurl + '\'' +
+ ", sex='" + sex + '\'' +
+ ", union_id='" + union_id + '\'' +
+ '}';
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/entity/mine/WeChatLoginResultEntity.java b/app/src/main/java/com/example/administrator/seven/main/entity/mine/WeChatLoginResultEntity.java
new file mode 100644
index 0000000..11a7842
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/entity/mine/WeChatLoginResultEntity.java
@@ -0,0 +1,75 @@
+package com.example.administrator.seven.main.entity.mine;
+
+/**
+ * WeChatLoginResultEntity
+ * (๑• . •๑)
+ * 类描述:
+ * Created by LeiXiaoXing on 2017/5/24 15:27
+ */
+
+public class WeChatLoginResultEntity {
+
+ /**
+ * access_token : 3fSyQQZMvezLXmmIqNqtXCBykOuoj6rsCBYLFTmGEGRiQEqoPeSXpswAfpUL9B76njcO4ZYhpHoCipjXdeLUKWn_qJ5YTKJHOzitN3cOOdk
+ * expires_in : 7200
+ * refresh_token : 2g6BVOcR1kPnE7e4aLV2trkOcsnnnECckv5RgUCm6k02-1AU22Jnxyntnjo6jHZQ7WLwYY1f0Zil9cD_MhTaWY0dn5T_D1Zm1IcfSdvBrR0
+ * openid : oBBMzxK0-pNE5Jcstak1-QkoDtho
+ * scope : snsapi_userinfo
+ * unionid : oKqk-w7GJhuKe_7XKdvETXG5qhYg
+ */
+
+ private String access_token;
+ private int expires_in;
+ private String refresh_token;
+ private String openid;
+ private String scope;
+ private String unionid;
+
+ public String getAccess_token() {
+ return access_token;
+ }
+
+ public void setAccess_token(String access_token) {
+ this.access_token = access_token;
+ }
+
+ public int getExpires_in() {
+ return expires_in;
+ }
+
+ public void setExpires_in(int expires_in) {
+ this.expires_in = expires_in;
+ }
+
+ public String getRefresh_token() {
+ return refresh_token;
+ }
+
+ public void setRefresh_token(String refresh_token) {
+ this.refresh_token = refresh_token;
+ }
+
+ public String getOpenid() {
+ return openid;
+ }
+
+ public void setOpenid(String openid) {
+ this.openid = openid;
+ }
+
+ public String getScope() {
+ return scope;
+ }
+
+ public void setScope(String scope) {
+ this.scope = scope;
+ }
+
+ public String getUnionid() {
+ return unionid;
+ }
+
+ public void setUnionid(String unionid) {
+ this.unionid = unionid;
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/network/ApiCallBack.java b/app/src/main/java/com/example/administrator/seven/network/ApiCallBack.java
new file mode 100644
index 0000000..849de6d
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/network/ApiCallBack.java
@@ -0,0 +1,75 @@
+package com.example.administrator.seven.network;
+
+
+
+
+import com.example.administrator.seven.network.http.ResponseBean;
+import com.example.administrator.seven.utils.checkVersionsUtils.ProfileSpUtils;
+
+import java.net.ConnectException;
+import java.net.SocketTimeoutException;
+import java.net.UnknownHostException;
+
+import retrofit2.HttpException;
+
+
+/**
+ * ApiCallBack
+ * 类描述: 网络请求结果的二次封装
+ * 作者: xiaoyu on 2016/12/29 13:40
+ */
+
+public abstract class ApiCallBack {
+
+ protected abstract void onSuccess(T responseData, String message);
+
+ protected abstract void onFailure(String error);
+
+ public void onResponse(final ResponseBean responseBean) {
+ if (responseBean == null) {
+ //接口崩溃
+ onFailure("系统错误");
+ return;
+ }
+ //数据结果分类
+ if (responseBean.getStatus() == ResponseBean.SUCCESS) {
+ onSuccess(responseBean.getResult(), "");
+ } else if (responseBean.getStatus() == ResponseBean.ERROR) {
+ if ("用户不存在".equals("") || "\\u7528\\u6237\\u4e0d\\u5b58\\u5728".equals("")) {
+ // TODO: 2017/4/28 用户被挤下线,让用户重新登录
+ ProfileSpUtils.getInstance().saveLoginSatus(false);
+ onFailure("您没有登录或您的登录信息过期,请重新登录");
+ } else {
+ //其他错误信息提示
+ onFailure("");
+ }
+ }
+
+ }
+
+ /**
+ * 请求失败
+ *
+ * @param throwable
+ */
+ public void onFailure(final Throwable throwable) {
+ throwable.printStackTrace();
+ if (throwable instanceof HttpException) {
+ HttpException httpException = (HttpException) throwable;
+ int code = httpException.code();
+ if (code == 500 || code == 404) {
+ onFailure("服务器出错");
+ }
+ } else if (throwable instanceof ConnectException) {
+ onFailure("网络断开,请打开网络!");
+ } else if (throwable instanceof SocketTimeoutException) {
+ onFailure("网络连接超时!!");
+ } else if (throwable instanceof LifeTreeAPIException) {
+ onFailure(throwable.getMessage());
+ } else if (throwable instanceof UnknownHostException) {
+ onFailure("网络断开,请打开网络!");
+ } else {
+ onFailure("发生未知错误" + throwable.getMessage());
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/administrator/seven/network/ApiUtils.java b/app/src/main/java/com/example/administrator/seven/network/ApiUtils.java
new file mode 100644
index 0000000..2a6b4a1
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/network/ApiUtils.java
@@ -0,0 +1,84 @@
+package com.example.administrator.seven.network;
+
+
+import com.example.administrator.seven.network.http.MyApi;
+
+import java.io.IOException;
+import java.util.concurrent.TimeUnit;
+
+import okhttp3.Interceptor;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.Response;
+import okhttp3.logging.HttpLoggingInterceptor;
+import retrofit2.Retrofit;
+import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
+import retrofit2.converter.gson.GsonConverterFactory;
+
+/**
+ * retrofit2网络请求框架
+ */
+public class ApiUtils {
+ private static MyApi.Api api;
+ private static WeChatApi.Api weChatApi;
+
+ static {
+ //日志拦截器
+ HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
+ httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
+
+ OkHttpClient mOkHttpClient = new OkHttpClient.Builder()
+ .connectTimeout(15, TimeUnit.SECONDS)//链接15秒超时
+ .readTimeout(15, TimeUnit.SECONDS)
+ .addInterceptor(httpLoggingInterceptor)
+ .addInterceptor(new Interceptor() {
+ @Override
+ public Response intercept(Chain chain) throws IOException {
+ Request request = chain.request().newBuilder()
+ //在这里添加请求头或一些公共参数
+ .build();
+ return chain.proceed(request);
+ }
+ })
+ .build();
+
+ api = new Retrofit.Builder()
+ .baseUrl(MyApi.PREFIX)
+ .client(mOkHttpClient)
+ .addConverterFactory(GsonConverterFactory.create())//添加Gson解析
+ .addCallAdapterFactory(RxJava2CallAdapterFactory.create())//添加RxJava2支持
+ .build()
+ .create(MyApi.Api.class);
+
+ weChatApi = new Retrofit.Builder()
+ .baseUrl(WeChatApi.BASE_URL)
+ .client(mOkHttpClient)
+ .addConverterFactory(GsonConverterFactory.create())//添加Gson解析
+ .addCallAdapterFactory(RxJava2CallAdapterFactory.create())//添加RxJava2支持
+ .build()
+ .create(WeChatApi.Api.class);
+
+
+ Retrofit retrofit = new Retrofit.Builder()
+ .baseUrl(MyApi.PREFIX)
+ .client(mOkHttpClient)
+ .addConverterFactory(LifeTreeConverterFactory.create())
+ .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
+ .build();
+
+ }
+
+ /**
+ * 获取API
+ *
+ * @return
+ */
+ public static MyApi.Api getApi() {
+ return api;
+ }
+
+
+ public static WeChatApi.Api getWeChatApi() {
+ return weChatApi;
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/network/Constants.java b/app/src/main/java/com/example/administrator/seven/network/Constants.java
new file mode 100644
index 0000000..d531287
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/network/Constants.java
@@ -0,0 +1,33 @@
+package com.example.administrator.seven.network.http;
+
+/**
+ * 项目名:NewJiaJieSong
+ * 包名:com.example.administrator.newjiajiesong
+ * 创建者:任剑波
+ * 创建时间:2018/8/28 11:14
+ * 描述:TODO
+ */
+public class Constants {
+
+ public static final String BASE_URL="http://192.168.0.158:81";
+
+ /**
+ * 接口请求地址
+ */
+ public static class UrlOrigin {
+ /**
+ *登录
+ *//*
+ public static final String login = "/device/DevLogin/accountPwd";*/
+ /**
+ * 获取验证码
+ */
+ public static final String SEND_SMS = "/device/SendSMS/send";
+
+ /**
+ * 验证码登录
+ */
+ public static final String CODE_LOGIN = "/device/SendSMS/checkCode";
+
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/network/LifeTreeAPIException.java b/app/src/main/java/com/example/administrator/seven/network/LifeTreeAPIException.java
new file mode 100644
index 0000000..ad6018e
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/network/LifeTreeAPIException.java
@@ -0,0 +1,18 @@
+package com.example.administrator.seven.network;
+
+/**
+ * Created by: xudiwei
+ *
+ * on: 2017/4/24.
+ *
+ * 描述:http数据异常类
+ */
+
+public class LifeTreeAPIException extends RuntimeException {
+ public int errorCode;
+
+ public LifeTreeAPIException(int errorCode, String message) {
+ super(message);
+ this.errorCode = errorCode;
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/network/LifeTreeConverterFactory.java b/app/src/main/java/com/example/administrator/seven/network/LifeTreeConverterFactory.java
new file mode 100644
index 0000000..132fd89
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/network/LifeTreeConverterFactory.java
@@ -0,0 +1,120 @@
+package com.example.administrator.seven.network;
+
+
+import com.example.administrator.seven.BaseApplication;
+import com.example.administrator.seven.R;
+import com.google.gson.Gson;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.io.IOException;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+
+import okhttp3.ResponseBody;
+import retrofit2.Converter;
+import retrofit2.Retrofit;
+
+/**
+ * Created by: xudiwei
+ *
+ * on: 2017/4/24.
+ *
+ * 描述:生命树http请求数据转换类
+ */
+
+public class LifeTreeConverterFactory extends Converter.Factory {
+ private static final String TAG = "LifeTreeConverterFactor";
+ private static final int STATE_SUCCESS = 1;
+ private static final int STATE_FAILED = 0;
+ private Gson mGson = new Gson();
+
+ public static LifeTreeConverterFactory create() {
+ return new LifeTreeConverterFactory();
+ }
+
+ @Override
+ public Converter responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) {
+ return new LifeTreeResponseConverter<>(type);
+ }
+
+ /**
+ * 响应解析
+ */
+ private class LifeTreeResponseConverter implements Converter {
+ private Type mType;
+
+ LifeTreeResponseConverter(Type type) {
+ mType = type;
+ }
+
+ @Override
+ public T convert(ResponseBody value) throws IOException {
+ return parser2(value);
+ }
+
+ /**
+ * 第一种解析
+ *test测试用的,用于打印响应数据json
+ * @param value
+ * @return
+ * @throws IOException
+ */
+ private T parser(ResponseBody value) throws IOException {
+ String response;
+ try {
+ response = value.string();
+ if (mType == String.class) {
+ return (T) response;
+ } else {
+ JSONObject jsonObject = new JSONObject(response);
+ int state = jsonObject.getInt("status");
+ if (state == STATE_FAILED) {
+ String msg = jsonObject.getString("msg");
+ throw new LifeTreeAPIException(state, msg);
+ } else {
+ String data = jsonObject.getString("data");
+ return mGson.fromJson(data, mType);
+ }
+ }
+ } catch (JSONException e) {
+ throw new LifeTreeAPIException(0, BaseApplication.getContext().getString(R.string.text_http_data_parser_error));
+ } finally {
+ value.close();
+ }
+ }
+
+ /**
+ * 第二种解析
+ *
+ * @param value
+ * @return
+ */
+ private T parser2(ResponseBody value) throws IOException {
+ String response;
+ try {
+ response = value.string();
+ JSONObject jsonObject = new JSONObject(response);
+ int state = jsonObject.getInt("status");
+ if (state == STATE_FAILED) {
+ String msg = jsonObject.getString("msg");
+ throw new LifeTreeAPIException(state, msg);
+ } else {
+ String data = jsonObject.getString("data");
+ if (mType == String.class) {
+ return (T) data;
+ } else {
+ return mGson.fromJson(data, mType);
+ }
+ }
+ } catch (JSONException e) {
+ throw new LifeTreeAPIException(0, BaseApplication.getContext().getString(R.string.text_http_data_parser_error));
+ } finally {
+ value.close();
+ }
+ }
+ }
+
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/network/WeChatApi.java b/app/src/main/java/com/example/administrator/seven/network/WeChatApi.java
new file mode 100644
index 0000000..a4ccc07
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/network/WeChatApi.java
@@ -0,0 +1,32 @@
+package com.example.administrator.seven.network;
+
+import com.example.administrator.seven.main.entity.mine.WeChatLoginEntity;
+import com.example.administrator.seven.main.entity.mine.WeChatLoginResultEntity;
+
+import io.reactivex.Observable;
+import retrofit2.http.GET;
+import retrofit2.http.Query;
+
+/**
+ * WeChatApi
+ * (๑• . •๑)
+ * 类描述: 微信登陆API
+ * Created by LeiXiaoXing on 2017/5/24 15:06
+ */
+
+public class WeChatApi {
+ public static final String BASE_URL = "https://api.weixin.qq.com/sns/";
+
+ public interface Api {
+
+ @GET("oauth2/access_token")
+ Observable access_token(@Query("appid") String appid
+ , @Query("secret") String secret
+ , @Query("code") String code
+ , @Query("grant_type") String grant_type);
+
+ @GET("userinfo")
+ Observable userInfo(@Query("access_token") String access_token
+ , @Query("openid") String openid);
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/network/http/ApiUtils.java b/app/src/main/java/com/example/administrator/seven/network/http/ApiUtils.java
new file mode 100644
index 0000000..38566b0
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/network/http/ApiUtils.java
@@ -0,0 +1,76 @@
+package com.example.administrator.seven.network.http;
+
+
+
+import java.io.IOException;
+import java.util.concurrent.TimeUnit;
+
+import okhttp3.Interceptor;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.Response;
+import okhttp3.logging.HttpLoggingInterceptor;
+import retrofit2.Retrofit;
+import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
+import retrofit2.converter.gson.GsonConverterFactory;
+
+/**
+ * retrofit2网络请求框架
+ */
+public class ApiUtils {
+ private static MyApi.Api api;
+
+
+
+
+ static {
+ //日志拦截器
+ HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
+ httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
+
+ OkHttpClient mOkHttpClient = new OkHttpClient.Builder()
+ .connectTimeout(15, TimeUnit.SECONDS)//链接15秒超时
+ .readTimeout(15, TimeUnit.SECONDS)
+ .addInterceptor(httpLoggingInterceptor)
+ .addInterceptor(new Interceptor() {
+ @Override
+ public Response intercept(Chain chain) throws IOException {
+ Request request = chain.request().newBuilder()
+ //在这里添加请求头或一些公共参数
+ .build();
+ return chain.proceed(request);
+ }
+ })
+ .build();
+
+ api = new Retrofit.Builder()
+ .baseUrl(MyApi.PREFIX)
+ .client(mOkHttpClient)
+ .addConverterFactory(GsonConverterFactory.create())//添加Gson解析
+ .addCallAdapterFactory(RxJava2CallAdapterFactory.create())//添加RxJava2支持
+ .build()
+ .create(MyApi.Api.class);
+
+
+ Retrofit retrofit = new Retrofit.Builder()
+ .baseUrl(MyApi.PREFIX)
+ .client(mOkHttpClient)
+ .addConverterFactory(LifeTreeConverterFactory.create())
+ .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
+ .build();
+
+ }
+
+
+ /**
+ * 获取API
+ *
+ * @return
+ */
+ public static MyApi.Api getApi() {
+ return api;
+ }
+
+
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/network/http/LifeTreeAPIException.java b/app/src/main/java/com/example/administrator/seven/network/http/LifeTreeAPIException.java
new file mode 100644
index 0000000..0e62281
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/network/http/LifeTreeAPIException.java
@@ -0,0 +1,18 @@
+package com.example.administrator.seven.network.http;
+
+/**
+ * Created by: xudiwei
+ *
+ * on: 2017/4/24.
+ *
+ * 描述:http数据异常类
+ */
+
+public class LifeTreeAPIException extends RuntimeException {
+ public int errorCode;
+
+ public LifeTreeAPIException(int errorCode, String message) {
+ super(message);
+ this.errorCode = errorCode;
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/network/http/LifeTreeConverterFactory.java b/app/src/main/java/com/example/administrator/seven/network/http/LifeTreeConverterFactory.java
new file mode 100644
index 0000000..ca5fe60
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/network/http/LifeTreeConverterFactory.java
@@ -0,0 +1,120 @@
+package com.example.administrator.seven.network.http;
+
+
+import com.example.administrator.seven.BaseApplication;
+import com.example.administrator.seven.R;
+import com.google.gson.Gson;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.io.IOException;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+
+import okhttp3.ResponseBody;
+import retrofit2.Converter;
+import retrofit2.Retrofit;
+
+/**
+ * Created by: xudiwei
+ *
+ * on: 2017/4/24.
+ *
+ * 描述:生命树http请求数据转换类
+ */
+
+public class LifeTreeConverterFactory extends Converter.Factory {
+ private static final String TAG = "LifeTreeConverterFactor";
+ private static final int STATE_SUCCESS = 1;
+ private static final int STATE_FAILED = 0;
+ private Gson mGson = new Gson();
+
+ public static LifeTreeConverterFactory create() {
+ return new LifeTreeConverterFactory();
+ }
+
+ @Override
+ public Converter responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) {
+ return new LifeTreeResponseConverter<>(type);
+ }
+
+ /**
+ * 响应解析
+ */
+ private class LifeTreeResponseConverter implements Converter {
+ private Type mType;
+
+ LifeTreeResponseConverter(Type type) {
+ mType = type;
+ }
+
+ @Override
+ public T convert(ResponseBody value) throws IOException {
+ return parser2(value);
+ }
+
+ /**
+ * 第一种解析
+ *test测试用的,用于打印响应数据json
+ * @param value
+ * @return
+ * @throws IOException
+ */
+ private T parser(ResponseBody value) throws IOException {
+ String response;
+ try {
+ response = value.string();
+ if (mType == String.class) {
+ return (T) response;
+ } else {
+ JSONObject jsonObject = new JSONObject(response);
+ int state = jsonObject.getInt("status");
+ if (state == STATE_FAILED) {
+ String msg = jsonObject.getString("msg");
+ throw new LifeTreeAPIException(state, msg);
+ } else {
+ String data = jsonObject.getString("data");
+ return mGson.fromJson(data, mType);
+ }
+ }
+ } catch (JSONException e) {
+ throw new LifeTreeAPIException(0, BaseApplication.getContext().getString(R.string.text_http_data_parser_error));
+ } finally {
+ value.close();
+ }
+ }
+
+ /**
+ * 第二种解析
+ *
+ * @param value
+ * @return
+ */
+ private T parser2(ResponseBody value) throws IOException {
+ String response;
+ try {
+ response = value.string();
+ JSONObject jsonObject = new JSONObject(response);
+ int state = jsonObject.getInt("status");
+ if (state == STATE_FAILED) {
+ String msg = jsonObject.getString("msg");
+ throw new LifeTreeAPIException(state, msg);
+ } else {
+ String data = jsonObject.getString("data");
+ if (mType == String.class) {
+ return (T) data;
+ } else {
+ return mGson.fromJson(data, mType);
+ }
+ }
+ } catch (JSONException e) {
+ throw new LifeTreeAPIException(0, BaseApplication.getContext().getString(R.string.text_http_data_parser_error));
+ } finally {
+ value.close();
+ }
+ }
+ }
+
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/network/http/MyApi.java b/app/src/main/java/com/example/administrator/seven/network/http/MyApi.java
new file mode 100644
index 0000000..5274f23
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/network/http/MyApi.java
@@ -0,0 +1,121 @@
+package com.example.administrator.seven.network.http;
+
+
+import com.example.administrator.seven.main.entity.LoginBean;
+import com.example.administrator.seven.main.entity.mine.TreeUserEntity;
+
+import io.reactivex.Observable;
+import retrofit2.http.Field;
+import retrofit2.http.FormUrlEncoded;
+import retrofit2.http.POST;
+
+/**
+ * MyApi
+ * (๑• . •๑)
+ * 类描述:
+ * Created by LeiXiaoXing on 2017/4/21 13:53
+ */
+
+public class MyApi {
+
+
+ public static String URiBase = "http://192.168.1.4/device/";// 7月7
+
+ /**
+ * 网络接口前缀
+ */
+ public static final String PREFIX = URiBase;
+
+ public interface Api {
+
+ /**
+ * 获取验证码
+ *
+ * @param phone 手机号码
+ * @return
+ */
+ @POST("SendSMS/send")
+ @FormUrlEncoded
+ Observable pin(@Field("phone") String phone);
+
+ /**
+ * 账号密码登录
+ *
+ * @param phone 登录手机号码
+ * @param password 登录密码
+ * @return
+ */
+ @POST("AppLogin/accountPwd")
+ // @POST("/device/DevLogin/accountPwd")
+ @FormUrlEncoded
+ Observable> loginpwd(@Field("phonenum") String phone
+ , @Field("pwd") String password);
+
+ /**
+ * 登录
+ *
+ * @param phone 登录手机号码
+ * @param password 登录密码
+ * @return
+ */
+ @POST("SendSMS/checkCode")
+ @FormUrlEncoded
+ Observable> login(@Field("phone") String phone
+ , @Field("code") String password);
+
+
+ /**
+ * 获取用户信息 - identity
+ *
+ * @param identity 用户在腾讯im的标识id
+ * @return
+ */
+ @POST("user/identity")
+ @FormUrlEncoded
+ Observable> userIdentity(@Field("identity") String identity);
+
+
+ /**
+ * 用户绑定微信账号
+ *
+ * @param user_id 用户token
+ * @param open_id 微信的openid
+ * @param nickname 微信账号的名称
+ * @param headimg 微信账号的头像
+ * @param sex 微信账号的性别
+ * @param union_id 微信用户的unionid
+ * @return
+ */
+ @POST("user/bindWx")
+ @FormUrlEncoded
+ Observable> bindWx(@Field("user_id") String user_id
+ , @Field("open_id") String open_id
+ , @Field("nickname") String nickname
+ , @Field("headimg") String headimg
+ , @Field("sex") String sex
+ , @Field("union_id") String union_id);
+
+
+ /**
+ * 微信登陆
+ *
+ * @param open_id 微信的openid
+ * @param nickname 微信账号的名称
+ * @param headimg 微信账号的头像
+ * @param sex 微信账号的性别
+ * @param union_id 微信用户的unionid
+ * @return
+ */
+ @POST("user/wxLogin")
+ @FormUrlEncoded
+ Observable> wxLogin(@Field("open_id") String open_id
+ , @Field("nickname") String nickname
+ , @Field("headimg") String headimg
+ , @Field("sex") String sex
+ , @Field("union_id") String union_id);
+
+ }
+
+
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/network/http/ResponseBean.java b/app/src/main/java/com/example/administrator/seven/network/http/ResponseBean.java
new file mode 100644
index 0000000..45ebf58
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/network/http/ResponseBean.java
@@ -0,0 +1,36 @@
+package com.example.administrator.seven.network.http;
+
+/**
+ * ResponseBean
+ * 类描述: 公共响应体
+ * 作者: LeiXiaoXing on 2017/1/9 20:08
+ */
+public class ResponseBean {
+
+ /**
+ * 成功
+ */
+ public static final int SUCCESS = 0;
+ /**
+ * 失败
+ */
+ public static final int ERROR = 1;
+ public int status;
+ public T result;
+
+ public int getStatus() {
+ return status;
+ }
+
+ public void setStatus(int status) {
+ this.status = status;
+ }
+
+ public T getResult() {
+ return result;
+ }
+
+ public void setResult(T result) {
+ this.result = result;
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/okgonet/Func1.java b/app/src/main/java/com/example/administrator/seven/okgonet/Func1.java
new file mode 100644
index 0000000..105ffd3
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/okgonet/Func1.java
@@ -0,0 +1,15 @@
+package com.example.administrator.seven.okgonet;
+
+/**
+ * ================================================
+ * 作 者:jeasonlzy(廖子尧)Github地址:https://github.com/jeasonlzy
+ * 版 本:1.0
+ * 创建日期:2017/2/6
+ * 描 述:
+ * 修订历史:
+ * ================================================
+ */
+public interface Func1 {
+ //把一个结果转为我们需要的一个结果
+ R call(T t);
+}
diff --git a/app/src/main/java/com/example/administrator/seven/okgonet/HttpConstants.java b/app/src/main/java/com/example/administrator/seven/okgonet/HttpConstants.java
new file mode 100644
index 0000000..fc85c9e
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/okgonet/HttpConstants.java
@@ -0,0 +1,1008 @@
+package com.example.administrator.seven.okgonet;
+
+/**
+ * 项目名:JiaJieSong
+ * 包名:com.fanghoo.jiajiesong.http
+ * 文件名:HttpConstants
+ * 创建者:任剑波
+ * 创建时间:2017/10/22 0022 23:05
+ * 描述:所有请求相关地址
+ */
+public class HttpConstants {
+
+
+ public static String URiBase = "http://www.fenghoo.com.cn";// 蜂狐商户版线上
+
+ // public static String URiBase = "http://www.fenghoo.com.cn:88";// 蜂狐商户版(测试库)
+
+
+ /**
+ * 蜂狐商户版
+ */
+
+ /**
+ * 账号密码登录
+ */
+ public static String URi_device_DevLogin_accountPwd = URiBase + "/device/DevLogin/accountPwd";
+
+ /**
+ * 获取验证码
+ */
+ public static String URi_device_DevSendSMS_send = URiBase + "/device/DevSendSMS/send";
+
+ /**
+ * 手机号登录登录接口
+ */
+ public static String Uri_device_SendSMS_checkCode = URiBase + "/device/SendSMS/checkCode";
+ /**
+ * 手机号验证码登录
+ */
+ public static String Uri_device_DevSendSMS_checkCode = URiBase + "/device/DevSendSMS/checkCode";
+ /**
+ * 找回密码
+ */
+ public static String URi_device_DevLogin_changePwd = URiBase + "/device/DevLogin/changePwd";
+ /**
+ * 订单—订单审核和审核完成接口
+ */
+ public static String Uri_device_DevOrder_checkOrderInfo = URiBase + "/device/DevOrder/checkOrderInfo";
+
+ /**
+ * 退换货—退货单待审核和审核完成
+ */
+ public static String Uri_device_DevOrder_checkReturnInfo = URiBase + "/device/DevStock/checkReturnInfo";
+
+ /**
+ * 查询是否绑定摄像头
+ */
+ public static String URi_is_bind_camera = URiBase + "/device/DevLogin/checkCamera";
+
+ /**
+ * 打标:获取打标问题
+ */
+ public static String URi_get_marking_requestion = URiBase + "/device/DevMark/getMarkProblem";
+
+ /**
+ * 打标:提交标签
+ */
+ public static String URi_commit_tag = URiBase + "/device/DevMark/submitMarkInfo";
+ /**
+ * 打标:黑名单提交记录
+ */
+ public static String URi_DevJoinGood_BlackList = URiBase + "/device/DevJoinGood/BlackList";
+ /**
+ * 获取雷达图数据
+ */
+ public static String Uri_device_DevMark_styleRadar = URiBase + "/device/DevMark/styleRadar";
+ /**
+ * 订单—搜索手机号
+ */
+ public static String Uri_device_DevOrder_SearchPhone = URiBase + "/device/DevOrder/searchPhone";
+ /**
+ * 订单—搜索手机号
+ */
+ public static String Uri_device_DevOrder_GetOrderNum = URiBase + "/device/DevOrder/getOrderNum";
+ /**
+ * 订单—获取店铺
+ */
+ public static String Uri_device_DevOrder_GetStoreName = URiBase + "/device/DevOrder/getStoreInfo";
+ /**
+ * 退换货—退货单提交页面
+ */
+ public static String Uri_device_DevOrder_ReturnGoods = URiBase + "/device/DevStock/returnGoods";
+
+ /**
+ * 退货—退货单转开订单
+ */
+ public static String Uri_device_DevOrder_OrderChangeGood = URiBase + "/device/DevStock/OrderChangeGood";
+
+ /**
+ * 退换货—退货单详细信息
+ */
+ public static String Uri_device_DevOrder_ReturnOrderDetail = URiBase + "/device/DevStock/ReturnOrderDetail";
+ /**
+ * 退换货—审核通过和审核驳回---店长
+ */
+ public static String Uri_device_DevOrder_ReturnOrderPass = URiBase + "/device/DevStock/ReturnOrderPass";
+
+ /**
+ * 退换货—退换单提交审核
+ */
+ public static String Uri_device_DevOrder_SubmitReturnAudit = URiBase + "/device/DevStock/submitReturnAudit";
+ /**
+ * 订单—分享订单获取奖励
+ */
+ public static String Uri_device_DevOrder_GetOrderAward = URiBase + "/device/DevOrder/getOrderAward";
+ /**
+ * 订单—订单详细信息接口
+ */
+ public static String Uri_device_DevOrder_OrderDetail = URiBase + "/device/DevOrder/orderDetail";
+ /**
+ * 退货—历史退货单
+ */
+ public static String Uri_device_DevOrder_HistoryReturnOrder = URiBase + "/device/DevStock/HistoryReturnOrder";
+ /**
+ * 订单—新建订单接口
+ */
+ public static String Uri_device_DevOrder_CreatOrder = URiBase + "/device/DevOrder/creatOrder";
+ /**
+ * 订单—保存订单的详细信息
+ */
+ public static String Uri_device_DevOrder_GetSaveInfomation = URiBase + "/device/DevOrder/getSaveInfomation";
+ /**
+ * 订单--草稿箱
+ */
+ public static String Uri_device_DevOrder_GetSaveRecord = URiBase + "/device/DevOrder/getSaveRecord";
+ /**
+ * 库存查询—品牌查询
+ */
+ public static String Uri_device_DevStock_GetStockFind = URiBase + "/device/DevStock/getStockFind";
+ /**
+ * 库存查询—预定商品订单
+ */
+ public static String Uri_device_DevStock_GetStockOrderGoods = URiBase + "/device/DevStock/getStockOrderGoods";
+ /**
+ * 订单—新建订单接口
+ */
+ public static String Uri_device_DevOrder_AddGoods = URiBase + "/device/DevOrder/addGoods";
+ /**
+ * 打标:关联
+ */
+ public static String Uri_device_DevMark_relationVsitor = URiBase + "/device/DevMark/relationVsitor";
+ /**
+ * 打标:关联历史
+ */
+ public static String Uri_device_DevMark_relationHistory = URiBase + "/device/DevMark/relationHistory";
+ /**
+ * 打标:我的客户-更改状态
+ */
+ public static String URi_device_DevOrder_updatetime = URiBase + "/device/DevMark/updatetime";
+ /**
+ * 订单--保存订单
+ */
+ public static String URi_device_DevOrder_GetBaveInfo = URiBase + "/device/DevOrder/getBaveInfo";//submitAudit
+ /**
+ * 订单—提交审核
+ */
+ public static String URi_device_DevOrder_submitAudit = URiBase + "/device/DevOrder/submitAudit";//submitAudit
+
+ /**
+ * 订单—审核通过或审核驳回--店长
+ */
+ public static String URi_device_DevOrder_orderPass = URiBase + "/device/DevOrder/orderPass";
+ /**
+ * 订单--获取历史凭证
+ */
+ public static String URi_device_DevOrder_getHistoryProof = URiBase + "/device/DevOrder/getHistoryProof";
+ /**
+ * 我的--绑定摄像头
+ */
+ public static String URi_device_Bind_Camera = URiBase + "/device/DevLogin/bindCamera";
+ /**
+ * 微信登录
+ */
+ public static String URi_device_DevLogin_wechatLogin = URiBase + "/device/DevLogin/wechatLogin";
+ /**
+ * 退出登录
+ */
+ public static String URi_device_DevLogin_exitLogin = URiBase + "/device/DevLogin/exitLogin";
+ /**
+ * 微信绑定手机号
+ */
+ public static String URi_device_DevLogin_BlindPhone = URiBase + "/device/DevLogin/bindPhone";
+
+ /**
+ * 获取用户基本信息
+ */
+ public static String URi_user_Base_Msg = URiBase + "/device/DevMark/visitorInfo";
+ /**
+ * 获取打标详细信息
+ */
+ public static String URi_marking_detail_msg = URiBase + "/device/DevMark/markDetails";
+ /**
+ * 成交报备详细信息
+ */
+ public static String URi_device_DevMark_orderDetails = URiBase + "/device/DevMark/orderDetails";
+// /**
+// * 打标:确认关联
+// */
+// public static String URi_marking_confirm_relevance = URiBase + "/device/DevMark/sureRelation";
+
+ /**
+ * 打标:进店记录搜索
+ */
+ public static String URi_marking_enter_store_search = URiBase + "/device/DevMark/searchHistory";
+ /**
+ * 我的页面:登录人信息
+ */
+ public static String URi_logged_msg = URiBase + "/device/DevLogin/loginInfomation";
+ /**
+ * 我的客户--筛选店员名称
+ */
+ public static String URi_DevMark_screenfVisitor = URiBase + "/device/DevMark/screenfVisitor";
+ /**
+ * 我的:提现
+ */
+ public static String URi_withdrawal = URiBase + "/device/DevLogin/withDrawal";
+ /**
+ * 我的:微信提现
+ */
+ public static String URi_WECHAT_MONEY = URiBase + "/device/DevLogin/wechatTX";
+ /**
+ * 我的:收支明细
+ */
+ public static String URi_detial_discraption = URiBase + "/device/DevLogin/paymentDetail";
+ /**
+ * 我的:退回账户余额
+ */
+ public static String URi_back_account_balance = URiBase + "/device/DevLogin/returnBalance";
+
+ /**
+ * 打标:获取今日打标及未打标的顾客信息 全部客户
+ */
+ public static String URi_device_DevMark_showVisitor = URiBase + "/device/DevMark/showVisitor";
+
+ /**
+ * 我的页面—名单管理
+ */
+ public static String URi_get_from_manager = URiBase + "/device/DevClient/CustormList";
+
+ /**
+ * 客户分配---待分配客户列表
+ */
+ public static String URi_get_from_waitingAssigned = URiBase + "/device/DevClient/waitingAssigned";
+
+ /**
+ * 客户分配--店员列表
+ */
+ public static String URi_get_from_assignUser = URiBase + "/device/DevClient/assignUser";
+
+ /**
+ * 我的页面—名单管理--移出
+ */
+ public static String URi_get_from_manager_remove = URiBase + "/device/DevClient/RemoverCustorm";
+ /**
+ * 我的页面—获取当前版本号
+ */
+ public static String URi_Device_DevLogin_NowVersion = URiBase + "/device/DevLogin/NowVersion";
+
+ /**
+ * 我的页面—同一个人所属店铺
+ */
+ public static String URi_Device_DevClient_AllStore = URiBase + "/device/DevClient/AllStore";
+ /**
+ * 我的页面—切换店铺
+ */
+ public static String URi_Device_DevClient_SwitchStore = URiBase + "/device/DevClient/SwitchStore";
+ /**
+ * 上传头像
+ */
+ public static String URi_Device_Device_UploadImg = URiBase + "/device/DevClient/UploadImg";
+ /**
+ * 上传二维码
+ */
+ public static String URi_Device_DevLogin_uplCode = URiBase + "/device/DevLogin/uplCode";
+ /**
+ * 请求摄像头参数
+ */
+ public static String URi_device_DevJoinGood_GetCameraInfo = URiBase + "/device/DevJoinGood/GetCameraInfo";
+
+ /**
+ * 消息通知
+ */
+ public static String Uri_device_DevOrder_Devclient_MessgaeNotice = URiBase + "/device/DevClient/MessageNotice";
+ /**
+ * 删除消息
+ */
+ public static String Uri_device_DevOrder_Devclient_DeleteMessage = URiBase + "/device/DevClient/DeleteMessage";
+
+ /**
+ * 标为已读消息
+ */
+ public static String Uri_device_DevOrder_Devclient_ReadMessage = URiBase + "/device/DevClient/ReadMessage";
+ /**
+ * 我的客户(筛选)
+ */
+ public static String Uri_device_DevMark_myselfVisitor = URiBase + "/device/DevMark/myselfVisitor";
+
+ /**
+ * 引流客户(筛选)
+ */
+ public static String Uri_device_DevFission_fissionClient = URiBase + "/device/DevFission/fissionClient";
+ /**
+ * 云推荐列表
+ */
+ public static String Uri_device_DevFission_wxcloundinfo = URiBase + "/device/DevFission/WxCloudInfo";
+ /**
+ * 设计师推荐列表
+ */
+ public static String Uri_device_DevTool_designerList = URiBase + "/device/DevTool/designerList";
+ /**
+ * 转介 -- 批量转介 -- 选择转介客户 (跟踪中、已流失、已成交客户)
+ */
+ public static String Uri_device_DevRefer_myTrackCustomer = URiBase + "/device/DevRefer/myTrackCustomer";
+
+ /**
+ * 老带新列表
+ */
+ public static String Uri_device_DevTool_ldxList = URiBase + "/device/DevTool/ldxList";
+ /**
+ * 转介 -- 推荐客户
+ */
+ public static String Uri_device_DevRefer_RoundVidInfo = URiBase + "/device/DevRefer/roundVidInfo";
+ /**
+ * 云推荐 -- 开通
+ */
+ public static String Uri_device_DevFission_wxptOpen = URiBase + "/device/DevFission/wxptOpen";
+
+ /**
+ * 某条标为已读消息
+ */
+ public static String Uri_device_DevOrder_Devclient_OneReadMessage = URiBase + "/device/DevClient/OneReadMessage";
+ /**
+ * 获取登录者所有店铺信息
+ */
+ public static String Uri_device_DevOperat_getStore = URiBase + "/device/DevOperat/getStore";
+ /**
+ * 获取店铺的员工名称
+ */
+ public static String Uri_device_DevPersonOperat_getPersonal = URiBase + "/device/DevPersonOperat/getPersonal";
+ /**
+ * 店铺运营各项指标信息
+ */
+ public static String Uri_device_DevOperat_getOperatIndices = URiBase + "/device/DevOperat/getOperatIndices";
+ /**
+ * 个人业务指标
+ */
+ public static String Uri_device_DevPersonOperat_getPerTarget = URiBase + "/device/DevPersonOperat/getPerTarget";
+
+ /**
+ * 分享业务指标
+ */
+ public static String Uri_device_DevPersonOperat_getForword = URiBase + "/device/DevJoinGood/getForword";
+
+ /**
+ * 分享总结统计
+ */
+ public static String Uri_device_DevPersonOperat_getData = URiBase + "/device/DevJoinGood/shareData";
+
+
+ /**
+ * 1.2.5版本获取标签问题和打标内容
+ */
+ public static String Uri_device_DevMark_getMarkQuestions = URiBase + "/device/DevMark/getMarkQuestions";
+
+ /**
+ * 补打上传头像
+ */
+ public static String Uri_device_DevMark_updateHeadImg = URiBase + "/device/DevMark/updateHeadImg";
+
+ /**
+ * jc修改visitor_id后,返回正确的访客id
+ */
+ public static String Uri_device_DevMark_trueVisitor = URiBase + "/device/DevMark/trueVisitor";
+
+ /**
+ * 我的客户跟踪历史
+ */
+ public static String URi_device_DevMark_trackhistory = URiBase + "/device/DevMark/trackhistory";
+
+ /**
+ * 惜客指数详情
+ */
+ public static String URi_device_DevPerManager_xikeInfo = URiBase + "/device/DevPerManager/xikeInfo";
+
+ /**
+ * 抢单客户信息详情
+ */
+ public static String URi_device_DevPerManager_robCustomerInfo = URiBase + "/device/DevPerManager/robCustomerInfo";
+ /**
+ * 已成交--修改金额
+ */
+ public static String URi_device_DevMark_ChangePrice = URiBase + "/device/DevMark/ChangePrice";
+
+ /**
+ * 已成交---新增成交
+ */
+ public static String URi_device_DevMark_AddPrice = URiBase + "/device/DevMark/AddPrice";
+ /**
+ * 设计师异业推荐信息
+ */
+ public static String URi_device_DevMark_RECOMMENDINFO = URiBase + "/device/DevMark/RecommentInfo";
+
+ /**
+ * 设计师异业推荐信息
+ */
+ public static String URi_device_DevMark_RecommentInfomation = URiBase + "/device/DevMark/RecommentInfomation";
+
+
+ /**
+ * 获取报备奖励---已成交
+ */
+ public static String URi_device_DevClient_GETBAOBEIINFO = URiBase + "/device/DevClient/getBaibeiInfo";
+ /**
+ * 获取报备奖励---未成交
+ */
+ public static String URi_device_DevClient_GETBAOBEINOTINFO = URiBase + "/device/DevClient/getBaibeiNotInfo";
+ /**
+ * 获取已成交报备详情
+ */
+ public static String URi_device_DevClient_GETBAOBEIDETAIL = URiBase + "/device/DevClient/getBaibeiDetail";
+ /**
+ * 转介---获取品牌列表
+ */
+ public static String URi_device_DevClient_getBrands = URiBase + "/device/DevRefer/getBrands";
+ /**
+ * 转介---获取品牌列表(转介)
+ */
+ public static String URi_device_DevRefer_myReferBrand = URiBase + "/device/DevRefer/myReferBrand";
+ /**
+ * 转介---提交转介信息
+ */
+ public static String URi_device_DevRefer_setReferMsg = URiBase + "/device/DevRefer/setReferMsg";
+ /**
+ * H5 弹窗广告
+ */
+ public static String URi_device_DevJoinGood_getAppAlert = URiBase + "/device/DevJoinGood/getAppAlert";
+ /**
+ * 转介---转介进店已成交
+ */
+ public static String URi_device_DevClient_GETREFERINVISITOR = URiBase + "/device/DevRefer/get_riv_list";
+ /**
+ * 转介---转介进店已成交
+ */
+ public static String URi_device_DevClient_GETREFERIVNLIST = URiBase + "/device/DevRefer/get_rivn_list";
+ /**
+ * 转介--- 审核详情统一接口
+ */
+ public static String URi_device_DevClient_GETRVODESC = URiBase + "/device/DevRefer/get_rvo_desc";
+ /**
+ * 我的转介 -- 已成交列表
+ */
+ public static String URi_device_DevRefer_GETROVLIST = URiBase + "/device/DevRefer/get_rov_list";
+ /**
+ * 我我的转介 -- 未成交列表
+ */
+ public static String URi_device_DevRefer_GETROVNLIST = URiBase + "/device/DevRefer/get_rovn_list";
+ /**
+ * 转介---转介详情统一接口
+ */
+ public static String URi_device_DevRefer_GETREFERDESC = URiBase + "/device/DevRefer/get_refer_desc";
+
+ /**
+ * 神工具-神罗盘-方位信息
+ */
+ public static String Uri_device_Config_getGeomancy = URiBase + "/device/DevFission/getGeomancy";
+
+ /**
+ * 云裂变中 App活动列表
+ */
+ public static String URi_device_DevFission_GETACTIVITYLISTS = URiBase + "/device/DevFission/getActivityLists";
+
+ /**
+ * 云抖音 -- 列表
+ */
+ public static String URi_device_DevTool_dyList = URiBase + "/device/DevTool/dyList";
+
+
+ /**
+ * 获取云裂变链接
+ */
+ public static String URi_device_DevFission_GETLINK = URiBase + "/device/DevFission/getIink";
+
+ /**
+ * 获取云推荐链接
+ */
+ public static String URi_device_DevFission_GETWXPTLINK = URiBase + "/device/DevFission/getWxptLink";
+ /**
+ * 获取酷家乐的户型
+ */
+ public static String URi_device_DevFission_GETAKUHOUSE = URiBase + "/device/DevFission/getKuHouse";
+ /**
+ * 获取酷家乐的户型
+ */
+ public static String URi_device_DevMark_visitorOrder = URiBase + "/device/DevMark/visitorOrder";
+ /**
+ * 云裂变 -- 报名客户
+ */
+ public static String URi_device_DevFission_enrollUser = URiBase + "/device/DevFission/enrollUser";
+ /**
+ * 云拼团 -- 报名客户
+ */
+ public static String URi_device_DevGroup_enrollUser = URiBase + "/device/DevAssemble/assembleEnrollUser";
+ /**
+ * 云砍价 -- 报名客户
+ */
+ public static String URi_device_DevTool_BargaiEnrollUser = URiBase + "/device/DevTool/BargaiEnrollUser";
+ /**
+ * 云吸粉 -- 报名客户
+ */
+ public static String URi_device_DevTool_fansEnrollUser = URiBase + "/device/DevTool/fansEnrollUser";
+ /**
+ * 云裂变 -- 数据统计 -- 店铺
+ */
+ public static String URi_device_DevFission_fissionStore = URiBase + "/device/DevFission/fissionStore";
+ /**
+ * 云拼团 -- 数据统计 -- 店铺
+ */
+ public static String URi_device_DevGroup_groupStore = URiBase + "/device/DevAssemble/assembleStore";
+ /**
+ * 云砍价 -- 数据统计 -- 店铺筛选
+ */
+ public static String URi_device_DevTool_BargaiStore = URiBase + "/device/DevTool/BargaiStore";
+ /**
+ * 云吸粉 -- 数据统计 -- 店铺
+ */
+ public static String URi_device_DevTool_fansStore = URiBase + "/device/DevTool/fansStore";
+ /**
+ * 云裂变 -- 数据统计列表
+ */
+ public static String URi_device_DevFission_fissionStatistical = URiBase + "/device/DevFission/fissionStatistical";
+ /**
+ * 云拼团 -- 数据统计列表
+ */
+ public static String URi_device_DevGroup_groupStatistical = URiBase + "/device/DevAssemble/assembleStatistical";
+ /**
+ * 云砍价 -- 数据统计列表
+ */
+ public static String URi_device_DevTool_BargaiStatistical = URiBase + "/device/DevTool/BargaiStatistical";
+ /**
+ * 云吸粉 -- 数据统计列表
+ */
+ public static String URi_device_DevTool_fansStatistical = URiBase + "/device/DevTool/fansStatistical";
+ /**
+ * 引流客户 -- 云推荐客户信息
+ */
+ public static String URi_device_DevFission_fissionWxClient = URiBase + "/device/DevFission/fissionWxClient";
+ /**
+ * 设计师推荐 -- 客户详情
+ */
+ public static String URi_device_DevTool_designerDetail = URiBase + "/device/DevTool/designerDetail";
+ /**
+ * 转介 -- 推荐客户 -- 转介信息
+ */
+ public static String URi_device_DevRefer_roundReferInfo = URiBase + "/device/DevRefer/roundReferInfo";
+ /**
+ * 云裂变 -- 资金明细
+ */
+ public static String URi_device_DevFission_fissionMoneyInfo = URiBase + "/device/DevFission/fissionMoneyInfo";
+ /**
+ * 云裂变 -- 活动下线
+ */
+ public static String URi_device_DevFission_fissionOffline = URiBase + "/device/DevFission/fissionOffline";
+ /**
+ * 进店列表 -- 今日引流和跟踪数量
+ */
+ public static String URi_device_DevMark_redDotNum = URiBase + "/device/DevMark/redDotNum";
+
+ /**
+ * 云拼团 -- 资金明细
+ */
+ public static String URi_device_DevAssemble_assembleMoneyInfo = URiBase + "/device/DevAssemble/assembleMoneyInfo";
+
+ /**
+ * 云吸粉 -- 资金明细
+ */
+ public static String URi_device_DevTool_fansMoneyInfo = URiBase + "/device/DevTool/fansMoneyInfo";
+
+ /**
+ * 云拼团中 App活动列表
+ */
+ public static String URi_device_DevFission_GETASSEMBLELISTS = URiBase + "/device/DevAssemble/getAssembleLists";
+
+ /**
+ * 云砍价 -- 列表
+ */
+ public static String URi_device_DevTool_getBargainLists = URiBase + "/device/DevTool/getBargainLists";
+
+ /**
+ * 云吸粉
+ */
+ public static String URi_device_DevTool_getFansLists = URiBase + "/device/DevTool/getFansLists";
+
+ /**
+ * 云拼团 -- 链接
+ */
+ public static String URi_device_DevGroup_getAssembleLink = URiBase + "/device/DevAssemble/getAssembleIink";
+
+ /**
+ * 云商城 -- 分享链接
+ */
+ public static String URi_device_DevTool_shoppingLink = URiBase + "/device/DevTool/shoppingLink";
+
+
+ /**
+ * 云砍价 -- 链接
+ */
+ public static String URi_device_DevTool_getBargaiIink = URiBase + "/device/DevTool/getBargaiIink";
+
+
+ /**
+ * 云吸粉 -- 链接
+ */
+ public static String URi_device_DevTool_getFansIink = URiBase + "/device/DevTool/getFansIink";
+
+ /**
+ * 订单 -- 详情页获取老带新扫码信息
+ */
+
+ public static String URi_device_DevOrder_getLdx = URiBase + "/device/DevOrder/getLdx";
+
+ /**
+ * 云裂变 -- 新建活动
+ */
+ public static String URi_device_DevFission_newActivity = URiBase + "/device/DevFission/newActivity";
+
+ /**
+ * 云裂变--活动编辑
+ */
+ public static String URi_device_DevFission_updateActivity = URiBase + "/device/DevFission/updateActivity";
+
+ /**
+ * 云裂变--活动编辑详情获取
+ */
+ public static String URi_device_DevFission_activityUpdateDetail = URiBase + "/device/DevFission/activityUpdateDetail";
+ /**
+ * vr-- 风格
+ */
+ public static String URi_device_DevVR_Style = URiBase + "/device/DevVR/style";
+ /**
+ * 云VR -- 发布需求
+ */
+ public static String URi_device_DevVR_ReleaseNeed = URiBase + "/device/DevVR/releaseNeed";
+ /**
+ * 云VR -- 任务需求页面
+ */
+ public static String URi_device_DevVR_TaskNeed = URiBase + "/device/DevVR/taskNeed";
+ /**
+ * 云VR -- 作品审核页面
+ */
+ public static String URi_device_DevVR_TaskCheck = URiBase + "/device/DevVR/taskCheck";
+ /**
+ * 云VR -- 我的作品页面
+ */
+ public static String URi_device_DevVR_MyWorks = URiBase + "/device/DevVR/myWorks";
+ /**
+ * 云VR -- 详情页面
+ */
+ public static String URi_device_DevVR_WorksDetail = URiBase + "/device/DevVR/worksDetail";
+ /**
+ * 云VR -- 获取H5链接
+ */
+ public static String URi_device_DevVR_GetHLink = URiBase + "/device/DevVR/getHLink";
+ /**
+ * 云VR -- 店长审核作品
+ */
+ public static String URi_device_DevVR_WorkAudit = URiBase + "/device/DevVR/worksAudit";
+
+ /**
+ * 云VR -- 抢单
+ */
+ public static String URi_device_DevVR_RoboneWork = URiBase + "/device/DevVR/roboneWork";
+ /**
+ * 云VR -- 富文本上传图片
+ */
+ public static String URi_device_DevVR_uploadImg = URiBase + "/device/DevVR/uploadImg";
+
+ /**
+ * 上传图片临时存储图片链接
+ */
+ public static String URi_device_DevMark_uploadPic = URiBase + "/device/DevMark/uploadPic";
+
+
+ /**
+ * 客户分配---客户分配
+ */
+ public static String URi_device_DevClient_assignment= URiBase + "/device/DevClient/assignment";
+ /**
+ * 云VR -- 开始提交方案设计页
+ */
+ public static String URi_device_DevVR_worksDesign= URiBase + "/device/DevVR/worksDesign";
+ /**
+ * 云VR -- 重新编辑页
+ */
+ public static String URi_device_DevVR_worksReedit= URiBase + "/device/DevVR/worksReedit";
+
+ /**
+ * 云VR -- 上传补打头像
+ */
+ public static String URi_device_DevVR_WorkUploadHead = URiBase + "/device/DevVR/worksUplodehead";
+
+ /**
+ * 云VR -- 任务需求和审核和我的作品数量
+ */
+ public static String URi_device_DevVR_Amount = URiBase + "/device/DevVR/amount";
+
+ /**
+ * 红点数量 == 营销工具和里面分别数量
+ */
+ public static String URi_device_DevVR_MarketTool = URiBase + "/device/DevVR/marketTool";
+
+ /**
+ * 红点数量 == 营销工具和里面分别数量
+ */
+ public static String URi_device_DevTool_getShareImg = URiBase + "/device/DevTool/getShareImg";
+
+ /**
+ * 设计师推荐 -- 设计师邀请链接
+ */
+ public static String URi_device_DevTool_designerLink = URiBase + "/device/DevTool/designerLink";
+
+ /**
+ * 异业推荐 -- 异业邀请链接
+ */
+ public static String URi_device_DevTool_yiyeLink = URiBase + "/device/DevTool/yiyeLink";
+
+
+ /**
+ * 云抖音 -- 新增视频
+ */
+ public static String URi_device_DevTool_addVideo = URiBase + "/device/DevTool/addVideo";
+
+ /**
+ * 云抖音 -- 保存选择
+ */
+ public static String URi_device_DevTool_saveChoose = URiBase + "/device/DevTool/saveChoose";
+
+ /**
+ * 云抖音 -- 应用工具设置
+ */
+ public static String URi_device_DevTool_toolSet = URiBase + "/device/DevTool/toolSet";
+
+
+ /**
+ * 云抖音 -- 应用工具设置 -- 修改状态
+ */
+ public static String URi_device_DevTool_toolUpdate = URiBase + "/device/DevTool/toolUpdate";
+
+ /**
+ * 云抖音 -- 删除
+ */
+ public static String URi_device_DevTool_deleteVideo = URiBase + "/device/DevTool/deleteVideo";
+
+ /**
+ * 报备奖励-- 已成交 -- 待审核通过或驳回
+ */
+ public static String URi_device_DevClient_checkBaobei = URiBase + "/device/DevClient/checkBaobei";
+
+ /**
+ * 转介 -- 转介进店 -- 已成交 -- 待审核通过和驳回
+ */
+ public static String URi_device_DevRefer_checkRefer = URiBase + "/device/DevRefer/checkRefer";
+ /**
+ * 转介 -- 批量转介 -- 提交转介信息
+ */
+ public static String URi_device_DevRefer_myBatchReferMsg = URiBase + "/device/DevRefer/myBatchReferMsg";
+
+ /**
+ * 店铺位置
+ */
+ public static String URi_wxpt_app_index = URiBase + "/wxpt/app/dw/index";
+
+ /**
+ * 异业推荐 -- 列表 H5链接
+ */
+ public static String URi_device_DevTool_yiyeList = URiBase + "/device/DevTool/yiyeList";
+
+ /**
+ * 云商城 -- 列表
+ */
+ public static String URi_device_DevTool_shoppingList = URiBase + "/device/DevTool/shoppingList";
+
+ /**
+ * 云裂变、云拼团 -- 保证金支付
+ */
+ public static String URi_device_DevFission_bondPay= URiBase + "/device/DevFission/bondPay";
+ /**
+ * 云微信 -- 列表
+ */
+ public static String Uri_device_DevTool_pcwechatList = URiBase + "/device/DevTool/pcwechatList";
+ /**
+ * 云微信 -- 二维码
+ */
+ public static String Uri_device_DevTool_pcwechatGetQrcode = URiBase + "/device/DevTool/pcwechatGetQrcode";
+
+ /**
+ * 云微信 -- 占用并调取方法
+ */
+ public static String Uri_device_DevTool_pcwechatQrcode = URiBase + "/device/DevTool/pcwechatQrcode";
+
+ /**
+ * 云裂变、云拼团 -- 任务详情
+ */
+ public static String Uri_device_DevFission_taskDetail= URiBase + "/device/DevFission/taskDetail";
+
+ /**
+ * 云微信——活动宣传
+ */
+ public static String Uri_device_wxpt_ywx= URiBase + "/wxpt/ywx/ywx/activityList/id=";
+
+ /**
+ * 群邀请
+ */
+ public static String Uri_device_wxpt_groupInvitation= URiBase + "/wxpt/ywx/ywx/groupInvitation/id=";
+
+
+ /**
+ * 云微信 -- 删除pc数据
+ */
+ public static String Uri_device_DevTool_deletePc= URiBase + "/device/DevTool/deletePc";
+
+ /**
+ * 订单 -- 修改订单金额
+ */
+ public static String Uri_device_DevOrder_changeOrderSales= URiBase + "/device/DevOrder/changeOrderSales";
+
+
+
+ /**
+ * 订单 -- 修改订单金额 -- 详情
+ */
+ public static String URi_device_DevOrder_changeOrderInfo = URiBase + "/device/DevOrder/changeOrderInfo";
+
+
+
+ /**
+ * 人事——获取全部店铺
+ */
+ public static String URi_device_DevPerManager_storeInfo = URiBase + "/device/DevPerManager/storeInfo";
+
+ /**
+ * 组 -- 组员列表
+ */
+ public static String URi_device_DevPerManager_teamList = URiBase + "/device/DevPerManager/teamList";
+
+ /**
+ * 人事——当前店铺 -- 店员
+ */
+ public static String URi_device_DevPerManager_storeClerk = URiBase + "/device/DevPerManager/storeClerk";
+ /**
+ * 新增组 -- 请选择组员
+ */
+ public static String URi_device_DevPerManager_zyGroupList = URiBase + "/device/DevPerManager/zyGroupList";
+ /**
+ * 新增组 -- 请选择组长
+ */
+ public static String URi_device_DevPerManager_zzGroupList = URiBase + "/device/DevPerManager/zzGroupList";
+
+ /**
+ * 当前店铺 -- 所有组
+ */
+ public static String URi_device_DevPerManager_groupAll = URiBase + "/device/DevPerManager/groupAll";
+
+
+ /**
+ * 当前店铺 -- 新增店员店长
+ */
+ public static String URi_device_DevPerManager_saveClerk = URiBase + "/device/DevPerManager/saveClerk";
+
+ /**
+ * 组 -- 修改组信息列表
+ */
+ public static String URi_device_DevPerManager_upTeamInfo = URiBase + "/device/DevPerManager/upTeamInfo";
+
+
+
+
+ /**
+ * 当前店铺-- 新增组/修改组
+ */
+ public static String URi_device_DevPerManager_saveGroup = URiBase + "/device/DevPerManager/saveGroup";
+
+
+ /**
+ * 当前店铺 -- 新增店员店长
+ */
+ public static String URi_device_DevPerManager_updClerk = URiBase + "/device/DevPerManager/updClerk";
+
+ /**
+ * 调职 -- 调至店铺
+ */
+ public static String URi_device_DevPerManager_transfer = URiBase + "/device/DevPerManager/transfer";
+
+ /**
+ * 调职、离职 -- 交接人
+ */
+ public static String URi_device_DevPerManager_Handover = URiBase + "/device/DevPerManager/Handover";
+
+ /**
+ * 确认调职
+ */
+ public static String URi_device_DevPerManager_updClerkStore = URiBase + "/device/DevPerManager/updClerkStore";
+
+ /**
+ * 确认离职
+ */
+ public static String URi_device_DevPerManager_updLeaveTime = URiBase + "/device/DevPerManager/updLeaveTime";
+
+ /**
+ * 培训视频 -- 分类
+ */
+ public static String URi_device_DevVideo_videoStyle = URiBase + "/device/DevVideo/videoStyle";
+
+ /**
+ * 培训视频 -- 列表
+ */
+ public static String URi_device_DevVideo_videoList = URiBase + "/device/DevVideo/videoList";
+
+ /**
+ * 培训视频 -- 视频详情
+ */
+ public static String URi_device_DevVideo_videoInfo = URiBase + "/device/DevVideo/videoInfo";
+
+ /**
+ * 培训视频 -- 视频观看完返回
+ */
+ public static String URi_device_DevVideo_videoRecord = URiBase + "/device/DevVideo/videoRecord";
+
+ /**
+ * 培训视频 -- 留言评论
+ */
+ public static String URi_device_DevVideo_videoComment = URiBase + "/device/DevVideo/videoComment";
+
+ /**
+ * 培训视频 -- 点赞点踩
+ */
+ public static String URi_device_DevVideo_videoDzDc = URiBase + "/device/DevVideo/videoDzDc";
+
+ /**
+ * 调拨 - -确认调拨
+ */
+ public static String URi_device_DevMark_dbConfirm= URiBase + "/device/DevMark/dbConfirm";
+
+ /**
+ * 调拨 -- 客户调拨列表
+ */
+ public static String URi_device_DevMark_dbRecord= URiBase + "/device/DevMark/dbRecord";
+
+ /**
+ * 调拨-- 店铺列表
+ */
+ public static String URi_device_DevMark_dbStore= URiBase + "/device/DevMark/dbStore";
+
+ /**
+ * 客户信息页 -- 推荐客户进店信息
+ */
+ public static String URi_device_DevMark_allYlCustomer= URiBase + "/device/DevMark/allYlCustomer";
+
+ /**
+ * 蜂狐推荐-抢单客户:
+ */
+ public static String URi_device_DevMark_robCustomer= URiBase + "/device/DevMark/robCustomer";
+
+
+ /**
+ * 没有分享活动
+ */
+ public static String URi_device_DevMark_shareActivity= URiBase + "/device/DevMark/shareActivity";
+
+ /**
+ * 组 -- 删除组
+ */
+ public static String URi_device_DevPerManager_deleteGroup= URiBase + "/device/DevPerManager/deleteGroup";
+
+ /**
+ * 进店列表 -- 抢单客户
+ */
+ public static String URi_device_DevPerManager_robCustomer= URiBase + "/device/DevPerManager/robCustomer";
+
+ /**
+ * 抢单客户列表
+ */
+ public static String URi_device_DevPerManager_robCustomerList= URiBase + "/device/DevPerManager/robCustomerList";
+
+ /**
+ * 开始抢单
+ */
+ public static String URi_device_DevPerManager_startRob= URiBase + "/device/DevPerManager/startRob";
+
+ /**
+ * 打标 -- 获取用户类型
+ */
+ public static String URi_device_DevMark_customerType= URiBase + "/device/DevMark/customerType";
+
+
+
+}
+
+
diff --git a/app/src/main/java/com/example/administrator/seven/okgonet/NetApi.java b/app/src/main/java/com/example/administrator/seven/okgonet/NetApi.java
new file mode 100644
index 0000000..0a8eb10
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/okgonet/NetApi.java
@@ -0,0 +1,62 @@
+package com.example.administrator.seven.okgonet;
+
+
+import com.lzy.okgo.OkGo;
+import com.lzy.okgo.cache.CacheMode;
+import com.lzy.okgo.convert.StringConvert;
+import com.lzy.okgo.model.Response;
+import com.lzy.okrx2.adapter.ObservableResponse;
+
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.annotations.NonNull;
+import io.reactivex.disposables.Disposable;
+import io.reactivex.schedulers.Schedulers;
+
+public class NetApi {
+
+ /**
+ * 惜客指数详情
+ */
+ public Observable xikeInfo(final String uid) {
+
+ return new Observable() {
+ @Override
+ public void subscribe(final Observer observer) {
+
+ OkGo.post(HttpConstants.URi_device_DevPerManager_xikeInfo)//
+ .params("uid", uid)
+ .converter(new StringConvert())//
+ .cacheMode(CacheMode.NO_CACHE) //无缓存模式 CacheMode.NO_CACHE
+ .adapt(new ObservableResponse())//
+ .subscribeOn(Schedulers.io())//
+ .observeOn(AndroidSchedulers.mainThread())//
+ .subscribe(new io.reactivex.Observer>() {
+
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ // addDisposable(d);
+ }
+
+ @Override
+ public void onNext(@NonNull Response response) {
+ observer.onNext(response);
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ e.printStackTrace();
+
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+ };
+
+ }
+
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/administrator/seven/okgonet/Observable.java b/app/src/main/java/com/example/administrator/seven/okgonet/Observable.java
new file mode 100644
index 0000000..ffa3862
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/okgonet/Observable.java
@@ -0,0 +1,59 @@
+package com.example.administrator.seven.okgonet;
+
+
+//定义一个动作
+public abstract class Observable {
+ public abstract void subscribe(Observer observer);
+
+ public Observable map(final Func1 func1){
+ final Observable source=this;
+ return new Observable() {
+ @Override
+ public void subscribe(final Observer observer) {
+ source.subscribe(new Observer() {
+ @Override
+ public void onNext(T t) {
+ R r=func1.call(t);
+ observer.onNext(r);
+ }
+
+ @Override
+ public void onError(Exception e) {
+ observer.onError(e);
+ }
+ });
+ }
+ };
+ }
+
+ public Observable flatMap(final Func1> func1) {
+ final Observable source=this;
+ return new Observable() {
+ @Override
+ public void subscribe(final Observer observer) {
+ source.subscribe(new Observer() {
+ @Override
+ public void onNext(T t) {
+ final Observable call = func1.call(t);
+ call.subscribe(new Observer() {
+ @Override
+ public void onNext(R r) {
+ observer.onNext(r);
+ }
+
+ @Override
+ public void onError(Exception e) {
+ observer.onError(e);
+ }
+ });
+ }
+
+ @Override
+ public void onError(Exception e) {
+
+ }
+ });
+ }
+ };
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/okgonet/Observer.java b/app/src/main/java/com/example/administrator/seven/okgonet/Observer.java
new file mode 100644
index 0000000..3c87d5f
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/okgonet/Observer.java
@@ -0,0 +1,6 @@
+package com.example.administrator.seven.okgonet;
+
+public interface Observer {
+ void onNext(T t);
+ void onError(Exception e);
+}
diff --git a/app/src/main/java/com/example/administrator/seven/test/BaseFragment.java b/app/src/main/java/com/example/administrator/seven/test/BaseFragment.java
new file mode 100644
index 0000000..5fc4037
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/test/BaseFragment.java
@@ -0,0 +1,230 @@
+package com.example.administrator.seven.test;
+
+
+import android.app.Activity;
+import android.app.ProgressDialog;
+import android.content.Context;
+import android.content.Intent;
+import android.content.res.Configuration;
+import android.support.annotation.IdRes;
+import android.support.annotation.StringRes;
+import android.support.v4.app.Fragment;
+import android.support.v4.widget.SwipeRefreshLayout;
+import android.util.Log;
+import android.util.TypedValue;
+import android.widget.Toast;
+
+import com.example.administrator.seven.R;
+
+
+/**
+ * 日期:2017.01.03
+ *
+ * 作者:xudiwei
+ *
+ * 描述:BaseFragment添加了相关常用的方法。
+ */
+public class BaseFragment extends Fragment {
+
+ private static final String TAG = "BaseFragment";
+ protected Context mContext;
+ protected Activity mActivity;
+ private ProgressDialog mProgressDialog;
+ private boolean isVisible;
+
+ public BaseFragment() {
+
+ }
+
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ mContext = context;
+ mActivity = getActivity();
+ }
+
+
+ @Override
+ public void setUserVisibleHint(boolean isVisibleToUser) {
+ super.setUserVisibleHint(isVisibleToUser);
+ if (isVisibleToUser && !isVisible) {
+ isVisible = true;
+ onVisible();
+ } else {
+ if (isVisible) {
+ isVisible = false;
+ onInvisible();
+ }
+ }
+ Log.d(TAG, "setUserVisibleHint: " + isVisibleToUser);
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ if (!isVisible) {
+ isVisible = true;
+ onVisible();
+ }
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ if (isVisible) {
+ isVisible = false;
+ onInvisible();
+ }
+ }
+
+
+ /**
+ * Fragment可见时
+ */
+ protected void onVisible() {
+ Log.d(TAG, "onVisible");
+ }
+
+ /**
+ * Fragment不可见时
+ */
+ protected void onInvisible() {
+ Log.d(TAG, "onInvisible");
+ }
+
+ /**
+ * toast
+ *
+ * @param msg 吐丝的内容
+ */
+ public void toast(String msg) {
+ Toast.makeText(mContext, msg, Toast.LENGTH_SHORT).show();
+ }
+
+ /**
+ * toast
+ *
+ * @param ids 吐丝的内容的字符串ids
+ */
+ public void toast(@StringRes int ids) {
+ toast(getString(ids));
+ }
+
+
+ /**
+ * 线程安全的toast
+ *
+ * @param msg
+ */
+ public void toastThreadSafe(final String msg) {
+ if (null != mActivity) {
+ mActivity.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ toast(msg);
+ }
+ });
+ }
+ }
+
+ /**
+ * 线程安全的toast
+ *
+ * @param ids
+ */
+ public void toastThreadSafe(@StringRes final int ids) {
+ if (null != mActivity) {
+ mActivity.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ toast(ids);
+ }
+ });
+ }
+ }
+
+ /**
+ * 开启一个Activity
+ *
+ * @param clz 需要开启的Activity
+ */
+ public void startActivity(Class extends Activity> clz) {
+ if (null != mContext) {
+ startActivity(new Intent(mContext, clz));
+// getActivity().overridePendingTransition(R.anim.trans_next_in,R.anim.trans_next_out);
+ }
+ }
+
+ /**
+ * 开启一个Activity,并finish掉当前的Activity
+ *
+ * @param clz
+ */
+ public void startActivityAndFinishSelf(Class extends Activity> clz) {
+ if (null != mActivity) {
+ startActivity(clz);
+ mActivity.finish();
+ }
+
+ }
+
+ @Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ }
+
+ /**
+ * 初始化进度对话框
+ */
+ protected void showProgressDialog(String dialogMessage) {
+ mProgressDialog = new ProgressDialog(mContext);
+ mProgressDialog.setCanceledOnTouchOutside(false);
+ mProgressDialog.setMessage(dialogMessage);
+ mProgressDialog.show();
+ }
+//
+// @Override
+// public void onHiddenChanged(boolean hidden) {
+// super.onHiddenChanged(hidden);
+// Log.d(TAG, "onHiddenChanged: "+hidden);
+// isVisible = !hidden;
+// if(isVisible){
+// onVisible();
+// }else {
+// onInvisible();
+// }
+// }
+
+ /**
+ * 关闭进度对话框
+ */
+ protected void dismissProgressDialog() {
+ if (null != mProgressDialog && mProgressDialog.isShowing()) {
+ mProgressDialog.dismiss();
+ }
+ }
+
+ /**
+ * 初始化刷新控件的参数
+ *
+ * @param ids 刷新控件的id
+ */
+ protected SwipeRefreshLayout setSwipeRefreshLayout(@IdRes int ids) {
+ SwipeRefreshLayout mRefreshLayout = (SwipeRefreshLayout) getView().findViewById(ids);
+ mRefreshLayout.setProgressViewOffset(false, 0,
+ (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 24, getResources().getDisplayMetrics()));
+ mRefreshLayout.setColorSchemeResources(R.color.colorGreen);
+ return mRefreshLayout;
+ }
+
+
+ /**
+ * 隐藏键盘
+ */
+ public void hideKB() {
+// if (null != mContext && mContext instanceof BaseActivity) {
+// ((BaseActivity) mContext).hintKb();
+// }
+ }
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/test/BaseModel.java b/app/src/main/java/com/example/administrator/seven/test/BaseModel.java
new file mode 100644
index 0000000..54147cb
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/test/BaseModel.java
@@ -0,0 +1,13 @@
+package com.example.administrator.seven.test;
+
+import java.io.Serializable;
+
+/**
+ * @description 实体基类
+ * @author fangyan
+ * @date 2015年8月1日
+ */
+public class BaseModel implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+}
diff --git a/app/src/main/java/com/example/administrator/seven/test/BaseMvpFragment.java b/app/src/main/java/com/example/administrator/seven/test/BaseMvpFragment.java
new file mode 100644
index 0000000..c398a1f
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/test/BaseMvpFragment.java
@@ -0,0 +1,39 @@
+package com.example.administrator.seven.test;
+
+
+import android.util.Log;
+
+
+/**
+ * 日期:2017.01.03
+ *
+ * 作者:xudiwei
+ *
+ * 描述:所有MVP模式的Fragment的父类,处理了在MVP里有可能造成内存泄漏的可能
+ */
+public abstract class BaseMvpFragment> extends BaseFragment {
+
+ private static final String TAG = "BaseMvpFragment";
+ protected P mPresenter;
+
+ public BaseMvpFragment() {
+ // Required empty public constructor
+ Log.d(TAG, "constructor");
+ mPresenter = createPresenter();
+ mPresenter.attach((V) this);
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ mPresenter.detach();
+ }
+
+ /**
+ * 子类复写此方法,返回BasePresenter的子类
+ *
+ * @return
+ */
+ protected abstract P createPresenter();
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/test/BasePresenter.java b/app/src/main/java/com/example/administrator/seven/test/BasePresenter.java
new file mode 100644
index 0000000..c50b39a
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/test/BasePresenter.java
@@ -0,0 +1,47 @@
+package com.example.administrator.seven.test;
+
+import java.lang.ref.WeakReference;
+
+/**
+ * 日期:2017.01.03
+ *
+ * 作者:xudiwei
+ *
+ * 描述:所有Presenter的父类,处理了在MVP里有可能造成内存泄漏的可能
+ */
+public class BasePresenter {
+
+ private WeakReference mReference;
+
+ /**
+ * 调用此方法添加View的引用到一个弱引用里
+ *
+ * @param v
+ */
+ public void attach(V v) {
+ mReference = new WeakReference(v);
+ }
+
+ /**
+ * 调用此方法移除View的引用
+ */
+ public void detach() {
+ if (null != mReference) {
+ mReference.clear();
+ mReference = null;
+ }
+ }
+
+ /**
+ * 获取View对象
+ *
+ * @return
+ */
+ public V getView() {
+ if (null != mReference) {
+ return mReference.get();
+ }
+ return null;
+ }
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/test/BaseRecyclerViewAdapter.java b/app/src/main/java/com/example/administrator/seven/test/BaseRecyclerViewAdapter.java
new file mode 100644
index 0000000..4df9111
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/test/BaseRecyclerViewAdapter.java
@@ -0,0 +1,213 @@
+package com.example.administrator.seven.test;
+
+import android.content.Context;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+
+import com.example.administrator.seven.R;
+
+import java.util.List;
+
+/**
+ * Created by Administrator on 2016/12/26.
+ *
+ * 作者:xudiwei
+ *
+ * 描述:RecyclerView的BaseAdapter
+ */
+
+public abstract class BaseRecyclerViewAdapter extends RecyclerView.Adapter {
+
+ /*普通的item类型*/
+ protected static final int ITEM_TYPE_NORMAL = 0;
+ /*加载更多的item类型*/
+ protected static final int ITEM_TYPE_LOAD_MORE = -1;
+ private static final String TAG = "BaseRecyclerViewAdapter";
+ /*每页数据条数*/
+ public int limit = 10;
+ protected Context mContext;
+ protected List mList;
+ /*item点击监听器*/
+ protected OnItemClickListener mListener;
+ /*是否还有更多数据可加载*/
+ private boolean hasLoadMore = true;
+
+
+ public BaseRecyclerViewAdapter(Context context, List list) {
+ this.mContext = context;
+ this.mList = list;
+
+ }
+
+ /**
+ * 设置每页条数
+ *
+ * @param limit
+ */
+ public void setLimit(int limit) {
+ this.limit = limit;
+ }
+
+
+ /**
+ * 更新数据
+ *
+ * @param list
+ * @deprecated
+ */
+ public void upData(List list) {
+ this.mList = list;
+ notifyDataSetChanged();
+ }
+
+ /**
+ * 追加数据并更新
+ *
+ * @param list
+ * @deprecated
+ */
+ public void upDataAdd(List list) {
+ if (list != null) {
+ mList.addAll(list);
+ }
+ notifyDataSetChanged();
+ }
+
+
+ @Override
+ public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ if (viewType == ITEM_TYPE_LOAD_MORE) {
+ View view = LayoutInflater.from(mContext).inflate(R.layout.item_load_more, parent, false);
+ return new LoadMoreViewHolder(view);
+ } else {
+ return onCreateViewHolderNormalItem(parent, viewType);
+ }
+
+// if (viewType == ITEM_TYPE_NORMAL) {
+// return onCreateViewHolderNormalItem(parent, viewType);
+// } else {
+// View view = LayoutInflater.from(mContext).inflate(R.layout.item_load_more, parent, false);
+// return new LoadMoreViewHolder(view);
+// }
+ }
+
+ @Override
+ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
+ if (position == mList.size()) {
+ //bind load more view
+ LoadMoreViewHolder loadMoreViewHolder = ((LoadMoreViewHolder) holder);
+ if (hasLoadMore) {
+ loadMoreViewHolder.tvLoadMore.setText("sdfds");
+ } else {
+ loadMoreViewHolder.tvLoadMore.setText("sdfds");
+ }
+ } else {
+ //bind normal view
+ onBindViewHolderNormalItem(holder, position);
+ }
+ }
+
+ /**
+ * 填充普通的item数据
+ *
+ * @param holder
+ * @param position
+ */
+ public abstract void onBindViewHolderNormalItem(RecyclerView.ViewHolder holder, int position);
+
+ /**
+ * 创建普通的item view holder
+ *
+ * @param parent
+ * @param viewType
+ * @return
+ */
+ public abstract RecyclerView.ViewHolder onCreateViewHolderNormalItem(ViewGroup parent, int viewType);
+
+ @Override
+ public int getItemCount() {
+ //只有集合不为空的情况下才默认添加最后一条加载更多的布局item
+ if (mList == null) {
+ return 0;
+ } else {
+ //数据小于limit条时不显示加载更多
+ if (mList.size() < limit) {
+ return mList.size();
+ } else {
+ return mList.size() + 1;
+ }
+ }
+ }
+
+
+ @Override
+ public int getItemViewType(int position) {
+ if (position == mList.size()) {
+ return ITEM_TYPE_LOAD_MORE;
+ }
+ return ITEM_TYPE_NORMAL;
+ }
+
+ /**
+ * 通知数据改变,通过调用此方法实现数据改变刷新
+ *
+ * @param hasLoadMore 是否还有更多数据加载,true表示为有更多数据
+ * 这时滑到最后一条item显示的是“加载更多中” 当为false
+ * 表示没有更多数据了。这时滑到最后一条item.显示“没有更多数据了”
+ */
+ public void myNotifyDataSetChanged(boolean hasLoadMore) {
+ this.hasLoadMore = hasLoadMore;
+ this.notifyDataSetChanged();
+ }
+
+ /**
+ * ItemView点击
+ *
+ * @param normalItemView
+ * @param viewHolder
+ */
+ protected void setItemClick(final View normalItemView, final RecyclerView.ViewHolder viewHolder) {
+ if (null != mListener) {
+ normalItemView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mListener.onItemClick(normalItemView, viewHolder.getLayoutPosition());
+ }
+ });
+ }
+ }
+
+ /**
+ * 设置item点击事件监听器
+ *
+ * @param listener
+ */
+ public void setOnItemClickListener(OnItemClickListener listener) {
+ this.mListener = listener;
+ }
+
+ /**
+ * item点击事件回调接口{@link #setOnItemClickListener(OnItemClickListener)}
+ */
+ public interface OnItemClickListener {
+ void onItemClick(View view, int position);
+ }
+
+ /**
+ * 加载更多的ViewHolder
+ */
+ private class LoadMoreViewHolder extends RecyclerView.ViewHolder {
+ TextView tvLoadMore;
+
+ public LoadMoreViewHolder(View itemView) {
+ super(itemView);
+ tvLoadMore = (TextView) itemView.findViewById(R.id.tv_loadmore);
+ }
+ }
+
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/test/CommunityMessageBean.java b/app/src/main/java/com/example/administrator/seven/test/CommunityMessageBean.java
new file mode 100644
index 0000000..90e87c0
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/test/CommunityMessageBean.java
@@ -0,0 +1,222 @@
+package com.example.administrator.seven.test;
+
+import java.util.List;
+
+/**
+ * Created by: xudiwei
+ *
+ * on: 2017/5/9.
+ *
+ * 描述:社群消息实体类
+ */
+
+public class CommunityMessageBean {
+
+ //系统消息
+ private List systemMsg;
+ //邀请消息
+ private List inviteMsg;
+ //审核消息
+ private List checkMsg;
+
+ public List getSystemMsg() {
+ return systemMsg;
+ }
+
+ public void setSystemMsg(List systemMsg) {
+ this.systemMsg = systemMsg;
+ }
+
+ public List getInviteMsg() {
+ return inviteMsg;
+ }
+
+ public void setInviteMsg(List inviteMsg) {
+ this.inviteMsg = inviteMsg;
+ }
+
+ public List getCheckMsg() {
+ return checkMsg;
+ }
+
+ public void setCheckMsg(List checkMsg) {
+ this.checkMsg = checkMsg;
+ }
+
+ public static class MsgBean {
+
+ /**
+ * rcd_id : 129
+ * key_id : 129
+ * user_id : 0
+ * nick_name :
+ * user_identify : 0
+ * group_id : 1
+ * group_name : 听说iOS很牛逼?
+ * im_group_id : ab97e028a5aae8d637cb1a70569638d7
+ * squad_id : 0
+ * squad_name :
+ * squad_im_group_id : 0
+ * img : /Uploads/app_class_img/info_page_size/20170519/591eb5f8cf821.png
+ * title : null
+ * content : 申请加入
+ * msg_type : 6
+ * status : 1
+ * add_time : 1495166305
+ */
+
+ private String rcd_id;
+ private String key_id;
+ private int user_id;
+ private String nick_name;
+ private String user_identify;
+ private String group_id;
+ private String group_name;
+ private String im_group_id;
+ private int squad_id;
+ private String squad_name;
+ private String squad_im_group_id;
+ private String img;
+ private String title;
+ private String content;
+ private int msg_type;
+ private String status;
+ private String add_time;
+
+ public String getRcd_id() {
+ return rcd_id;
+ }
+
+ public void setRcd_id(String rcd_id) {
+ this.rcd_id = rcd_id;
+ }
+
+ public String getKey_id() {
+ return key_id;
+ }
+
+ public void setKey_id(String key_id) {
+ this.key_id = key_id;
+ }
+
+ public int getUser_id() {
+ return user_id;
+ }
+
+ public void setUser_id(int user_id) {
+ this.user_id = user_id;
+ }
+
+ public String getNick_name() {
+ return nick_name;
+ }
+
+ public void setNick_name(String nick_name) {
+ this.nick_name = nick_name;
+ }
+
+ public String getUser_identify() {
+ return user_identify;
+ }
+
+ public void setUser_identify(String user_identify) {
+ this.user_identify = user_identify;
+ }
+
+ public String getGroup_id() {
+ return group_id;
+ }
+
+ public void setGroup_id(String group_id) {
+ this.group_id = group_id;
+ }
+
+ public String getGroup_name() {
+ return group_name;
+ }
+
+ public void setGroup_name(String group_name) {
+ this.group_name = group_name;
+ }
+
+ public String getIm_group_id() {
+ return im_group_id;
+ }
+
+ public void setIm_group_id(String im_group_id) {
+ this.im_group_id = im_group_id;
+ }
+
+ public int getSquad_id() {
+ return squad_id;
+ }
+
+ public void setSquad_id(int squad_id) {
+ this.squad_id = squad_id;
+ }
+
+ public String getSquad_name() {
+ return squad_name;
+ }
+
+ public void setSquad_name(String squad_name) {
+ this.squad_name = squad_name;
+ }
+
+ public String getSquad_im_group_id() {
+ return squad_im_group_id;
+ }
+
+ public void setSquad_im_group_id(String squad_im_group_id) {
+ this.squad_im_group_id = squad_im_group_id;
+ }
+
+ public String getImg() {
+ return img;
+ }
+
+ public void setImg(String img) {
+ this.img = img;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public String getContent() {
+ return content;
+ }
+
+ public void setContent(String content) {
+ this.content = content;
+ }
+
+ public int getMsg_type() {
+ return msg_type;
+ }
+
+ public void setMsg_type(int msg_type) {
+ this.msg_type = msg_type;
+ }
+
+ public String getStatus() {
+ return status;
+ }
+
+ public void setStatus(String status) {
+ this.status = status;
+ }
+
+ public String getAdd_time() {
+ return add_time;
+ }
+
+ public void setAdd_time(String add_time) {
+ this.add_time = add_time;
+ }
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/test/IInviteMessagePresenter.java b/app/src/main/java/com/example/administrator/seven/test/IInviteMessagePresenter.java
new file mode 100644
index 0000000..8f1c29f
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/test/IInviteMessagePresenter.java
@@ -0,0 +1,25 @@
+package com.example.administrator.seven.test;
+
+
+
+import java.util.List;
+
+/**
+ * Created by: xudiwei
+ *
+ * on: 2017/5/9.
+ *
+ * 描述::邀请消息Fragment的presenter接口
+ */
+public interface IInviteMessagePresenter {
+
+ /**
+ * 获取邀请消息刷新
+ */
+ void getInviteMessageRefresh(getstore inviteMessages);
+
+ /**
+ * 获取邀请消息加载更多
+ */
+ void getInviteMessageLoadMore(List inviteMessages);
+}
diff --git a/app/src/main/java/com/example/administrator/seven/test/IInviteMessageView.java b/app/src/main/java/com/example/administrator/seven/test/IInviteMessageView.java
new file mode 100644
index 0000000..316de11
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/test/IInviteMessageView.java
@@ -0,0 +1,21 @@
+package com.example.administrator.seven.test;
+
+/**
+ * Created by: xudiwei
+ *
+ * on: 2017/5/9.
+ *
+ * 描述::邀请消息Fragment的 view接口
+ */
+public interface IInviteMessageView {
+
+ /**
+ * 获取消息结果回调
+ * @param isSuccess 获取消息是否成功
+ * @param hasMore 是还可加载更多
+ * @param errorMsg 错误信息
+ */
+ void getMessageResult(boolean isSuccess, boolean hasMore, String errorMsg);
+
+ void showTextview(getstore inviteMessages);
+}
diff --git a/app/src/main/java/com/example/administrator/seven/test/InviteMessageAdapter.java b/app/src/main/java/com/example/administrator/seven/test/InviteMessageAdapter.java
new file mode 100644
index 0000000..205eff0
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/test/InviteMessageAdapter.java
@@ -0,0 +1,63 @@
+package com.example.administrator.seven.test;
+
+import android.content.Context;
+import android.support.v7.widget.RecyclerView;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+
+import com.example.administrator.seven.R;
+
+import java.util.List;
+
+
+/**
+ * Created by: xudiwei
+ *
+ * on: 2017/5/9.
+ *
+ * 描述:邀请消息列表适配器
+ * @deprecated
+ */
+
+public class InviteMessageAdapter extends BaseRecyclerViewAdapter {
+ private static final String TAG = "InviteMessageAdapter";
+
+ public InviteMessageAdapter(Context context, List list) {
+ super(context, list);
+ }
+
+ @Override
+ public void onBindViewHolderNormalItem(RecyclerView.ViewHolder holder, int position) {
+ AddFriendMessageViewHolder viewHolder = (AddFriendMessageViewHolder) holder;
+ CommunityMessageBean.MsgBean msgBean = mList.get(position);
+ viewHolder.tvNickname.setText(msgBean.getNick_name());
+ viewHolder.tvReason.setText(msgBean.getContent());
+ Log.d(TAG, "msg: " + msgBean.getImg());
+ }
+
+ @Override
+ public RecyclerView.ViewHolder onCreateViewHolderNormalItem(ViewGroup parent, int viewType) {
+ View view = LayoutInflater.from(mContext).inflate(R.layout.item_rv_add_friend_message, parent, false);
+ return new AddFriendMessageViewHolder(view);
+ }
+
+ private class AddFriendMessageViewHolder extends RecyclerView.ViewHolder {
+ TextView tvNickname;
+ TextView tvReason;
+ TextView tvAccept;
+ TextView tvReject;
+
+
+ AddFriendMessageViewHolder(View itemView) {
+ super(itemView);
+ tvNickname = (TextView) itemView.findViewById(R.id.tv_nickname);
+ tvReason = (TextView) itemView.findViewById(R.id.tv_reason);
+ tvAccept = (TextView) itemView.findViewById(R.id.tv_accept);
+ tvReject = (TextView) itemView.findViewById(R.id.tv_reject);
+ }
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/test/RLListPager.java b/app/src/main/java/com/example/administrator/seven/test/RLListPager.java
new file mode 100644
index 0000000..48f3e11
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/test/RLListPager.java
@@ -0,0 +1,173 @@
+package com.example.administrator.seven.test;
+
+import android.content.Context;
+import android.support.v4.widget.SwipeRefreshLayout;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.util.AttributeSet;
+import android.util.TypedValue;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+
+import com.example.administrator.seven.R;
+
+
+/**
+ * 日期:2017.01.21
+ *
+ * 作者:xudiwei
+ *
+ * 描述:SwipeRefreshLayout 与RecyclerView的组合控件
+ */
+public class RLListPager extends FrameLayout {
+
+ private static final String TAG = "RLListPager";
+
+ private SwipeRefreshLayout mRefreshLayout;
+ private RecyclerView mRecyclerView;
+ private OnRLRefreshAndLoadMoreListener mListener;
+ private int loadMoreLimit = 5;
+
+ public RLListPager(Context context) {
+ this(context, null);
+ }
+
+ public RLListPager(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public RLListPager(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ initView();
+ }
+
+ private void initView() {
+ //刷新布局
+ mRefreshLayout = new SwipeRefreshLayout(getContext());
+ mRefreshLayout.setOnRefreshListener(new MyOnRefreshListener());
+ mRefreshLayout.setProgressViewOffset(true, 0,
+ (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 80, getResources().getDisplayMetrics()));
+ mRefreshLayout.setColorSchemeResources(R.color.colorGreen);
+
+ //列表布局
+ mRecyclerView = new RecyclerView(getContext());
+ mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
+ mRefreshLayout.addView(mRecyclerView, new SwipeRefreshLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.MATCH_PARENT));
+
+ this.addView(mRefreshLayout, new LayoutParams(LayoutParams.MATCH_PARENT,
+ LayoutParams.MATCH_PARENT));
+
+ mRecyclerView.addOnScrollListener(new MyOnScrollListener());
+
+ }
+
+ public RecyclerView getRecyclerView() {
+ return mRecyclerView;
+ }
+
+ /**
+ * 设置适配器
+ *
+ * @param adapter
+ */
+ public void setAdapter(RecyclerView.Adapter adapter) {
+ mRecyclerView.setAdapter(adapter);
+ }
+
+ /**
+ * 设置刷新动画
+ *
+ * @param refreshing
+ */
+ public void setRefresh(boolean refreshing) {
+ mRefreshLayout.setRefreshing(refreshing);
+ }
+
+ public boolean isRefresh() {
+ return mRefreshLayout.isRefreshing();
+ }
+
+ public int getLoamoreLimit() {
+ return loadMoreLimit;
+ }
+
+ /**
+ * 设置触发上拉加载更多的最少item默认为5个item才能触发
+ *
+ * @param loadMoreLimit
+ */
+ public void setloadmoreLimit(int loadMoreLimit) {
+ this.loadMoreLimit = loadMoreLimit;
+ }
+
+ /**
+ * 刷新
+ */
+ private class MyOnRefreshListener implements SwipeRefreshLayout.OnRefreshListener {
+ @Override
+ public void onRefresh() {
+ //刷新布局
+ if (null != mListener) {
+ mListener.onRefresh();
+ }
+ }
+ }
+
+ /**
+ * 加载更多
+ */
+ private class MyOnScrollListener extends RecyclerView.OnScrollListener {
+ private LinearLayoutManager mLayoutManager;
+
+ @Override
+ public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
+ super.onScrollStateChanged(recyclerView, newState);
+
+ if (newState == RecyclerView.SCROLL_STATE_IDLE) {
+ if (null == mLayoutManager) {
+ mLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
+ }
+ RecyclerView.Adapter adapter = recyclerView.getAdapter();
+ if (null != adapter) {
+ int itemCount = adapter.getItemCount();
+ if (itemCount > loadMoreLimit && mLayoutManager.findLastVisibleItemPosition() == itemCount - 1) {
+
+ //加载更多
+ if (null != mListener) {
+ mListener.onLoadMore();
+ }
+ }
+ }
+
+ }
+ }
+
+ }
+
+ public void scrollToPositionWithOffset(int position,int offset){
+ mRecyclerView.scrollToPosition(position);
+ mRecyclerView.scrollBy(0,offset);
+
+ }
+
+ public void setOnRLRefreshAndLoadMoreListener(OnRLRefreshAndLoadMoreListener listener) {
+ this.mListener = listener;
+ }
+
+ /**
+ * 刷新加载更多回调接口
+ */
+ public interface OnRLRefreshAndLoadMoreListener {
+
+ /**
+ * 下拉刷新时回调
+ */
+ void onRefresh();
+
+ /**
+ * 上拉加载更多时回调
+ */
+ void onLoadMore();
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/test/getstore.java b/app/src/main/java/com/example/administrator/seven/test/getstore.java
new file mode 100644
index 0000000..f6c28e7
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/test/getstore.java
@@ -0,0 +1,82 @@
+package com.example.administrator.seven.test;
+
+
+import java.util.List;
+
+/**
+ * 项目名:MenDian
+ * 包名:com.fanghoo.mendian.module.data
+ * 创建者:任剑波
+ * 创建时间:2018/9/9 10:30
+ * 描述:TODO
+ */
+public class getstore extends BaseModel {
+
+ /**
+ * status : 0
+ * result : {"success":0,"msg":"获取信息成功","data":[{"store_id":"dd3520f0f40726b849d7cdd7a623e06e","store_name":"店铺3"}]}
+ */
+
+
+
+ /**
+ * success : 0
+ * msg : 获取信息成功
+ * data : [{"store_id":"dd3520f0f40726b849d7cdd7a623e06e","store_name":"店铺3"}]
+ */
+
+ private int success;
+ private String msg;
+ private List data;
+
+ public int getSuccess() {
+ return success;
+ }
+
+ public void setSuccess(int success) {
+ this.success = success;
+ }
+
+ public String getMsg() {
+ return msg;
+ }
+
+ public void setMsg(String msg) {
+ this.msg = msg;
+ }
+
+ public List getData() {
+ return data;
+ }
+
+ public void setData(List data) {
+ this.data = data;
+ }
+
+ public static class DataBean {
+ /**
+ * store_id : dd3520f0f40726b849d7cdd7a623e06e
+ * store_name : 店铺3
+ */
+
+ private String store_id;
+ private String store_name;
+
+ public String getStore_id() {
+ return store_id;
+ }
+
+ public void setStore_id(String store_id) {
+ this.store_id = store_id;
+ }
+
+ public String getStore_name() {
+ return store_name;
+ }
+
+ public void setStore_name(String store_name) {
+ this.store_name = store_name;
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/utils/DensityUtil.java b/app/src/main/java/com/example/administrator/seven/utils/DensityUtil.java
new file mode 100644
index 0000000..ecdf4d0
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/utils/DensityUtil.java
@@ -0,0 +1,42 @@
+package com.example.administrator.seven.utils;
+
+import android.content.Context;
+import android.util.TypedValue;
+
+public class DensityUtil {
+ private DensityUtil() {
+ throw new UnsupportedOperationException("cannot be instantiated");
+ }
+
+ /**
+ * dp转px
+ */
+ public static int dp2px(Context context, float dpVal) {
+ return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
+ dpVal, context.getResources().getDisplayMetrics());
+ }
+
+ /**
+ * sp转px
+ */
+ public static int sp2px(Context context, float spVal) {
+ return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,
+ spVal, context.getResources().getDisplayMetrics());
+ }
+
+ /**
+ * px转dp
+ */
+ public static float px2dp(Context context, float pxVal) {
+ final float scale = context.getResources().getDisplayMetrics().density;
+ return (pxVal / scale);
+ }
+
+ /**
+ * px转sp
+ */
+ public static float px2sp(Context context, float pxVal) {
+ return (pxVal / context.getResources().getDisplayMetrics().scaledDensity);
+ }
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/utils/NetUtils.java b/app/src/main/java/com/example/administrator/seven/utils/NetUtils.java
new file mode 100644
index 0000000..b9a25e0
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/utils/NetUtils.java
@@ -0,0 +1,224 @@
+/*
+ * Copyright (C) 2016 android@19code.com
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.administrator.seven.utils;
+
+import android.app.Activity;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.net.wifi.ScanResult;
+import android.net.wifi.WifiInfo;
+import android.net.wifi.WifiManager;
+import android.telephony.TelephonyManager;
+import android.text.TextUtils;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.List;
+
+/**
+ * Blog : http://blog.csdn.net/u011240877
+ * 网络工具
+ *
+ */
+public class NetUtils {
+
+ public static final String NETWORK_TYPE_WIFI = "wifi";
+ public static final String NETWORK_TYPE_3G = "3g";
+ public static final String NETWORK_TYPE_2G = "2g";
+ public static final String NETWORK_TYPE_WAP = "wap";
+ public static final String NETWORK_TYPE_UNKNOWN = "unknown";
+ public static final String NETWORK_TYPE_DISCONNECT = "disconnect";
+
+ public static int getNetworkType(Context context) {
+ ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ NetworkInfo networkInfo = connectivityManager == null ? null : connectivityManager.getActiveNetworkInfo();
+ return networkInfo == null ? -1 : networkInfo.getType();
+ }
+
+ public static String getNetworkTypeName(Context context) {
+ ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ NetworkInfo networkInfo;
+ String type = NETWORK_TYPE_DISCONNECT;
+ if (manager == null || (networkInfo = manager.getActiveNetworkInfo()) == null) {
+ return type;
+ }
+
+ if (networkInfo.isConnected()) {
+ String typeName = networkInfo.getTypeName();
+ if ("WIFI".equalsIgnoreCase(typeName)) {
+ type = NETWORK_TYPE_WIFI;
+ } else if ("MOBILE".equalsIgnoreCase(typeName)) {
+ //String proxyHost = android.net.Proxy.getDefaultHost();//deprecated
+ String proxyHost = System.getProperty("http.proxyHost");
+ type = TextUtils.isEmpty(proxyHost) ? (isFastMobileNetwork(context) ? NETWORK_TYPE_3G : NETWORK_TYPE_2G) : NETWORK_TYPE_WAP;
+ } else {
+ type = NETWORK_TYPE_UNKNOWN;
+ }
+ }
+ return type;
+ }
+
+ public static boolean isConnected(Context context) {
+ ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ NetworkInfo info = cm.getActiveNetworkInfo();
+ if (info != null && info.isConnected()) {
+ if (info.getState() == NetworkInfo.State.CONNECTED) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public static boolean isNetworkAvailable(Context context) {
+ if (context == null) {
+ return false;
+ }
+ try {
+ ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ if (connectivity != null) {
+ NetworkInfo info = connectivity.getActiveNetworkInfo();
+ return info.isAvailable();
+ }
+ } catch (Exception e) {
+ return false;
+ }
+ return false;
+ }
+
+ public static boolean isWiFi(Context cxt) {
+ ConnectivityManager cm = (ConnectivityManager) cxt.getSystemService(Context.CONNECTIVITY_SERVICE);
+ // wifi的状态:ConnectivityManager.TYPE_WIFI
+ // 3G的状态:ConnectivityManager.TYPE_MOBILE
+ return cm.getActiveNetworkInfo().getType() == ConnectivityManager.TYPE_WIFI;
+ }
+
+ //unchecked
+ public static void openNetSetting(Activity act) {
+ Intent intent = new Intent();
+ ComponentName cm = new ComponentName("com.android.settings", "com.android.settings.WirelessSettings");
+ intent.setComponent(cm);
+ intent.setAction("android.intent.action.VIEW");
+ act.startActivityForResult(intent, 0);
+ }
+
+
+ /**
+ * Whether is fast mobile network
+ */
+
+ private static boolean isFastMobileNetwork(Context context) {
+ TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
+ if (telephonyManager == null) {
+ return false;
+ }
+
+ switch (telephonyManager.getNetworkType()) {
+ case TelephonyManager.NETWORK_TYPE_1xRTT:
+ return false;
+ case TelephonyManager.NETWORK_TYPE_CDMA:
+ return false;
+ case TelephonyManager.NETWORK_TYPE_EDGE:
+ return false;
+ case TelephonyManager.NETWORK_TYPE_EVDO_0:
+ return true;
+ case TelephonyManager.NETWORK_TYPE_EVDO_A:
+ return true;
+ case TelephonyManager.NETWORK_TYPE_GPRS:
+ return false;
+ case TelephonyManager.NETWORK_TYPE_HSDPA:
+ return true;
+ case TelephonyManager.NETWORK_TYPE_HSPA:
+ return true;
+ case TelephonyManager.NETWORK_TYPE_HSUPA:
+ return true;
+ case TelephonyManager.NETWORK_TYPE_UMTS:
+ return true;
+ case TelephonyManager.NETWORK_TYPE_EHRPD:
+ return true;
+ case TelephonyManager.NETWORK_TYPE_EVDO_B:
+ return true;
+ case TelephonyManager.NETWORK_TYPE_HSPAP:
+ return true;
+ case TelephonyManager.NETWORK_TYPE_IDEN:
+ return false;
+ case TelephonyManager.NETWORK_TYPE_LTE:
+ return true;
+ case TelephonyManager.NETWORK_TYPE_UNKNOWN:
+ return false;
+ default:
+ return false;
+ }
+ }
+
+ public static void setWifiEnabled(Context context, boolean enabled) {
+ WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+ wifiManager.setWifiEnabled(enabled);
+ }
+
+ public static void setDataEnabled(Context context, boolean enabled) {
+ ConnectivityManager conMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ Class> conMgrClass = null;
+ Field iConMgrField = null;
+ Object iConMgr = null;
+ Class> iConMgrClass = null;
+ Method setMobileDataEnabledMethod = null;
+ try {
+ conMgrClass = Class.forName(conMgr.getClass().getName());
+ iConMgrField = conMgrClass.getDeclaredField("mService");
+ iConMgrField.setAccessible(true);
+ iConMgr = iConMgrField.get(conMgr);
+ iConMgrClass = Class.forName(iConMgr.getClass().getName());
+ setMobileDataEnabledMethod = iConMgrClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);
+ setMobileDataEnabledMethod.setAccessible(true);
+ setMobileDataEnabledMethod.invoke(iConMgr, enabled);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static List getWifiScanResults(Context context) {
+ WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+ return wifiManager.startScan() ? wifiManager.getScanResults() : null;
+ }
+
+ public static ScanResult getScanResultsByBSSID(Context context, String bssid) {
+ WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+ ScanResult scanResult = null;
+ boolean f = wifiManager.startScan();
+ if (!f) {
+ getScanResultsByBSSID(context, bssid);
+ }
+ List list = wifiManager.getScanResults();
+ if (list != null) {
+ for (int i = 0; i < list.size(); i++) {
+ scanResult = list.get(i);
+ if (scanResult.BSSID.equals(bssid)) {
+ break;
+ }
+ }
+ }
+ return scanResult;
+ }
+
+ public static WifiInfo getWifiConnectionInfo(Context context) {
+ WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+ return wifiManager.getConnectionInfo();
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/utils/SpaceItemDecoration.java b/app/src/main/java/com/example/administrator/seven/utils/SpaceItemDecoration.java
new file mode 100644
index 0000000..073bb71
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/utils/SpaceItemDecoration.java
@@ -0,0 +1,48 @@
+package com.example.administrator.seven.utils;
+
+import android.graphics.Canvas;
+import android.graphics.Rect;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.view.View;
+
+public class SpaceItemDecoration extends RecyclerView.ItemDecoration {
+
+ //leftRight为横向间的距离 topBottom为纵向间距离
+ private int leftRight;
+ private int topBottom;
+
+ public SpaceItemDecoration(int leftRight, int topBottom) {
+ this.leftRight = leftRight;
+ this.topBottom = topBottom;
+ }
+
+ @Override
+ public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
+ super.onDraw(c, parent, state);
+ }
+
+ @Override
+ public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
+ LinearLayoutManager layoutManager = (LinearLayoutManager) parent.getLayoutManager();
+ //竖直方向的
+ if (layoutManager.getOrientation() == LinearLayoutManager.VERTICAL) {
+ //最后一项需要 bottom
+ if (parent.getChildAdapterPosition(view) == layoutManager.getItemCount() - 1) {
+ outRect.bottom = topBottom;
+ }
+ outRect.top = topBottom;
+ outRect.left = leftRight;
+ outRect.right = leftRight;
+ } else {
+ //最后一项需要right
+ if (parent.getChildAdapterPosition(view) == layoutManager.getItemCount() - 1) {
+ outRect.right = leftRight;
+ }
+ outRect.top = topBottom;
+ outRect.left = leftRight;
+ outRect.bottom = topBottom;
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/utils/StatusBarUtils.java b/app/src/main/java/com/example/administrator/seven/utils/StatusBarUtils.java
new file mode 100644
index 0000000..11bb851
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/utils/StatusBarUtils.java
@@ -0,0 +1,49 @@
+package com.example.administrator.seven.utils;
+
+import android.annotation.TargetApi;
+import android.app.Activity;
+import android.os.Build;
+import android.view.Window;
+import android.view.WindowManager;
+
+import com.readystatesoftware.systembartint.SystemBarTintManager;
+
+/**
+ * Created by Administrator on 2016/12/26.
+ *
+ * 作者:xudiwei
+ *
+ * 描述:MIUI 与MEIZI的状态栏字体颜色工具类
+ */
+
+public class StatusBarUtils {
+
+
+ public static void setStateBaeColor(Activity ac , int color ){
+ // 4.4及以上版本开启
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+ setTranslucentStatus(true , ac);
+ }
+
+ SystemBarTintManager tintManager = new SystemBarTintManager(ac);
+ tintManager.setStatusBarTintEnabled(true);
+ tintManager.setNavigationBarTintEnabled(true);
+
+ // 自定义颜色
+ tintManager.setTintColor(color);
+ }
+
+
+ @TargetApi(19)
+ private static void setTranslucentStatus(boolean on , Activity acc) {
+ Window win = acc.getWindow();
+ WindowManager.LayoutParams winParams = win.getAttributes();
+ final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
+ if (on) {
+ winParams.flags |= bits;
+ } else {
+ winParams.flags &= ~bits;
+ }
+ win.setAttributes(winParams);
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/utils/ToolsUtils.java b/app/src/main/java/com/example/administrator/seven/utils/ToolsUtils.java
new file mode 100644
index 0000000..630a17b
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/utils/ToolsUtils.java
@@ -0,0 +1,464 @@
+/*
+ *******************************************
+ * File: WidgetTools.java
+ * Author: Lijc
+ * Date: 2015-3-20
+ * Company: BlueMobi
+ ********************************************/
+package com.example.administrator.seven.utils;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Paint;
+import android.text.Editable;
+import android.text.Selection;
+import android.text.Spannable;
+import android.text.SpannableString;
+import android.text.TextUtils;
+import android.text.TextWatcher;
+import android.text.style.ImageSpan;
+import android.util.DisplayMetrics;
+import android.util.SparseArray;
+import android.view.View;
+import android.widget.Button;
+import android.widget.CheckBox;
+import android.widget.EditText;
+import android.widget.RadioButton;
+import android.widget.TextView;
+import android.widget.Toast;
+
+/**
+ *
+ * @ClassName: WidgetTools
+ * @Description: TODO(描述: Widget工具类)
+ * @author Lijc
+ * @Company: BlueMobi
+ * @date 2015年4月3日 下午6:04:29
+ * @version V1.0
+ *
+ * >>>使用说明:
+ *
+ * 1.setText()可用于TextView,Button,CheckBox,RadioButton,EditText;
+ *
+ * 2.setUnderline() 在文字下面设置下划线
+ *
+ * 3.setDeleteline() 在文字上设置删除线
+ *
+ * 4.getText() 获取文字
+ *
+ * 5.get() ViewHolder 简洁模式
+ *
+ * 6.spanText() 文字前面插入图片
+ *
+ * 7.DisplayImage()获取设置图片
+ *
+ * 8.formatMoney() 格式化显示金额
+ *
+ * 9.getAppCode() 获取版本code
+ */
+public class ToolsUtils {
+
+ private static long lastClickTime;
+
+ /**
+ * 连续点击
+ *
+ * @return
+ */
+ public static boolean isFastDoubleClick() {
+ long time = System.currentTimeMillis();
+ long timeD = time - lastClickTime;
+ if (0 < timeD && timeD < 1000) {
+ return true;
+ }
+ lastClickTime = time;
+ return false;
+ }
+
+ /**
+ * @Title: getText @Description: TODO @param tv @param text @return
+ * void @throws
+ */
+ public static String getText(View v) {
+ if (v instanceof TextView) {// TextView
+ return ((TextView) v).getText().toString();
+ }
+ if (v instanceof Button) {// Button
+ return ((Button) v).getText().toString();
+ }
+ if (v instanceof CheckBox) {// CheckBox
+ return ((CheckBox) v).getText().toString();
+ }
+ if (v instanceof RadioButton) {// RadioButton
+ return ((RadioButton) v).getText().toString();
+ }
+ if (v instanceof EditText) {// EditText
+ return ((EditText) v).getText().toString();
+ }
+ return "";
+ }
+
+ /**
+ * @Title: setText @Description: TODO 设置TextView的text 为空时默认显示 -- @param
+ * tv @param text @return void @throws
+ */
+ public static void setText(View v, String text) {
+ setText(v, text, "");
+ }
+
+ /**
+ * @Title: setText @Description: TODO 设置TextView的text @param tv @param
+ * text @param defaultText 默认显示 @return void @throws
+ */
+ public static void setText(View v, String text, String defaultText) {
+ if (TextUtils.isEmpty(text))
+ text = defaultText;
+ if (v instanceof TextView) {// TextView
+ ((TextView) v).setText(text);
+ return;
+ }
+ if (v instanceof Button) {// Button
+ ((Button) v).setText(text);
+ return;
+ }
+ if (v instanceof CheckBox) {// CheckBox
+ ((CheckBox) v).setText(text);
+ return;
+ }
+ if (v instanceof RadioButton) {// RadioButton
+ ((RadioButton) v).setText(text);
+ return;
+ }
+ if (v instanceof EditText) {// EditText
+ ((EditText) v).setText(text);
+ return;
+ }
+
+ }
+
+ /**
+ * @Title: setText @Description: TODO String资源文件的format方法 @param @param
+ * tv @param @param context @param @param text @param @param
+ * resId @return void @throws
+ */
+ public static void setText(View v, Context context, String text, int resId) {
+ String format = context.getResources().getString(resId);
+ setText(v, String.format(format, text));
+ }
+
+ /**
+ * @Title: setText @Description: TODO String资源文件的format方法 @param tv @param
+ * context @param i @param resId @return void @throws
+ */
+ public static void setText(View v, Context context, int i, int resId) {
+ String format = context.getResources().getString(resId);
+ setText(v, String.format(format, i));
+ }
+
+ /**
+ * @Title: setText @Description: TODO String资源文件的format方法 @param @param
+ * tv @param @param context @param @param text1 @param @param
+ * text2 @param @param resId @return void @throws
+ */
+ public static void setText(View v, Context context, String text1, String text2, int resId) {
+ String format = context.getResources().getString(resId);
+ setText(v, String.format(format, text1, text2));
+ }
+
+ /**
+ * @Title: setText @Description: TODO String资源文件的format方法 @param @param
+ * tv @param @param context @param @param i1 @param @param
+ * i2 @param @param resId @return void @throws
+ */
+ public static void setText(View v, Context context, int i1, int i2, int resId) {
+ String format = context.getResources().getString(resId);
+ setText(v, String.format(format, i1, i2));
+ }
+
+ /**
+ * @Title: setTextViewStyle @Description: TODO 优惠价格 @param tv @param
+ * text @return void @throws
+ */
+ public static void setTextViewStyle(TextView tv) {
+ tv.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);
+ }
+
+ /**
+ * @Title: setUnderline @Description: TODO 下划线 @param tv @param text @return
+ * void @throws
+ */
+ public static void setUnderline(View v) {
+ if (v instanceof TextView) {// TextView
+ ((TextView) v).getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);
+ ((TextView) v).getPaint().setAntiAlias(true);
+ return;
+ }
+ if (v instanceof Button) {// Button
+ ((Button) v).getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);
+ ((Button) v).getPaint().setAntiAlias(true);
+ return;
+ }
+ if (v instanceof CheckBox) {// CheckBox
+ ((CheckBox) v).getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);
+ ((CheckBox) v).getPaint().setAntiAlias(true);
+ return;
+ }
+ if (v instanceof RadioButton) {// RadioButton
+ ((RadioButton) v).getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);
+ ((RadioButton) v).getPaint().setAntiAlias(true);
+ return;
+ }
+ if (v instanceof EditText) {// EditText
+ ((EditText) v).getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);
+ ((EditText) v).getPaint().setAntiAlias(true);
+ return;
+ }
+
+ }
+
+ /**
+ * @Title: setDelline @Description: TODO 删除线 @param tv @param text @return
+ * void @throws
+ */
+ public static void setDeleteline(View v) {
+ if (v instanceof TextView) {// TextView
+ ((TextView) v).getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);
+ ((TextView) v).getPaint().setAntiAlias(true);
+ return;
+ }
+ if (v instanceof Button) {// Button
+ ((Button) v).getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);
+ ((Button) v).getPaint().setAntiAlias(true);
+ return;
+ }
+ if (v instanceof CheckBox) {// CheckBox
+ ((CheckBox) v).getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);
+ ((CheckBox) v).getPaint().setAntiAlias(true);
+ return;
+ }
+ if (v instanceof RadioButton) {// RadioButton
+ ((RadioButton) v).getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);
+ ((RadioButton) v).getPaint().setAntiAlias(true);
+ return;
+ }
+ if (v instanceof EditText) {// EditText
+ ((EditText) v).getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);
+ ((EditText) v).getPaint().setAntiAlias(true);
+ return;
+ }
+ }
+
+ /**
+ * @TODO ViewHodler简写模式
+ * @param view
+ * @param id
+ * @return
+ */
+ public T get(View view, int id) {
+ SparseArray viewHolder = (SparseArray) view.getTag();
+ if (viewHolder == null) {
+ viewHolder = new SparseArray<>();
+ view.setTag(viewHolder);
+ }
+ View childView = viewHolder.get(id);
+ if (childView == null) {
+ childView = view.findViewById(id);
+ viewHolder.put(id, childView);
+ }
+ return (T) childView;
+ }
+
+ /**
+ *
+ * @param context
+ * @param v
+ * @param drawableId
+ * @param text
+ */
+ public static void spanText(Context context, View v, int drawableId, String text) {
+ Bitmap b = BitmapFactory.decodeResource(context.getResources(), drawableId);
+ ImageSpan imgSpan = new ImageSpan(context, b);
+ SpannableString spanString = new SpannableString("ic");
+ spanString.setSpan(imgSpan, 0, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+ if (v instanceof TextView) {// TextView
+ ((TextView) v).setText(spanString);
+ ((TextView) v).append(text);
+ return;
+ }
+ if (v instanceof Button) {// Button
+ ((Button) v).setText(spanString);
+ ((Button) v).append(text);
+ return;
+ }
+ if (v instanceof CheckBox) {// CheckBox
+ ((CheckBox) v).setText(spanString);
+ ((CheckBox) v).append(text);
+ return;
+ }
+ if (v instanceof RadioButton) {// RadioButton
+ ((RadioButton) v).setText(spanString);
+ ((RadioButton) v).append(text);
+ return;
+ }
+ if (v instanceof EditText) {// EditText
+ ((EditText) v).setText(spanString);
+ ((EditText) v).append(text);
+ return;
+ }
+ }
+
+ /**
+ * 获取应用版本code
+ *
+ * @param ctx
+ * @return
+ */
+ public static int getAppCode(Context ctx) {
+ try {
+ PackageManager packageManager = ctx.getPackageManager();
+ PackageInfo packInfo = packageManager.getPackageInfo(ctx.getPackageName(), 0);
+ return packInfo.versionCode;
+ } catch (NameNotFoundException e) {
+ // TODO Auto-generated catch block
+ return 0;
+ }
+
+ }
+
+ /**
+ * 2 * 获取版本号
+ * 3 * @return 当前应用的版本号
+ * 4
+ */
+ public static String getVersion(Context ctx) {
+ try {
+ PackageManager manager = ctx.getPackageManager();
+ PackageInfo info = manager.getPackageInfo(ctx.getPackageName(), 0);
+ return "V"+info.versionName;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return "";
+ }
+ }
+
+ /**
+ * px转dp
+ *
+ * @param poContext
+ * @param pxValue
+ * @return
+ */
+ public static int px2dip(Context poContext, float pxValue) {
+ final float scale = poContext.getResources().getDisplayMetrics().density;
+ return (int) (pxValue / scale + 0.5f);
+ }
+
+ /**
+ * dp转px
+ *
+ * @param poContext
+ * @param dpValue
+ * @return
+ */
+ public static int dip2px(Context poContext, float dpValue) {
+ final float scale = poContext.getResources().getDisplayMetrics().density;
+ return (int) (dpValue * scale + 0.5f);
+ }
+
+ /**
+ * 将px值转换为sp值,保证文字大小不变
+ *
+ * @param pxValue
+ * @param
+ * (DisplayMetrics类中属性scaledDensity)
+ * @return
+ */
+ public static int px2sp(Context context, float pxValue) {
+ final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
+ return (int) (pxValue / fontScale + 0.5f);
+ }
+
+ public static int getScreenWidth(Activity poActivity) {
+ DisplayMetrics metric = new DisplayMetrics();
+ poActivity.getWindowManager().getDefaultDisplay().getMetrics(metric);
+ // int width = metric.widthPixels; // 屏幕宽度(像素)
+ // int height = metric.heightPixels; // 屏幕高度(像素)
+ // float density = metric.density; // 屏幕密度(0.75 / 1.0 / 1.5)
+ // int densityDpi = metric.densityDpi;
+ return metric.widthPixels;
+ }
+
+ public static int getScreenHeight(Activity poActivity) {
+ DisplayMetrics metric = new DisplayMetrics();
+ poActivity.getWindowManager().getDefaultDisplay().getMetrics(metric);
+ // int width = metric.widthPixels; // 屏幕宽度(像素)
+ // int height = metric.heightPixels; // 屏幕高度(像素)
+ // float density = metric.density; // 屏幕密度(0.75 / 1.0 / 1.5)
+ // int densityDpi = metric.densityDpi;
+ return metric.heightPixels;
+ }
+
+
+ /**
+ * 设置 编辑文本的长度
+ * @param mContext
+ * @param editText
+ * @param lens
+ */
+ public static void setEditTextLenth(final Activity mContext,final EditText editText,final int lens) {
+ /**
+ * 设置商品描述的字数最多为140个字符
+ */
+ editText.addTextChangedListener(new TextWatcher() {
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before, int count) {
+ // TODO Auto-generated method stub
+ Editable editable = editText.getText();
+ int len = editable.length();
+ editText.setText("(" + editable.length() + "/" + 140 + ")");
+ if (len > lens) {
+ Toast.makeText(mContext, "最多140个字符", Toast.LENGTH_SHORT).show();
+ int selEndIndex = Selection.getSelectionEnd(editable);
+ String str = editable.toString();
+ String newStr = str.substring(0, 140);// 截取新字符串
+ editText.setText(newStr);
+ editable = editText.getText();
+ int newLen = editable.length();// 新字符串的长度
+ // 旧光标位置超过字符串长度
+ if (selEndIndex > newLen) {
+ selEndIndex = editable.length();
+ }
+ Selection.setSelection(editable, selEndIndex);// 设置新光标所在的位置
+ }
+ }
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+ // TODO Auto-generated method stub
+ }
+
+ @Override
+ public void afterTextChanged(Editable s) {
+ // TODO Auto-generated method stub
+ String strTmp = s.toString();
+// String tmp = EmojiFilter.filterEmoji(strTmp);
+// if (!strTmp.trim().equals("") && !strTmp.equals(tmp)) {
+// editText.setText(tmp);
+// editText.invalidate();
+// Toast.makeText(mContext, "暂不支持表情输入", Toast.LENGTH_SHORT).show();
+// }
+ if (s instanceof Spannable) {// 改变光标的位置到最后
+ Spannable spanText = (Spannable) s;
+ Selection.setSelection(spanText, s.length());
+ }
+ }
+ });
+ }
+
+
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/utils/UiUtils.java b/app/src/main/java/com/example/administrator/seven/utils/UiUtils.java
new file mode 100644
index 0000000..12b99a4
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/utils/UiUtils.java
@@ -0,0 +1,32 @@
+
+package com.example.administrator.seven.utils;
+
+import android.content.Context;
+import android.util.DisplayMetrics;
+import android.view.WindowManager;
+
+public class UiUtils {
+
+ static public int getScreenWidthPixels(Context context) {
+ DisplayMetrics dm = new DisplayMetrics();
+ ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay()
+ .getMetrics(dm);
+ return dm.widthPixels;
+ }
+
+ static public int dipToPx(Context context, int dip) {
+ return (int) (dip * getScreenDensity(context) + 0.5f);
+ }
+
+ static public float getScreenDensity(Context context) {
+ try {
+ DisplayMetrics dm = new DisplayMetrics();
+ ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay()
+ .getMetrics(dm);
+ return dm.density;
+ } catch (Exception e) {
+ return DisplayMetrics.DENSITY_DEFAULT;
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/utils/VerificationUtils.java b/app/src/main/java/com/example/administrator/seven/utils/VerificationUtils.java
new file mode 100644
index 0000000..1a31a7d
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/utils/VerificationUtils.java
@@ -0,0 +1,26 @@
+package com.example.administrator.seven.utils;
+
+import android.text.TextUtils;
+
+public class VerificationUtils {
+
+ /**
+ * 验证手机格式
+ */
+ public static boolean isMobile(String number) {
+ /*
+ 移动:134、135、136、137、138、139、150、151、152、157(TD)、158、159、178(新)、182、184、187、188
+ 联通:130、131、132、152、155、156、185、186
+ 电信:133、153、170、173、177、180、181、189、(1349卫通)
+ 总结起来就是第一位必定为1,第二位必定为3或5或8,其他位置的可以为0-9
+ */
+ String num = "[1][34578]\\d{9}";//"[1]"代表第1位为数字1,"[34578]"代表第二位可以为3、4、5、7、8中的一个,"\\d{9}"代表后面是可以是0~9的数字,有9位。
+ if (TextUtils.isEmpty(number)) {
+ return false;
+ } else {
+ //matches():字符串是否在给定的正则表达式匹配
+ return number.matches(num);
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/utils/WebViewJavaScriptFunction.java b/app/src/main/java/com/example/administrator/seven/utils/WebViewJavaScriptFunction.java
new file mode 100644
index 0000000..2749d37
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/utils/WebViewJavaScriptFunction.java
@@ -0,0 +1,6 @@
+package com.example.administrator.seven.utils;
+
+public interface WebViewJavaScriptFunction {
+
+ void onJsFunctionCalled(String tag);
+}
diff --git a/app/src/main/java/com/example/administrator/seven/utils/WidgetTools.java b/app/src/main/java/com/example/administrator/seven/utils/WidgetTools.java
new file mode 100644
index 0000000..c87f738
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/utils/WidgetTools.java
@@ -0,0 +1,136 @@
+/*
+ *******************************************
+ * File: WidgetTools.java
+ * Author: Lijc
+ * Date: 2015-3-20
+ * Company: BlueMobi
+ ********************************************/
+package com.example.administrator.seven.utils;
+
+import android.content.Context;
+import android.text.TextUtils;
+import android.widget.EditText;
+import android.widget.TextView;
+
+public class WidgetTools {
+ /**
+ * @Title: setText
+ * @Description: TODO 设置TextView的text 为空时默认显示 --
+ * @param tv
+ * @param text
+ * @return void
+ * @throws
+ */
+ public static void setText(TextView tv, String text) {
+ if ("null".equals(text) || "".equals(text)||null == text) {
+ setText(tv, "— —", "— —");
+ } else {
+ setText(tv, text, "— —");
+ }
+
+ }
+
+ public static void setEditText(EditText tv, String text1,String test2) {
+ if (("null".equals(text1) || "".equals(text1)||null == text1)&&"null".equals(test2) || "".equals(test2)||null == test2) {
+ setText(tv, text1+test2, "");
+ } else {
+ setText(tv, text1+test2, "");
+ }
+
+ }
+
+ //viewpage滑动折叠卡片效果
+ public static void setTexttwo(TextView tv, String text,String texttwo) {
+ if ("null".equals(text) || "".equals(text)||null == text) {
+ setText(tv, texttwo+"— —", texttwo+"— —");
+ } else {
+ setText(tv, texttwo+text, texttwo+"— —");
+ }
+
+ }
+
+
+ public static void setTextfive(TextView tv,String mctext, String text) {
+ if ("null".equals(text) || "".equals(text)||null == text) {
+ setText(tv, mctext+"— —", mctext+"— —");
+ } else {
+ setText(tv,mctext+text, mctext+"— —");
+ }
+
+ }
+ public static void setTextsix(TextView tv,String mctext, String text) {
+ if ("null".equals(text) || "".equals(text)||null == text) {
+ setText(tv, mctext+"00:00", mctext+"00:00");
+ } else {
+ setText(tv,mctext+text, mctext+"00:00");
+ }
+
+ }
+ /**
+ * @Title: setText
+ * @Description: TODO 设置TextView的text
+ * @param tv
+ * @param text
+ * @param defaultText
+ * 默认显示
+ * @return void
+ * @throws
+ */
+ public static void setText(TextView tv, String text, String defaultText) {
+ if (TextUtils.isEmpty(text)) {
+ tv.setText(defaultText);
+ } else {
+ tv.setText(text);
+ }
+ }
+
+ /**
+ * @Title: setText
+ * @Description: TODO String资源文件的format方法
+ * @param @param tv
+ * @param @param context
+ * @param @param text
+ * @param @param resId
+ * @return void
+ * @throws
+ */
+ public static void setText(TextView tv, Context context, String text,
+ int resId) {
+ String format = context.getResources().getString(resId);
+ tv.setText(String.format(format, text));
+ }
+
+ /**
+ * @Title: setText
+ * @Description: TODO String资源文件的format方法
+ * @param tv
+ * @param context
+ * @param i
+ * @param resId
+ * @return void
+ * @throws
+ */
+ public static void setText(TextView tv, Context context, int i, int resId) {
+ String format = context.getResources().getString(resId);
+ tv.setText(String.format(format, i));
+ }
+
+ /**
+ * @Title: setText
+ * @Description: TODO String资源文件的format方法
+ * @param @param tv
+ * @param @param context
+ * @param @param text1
+ * @param @param text2
+ * @param @param resId
+ * @return void
+ * @throws
+ */
+ public static void setText(TextView tv, Context context, String text1,
+ String text2, int resId) {
+ String format = context.getResources().getString(resId);
+ tv.setText(String.format(format, text1, text2));
+ }
+
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/utils/X5WebView.java b/app/src/main/java/com/example/administrator/seven/utils/X5WebView.java
new file mode 100644
index 0000000..5553614
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/utils/X5WebView.java
@@ -0,0 +1,91 @@
+package com.example.administrator.seven.utils;
+
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.util.AttributeSet;
+import android.widget.TextView;
+
+import com.tencent.smtt.sdk.WebSettings;
+import com.tencent.smtt.sdk.WebView;
+import com.tencent.smtt.sdk.WebViewClient;
+
+
+public class X5WebView extends WebView {
+ TextView title;
+ private WebViewClient client = new WebViewClient() {
+ /**
+ * 防止加载网页时调起系统浏览器
+ */
+ public boolean shouldOverrideUrlLoading(WebView view, String url) {
+ view.loadUrl(url);
+ return true;
+ }
+ };
+
+ @SuppressLint("SetJavaScriptEnabled")
+ public X5WebView(Context arg0, AttributeSet arg1) {
+ super(arg0, arg1);
+ this.setWebViewClient(client);
+ // this.setWebChromeClient(chromeClient);
+ // WebStorage webStorage = WebStorage.getInstance();
+ initWebViewSettings();
+ this.getView().setClickable(true);
+ }
+
+ private void initWebViewSettings() {
+ WebSettings webSetting = this.getSettings();
+ webSetting.setJavaScriptEnabled(true);
+ webSetting.setJavaScriptCanOpenWindowsAutomatically(true);
+ webSetting.setAllowFileAccess(true);
+ webSetting.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
+ webSetting.setSupportZoom(true);
+ webSetting.setBuiltInZoomControls(true);
+ webSetting.setUseWideViewPort(true);
+ webSetting.setSupportMultipleWindows(true);
+ // webSetting.setLoadWithOverviewMode(true);
+ webSetting.setAppCacheEnabled(true);
+ // webSetting.setDatabaseEnabled(true);
+ webSetting.setDomStorageEnabled(true);
+ webSetting.setGeolocationEnabled(true);
+ webSetting.setAppCacheMaxSize(Long.MAX_VALUE);
+ // webSetting.setPageCacheCapacity(IX5WebSettings.DEFAULT_CACHE_CAPACITY);
+ webSetting.setPluginState(WebSettings.PluginState.ON_DEMAND);
+ // webSetting.setRenderPriority(WebSettings.RenderPriority.HIGH);
+ webSetting.setCacheMode(WebSettings.LOAD_NO_CACHE);
+
+ // this.getSettingsExtension().setPageCacheCapacity(IX5WebSettings.DEFAULT_CACHE_CAPACITY);//extension
+ // settings 的设计
+ }
+
+// @Override
+// protected boolean drawChild(Canvas canvas, View child, long drawingTime) {
+// boolean ret = super.drawChild(canvas, child, drawingTime);
+// canvas.save();
+// Paint paint = new Paint();
+// paint.setColor(0x7fff0000);
+// paint.setTextSize(24.f);
+// paint.setAntiAlias(true);
+// if (getX5WebViewExtension() != null) {
+// canvas.drawText(this.getContext().getPackageName() + "-pid:"
+// + android.os.Process.myPid(), 10, 50, paint);
+// canvas.drawText(
+// "X5 Core:" + QbSdk.getTbsVersion(this.getContext()), 10,
+// 100, paint);
+// } else {
+// canvas.drawText(this.getContext().getPackageName() + "-pid:"
+// + android.os.Process.myPid(), 10, 50, paint);
+// canvas.drawText("Sys Core", 10, 100, paint);
+// }
+// canvas.drawText(Build.MANUFACTURER, 10, 150, paint);
+// canvas.drawText(Build.MODEL, 10, 200, paint);
+// canvas.restore();
+// return ret;
+// }
+
+ public X5WebView(Context arg0) {
+ super(arg0);
+ setBackgroundColor(85621);
+ }
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/utils/checkVersionsUtils/ProfileSpUtils.java b/app/src/main/java/com/example/administrator/seven/utils/checkVersionsUtils/ProfileSpUtils.java
new file mode 100644
index 0000000..65f9b74
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/utils/checkVersionsUtils/ProfileSpUtils.java
@@ -0,0 +1,191 @@
+package com.example.administrator.seven.utils.checkVersionsUtils;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.text.TextUtils;
+
+import com.example.administrator.seven.main.entity.mine.TreeUserEntity;
+import com.example.administrator.seven.main.entity.mine.UserHeadEntity;
+import com.google.gson.Gson;
+
+/**
+ * ProfileSpUtils
+ * (๑• . •๑)
+ * 类描述:轻量级资料存储工具
+ * Created by LeiXiaoXing on 2017/4/11 11:01
+ */
+public class ProfileSpUtils {
+ private static final String SP_NAME = "user_profile";
+ private static final String SP_NAME_SHOW_ADD_FRIEND_RED="show_red_dot";
+ private static final String SP_PUSH_NAME="user_push";
+ /**
+ * 用户设置信息存储
+ */
+ private static final String SETTING_SP_NAME = "user_setting";
+ private static final String KEY_USER = "User";
+ private static final String KEY_HEAD = "head_img";
+ private static final String KEY_LOGIN = "login";
+ /**
+ * 手机号
+ */
+ private static final String KEY_MOBILE = "MOBILE";
+ /**
+ * 密码
+ */
+ private static final String KEY_PASSWORD = "PASSWORD";
+ private static ProfileSpUtils ourInstance = null;
+ /**
+ * 小米和华为推送相关id
+ */
+ private static final String KEY_MI_PUSH="regId";
+ private static final String KEY_HW_PUSH="tmId";
+
+ private static SharedPreferences sharedPreferences;
+ private static SharedPreferences settingSharedPreferences;
+ private static SharedPreferences showAddFriendRedSharedPreferences;
+ private static SharedPreferences pushSharedPreferences;//小米和华为;
+
+ private boolean isFirst = true;//是否是第一次登陆
+
+ public ProfileSpUtils() {
+ }
+
+ public static ProfileSpUtils getInstance() {
+ if (ourInstance == null) {
+ synchronized (ProfileSpUtils.class) {
+ if (ourInstance == null) {
+ ourInstance = new ProfileSpUtils();
+ }
+ }
+ }
+
+ return ourInstance;
+ }
+
+ /**
+ * 初始化
+ *
+ * @param context 上下文对象,建议使用Application的Context
+ */
+ public static void init(Context context) {
+ sharedPreferences = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE);
+ settingSharedPreferences = context.getSharedPreferences(SETTING_SP_NAME, Context.MODE_PRIVATE);
+ showAddFriendRedSharedPreferences=context.getSharedPreferences(SP_NAME_SHOW_ADD_FRIEND_RED,
+ Context.MODE_PRIVATE);
+ pushSharedPreferences=context.getSharedPreferences(SP_PUSH_NAME, Context.MODE_PRIVATE);
+ }
+
+ /**
+ * 保存用户登录状态
+ *
+ * @param isLogin 用户登录状态
+ */
+ public void saveLoginSatus(boolean isLogin) {
+ SharedPreferences.Editor edit = sharedPreferences.edit();
+ if (!isLogin) {
+ //退出的登录,清除用户数据
+ edit.clear();
+ }
+
+ edit.putBoolean(KEY_LOGIN, isLogin)
+ .apply();
+ }
+
+
+
+
+
+
+ /**
+ * 记住密码
+ */
+ public void savePassword(String mobile, String password) {
+ settingSharedPreferences.edit()
+ .putString(KEY_MOBILE, mobile)
+ .putString(KEY_PASSWORD, password)
+ .apply();
+ }
+
+ /**
+ * 获取保存的用户账号
+ *
+ * @return
+ */
+ public String getKeyMobile() {
+ return settingSharedPreferences.getString(KEY_MOBILE, "");
+ }
+
+ /**
+ * 获取保存的密码
+ *
+ * @return
+ */
+ public String getKeyPassword() {
+ return settingSharedPreferences.getString(KEY_PASSWORD, "");
+ }
+
+ /**
+ * 获取用户登录状态
+ *
+ * @return 用户登录状态
+ */
+ public boolean isLogin() {
+ return sharedPreferences.getBoolean(KEY_LOGIN, false);
+ }
+
+
+ /**
+ * 保存用户资料
+ *
+ * @param loginbean 用户资料实体类
+ */
+// public void saveProfile(LoginBean loginbean) {
+// //头像数据转存
+// LoginBean loginBean = new LoginBean();
+// loginBean.getResult().getData().setHead_img(loginbean.getResult().getData().getHead_img());
+
+
+
+// loginBean.setHome_Page_Size(treeUserEntity.getHome_Page_Size());
+// loginBean.setOrigin(treeUserEntity.getOrigin_img());
+// loginBean.setInfo_page_size(treeUserEntity.getInfo_page_size());
+// loginBean.setUser_list_size(treeUserEntity.getUser_list_size());
+//
+// sharedPreferences.edit()
+// .putString(KEY_USER, new Gson().toJson(treeUserEntity))
+// .putString(KEY_HEAD, new Gson().toJson(userHeadEntity))
+// .apply();
+
+ /**
+ * 获取SP存储的用户资料
+ *
+ * @return SP存储的用户资料
+ */
+ public TreeUserEntity getUserProfie() {
+ String userStr = sharedPreferences.getString(KEY_USER, "");
+ if (TextUtils.isEmpty(userStr)) {
+ return new TreeUserEntity();
+ }
+ return new Gson().fromJson(userStr, TreeUserEntity.class);
+ }
+
+ /**
+ * 保存用户资料
+ *
+ * @param treeUserEntity 用户资料实体类
+ */
+ public void saveProfile(TreeUserEntity treeUserEntity) {
+ //头像数据转存
+ UserHeadEntity userHeadEntity = new UserHeadEntity();
+ userHeadEntity.setHome_Page_Size(treeUserEntity.getHome_Page_Size());
+ userHeadEntity.setOrigin(treeUserEntity.getOrigin_img());
+ userHeadEntity.setInfo_page_size(treeUserEntity.getInfo_page_size());
+ userHeadEntity.setUser_list_size(treeUserEntity.getUser_list_size());
+
+ sharedPreferences.edit()
+ .putString(KEY_USER, new Gson().toJson(treeUserEntity))
+ .putString(KEY_HEAD, new Gson().toJson(userHeadEntity))
+ .apply();
+
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/view/DynamicWave.java b/app/src/main/java/com/example/administrator/seven/view/DynamicWave.java
new file mode 100644
index 0000000..ddfbcae
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/view/DynamicWave.java
@@ -0,0 +1,137 @@
+
+package com.example.administrator.seven.view;
+
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.DrawFilter;
+import android.graphics.Paint;
+import android.graphics.Paint.Style;
+import android.graphics.PaintFlagsDrawFilter;
+import android.util.AttributeSet;
+import android.view.View;
+
+import com.example.administrator.seven.utils.UiUtils;
+
+
+public class DynamicWave extends View {
+
+ /// 波纹颜色
+ // private static final int WAVE_PAINT_COLOR = 0x880000aa;
+ private static final int WAVE_PAINT_COLOR = 0xFFFFF8F0;
+ // y = Asin(wx+b)+h
+ private static final float STRETCH_FACTOR_A = 20;
+ private static final int OFFSET_Y = 0;
+ // 第一条水波移动速度
+ private static final int TRANSLATE_X_SPEED_ONE = 7;
+ // 第二条水波移动速度
+ private static final int TRANSLATE_X_SPEED_TWO = 5;
+ private float mCycleFactorW;
+
+ private int mTotalWidth, mTotalHeight;
+ private float[] mYPositions;
+ private float[] mResetOneYPositions;
+ private float[] mResetTwoYPositions;
+ private int mXOffsetSpeedOne;
+ private int mXOffsetSpeedTwo;
+ private int mXOneOffset;
+ private int mXTwoOffset;
+
+ private Paint mWavePaint;
+ private DrawFilter mDrawFilter;
+
+ public DynamicWave(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ // 将dp转化为px,用于控制不同分辨率上移动速度基本一致
+ mXOffsetSpeedOne = UiUtils.dipToPx(context, TRANSLATE_X_SPEED_ONE);
+ mXOffsetSpeedTwo = UiUtils.dipToPx(context, TRANSLATE_X_SPEED_TWO);
+
+ // 初始绘制波纹的画笔
+ mWavePaint = new Paint();
+ // 去除画笔锯齿
+ mWavePaint.setAntiAlias(true);
+ // 设置风格为实线
+ mWavePaint.setStyle(Style.FILL);
+ // 设置画笔颜色
+ // mWavePaint.setColor(WAVE_PAINT_COLOR);
+ mWavePaint.setColor(Color.parseColor("#80ffffff"));//50%
+// mWavePaint.setColor(Color.parseColor("#73ffffff"));//45%
+// mWavePaint.setColor(Color.parseColor("#66ffffff"));//40%
+// mWavePaint.setColor(Color.parseColor("#59ffffff"));//35%
+// mWavePaint.setColor(Color.parseColor("#4dffffff"));//30%
+ mDrawFilter = new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ super.onDraw(canvas);
+ // 从canvas层面去除绘制时锯齿
+ canvas.setDrawFilter(mDrawFilter);
+ resetPositonY();
+ for (int i = 0; i < mTotalWidth; i++) {
+
+ // 减400只是为了控制波纹绘制的y的在屏幕的位置,大家可以改成一个变量,然后动态改变这个变量,从而形成波纹上升下降效果
+ // 绘制第一条水波纹
+ canvas.drawLine(i, mTotalHeight - mResetOneYPositions[i] - 80, i,
+ mTotalHeight,
+ mWavePaint);
+
+ // 绘制第二条水波纹
+ canvas.drawLine(i, mTotalHeight - mResetTwoYPositions[i] - 80, i,
+ mTotalHeight,
+ mWavePaint);
+ }
+
+ // 改变两条波纹的移动点
+ mXOneOffset += mXOffsetSpeedOne;
+ mXTwoOffset += mXOffsetSpeedTwo;
+
+ // 如果已经移动到结尾处,则重头记录
+ if (mXOneOffset >= mTotalWidth) {
+ mXOneOffset = 0;
+ }
+ if (mXTwoOffset > mTotalWidth) {
+ mXTwoOffset = 0;
+ }
+
+ // 引发view重绘,一般可以考虑延迟20-30ms重绘,空出时间片
+ postInvalidate();
+ }
+
+ private void resetPositonY() {
+ // mXOneOffset代表当前第一条水波纹要移动的距离
+ int yOneInterval = mYPositions.length - mXOneOffset;
+ // 使用System.arraycopy方式重新填充第一条波纹的数据
+ System.arraycopy(mYPositions, mXOneOffset, mResetOneYPositions, 0, yOneInterval);
+ System.arraycopy(mYPositions, 0, mResetOneYPositions, yOneInterval, mXOneOffset);
+
+ int yTwoInterval = mYPositions.length - mXTwoOffset;
+ System.arraycopy(mYPositions, mXTwoOffset, mResetTwoYPositions, 0,
+ yTwoInterval);
+ System.arraycopy(mYPositions, 0, mResetTwoYPositions, yTwoInterval, mXTwoOffset);
+ }
+
+ @Override
+ protected void onSizeChanged(int w, int h, int oldw, int oldh) {
+ super.onSizeChanged(w, h, oldw, oldh);
+ // 记录下view的宽高
+ mTotalWidth = w;
+ mTotalHeight = h;
+ // 用于保存原始波纹的y值
+ mYPositions = new float[mTotalWidth];
+ // 用于保存波纹一的y值
+ mResetOneYPositions = new float[mTotalWidth];
+ // 用于保存波纹二的y值
+ mResetTwoYPositions = new float[mTotalWidth];
+
+ // 将周期定为view总宽度
+ mCycleFactorW = (float) (2 * Math.PI / mTotalWidth);
+
+ // 根据view总宽度得出所有对应的y值
+ for (int i = 0; i < mTotalWidth; i++) {
+ mYPositions[i] = (float) (STRETCH_FACTOR_A * Math.sin(mCycleFactorW * i) + OFFSET_Y);
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/view/HeadZoomScrollView.java b/app/src/main/java/com/example/administrator/seven/view/HeadZoomScrollView.java
new file mode 100644
index 0000000..8aa2454
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/view/HeadZoomScrollView.java
@@ -0,0 +1,152 @@
+package com.example.administrator.seven.view;
+
+import android.animation.ObjectAnimator;
+import android.animation.ValueAnimator;
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ScrollView;
+
+/**
+ * Created by Administrator on 2016/9/12.
+ */
+public class HeadZoomScrollView extends ScrollView {
+
+ public HeadZoomScrollView(Context context) {
+ super(context);
+ }
+
+ public HeadZoomScrollView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public HeadZoomScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ // 用于记录下拉位置
+ private float y = 0f;
+ // zoomView原本的宽高
+ private int zoomViewWidth = 0;
+ private int zoomViewHeight = 0;
+
+ // 是否正在放大
+ private boolean mScaling = false;
+
+ // 放大的view,默认为第一个子view
+ private View zoomView;
+ public void setZoomView(View zoomView) {
+ this.zoomView = zoomView;
+ }
+
+ // 滑动放大系数,系数越大,滑动时放大程度越大
+ private float mScaleRatio = 0.4f;
+ public void setmScaleRatio(float mScaleRatio) {
+ this.mScaleRatio = mScaleRatio;
+ }
+
+ // 最大的放大倍数
+ private float mScaleTimes = 2f;
+ public void setmScaleTimes(int mScaleTimes) {
+ this.mScaleTimes = mScaleTimes;
+ }
+
+ // 回弹时间系数,系数越小,回弹越快
+ private float mReplyRatio = 0.5f;
+ public void setmReplyRatio(float mReplyRatio) {
+ this.mReplyRatio = mReplyRatio;
+ }
+
+ @Override
+ protected void onFinishInflate() {
+ super.onFinishInflate();
+// 不可过度滚动,否则上移后下拉会出现部分空白的情况
+ setOverScrollMode(OVER_SCROLL_NEVER);
+// 获得默认第一个view
+ if (getChildAt(0) != null && getChildAt(0) instanceof ViewGroup && zoomView == null) {
+ ViewGroup vg = (ViewGroup) getChildAt(0);
+ if (vg.getChildCount() > 0) {
+ zoomView = vg.getChildAt(0);
+ }
+ }
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent ev) {
+ if (zoomViewWidth <= 0 || zoomViewHeight <=0) {
+ zoomViewWidth = zoomView.getMeasuredWidth();
+ zoomViewHeight = zoomView.getMeasuredHeight();
+ }
+ if (zoomView == null || zoomViewWidth <= 0 || zoomViewHeight <= 0) {
+ return super.onTouchEvent(ev);
+ }
+ switch (ev.getAction()) {
+ case MotionEvent.ACTION_MOVE:
+ if (!mScaling) {
+ if (getScrollY() == 0) {
+ y = ev.getY();//滑动到顶部时,记录位置
+ } else {
+ break;
+ }
+ }
+ int distance = (int) ((ev.getY() - y)*mScaleRatio);
+ if (distance < 0) break;//若往下滑动
+ mScaling = true;
+ setZoom(distance);
+ return true;
+ case MotionEvent.ACTION_UP:
+ mScaling = false;
+ replyView();
+ break;
+ }
+ return super.onTouchEvent(ev);
+ }
+
+ /**放大view*/
+ private void setZoom(float s) {
+ float scaleTimes = (float) ((zoomViewWidth+s)/(zoomViewWidth*1.0));
+// 如超过最大放大倍数,直接返回
+ if (scaleTimes > mScaleTimes) return;
+
+ ViewGroup.LayoutParams layoutParams = zoomView.getLayoutParams();
+ layoutParams.width = (int) (zoomViewWidth + s);
+ layoutParams.height = (int)(zoomViewHeight*((zoomViewWidth+s)/zoomViewWidth));
+// 设置控件水平居中
+ ((MarginLayoutParams) layoutParams).setMargins(-(layoutParams.width - zoomViewWidth) / 2, 0, 0, 0);
+ zoomView.setLayoutParams(layoutParams);
+ }
+
+ /**回弹*/
+ private void replyView() {
+ final float distance = zoomView.getMeasuredWidth() - zoomViewWidth;
+ // 设置动画
+ ValueAnimator anim = ObjectAnimator.ofFloat(distance, 0.0F).setDuration((long) (distance * mReplyRatio));
+ anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
+ @Override
+ public void onAnimationUpdate(ValueAnimator animation) {
+ setZoom((Float) animation.getAnimatedValue());
+ }
+ });
+ anim.start();
+ }
+
+ @Override
+ protected void onScrollChanged(int l, int t, int oldl, int oldt) {
+ super.onScrollChanged(l, t, oldl, oldt);
+ if (onScrollListener!=null) onScrollListener.onScroll(l,t,oldl,oldt);
+ }
+
+ private OnScrollListener onScrollListener;
+ public void setOnScrollListener(OnScrollListener onScrollListener) {
+ this.onScrollListener = onScrollListener;
+ }
+
+ /**滑动监听*/
+ public interface OnScrollListener{
+ void onScroll(int scrollX, int scrollY, int oldScrollX, int oldScrollY);
+ }
+
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/view/MyScrollView.java b/app/src/main/java/com/example/administrator/seven/view/MyScrollView.java
new file mode 100644
index 0000000..7a79c0e
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/view/MyScrollView.java
@@ -0,0 +1,46 @@
+package com.example.administrator.seven.view;
+
+/**
+ * Time: 2020/8/12
+ * Author: jianbo
+ * Description:
+ */
+import android.content.Context;
+import android.util.AttributeSet;
+import android.widget.ScrollView;
+
+public class MyScrollView extends ScrollView {
+
+ private OnScrollistener onScrollistener;
+
+ public OnScrollistener getOnScrollistener() {
+ return onScrollistener;
+ }
+
+ public void setOnScrollistener(OnScrollistener onScrollistener) {
+ this.onScrollistener = onScrollistener;
+ }
+
+ public MyScrollView(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ }
+
+ public MyScrollView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public MyScrollView(Context context) {
+ super(context);
+ }
+
+ public interface OnScrollistener {
+
+ void onScroll(int startY, int endY);
+ }
+
+ @Override
+ protected void onScrollChanged(int l, int t, int oldl, int oldt) {
+ onScrollistener.onScroll(oldt, t);
+ super.onScrollChanged(l, t, oldl, oldt);
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/view/StatusBarView.java b/app/src/main/java/com/example/administrator/seven/view/StatusBarView.java
new file mode 100644
index 0000000..da32caf
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/view/StatusBarView.java
@@ -0,0 +1,45 @@
+package com.example.administrator.seven.view;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.os.Build;
+import android.support.annotation.Nullable;
+import android.util.AttributeSet;
+import android.view.View;
+
+/**
+ * Time: 2020/8/12
+ * Author: jianbo
+ * Description:
+ */
+public class StatusBarView extends View {
+ private static int mStatusBarHeight;
+
+ public StatusBarView(Context context) {
+ this(context, null);
+ }
+
+ public StatusBarView(Context context, @Nullable AttributeSet attrs) {
+ super(context, attrs);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+ mStatusBarHeight = getStatusBarHeight(context);
+ }
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), mStatusBarHeight);
+ }
+
+ //此处代码可以放到StatusBarUtils
+ public static int getStatusBarHeight(Context context) {
+ if (mStatusBarHeight == 0) {
+ Resources res = context.getResources();
+ int resourceId = res.getIdentifier("status_bar_height", "dimen", "android");
+ if (resourceId > 0) {
+ mStatusBarHeight = res.getDimensionPixelSize(resourceId);
+ }
+ }
+ return mStatusBarHeight;
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/view/webview/XfiveWebActivity.java b/app/src/main/java/com/example/administrator/seven/view/webview/XfiveWebActivity.java
new file mode 100644
index 0000000..8f44967
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/view/webview/XfiveWebActivity.java
@@ -0,0 +1,86 @@
+package com.example.administrator.seven.view.webview;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.example.administrator.seven.R;
+import com.example.administrator.seven.base.BaseActivity;
+import com.example.administrator.seven.utils.WebViewJavaScriptFunction;
+import com.example.administrator.seven.utils.X5WebView;
+
+/**
+ * x5webview封装
+ */
+public class XfiveWebActivity extends BaseActivity implements View.OnClickListener {
+ public final static String URL = "url";
+ public final static String TITLE = "title";
+ private RelativeLayout mLayTopLeftTv;
+ private TextView mLayTopTitle;
+ private X5WebView webview;
+
+ public static void runActivity(Context context, String title, String url) {
+ Intent intent = new Intent(context, XfiveWebActivity.class);
+ intent.putExtra(URL, url);
+ intent.putExtra(TITLE, title);
+ context.startActivity(intent);
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_xfive);
+ String url = getIntent().getStringExtra(URL);
+ String title = getIntent().getStringExtra(TITLE);
+ initView(title);
+ initData(url);
+ }
+
+
+ private void initView(String title) {
+ mLayTopLeftTv = (RelativeLayout) findViewById(R.id.layTop_left_tv);
+ mLayTopLeftTv.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ finish();
+ }
+ });
+ mLayTopTitle = (TextView) findViewById(R.id.layTop_title);
+ mLayTopTitle.setText(title);
+ Thickening(mLayTopTitle);
+
+ }
+
+ private void initData(String url) {
+ webview = (X5WebView) findViewById(R.id.webView);
+ webview.getView().setOverScrollMode(View.OVER_SCROLL_ALWAYS);
+ webview.addJavascriptInterface(new WebViewJavaScriptFunction() {
+
+ @Override
+ public void onJsFunctionCalled(String tag) {
+ // TODO Auto-generated method stub
+
+ }
+
+ }, "Android");
+ //加载网页
+ webview.loadUrl(url);
+ }
+
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()) {
+ default:
+ break;
+ case R.id.webView:
+ break;
+ case R.id.layTop_left_tv:
+ finish();
+ break;
+ }
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/widget/CircleImageView.java b/app/src/main/java/com/example/administrator/seven/widget/CircleImageView.java
new file mode 100644
index 0000000..0945b1e
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/widget/CircleImageView.java
@@ -0,0 +1,303 @@
+package com.example.administrator.seven.widget;
+
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Bitmap;
+import android.graphics.BitmapShader;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.ColorFilter;
+import android.graphics.Matrix;
+import android.graphics.Paint;
+import android.graphics.RectF;
+import android.graphics.Shader;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.ColorDrawable;
+import android.graphics.drawable.Drawable;
+import android.net.Uri;
+import android.support.annotation.ColorRes;
+import android.support.annotation.DrawableRes;
+import android.util.AttributeSet;
+
+import com.example.administrator.seven.R;
+
+/**
+ *
+ * 自定义圆形用户头像
+ * Created by Administrator on 2017/6/22 0022.
+ */
+public class CircleImageView extends android.support.v7.widget.AppCompatImageView {
+
+ private static final ScaleType SCALE_TYPE = ScaleType.CENTER_CROP;
+
+ private static final Bitmap.Config BITMAP_CONFIG = Bitmap.Config.ARGB_8888;
+ private static final int COLORDRAWABLE_DIMENSION = 2;
+
+ private static final int DEFAULT_BORDER_WIDTH = 0;
+ private static final int DEFAULT_BORDER_COLOR = Color.BLACK;
+ private static final boolean DEFAULT_BORDER_OVERLAY = false;
+
+ private final RectF mDrawableRect = new RectF();
+ private final RectF mBorderRect = new RectF();
+
+ private final Matrix mShaderMatrix = new Matrix();
+ private final Paint mBitmapPaint = new Paint();
+ private final Paint mBorderPaint = new Paint();
+
+ private int mBorderColor = DEFAULT_BORDER_COLOR;
+ private int mBorderWidth = DEFAULT_BORDER_WIDTH;
+
+ private Bitmap mBitmap;
+ private BitmapShader mBitmapShader;
+ private int mBitmapWidth;
+ private int mBitmapHeight;
+
+ private float mDrawableRadius;
+ private float mBorderRadius;
+
+ private ColorFilter mColorFilter;
+
+ private boolean mReady;
+ private boolean mSetupPending;
+ private boolean mBorderOverlay;
+
+ public CircleImageView(Context context) {
+ super(context);
+
+ init();
+ }
+
+ public CircleImageView(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public CircleImageView(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+
+ TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CircleImageView, defStyle, 0);
+
+ mBorderWidth = a.getDimensionPixelSize(R.styleable.CircleImageView_border_width, DEFAULT_BORDER_WIDTH);
+ mBorderColor = a.getColor(R.styleable.CircleImageView_border_color, DEFAULT_BORDER_COLOR);
+ mBorderOverlay = a.getBoolean(R.styleable.CircleImageView_border_overlay, DEFAULT_BORDER_OVERLAY);
+
+ a.recycle();
+
+ init();
+ }
+
+ private void init() {
+ super.setScaleType(SCALE_TYPE);
+ mReady = true;
+
+ if (mSetupPending) {
+ setup();
+ mSetupPending = false;
+ }
+ }
+
+ @Override
+ public ScaleType getScaleType() {
+ return SCALE_TYPE;
+ }
+
+ @Override
+ public void setScaleType(ScaleType scaleType) {
+ if (scaleType != SCALE_TYPE) {
+ throw new IllegalArgumentException(String.format("ScaleType %s not supported.", scaleType));
+ }
+ }
+
+ @Override
+ public void setAdjustViewBounds(boolean adjustViewBounds) {
+ if (adjustViewBounds) {
+ throw new IllegalArgumentException("adjustViewBounds not supported.");
+ }
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ if (getDrawable() == null) {
+ return;
+ }
+
+ canvas.drawCircle(getWidth() / 2, getHeight() / 2, mDrawableRadius, mBitmapPaint);
+ if (mBorderWidth != 0) {
+ canvas.drawCircle(getWidth() / 2, getHeight() / 2, mBorderRadius, mBorderPaint);
+ }
+ }
+
+ @Override
+ protected void onSizeChanged(int w, int h, int oldw, int oldh) {
+ super.onSizeChanged(w, h, oldw, oldh);
+ setup();
+ }
+
+ public int getBorderColor() {
+ return mBorderColor;
+ }
+
+ public void setBorderColor(int borderColor) {
+ if (borderColor == mBorderColor) {
+ return;
+ }
+
+ mBorderColor = borderColor;
+ mBorderPaint.setColor(mBorderColor);
+ invalidate();
+ }
+
+ public void setBorderColorResource(@ColorRes int borderColorRes) {
+ setBorderColor(getContext().getResources().getColor(borderColorRes));
+ }
+
+ public int getBorderWidth() {
+ return mBorderWidth;
+ }
+
+ public void setBorderWidth(int borderWidth) {
+ if (borderWidth == mBorderWidth) {
+ return;
+ }
+
+ mBorderWidth = borderWidth;
+ setup();
+ }
+
+ public boolean isBorderOverlay() {
+ return mBorderOverlay;
+ }
+
+ public void setBorderOverlay(boolean borderOverlay) {
+ if (borderOverlay == mBorderOverlay) {
+ return;
+ }
+
+ mBorderOverlay = borderOverlay;
+ setup();
+ }
+
+ @Override
+ public void setImageBitmap(Bitmap bm) {
+ super.setImageBitmap(bm);
+ mBitmap = bm;
+ setup();
+ }
+
+ @Override
+ public void setImageDrawable(Drawable drawable) {
+ super.setImageDrawable(drawable);
+ mBitmap = getBitmapFromDrawable(drawable);
+ setup();
+ }
+
+ @Override
+ public void setImageResource(@DrawableRes int resId) {
+ super.setImageResource(resId);
+ mBitmap = getBitmapFromDrawable(getDrawable());
+ setup();
+ }
+
+ @Override
+ public void setImageURI(Uri uri) {
+ super.setImageURI(uri);
+ mBitmap = getBitmapFromDrawable(getDrawable());
+ setup();
+ }
+
+ @Override
+ public void setColorFilter(ColorFilter cf) {
+ if (cf == mColorFilter) {
+ return;
+ }
+
+ mColorFilter = cf;
+ mBitmapPaint.setColorFilter(mColorFilter);
+ invalidate();
+ }
+
+ private Bitmap getBitmapFromDrawable(Drawable drawable) {
+ if (drawable == null) {
+ return null;
+ }
+
+ if (drawable instanceof BitmapDrawable) {
+ return ((BitmapDrawable) drawable).getBitmap();
+ }
+
+ try {
+ Bitmap bitmap;
+
+ if (drawable instanceof ColorDrawable) {
+ bitmap = Bitmap.createBitmap(COLORDRAWABLE_DIMENSION, COLORDRAWABLE_DIMENSION, BITMAP_CONFIG);
+ } else {
+ bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), BITMAP_CONFIG);
+ }
+
+ Canvas canvas = new Canvas(bitmap);
+ drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
+ drawable.draw(canvas);
+ return bitmap;
+ } catch (OutOfMemoryError e) {
+ return null;
+ }
+ }
+
+ private void setup() {
+ if (!mReady) {
+ mSetupPending = true;
+ return;
+ }
+
+ if (mBitmap == null) {
+ return;
+ }
+
+ mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
+
+ mBitmapPaint.setAntiAlias(true);
+ mBitmapPaint.setShader(mBitmapShader);
+
+ mBorderPaint.setStyle(Paint.Style.STROKE);
+ mBorderPaint.setAntiAlias(true);
+ mBorderPaint.setColor(mBorderColor);
+ mBorderPaint.setStrokeWidth(mBorderWidth);
+
+ mBitmapHeight = mBitmap.getHeight();
+ mBitmapWidth = mBitmap.getWidth();
+
+ mBorderRect.set(0, 0, getWidth(), getHeight());
+ mBorderRadius = Math.min((mBorderRect.height() - mBorderWidth) / 2, (mBorderRect.width() - mBorderWidth) / 2);
+
+ mDrawableRect.set(mBorderRect);
+ if (!mBorderOverlay) {
+ mDrawableRect.inset(mBorderWidth, mBorderWidth);
+ }
+ mDrawableRadius = Math.min(mDrawableRect.height() / 2, mDrawableRect.width() / 2);
+
+ updateShaderMatrix();
+ invalidate();
+ }
+
+ private void updateShaderMatrix() {
+ float scale;
+ float dx = 0;
+ float dy = 0;
+
+ mShaderMatrix.set(null);
+
+ if (mBitmapWidth * mDrawableRect.height() > mDrawableRect.width() * mBitmapHeight) {
+ scale = mDrawableRect.height() / (float) mBitmapHeight;
+ dx = (mDrawableRect.width() - mBitmapWidth * scale) * 0.5f;
+ } else {
+ scale = mDrawableRect.width() / (float) mBitmapWidth;
+ dy = (mDrawableRect.height() - mBitmapHeight * scale) * 0.5f;
+ }
+
+ mShaderMatrix.setScale(scale, scale);
+ mShaderMatrix.postTranslate((int) (dx + 0.5f) + mDrawableRect.left, (int) (dy + 0.5f) + mDrawableRect.top);
+
+ mBitmapShader.setLocalMatrix(mShaderMatrix);
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/administrator/seven/widget/ItemView.java b/app/src/main/java/com/example/administrator/seven/widget/ItemView.java
new file mode 100644
index 0000000..6c86bc1
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/widget/ItemView.java
@@ -0,0 +1,101 @@
+package com.example.administrator.seven.widget;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.support.annotation.AttrRes;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.example.administrator.seven.R;
+
+/**
+ * ItemView
+ * (๑• . •๑)
+ * 类描述:功能条目,图标-标题-箭头
+ * Created by LeiXiaoXing on 2017/3/17 16:02
+ */
+
+public class ItemView extends FrameLayout {
+
+ private View mViewbottomline;
+ private TextView mTvtitle;
+ private ImageView mIvicon;
+ private View mViewtopline;
+ private String mTitle;
+ private int mIcon;
+ private boolean show_bottom_line;
+ private boolean show_top_line;
+ private OnItemViewClickListener mListener;
+
+ public ItemView(@NonNull Context context) {
+ super(context, null);
+ }
+
+ public ItemView(@NonNull Context context, @Nullable AttributeSet attrs) {
+ super(context, attrs);
+ initView(context, attrs);
+ }
+
+ public ItemView(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ initView(context, attrs);
+ }
+
+ private void initView(Context context, AttributeSet attrs) {
+ LayoutInflater.from(context).inflate(R.layout.widget_item, this, true);
+ mViewbottomline = findViewById(R.id.view_bottom_line);
+ mTvtitle = (TextView) findViewById(R.id.tv_title);
+ mIvicon = (ImageView) findViewById(R.id.iv_icon);
+ mViewtopline = findViewById(R.id.view_top_line);
+ initAttrs(attrs);
+ setUpView();
+ }
+
+ /**
+ * 初始化参数
+ *
+ * @param attrs
+ */
+ private void initAttrs(AttributeSet attrs) {
+
+ TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.ItemView);
+ mTitle = typedArray.getString(R.styleable.ItemView_title);
+ mIcon = typedArray.getResourceId(R.styleable.ItemView_icon, R.color.bg_gray);
+ show_bottom_line = typedArray.getBoolean(R.styleable.ItemView_show_bottom_line, false);
+ show_top_line = typedArray.getBoolean(R.styleable.ItemView_show_top_line, false);
+ typedArray.recycle();
+ }
+
+ /**
+ * 设置视图状态
+ */
+ private void setUpView() {
+ mViewtopline.setVisibility(show_top_line ? VISIBLE : GONE);
+ mViewbottomline.setVisibility(show_bottom_line ? VISIBLE : GONE);
+ mIvicon.setImageResource(mIcon);
+ mTvtitle.setText(mTitle);
+ findViewById(R.id.view_item).setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (mListener != null) {
+ mListener.onItemViewClick(ItemView.this);
+ }
+ }
+ });
+ }
+
+ public void setOnItemViewClickListener(OnItemViewClickListener listener) {
+ mListener = listener;
+ }
+
+ public interface OnItemViewClickListener {
+ void onItemViewClick(View view);
+ }
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/widget/TitleBar.java b/app/src/main/java/com/example/administrator/seven/widget/TitleBar.java
new file mode 100644
index 0000000..8dcf209
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/widget/TitleBar.java
@@ -0,0 +1,310 @@
+package com.example.administrator.seven.widget;
+
+import android.content.Context;
+import android.support.annotation.ColorRes;
+import android.support.annotation.DrawableRes;
+import android.support.annotation.StringRes;
+import android.support.v4.content.ContextCompat;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.example.administrator.seven.R;
+
+
+/**
+ * Created by Administrator on 2016/12/23.
+ * 作者:xudiwei
+ *
+ * 描述:标题栏组合控件
+ *
+ * sample:
+ *
+ * .xml:
+ *
+ *
+ *
+ *
+ *
+ * .java:
+ *
+ * TitleBar titleBar ....findViewById(R.id...);
+ * titleBar.setTitle("...")
+ * ......
+ */
+
+public class TitleBar extends RelativeLayout implements View.OnClickListener {
+
+ private ImageView mIvLeftBtn;
+ private ImageView mIvRightBtn;
+ private TextView mTvtitle;
+ private OnTitleBarClickListener mListener;
+ private OnTitleBarAllClickListener mAllClickListener;
+ private TextView mTvRightText;
+ private RelativeLayout mRlMain;
+ private View mVBottomLine;
+ private View mRootView;
+ private Button mBtnRed;
+
+ public TitleBar(Context context) {
+ this(context, null);
+ }
+
+ public TitleBar(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public TitleBar(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ initView(context);
+ }
+
+ private void initView(Context context) {
+ mRootView = inflate(context, R.layout.widget_title_bar, this);
+
+ //左边按钮
+ mIvLeftBtn = (ImageView) mRootView.findViewById(R.id.iv_left_btn);
+ //右边按扭
+ mIvRightBtn = (ImageView) mRootView.findViewById(R.id.iv_right_btn);
+ //标题
+ mTvtitle = (TextView) mRootView.findViewById(R.id.tv_title);
+ //右边文字按钮
+ mTvRightText = (TextView) mRootView.findViewById(R.id.tv_right_text);
+
+ //右边红点
+ mBtnRed = (Button) mRootView.findViewById(R.id.btn_red);
+
+ mRlMain = (RelativeLayout) mRootView.findViewById(R.id.rl_main);
+ // 底部线
+ mVBottomLine = mRootView.findViewById(R.id.v_bottom_line);
+
+ mIvLeftBtn.setOnClickListener(this);
+ mIvRightBtn.setOnClickListener(this);
+ mTvRightText.setOnClickListener(this);
+
+ }
+
+ /**
+ * 设置暗黑模式
+ */
+ public void setDarkTheme() {
+ mRootView.findViewById(R.id.rl_main).setBackgroundColor(ContextCompat.getColor(getContext(),R.color.colorLightBlack));
+ mTvtitle.setTextColor(ContextCompat.getColor(getContext(),R.color.colorWhile));
+ mIvLeftBtn.setImageResource(R.mipmap.nav_white_back);
+ }
+
+ @Override
+ public void onClick(View view) {
+ switch (view.getId()) {
+ //左边按钮
+ case R.id.iv_left_btn:
+ if (null != mListener) {
+ mListener.onLeftButtonClick(view);
+ }
+ if (null != mAllClickListener) {
+ mAllClickListener.onLeftButtonClick(view);
+ }
+ break;
+ //右边按钮
+ case R.id.iv_right_btn:
+ if (null != mListener) {
+ mListener.onRightButtonClick(view);
+ }
+ if (null != mAllClickListener) {
+ mAllClickListener.onRightButtonClick(view);
+ }
+ break;
+ //右边文本按钮
+ case R.id.tv_right_text:
+ if (null != mAllClickListener) {
+ mAllClickListener.onRightTextButtonClick(view);
+ }
+ break;
+ }
+ }
+
+ /**
+ * 底部线是否显示,默认是显示
+ *
+ * @param show
+ */
+ public void showBottomLine(boolean show) {
+ mVBottomLine.setVisibility(show ? View.VISIBLE : View.GONE);
+ }
+
+ /**
+ * 显示或隐藏左边按钮
+ *
+ * @param visible
+ */
+ public void visibleIvLeftBtn(boolean visible) {
+ mIvLeftBtn.setVisibility(visible ? View.VISIBLE : View.GONE);
+ }
+
+ /**
+ * 显示或隐藏右边按钮
+ *
+ * @param visible
+ */
+ public void visibleIvRightBtn(boolean visible) {
+ mIvRightBtn.setVisibility(visible ? View.VISIBLE : View.GONE);
+ }
+
+ /**
+ * 显示或隐藏右边文本按钮
+ *
+ * @param visible
+ */
+ public void visibleTvRightTextBtn(boolean visible) {
+ mTvRightText.setVisibility(visible ? View.VISIBLE : View.GONE);
+ }
+
+ /**
+ * 显示或隐藏右边红点
+ *
+ * @param visible
+ */
+ public void visibleRightRedDot(boolean visible) {
+ mBtnRed.setVisibility(visible ? View.VISIBLE : View.GONE);
+ }
+
+ /**
+ * 设置左边按钮图标
+ *
+ * @param ids
+ */
+ public void setIvLeftBtnDrawable(@DrawableRes int ids) {
+ mIvLeftBtn.setImageResource(ids);
+ }
+
+ /**
+ * 设置右边按钮图标
+ *
+ * @param ids
+ */
+ public void setIvRightBtnDrawable(@DrawableRes int ids) {
+ mIvRightBtn.setImageResource(ids);
+ }
+
+ /**
+ * 设置标题
+ *
+ * @param ids
+ */
+ public void setTitle(@StringRes int ids) {
+ setTitle(getContext().getResources().getString(ids));
+ }
+
+ /**
+ * 设置标题
+ *
+ * @param titleText
+ */
+ public void setTitle(String titleText) {
+ mTvtitle.setText(titleText);
+ }
+
+ /**
+ * 设置标题颜色
+ *
+ * @param colorIds
+ */
+ public void setTitleColor(@ColorRes int colorIds) {
+ mTvtitle.setTextColor(getResources().getColor(colorIds));
+ }
+
+ /**
+ * 设置标题背景色
+ *
+ * @param colorIds
+ */
+ public void setTitleBg(@ColorRes int colorIds) {
+ mRlMain.setBackgroundResource(colorIds);
+ }
+
+ /**
+ * 设置右边文本按钮的文本
+ *
+ * @param rightButtonText
+ */
+ public void setTvRightText(String rightButtonText) {
+ mTvRightText.setText(rightButtonText);
+ }
+
+ /**
+ * 设置右边文本按钮的颜色
+ *
+ * @param color
+ */
+ public void setTvRightTextColor(@ColorRes int color) {
+ mTvRightText.setTextColor(getResources().getColor(color));
+ }
+
+ /**
+ * 设置右边文本使能
+ * @param enable
+ */
+ public void setTvRightTextEnable(boolean enable){
+ mTvRightText.setEnabled(enable);
+ }
+
+ /**
+ * 设置标题栏点击事件监听器这个监听器只响应左边按钮与右边按钮。若还想响应右边
+ * 文本按的按钮请使用{@link #setOnTitleBarAllClickListener(OnTitleBarAllClickListener)}
+ *
+ * @param clickListener {@link OnTitleBarClickListener}
+ */
+ public void setOnTitleBarClickListener(OnTitleBarClickListener clickListener) {
+ this.mListener = clickListener;
+ }
+
+ /**
+ * 设置标题栏的上的按钮全部点击事件监听器能响应左边按钮,右边按钮,右边文本按钮
+ *
+ * @param clickListener
+ */
+ public void setOnTitleBarAllClickListener(OnTitleBarAllClickListener clickListener) {
+ this.mAllClickListener = clickListener;
+ }
+
+
+ /**
+ * 标题栏的点击事件回调接口,响应两个按钮的
+ */
+ public interface OnTitleBarClickListener {
+ /**
+ * 左边按钮被点击
+ *
+ * @param view
+ */
+ void onLeftButtonClick(View view);
+
+ /**
+ * 右边按钮被点击
+ *
+ * @param view
+ */
+ void onRightButtonClick(View view);
+ }
+
+ /**
+ * 标题栏的点击事件回调接口,响应三个按钮的
+ */
+ public interface OnTitleBarAllClickListener extends OnTitleBarClickListener {
+ /**
+ * 右边文本按钮点击事件
+ *
+ * @param view
+ */
+ void onRightTextButtonClick(View view);
+
+ }
+
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/wxapi/WXEntryActivity.java b/app/src/main/java/com/example/administrator/seven/wxapi/WXEntryActivity.java
new file mode 100644
index 0000000..d19706f
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/wxapi/WXEntryActivity.java
@@ -0,0 +1,202 @@
+/*
+ * 官网地站:http://www.mob.com
+ * 技术支持QQ: 4006852216
+ * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复)
+ *
+ * Copyright (c) 2013年 mob.com. All rights reserved.
+ */
+
+package com.example.administrator.seven.wxapi;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.widget.Toast;
+
+import com.example.administrator.seven.main.entity.mine.TreeUserEntity;
+import com.example.administrator.seven.main.entity.mine.WeChatLoginEntity;
+import com.example.administrator.seven.main.entity.mine.WeChatLoginResultEntity;
+import com.example.administrator.seven.network.ApiUtils;
+import com.example.administrator.seven.network.LifeTreeAPIException;
+import com.example.administrator.seven.network.http.ResponseBean;
+import com.example.administrator.seven.utils.checkVersionsUtils.ProfileSpUtils;
+import com.tencent.mm.opensdk.modelbase.BaseReq;
+import com.tencent.mm.opensdk.modelbase.BaseResp;
+import com.tencent.mm.opensdk.modelmsg.SendAuth;
+import com.tencent.mm.opensdk.openapi.IWXAPI;
+import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
+import com.tencent.mm.opensdk.openapi.WXAPIFactory;
+
+import cn.sharesdk.wechat.utils.WXAppExtendObject;
+import cn.sharesdk.wechat.utils.WXMediaMessage;
+import cn.sharesdk.wechat.utils.WechatHandlerActivity;
+import io.reactivex.Observable;
+import io.reactivex.ObservableEmitter;
+import io.reactivex.ObservableOnSubscribe;
+import io.reactivex.ObservableSource;
+import io.reactivex.annotations.NonNull;
+import io.reactivex.functions.Consumer;
+import io.reactivex.functions.Function;
+import io.reactivex.schedulers.Schedulers;
+
+/**
+ * 微信客户端回调activity示例
+ */
+public class WXEntryActivity extends WechatHandlerActivity implements IWXAPIEventHandler {
+ public static final String WEIXIN_APP_ID = "wxaa49732bd3a29bec";
+ private static final String APP_SECRET = "038324288450b5dcb610915fea7fb1af";
+ private static ObservableEmitter> mE;
+ private IWXAPI mWeixinAPI;
+ /**
+ * 微信登陆数据
+ */
+ private WeChatLoginEntity mEntity;
+
+ public static Observable> getObservable() {
+ return Observable.create(new ObservableOnSubscribe>() {
+ @Override
+ public void subscribe(@NonNull ObservableEmitter> e) throws Exception {
+ mE = e;
+ }
+ });
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ mWeixinAPI = WXAPIFactory.createWXAPI(this, WEIXIN_APP_ID, true);
+ mWeixinAPI.handleIntent(this.getIntent(), this);
+ }
+
+ @Override
+ protected void onNewIntent(Intent intent) {
+ super.onNewIntent(intent);
+ setIntent(intent);
+ mWeixinAPI.handleIntent(intent, this);//必须调用此句话
+ }
+
+ //微信发送的请求将回调到onReq方法
+ @Override
+ public void onReq(BaseReq req) {
+ }
+
+ //发送到微信请求的响应结果
+ @Override
+ public void onResp(BaseResp resp) {
+ switch (resp.errCode) {
+ case BaseResp.ErrCode.ERR_OK:
+ //发送成功
+ SendAuth.Resp sendResp = (SendAuth.Resp) resp;
+ if (sendResp != null) {
+ String code = sendResp.code;
+ getAccess_token(code);
+ }
+ break;
+ case BaseResp.ErrCode.ERR_USER_CANCEL:
+ //发送取消
+ mE.onError(new LifeTreeAPIException(0, "取消登陆"));
+ finish();
+ break;
+ case BaseResp.ErrCode.ERR_AUTH_DENIED:
+ //发送被拒绝
+ break;
+ default:
+ //发送返回
+ break;
+ }
+
+ }
+
+ /**
+ * 获取openid accessToken值用于后期操作
+ *
+ * @param code 请求码
+ */
+ private void getAccess_token(final String code) {
+ //获取微信资料
+ ApiUtils.getWeChatApi()
+ .access_token(WEIXIN_APP_ID, APP_SECRET, code, "authorization_code")
+ .flatMap(new Function>() {
+ @Override
+ public ObservableSource apply(@NonNull WeChatLoginResultEntity entity) throws Exception {
+ //存储两个id值
+ mEntity = new WeChatLoginEntity();
+ mEntity.setOpen_id(entity.getOpenid());
+ mEntity.setUnion_id(entity.getUnionid());
+ //获取微信用户信息
+ return ApiUtils.getWeChatApi()
+ .userInfo(entity.getAccess_token()
+ , entity.getOpenid());
+ }
+ })
+ //用户资料登陆
+ .flatMap(new Function>>() {
+ @Override
+ public ObservableSource> apply(@NonNull WeChatLoginEntity entity) throws Exception {
+
+ if (ProfileSpUtils.getInstance().isLogin()) {
+ //绑定微信
+ return ApiUtils.getApi()
+ .bindWx(ProfileSpUtils.getInstance()
+ .getUserProfie()
+ .getUser_token()
+ , mEntity.getOpen_id()
+ , entity.getNickname()
+ , entity.getHeadimg()
+ , entity.getSex()
+ , mEntity.getUnion_id());
+ } else {
+ //用户微信登陆
+ return ApiUtils.getApi()
+ .wxLogin(mEntity.getOpen_id()
+ , entity.getNickname()
+ , entity.getHeadimg()
+ , entity.getSex()
+ , mEntity.getUnion_id());
+ }
+ }
+ })
+ .subscribeOn(Schedulers.io())
+ .subscribe(new Consumer>() {
+ @Override
+ public void accept(@NonNull ResponseBean treeUserEntityResponseBean) throws Exception {
+ mE.onNext(treeUserEntityResponseBean);
+ mE.onComplete();
+ finish();
+ }
+ }, new Consumer() {
+ @Override
+ public void accept(@NonNull Throwable throwable) throws Exception {
+ mE.onError(throwable);
+ finish();
+ }
+ });
+ }
+
+ /**
+ * 处理微信发出的向第三方应用请求app message
+ *
+ * 在微信客户端中的聊天页面有“添加工具”,可以将本应用的图标添加到其中 此后点击图标,下面的代码会被执行。Demo仅仅只是打开自己而已,但你可
+ * 做点其他的事情,包括根本不打开任何页面
+ */
+ public void onGetMessageFromWXReq(WXMediaMessage msg) {
+ Intent iLaunchMyself = getPackageManager().getLaunchIntentForPackage(
+ getPackageName());
+ startActivity(iLaunchMyself);
+ }
+
+ /**
+ * 处理微信向第三方应用发起的消息
+ *
+ * 此处用来接收从微信发送过来的消息,比方说本demo在wechatpage里面分享
+ * 应用时可以不分享应用文件,而分享一段应用的自定义信息。接受方的微信 客户端会通过这个方法,将这个信息发送回接收方手机上的本demo中,当作 回调。
+ *
+ * 本Demo只是将信息展示出来,但你可做点其他的事情,而不仅仅只是Toast
+ */
+ public void onShowMessageFromWXReq(WXMediaMessage msg) {
+ if (msg != null && msg.mediaObject != null
+ && (msg.mediaObject instanceof WXAppExtendObject)) {
+ WXAppExtendObject obj = (WXAppExtendObject) msg.mediaObject;
+ Toast.makeText(this, obj.extInfo, Toast.LENGTH_SHORT).show();
+ }
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/wxapi/WXPayEntryActivity.java b/app/src/main/java/com/example/administrator/seven/wxapi/WXPayEntryActivity.java
new file mode 100644
index 0000000..152c6e6
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/wxapi/WXPayEntryActivity.java
@@ -0,0 +1,67 @@
+package com.example.administrator.seven.wxapi;
+
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.widget.TextView;
+
+import com.example.administrator.seven.base.BaseActivity;
+import com.tencent.mm.opensdk.modelbase.BaseReq;
+import com.tencent.mm.opensdk.modelbase.BaseResp;
+import com.tencent.mm.opensdk.openapi.IWXAPI;
+import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
+
+
+/**
+ * 微信支付回调页
+ */
+public class WXPayEntryActivity extends BaseActivity implements IWXAPIEventHandler {
+
+ private IWXAPI api;
+ private TextView mTextView;
+ private Intent intent;
+
+ @Override
+ protected void onNewIntent(Intent intent) {
+ super.onNewIntent(intent);
+ setIntent(intent);
+ api.handleIntent(intent, this);
+ }
+
+ @Override
+ public void onReq(BaseReq req) {
+ }
+
+ @Override
+ public void onResp(BaseResp resp) {
+ if (resp.errCode == 0) {
+ toast("支付成功");
+ } else if (resp.errCode == -1) {
+ toast("支付失败");
+ } else if (resp.errCode == -2) {
+ toast("取消支付");
+ }
+ /**
+ * 用广播发出回掉状态
+ */
+ intent = new Intent();
+ intent.setAction("com.antiphon.BroadcastReceiver");
+ intent.putExtra("payCode",resp.errCode);
+ sendBroadcast(intent);
+ finish();
+ }
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ initData();
+
+ }
+
+ private void initData() {
+ // api = WXAPIFactory.createWXAPI(this, PayUtils.APP_ID);
+ api.handleIntent(getIntent(), this);
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/res/anim/dialog_dismiss.xml b/app/src/main/res/anim/dialog_dismiss.xml
new file mode 100644
index 0000000..ed41627
--- /dev/null
+++ b/app/src/main/res/anim/dialog_dismiss.xml
@@ -0,0 +1,6 @@
+
+
+
+
diff --git a/app/src/main/res/anim/dialog_show.xml b/app/src/main/res/anim/dialog_show.xml
new file mode 100644
index 0000000..21b700d
--- /dev/null
+++ b/app/src/main/res/anim/dialog_show.xml
@@ -0,0 +1,6 @@
+
+
+
+
diff --git a/app/src/main/res/anim/push_bottom_in2.xml b/app/src/main/res/anim/push_bottom_in2.xml
new file mode 100644
index 0000000..f7841af
--- /dev/null
+++ b/app/src/main/res/anim/push_bottom_in2.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/anim/push_bottom_out2.xml b/app/src/main/res/anim/push_bottom_out2.xml
new file mode 100644
index 0000000..fbc42ba
--- /dev/null
+++ b/app/src/main/res/anim/push_bottom_out2.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/anim/slide_in_bottom.xml b/app/src/main/res/anim/slide_in_bottom.xml
new file mode 100644
index 0000000..2c491f6
--- /dev/null
+++ b/app/src/main/res/anim/slide_in_bottom.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/anim/slide_out_bottom.xml b/app/src/main/res/anim/slide_out_bottom.xml
new file mode 100644
index 0000000..1d6ce35
--- /dev/null
+++ b/app/src/main/res/anim/slide_out_bottom.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/color/color_selector_text_goods_classify.xml b/app/src/main/res/color/color_selector_text_goods_classify.xml
new file mode 100644
index 0000000..24855a2
--- /dev/null
+++ b/app/src/main/res/color/color_selector_text_goods_classify.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/color/color_selector_text_send_code.xml b/app/src/main/res/color/color_selector_text_send_code.xml
new file mode 100644
index 0000000..f57b8f1
--- /dev/null
+++ b/app/src/main/res/color/color_selector_text_send_code.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/color/selector_tag_text.xml b/app/src/main/res/color/selector_tag_text.xml
new file mode 100644
index 0000000..b50fced
--- /dev/null
+++ b/app/src/main/res/color/selector_tag_text.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable-v21/selector_btn_green_bg.xml b/app/src/main/res/drawable-v21/selector_btn_green_bg.xml
new file mode 100644
index 0000000..2780a38
--- /dev/null
+++ b/app/src/main/res/drawable-v21/selector_btn_green_bg.xml
@@ -0,0 +1,33 @@
+
+
+ -
+
+
+
+
+
+
+ -
+
+
-
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
new file mode 100644
index 0000000..c7bd21d
--- /dev/null
+++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/bg_faxian.xml b/app/src/main/res/drawable/bg_faxian.xml
new file mode 100644
index 0000000..4c78269
--- /dev/null
+++ b/app/src/main/res/drawable/bg_faxian.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_radius_yellow.xml b/app/src/main/res/drawable/bg_radius_yellow.xml
new file mode 100644
index 0000000..3a6e161
--- /dev/null
+++ b/app/src/main/res/drawable/bg_radius_yellow.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/button_pass_bg.xml b/app/src/main/res/drawable/button_pass_bg.xml
new file mode 100644
index 0000000..d7d55ba
--- /dev/null
+++ b/app/src/main/res/drawable/button_pass_bg.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/dialogwhite.xml b/app/src/main/res/drawable/dialogwhite.xml
new file mode 100644
index 0000000..9d20f20
--- /dev/null
+++ b/app/src/main/res/drawable/dialogwhite.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/drawable_loading_bg_white.xml b/app/src/main/res/drawable/drawable_loading_bg_white.xml
new file mode 100644
index 0000000..839fed1
--- /dev/null
+++ b/app/src/main/res/drawable/drawable_loading_bg_white.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/drawable_selector_bg_send_code.xml b/app/src/main/res/drawable/drawable_selector_bg_send_code.xml
new file mode 100644
index 0000000..26c3ffc
--- /dev/null
+++ b/app/src/main/res/drawable/drawable_selector_bg_send_code.xml
@@ -0,0 +1,21 @@
+
+
+ -
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/drawable_shape_edit.xml b/app/src/main/res/drawable/drawable_shape_edit.xml
new file mode 100644
index 0000000..24f70be
--- /dev/null
+++ b/app/src/main/res/drawable/drawable_shape_edit.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/drawable_unread_bg.xml b/app/src/main/res/drawable/drawable_unread_bg.xml
new file mode 100644
index 0000000..88ad43d
--- /dev/null
+++ b/app/src/main/res/drawable/drawable_unread_bg.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/exit_dialog_bg.xml b/app/src/main/res/drawable/exit_dialog_bg.xml
new file mode 100644
index 0000000..aff4e80
--- /dev/null
+++ b/app/src/main/res/drawable/exit_dialog_bg.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/guid_shap_bg.xml b/app/src/main/res/drawable/guid_shap_bg.xml
new file mode 100644
index 0000000..310c88a
--- /dev/null
+++ b/app/src/main/res/drawable/guid_shap_bg.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 0000000..d5fccc5
--- /dev/null
+++ b/app/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/selector_check.xml b/app/src/main/res/drawable/selector_check.xml
new file mode 100644
index 0000000..eb5e80e
--- /dev/null
+++ b/app/src/main/res/drawable/selector_check.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_home_recyle.xml b/app/src/main/res/drawable/shape_home_recyle.xml
new file mode 100644
index 0000000..58f0f7a
--- /dev/null
+++ b/app/src/main/res/drawable/shape_home_recyle.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_inbound_item_bg.xml b/app/src/main/res/drawable/shape_inbound_item_bg.xml
new file mode 100644
index 0000000..f955f28
--- /dev/null
+++ b/app/src/main/res/drawable/shape_inbound_item_bg.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_inbound_item_yellow.xml b/app/src/main/res/drawable/shape_inbound_item_yellow.xml
new file mode 100644
index 0000000..d0b4b9a
--- /dev/null
+++ b/app/src/main/res/drawable/shape_inbound_item_yellow.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_login_btn.xml b/app/src/main/res/drawable/shape_login_btn.xml
new file mode 100644
index 0000000..a32e760
--- /dev/null
+++ b/app/src/main/res/drawable/shape_login_btn.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_message_item_bg.xml b/app/src/main/res/drawable/shape_message_item_bg.xml
new file mode 100644
index 0000000..f955f28
--- /dev/null
+++ b/app/src/main/res/drawable/shape_message_item_bg.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_mine_invendy.xml b/app/src/main/res/drawable/shape_mine_invendy.xml
new file mode 100644
index 0000000..8321cc6
--- /dev/null
+++ b/app/src/main/res/drawable/shape_mine_invendy.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_mine_message.xml b/app/src/main/res/drawable/shape_mine_message.xml
new file mode 100644
index 0000000..feee049
--- /dev/null
+++ b/app/src/main/res/drawable/shape_mine_message.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_my_menu.xml b/app/src/main/res/drawable/shape_my_menu.xml
new file mode 100644
index 0000000..937c710
--- /dev/null
+++ b/app/src/main/res/drawable/shape_my_menu.xml
@@ -0,0 +1,9 @@
+
+
+
+ - #1a000000
+ - 0
+ - 2
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_rl_mingxi_btn.xml b/app/src/main/res/drawable/shape_rl_mingxi_btn.xml
new file mode 100644
index 0000000..698a2ed
--- /dev/null
+++ b/app/src/main/res/drawable/shape_rl_mingxi_btn.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_tixian_btn.xml b/app/src/main/res/drawable/shape_tixian_btn.xml
new file mode 100644
index 0000000..8dec509
--- /dev/null
+++ b/app/src/main/res/drawable/shape_tixian_btn.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_find_password.xml b/app/src/main/res/layout/activity_find_password.xml
new file mode 100644
index 0000000..de0f458
--- /dev/null
+++ b/app/src/main/res/layout/activity_find_password.xml
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_guid.xml b/app/src/main/res/layout/activity_guid.xml
new file mode 100644
index 0000000..1e6aa49
--- /dev/null
+++ b/app/src/main/res/layout/activity_guid.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml
new file mode 100644
index 0000000..7405994
--- /dev/null
+++ b/app/src/main/res/layout/activity_login.xml
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000..074e075
--- /dev/null
+++ b/app/src/main/res/layout/activity_main.xml
@@ -0,0 +1,190 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_main2.xml b/app/src/main/res/layout/activity_main2.xml
new file mode 100644
index 0000000..cc52787
--- /dev/null
+++ b/app/src/main/res/layout/activity_main2.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_mine_inbound_history.xml b/app/src/main/res/layout/activity_mine_inbound_history.xml
new file mode 100644
index 0000000..aa624b4
--- /dev/null
+++ b/app/src/main/res/layout/activity_mine_inbound_history.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_mine_messgae_notice.xml b/app/src/main/res/layout/activity_mine_messgae_notice.xml
new file mode 100644
index 0000000..b9c15e6
--- /dev/null
+++ b/app/src/main/res/layout/activity_mine_messgae_notice.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_mine_outbound_history.xml b/app/src/main/res/layout/activity_mine_outbound_history.xml
new file mode 100644
index 0000000..cd13652
--- /dev/null
+++ b/app/src/main/res/layout/activity_mine_outbound_history.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_password_login.xml b/app/src/main/res/layout/activity_password_login.xml
new file mode 100644
index 0000000..0f6b77d
--- /dev/null
+++ b/app/src/main/res/layout/activity_password_login.xml
@@ -0,0 +1,154 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_register.xml b/app/src/main/res/layout/activity_register.xml
new file mode 100644
index 0000000..07f672d
--- /dev/null
+++ b/app/src/main/res/layout/activity_register.xml
@@ -0,0 +1,222 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_splash.xml b/app/src/main/res/layout/activity_splash.xml
new file mode 100644
index 0000000..f3caf8e
--- /dev/null
+++ b/app/src/main/res/layout/activity_splash.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_testmvpfragment.xml b/app/src/main/res/layout/activity_testmvpfragment.xml
new file mode 100644
index 0000000..7b54ce0
--- /dev/null
+++ b/app/src/main/res/layout/activity_testmvpfragment.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_xfive.xml b/app/src/main/res/layout/activity_xfive.xml
new file mode 100644
index 0000000..d0f2e46
--- /dev/null
+++ b/app/src/main/res/layout/activity_xfive.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/dialog_loading.xml b/app/src/main/res/layout/dialog_loading.xml
new file mode 100644
index 0000000..136547e
--- /dev/null
+++ b/app/src/main/res/layout/dialog_loading.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/empty_view.xml b/app/src/main/res/layout/empty_view.xml
new file mode 100644
index 0000000..9700a8f
--- /dev/null
+++ b/app/src/main/res/layout/empty_view.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/error_view.xml b/app/src/main/res/layout/error_view.xml
new file mode 100644
index 0000000..0b674b7
--- /dev/null
+++ b/app/src/main/res/layout/error_view.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/fragment_home_layout.xml b/app/src/main/res/layout/fragment_home_layout.xml
new file mode 100644
index 0000000..2464f47
--- /dev/null
+++ b/app/src/main/res/layout/fragment_home_layout.xml
@@ -0,0 +1,289 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/fragment_invite_message.xml b/app/src/main/res/layout/fragment_invite_message.xml
new file mode 100644
index 0000000..f0cb58a
--- /dev/null
+++ b/app/src/main/res/layout/fragment_invite_message.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/fragment_mine_layout.xml b/app/src/main/res/layout/fragment_mine_layout.xml
new file mode 100644
index 0000000..4906eae
--- /dev/null
+++ b/app/src/main/res/layout/fragment_mine_layout.xml
@@ -0,0 +1,296 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/fragment_my.xml b/app/src/main/res/layout/fragment_my.xml
new file mode 100644
index 0000000..5bdab42
--- /dev/null
+++ b/app/src/main/res/layout/fragment_my.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/fragment_one.xml b/app/src/main/res/layout/fragment_one.xml
new file mode 100644
index 0000000..2180864
--- /dev/null
+++ b/app/src/main/res/layout/fragment_one.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/guide_viewpager_one.xml b/app/src/main/res/layout/guide_viewpager_one.xml
new file mode 100644
index 0000000..50e6937
--- /dev/null
+++ b/app/src/main/res/layout/guide_viewpager_one.xml
@@ -0,0 +1,9 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/guide_viewpager_three.xml b/app/src/main/res/layout/guide_viewpager_three.xml
new file mode 100644
index 0000000..fbe9049
--- /dev/null
+++ b/app/src/main/res/layout/guide_viewpager_three.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/guide_viewpager_two.xml b/app/src/main/res/layout/guide_viewpager_two.xml
new file mode 100644
index 0000000..61ee897
--- /dev/null
+++ b/app/src/main/res/layout/guide_viewpager_two.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_base_dialog.xml b/app/src/main/res/layout/item_base_dialog.xml
new file mode 100644
index 0000000..61ca1ba
--- /dev/null
+++ b/app/src/main/res/layout/item_base_dialog.xml
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_load_more.xml b/app/src/main/res/layout/item_load_more.xml
new file mode 100644
index 0000000..8533204
--- /dev/null
+++ b/app/src/main/res/layout/item_load_more.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_rv_add_friend_message.xml b/app/src/main/res/layout/item_rv_add_friend_message.xml
new file mode 100644
index 0000000..7f72822
--- /dev/null
+++ b/app/src/main/res/layout/item_rv_add_friend_message.xml
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/layout_my_content.xml b/app/src/main/res/layout/layout_my_content.xml
new file mode 100644
index 0000000..59f2a79
--- /dev/null
+++ b/app/src/main/res/layout/layout_my_content.xml
@@ -0,0 +1,277 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/mine_exit_dialog.xml b/app/src/main/res/layout/mine_exit_dialog.xml
new file mode 100644
index 0000000..fd06edb
--- /dev/null
+++ b/app/src/main/res/layout/mine_exit_dialog.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/mine_inbound_history_item.xml b/app/src/main/res/layout/mine_inbound_history_item.xml
new file mode 100644
index 0000000..f31a700
--- /dev/null
+++ b/app/src/main/res/layout/mine_inbound_history_item.xml
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/mine_messgae_item.xml b/app/src/main/res/layout/mine_messgae_item.xml
new file mode 100644
index 0000000..1c4046b
--- /dev/null
+++ b/app/src/main/res/layout/mine_messgae_item.xml
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/mine_outbound_history_item.xml b/app/src/main/res/layout/mine_outbound_history_item.xml
new file mode 100644
index 0000000..8cbffdb
--- /dev/null
+++ b/app/src/main/res/layout/mine_outbound_history_item.xml
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/mobanfragment.xml b/app/src/main/res/layout/mobanfragment.xml
new file mode 100644
index 0000000..22dc012
--- /dev/null
+++ b/app/src/main/res/layout/mobanfragment.xml
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/title_layout.xml b/app/src/main/res/layout/title_layout.xml
new file mode 100644
index 0000000..80b0277
--- /dev/null
+++ b/app/src/main/res/layout/title_layout.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/title_top.xml b/app/src/main/res/layout/title_top.xml
new file mode 100644
index 0000000..42e0baa
--- /dev/null
+++ b/app/src/main/res/layout/title_top.xml
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/widget_item.xml b/app/src/main/res/layout/widget_item.xml
new file mode 100644
index 0000000..883bf9c
--- /dev/null
+++ b/app/src/main/res/layout/widget_item.xml
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/widget_title_bar.xml b/app/src/main/res/layout/widget_title_bar.xml
new file mode 100644
index 0000000..176953f
--- /dev/null
+++ b/app/src/main/res/layout/widget_title_bar.xml
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/xikeinfo_head_view.xml b/app/src/main/res/layout/xikeinfo_head_view.xml
new file mode 100644
index 0000000..1960ab4
--- /dev/null
+++ b/app/src/main/res/layout/xikeinfo_head_view.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/xikeinfo_item.xml b/app/src/main/res/layout/xikeinfo_item.xml
new file mode 100644
index 0000000..516d851
--- /dev/null
+++ b/app/src/main/res/layout/xikeinfo_item.xml
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 0000000..eca70cf
--- /dev/null
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 0000000..eca70cf
--- /dev/null
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-hdpi/fragment_my_bg.png b/app/src/main/res/mipmap-hdpi/fragment_my_bg.png
new file mode 100644
index 0000000..584879d
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/fragment_my_bg.png differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..a2f5908
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 0000000..1b52399
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-hdpi/icon_activity.png b/app/src/main/res/mipmap-hdpi/icon_activity.png
new file mode 100644
index 0000000..39aadc6
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/icon_activity.png differ
diff --git a/app/src/main/res/mipmap-hdpi/icon_balance.png b/app/src/main/res/mipmap-hdpi/icon_balance.png
new file mode 100644
index 0000000..031e9d1
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/icon_balance.png differ
diff --git a/app/src/main/res/mipmap-hdpi/icon_default_head.png b/app/src/main/res/mipmap-hdpi/icon_default_head.png
new file mode 100644
index 0000000..4d2bdbb
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/icon_default_head.png differ
diff --git a/app/src/main/res/mipmap-hdpi/icon_error.png b/app/src/main/res/mipmap-hdpi/icon_error.png
new file mode 100644
index 0000000..9fc322c
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/icon_error.png differ
diff --git a/app/src/main/res/mipmap-hdpi/icon_nodata.png b/app/src/main/res/mipmap-hdpi/icon_nodata.png
new file mode 100644
index 0000000..424637d
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/icon_nodata.png differ
diff --git a/app/src/main/res/mipmap-hdpi/icon_per_data.png b/app/src/main/res/mipmap-hdpi/icon_per_data.png
new file mode 100644
index 0000000..d96cfa3
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/icon_per_data.png differ
diff --git a/app/src/main/res/mipmap-hdpi/icon_setting.png b/app/src/main/res/mipmap-hdpi/icon_setting.png
new file mode 100644
index 0000000..cd1554b
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/icon_setting.png differ
diff --git a/app/src/main/res/mipmap-hdpi/icon_version.png b/app/src/main/res/mipmap-hdpi/icon_version.png
new file mode 100644
index 0000000..43aee6e
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/icon_version.png differ
diff --git a/app/src/main/res/mipmap-hdpi/icon_vip_one.png b/app/src/main/res/mipmap-hdpi/icon_vip_one.png
new file mode 100644
index 0000000..2438306
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/icon_vip_one.png differ
diff --git a/app/src/main/res/mipmap-hdpi/icon_yinsi.png b/app/src/main/res/mipmap-hdpi/icon_yinsi.png
new file mode 100644
index 0000000..cae0531
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/icon_yinsi.png differ
diff --git a/app/src/main/res/mipmap-mdpi/fragment_my_bg.png b/app/src/main/res/mipmap-mdpi/fragment_my_bg.png
new file mode 100644
index 0000000..e76970d
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/fragment_my_bg.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..ff10afd
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 0000000..115a4c7
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-mdpi/icon_activity.png b/app/src/main/res/mipmap-mdpi/icon_activity.png
new file mode 100644
index 0000000..9fb68e0
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/icon_activity.png differ
diff --git a/app/src/main/res/mipmap-mdpi/icon_balance.png b/app/src/main/res/mipmap-mdpi/icon_balance.png
new file mode 100644
index 0000000..64c3271
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/icon_balance.png differ
diff --git a/app/src/main/res/mipmap-mdpi/icon_default_head.png b/app/src/main/res/mipmap-mdpi/icon_default_head.png
new file mode 100644
index 0000000..c7071f7
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/icon_default_head.png differ
diff --git a/app/src/main/res/mipmap-mdpi/icon_error.png b/app/src/main/res/mipmap-mdpi/icon_error.png
new file mode 100644
index 0000000..32aa588
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/icon_error.png differ
diff --git a/app/src/main/res/mipmap-mdpi/icon_nodata.png b/app/src/main/res/mipmap-mdpi/icon_nodata.png
new file mode 100644
index 0000000..66a8188
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/icon_nodata.png differ
diff --git a/app/src/main/res/mipmap-mdpi/icon_per_data.png b/app/src/main/res/mipmap-mdpi/icon_per_data.png
new file mode 100644
index 0000000..ddff975
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/icon_per_data.png differ
diff --git a/app/src/main/res/mipmap-mdpi/icon_setting.png b/app/src/main/res/mipmap-mdpi/icon_setting.png
new file mode 100644
index 0000000..e4b7640
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/icon_setting.png differ
diff --git a/app/src/main/res/mipmap-mdpi/icon_version.png b/app/src/main/res/mipmap-mdpi/icon_version.png
new file mode 100644
index 0000000..88f042f
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/icon_version.png differ
diff --git a/app/src/main/res/mipmap-mdpi/icon_vip_one.png b/app/src/main/res/mipmap-mdpi/icon_vip_one.png
new file mode 100644
index 0000000..c179070
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/icon_vip_one.png differ
diff --git a/app/src/main/res/mipmap-mdpi/icon_yinsi.png b/app/src/main/res/mipmap-mdpi/icon_yinsi.png
new file mode 100644
index 0000000..54590c1
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/icon_yinsi.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/day_protruding_false.png b/app/src/main/res/mipmap-xhdpi/day_protruding_false.png
new file mode 100644
index 0000000..5c5906e
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/day_protruding_false.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/fragment_my_bg.png b/app/src/main/res/mipmap-xhdpi/fragment_my_bg.png
new file mode 100644
index 0000000..3c5e3e6
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/fragment_my_bg.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..dcd3cd8
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..459ca60
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_activity.png b/app/src/main/res/mipmap-xhdpi/icon_activity.png
new file mode 100644
index 0000000..c9729b3
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_activity.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_balance.png b/app/src/main/res/mipmap-xhdpi/icon_balance.png
new file mode 100644
index 0000000..6621063
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_balance.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_default_head.png b/app/src/main/res/mipmap-xhdpi/icon_default_head.png
new file mode 100644
index 0000000..683aeab
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_default_head.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_error.png b/app/src/main/res/mipmap-xhdpi/icon_error.png
new file mode 100644
index 0000000..88bddea
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_error.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_faxian.png b/app/src/main/res/mipmap-xhdpi/icon_faxian.png
new file mode 100644
index 0000000..7c91e5a
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_faxian.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_kehu.png b/app/src/main/res/mipmap-xhdpi/icon_kehu.png
new file mode 100644
index 0000000..59cd738
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_kehu.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_kehuhui.png b/app/src/main/res/mipmap-xhdpi/icon_kehuhui.png
new file mode 100644
index 0000000..5faa19e
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_kehuhui.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_nodata.png b/app/src/main/res/mipmap-xhdpi/icon_nodata.png
new file mode 100644
index 0000000..5003a73
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_nodata.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_per_data.png b/app/src/main/res/mipmap-xhdpi/icon_per_data.png
new file mode 100644
index 0000000..6d95756
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_per_data.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_setting.png b/app/src/main/res/mipmap-xhdpi/icon_setting.png
new file mode 100644
index 0000000..555f835
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_setting.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_task.png b/app/src/main/res/mipmap-xhdpi/icon_task.png
new file mode 100644
index 0000000..296ecef
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_task.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_task_hui.png b/app/src/main/res/mipmap-xhdpi/icon_task_hui.png
new file mode 100644
index 0000000..bf89e65
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_task_hui.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_version.png b/app/src/main/res/mipmap-xhdpi/icon_version.png
new file mode 100644
index 0000000..d3f2bfc
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_version.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_vip_one.png b/app/src/main/res/mipmap-xhdpi/icon_vip_one.png
new file mode 100644
index 0000000..823975e
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_vip_one.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_wode.png b/app/src/main/res/mipmap-xhdpi/icon_wode.png
new file mode 100644
index 0000000..5b5c7b9
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_wode.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_wodehui.png b/app/src/main/res/mipmap-xhdpi/icon_wodehui.png
new file mode 100644
index 0000000..7f10b77
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_wodehui.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_yinsi.png b/app/src/main/res/mipmap-xhdpi/icon_yinsi.png
new file mode 100644
index 0000000..9f89e6b
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_yinsi.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_zhibo.png b/app/src/main/res/mipmap-xhdpi/icon_zhibo.png
new file mode 100644
index 0000000..9a63613
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_zhibo.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_zhibohui.png b/app/src/main/res/mipmap-xhdpi/icon_zhibohui.png
new file mode 100644
index 0000000..0186ce9
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_zhibohui.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/img_login.png b/app/src/main/res/mipmap-xhdpi/img_login.png
new file mode 100644
index 0000000..7395cd5
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/img_login.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/login_code_icon.png b/app/src/main/res/mipmap-xhdpi/login_code_icon.png
new file mode 100644
index 0000000..e4f08b3
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/login_code_icon.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/login_has_choose.png b/app/src/main/res/mipmap-xhdpi/login_has_choose.png
new file mode 100644
index 0000000..8765436
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/login_has_choose.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/login_logo.png b/app/src/main/res/mipmap-xhdpi/login_logo.png
new file mode 100644
index 0000000..395d24a
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/login_logo.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/login_no_choose.png b/app/src/main/res/mipmap-xhdpi/login_no_choose.png
new file mode 100644
index 0000000..7fb5e7b
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/login_no_choose.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/login_phone_icon.png b/app/src/main/res/mipmap-xhdpi/login_phone_icon.png
new file mode 100644
index 0000000..aae506b
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/login_phone_icon.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/login_top_bg.png b/app/src/main/res/mipmap-xhdpi/login_top_bg.png
new file mode 100644
index 0000000..517561d
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/login_top_bg.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/login_undo.png b/app/src/main/res/mipmap-xhdpi/login_undo.png
new file mode 100644
index 0000000..25144b3
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/login_undo.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/login_wechat.png b/app/src/main/res/mipmap-xhdpi/login_wechat.png
new file mode 100644
index 0000000..3889e61
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/login_wechat.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/nav_back.png b/app/src/main/res/mipmap-xhdpi/nav_back.png
new file mode 100644
index 0000000..badfe2b
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/nav_back.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/nav_white_back.png b/app/src/main/res/mipmap-xhdpi/nav_white_back.png
new file mode 100644
index 0000000..d61fe2e
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/nav_white_back.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/activity_yue_bg.png b/app/src/main/res/mipmap-xxhdpi/activity_yue_bg.png
new file mode 100644
index 0000000..d94a30e
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/activity_yue_bg.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/back.png b/app/src/main/res/mipmap-xxhdpi/back.png
new file mode 100644
index 0000000..8d2a1b5
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/back.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/fragment_my_bg.png b/app/src/main/res/mipmap-xxhdpi/fragment_my_bg.png
new file mode 100644
index 0000000..4e056ea
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/fragment_my_bg.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/guide_one.png b/app/src/main/res/mipmap-xxhdpi/guide_one.png
new file mode 100644
index 0000000..696c6c5
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/guide_one.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/guide_three.jpg b/app/src/main/res/mipmap-xxhdpi/guide_three.jpg
new file mode 100644
index 0000000..8cfb52a
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/guide_three.jpg differ
diff --git a/app/src/main/res/mipmap-xxhdpi/guide_two.png b/app/src/main/res/mipmap-xxhdpi/guide_two.png
new file mode 100644
index 0000000..33097fb
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/guide_two.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/home_damage.png b/app/src/main/res/mipmap-xxhdpi/home_damage.png
new file mode 100644
index 0000000..954b212
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/home_damage.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/home_imageview.png b/app/src/main/res/mipmap-xxhdpi/home_imageview.png
new file mode 100644
index 0000000..efcc186
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/home_imageview.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/home_look_warehouse.png b/app/src/main/res/mipmap-xxhdpi/home_look_warehouse.png
new file mode 100644
index 0000000..59d441f
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/home_look_warehouse.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/home_outbound_list.png b/app/src/main/res/mipmap-xxhdpi/home_outbound_list.png
new file mode 100644
index 0000000..370bcb9
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/home_outbound_list.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/home_product_proties.png b/app/src/main/res/mipmap-xxhdpi/home_product_proties.png
new file mode 100644
index 0000000..aa1e729
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/home_product_proties.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/home_query.png b/app/src/main/res/mipmap-xxhdpi/home_query.png
new file mode 100644
index 0000000..3e94214
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/home_query.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/home_selected.png b/app/src/main/res/mipmap-xxhdpi/home_selected.png
new file mode 100644
index 0000000..cb6c1b4
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/home_selected.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/home_storage.png b/app/src/main/res/mipmap-xxhdpi/home_storage.png
new file mode 100644
index 0000000..405c06e
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/home_storage.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/home_trans.png b/app/src/main/res/mipmap-xxhdpi/home_trans.png
new file mode 100644
index 0000000..fe0694f
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/home_trans.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/home_unselect.png b/app/src/main/res/mipmap-xxhdpi/home_unselect.png
new file mode 100644
index 0000000..f6e3047
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/home_unselect.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_arrow_right.png b/app/src/main/res/mipmap-xxhdpi/ic_arrow_right.png
new file mode 100644
index 0000000..13b6ae0
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_arrow_right.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_camera.png b/app/src/main/res/mipmap-xxhdpi/ic_camera.png
new file mode 100644
index 0000000..fbf58a1
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_camera.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..8ca12fe
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..8e19b41
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_activity.png b/app/src/main/res/mipmap-xxhdpi/icon_activity.png
new file mode 100644
index 0000000..c80da23
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_activity.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_back.png b/app/src/main/res/mipmap-xxhdpi/icon_back.png
new file mode 100644
index 0000000..b6fd092
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_back.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_balance.png b/app/src/main/res/mipmap-xxhdpi/icon_balance.png
new file mode 100644
index 0000000..42a9556
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_balance.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_default_head.png b/app/src/main/res/mipmap-xxhdpi/icon_default_head.png
new file mode 100644
index 0000000..4f4827f
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_default_head.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_error.png b/app/src/main/res/mipmap-xxhdpi/icon_error.png
new file mode 100644
index 0000000..8982dd8
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_error.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_faxian.png b/app/src/main/res/mipmap-xxhdpi/icon_faxian.png
new file mode 100644
index 0000000..9056cf4
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_faxian.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_kehu.png b/app/src/main/res/mipmap-xxhdpi/icon_kehu.png
new file mode 100644
index 0000000..9f6b8bb
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_kehu.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_kehuhui.png b/app/src/main/res/mipmap-xxhdpi/icon_kehuhui.png
new file mode 100644
index 0000000..2a7809a
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_kehuhui.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_nodata.png b/app/src/main/res/mipmap-xxhdpi/icon_nodata.png
new file mode 100644
index 0000000..b23b0ac
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_nodata.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_per_data.png b/app/src/main/res/mipmap-xxhdpi/icon_per_data.png
new file mode 100644
index 0000000..e3bbf6f
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_per_data.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_setting.png b/app/src/main/res/mipmap-xxhdpi/icon_setting.png
new file mode 100644
index 0000000..033b40e
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_setting.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_task.png b/app/src/main/res/mipmap-xxhdpi/icon_task.png
new file mode 100644
index 0000000..1b401a3
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_task.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_task_hui.png b/app/src/main/res/mipmap-xxhdpi/icon_task_hui.png
new file mode 100644
index 0000000..c5cab0d
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_task_hui.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_touxiang.png b/app/src/main/res/mipmap-xxhdpi/icon_touxiang.png
new file mode 100644
index 0000000..67b0670
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_touxiang.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_version.png b/app/src/main/res/mipmap-xxhdpi/icon_version.png
new file mode 100644
index 0000000..3cff153
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_version.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_vip_one.png b/app/src/main/res/mipmap-xxhdpi/icon_vip_one.png
new file mode 100644
index 0000000..6fb65ad
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_vip_one.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_wode.png b/app/src/main/res/mipmap-xxhdpi/icon_wode.png
new file mode 100644
index 0000000..e250288
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_wode.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_wodehui.png b/app/src/main/res/mipmap-xxhdpi/icon_wodehui.png
new file mode 100644
index 0000000..9056f10
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_wodehui.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_yinsi.png b/app/src/main/res/mipmap-xxhdpi/icon_yinsi.png
new file mode 100644
index 0000000..5317a3e
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_yinsi.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_zhibo.png b/app/src/main/res/mipmap-xxhdpi/icon_zhibo.png
new file mode 100644
index 0000000..735313b
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_zhibo.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_zhibohui.png b/app/src/main/res/mipmap-xxhdpi/icon_zhibohui.png
new file mode 100644
index 0000000..07c0872
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_zhibohui.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/loading_dialog.gif b/app/src/main/res/mipmap-xxhdpi/loading_dialog.gif
new file mode 100644
index 0000000..c811138
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/loading_dialog.gif differ
diff --git a/app/src/main/res/mipmap-xxhdpi/login_bg.png b/app/src/main/res/mipmap-xxhdpi/login_bg.png
new file mode 100644
index 0000000..962719c
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/login_bg.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/login_code_icon.png b/app/src/main/res/mipmap-xxhdpi/login_code_icon.png
new file mode 100644
index 0000000..36645de
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/login_code_icon.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/login_logo.png b/app/src/main/res/mipmap-xxhdpi/login_logo.png
new file mode 100644
index 0000000..2414f33
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/login_logo.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/login_password_icon.png b/app/src/main/res/mipmap-xxhdpi/login_password_icon.png
new file mode 100644
index 0000000..d884085
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/login_password_icon.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/login_phone_icon.png b/app/src/main/res/mipmap-xxhdpi/login_phone_icon.png
new file mode 100644
index 0000000..5e34e72
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/login_phone_icon.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/login_top_bg.png b/app/src/main/res/mipmap-xxhdpi/login_top_bg.png
new file mode 100644
index 0000000..4a63487
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/login_top_bg.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/main_image.png b/app/src/main/res/mipmap-xxhdpi/main_image.png
new file mode 100644
index 0000000..efcc186
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/main_image.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/map_selected.png b/app/src/main/res/mipmap-xxhdpi/map_selected.png
new file mode 100644
index 0000000..c2eb195
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/map_selected.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/map_unselect.png b/app/src/main/res/mipmap-xxhdpi/map_unselect.png
new file mode 100644
index 0000000..b5e4f44
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/map_unselect.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/mine_assess.png b/app/src/main/res/mipmap-xxhdpi/mine_assess.png
new file mode 100644
index 0000000..bac177e
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/mine_assess.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/mine_avatar.png b/app/src/main/res/mipmap-xxhdpi/mine_avatar.png
new file mode 100644
index 0000000..5627ac9
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/mine_avatar.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/mine_exit_account.png b/app/src/main/res/mipmap-xxhdpi/mine_exit_account.png
new file mode 100644
index 0000000..2ba8c66
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/mine_exit_account.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/mine_history_order.png b/app/src/main/res/mipmap-xxhdpi/mine_history_order.png
new file mode 100644
index 0000000..44a94a2
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/mine_history_order.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/mine_inbound_history.png b/app/src/main/res/mipmap-xxhdpi/mine_inbound_history.png
new file mode 100644
index 0000000..2922399
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/mine_inbound_history.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/mine_message_notice.png b/app/src/main/res/mipmap-xxhdpi/mine_message_notice.png
new file mode 100644
index 0000000..8cd1db7
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/mine_message_notice.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/mine_message_remind.png b/app/src/main/res/mipmap-xxhdpi/mine_message_remind.png
new file mode 100644
index 0000000..de89eb0
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/mine_message_remind.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/mine_outbound_history.png b/app/src/main/res/mipmap-xxhdpi/mine_outbound_history.png
new file mode 100644
index 0000000..3f757d0
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/mine_outbound_history.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/mine_search.png b/app/src/main/res/mipmap-xxhdpi/mine_search.png
new file mode 100644
index 0000000..efa7b7b
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/mine_search.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/mine_selected.png b/app/src/main/res/mipmap-xxhdpi/mine_selected.png
new file mode 100644
index 0000000..1f5687f
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/mine_selected.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/mine_setting.png b/app/src/main/res/mipmap-xxhdpi/mine_setting.png
new file mode 100644
index 0000000..e38445e
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/mine_setting.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/mine_unselect.png b/app/src/main/res/mipmap-xxhdpi/mine_unselect.png
new file mode 100644
index 0000000..12292f7
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/mine_unselect.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/send_btn.png b/app/src/main/res/mipmap-xxhdpi/send_btn.png
new file mode 100644
index 0000000..e314d85
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/send_btn.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/send_selected.png b/app/src/main/res/mipmap-xxhdpi/send_selected.png
new file mode 100644
index 0000000..034f097
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/send_selected.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/send_unselect.png b/app/src/main/res/mipmap-xxhdpi/send_unselect.png
new file mode 100644
index 0000000..5279868
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/send_unselect.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/splash.jpg b/app/src/main/res/mipmap-xxhdpi/splash.jpg
new file mode 100644
index 0000000..aba6b70
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/splash.jpg differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/fragment_my_bg.png b/app/src/main/res/mipmap-xxxhdpi/fragment_my_bg.png
new file mode 100644
index 0000000..bd35e88
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/fragment_my_bg.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..b824ebd
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..4c19a13
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_activity.png b/app/src/main/res/mipmap-xxxhdpi/icon_activity.png
new file mode 100644
index 0000000..80e990f
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_activity.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_balance.png b/app/src/main/res/mipmap-xxxhdpi/icon_balance.png
new file mode 100644
index 0000000..ec29bd2
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_balance.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_default_head.png b/app/src/main/res/mipmap-xxxhdpi/icon_default_head.png
new file mode 100644
index 0000000..09d7ce6
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_default_head.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_error.png b/app/src/main/res/mipmap-xxxhdpi/icon_error.png
new file mode 100644
index 0000000..fd58384
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_error.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_faxian.png b/app/src/main/res/mipmap-xxxhdpi/icon_faxian.png
new file mode 100644
index 0000000..26b8517
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_faxian.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_kehu.png b/app/src/main/res/mipmap-xxxhdpi/icon_kehu.png
new file mode 100644
index 0000000..5569595
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_kehu.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_kehuhui.png b/app/src/main/res/mipmap-xxxhdpi/icon_kehuhui.png
new file mode 100644
index 0000000..393369e
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_kehuhui.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_nodata.png b/app/src/main/res/mipmap-xxxhdpi/icon_nodata.png
new file mode 100644
index 0000000..edf6812
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_nodata.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_per_data.png b/app/src/main/res/mipmap-xxxhdpi/icon_per_data.png
new file mode 100644
index 0000000..15cc922
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_per_data.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_setting.png b/app/src/main/res/mipmap-xxxhdpi/icon_setting.png
new file mode 100644
index 0000000..0faa824
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_setting.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_task.png b/app/src/main/res/mipmap-xxxhdpi/icon_task.png
new file mode 100644
index 0000000..580195e
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_task.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_task_hui.png b/app/src/main/res/mipmap-xxxhdpi/icon_task_hui.png
new file mode 100644
index 0000000..8d99990
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_task_hui.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_version.png b/app/src/main/res/mipmap-xxxhdpi/icon_version.png
new file mode 100644
index 0000000..453263e
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_version.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_vip_one.png b/app/src/main/res/mipmap-xxxhdpi/icon_vip_one.png
new file mode 100644
index 0000000..fe68b40
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_vip_one.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_wode.png b/app/src/main/res/mipmap-xxxhdpi/icon_wode.png
new file mode 100644
index 0000000..d1a7ec9
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_wode.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_wodehui.png b/app/src/main/res/mipmap-xxxhdpi/icon_wodehui.png
new file mode 100644
index 0000000..d4ec7b1
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_wodehui.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_yinsi.png b/app/src/main/res/mipmap-xxxhdpi/icon_yinsi.png
new file mode 100644
index 0000000..084979d
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_yinsi.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_zhibo.png b/app/src/main/res/mipmap-xxxhdpi/icon_zhibo.png
new file mode 100644
index 0000000..660c748
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_zhibo.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_zhibohui.png b/app/src/main/res/mipmap-xxxhdpi/icon_zhibohui.png
new file mode 100644
index 0000000..404b2cd
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_zhibohui.png differ
diff --git a/app/src/main/res/values-v15/styles.xml b/app/src/main/res/values-v15/styles.xml
new file mode 100644
index 0000000..9898a1c
--- /dev/null
+++ b/app/src/main/res/values-v15/styles.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml
new file mode 100644
index 0000000..7ea209f
--- /dev/null
+++ b/app/src/main/res/values/arrays.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
new file mode 100644
index 0000000..88858c5
--- /dev/null
+++ b/app/src/main/res/values/colors.xml
@@ -0,0 +1,71 @@
+
+
+
+ @color/colorWhite
+ @color/colorWhite
+ @color/colorGreen
+ #3288EE
+ #999999
+ #ffffff
+ #CCCCCC
+ #67c729
+ #a3da7e
+ #5067c729
+ #000000
+ #3d9902
+ #8a8a8a
+ #838282
+ #bfbfbf
+ #ff0000
+ #f39700
+ #fd475d
+ #f6f6f6
+ #00000000
+ #30ffffff
+ #30000000
+ #333333
+ #999999
+ #E1E1E1
+ #424242
+ #dddddd
+ #73a6db
+ #e5e5e5
+ #FED945
+ #B17316
+ #434343
+ #E1E1E1
+ #333333
+ #ffcd06
+ #ebebeb
+ #FD7F03
+ #8C000000
+ #67C729
+ #f19149
+ #FD7F03
+ #fed945
+ #f6f6f6
+ #eb6100
+ #fafdfb
+ #bfbfbf
+ #2e81f7
+ #00a0e9
+ #343537
+ #009944
+ #e60012
+ #000000
+ #FFF
+ #C60D1D
+ #FFC107
+ #D2D2D2
+ #ff7f7f
+ #303030
+ #1E1E1E
+ #2E2E2E
+ #131313
+ #ffc107
+ #eeeeee
+
+
+
+
+
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
new file mode 100644
index 0000000..31d63a1
--- /dev/null
+++ b/app/src/main/res/values/dimens.xml
@@ -0,0 +1,47 @@
+
+
+ 20dp
+ 6dp
+ 4dp
+ 10dp
+ 70dp
+ 75dp
+ 50dp
+ 15dp
+ 5dp
+ 25dp
+ 35dp
+ 45dp
+ 95dp
+ 28dp
+ 13sp
+ 3dp
+ 30dp
+ 200dp
+ 46dp
+ 19dp
+ 22dp
+ 16dp
+ 8dp
+ 13dp
+ 11dp
+ 220dp
+ 36dp
+ 17dp
+ 300dp
+ 1dp
+ 40dp
+ 2dp
+ 9dp
+ 11dp
+ 14dp
+ 301dp
+ 18dp
+ 65dp
+ 21dp
+
+ 12sp
+ 13sp
+ 15sp
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
new file mode 100644
index 0000000..0a12daf
--- /dev/null
+++ b/app/src/main/res/values/strings.xml
@@ -0,0 +1,68 @@
+
+ NewJiaJieSong
+
+
+ 提交申请
+ 提交
+ 数据解析异常
+ 获取验证码
+ 验证码
+ 记住密码
+ 忘记密码
+ 注册
+ 登录
+ 第三方账号登录
+ 手机
+ 密码
+ 手机号:
+ 密码:
+ 验证码:
+ 确认修改密码
+ 确认密码:
+ 找回密码
+ 确认密码
+ 推荐人学号
+ 已有账号,去登录
+ 首页
+ 地图
+ 配送
+ 我的
+
+
+
+ 仓储功能
+ 入库列表
+ 出库列表
+ 查询
+ 查看仓库
+ 移库
+ 损溢列表
+ 产品属性
+
+
+
+ 消息通知
+ 入库历史
+ 出库历史
+ 历史订单
+ 我的评价
+ 设置
+ 退出账户
+
+ 今天
+ 昨天
+ 历史
+
+ 入库单号:
+ 时间:
+ 件数:
+ 厂商:
+ 代理商:
+
+ 出库单号:
+
+ 当前版本
+ 隐私政策
+
+
+
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
new file mode 100644
index 0000000..619859b
--- /dev/null
+++ b/app/src/main/res/values/styles.xml
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/xml/network_security_config.xml b/app/src/main/res/xml/network_security_config.xml
new file mode 100644
index 0000000..ed34e69
--- /dev/null
+++ b/app/src/main/res/xml/network_security_config.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/test/java/com/example/administrator/seven/ExampleUnitTest.java b/app/src/test/java/com/example/administrator/seven/ExampleUnitTest.java
new file mode 100644
index 0000000..ae3235e
--- /dev/null
+++ b/app/src/test/java/com/example/administrator/seven/ExampleUnitTest.java
@@ -0,0 +1,17 @@
+package com.example.administrator.seven;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see Testing documentation
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() {
+ assertEquals(4, 2 + 2);
+ }
+}
\ No newline at end of file
diff --git a/baselibs/.gitignore b/baselibs/.gitignore
new file mode 100644
index 0000000..796b96d
--- /dev/null
+++ b/baselibs/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/baselibs/build.gradle b/baselibs/build.gradle
new file mode 100644
index 0000000..d3e89fc
--- /dev/null
+++ b/baselibs/build.gradle
@@ -0,0 +1,32 @@
+apply plugin: 'com.android.library'
+
+android {
+ compileSdkVersion 28
+ buildToolsVersion '28.0.3'
+
+ defaultConfig {
+ minSdkVersion 15
+ targetSdkVersion 28
+ versionCode 1
+ versionName "1.0"
+ }
+}
+
+dependencies {
+ compile fileTree(include: ['*.jar'], dir: 'libs')
+ compile 'com.123ufo:BannerView:1.0'
+ //Rxjava
+ compile 'io.reactivex.rxjava2:rxjava:2.1.5'
+ compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
+ compile 'com.squareup.retrofit2:retrofit:2.4.0'
+ compile 'com.squareup.retrofit2:converter-gson:2.3.0'
+ compile 'com.squareup.okhttp3:logging-interceptor:3.5.0'
+ compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
+ //地址选择器 https://github.com/chihane/JDAddressSelector
+ compile 'com.github.chihane:JDAddressSelector:1.1.4'
+ compile 'com.github.bumptech.glide:glide:4.7.1'
+ //dagger
+ // compile 'com.google.dagger:dagger:2.6'
+ // annotationProcessor 'com.google.dagger:dagger-compiler:2.6'
+}
+
diff --git a/baselibs/proguard-rules.pro b/baselibs/proguard-rules.pro
new file mode 100644
index 0000000..f0e3b4a
--- /dev/null
+++ b/baselibs/proguard-rules.pro
@@ -0,0 +1,53 @@
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in D:\android_studo_1.4\AS_ASK_1.4/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the proguardFiles
+# directive in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+-optimizationpasses 5 # 指定代码的压缩级别
+-dontusemixedcaseclassnames # 是否使用大小写混合
+-dontpreverify # 混淆时是否做预校验
+-verbose # 混淆时是否记录日志
+
+-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* # 混淆时所采用的算法
+
+-keep public class * extends android.app.Activity # 保持哪些类不被混淆
+-keep public class * extends android.app.Application # 保持哪些类不被混淆
+-keep public class * extends android.app.Service # 保持哪些类不被混淆
+-keep public class * extends android.content.BroadcastReceiver # 保持哪些类不被混淆
+-keep public class * extends android.content.ContentProvider # 保持哪些类不被混淆
+-keep public class * extends android.app.backup.BackupAgentHelper # 保持哪些类不被混淆
+-keep public class * extends android.preference.Preference # 保持哪些类不被混淆
+-keep public class com.android.vending.licensing.ILicensingService # 保持哪些类不被混淆
+
+-keepclasseswithmembernames class * { # 保持 native 方法不被混淆
+ native ;
+}
+-keepclasseswithmembers class * { # 保持自定义控件类不被混淆
+ public (android.content.Context, android.util.AttributeSet);
+}
+-keepclasseswithmembers class * {# 保持自定义控件类不被混淆
+ public (android.content.Context, android.util.AttributeSet, int);
+}
+-keepclassmembers class * extends android.app.Activity { # 保持自定义控件类不被混淆
+ public void *(android.view.View);
+}
+-keepclassmembers enum * { # 保持枚举 enum 类不被混淆
+ public static **[] values();
+ public static ** valueOf(java.lang.String);
+}
+-keep class * implements android.os.Parcelable { # 保持 Parcelable 不被混淆
+ public static final android.os.Parcelable$Creator *;
+}
+#第三方混淆添加
diff --git a/baselibs/src/main/AndroidManifest.xml b/baselibs/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..da47192
--- /dev/null
+++ b/baselibs/src/main/AndroidManifest.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
diff --git a/baselibs/src/main/java/com/baselibs/helper/CharacterParser.java b/baselibs/src/main/java/com/baselibs/helper/CharacterParser.java
new file mode 100644
index 0000000..fa42773
--- /dev/null
+++ b/baselibs/src/main/java/com/baselibs/helper/CharacterParser.java
@@ -0,0 +1,166 @@
+package com.baselibs.helper;
+
+import android.util.Log;
+
+/**
+ * Java汉字转换为拼音
+ *
+ * @author Mr.Z
+ */
+public class CharacterParser {
+ private static final String TAG = "CharacterParser";
+ private static int[] pyvalue = new int[]{-20319, -20317, -20304, -20295, -20292, -20283, -20265, -20257,
+ -20242, -20230, -20051, -20036, -20032, -20026, -20002, -19990, -19986, -19982, -19976, -19805, -19784, -19775, -19774, -19763,
+ -19756, -19751, -19746, -19741, -19739, -19728, -19725, -19715, -19540, -19531, -19525, -19515, -19500, -19484, -19479, -19467,
+ -19289, -19288, -19281, -19275, -19270, -19263, -19261, -19249, -19243, -19242, -19238, -19235, -19227, -19224, -19218, -19212,
+ -19038, -19023, -19018, -19006, -19003, -18996, -18977, -18961, -18952, -18783, -18774, -18773, -18763, -18756, -18741, -18735,
+ -18731, -18722, -18710, -18697, -18696, -18526, -18518, -18501, -18490, -18478, -18463, -18448, -18447, -18446, -18239, -18237,
+ -18231, -18220, -18211,
+ -18201, -18184, -18183, -18181, -18012, -17997, -17988, -17970, -17964, -17961, -17950, -17947, -17931, -17928, -17922,
+ -17759, -17752, -17733, -17730, -17721, -17703, -17701, -17697, -17692, -17683, -17676, -17496, -17487, -17482, -17468,
+ -17454, -17433, -17427, -17417, -17202, -17185, -16983, -16970, -16942, -16915, -16733, -16708, -16706, -16689, -16664,
+ -16657, -16647, -16474, -16470, -16465, -16459, -16452, -16448, -16433, -16429, -16427, -16423, -16419, -16412, -16407,
+ -16403, -16401, -16393, -16220, -16216, -16212, -16205, -16202, -16187, -16180, -16171, -16169, -16158, -16155, -15959,
+ -15958, -15944, -15933, -15920, -15915, -15903, -15889, -15878, -15707, -15701, -15681, -15667, -15661, -15659, -15652,
+ -15640, -15631, -15625, -15454, -15448, -15436, -15435, -15419,
+ -15416, -15408, -15394, -15385, -15377, -15375, -15369, -15363, -15362, -15183, -15180, -15165, -15158, -15153, -15150,
+ -15149, -15144, -15143, -15141, -15140, -15139, -15128, -15121, -15119, -15117, -15110, -15109, -14941, -14937, -14933,
+ -14930, -14929, -14928, -14926, -14922, -14921, -14914, -14908, -14902, -14894, -14889, -14882, -14873, -14871, -14857,
+ -14678, -14674, -14670, -14668, -14663, -14654, -14645, -14630, -14594, -14429, -14407, -14399, -14384, -14379, -14368,
+ -14355, -14353, -14345, -14170, -14159, -14151, -14149, -14145, -14140, -14137, -14135, -14125, -14123, -14122, -14112,
+ -14109, -14099, -14097, -14094, -14092, -14090, -14087, -14083, -13917, -13914, -13910, -13907, -13906, -13905, -13896,
+ -13894, -13878, -13870, -13859, -13847, -13831, -13658, -13611,
+ -13601, -13406, -13404, -13400, -13398, -13395, -13391, -13387, -13383, -13367, -13359, -13356, -13343, -13340, -13329,
+ -13326, -13318, -13147, -13138, -13120, -13107, -13096, -13095, -13091, -13076, -13068, -13063, -13060, -12888, -12875,
+ -12871, -12860, -12858, -12852, -12849, -12838, -12831, -12829, -12812, -12802, -12607, -12597, -12594, -12585, -12556,
+ -12359, -12346, -12320, -12300, -12120, -12099, -12089, -12074, -12067, -12058, -12039, -11867, -11861, -11847, -11831,
+ -11798, -11781, -11604, -11589, -11536, -11358, -11340, -11339, -11324, -11303, -11097, -11077, -11067, -11055, -11052,
+ -11045, -11041, -11038, -11024, -11020, -11019, -11018, -11014, -10838, -10832, -10815, -10800, -10790, -10780, -10764,
+ -10587, -10544, -10533, -10519, -10331, -10329, -10328, -10322,
+ -10315, -10309, -10307, -10296, -10281, -10274, -10270, -10262, -10260, -10256, -10254};
+ public static String[] pystr = new String[]{"a", "ai", "an", "ang", "ao", "ba", "bai", "ban",
+ "bang", "bao", "bei", "ben", "beng", "bi", "bian", "biao", "bie", "bin", "bing", "bo", "bu", "ca", "cai", "can",
+ "cang", "cao", "ce", "ceng", "cha", "chai", "chan", "chang", "chao", "che", "chen", "cheng", "chi", "chong", "chou",
+ "chu", "chuai", "chuan", "chuang", "chui", "chun", "chuo", "ci", "cong", "cou", "cu", "cuan", "cui", "cun", "cuo", "da",
+ "dai", "dan", "dang", "dao", "de", "deng", "di", "dian", "diao", "die", "ding", "diu", "dong", "dou", "du", "duan", "dui",
+ "dun", "duo", "e", "en", "er", "fa", "fan", "fang", "fei", "fen", "feng", "fo", "fou", "fu", "ga", "gai", "gan", "gang",
+ "gao", "ge", "gei", "gen", "geng", "gong", "gou", "gu", "gua", "guai", "guan",
+ "guang", "gui", "gun", "guo", "ha", "hai", "han", "hang", "hao", "he", "hei", "hen", "heng", "hong", "hou", "hu",
+ "hua", "huai", "huan", "huang", "hui", "hun", "huo", "ji", "jia", "jian", "jiang", "jiao", "jie", "jin", "jing",
+ "jiong", "jiu", "ju", "juan", "jue", "jun", "ka", "kai", "kan", "kang", "kao", "ke", "ken", "keng", "kong", "kou",
+ "ku", "kua", "kuai", "kuan", "kuang", "kui", "kun", "kuo", "la", "lai", "lan", "lang", "lao", "le", "lei", "leng",
+ "li", "lia", "lian", "liang", "liao", "lie", "lin", "ling", "liu", "long", "lou", "lu", "lv", "luan", "lue", "lun",
+ "luo", "ma", "mai", "man", "mang", "mao", "me", "mei", "men", "meng", "mi", "mian", "miao", "mie", "min", "ming",
+ "miu", "mo", "mou", "mu", "na", "nai", "nan", "nang", "nao", "ne", "nei", "nen", "neng", "ni",
+ "nian", "niang", "niao", "nie", "nin", "ning", "niu", "nong", "nu", "nv", "nuan", "nue", "nuo", "o", "ou", "pa",
+ "pai", "pan", "pang", "pao", "pei", "pen", "peng", "pi", "pian", "piao", "pie", "pin", "ping", "po", "pu", "qi",
+ "qia", "qian", "qiang", "qiao", "qie", "qin", "qing", "qiong", "qiu", "qu", "quan", "que", "qun", "ran", "rang",
+ "rao", "re", "ren", "reng", "ri", "rong", "rou", "ru", "ruan", "rui", "run", "ruo", "sa", "sai", "san", "sang",
+ "sao", "se", "sen", "seng", "sha", "shai", "shan", "shang", "shao", "she", "shen", "sheng", "shi", "shou", "shu",
+ "shua", "shuai", "shuan", "shuang", "shui", "shun", "shuo", "si", "song", "sou", "su", "suan", "sui", "sun", "suo",
+ "ta", "tai", "tan", "tang", "tao", "te", "teng", "ti", "tian", "tiao", "tie", "ting", "tong", "tou", "tu",
+ "tuan", "tui", "tun", "tuo", "wa", "wai", "wan", "wang", "wei", "wen", "weng", "wo", "wu", "xi", "xia", "xian",
+ "xiang", "xiao", "xie", "xin", "xing", "xiong", "xiu", "xu", "xuan", "xue", "xun", "ya", "yan", "yang", "yao",
+ "ye", "yi", "yin", "ying", "yo", "yong", "you", "yu", "yuan", "yue", "yun", "za", "zai", "zan", "zang", "zao",
+ "ze", "zei", "zen", "zeng", "zha", "zhai", "zhan", "zhang", "zhao", "zhe", "zhen", "zheng", "zhi", "zhong", "zhou",
+ "zhu", "zhua", "zhuai", "zhuan", "zhuang", "zhui", "zhun", "zhuo", "zi", "zong", "zou", "zu", "zuan", "zui", "zun", "zuo"};
+ private StringBuilder buffer;
+ private String resource;
+ private static CharacterParser characterParser = new CharacterParser();
+
+ public static CharacterParser getInstance() {
+ return characterParser;
+ }
+
+ public String getResource() {
+ return resource;
+ }
+
+ public void setResource(String resource) {
+ this.resource = resource;
+ }
+
+ /**
+ * 汉字转成ASCII码 * * @param chs * @return
+ */
+ private int getChsAscii(String chs) {
+ int asc = 0;
+ try {
+ byte[] bytes = chs.getBytes("gb2312");
+ if (bytes == null || bytes.length > 2 || bytes.length <= 0) {
+ throw new RuntimeException("illegal resource string");
+ }
+ if (bytes.length == 1) {
+ asc = bytes[0];
+ }
+ if (bytes.length == 2) {
+ int hightByte = 256 + bytes[0];
+ int lowByte = 256 + bytes[1];
+ asc = (256 * hightByte + lowByte) - 256 * 256;
+ }
+ } catch (Exception e) {
+ System.out.println("ERROR:ChineseSpelling.class-getChsAscii(String chs)" + e);
+ }
+ return asc;
+ }
+
+ /**
+ * 单字解析 * * @param str * @return
+ */
+ public String convert(String str) {
+ String result = null;
+ int ascii = getChsAscii(str);
+ if (ascii > 0 && ascii < 160) {
+ result = String.valueOf((char) ascii);
+ } else {
+ for (int i = (pyvalue.length - 1); i >= 0; i--) {
+ if (pyvalue[i] <= ascii) {
+ result = pystr[i];
+ break;
+ }
+ }
+ }
+ return result;
+ }
+
+ /**
+ * 词组解析 * * @param chs * @return
+ */
+ public String getSelling(String chs) {
+ String key, value = null;
+ buffer = new StringBuilder();
+ for (int i = 0; i < chs.length(); i++) {
+ key = chs.substring(i, i + 1);
+ if (key.getBytes().length >= 2) {
+ value = (String) convert(key);
+ if (value == null) {
+ value = "unknown";
+ }
+ } else {
+ value = key;
+ }
+ buffer.append(value);
+ }
+ Log.d(TAG, "buffer: " + buffer.toString());
+ return buffer.toString();
+ }
+
+ /**
+ * 获取一个字符串的首字母,或是#
+ * @param chs
+ * @return
+ */
+ public String getFirstLetter(String chs) {
+ String firstLetter = getSelling(chs).substring(0, 1).toUpperCase();
+ if (!firstLetter.matches("[A-Z]")) {
+ firstLetter = "#";
+ }
+ return firstLetter;
+
+ }
+
+ public String getSpelling() {
+ return this.getSelling(this.getResource());
+ }
+
+}
diff --git a/baselibs/src/main/java/com/baselibs/helper/PermissionsManager.java b/baselibs/src/main/java/com/baselibs/helper/PermissionsManager.java
new file mode 100644
index 0000000..f674d08
--- /dev/null
+++ b/baselibs/src/main/java/com/baselibs/helper/PermissionsManager.java
@@ -0,0 +1,248 @@
+package com.baselibs.helper;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.net.Uri;
+import android.os.Build;
+import android.provider.Settings;
+import android.support.annotation.NonNull;
+import android.support.v4.app.ActivityCompat;
+
+/**
+ * Created by: UFO on: 2016/11/25.
+ *
+ * 描述:Android 6.0权限工具类
+ */
+
+public class PermissionsManager {
+
+ /*权限请求码*/
+ public static final int REQUEST_CODE_PERMISSIONS = 10001;
+ /*应用设置页面请求码*/
+ public static final int REQUEST_CODE_SETTING = 10002;
+ private OnPermissionsCallback mCallback;
+ private String[] permissions;
+ private Activity mActivity;
+ private AlertDialog mAlertDialog;
+
+ public PermissionsManager(Activity activity) {
+ mActivity = activity;
+ }
+
+ /**
+ * 设置回调
+ *
+ * @param callback
+ */
+ public void setPermissionCallback(OnPermissionsCallback callback) {
+ this.mCallback = callback;
+ }
+
+ public String[] getPermissions() {
+ return permissions;
+ }
+
+ public void setPermissions(String[] permissions) {
+ this.permissions = permissions;
+ }
+
+ /**
+ * 权限请求,结果会在@see {@link #resultPermissionsProcess(Activity, int, String[], int[])}进行处理
+ *
+ * @param permissionsArr
+ * @deprecated @see requestPermission();
+ */
+ public void requestPermission(String[] permissionsArr) {
+ if (!isM()) {
+ mCallback.hasPermissions();
+ return;
+ }
+// this.permissions = permissionsArr;
+ /*判断是否有权限*/
+ if (!hasSelfPermission(mActivity, this.permissions)) {
+ ActivityCompat.requestPermissions(mActivity, this.permissions, REQUEST_CODE_PERMISSIONS);
+ } else {
+ if (null != mCallback) {
+ mCallback.hasPermissions();
+ }
+ }
+ }
+
+ /**
+ * 发起权限申请,
+ * 设置权限通过@see setPermission(permissions);
+ */
+ public void requestPermission() {
+ this.requestPermission(null);
+ }
+
+ /**
+ * 权限请求结果处理,处理@see {@link #requestPermission(String[])}的请求结果
+ * 此方法应在{@link android.support.v4.app.FragmentActivity#onRequestPermissionsResult(int, String[], int[])}
+ * 里调用
+ *
+ * @param requestCode
+ * @param permissions
+ * @param grantResults
+ */
+ public void resultPermissionsProcess(Activity activity, int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+ if (requestCode == REQUEST_CODE_PERMISSIONS) {
+ boolean hasAllPermissions = true;
+ for (int i = 0; i < grantResults.length; i++) {
+ if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
+ hasAllPermissions = false;
+ break;
+ }
+ }
+
+ if (null != mCallback) {
+ if (hasAllPermissions) {
+ mCallback.hasPermissions();
+ } else {
+ mCallback.noPermissions();
+ }
+ }
+
+
+ }
+ }
+
+ /*if (ActivityCompat.shouldShowRequestPermissionRationale(activity, permissions[i])) {
+ //第二次申请
+ requestPermission(new String[]{permissions[i]});
+ return;
+ } else {
+ //当第二次申请还是不允许的话就走这里了
+ if (null != mCallback) {
+ mCallback.noPermissions();
+ }
+ return;
+ }*/
+
+ /**
+ * 打开设置界面返回后处理
+ *
+ * @param requestCode
+ * @param resultCode
+ * @param data
+ */
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (requestCode == REQUEST_CODE_SETTING) {
+ requestPermission(this.permissions);
+ }
+ }
+
+ /**
+ * 判断当前系统是不是Android 6.0.因为权限申请只有6.0以上(包括6.0才需要)
+ *
+ * @return 如果是返回true, 否则返回false.
+ */
+ private boolean isM() {
+ return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
+ }
+
+ /**
+ * 判断是否有指定需要请求的权限,只有有一个没有就返回false.否则返回true
+ *
+ * @param context
+ * @param permissionsArr
+ */
+ private boolean hasSelfPermission(Context context, String[] permissionsArr) {
+ for (int i = 0; i < permissionsArr.length; i++) {
+ if (PackageManager.PERMISSION_GRANTED != ActivityCompat.checkSelfPermission(context, permissionsArr[i])) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * 显示打开应用的设置页面对话框
+ *
+ * @param context
+ */
+ public void showOpenSettingDialog(final Activity context) {
+
+ if (null != mAlertDialog && mAlertDialog.isShowing()) {
+ mAlertDialog.dismiss();
+ mAlertDialog = null;
+ }
+ mAlertDialog = new AlertDialog.Builder(context).setTitle("提示")
+ .setMessage("当前应用所需要的权限已经被你禁用,你只能找到-权限管理,然后手动打开所需的权限")
+ .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
+
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ openSettingActivity(context);
+ }
+ })
+ .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ context.finish();
+ }
+ })
+ .setCancelable(false)
+ .show();
+ }
+
+ /**
+ * 显示打开应用的设置页面对话框 只有一个按钮的
+ *
+ * @param context
+ */
+ public void showOpenSettingDialogSingle(final Activity context) {
+ if (null != mAlertDialog && mAlertDialog.isShowing()) {
+ mAlertDialog.dismiss();
+ mAlertDialog = null;
+ }
+ mAlertDialog = new AlertDialog.Builder(context).setTitle("提示")
+ .setMessage("当前应用所需要的权限已经被你禁用,你只能找到-权限管理,然后手动打开所需的权限")
+ .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
+
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ openSettingActivity(context);
+ }
+ })
+ .show();
+ }
+
+ /**
+ * 关闭对话框
+ */
+ public void dismissDialog() {
+ if (null != mAlertDialog && mAlertDialog.isShowing()) {
+ mAlertDialog.dismiss();
+ }
+ }
+
+
+ private void openSettingActivity(Activity activity) {
+ Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:" + activity.getPackageName()));
+ intent.addCategory(Intent.CATEGORY_DEFAULT);
+ activity.startActivityForResult(intent, REQUEST_CODE_SETTING);
+ }
+
+ /**
+ * 是否有权限回调,只有在有权限时才会执行hasPermissions()方法。
+ * 当没有权限时就直接向系统申请权限
+ */
+ public interface OnPermissionsCallback {
+ /**
+ * 当前权限时回调此方法
+ */
+ void hasPermissions();
+
+ /**
+ * 当多次申请后还是没有拿到权限时回调此方法
+ */
+ void noPermissions();
+ }
+}
diff --git a/baselibs/src/main/java/com/baselibs/utils/CloseUtils.java b/baselibs/src/main/java/com/baselibs/utils/CloseUtils.java
new file mode 100644
index 0000000..109803b
--- /dev/null
+++ b/baselibs/src/main/java/com/baselibs/utils/CloseUtils.java
@@ -0,0 +1,29 @@
+package com.baselibs.utils;
+
+import java.io.Closeable;
+import java.io.IOException;
+
+/**
+ * 日期:2017.01.03
+ *
+ * 作者:xudiwei
+ *
+ * 描述:流关闭工具类
+ */
+
+public class CloseUtils {
+
+ /**
+ * 关闭流
+ * @param closeable
+ */
+ public static void close(Closeable closeable){
+ if(null != closeable){
+ try {
+ closeable.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+}
diff --git a/baselibs/src/main/java/com/baselibs/utils/DensityUtils.java b/baselibs/src/main/java/com/baselibs/utils/DensityUtils.java
new file mode 100644
index 0000000..1105b5c
--- /dev/null
+++ b/baselibs/src/main/java/com/baselibs/utils/DensityUtils.java
@@ -0,0 +1,37 @@
+package com.baselibs.utils;
+
+import android.content.Context;
+import android.util.TypedValue;
+
+/**
+ * 日期:2016/2/1.19:25
+ *
+ * 作者:XuDiWei
+ *
+ * 描述:密度与单位转换工具
+ */
+public class DensityUtils {
+
+ /**
+ * dip转Px
+ *
+ * @param dip
+ * @return
+ */
+ public static float dipToPx(Context context, int dip) {
+ return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dip, context.getResources().getDisplayMetrics());
+// float density = context.getResources().getDisplayMetrics().density;
+// return (int) (density * dip + 0.5f);
+ }
+
+ /**
+ * sp 转px
+ *
+ * @param context
+ * @param sp
+ * @return
+ */
+ public static float spToDx(Context context, int sp) {
+ return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, context.getResources().getDisplayMetrics());
+ }
+}
diff --git a/baselibs/src/main/java/com/baselibs/utils/FileUtils.java b/baselibs/src/main/java/com/baselibs/utils/FileUtils.java
new file mode 100644
index 0000000..9b5c579
--- /dev/null
+++ b/baselibs/src/main/java/com/baselibs/utils/FileUtils.java
@@ -0,0 +1,295 @@
+package com.baselibs.utils;
+
+import android.graphics.Bitmap;
+import android.os.Environment;
+import android.text.TextUtils;
+import android.util.Base64;
+import android.util.Log;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
+/**
+ * 日期:2017.01.12
+ *
+ * 作者:xudiwei
+ *
+ * 描述:文件工具类
+ */
+public class FileUtils {
+ private static final String TAG = "FileUtils";
+
+ /**
+ * 根据路径创建一个在sd卡目录下的一个文件夹
+ *
+ * @param dirPath 文件夹名
+ * @return 返回创建成功的File对象或是null.
+ */
+ public static File createDirToSDCard(String dirPath) {
+ if (TextUtils.isEmpty(dirPath)) {
+ throw new IllegalArgumentException("dir path can not empty");
+ }
+
+ if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
+ File dir; /*= Environment.getExternalStoragePublicDirectory(dirPath);*/
+ dir = new File(Environment.getExternalStorageDirectory(), dirPath);
+ boolean mkdirs = dir.mkdirs() || dir.isDirectory();
+ return dir;
+ }
+ return null;
+ }
+
+ /**
+ * 创建一个文件,如果已存在则册除后再创建
+ *
+ * @param dir
+ * @param filename
+ * @return
+ */
+ public static File createFile(File dir, String filename) {
+ File file = new File(dir, filename);
+ try {
+ if (file.exists()) {
+ boolean deleteResult = file.delete();
+ }
+ boolean createResult = file.createNewFile();
+ Log.d(TAG, "createFile: " + createResult);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return file;
+ }
+
+ /**
+ * 册除一个已存在的文件
+ *
+ * @param dir
+ * @param name
+ * @return
+ */
+ public static boolean deleteFile(String dir, String name) {
+ File file = new File(createDirToSDCard(dir), name);
+ if (file.exists() && file.isFile()) {
+ boolean deleteResult = file.delete();
+ Log.d(TAG, "deleteFile: " + deleteResult);
+ return deleteResult;
+ }
+ return false;
+ }
+
+ /**
+ * 删除文件夹里面的所以文件
+ */
+ public static void deleteDir(File dir) {
+ if (dir.exists()) {
+ File[] files = dir.listFiles();
+ for (int i = 0; i < files.length; i++) {
+ if (files[i].isFile()) {
+ files[i].delete();
+ } else {
+ deleteDir(files[i]);
+ }
+ }
+ }
+ }
+
+
+ /**
+ * 统计文件夹文件的大小
+ */
+ public static long getSize(File file) {
+ // 判断文件是否存在
+ if (file.exists()) {
+ // 如果是目录则递归计算其内容的总大小,如果是文件则直接返回其大小
+ if (!file.isFile()) {
+ // 获取文件大小
+ File[] fl = file.listFiles();
+ long ss = 0;
+ for (File f : fl)
+ ss += getSize(f);
+ return ss;
+ } else {
+ long ss = (long) file.length();
+ return ss; // 单位制bytes
+ }
+ } else {
+ // System.out.println("文件或者文件夹不存在,请检查路径是否正确!");
+ return 0;
+ }
+ }
+
+ /**
+ * 编码Base64图片
+ *
+ * @param file
+ * @return
+ */
+ public static String encodeImage(File file) {
+ FileInputStream fis = null;
+ byte[] rs = new byte[0];
+
+ try {
+ fis = new FileInputStream(file);
+ rs = new byte[fis.available()];
+ fis.read(rs);
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ if (fis != null) {
+ try {
+ fis.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ }
+ return Base64.encodeToString(rs, Base64.DEFAULT);
+ }
+
+ /**
+ * 把一个bitmap对象保存为文件
+ *
+ * @param fileName
+ * @param bitmap
+ */
+ public static void writeBitmapToFile(String path, String fileName, Bitmap bitmap) {
+ if (null == bitmap) {
+ return;
+ }
+ if (TextUtils.isEmpty(fileName)) {
+ throw new RuntimeException(" fileName is null");
+ }
+ FileOutputStream fos = null;
+ try {
+ File file = new File(createDirToSDCard(path), fileName);
+ fos = new FileOutputStream(file);
+ bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ } finally {
+ CloseUtils.close(fos);
+ }
+ }
+
+ /**
+ * 把一个String对象保存为文件
+ *
+ * @param fileName
+ * @param str
+ */
+ public static void writeStringToFile(String path, String fileName, String str) {
+ if (null == str) {
+ return;
+ }
+ if (TextUtils.isEmpty(fileName)) {
+ throw new RuntimeException(" fileName is null");
+ }
+ FileOutputStream fos = null;
+ try {
+ File file = new File(createDirToSDCard(path), fileName);
+ fos = new FileOutputStream(file);
+ fos.write(str.getBytes());
+ fos.flush();
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ CloseUtils.close(fos);
+ }
+ }
+
+ /**
+ * 根据文件路径与名称读取一个字符串值
+ *
+ * @param path
+ * @param fileName
+ * @return
+ */
+ public static String readStringFromFile(String path, String fileName) {
+ if (TextUtils.isEmpty(path) || TextUtils.isEmpty(fileName)) {
+ throw new IllegalArgumentException(" path or filename is null");
+ }
+
+ StringBuilder sb = new StringBuilder();
+ BufferedReader br = null;
+
+ try {
+ File file = new File(createDirToSDCard(path), fileName);
+ Log.d(TAG, file.getAbsolutePath());
+ Log.d(TAG, "exists : " + file.exists());
+ br = new BufferedReader(new FileReader(file));
+ String buf;
+ while (null != (buf = br.readLine())) {
+ sb.append(buf);
+ }
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ CloseUtils.close(br);
+ }
+
+ return sb.toString();
+ }
+
+
+ /**
+ * 把一个对象写到文件里
+ *
+ * @param path
+ * @param fileName
+ * @param object
+ */
+ public static void writeObjectToFile(String path, String fileName, Object object) {
+ File file = new File(createDirToSDCard(path), fileName);
+ FileOutputStream fos = null;
+ ObjectOutputStream oos = null;
+ try {
+ fos = new FileOutputStream(file);
+ oos = new ObjectOutputStream(fos);
+ oos.writeObject(object);
+ oos.flush();
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ CloseUtils.close(fos);
+ CloseUtils.close(oos);
+ }
+ }
+
+ /**
+ * 读取一个对象
+ *
+ * @param path
+ * @param fileName
+ * @return
+ */
+ public static Object readObjectFromFile(String path, String fileName) {
+ File file = new File(createDirToSDCard(path), fileName);
+ FileInputStream fis = null;
+ ObjectInputStream ois = null;
+ try {
+ fis = new FileInputStream(file);
+ ois = new ObjectInputStream(fis);
+ Object object = ois.readObject();
+ return object;
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ CloseUtils.close(fis);
+ CloseUtils.close(ois);
+ }
+
+ return null;
+ }
+
+}
diff --git a/baselibs/src/main/java/com/baselibs/utils/Md5Utils.java b/baselibs/src/main/java/com/baselibs/utils/Md5Utils.java
new file mode 100644
index 0000000..f1bf01f
--- /dev/null
+++ b/baselibs/src/main/java/com/baselibs/utils/Md5Utils.java
@@ -0,0 +1,68 @@
+package com.baselibs.utils;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+public class Md5Utils {
+ /**
+ * 加密字符串采用md5算法
+ *
+ * @param text
+ * @return
+ */
+ public static String encode(String text) {
+ try {
+ MessageDigest digest = MessageDigest.getInstance("md5");
+ byte[] result = digest.digest(text.getBytes());
+ StringBuffer sb = new StringBuffer();
+ for (byte b : result) {
+ String hex = Integer.toHexString(b & 0xff);//加盐
+ if (hex.length() == 1) {
+ sb.append("0");
+ }
+ sb.append(hex);
+ }
+ return sb.toString();
+ } catch (NoSuchAlgorithmException e) {
+ e.printStackTrace();
+ return "";//can't reach
+ }
+ }
+
+ /**
+ * 获取文件的md5值
+ *
+ * @param file
+ * @return
+ */
+ public static String encodeFile(File file) {
+ FileInputStream in;
+ try {
+ in = new FileInputStream(file);
+ MessageDigest digester = MessageDigest.getInstance("MD5");
+ byte[] bytes = new byte[8192];
+ int byteCount;
+ while ((byteCount = in.read(bytes)) > 0) {
+ digester.update(bytes, 0, byteCount);
+ }
+ byte[] digest = digester.digest();
+ StringBuffer sb = new StringBuffer();
+ for (byte b : digest) {
+ String hex = Integer.toHexString(b & 0xff);//加盐
+ if (hex.length() == 1) {
+ sb.append("0");
+ }
+ sb.append(hex);
+ }
+ return sb.toString();
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return "";
+ }
+}
diff --git a/baselibs/src/main/java/com/baselibs/widget/LetterBar.java b/baselibs/src/main/java/com/baselibs/widget/LetterBar.java
new file mode 100644
index 0000000..d7340b5
--- /dev/null
+++ b/baselibs/src/main/java/com/baselibs/widget/LetterBar.java
@@ -0,0 +1,160 @@
+package com.baselibs.widget;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.Typeface;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.View;
+import android.widget.TextView;
+
+import com.baselibs.utils.DensityUtils;
+
+/**
+ * 作者:xudiwei
+ *
+ * 日期: Administrator on 2015/8/25.
+ *
+ * 文本描述:字母导航View
+ */
+public class LetterBar extends View {
+
+ private String[] lets = {"A", "B", "C", "D", "E", "F", "G",
+ "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q",
+ "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "#"};
+ private Paint mPaint;
+
+ /**
+ * 当前控件的宽度
+ */
+ private int width;
+ /**
+ * 当前控件的高度
+ */
+ private int height;
+ /**
+ * 当前选中字母的索引
+ */
+ private int choosePoint;
+
+ /**
+ * 文本的高度
+ */
+ private int textHeight;
+
+ /**
+ * 默认的背影色
+ */
+ private final static String BACKCOLOR_DEFAULT = "#00000000";
+
+ /**
+ * 触摸时的背影色
+ */
+ private final static String BACKCOLOR_TOUCH = "#33000000";
+
+ /**
+ * 大文本显示
+ */
+ private TextView textView;
+
+ private onLetterSelectedListener listener;
+
+ public LetterBar(Context context) {
+ super(context);
+ }
+
+ public LetterBar(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ init();
+ }
+
+ private void init() {
+ setBackgroundColor(Color.parseColor(BACKCOLOR_DEFAULT));
+ mPaint = new Paint();
+ mPaint.setAntiAlias(true);
+ mPaint.setColor(Color.parseColor("#ff67c729"));
+ mPaint.setTypeface(Typeface.DEFAULT);
+ mPaint.setTextSize(DensityUtils.dipToPx(getContext(),15));
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ width = this.getMeasuredWidth();
+ height = this.getMeasuredHeight();
+ //文本的宽,可以通过Paint的方法进行测量获得
+ float textWidth = mPaint.measureText(lets[0]);
+ //文本的高,是当前控件的高度除以字母数量的长度
+ textHeight = height / lets.length;
+ //文本的X轴坐标,是当前控件的宽度减去文本的宽度再除以2
+ int poX = (int) ((width - textWidth) / 2);
+ for (int i = 0; i < lets.length; i++) {
+ if (i == choosePoint) {
+ mPaint.setColor(Color.RED);
+ } else {
+ mPaint.setColor(Color.parseColor("#ff67c729"));
+ }
+ canvas.drawText(lets[i], poX, textHeight * (i + 1), mPaint);
+ }
+ }
+
+ @Override
+ public boolean dispatchTouchEvent(MotionEvent event) {
+ int y = (int) event.getY();
+ switch (event.getAction()) {
+ case MotionEvent.ACTION_UP:
+ setBackgroundColor(Color.parseColor(BACKCOLOR_DEFAULT));
+ //当手指松开时应该把选中字母索引的变量设置-1表示不选中任何一个
+ choosePoint = -1;
+ if (null != textView) {
+ textView.setVisibility(View.INVISIBLE);
+ }
+ invalidate();
+ break;
+ default:
+ choosePoint = y / textHeight;
+ setBackgroundColor(Color.parseColor(BACKCOLOR_TOUCH));
+ if (null != textView) {
+ if (choosePoint >= 0 && choosePoint < lets.length) {
+ //根据计算出来的索引获取字字母
+ String let = lets[choosePoint];
+ textView.setText(let);
+ textView.setVisibility(View.VISIBLE);
+ //回调
+ if (null != listener){
+ listener.onLetterSelected(let);
+ System.out.println(listener);
+ }
+ }
+ }
+
+ invalidate();
+ }
+
+ return true;
+ }
+
+ /**
+ * 大文本显示
+ * @param textView
+ */
+ public void setTextView(TextView textView) {
+ this.textView = textView;
+ }
+
+ /**
+ * 设置字母选中回调方法
+ * @param listener
+ */
+ public void setOnLetterSelectedListener(onLetterSelectedListener listener){
+ this.listener = listener;
+ }
+
+ /**
+ * 回调接口
+ */
+ public interface onLetterSelectedListener{
+ void onLetterSelected(String letter);
+ }
+}
diff --git a/baselibs/src/main/java/com/baselibs/widget/RoundImageView.java b/baselibs/src/main/java/com/baselibs/widget/RoundImageView.java
new file mode 100644
index 0000000..1adec54
--- /dev/null
+++ b/baselibs/src/main/java/com/baselibs/widget/RoundImageView.java
@@ -0,0 +1,108 @@
+package com.baselibs.widget;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Matrix;
+import android.graphics.Paint;
+import android.graphics.PorterDuff;
+import android.graphics.PorterDuffXfermode;
+import android.graphics.RectF;
+import android.graphics.drawable.Drawable;
+import android.util.AttributeSet;
+import android.widget.ImageView;
+
+import com.antiphon.baselibs.R;
+
+
+/**
+ * 作者: XuDiWei
+ *
+ * 日期:2014/7/20 17:06.
+ *
+ * 文件描述:圆角ImageView
+ *
+ * @attr ref R.styleable.RoundImageView_degree 图片的角度(int值,不用给单位)
+ *
+ */
+public class RoundImageView extends ImageView {
+
+ /**
+ * 圆角角度
+ */
+ private int degree;
+ private Matrix mMatrix = new Matrix();
+ private Paint mPaint = new Paint();
+
+ public RoundImageView(Context context) {
+ super(context);
+ }
+
+ public RoundImageView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.RoundImageView);
+ degree = typedArray.getInt(R.styleable.RoundImageView_degree, 0);
+ typedArray.recycle();
+ }
+
+ public RoundImageView(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ Bitmap roundBitmap = createRoundBitmap();
+ if (null != roundBitmap) {
+ canvas.drawBitmap(roundBitmap, mMatrix, mPaint);
+ roundBitmap.recycle();
+ }
+
+ //这种方法好像有锯齿
+// setImageBitmap(roundBitmap);
+// super.onDraw(canvas);
+
+ }
+
+ private Bitmap createRoundBitmap() {
+ //获取drawable然后转为bitmap
+ Drawable drawable = getDrawable();
+ if (null == drawable) {
+ return null;
+ }
+ int intrinsicWidth = drawable.getIntrinsicWidth();
+ int intrinsicHeight = drawable.getIntrinsicHeight();
+ //创建空画板,用于把drawable画成bitmap
+ Bitmap bitmap = Bitmap.createBitmap(intrinsicWidth, intrinsicHeight, Bitmap.Config.ARGB_8888);
+ Canvas canvas = new Canvas(bitmap);
+ drawable.setBounds(0, 0, intrinsicWidth, intrinsicHeight);
+ drawable.draw(canvas);
+
+ //转成圆角图片
+ // 创建空画板,用于画一个圆角矩形和bitmap然后取交集 这里的宽高要用当前控件的宽高,不要用bitmap的宽高
+ Bitmap roundBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
+ Canvas canvasRound = new Canvas(roundBitmap);
+ Paint paint = new Paint();
+ paint.setAntiAlias(true);
+ //这里的宽高要用当前控件的宽高,不要用bitmap的宽高
+ RectF rectF = new RectF(0, 0, getWidth(), getHeight());
+ canvasRound.drawRoundRect(rectF, degree, degree, paint);
+ //设置这个属性就可以获取后画的图与先画的矩形重叠部分显示后画的图形
+ paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
+ canvasRound.drawBitmap(bitmap, null, rectF, paint);
+ bitmap.recycle();
+ return roundBitmap;
+
+ }
+
+ /**
+ * 设置角度
+ *
+ * @param degree
+ */
+ public void setDegree(int degree) {
+ this.degree = degree;
+ }
+
+
+}
diff --git a/baselibs/src/main/res/values/attrs.xml b/baselibs/src/main/res/values/attrs.xml
new file mode 100644
index 0000000..e1f6e9f
--- /dev/null
+++ b/baselibs/src/main/res/values/attrs.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/baselibs/src/main/res/values/strings.xml b/baselibs/src/main/res/values/strings.xml
new file mode 100644
index 0000000..6485d5d
--- /dev/null
+++ b/baselibs/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+
+ BaseLibs
+
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..6304949
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,29 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+
+buildscript {
+
+ repositories {
+ google()
+ jcenter()
+ }
+ dependencies {
+ classpath 'com.android.tools.build:gradle:3.1.4'
+
+
+ // NOTE: Do not place your application dependencies here; they belong
+ // in the individual module build.gradle files
+ }
+}
+
+allprojects {
+ repositories {
+ google()
+ jcenter()
+ maven { url "https://jitpack.io"}
+ }
+}
+
+
+task clean(type: Delete) {
+ delete rootProject.buildDir
+}
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..f6b961f
Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..6c43e15
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Fri Aug 14 15:05:19 CST 2020
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
diff --git a/gradlew b/gradlew
new file mode 100644
index 0000000..cccdd3d
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,172 @@
+#!/usr/bin/env sh
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+ echo "$*"
+}
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+ NONSTOP* )
+ nonstop=true
+ ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=$((i+1))
+ done
+ case $i in
+ (0) set -- ;;
+ (1) set -- "$args0" ;;
+ (2) set -- "$args0" "$args1" ;;
+ (3) set -- "$args0" "$args1" "$args2" ;;
+ (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+ cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..f955316
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,84 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..0342a64
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1 @@
+include ':app', ':baselibs'