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 clz) { + startActivity(new Intent(this, clz)); + } + + /** + * 开启一个Activity并关闭当前Activity + * + * @param clz + */ + public void startActivityAndFinishSelf(Class 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 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 clz) { + startActivity(new Intent(this, clz)); + } + + /** + * 开启一个Activity并关闭当前Activity + * + * @param clz 需要开启的Activity + */ + public void startActivityAndFinishSelf(Class 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 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 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 clz); + + /** + * 开启一个Activity,并finish掉当前的Activity + * + * @param clz 消息内容 + */ + void startActivityAndFinishSelf(Class 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 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 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + +