From 9f8057cd33f74942b1d75a034ec7fa54d6df4710 Mon Sep 17 00:00:00 2001 From: Fanhuitong <981964879@qq.com> Date: Tue, 6 Aug 2024 09:19:37 +0800 Subject: [PATCH] =?UTF-8?q?version:1.0.9=20update:=20bugfixes:=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E5=BE=AE=E4=BF=A1=E6=97=A0=E6=B3=95=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E6=8E=A5=E5=90=AC=EF=BC=8C=E4=BF=AE=E5=A4=8D=E9=97=B9=E9=92=9F?= =?UTF-8?q?=E9=97=AA=E9=80=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 4 +- app/proguard-rules.pro | 7 + .../alarm/port/PortAlarmActivity.java | 2 +- .../alarm/port/PortAlarmViewModel.java | 10 +- .../activity/contact/EditContactActivity.java | 5 + .../activity/emergency/EmergencyActivity.java | 151 ++++++++++-------- .../emergency/EmergencyViewModel.java | 103 ++++++++++++ .../xxpatx/os/activity/main/MainActivity.java | 15 +- .../os/activity/setting/SettingActivity.java | 29 ++-- ...mberAdapter.java => SosNnmberAdapter.java} | 20 +-- .../os/adapter/WechatContactAdapter.java | 18 ++- .../main/java/com/xxpatx/os/bean/Contact.java | 4 + .../com/xxpatx/os/config/CommonConfig.java | 1 + .../os/fragment/contact/ContactFragment.java | 14 +- .../fragment/settings/SettingsFragment.java | 1 + .../java/com/xxpatx/os/push/PushManager.java | 4 +- .../os/service/WeAccessibilityService.java | 2 +- .../xxpatx/os/service/main/MainService.java | 2 +- .../res/layout/activity_add_alarm_port.xml | 15 +- .../main/res/layout/activity_emergency.xml | 28 +++- app/src/main/res/layout/item_sosnumber.xml | 50 +++--- 21 files changed, 334 insertions(+), 151 deletions(-) rename app/src/main/java/com/xxpatx/os/adapter/{SOSNnmberAdapter.java => SosNnmberAdapter.java} (74%) diff --git a/app/build.gradle b/app/build.gradle index b5e7d2f..f7e92f0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,8 +15,8 @@ android { applicationId "com.xxpatx.os" minSdkVersion 24 targetSdkVersion 29 - versionCode 1008 - versionName "1.0.7" + versionCode 1010 + versionName "1.0.9" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 68d1922..f0cab74 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -118,6 +118,7 @@ java.lang.Object writeReplace(); java.lang.Object readResolve(); } + # 保留R文件中所有静态字段,以保证正确找到每个资源的ID -keepclassmembers class **.R$* { public static ; @@ -194,6 +195,12 @@ ; } +-keep class com.xxpatx.os.alarm.AlarmClockData { *; } +-keepclassmembers class com.xxpatx.os.alarm.AlarmClockData { + ; + ; +} + #----------------------------- 第三方类库 ------------------------------------------ #添加第三方类库的混淆规则 #Adjust sdk diff --git a/app/src/main/java/com/xxpatx/os/activity/alarm/port/PortAlarmActivity.java b/app/src/main/java/com/xxpatx/os/activity/alarm/port/PortAlarmActivity.java index 8c80619..a87da96 100644 --- a/app/src/main/java/com/xxpatx/os/activity/alarm/port/PortAlarmActivity.java +++ b/app/src/main/java/com/xxpatx/os/activity/alarm/port/PortAlarmActivity.java @@ -200,7 +200,7 @@ public class PortAlarmActivity extends BaseMvvmActivity> mAlarmClockData =new MutableLiveData<>(); + private MutableLiveData> mAlarmClockData = new MutableLiveData<>(); public MutableLiveData> getAlarmClockData() { return mAlarmClockData; @@ -72,7 +73,12 @@ public class PortAlarmViewModel extends BaseViewModel> listBaseResponse) { Log.e("getAlarmClock", "onNext: " + listBaseResponse); - mAlarmClockData.setValue(listBaseResponse.data); + if (listBaseResponse.code == 200) { + mAlarmClockData.setValue(listBaseResponse.data); + } else { + Toaster.showLong(listBaseResponse.msg); + } + } @Override diff --git a/app/src/main/java/com/xxpatx/os/activity/contact/EditContactActivity.java b/app/src/main/java/com/xxpatx/os/activity/contact/EditContactActivity.java index 7ad8b2c..f5ae569 100644 --- a/app/src/main/java/com/xxpatx/os/activity/contact/EditContactActivity.java +++ b/app/src/main/java/com/xxpatx/os/activity/contact/EditContactActivity.java @@ -53,6 +53,11 @@ public class EditContactActivity extends BaseMvvmActivity { + private String TAG = "EmergencyActivity"; private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + private SosNnmberAdapter mSosNnmberAdapter; private Disposable subscribe; - private String TAG = "EmergencyActivity"; private boolean needDial = false; private boolean isCalling = false; -// private List phoneListSet; -// private CacheHelper mCacheHelper; + private List phoneList; @Override protected int getLayoutId() { @@ -54,41 +62,21 @@ public class EmergencyActivity extends BaseMvvmActivity>() { -// }.getType(); -// List contactList = gson.fromJson(jsonString, type); -// if (contactList == null || contactList.size() == 0) { -// return; -// } - String phone = mMMKV.decodeString(CommonConfig.EMERGENCY_CONTACT_KEY, ""); - -// phoneListSet = new ArrayList(); -// Log.e(TAG, "onCreate: " + phoneListSet); - final Long time = 3L; subscribe = Observable.interval(1, TimeUnit.SECONDS) + .compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY)) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(aLong -> { @@ -126,19 +114,20 @@ public class EmergencyActivity extends BaseMvvmActivity>() { + @Override + public void onChanged(List contacts) { + phoneList = contacts; + mSosNnmberAdapter.setPhoneNumberList(phoneList); + } + }); + mViewModel.getCacheContact(); + mViewModel.getContact(); } @Override protected void onStart() { super.onStart(); - Log.e(TAG, "onResume: "); -// Log.e(TAG, "onResume: " + phoneListSet); -// if (needDial) { -// if (phoneListSet == null || phoneListSet.size() == 0) { -// return; -// } -// new Handler().postDelayed(new Runnable() { -// @Override -// public void run() { -// Intent intent1 = new Intent(Intent.ACTION_CALL); -// String phone = phoneListSet.get(0).getMobile(); -// Uri data = Uri.parse("tel:" + phone); -// intent1.setData(data); -// startActivity(intent1); -// isCalling = true; -// phoneListSet.remove(0); -// } -// }, 2000); -// } else { -// if (phoneListSet == null) { -// Toaster.show("没有设置紧急联系人"); + Log.e(TAG, "onStart: "); + Log.e(TAG, "onStart: phoneList = " + phoneList); + Log.e(TAG, "onStart: needDial = " + needDial); + if (needDial) { + if (phoneList != null && !phoneList.isEmpty()) { + Observable.timer(3, TimeUnit.SECONDS) + .compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e(TAG, "timer onSubscribe: "); + } + + @Override + public void onNext(@NonNull Long aLong) { + Log.e(TAG, "timer onNext: " + aLong); + Intent intent = new Intent(Intent.ACTION_CALL); + String phone = phoneList.get(0).getMobile(); + isCalling = true; + phoneList.remove(0); + mSosNnmberAdapter.notifyDataSetChanged(); + Uri data = Uri.parse("tel:" + phone); + intent.setData(data); + startActivity(intent); + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e(TAG, "timer onError: " + e.getMessage()); + } + + @Override + public void onComplete() { + Log.e(TAG, "timer onComplete: "); + } + }); + } else { + Toaster.showLong("已呼叫所有联系人"); + finish(); + } + } else { +// if (phoneList == null || phoneList.isEmpty()) { +// Toaster.showLong("没有设置紧急联系人"); // finish(); // } -// } + } } @Override diff --git a/app/src/main/java/com/xxpatx/os/activity/emergency/EmergencyViewModel.java b/app/src/main/java/com/xxpatx/os/activity/emergency/EmergencyViewModel.java index 268e9cf..d897437 100644 --- a/app/src/main/java/com/xxpatx/os/activity/emergency/EmergencyViewModel.java +++ b/app/src/main/java/com/xxpatx/os/activity/emergency/EmergencyViewModel.java @@ -1,11 +1,39 @@ package com.xxpatx.os.activity.emergency; +import android.text.TextUtils; +import android.util.Log; + +import androidx.lifecycle.MutableLiveData; + +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; +import com.trello.rxlifecycle4.android.FragmentEvent; import com.xxpatx.os.base.mvvm.BaseViewModel; +import com.xxpatx.os.bean.BaseResponse; +import com.xxpatx.os.bean.Contact; +import com.xxpatx.os.config.CommonConfig; import com.xxpatx.os.databinding.ActivityEmergencyBinding; +import com.xxpatx.os.gson.GsonUtils; +import com.xxpatx.os.network.NetInterfaceManager; +import com.xxpatx.os.network.UrlAddress; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +import io.reactivex.rxjava3.annotations.NonNull; +import io.reactivex.rxjava3.core.Observer; +import io.reactivex.rxjava3.disposables.Disposable; public class EmergencyViewModel extends BaseViewModel { + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + @Override public ActivityEmergencyBinding getVDBinding() { return binding; @@ -15,4 +43,79 @@ public class EmergencyViewModel extends BaseViewModel> mContactListData = new MutableLiveData<>(); + + public MutableLiveData> getContactListData() { + return mContactListData; + } + + public void getCacheContact() { + String jsonString = mMMKV.getString(CommonConfig.EMERGENCY_CONTACT_LIST_KEY, null); + Gson gson = new Gson(); + Type type = new TypeToken>() { + }.getType(); + if (!TextUtils.isEmpty(jsonString)) { + List contacts = gson.fromJson(jsonString, type); + if (contacts != null) { + mContactListData.setValue(contacts); + } + } + getContact(); + } + + public void getContact() { + NetInterfaceManager.getInstance() + .getContactListObservable() + .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY)) + .subscribe(new Observer>>() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e("getContactList", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse> listBaseResponse) { + Log.e("getContactList", "onNext: " + listBaseResponse); + if (listBaseResponse.code == 200) { + List contactList = listBaseResponse.data; + if (contactList != null && !contactList.isEmpty()) { + List emergencyConcacts = contactList.stream().filter(new Predicate() { + @Override + public boolean test(Contact contact) { + return contact.getIs_urgent() == 1; + } + }).collect(Collectors.toList()); + mMMKV.putString(CommonConfig.EMERGENCY_CONTACT_LIST_KEY, GsonUtils.toJSONString(emergencyConcacts)); + mContactListData.setValue(emergencyConcacts); + } + } else { + mMMKV.putString(CommonConfig.EMERGENCY_CONTACT_LIST_KEY, ""); + mContactListData.setValue(new ArrayList<>()); + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e("getContactList", "onError: " + e.getMessage()); + String jsonString = mMMKV.getString(CommonConfig.EMERGENCY_CONTACT_LIST_KEY, null); + Gson gson = new Gson(); + Type type = new TypeToken>() { + }.getType(); + List contacts = gson.fromJson(jsonString, type); + if (contacts == null) { + mContactListData.setValue(new ArrayList<>()); + } else { + mContactListData.setValue(contacts); + } + onComplete(); + } + + @Override + public void onComplete() { + Log.e("getContactList", "onComplete: "); + } + }); + } + } diff --git a/app/src/main/java/com/xxpatx/os/activity/main/MainActivity.java b/app/src/main/java/com/xxpatx/os/activity/main/MainActivity.java index 90ace43..5ab29f2 100644 --- a/app/src/main/java/com/xxpatx/os/activity/main/MainActivity.java +++ b/app/src/main/java/com/xxpatx/os/activity/main/MainActivity.java @@ -99,7 +99,6 @@ public class MainActivity extends BaseMvvmActivity { +public class SosNnmberAdapter extends RecyclerView.Adapter { private List phoneNumberList; private Context mContext; @@ -26,25 +26,18 @@ public class SOSNnmberAdapter extends RecyclerView.Adapter { - Intent intent = new Intent(mContext, EmergencyActivity.class); - intent.putExtra("setting_sos", contact.getMobile()); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - mContext.startActivity(intent); - - }); } @Override @@ -53,15 +46,14 @@ public class SOSNnmberAdapter extends RecyclerView.Adapter contacts) { if (contacts == null || contacts.size() == 0) { - mViewDataBinding.clNodata.setVisibility(View.VISIBLE); - mViewDataBinding.rvContact.setVisibility(View.GONE); + contacts .add(new Contact("未设置")); + contacts .add(new Contact("未设置")); + contacts .add(new Contact("未设置")); + contacts .add(new Contact("未设置")); + contacts .add(new Contact("未设置")); + contacts .add(new Contact("未设置")); +// mViewDataBinding.clNodata.setVisibility(View.VISIBLE); +// mViewDataBinding.rvContact.setVisibility(View.GONE); } else { - mViewDataBinding.clNodata.setVisibility(View.GONE); - mViewDataBinding.rvContact.setVisibility(View.VISIBLE); +// mViewDataBinding.clNodata.setVisibility(View.GONE); +// mViewDataBinding.rvContact.setVisibility(View.VISIBLE); } mContactAdapter.setContactList(contacts); } diff --git a/app/src/main/java/com/xxpatx/os/fragment/settings/SettingsFragment.java b/app/src/main/java/com/xxpatx/os/fragment/settings/SettingsFragment.java index 7e0aeda..51d58a9 100644 --- a/app/src/main/java/com/xxpatx/os/fragment/settings/SettingsFragment.java +++ b/app/src/main/java/com/xxpatx/os/fragment/settings/SettingsFragment.java @@ -181,6 +181,7 @@ public class SettingsFragment extends BaseMvvmFragment + + + + - + app:layout_constraintStart_toStartOf="parent"> + + + + + + + - \ No newline at end of file