diff --git a/app/build.gradle b/app/build.gradle
index 5dcbd17..a41d9c5 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -61,14 +61,8 @@ android {
v1SigningEnabled true
v2SigningEnabled true
}
- debug {
- storeFile file("src/doc/xueshibaoos.jks")
- storePassword "123456"
- keyAlias "xueshibaoos"
- keyPassword "123456"
- v2SigningEnabled false
- }
- release {// 签名文件
+
+ mtk {
storeFile file("src/doc/xueshibaoos.jks")
storePassword "123456"
keyAlias "xueshibaoos"
@@ -92,6 +86,7 @@ android {
debuggable true
signingConfig signingConfigs.zhanRui
}
+
debug {
// 显示Log
buildConfigField "boolean", "LOG_DEBUG", "true"
@@ -99,7 +94,7 @@ android {
minifyEnabled false
//Zipalign优化
zipAlignEnabled true
- signingConfig signingConfigs.debug
+ signingConfig signingConfigs.mtk
applicationVariants.all { variant ->
variant.outputs.each { output ->
if (outputFile != null) {
@@ -109,6 +104,7 @@ android {
}
}
}
+
release {
// 不显示Log
buildConfigField "boolean", "LOG_DEBUG", "false"
@@ -119,7 +115,7 @@ android {
//前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,后一个文件是自己的定义混淆文件
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//签名
- signingConfig signingConfigs.release
+ signingConfig signingConfigs.mtk
// 将release版本的包名重命名,加上版本及日期
applicationVariants.all { variant ->
variant.outputs.each { output ->
@@ -191,7 +187,7 @@ dependencies {
implementation 'com.amap.api:location:5.1.0'
//MMKV
implementation 'com.tencent:mmkv-static:1.2.12'
- implementation 'com.tencent.tpns:tpns:1.3.6.0-release'
+ implementation 'com.tencent.tpns:tpns:1.3.6.1-release'
//状态栏透明
implementation 'com.gitee.zackratos:UltimateBarX:0.8.0'
//指示器
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b4bff93..0d0150b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -72,7 +72,7 @@
healthCodes) {
@@ -86,44 +91,31 @@ public class CodeActivity extends BaseActivity {
mHealthCodeAdapter.notifyDataSetChanged();
}
+ @Override
+ public void setHealthCode(List codeList) {
+ NetInterfaceManager.getInstance().getHealthCode(true, lifecycleSubject, new NetInterfaceManager.HealthCodeCallback() {
+ @Override
+ public void setHealthCode(List healthCode) {
+ setImageViews(healthCode);
+ mViewPager.setVisibility(View.VISIBLE);
+ mMagicIndicator.setVisibility(View.VISIBLE);
+ iv_nodata.setVisibility(View.GONE);
+ }
- private void getHealthCode() {
- NetInterfaceManager.getInstance().getHealthCodeApi()
- .getArticleDetails(Utils.getSerial())
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY))
- .subscribe(new Observer>>() {
- @Override
- public void onSubscribe(@NonNull Disposable d) {
- Log.e("getHealthCode", "onSubscribe: ");
- }
+ @Override
+ public void noData() {
+ mViewPager.setVisibility(View.GONE);
+ mMagicIndicator.setVisibility(View.GONE);
+ iv_nodata.setVisibility(View.VISIBLE);
+ }
- @Override
- public void onNext(@NonNull BaseResponse> listBaseResponse) {
- Log.e("getHealthCode", "onNext: " + listBaseResponse);
- if (listBaseResponse.code == 200) {
- List healthCodeList = listBaseResponse.data;
- setImageViews(healthCodeList);
- mViewPager.setVisibility(View.VISIBLE);
- mMagicIndicator.setVisibility(View.VISIBLE);
- iv_nodata.setVisibility(View.GONE);
- } else {
- mViewPager.setVisibility(View.GONE);
- mMagicIndicator.setVisibility(View.GONE);
- iv_nodata.setVisibility(View.VISIBLE);
- }
- }
-
- @Override
- public void onError(@NonNull Throwable e) {
- Log.e("getHealthCode", "onError: ");
- }
-
- @Override
- public void onComplete() {
- Log.e("getHealthCode", "onComplete: ");
- }
- });
+ @Override
+ public void onError() {
+ ToastUtil.show("网络连接失败");
+ mViewPager.setVisibility(View.GONE);
+ mMagicIndicator.setVisibility(View.GONE);
+ iv_nodata.setVisibility(View.VISIBLE);
+ }
+ });
}
}
diff --git a/app/src/main/java/com/uiui/aios/activity/code/HealthCodeContact.java b/app/src/main/java/com/uiui/aios/activity/code/HealthCodeContact.java
new file mode 100644
index 0000000..8e6fc3a
--- /dev/null
+++ b/app/src/main/java/com/uiui/aios/activity/code/HealthCodeContact.java
@@ -0,0 +1,17 @@
+package com.uiui.aios.activity.code;
+
+import com.uiui.aios.base.BasePresenter;
+import com.uiui.aios.base.BaseView;
+import com.uiui.aios.bean.HealthCode;
+
+import java.util.List;
+
+public class HealthCodeContact {
+ public interface Presenter extends BasePresenter {
+ void getHealthCode();
+ }
+
+ public interface CodeView extends BaseView {
+ void setHealthCode(List codeList);
+ }
+}
diff --git a/app/src/main/java/com/uiui/aios/activity/code/HealthCodePresenter.java b/app/src/main/java/com/uiui/aios/activity/code/HealthCodePresenter.java
new file mode 100644
index 0000000..3108ee7
--- /dev/null
+++ b/app/src/main/java/com/uiui/aios/activity/code/HealthCodePresenter.java
@@ -0,0 +1,49 @@
+package com.uiui.aios.activity.code;
+
+import android.content.Context;
+import android.util.Log;
+
+import androidx.annotation.NonNull;
+
+import com.trello.rxlifecycle4.android.ActivityEvent;
+
+import io.reactivex.rxjava3.subjects.BehaviorSubject;
+
+public class HealthCodePresenter implements HealthCodeContact.Presenter {
+ private static final String TAG = HealthCodePresenter.class.getSimpleName();
+ private HealthCodeContact.CodeView mView;
+
+ private Context mContext;
+
+ private BehaviorSubject lifecycle;
+
+ void setLifecycle(BehaviorSubject lifecycle) {
+ this.lifecycle = lifecycle;
+ }
+
+ public BehaviorSubject getLifecycle() {
+ return lifecycle;
+ }
+
+ HealthCodePresenter(Context context) {
+ this.mContext = context;
+ Log.e(TAG, "MainPresenter: " + context.getClass());
+ }
+
+
+ @Override
+ public void attachView(@NonNull HealthCodeContact.CodeView view) {
+ this.mView = view;
+ }
+
+ @Override
+ public void detachView() {
+ this.mView = null;
+ }
+
+
+ @Override
+ public void getHealthCode() {
+
+ }
+}
diff --git a/app/src/main/java/com/uiui/aios/activity/main/MainContact.java b/app/src/main/java/com/uiui/aios/activity/main/MainContact.java
index 9248745..973c3e6 100644
--- a/app/src/main/java/com/uiui/aios/activity/main/MainContact.java
+++ b/app/src/main/java/com/uiui/aios/activity/main/MainContact.java
@@ -4,7 +4,7 @@ import com.uiui.aios.base.BasePresenter;
import com.uiui.aios.base.BaseView;
public class MainContact {
- public interface Presenter extends BasePresenter {
+ public interface Presenter extends BasePresenter {
/*获取桌面布局*/
void getDesktopLayout();
/*更新桌面布局*/
diff --git a/app/src/main/java/com/uiui/aios/fragment/CustomFragment.java b/app/src/main/java/com/uiui/aios/fragment/CustomFragment.java
index 2a0f059..8952de9 100644
--- a/app/src/main/java/com/uiui/aios/fragment/CustomFragment.java
+++ b/app/src/main/java/com/uiui/aios/fragment/CustomFragment.java
@@ -31,7 +31,6 @@ import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationListener;
import com.blankj.utilcode.util.NetworkUtils;
import com.google.gson.Gson;
-import com.google.gson.reflect.TypeToken;
import com.qweather.sdk.bean.base.Code;
import com.qweather.sdk.bean.base.Lang;
import com.qweather.sdk.bean.base.Unit;
@@ -41,7 +40,7 @@ import com.qweather.sdk.view.QWeather;
import com.tencent.mmkv.MMKV;
import com.uiui.aios.BuildConfig;
import com.uiui.aios.R;
-import com.uiui.aios.activity.CodeActivity;
+import com.uiui.aios.activity.code.HealthCodeActivity;
import com.uiui.aios.activity.EmergencyActivity;
import com.uiui.aios.activity.alarm.AlarmClockActivity;
import com.uiui.aios.activity.weather.WeatherActivity;
@@ -57,7 +56,6 @@ import com.uiui.aios.utils.SchemeUtils;
import com.uiui.aios.utils.Utils;
import java.lang.reflect.Method;
-import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -356,7 +354,7 @@ public class CustomFragment extends Fragment implements NetworkUtils.OnNetworkSt
mClHealth.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- startActivity(new Intent(getActivity(), CodeActivity.class));
+ startActivity(new Intent(getActivity(), HealthCodeActivity.class));
// SchemeUtils.openScheme(getActivity(), SchemeUtils.SCHEME_TONGUE);
}
});
diff --git a/app/src/main/java/com/uiui/aios/manager/ConnectManager.java b/app/src/main/java/com/uiui/aios/manager/ConnectManager.java
new file mode 100644
index 0000000..e7577dc
--- /dev/null
+++ b/app/src/main/java/com/uiui/aios/manager/ConnectManager.java
@@ -0,0 +1,134 @@
+package com.uiui.aios.manager;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.util.Log;
+
+import com.tencent.mmkv.MMKV;
+import com.uiui.aios.utils.TimeUtils;
+
+public class ConnectManager {
+ private static final String TAG = ConnectManager.class.getSimpleName();
+
+
+ public static final long ONE_MINUTES_TIME = 60 * 1000;
+ public static final long FIFTEEN_MINUTES_TIME = ONE_MINUTES_TIME * 15;
+ public static final long HALF_HOUR_TIME = FIFTEEN_MINUTES_TIME * 2;
+ public static final long ONE_HOUR_TIME = HALF_HOUR_TIME * 2;
+ public static final long SIX_HOUR_TIME = ONE_HOUR_TIME * 6;
+ public static final long HALF_DAY_TIME = SIX_HOUR_TIME * 2;
+ public static final long ONE_DAY_TIME = HALF_DAY_TIME * 2;
+
+ /*重启后连接成功的时间*/
+ public static final String REBOOT_LAST_ONNECT_TIME = "reboot_last_connect_time";
+ /*WiFi连接后连接成功的时间*/
+ public static final String WIFI_LAST_CONNECT_TIME = "WiFi_last_connect_time";
+ /*打开设备信息连接成功的时间*/
+ public static final String OPENINFO_LAST_ONNECT_TIME = "opneinfo_last_connect_time";
+
+
+ @SuppressLint("StaticFieldLeak")
+ private static ConnectManager sInstance;
+ private Context mContext;
+ private MMKV mMMKV = MMKV.defaultMMKV();
+
+ private ConnectManager(Context context) {
+ if (context == null) {
+ throw new RuntimeException("Context is NULL");
+ }
+ this.mContext = context;
+
+ }
+
+ public static void init(Context context) {
+ if (sInstance == null) {
+ Log.e(TAG, "init: ");
+ sInstance = new ConnectManager(context);
+ }
+ }
+
+ public static ConnectManager getInstance() {
+ if (sInstance == null) {
+ throw new IllegalStateException("You must be init ConnectManager first");
+ }
+ return sInstance;
+ }
+
+ public long getConnectModeTime(ConnectMode connectMode) {
+ long time = 0;
+ switch (connectMode) {
+ case DEFAULT:
+ time = 0;
+ break;
+ case ONE_MINUTE:
+ time = ONE_MINUTES_TIME;
+ break;
+ case FIFTEEN_MINUTES:
+ time = FIFTEEN_MINUTES_TIME;
+ break;
+ case HALF_HOUR:
+ time = HALF_HOUR_TIME;
+ break;
+ case ONE_HOUR:
+ time = ONE_HOUR_TIME;
+ break;
+ case SIX_HOUR:
+ time = SIX_HOUR_TIME;
+ break;
+ case HALF_DAY:
+ time = HALF_DAY_TIME;
+ break;
+ case ONE_DAY:
+ time = ONE_DAY_TIME;
+ break;
+ default:
+ }
+ return time;
+ }
+
+ public boolean isNeedConnect(String key, ConnectMode connectMode) {
+ long nowTime = System.currentTimeMillis();
+ long lastTime = mMMKV.decodeLong(key, 0);
+ long intervalTime = getConnectModeTime(connectMode);
+ //防止一分钟内重复请求
+ return nowTime - lastTime > intervalTime && nowTime - lastTime > ONE_MINUTES_TIME;
+ }
+
+
+ /**
+ * @return 重启后是否连接
+ */
+ public boolean isRebootFistConnect() {
+ long rebootTime = mMMKV.decodeLong(REBOOT_LAST_ONNECT_TIME, 0);
+ //只在开机后15内连接,其他情况为service重启
+ long time = System.currentTimeMillis() - rebootTime;
+ return time < 15 * 1000;
+ }
+
+ /**
+ * @return 今天WiFi连接是否有连接
+ */
+ public boolean isWiFiFistConnect() {
+ long time = mMMKV.decodeLong(WIFI_LAST_CONNECT_TIME, 0);
+ return !TimeUtils.isTodayTime(time);
+ }
+
+ /**
+ * @return 今天打开设备信息后是否连接
+ */
+ public boolean isOpenInfoFistConnect() {
+ long time = mMMKV.decodeLong(OPENINFO_LAST_ONNECT_TIME, 0);
+ return !TimeUtils.isTodayTime(time);
+ }
+
+ /**
+ * @param WiFiAlias
+ * @return 今天切换WiFi后是否连接
+ */
+ public boolean isWiFiCutoverFistConnect(String WiFiAlias) {
+ long time = mMMKV.decodeLong(WiFiAlias, 0);
+ return !TimeUtils.isTodayTime(time);
+ }
+
+
+}
diff --git a/app/src/main/java/com/uiui/aios/manager/ConnectMode.java b/app/src/main/java/com/uiui/aios/manager/ConnectMode.java
new file mode 100644
index 0000000..ea36582
--- /dev/null
+++ b/app/src/main/java/com/uiui/aios/manager/ConnectMode.java
@@ -0,0 +1,12 @@
+package com.uiui.aios.manager;
+
+public enum ConnectMode {
+ DEFAULT,
+ ONE_MINUTE,
+ FIFTEEN_MINUTES,
+ HALF_HOUR,
+ ONE_HOUR,
+ SIX_HOUR,
+ HALF_DAY,
+ ONE_DAY,
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/uiui/aios/network/NetInterfaceManager.java b/app/src/main/java/com/uiui/aios/network/NetInterfaceManager.java
index 89c561a..625a371 100644
--- a/app/src/main/java/com/uiui/aios/network/NetInterfaceManager.java
+++ b/app/src/main/java/com/uiui/aios/network/NetInterfaceManager.java
@@ -3,7 +3,10 @@ package com.uiui.aios.network;
import android.annotation.SuppressLint;
import android.content.Context;
import android.util.Log;
+import android.view.View;
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
import com.tencent.mmkv.MMKV;
import com.trello.rxlifecycle4.RxLifecycle;
import com.trello.rxlifecycle4.android.ActivityEvent;
@@ -13,9 +16,12 @@ import com.uiui.aios.bean.ArticleInfo;
import com.uiui.aios.bean.BaseResponse;
import com.uiui.aios.bean.DemandBean;
import com.uiui.aios.bean.GoodsInfo;
+import com.uiui.aios.bean.HealthCode;
import com.uiui.aios.bean.NetDesktopIcon;
import com.uiui.aios.bean.UserId;
import com.uiui.aios.disklrucache.CacheHelper;
+import com.uiui.aios.manager.ConnectManager;
+import com.uiui.aios.manager.ConnectMode;
import com.uiui.aios.network.api.ActivityListApi;
import com.uiui.aios.network.api.AlarmClockApi;
import com.uiui.aios.network.api.AppUsageRecordApi;
@@ -39,6 +45,7 @@ import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.io.IOException;
+import java.lang.reflect.Type;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
@@ -282,14 +289,14 @@ public class NetInterfaceManager {
public Observable>> getActivityListObservable() {
return mRetrofit.create(ActivityListApi.class)
- .getActivityList(Utils.getSerial(), 1, 1,getUserId())
+ .getActivityList(Utils.getSerial(), 1, 1, getUserId())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public Observable>> getDemandListObservable() {
return mRetrofit.create(DemandListApi.class)
- .getDemandList(Utils.getSerial(), 1, 1,getUserId())
+ .getDemandList(Utils.getSerial(), 1, 1, getUserId())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
@@ -303,7 +310,80 @@ public class NetInterfaceManager {
return mRetrofit.create(SendScreenshotApi.class);
}
- public HealthCodeApi getHealthCodeApi() {
- return mRetrofit.create(HealthCodeApi.class);
+ public Observable>> getHealthCodeObservable() {
+ return mRetrofit.create(HealthCodeApi.class)
+ .getArticleDetails(Utils.getSerial())
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
}
+
+ public interface HealthCodeCallback {
+ void setHealthCode(List healthCode);
+
+ void noData();
+
+ void onError();
+ }
+
+ public void getHealthCode(boolean refresh, BehaviorSubject lifecycle, HealthCodeCallback callback) {
+ ConnectMode connectMode = ConnectMode.ONE_HOUR;
+ if (refresh) {
+ connectMode = ConnectMode.DEFAULT;
+ }
+ if (ConnectManager.getInstance().isNeedConnect(URLAddress.GET_HEALTH_CODE, connectMode)) {
+ getHealthCode(lifecycle, callback);
+ } else {
+ String jsonString = mCacheHelper.getAsString(URLAddress.GET_HEALTH_CODE);
+ //为 "" 是已经请求成功的
+ if (jsonString == null) {
+ getHealthCode(lifecycle, callback);
+ } else {
+ Gson gson = new Gson();
+ Type type = new TypeToken() {
+ }.getType();
+ List healthCodeList = gson.fromJson(jsonString, type);
+ if (healthCodeList == null || healthCodeList.size() == 0) {
+ callback.noData();
+ } else {
+ callback.setHealthCode(healthCodeList);
+ }
+ }
+ }
+ }
+
+ public void getHealthCode(BehaviorSubject lifecycle, HealthCodeCallback callback) {
+ getHealthCodeObservable()
+ .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY))
+ .subscribe(new Observer>>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("getHealthCode", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull BaseResponse> listBaseResponse) {
+ Log.e("getHealthCode", "onNext: " + listBaseResponse);
+ if (listBaseResponse.code == 200) {
+ List healthCodeList = listBaseResponse.data;
+ callback.setHealthCode(healthCodeList);
+ } else {
+ callback.noData();
+ }
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("getHealthCode", "onError: ");
+ callback.onError();
+ onComplete();
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("getHealthCode", "onComplete: ");
+ }
+ });
+ }
+
+
}
diff --git a/app/src/main/java/com/uiui/aios/utils/TimeUtils.java b/app/src/main/java/com/uiui/aios/utils/TimeUtils.java
new file mode 100644
index 0000000..70b3712
--- /dev/null
+++ b/app/src/main/java/com/uiui/aios/utils/TimeUtils.java
@@ -0,0 +1,29 @@
+package com.uiui.aios.utils;
+
+import android.os.Build;
+
+import androidx.annotation.RequiresApi;
+
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Date;
+
+public class TimeUtils {
+ @RequiresApi(api = Build.VERSION_CODES.O)
+ public static boolean isTodayTime(long timeStamp) {
+ String time = transferLongToDate(timeStamp);
+ DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+ LocalDateTime localTime = LocalDateTime.parse(time, dtf);
+ LocalDateTime startTime = LocalDate.now().atTime(0, 0, 0);
+ LocalDateTime endTime = LocalDate.now().atTime(23, 59, 59);
+ return localTime.isAfter(startTime) && localTime.isBefore(endTime);
+ }
+
+ public static String transferLongToDate(Long millSec) {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ Date date = new Date(millSec);
+ return sdf.format(date);
+ }
+}
diff --git a/app/src/main/res/layout-land/activity_code.xml b/app/src/main/res/layout-land/activity_code.xml
index 99086d9..f5d8be8 100644
--- a/app/src/main/res/layout-land/activity_code.xml
+++ b/app/src/main/res/layout-land/activity_code.xml
@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- tools:context=".activity.CodeActivity">
+ tools:context=".activity.code.HealthCodeActivity">
+ tools:context=".activity.code.HealthCodeActivity">