diff --git a/app/build.gradle b/app/build.gradle index 8ee853d..a90f747 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,7 +5,7 @@ def appName() { } def releaseTime() { - return new Date().format("yyyyMMdd-HHmmss", TimeZone.getDefault()) + return new Date().format("yyyyMMdd_HHmmss", TimeZone.getDefault()) } android { @@ -15,8 +15,8 @@ android { applicationId "com.uiuios.aios" minSdkVersion 24 targetSdkVersion 29 - versionCode 53 - versionName "6.2" + versionCode 56 + versionName "6.5" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -71,7 +71,7 @@ android { applicationVariants.all { variant -> variant.outputs.each { output -> if (outputFile != null) { - def fileName = "${appName()}-V${defaultConfig.versionName}-${releaseTime()}.apk" + def fileName = "${appName()}_V${defaultConfig.versionName}_${releaseTime()}.apk" output.outputFileName = fileName } } @@ -93,7 +93,7 @@ android { variant.outputs.each { output -> def outputFile = "" if (outputFile != null) { - def fileName = "${appName()}-${variant.versionCode}-V${variant.versionName}-${releaseTime()}-${buildType.name}.apk" + def fileName = "${appName()}_${variant.versionCode}_V${variant.versionName}_${releaseTime()}_${buildType.name}.apk" output.outputFileName = new File(outputFile, fileName) } } @@ -154,9 +154,7 @@ dependencies { implementation 'com.trello.rxlifecycle4:rxlifecycle-components:4.0.2' implementation 'com.trello.rxlifecycle4:rxlifecycle-components-preference:4.0.2' implementation 'com.trello.rxlifecycle4:rxlifecycle-android-lifecycle:4.0.2' - //bindView - implementation 'com.jakewharton:butterknife:10.2.3' - annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.3' + implementation 'com.jakewharton.rxbinding4:rxbinding:4.0.0' implementation 'com.jeremyliao:live-event-bus-x:1.7.3' @@ -169,6 +167,8 @@ dependencies { implementation 'com.tencent:mmkv-static:1.2.14' //bugly implementation 'com.tencent.bugly:crashreport:4.1.9.2' + /*xCrash */ + implementation 'com.iqiyi.xcrash:xcrash-android-lib:3.0.0' //阿里云推送 implementation 'com.aliyun.ams:alicloud-android-push:3.8.0' //状态栏透明 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 28d9760..6a0ed55 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,12 @@ + + + + + + + + @@ -182,7 +190,7 @@ - + + @@ -379,6 +390,16 @@ android:enabled="true" android:exported="true" /> + + + + + + + + + + { private static final String TAG = AddItemActivity.class.getSimpleName(); diff --git a/app/src/main/java/com/uiuios/aios/activity/alarm/port/PortAlarmActivity.java b/app/src/main/java/com/uiuios/aios/activity/alarm/port/PortAlarmActivity.java index 6ac6088..773da09 100644 --- a/app/src/main/java/com/uiuios/aios/activity/alarm/port/PortAlarmActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/alarm/port/PortAlarmActivity.java @@ -9,6 +9,7 @@ import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.hjq.toast.Toaster; +import com.tencent.mmkv.MMKV; import com.trello.rxlifecycle4.RxLifecycle; import com.trello.rxlifecycle4.android.ActivityEvent; import com.uiuios.aios.R; @@ -18,6 +19,7 @@ import com.uiuios.aios.alarm.AlarmUtils; import com.uiuios.aios.alarm.PortAlarmAdapter; import com.uiuios.aios.base.mvvm.BaseMvvmActivity; import com.uiuios.aios.bean.BaseResponse; +import com.uiuios.aios.config.CommonConfig; import com.uiuios.aios.databinding.ActivityAlarmPortBinding; import com.uiuios.aios.dialog.DeleteDialog; import com.uiuios.aios.network.NetInterfaceManager; @@ -31,6 +33,8 @@ import io.reactivex.rxjava3.disposables.Disposable; public class PortAlarmActivity extends BaseMvvmActivity { private static final String TAG = PortAlarmActivity.class.getSimpleName(); + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + private PortAlarmAdapter mAlarmAdapter; private int mType = 0; @@ -65,7 +69,12 @@ public class PortAlarmActivity extends BaseMvvmActivity { private HealthCodeAdapter mHealthCodeAdapter; diff --git a/app/src/main/java/com/uiuios/aios/activity/contact/AddContactActivity.java b/app/src/main/java/com/uiuios/aios/activity/contact/AddContactActivity.java index 06829d5..c5df03c 100644 --- a/app/src/main/java/com/uiuios/aios/activity/contact/AddContactActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/contact/AddContactActivity.java @@ -10,32 +10,22 @@ import android.provider.MediaStore; import android.text.TextUtils; import android.util.Log; import android.view.View; -import android.widget.EditText; -import android.widget.ImageView; - -import androidx.constraintlayout.widget.ConstraintLayout; -import androidx.databinding.DataBindingUtil; import com.hjq.toast.Toaster; import com.luck.picture.lib.basic.PictureSelector; import com.luck.picture.lib.config.SelectMimeType; import com.luck.picture.lib.entity.LocalMedia; import com.luck.picture.lib.interfaces.OnResultCallbackListener; -import com.shehuan.niv.NiceImageView; import com.trello.rxlifecycle4.RxLifecycle; import com.trello.rxlifecycle4.android.ActivityEvent; import com.uiuios.aios.R; -import com.uiuios.aios.base.BaseDataBindingActivity; import com.uiuios.aios.base.GlideEngine; import com.uiuios.aios.base.mvvm.BaseMvvmActivity; import com.uiuios.aios.bean.BaseResponse; import com.uiuios.aios.databinding.ActivityAddContactBinding; -import com.uiuios.aios.fragment.contact.ContactFragment; import com.uiuios.aios.manager.RemoteManager; import com.uiuios.aios.network.NetInterfaceManager; import com.uiuios.aios.utils.GlideLoadUtils; -import com.uiuios.aios.view.ToggleButton; -import com.xiasuhuei321.loadingdialog.view.LoadingDialog; import java.io.File; import java.io.FileOutputStream; @@ -43,8 +33,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.Map; -import butterknife.BindView; -import butterknife.ButterKnife; import io.reactivex.rxjava3.annotations.NonNull; import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; diff --git a/app/src/main/java/com/uiuios/aios/activity/details/DetailsActivity.java b/app/src/main/java/com/uiuios/aios/activity/details/DetailsActivity.java index e2e56ca..47e18e1 100644 --- a/app/src/main/java/com/uiuios/aios/activity/details/DetailsActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/details/DetailsActivity.java @@ -16,8 +16,6 @@ import com.uiuios.aios.databinding.ActivityDetailsBinding; import java.math.BigDecimal; -import butterknife.ButterKnife; - public class DetailsActivity extends BaseMvvmActivity { private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); @@ -46,7 +44,6 @@ public class DetailsActivity extends BaseMvvmActivity { diff --git a/app/src/main/java/com/uiuios/aios/activity/emergency/EmergencyActivity.java b/app/src/main/java/com/uiuios/aios/activity/emergency/EmergencyActivity.java index 4d6936a..fc33c43 100644 --- a/app/src/main/java/com/uiuios/aios/activity/emergency/EmergencyActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/emergency/EmergencyActivity.java @@ -3,12 +3,9 @@ package com.uiuios.aios.activity.emergency; import android.content.ComponentName; import android.content.Intent; import android.net.Uri; -import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; import com.hjq.toast.Toaster; import com.tencent.mmkv.MMKV; @@ -21,11 +18,8 @@ import com.uiuios.aios.manager.AmapManager; import com.uiuios.aios.network.NetInterfaceManager; import com.uiuios.aios.receiver.BootReceiver; - import java.util.concurrent.TimeUnit; -import butterknife.BindView; -import butterknife.ButterKnife; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.annotations.NonNull; import io.reactivex.rxjava3.core.Observable; diff --git a/app/src/main/java/com/uiuios/aios/activity/infolist/InfoListActivity.java b/app/src/main/java/com/uiuios/aios/activity/infolist/InfoListActivity.java index 8e14198..281e6d2 100644 --- a/app/src/main/java/com/uiuios/aios/activity/infolist/InfoListActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/infolist/InfoListActivity.java @@ -2,29 +2,22 @@ package com.uiuios.aios.activity.infolist; import android.util.Log; import android.view.View; -import android.widget.ImageView; -import androidx.databinding.DataBindingUtil; import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import com.trello.rxlifecycle4.RxLifecycle; import com.trello.rxlifecycle4.android.ActivityEvent; import com.uiuios.aios.R; import com.uiuios.aios.adapter.ArticleAdapter; -import com.uiuios.aios.base.BaseDataBindingActivity; import com.uiuios.aios.base.mvvm.BaseMvvmActivity; import com.uiuios.aios.bean.ArticleInfo; import com.uiuios.aios.bean.ArticleList; import com.uiuios.aios.bean.BaseResponse; import com.uiuios.aios.databinding.ActivityInfoListBinding; import com.uiuios.aios.network.NetInterfaceManager; -import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX; import java.util.List; -import butterknife.BindView; -import butterknife.ButterKnife; import io.reactivex.rxjava3.annotations.NonNull; import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; diff --git a/app/src/main/java/com/uiuios/aios/activity/information/InformationActivity.java b/app/src/main/java/com/uiuios/aios/activity/information/InformationActivity.java index cfa99f7..a64067a 100644 --- a/app/src/main/java/com/uiuios/aios/activity/information/InformationActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/information/InformationActivity.java @@ -4,36 +4,23 @@ import android.text.TextUtils; import android.util.Log; import android.view.View; -import androidx.constraintlayout.widget.ConstraintLayout; -import androidx.databinding.DataBindingUtil; import androidx.lifecycle.Observer; import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import com.google.android.material.tabs.TabLayout; -import com.trello.rxlifecycle4.RxLifecycle; -import com.trello.rxlifecycle4.android.ActivityEvent; import com.uiuios.aios.R; import com.uiuios.aios.adapter.InformationAdapter; -import com.uiuios.aios.base.BaseDataBindingActivity; import com.uiuios.aios.base.mvvm.BaseMvvmActivity; import com.uiuios.aios.bean.ArticleInfo; import com.uiuios.aios.bean.ArticleList; -import com.uiuios.aios.bean.BaseResponse; import com.uiuios.aios.bean.CategoryBean; import com.uiuios.aios.databinding.ActivityInformationBinding; -import com.uiuios.aios.network.NetInterfaceManager; import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX; import java.util.HashMap; import java.util.List; import java.util.stream.Collectors; -import butterknife.BindView; -import butterknife.ButterKnife; -import io.reactivex.rxjava3.annotations.NonNull; -import io.reactivex.rxjava3.disposables.Disposable; - public class InformationActivity extends BaseMvvmActivity { private static final String TAG = InformationActivity.class.getSimpleName(); diff --git a/app/src/main/java/com/uiuios/aios/activity/main/MainActivity.java b/app/src/main/java/com/uiuios/aios/activity/main/MainActivity.java index 9b58d7d..d07acf5 100644 --- a/app/src/main/java/com/uiuios/aios/activity/main/MainActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/main/MainActivity.java @@ -95,6 +95,7 @@ public class MainActivity extends BaseMvvmActivity { private static final String TAG = ScreenLockActivity.class.getSimpleName(); diff --git a/app/src/main/java/com/uiuios/aios/activity/SelectNumberActivity.java b/app/src/main/java/com/uiuios/aios/activity/selectnumber/SelectNumberActivity.java similarity index 78% rename from app/src/main/java/com/uiuios/aios/activity/SelectNumberActivity.java rename to app/src/main/java/com/uiuios/aios/activity/selectnumber/SelectNumberActivity.java index 023c9e1..a637d74 100644 --- a/app/src/main/java/com/uiuios/aios/activity/SelectNumberActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/selectnumber/SelectNumberActivity.java @@ -1,4 +1,4 @@ -package com.uiuios.aios.activity; +package com.uiuios.aios.activity.selectnumber; import android.content.Context; import android.telecom.PhoneAccountHandle; @@ -9,15 +9,14 @@ import android.telephony.TelephonyManager; import android.util.Log; import com.uiuios.aios.R; -import com.uiuios.aios.base.mvp.BaseMvpActivity; +import com.uiuios.aios.base.mvvm.BaseMvvmActivity; +import com.uiuios.aios.databinding.ActivitySelectNumberBinding; import java.util.HashMap; import java.util.List; import java.util.Map; -import butterknife.ButterKnife; - -public class SelectNumberActivity extends BaseMvpActivity { +public class SelectNumberActivity extends BaseMvvmActivity { private static final String TAG = SelectNumberActivity.class.getSimpleName(); private TelephonyManager mTelephonyManager; @@ -29,6 +28,14 @@ public class SelectNumberActivity extends BaseMvpActivity { return R.layout.activity_select_number; } + @Override + protected void initDataBinding() { + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); +// mViewDataBinding.setClick(new BtnClick()); + } + @Override public void initView() { mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); diff --git a/app/src/main/java/com/uiuios/aios/activity/selectnumber/SelectNumberViewModel.java b/app/src/main/java/com/uiuios/aios/activity/selectnumber/SelectNumberViewModel.java new file mode 100644 index 0000000..9ea71fc --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/selectnumber/SelectNumberViewModel.java @@ -0,0 +1,18 @@ +package com.uiuios.aios.activity.selectnumber; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.databinding.ActivitySelectNumberBinding; + +public class SelectNumberViewModel extends BaseViewModel { + + @Override + public ActivitySelectNumberBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/setting/SettingActivity.java b/app/src/main/java/com/uiuios/aios/activity/setting/SettingActivity.java index 9e44ae5..03e68eb 100644 --- a/app/src/main/java/com/uiuios/aios/activity/setting/SettingActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/setting/SettingActivity.java @@ -9,25 +9,41 @@ import android.net.Uri; import android.os.Binder; import android.os.Build; import android.provider.Settings; +import android.util.Log; import android.view.View; import android.widget.Toast; -import androidx.core.content.ContextCompat; +import androidx.annotation.NonNull; +import androidx.core.app.ActivityCompat; +import com.hjq.toast.Toaster; import com.tencent.mmkv.MMKV; +import com.uiuios.aios.BuildConfig; import com.uiuios.aios.R; +import com.uiuios.aios.activity.callwechat.CallWechatActivity; +import com.uiuios.aios.activity.tts.TtsActivity; import com.uiuios.aios.base.mvvm.BaseMvvmActivity; import com.uiuios.aios.config.CommonConfig; import com.uiuios.aios.databinding.ActivitySettingBinding; +import com.uiuios.aios.service.WeAccessibilityService; import com.uiuios.aios.service.main.MainService; +import com.uiuios.aios.utils.AccessibilityUtils; import java.lang.reflect.Field; import java.lang.reflect.Method; public class SettingActivity extends BaseMvvmActivity { + private static final String TAG = SettingActivity.class.getSimpleName(); + private static final int REQUEST_PERMISSION_CODE = 1234; + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + private String[] PERMISSIONS_SMS = { + Manifest.permission.READ_SMS, + Manifest.permission.RECEIVE_SMS, + }; + @Override protected int getLayoutId() { return R.layout.activity_setting; @@ -51,6 +67,30 @@ public class SettingActivity extends BaseMvvmActivity { + + @Override + public ActivityTtsBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/weather/WeatherActivity.java b/app/src/main/java/com/uiuios/aios/activity/weather/WeatherActivity.java index 2e99fdf..1242463 100644 --- a/app/src/main/java/com/uiuios/aios/activity/weather/WeatherActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/weather/WeatherActivity.java @@ -25,21 +25,20 @@ import com.hjq.toast.Toaster; import com.qweather.sdk.bean.base.Code; import com.qweather.sdk.bean.weather.WeatherDailyBean; import com.qweather.sdk.bean.weather.WeatherNowBean; +import com.tencent.bugly.crashreport.CrashReport; import com.tencent.mmkv.MMKV; import com.uiuios.aios.R; import com.uiuios.aios.activity.location.LocationAcivity; import com.uiuios.aios.adapter.WeatherDayApdapterPort; import com.uiuios.aios.base.mvvm.BaseMvvmActivity; import com.uiuios.aios.bean.JsonBean; -import com.uiuios.aios.bean.MapGeoResult; import com.uiuios.aios.bean.QweatherLocation; import com.uiuios.aios.config.CommonConfig; import com.uiuios.aios.databinding.ActivityWeatherBinding; import com.uiuios.aios.manager.AmapManager; -import com.uiuios.aios.manager.RemoteManager; import com.uiuios.aios.utils.DataUtil; import com.uiuios.aios.utils.TimeUtils; - +import com.uiuios.aios.view.FadeInOutAnimator; import com.uiuios.aios.view.HorizontalItemDecoration; import java.util.ArrayList; @@ -119,6 +118,7 @@ public class WeatherActivity extends BaseMvvmActivity { private SavedWiFiAdapter mSavedWiFiAdapter; diff --git a/app/src/main/java/com/uiuios/aios/base/BaseApplication.java b/app/src/main/java/com/uiuios/aios/base/BaseApplication.java index 573efbb..d5e4ed0 100644 --- a/app/src/main/java/com/uiuios/aios/base/BaseApplication.java +++ b/app/src/main/java/com/uiuios/aios/base/BaseApplication.java @@ -2,6 +2,7 @@ package com.uiuios.aios.base; import android.app.Application; import android.content.Intent; +import android.os.Build; import android.os.Handler; import android.os.Looper; import android.text.TextUtils; @@ -46,7 +47,9 @@ public class BaseApplication extends Application { // 初始化 Toast 框架 Toaster.init(this); - CrashReport.initCrashReport(getApplicationContext(), "", false); + CrashReport.initCrashReport(getApplicationContext(), "f65d7a4361", false); + CrashReport.setDeviceModel(getApplicationContext(), Build.MODEL); + xcrash.XCrash.init(this); aliyunPushInit(); PushManager.init(this); diff --git a/app/src/main/java/com/uiuios/aios/base/BaseTransparentActivity.java b/app/src/main/java/com/uiuios/aios/base/BaseTransparentActivity.java index caea2ec..96c4548 100644 --- a/app/src/main/java/com/uiuios/aios/base/BaseTransparentActivity.java +++ b/app/src/main/java/com/uiuios/aios/base/BaseTransparentActivity.java @@ -1,15 +1,24 @@ package com.uiuios.aios.base; import android.os.Bundle; +import android.util.Log; +import android.view.KeyEvent; import androidx.annotation.CallSuper; import androidx.annotation.Nullable; +import com.hjq.toast.Toaster; +import com.tencent.mmkv.MMKV; import com.uiuios.aios.R; import com.uiuios.aios.base.rx.BaseRxActivity; +import com.uiuios.aios.config.CommonConfig; import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX; public abstract class BaseTransparentActivity extends BaseRxActivity { + private static final String TAG = BaseTransparentActivity.class.getSimpleName(); + + + private MMKV mmkv = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); public BaseTransparentActivity() { super(); @@ -54,4 +63,25 @@ public abstract class BaseTransparentActivity extends BaseRxActivity { public boolean setfitWindow() { return false; } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + switch (keyCode) { + case KeyEvent.KEYCODE_VOLUME_UP://增大系统媒体音量 + case KeyEvent.KEYCODE_VOLUME_DOWN://减小系统媒体音量 + return getVolumeKeyStatus(); + default: + break; + } + return super.onKeyDown(keyCode, event); + } + + public boolean getVolumeKeyStatus() { + boolean disableKey = mmkv.decodeBool(CommonConfig.DISABLE_VOLUME_KEY, false); + Log.e(TAG, "getVolumeKeyStatus: disableKey = " + disableKey); + if (disableKey){ + Toaster.showLong("音量键已被禁用"); + } + return disableKey; + } } \ No newline at end of file diff --git a/app/src/main/java/com/uiuios/aios/bean/AddressBean.java b/app/src/main/java/com/uiuios/aios/bean/AddressBean.java index 99e9bea..a3de316 100644 --- a/app/src/main/java/com/uiuios/aios/bean/AddressBean.java +++ b/app/src/main/java/com/uiuios/aios/bean/AddressBean.java @@ -51,13 +51,13 @@ public class AddressBean implements Serializable { @NonNull @Override public String toString() { - String s = ""; + StringBuilder s = new StringBuilder(); if (!TextUtils.isEmpty(mProvince)) - s += mProvince; + s.append(mProvince); if (!TextUtils.isEmpty(mCity)) - s += mCity; + s.append(" ").append(mCity); if (!TextUtils.isEmpty(mDistrict)) - s += mDistrict; - return s; + s.append(" ").append(mDistrict); + return s.toString(); } } diff --git a/app/src/main/java/com/uiuios/aios/config/CommonConfig.java b/app/src/main/java/com/uiuios/aios/config/CommonConfig.java index 2d06076..d4dd171 100644 --- a/app/src/main/java/com/uiuios/aios/config/CommonConfig.java +++ b/app/src/main/java/com/uiuios/aios/config/CommonConfig.java @@ -74,8 +74,22 @@ public class CommonConfig { public static final String EMERGENCY_CONTACT_KEY = "emergency_contact_phone"; public static final String FAMILY_ADDRESS_KEY = "Family_Address"; + /*拨号提示音*/ + public static final String DISABLE_DIAL_TONE_MODIFY = "disable_dial_modify_key"; + /*语音朗读*/ + public static final String VOICE_BROADCAST = "voice_broadcast_key"; + /*微信语音自动接听*/ + public static final String WECHAT_CALL_AUTO_ACCEPT = "wechat_call_auto_accept"; + /*悬浮窗*/ public static final String FLOAT_WINDOW = "FloatWindowEnable"; + /*禁用音量键*/ + public static final String DISABLE_VOLUME_KEY = "disable_volume_key"; + /*修改联系人禁用*/ + public static final String DISABLE_CONTACT_MODIFY = "disable_contact_modify_key"; + /*禁用闹钟修改*/ + public static final String DISABLE_CLOCK_MODIFY = "disable_clock_modify_key"; + public static final String AMAP_LOCATION_MAP_BEAN = "AMapLocation_MapBean_key"; - public static final String AMAP_LOCATION_District = "AMapLocationMapBean_key"; + public static final String AMAP_LOCATION_DISTRICT = "AMapLocationMapBean_key"; } diff --git a/app/src/main/java/com/uiuios/aios/fragment/custom/CustomContact.java b/app/src/main/java/com/uiuios/aios/fragment/custom/CustomContact.java deleted file mode 100644 index f485b70..0000000 --- a/app/src/main/java/com/uiuios/aios/fragment/custom/CustomContact.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.uiuios.aios.fragment.custom; - -import com.uiuios.aios.base.mvp.BasePresenter; -import com.uiuios.aios.base.mvp.BaseView; -import com.uiuios.aios.bean.UserAvatarInfo; - -public class CustomContact { - public interface Presenter extends BasePresenter { - void getSnInfo(); - } - - public interface CustomView extends BaseView { - void setSnInfo(UserAvatarInfo userAvatarInfo); - } -} diff --git a/app/src/main/java/com/uiuios/aios/fragment/custom/CustomFragment.java b/app/src/main/java/com/uiuios/aios/fragment/custom/CustomFragment.java index e5cce6e..f6e886a 100644 --- a/app/src/main/java/com/uiuios/aios/fragment/custom/CustomFragment.java +++ b/app/src/main/java/com/uiuios/aios/fragment/custom/CustomFragment.java @@ -22,24 +22,18 @@ import android.provider.Settings; import android.text.TextUtils; import android.util.Log; import android.view.Gravity; -import android.view.LayoutInflater; import android.view.View; -import android.view.ViewGroup; import android.view.WindowManager; -import android.widget.ImageView; -import android.widget.TextView; -import androidx.constraintlayout.widget.ConstraintLayout; import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; +import androidx.lifecycle.Observer; import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import com.blankj.utilcode.util.NetworkUtils; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.hjq.toast.Toaster; -import com.king.view.circleprogressview.CircleProgressView; import com.qweather.sdk.bean.base.Code; import com.qweather.sdk.bean.base.Lang; import com.qweather.sdk.bean.base.Unit; @@ -50,27 +44,27 @@ import com.qweather.sdk.view.QWeather; import com.tencent.mmkv.MMKV; import com.uiuios.aios.BuildConfig; import com.uiuios.aios.R; -import com.uiuios.aios.activity.control.ControlActivity; -import com.uiuios.aios.activity.emergency.EmergencyActivity; -import com.uiuios.aios.activity.quickapp.QuickAppActivity; import com.uiuios.aios.activity.alarm.port.PortAlarmActivity; import com.uiuios.aios.activity.code.FamilySpaceActivity; import com.uiuios.aios.activity.contact.ContactActivity; +import com.uiuios.aios.activity.control.ControlActivity; +import com.uiuios.aios.activity.emergency.EmergencyActivity; +import com.uiuios.aios.activity.quickapp.QuickAppActivity; import com.uiuios.aios.activity.weather.WeatherActivity; import com.uiuios.aios.adapter.NotificationAdapter; import com.uiuios.aios.adapter.SOSNnmberAdapter; import com.uiuios.aios.alarm.AlarmClockData; import com.uiuios.aios.alarm.AlarmUtils; -import com.uiuios.aios.base.BaseFragment; +import com.uiuios.aios.base.mvvm.fragment.BaseMvvmFragment; import com.uiuios.aios.bean.AlarmItem; import com.uiuios.aios.bean.Contact; import com.uiuios.aios.bean.HealthCode; import com.uiuios.aios.bean.SnInfo; import com.uiuios.aios.bean.UserAvatarInfo; import com.uiuios.aios.config.CommonConfig; +import com.uiuios.aios.databinding.FragmentCustomBinding; import com.uiuios.aios.dialog.PasswordDialog; import com.uiuios.aios.dialog.SingleDialog; -import com.uiuios.aios.disklrucache.CacheHelper; import com.uiuios.aios.manager.AmapManager; import com.uiuios.aios.manager.RemoteManager; import com.uiuios.aios.network.NetInterfaceManager; @@ -82,7 +76,6 @@ import com.uiuios.aios.utils.BitmapUtils; import com.uiuios.aios.utils.DayUtils; import com.uiuios.aios.utils.NetStateUtils; import com.uiuios.aios.utils.SchemeUtils; - import com.uiuios.aios.utils.Utils; import java.lang.reflect.Type; @@ -92,120 +85,36 @@ import java.util.Calendar; import java.util.Date; import java.util.List; -import butterknife.BindView; -import butterknife.ButterKnife; - /** * A simple {@link Fragment} subclass. * Use the {@link CustomFragment#newInstance} factory method to * create an instance of this fragment. */ -public class CustomFragment extends BaseFragment implements CustomContact.CustomView, NetworkUtils.OnNetworkStatusChangedListener { - - @BindView(R.id.cl_weather) - ConstraintLayout cl_weather; - @BindView(R.id.cl_clean) - ConstraintLayout cl_shared_space; - @BindView(R.id.cl_sos) - ConstraintLayout cl_soso; - @BindView(R.id.cl_guard) - ConstraintLayout cl_guard; - @BindView(R.id.cl_health) - ConstraintLayout cl_health; - @BindView(R.id.cl_contact) - ConstraintLayout cl_contact; - @BindView(R.id.cl_ai) - ConstraintLayout cl_ai; - @BindView(R.id.cl_app) - ConstraintLayout cl_app; - @BindView(R.id.cl_appstore) - ConstraintLayout cl_appstore; - @BindView(R.id.cl_wifi) - ConstraintLayout cl_wifi; - @BindView(R.id.cl_activation) - ConstraintLayout cl_activation; - @BindView(R.id.cl_control) - ConstraintLayout cl_control; - @BindView(R.id.tv_time) - TextView tv_time; - @BindView(R.id.tv_data) - TextView tv_data; - @BindView(R.id.tv_battery) - TextView tv_battery; - @BindView(R.id.tv_location) - TextView tv_location; - @BindView(R.id.tv_weather) - TextView tv_weather; - @BindView(R.id.iv_pic) - ImageView iv_pic; - @BindView(R.id.tv_temp) - TextView tv_temp; - @BindView(R.id.cpv) - CircleProgressView cpv; - @BindView(R.id.rv_noti) - RecyclerView rv_noti; - @BindView(R.id.iv_wifi) - ImageView iv_wifi; - @BindView(R.id.wifi_ssid) - TextView wifi_ssid; - @BindView(R.id.iv_sos) - ImageView iv_sos; - @BindView(R.id.rv_sos) - RecyclerView rv_sos; - @BindView(R.id.iv_note_nodata) - ImageView iv_note_nodata; - @BindView(R.id.tv_name) - TextView tv_name; - @BindView(R.id.iv_app) - ImageView iv_app; - @BindView(R.id.iv_battery) - ImageView iv_battery; +public class CustomFragment extends BaseMvvmFragment implements NetworkUtils.OnNetworkStatusChangedListener { private static final String TAG = CustomFragment.class.getSimpleName(); - private MMKV mMMKV= MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); // private int[] mShaderColors = new int[]{0xFFfa3db5, 0xFFF8867E, 0xFFF79F6B, 0xFFF79F6B, 0xFFF79F6B, 0xFFF8867E, 0xFFfa3db5}; private int[] mShaderColors = new int[]{0xFF05d192, 0xFF05d192, 0xFF05d192, 0xFF05d192, 0xFF05d192, 0xFF05d192, 0xFF05d192}; private int[] mShaderColorsRed = new int[]{0xFFFF0000, 0xFFFF0000, 0xFFFF0000, 0xFFFF0000, 0xFFFF0000, 0xFFFF0000, 0xFFFF0000}; - private View rootView; + private List alarmItemList; private NotificationAdapter notificationAdapter; // private AlarmClockAdapter alarmClockAdapter; private SOSNnmberAdapter sosNnmberAdapter; + private Activity mContext; private ContentResolver mCRv; - private CacheHelper mCacheHelper; - private CustomPresenter mCustomPresenter; - - // TODO: Rename parameter arguments, choose names that match - // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER - private static final String ARG_PARAM1 = "param1"; - private static final String ARG_PARAM2 = "param2"; - - // TODO: Rename and change types of parameters - private String mParam1; - private String mParam2; public CustomFragment() { - // Required empty public constructor + } - /** - * Use this factory method to create a new instance of - * this fragment using the provided parameters. - * - * @param param1 Parameter 1. - * @param param2 Parameter 2. - * @return A new instance of fragment CustomFragment. - */ - // TODO: Rename and change types and number of parameters - public static CustomFragment newInstance(String param1, String param2) { + + public static CustomFragment newInstance() { CustomFragment fragment = new CustomFragment(); - Bundle args = new Bundle(); - args.putString(ARG_PARAM1, param1); - args.putString(ARG_PARAM2, param2); - fragment.setArguments(args); return fragment; } @@ -214,14 +123,48 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom // setAlarm(); } + @Override + protected int getLayoutId() { + return R.layout.fragment_custom; + } + + @Override + protected void initDataBinding() { + mContext = getActivity(); + mCRv = mContext.getContentResolver(); + mViewModel.setCtx(getCtx()); + mViewModel.setLifecycle(getLifecycleSubject()); + mViewModel.setVDBinding(mViewDataBinding); + mViewDataBinding.setClick(new BtnClick()); + } + + @Override + protected void initView(Bundle bundle) { + + } + + @Override + protected void initData(Bundle savedInstanceState) { + mViewModel.getUserAvatarInfoData().observe(this, new Observer() { + @Override + public void onChanged(UserAvatarInfo userAvatarInfo) { + if (userAvatarInfo != null) { + if (TextUtils.isEmpty(userAvatarInfo.getSn_name())) { + mViewDataBinding.tvName.setText("未设置"); + } else { + mViewDataBinding.tvName.setText(userAvatarInfo.getSn_name()); + } + } else { + mViewDataBinding.tvName.setText("未设置"); + } + } + }); + } + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); NetworkUtils.registerNetworkStatusChangedListener(this); - if (getArguments() != null) { - mParam1 = getArguments().getString(ARG_PARAM1); - mParam2 = getArguments().getString(ARG_PARAM2); - } } @Override @@ -233,22 +176,22 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom @Override public void onDisconnected() { - wifi_ssid.setText("WiFi未连接"); - iv_wifi.setImageDrawable(mContext.getDrawable(R.drawable.wifi_disconnect)); + mViewDataBinding.wifiSsid.setText("WiFi未连接"); + mViewDataBinding.ivWifi.setImageDrawable(mContext.getDrawable(R.drawable.wifi_disconnect)); } @Override public void onConnected(NetworkUtils.NetworkType networkType) { if (networkType == NetworkUtils.NetworkType.NETWORK_WIFI) { - iv_wifi.setImageDrawable(mContext.getDrawable(R.drawable.wifi_connect)); + mViewDataBinding.ivWifi.setImageDrawable(mContext.getDrawable(R.drawable.wifi_connect)); if (isNetworkOnline1()) { - wifi_ssid.setText("已连接"); + mViewDataBinding.wifiSsid.setText("已连接"); } else { - wifi_ssid.setText("未连接"); + mViewDataBinding.wifiSsid.setText("未连接"); } } else { - wifi_ssid.setText("WiFi未连接"); - iv_wifi.setImageDrawable(mContext.getDrawable(R.drawable.wifi_disconnect)); + mViewDataBinding.wifiSsid.setText("WiFi未连接"); + mViewDataBinding.ivWifi.setImageDrawable(mContext.getDrawable(R.drawable.wifi_disconnect)); } } @@ -361,7 +304,7 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 0); int elec = (level * 100) / scale; Log.i(TAG, "electricity:=" + elec + "%"); - tv_battery.setText(elec + "%"); + mViewDataBinding.tvBattery.setText(elec + "%"); notifyBattery(level, scale, status, isCharging); } else if (Intent.ACTION_POWER_CONNECTED.equals(action) || Intent.ACTION_POWER_DISCONNECTED.equals(action) @@ -375,7 +318,7 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom public void notifyBattery(int level, int scale, int status, boolean isCharging) { Bitmap bitmap = BitmapUtils.getbatteryIcon(mContext, BitmapFactory.decodeResource(getResources(), R.drawable.battery_icon), level, isCharging); - iv_battery.setImageBitmap(bitmap); + mViewDataBinding.ivBattery.setImageBitmap(bitmap); } //监听时间和日期变化 @@ -413,10 +356,10 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom long time = System.currentTimeMillis(); SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); Date date = new Date(time); - tv_time.setText(sdf.format(date)); + mViewDataBinding.tvTime.setText(sdf.format(date)); SimpleDateFormat sdf2 = new SimpleDateFormat("MM月-dd日"); Date date2 = new Date(time); - tv_data.setText(sdf2.format(date2) + "\t" + getWeek()); + mViewDataBinding.tvData.setText(sdf2.format(date2) + "\t" + getWeek()); } /** @@ -434,44 +377,28 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom return weeks[weekIndex]; } - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment - rootView = inflater.inflate(R.layout.fragment_custom, container, false); - mContext = (Activity) rootView.getContext(); - mCustomPresenter = new CustomPresenter(mContext); - mCustomPresenter.attachView(this); - mCustomPresenter.setLifecycle(getLifecycleSubject()); - mCacheHelper = new CacheHelper(mContext); - mCRv = mContext.getContentResolver(); - ButterKnife.bind(this, rootView); - initView(); - return rootView; - } - private void initView() { Log.e(TAG, "initView: " + Utils.getBatteryLevel(mContext)); registerRefreshReceiver(); registerBatteryReceiver(); registerAlarmClockReceiver(); registerTimeReceiver(); - wifi_ssid.requestFocus(); + mViewDataBinding.wifiSsid.requestFocus(); setTiem(); if (Settings.Global.getInt(mCRv, "is_aihealth", 0) == 1) { - cl_appstore.setVisibility(View.GONE); - cl_ai.setVisibility(View.VISIBLE); + mViewDataBinding.clAppstore.setVisibility(View.GONE); + mViewDataBinding.clAi.setVisibility(View.VISIBLE); } else { - cl_appstore.setVisibility(View.VISIBLE); - cl_ai.setVisibility(View.GONE); + mViewDataBinding.clAppstore.setVisibility(View.VISIBLE); + mViewDataBinding.clAi.setVisibility(View.GONE); } - cpv.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.cpv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { killBackgroundApp(); } }); - cl_guard.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clGuard.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { getAlarm(); @@ -484,65 +411,65 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom getAlarm(); } }); - rv_noti.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.rvNoti.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { getAlarm(); } }); - rv_noti.setLayoutManager(new LinearLayoutManager(mContext)); - rv_noti.setAdapter(notificationAdapter); + mViewDataBinding.rvNoti.setLayoutManager(new LinearLayoutManager(mContext)); + mViewDataBinding.rvNoti.setAdapter(notificationAdapter); if (isWifiConnect()) { - iv_wifi.setImageDrawable(mContext.getDrawable(R.drawable.wifi_connect)); + mViewDataBinding.ivWifi.setImageDrawable(mContext.getDrawable(R.drawable.wifi_connect)); if (isNetworkOnline1()) { - wifi_ssid.setText("已连接"); + mViewDataBinding.wifiSsid.setText("已连接"); } else { - wifi_ssid.setText("未连接"); + mViewDataBinding.wifiSsid.setText("未连接"); } } else { - wifi_ssid.setText("WiFi未连接"); - iv_wifi.setImageDrawable(mContext.getDrawable(R.drawable.wifi_disconnect)); + mViewDataBinding.wifiSsid.setText("WiFi未连接"); + mViewDataBinding.ivWifi.setImageDrawable(mContext.getDrawable(R.drawable.wifi_disconnect)); } sosNnmberAdapter = new SOSNnmberAdapter(); - rv_sos.setLayoutManager(new LinearLayoutManager(mContext)); - rv_sos.setAdapter(sosNnmberAdapter); - cl_soso.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.rvSos.setLayoutManager(new LinearLayoutManager(mContext)); + mViewDataBinding.rvSos.setAdapter(sosNnmberAdapter); + mViewDataBinding.clSos.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { checkSosNumber(); } }); - cl_weather.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clWeather.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { startActivity(new Intent(mContext, WeatherActivity.class)); } }); - cl_shared_space.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clClean.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { killBackgroundApp(); } }); - cl_health.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clHealth.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { getHealthCode(); } }); - cl_contact.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clContact.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { checkContact(); } }); - cl_ai.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clAi.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { openScheme(SchemeUtils.SCHEME_HAND); } }); - cl_app.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clApp.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (TextUtils.isEmpty(quickAppPackagesName)) { @@ -555,7 +482,7 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom } } }); - cl_app.setOnLongClickListener(new View.OnLongClickListener() { + mViewDataBinding.clApp.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { int is_quick = Settings.Global.getInt(mContext.getContentResolver(), QuickAppActivity.QUICK_APP_ENABLED_KEY, 0); @@ -567,13 +494,13 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom return false; } }); - cl_appstore.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clAppstore.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { ApkUtils.openPackage(mContext, "com.uiui.videoplayer", "com.uiui.videoplayer.activity.main.OldMainActivity"); } }); - cl_wifi.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clWifi.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS); @@ -581,13 +508,13 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom startActivity(intent); } }); - cl_activation.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clActivation.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { ApkUtils.openPackage(mContext, "com.uiuios.sn"); } }); - cl_control.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clControl.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { startActivity(new Intent(mContext, ControlActivity.class)); @@ -596,19 +523,6 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom refreshMemory(); } - @Override - public void setSnInfo(UserAvatarInfo userAvatarInfo) { - if (userAvatarInfo != null) { - if (TextUtils.isEmpty(userAvatarInfo.getSn_name())) { - tv_name.setText("未设置"); - } else { - tv_name.setText(userAvatarInfo.getSn_name()); - } - } else { - tv_name.setText("未设置"); - } - } - private void showPassword() { PasswordDialog passwordDialog = new PasswordDialog(mContext); passwordDialog.setTitle("请输入密码退出关怀系统"); @@ -670,7 +584,7 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom } private void initData() { - mCustomPresenter.getSnInfo(); + mViewModel.getSnInfo(); initAmap(); getAlarmCache(); } @@ -707,10 +621,10 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom e.printStackTrace(); } if (applicationInfo != null) { - iv_app.setImageDrawable(applicationInfo.loadIcon(pm)); + mViewDataBinding.ivApp.setImageDrawable(applicationInfo.loadIcon(pm)); } } else { - iv_app.setImageDrawable(mContext.getDrawable(R.drawable.home_quick_app)); + mViewDataBinding.ivApp.setImageDrawable(mContext.getDrawable(R.drawable.home_quick_app)); } } @@ -753,30 +667,30 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom } public void setSosNumber() { - String jsonString = mCacheHelper.getAsString(UrlAddress.GET_SETTINGS); - //为 "" 是已经请求成功的 - if (jsonString == null) { - // rv_sos.setVisibility(View.GONE); -// iv_sos.setVisibility(View.VISIBLE); - } else { - Gson gson = new Gson(); - Type type = new TypeToken>() { - }.getType(); - List setting_sos = gson.fromJson(jsonString, type); - if (setting_sos == null || setting_sos.size() == 0) { - // rv_sos.setVisibility(View.VISIBLE); -// iv_sos.setVisibility(View.GONE); - sosNnmberAdapter.setPhoneNumberList(setting_sos); - } else { - // rv_sos.setVisibility(View.GONE); -// iv_sos.setVisibility(View.VISIBLE); - } - } +// String jsonString = mCacheHelper.getAsString(UrlAddress.GET_SETTINGS); +// //为 "" 是已经请求成功的 +// if (jsonString == null) { +// // rvSos.setVisibility(View.GONE); +//// iv_sos.setVisibility(View.VISIBLE); +// } else { +// Gson gson = new Gson(); +// Type type = new TypeToken>() { +// }.getType(); +// List setting_sos = gson.fromJson(jsonString, type); +// if (setting_sos == null || setting_sos.size() == 0) { +// // rvSos.setVisibility(View.VISIBLE); +//// iv_sos.setVisibility(View.GONE); +// sosNnmberAdapter.setPhoneNumberList(setting_sos); +// } else { +// // rvSos.setVisibility(View.GONE); +//// iv_sos.setVisibility(View.VISIBLE); +// } +// } } private void initAmap() { String city = AmapManager.getInstance().getCity(); - tv_location.setText(city); + mViewDataBinding.tvLocation.setText(city); getweather(AmapManager.getInstance().getLocationTude()); } @@ -791,12 +705,12 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom }.getType(); List list = gson.fromJson(jsonString, type); if (list == null || list.size() == 0) { - rv_noti.setVisibility(View.GONE); - iv_note_nodata.setVisibility(View.VISIBLE); + mViewDataBinding.rvNoti.setVisibility(View.GONE); + mViewDataBinding.ivNoteNodata.setVisibility(View.VISIBLE); } else { notificationAdapter.setDataList(list.subList(0, 1)); - rv_noti.setVisibility(View.VISIBLE); - iv_note_nodata.setVisibility(View.GONE); + mViewDataBinding.rvNoti.setVisibility(View.VISIBLE); + mViewDataBinding.ivNoteNodata.setVisibility(View.GONE); } } @@ -809,18 +723,18 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom if (alarmClockData != null) { data.add(alarmClockData); notificationAdapter.setDataList(data); - rv_noti.setVisibility(View.VISIBLE); - iv_note_nodata.setVisibility(View.GONE); + mViewDataBinding.rvNoti.setVisibility(View.VISIBLE); + mViewDataBinding.ivNoteNodata.setVisibility(View.GONE); } else { - rv_noti.setVisibility(View.GONE); - iv_note_nodata.setVisibility(View.VISIBLE); + mViewDataBinding.rvNoti.setVisibility(View.GONE); + mViewDataBinding.ivNoteNodata.setVisibility(View.VISIBLE); } } @Override public void setAlarmClockEmpty() { - rv_noti.setVisibility(View.GONE); - iv_note_nodata.setVisibility(View.VISIBLE); + mViewDataBinding.rvNoti.setVisibility(View.GONE); + mViewDataBinding.ivNoteNodata.setVisibility(View.VISIBLE); } @Override @@ -892,10 +806,10 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom WeatherNowBean.NowBaseBean now = weatherBean.getNow(); // String imageName = "he" + now.getIcon(); // int resId = getResources().getIdentifier(imageName, "drawable", mContext.getPackageName()); -// iv_pic.setImageDrawable(mContext.getDrawable(resId)); +// ivPic.setImageDrawable(mContext.getDrawable(resId)); nowString = now.getText(); - tv_temp.setText(now.getTemp() + "℃"); - tv_weather.setText(now.getText()); + mViewDataBinding.tvTemp.setText(now.getTemp() + "℃"); + mViewDataBinding.tvWeather.setText(now.getText()); String iconDay = weatherBean.getNow().getIcon(); Log.e("getweather", "onSuccess: iconDay = " + iconDay); switch (iconDay) { @@ -904,13 +818,13 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom case "102": case "152": if (DayUtils.isNight()) { - cl_weather.setBackground(ContextCompat.getDrawable(mContext, R.drawable.background_weather_sun)); + mViewDataBinding.clWeather.setBackground(ContextCompat.getDrawable(mContext, R.drawable.background_weather_sun)); } else { - cl_weather.setBackground(ContextCompat.getDrawable(mContext, R.drawable.background_weather_sun_night)); + mViewDataBinding.clWeather.setBackground(ContextCompat.getDrawable(mContext, R.drawable.background_weather_sun_night)); } break; default: - cl_weather.setBackground(ContextCompat.getDrawable(mContext, R.drawable.background_weather_rain)); + mViewDataBinding.clWeather.setBackground(ContextCompat.getDrawable(mContext, R.drawable.background_weather_rain)); } } else { //在此查看返回数据失败的原因 @@ -939,11 +853,11 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom int resId = getResources().getIdentifier(imageName, "drawable", mContext.getPackageName()); Log.e(TAG, "onSuccess: " + resId); if (resId == 0) { - iv_pic.setImageDrawable(mContext.getDrawable(R.drawable.he100)); + mViewDataBinding.ivPic.setImageDrawable(mContext.getDrawable(R.drawable.he100)); } else { - iv_pic.setImageDrawable(mContext.getDrawable(resId)); + mViewDataBinding.ivPic.setImageDrawable(mContext.getDrawable(resId)); } - tv_temp.setText(now.getTemp() + "℃"); + mViewDataBinding.tvTemp.setText(now.getTemp() + "℃"); } } } else { @@ -969,7 +883,7 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom List dailyBeans = weatherDailyBean.getDaily(); if (dailyBeans != null && dailyBeans.size() != 0) { WeatherDailyBean.DailyBean dailyBean = weatherDailyBean.getDaily().get(0); - tv_weather.setText(nowString + "\t" + dailyBean.getTempMin() + "℃ - " + dailyBean.getTempMax() + "℃"); + mViewDataBinding.tvWeather.setText(nowString + "\t" + dailyBean.getTempMin() + "℃ - " + dailyBean.getTempMax() + "℃"); } } }); @@ -993,18 +907,17 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom long total = AppUtil.getTotalMemory(mContext); int x = (int) (((total - avail) / (double) total) * 100); if (x > 80) { - cpv.setProgressColor(mShaderColorsRed); + mViewDataBinding.cpv.setProgressColor(mShaderColorsRed); } else { - cpv.setProgressColor(mShaderColors); + mViewDataBinding.cpv.setProgressColor(mShaderColors); } - cpv.showAnimation(0, x, 1000); + mViewDataBinding.cpv.showAnimation(0, x, 1000); float x2 = (((total - avail) / (float) total)); } @Override public void onDestroy() { super.onDestroy(); - mCustomPresenter.detachView(); NetworkUtils.unregisterNetworkStatusChangedListener(this); if (batteryReceiver != null) { mContext.unregisterReceiver(batteryReceiver); @@ -1016,4 +929,8 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom mContext.unregisterReceiver(mTimeChangedReceiver); } } + + public class BtnClick { + + } } diff --git a/app/src/main/java/com/uiuios/aios/fragment/custom/CustomPresenter.java b/app/src/main/java/com/uiuios/aios/fragment/custom/CustomPresenter.java deleted file mode 100644 index 5c7429f..0000000 --- a/app/src/main/java/com/uiuios/aios/fragment/custom/CustomPresenter.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.uiuios.aios.fragment.custom; - -import android.content.Context; -import android.text.TextUtils; - -import androidx.annotation.NonNull; - -import com.trello.rxlifecycle4.android.ActivityEvent; -import com.trello.rxlifecycle4.android.FragmentEvent; -import com.uiuios.aios.bean.SnInfo; -import com.uiuios.aios.bean.UserAvatarInfo; -import com.uiuios.aios.network.NetInterfaceManager; - -import io.reactivex.rxjava3.subjects.BehaviorSubject; - -public class CustomPresenter implements CustomContact.Presenter { - private static final String TAG = CustomPresenter.class.getSimpleName(); - private Context mContext; - private CustomContact.CustomView mView; - - public CustomPresenter(Context context) { - this.mContext = context; - } - - private BehaviorSubject lifecycle; - - void setLifecycle(BehaviorSubject lifecycle) { - this.lifecycle = lifecycle; - } - - public BehaviorSubject getLifecycle() { - return lifecycle; - } - - @Override - public void attachView(@NonNull CustomContact.CustomView view) { - this.mView = view; - } - - @Override - public void detachView() { - this.mView = null; - } - - @Override - public void getSnInfo() { - NetInterfaceManager.getInstance().getUserAvatarInfo(lifecycle, new NetInterfaceManager.UserAvatarInfoCallback() { - @Override - public void setUserAvatarInfo(UserAvatarInfo info) { - mView.setSnInfo(info); - } - }); - } -} diff --git a/app/src/main/java/com/uiuios/aios/fragment/custom/CustomViewModel.java b/app/src/main/java/com/uiuios/aios/fragment/custom/CustomViewModel.java new file mode 100644 index 0000000..d84da8c --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/fragment/custom/CustomViewModel.java @@ -0,0 +1,37 @@ +package com.uiuios.aios.fragment.custom; + +import androidx.lifecycle.MutableLiveData; + +import com.trello.rxlifecycle4.android.FragmentEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.bean.UserAvatarInfo; +import com.uiuios.aios.databinding.FragmentCustomBinding; +import com.uiuios.aios.network.NetInterfaceManager; + +public class CustomViewModel extends BaseViewModel { + + @Override + public FragmentCustomBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } + + private MutableLiveData mUserAvatarInfoData =new MutableLiveData<>(); + + public MutableLiveData getUserAvatarInfoData() { + return mUserAvatarInfoData; + } + + public void getSnInfo() { + NetInterfaceManager.getInstance().getUserAvatarInfo(getLifecycle(), new NetInterfaceManager.UserAvatarInfoCallback() { + @Override + public void setUserAvatarInfo(UserAvatarInfo info) { + mUserAvatarInfoData.setValue(info); + } + }); + } +} diff --git a/app/src/main/java/com/uiuios/aios/fragment/home/HomeFragment.java b/app/src/main/java/com/uiuios/aios/fragment/home/HomeFragment.java index 376f641..69df004 100644 --- a/app/src/main/java/com/uiuios/aios/fragment/home/HomeFragment.java +++ b/app/src/main/java/com/uiuios/aios/fragment/home/HomeFragment.java @@ -4,6 +4,8 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.hardware.camera2.CameraAccessException; +import android.hardware.camera2.CameraManager; import android.os.Bundle; import android.os.Handler; import android.util.DisplayMetrics; @@ -72,6 +74,10 @@ public class HomeFragment extends BaseMvvmFragment { private static final String TAG = ContactFragment.class.getSimpleName(); + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + private Context mContext; private ContactAdapter mContactAdapter; @@ -69,7 +73,12 @@ public class ContactFragment extends BaseMvvmFragment { private static final String TAG = DialerFragment.class.getSimpleName(); + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); private Context mContext; + private SoundPool soundPool; + private HashMap soundMap = new HashMap<>(); public DialerFragment() { @@ -55,7 +63,25 @@ public class DialerFragment extends BaseMvvmFragment { - void getGoods(); - void getArticle(); - void getLivenVideoList(); - void getKnowledgeVideoList(); - void getServe(); - } - - public interface View extends BaseView { - void setGoods(List goodsInfos); - void setArticle(List articleInfoList); - void setLivenVideoList(ArrayList livenVideoList); - void setKnowledgeVideoList(ArrayList knowledgeVideoList); - void setServe(ServeBean serve); - } -} diff --git a/app/src/main/java/com/uiuios/aios/fragment/second/SecondFragment.java b/app/src/main/java/com/uiuios/aios/fragment/second/SecondFragment.java index 043da68..8d23de6 100644 --- a/app/src/main/java/com/uiuios/aios/fragment/second/SecondFragment.java +++ b/app/src/main/java/com/uiuios/aios/fragment/second/SecondFragment.java @@ -1,19 +1,15 @@ package com.uiuios.aios.fragment.second; import android.content.ComponentName; -import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.util.Log; -import android.view.LayoutInflater; import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; import androidx.annotation.NonNull; -import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.lifecycle.Observer; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearSnapHelper; import androidx.recyclerview.widget.RecyclerView; @@ -21,15 +17,15 @@ import androidx.recyclerview.widget.RecyclerView; import com.blankj.utilcode.util.NetworkUtils; import com.uiui.video.bean.VideoInfo; import com.uiuios.aios.R; -import com.uiuios.aios.activity.OrderListActivity; import com.uiuios.aios.adapter.KnowledgeVideoAdapter; import com.uiuios.aios.adapter.LivenVideoAdapter; import com.uiuios.aios.adapter.NewArticleAdapter; import com.uiuios.aios.adapter.NewGoodsAdapter; -import com.uiuios.aios.base.BaseFragment; +import com.uiuios.aios.base.mvvm.fragment.BaseMvvmFragment; import com.uiuios.aios.bean.ArticleInfo; import com.uiuios.aios.bean.GoodsInfo; import com.uiuios.aios.bean.ServeBean; +import com.uiuios.aios.databinding.FragmentSecondBinding; import com.uiuios.aios.utils.GlideLoadUtils; import com.uiuios.aios.utils.JGYUtils; @@ -38,37 +34,15 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; -import butterknife.BindView; -import butterknife.ButterKnife; - /** * A simple {@link androidx.fragment.app.Fragment} subclass. * Use the {@link SecondFragment#newInstance} factory method to * create an instance of this fragment. */ -public class SecondFragment extends BaseFragment implements SecondContact.View, NetworkUtils.OnNetworkStatusChangedListener { +public class SecondFragment extends BaseMvvmFragment implements NetworkUtils.OnNetworkStatusChangedListener { private static final String TAG = SecondFragment.class.getSimpleName(); - - @BindView(R.id.rv_goods) - RecyclerView rv_goods; - @BindView(R.id.rv_article) - RecyclerView rv_article; - @BindView(R.id.rv_liven) - RecyclerView rv_liven; - @BindView(R.id.rv_knowledge) - RecyclerView rv_knowledge; - - @BindView(R.id.cl_service) - ConstraintLayout cl_service; - @BindView(R.id.iv_serve) - ImageView iv_serve; - - - private View rootView; private Context mContext; - private ContentResolver mCRv; - private SecondPresenter mPresenter; private NewGoodsAdapter mNewGoodsAdapter; private NewArticleAdapter mNewArticleAdapter; @@ -86,15 +60,6 @@ public class SecondFragment extends BaseFragment implements SecondContact.View, private Runnable mArticleRunnable; - // TODO: Rename parameter arguments, choose names that match - // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER - private static final String ARG_PARAM1 = "param1"; - private static final String ARG_PARAM2 = "param2"; - - // TODO: Rename and change types of parameters - private String mParam1; - private String mParam2; - @Override public void onDisconnected() { @@ -108,37 +73,18 @@ public class SecondFragment extends BaseFragment implements SecondContact.View, } public SecondFragment() { - // Required empty public constructor + } - /** - * Use this factory method to create a new instance of - * this fragment using the provided parameters. - * - * @param param1 Parameter 1. - * @param param2 Parameter 2. - * @return A new instance of fragment SecondFragment. - */ - // TODO: Rename and change types and number of parameters public static SecondFragment newInstance(String param1, String param2) { - SecondFragment secondFragment = new SecondFragment(); - Bundle args = new Bundle(); - args.putString(ARG_PARAM1, param1); - args.putString(ARG_PARAM2, param2); - secondFragment.setArguments(args); - return secondFragment; + SecondFragment fragment = new SecondFragment(); + return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - if (getArguments() != null) { - mParam1 = getArguments().getString(ARG_PARAM1); - mParam2 = getArguments().getString(ARG_PARAM2); - } NetworkUtils.registerNetworkStatusChangedListener(this); - - } @Override @@ -148,50 +94,39 @@ public class SecondFragment extends BaseFragment implements SecondContact.View, } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment - long time = System.currentTimeMillis(); - Log.e(TAG, "onCreateView: rootView = " + rootView); - if (null != rootView) { - ViewGroup parent = (ViewGroup) rootView.getParent(); - if (null != parent) { - parent.removeView(rootView); - } - } else { // 如ongoing果rootView为空 ,就实例化该视图 - rootView = inflater.inflate(R.layout.fragment_second, container, false); - mContext = rootView.getContext(); - mCRv = mContext.getContentResolver(); - ButterKnife.bind(this, rootView); - mPresenter = new SecondPresenter(mContext); - mPresenter.attachView(this); - mPresenter.setLifecycle(getLifecycleSubject()); - initView(); - initData(); - } - Log.e(TAG, "onCreateView: tiem = " + (System.currentTimeMillis() - time)); - return rootView; + protected int getLayoutId() { + return R.layout.fragment_second; } - private void initView() { + @Override + protected void initDataBinding() { + mContext = getActivity(); + mViewModel.setCtx(getCtx()); + mViewModel.setLifecycle(getLifecycleSubject()); + mViewModel.setVDBinding(mViewDataBinding); + mViewDataBinding.setClick(new BtnClick()); + } + + @Override + protected void initView(Bundle bundle) { mNewGoodsAdapter = new NewGoodsAdapter(); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext); linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); - rv_goods.setLayoutManager(linearLayoutManager); - rv_goods.setAdapter(mNewGoodsAdapter); + mViewDataBinding.rvGoods.setLayoutManager(linearLayoutManager); + mViewDataBinding.rvGoods.setAdapter(mNewGoodsAdapter); LinearSnapHelper snapHelper = new LinearSnapHelper(); - snapHelper.attachToRecyclerView(rv_goods); - rv_goods.addOnScrollListener(new RecyclerView.OnScrollListener() { + snapHelper.attachToRecyclerView(mViewDataBinding.rvGoods); + mViewDataBinding.rvGoods.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); - Log.i("rv_goods", "onScrollStateChanged: newState = " + newState); + Log.i("rvGoods", "onScrollStateChanged: newState = " + newState); if (newState == RecyclerView.SCROLL_STATE_IDLE) { mGoodsScrolling = false; // 获取当前滚动到的条目位置 int firstIndex = linearLayoutManager.findFirstVisibleItemPosition(); - Log.i("rv_goods", "onScrollStateChanged: firstIndex = " + firstIndex); - Log.i("rv_goods", "onScrollStateChanged: mCurrentGoodsIndex = " + mCurrentGoodsIndex); + Log.i("rvGoods", "onScrollStateChanged: firstIndex = " + firstIndex); + Log.i("rvGoods", "onScrollStateChanged: mCurrentGoodsIndex = " + mCurrentGoodsIndex); mCurrentGoodsIndex = firstIndex + 1; } else { mGoodsScrolling = true; @@ -207,21 +142,21 @@ public class SecondFragment extends BaseFragment implements SecondContact.View, mNewArticleAdapter = new NewArticleAdapter(); LinearLayoutManager linearLayoutManager2 = new LinearLayoutManager(mContext); linearLayoutManager2.setOrientation(LinearLayoutManager.HORIZONTAL); - rv_article.setLayoutManager(linearLayoutManager2); - rv_article.setAdapter(mNewArticleAdapter); + mViewDataBinding.rvArticle.setLayoutManager(linearLayoutManager2); + mViewDataBinding.rvArticle.setAdapter(mNewArticleAdapter); LinearSnapHelper snapHelper2 = new LinearSnapHelper(); - snapHelper2.attachToRecyclerView(rv_article); - rv_article.addOnScrollListener(new RecyclerView.OnScrollListener() { + snapHelper2.attachToRecyclerView(mViewDataBinding.rvArticle); + mViewDataBinding.rvArticle.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); - Log.i("rv_article", "onScrollStateChanged: newState = " + newState); + Log.i("rvArticle", "onScrollStateChanged: newState = " + newState); if (newState == RecyclerView.SCROLL_STATE_IDLE) { mArticleScrolling = false; // 获取当前滚动到的条目位置 int firstIndex = linearLayoutManager2.findFirstVisibleItemPosition(); - Log.i("rv_article", "onScrollStateChanged: firstIndex = " + firstIndex); - Log.i("rv_article", "onScrollStateChanged: mCurrentArticleIndex = " + mCurrentArticleIndex); + Log.i("rvArticle", "onScrollStateChanged: firstIndex = " + firstIndex); + Log.i("rvArticle", "onScrollStateChanged: mCurrentArticleIndex = " + mCurrentArticleIndex); mCurrentArticleIndex = firstIndex + 1; } else { mArticleScrolling = true; @@ -247,7 +182,7 @@ public class SecondFragment extends BaseFragment implements SecondContact.View, } else { mCurrentGoodsIndex++; } - rv_goods.smoothScrollToPosition(mCurrentGoodsIndex); + mViewDataBinding.rvGoods.smoothScrollToPosition(mCurrentGoodsIndex); mGoodsHandler.postDelayed(this, 3000); } }; @@ -264,7 +199,7 @@ public class SecondFragment extends BaseFragment implements SecondContact.View, } else { mCurrentArticleIndex++; } - rv_article.smoothScrollToPosition(mCurrentArticleIndex); + mViewDataBinding.rvArticle.smoothScrollToPosition(mCurrentArticleIndex); mArticleHandler.postDelayed(this, 3000); } }; @@ -273,20 +208,20 @@ public class SecondFragment extends BaseFragment implements SecondContact.View, mLivenVideoAdapter = new LivenVideoAdapter(); LinearLayoutManager linearLayoutManager3 = new LinearLayoutManager(mContext); linearLayoutManager3.setOrientation(LinearLayoutManager.HORIZONTAL); - rv_liven.setLayoutManager(linearLayoutManager3); - rv_liven.setAdapter(mLivenVideoAdapter); + mViewDataBinding.rvLiven.setLayoutManager(linearLayoutManager3); + mViewDataBinding.rvLiven.setAdapter(mLivenVideoAdapter); LinearSnapHelper snapHelper3 = new LinearSnapHelper(); - snapHelper3.attachToRecyclerView(rv_liven); + snapHelper3.attachToRecyclerView(mViewDataBinding.rvLiven); mKnowledgeVideoAdapter = new KnowledgeVideoAdapter(); LinearLayoutManager linearLayoutManager4 = new LinearLayoutManager(mContext); linearLayoutManager4.setOrientation(LinearLayoutManager.HORIZONTAL); - rv_knowledge.setLayoutManager(linearLayoutManager4); - rv_knowledge.setAdapter(mKnowledgeVideoAdapter); + mViewDataBinding.rvKnowledge.setLayoutManager(linearLayoutManager4); + mViewDataBinding.rvKnowledge.setAdapter(mKnowledgeVideoAdapter); LinearSnapHelper snapHelper4 = new LinearSnapHelper(); - snapHelper4.attachToRecyclerView(rv_knowledge); + snapHelper4.attachToRecyclerView(mViewDataBinding.rvKnowledge); - cl_service.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clService.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // startActivity(new Intent(mContext, OrderListActivity.class)); @@ -294,12 +229,61 @@ public class SecondFragment extends BaseFragment implements SecondContact.View, }); } + @Override + protected void initData(Bundle savedInstanceState) { + mViewModel.getGoodsListData().observe(this, new Observer>() { + @Override + public void onChanged(List goodsInfos) { + if (goodsInfos != null && goodsInfos.size() != 0) { + mNewGoodsAdapter.setGoodsInfoList(goodsInfos); + mGoodsHandler.removeCallbacks(mGoodsRunnable); + mGoodsHandler.postDelayed(mGoodsRunnable, 3000); + } else { + + } + } + }); + mViewModel.getArticleInfoListData().observe(this, new Observer>() { + @Override + public void onChanged(List articleInfos) { + if (articleInfos != null && articleInfos.size() != 0) { + mNewArticleAdapter.setArticleBeanList(articleInfos); + mArticleHandler.removeCallbacks(mArticleRunnable); + mArticleHandler.postDelayed(mArticleRunnable, 3000); + } else { + + } + } + }); + mViewModel.getVideoInfoListData().observe(this, new Observer>() { + @Override + public void onChanged(ArrayList videoInfos) { + mLivenVideoAdapter.setLivenVideoList(videoInfos); + } + }); + mViewModel.getKnowledgeVideoInfoListData().observe(this, new Observer>() { + @Override + public void onChanged(ArrayList videoInfos) { + mKnowledgeVideoAdapter.setLivenVideoList(videoInfos); + } + }); + + mViewModel.getServeBeanData().observe(this, new Observer() { + @Override + public void onChanged(ServeBean serveBean) { + if (serveBean != null) { + GlideLoadUtils.getInstance().glideLoad(mContext, serveBean.getImage(), mViewDataBinding.ivServe, R.drawable.enterprise_wechat); + } + } + }); + } + private void initData() { - mPresenter.getGoods(); - mPresenter.getArticle(); - mPresenter.getLivenVideoList(); - mPresenter.getKnowledgeVideoList(); - mPresenter.getServe(); + mViewModel.getGoods(); + mViewModel.getArticle(); + mViewModel.getLivenVideoList(); + mViewModel.getKnowledgeVideoList(); + mViewModel.getServe(); } @Override @@ -331,43 +315,7 @@ public class SecondFragment extends BaseFragment implements SecondContact.View, } } - @Override - public void setGoods(List goodsInfos) { - if (goodsInfos != null && goodsInfos.size() != 0) { - mNewGoodsAdapter.setGoodsInfoList(goodsInfos); - mGoodsHandler.removeCallbacks(mGoodsRunnable); - mGoodsHandler.postDelayed(mGoodsRunnable, 3000); - } else { + public class BtnClick { - } } - - @Override - public void setArticle(List articleInfoList) { - if (articleInfoList != null && articleInfoList.size() != 0) { - mNewArticleAdapter.setArticleBeanList(articleInfoList); - mArticleHandler.removeCallbacks(mArticleRunnable); - mArticleHandler.postDelayed(mArticleRunnable, 3000); - } else { - - } - } - - @Override - public void setLivenVideoList(ArrayList livenVideoList) { - mLivenVideoAdapter.setLivenVideoList(livenVideoList); - } - - @Override - public void setKnowledgeVideoList(ArrayList knowledgeVideoList) { - mKnowledgeVideoAdapter.setLivenVideoList(knowledgeVideoList); - } - - @Override - public void setServe(ServeBean serve) { - if (serve != null) { - GlideLoadUtils.getInstance().glideLoad(mContext, serve.getImage(), iv_serve, R.drawable.enterprise_wechat); - } - } - } diff --git a/app/src/main/java/com/uiuios/aios/fragment/second/SecondPresenter.java b/app/src/main/java/com/uiuios/aios/fragment/second/SecondViewModel.java similarity index 80% rename from app/src/main/java/com/uiuios/aios/fragment/second/SecondPresenter.java rename to app/src/main/java/com/uiuios/aios/fragment/second/SecondViewModel.java index 3c77440..7b04031 100644 --- a/app/src/main/java/com/uiuios/aios/fragment/second/SecondPresenter.java +++ b/app/src/main/java/com/uiuios/aios/fragment/second/SecondViewModel.java @@ -1,17 +1,20 @@ package com.uiuios.aios.fragment.second; -import android.content.Context; import android.util.Log; +import androidx.lifecycle.MutableLiveData; + import com.trello.rxlifecycle4.RxLifecycle; import com.trello.rxlifecycle4.android.FragmentEvent; import com.uiui.video.bean.VideoInfo; +import com.uiuios.aios.base.mvvm.BaseViewModel; import com.uiuios.aios.bean.ArticleInfo; import com.uiuios.aios.bean.ArticleList; import com.uiuios.aios.bean.BaseResponse; import com.uiuios.aios.bean.GoodsInfo; import com.uiuios.aios.bean.GoodsList; import com.uiuios.aios.bean.ServeBean; +import com.uiuios.aios.databinding.FragmentSecondBinding; import com.uiuios.aios.network.NetInterfaceManager; import java.util.ArrayList; @@ -20,39 +23,25 @@ import java.util.List; import io.reactivex.rxjava3.annotations.NonNull; import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; -import io.reactivex.rxjava3.subjects.BehaviorSubject; -public class SecondPresenter implements SecondContact.Presenter { +public class SecondViewModel extends BaseViewModel { - private static final String TAG = SecondPresenter.class.getSimpleName(); - private Context mContext; - private SecondContact.View mView; - - public SecondPresenter(Context context) { - this.mContext = context; - } - - private BehaviorSubject lifecycle; - - void setLifecycle(BehaviorSubject lifecycle) { - this.lifecycle = lifecycle; - } - - public BehaviorSubject getLifecycle() { - return lifecycle; + @Override + public FragmentSecondBinding getVDBinding() { + return binding; } @Override - public void attachView(@NonNull SecondContact.View view) { - this.mView = view; + public void onDestroy() { + } - @Override - public void detachView() { - this.mView = null; + private MutableLiveData< List > mGoodsListData =new MutableLiveData<>(); + + public MutableLiveData> getGoodsListData() { + return mGoodsListData; } - @Override public void getGoods() { NetInterfaceManager.getInstance() .getGoodsListObservable() @@ -70,12 +59,12 @@ public class SecondPresenter implements SecondContact.Presenter { GoodsList goodsList = listBaseResponse.data; List goodsInfos = goodsList.getData(); if (goodsInfos != null && goodsInfos.size() != 0) { - mView.setGoods(goodsInfos); + mGoodsListData.setValue(goodsInfos); } else { - mView.setGoods(null); + mGoodsListData.setValue(null); } } else { - mView.setGoods(null); + mGoodsListData.setValue(null); } } @@ -91,7 +80,12 @@ public class SecondPresenter implements SecondContact.Presenter { }); } - @Override + private MutableLiveData> mArticleInfoListData =new MutableLiveData<>(); + + public MutableLiveData> getArticleInfoListData() { + return mArticleInfoListData; + } + public void getArticle() { NetInterfaceManager.getInstance().getArticleListObservable() .compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY)) @@ -109,12 +103,12 @@ public class SecondPresenter implements SecondContact.Presenter { List articleInfoList = articleList.getData(); if (articleInfoList != null && articleInfoList.size() != 0) { articleInfoList.sort((o1, o2) -> Integer.compare(o2.getWeight(), o1.getWeight())); - mView.setArticle(articleInfoList); + mArticleInfoListData.setValue(articleInfoList); } else { - mView.setArticle(null); + mArticleInfoListData.setValue(null); } } else { - mView.setArticle(null); + mArticleInfoListData.setValue(null); } } @@ -130,7 +124,12 @@ public class SecondPresenter implements SecondContact.Presenter { }); } - @Override + private MutableLiveData > mVideoInfoListData =new MutableLiveData<>(); + + public MutableLiveData> getVideoInfoListData() { + return mVideoInfoListData; + } + public void getLivenVideoList() { NetInterfaceManager.getInstance().getLivenVideoListObservable() .compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY)) @@ -146,7 +145,7 @@ public class SecondPresenter implements SecondContact.Presenter { if (listBaseResponse.code == 200) { ArrayList videoInfoArrayList = listBaseResponse.data; videoInfoArrayList.sort((o1, o2) -> Integer.compare(o2.getWeight(), o1.getWeight())); - mView.setLivenVideoList(videoInfoArrayList); + mVideoInfoListData.setValue(videoInfoArrayList); } } @@ -162,7 +161,12 @@ public class SecondPresenter implements SecondContact.Presenter { }); } - @Override + private MutableLiveData > mKnowledgeVideoInfoListData =new MutableLiveData<>(); + + public MutableLiveData> getKnowledgeVideoInfoListData() { + return mKnowledgeVideoInfoListData; + } + public void getKnowledgeVideoList() { NetInterfaceManager.getInstance().getKnowledgeVideoListObservable() .compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY)) @@ -178,7 +182,7 @@ public class SecondPresenter implements SecondContact.Presenter { if (listBaseResponse.code == 200) { ArrayList videoInfoArrayList = listBaseResponse.data; videoInfoArrayList.sort((o1, o2) -> Integer.compare(o2.getWeight(), o1.getWeight())); - mView.setKnowledgeVideoList(videoInfoArrayList); + mKnowledgeVideoInfoListData.setValue(videoInfoArrayList); } } @@ -194,7 +198,12 @@ public class SecondPresenter implements SecondContact.Presenter { }); } - @Override + private MutableLiveData mServeBeanData =new MutableLiveData<>(); + + public MutableLiveData getServeBeanData() { + return mServeBeanData; + } + public void getServe() { NetInterfaceManager.getInstance().getServeObservable() .compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY)) @@ -210,7 +219,7 @@ public class SecondPresenter implements SecondContact.Presenter { if (serveBeanBaseResponse.code == 200) { ServeBean serveBean = serveBeanBaseResponse.data; if (serveBean != null) { - mView.setServe(serveBean); + mServeBeanData.setValue(serveBean); } } else { diff --git a/app/src/main/java/com/uiuios/aios/receiver/SmsReceiver.java b/app/src/main/java/com/uiuios/aios/receiver/SmsReceiver.java new file mode 100644 index 0000000..09180ca --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/receiver/SmsReceiver.java @@ -0,0 +1,45 @@ +package com.uiuios.aios.receiver; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.telephony.SmsMessage; +import android.util.Log; + +import com.tencent.mmkv.MMKV; +import com.uiuios.aios.activity.tts.TtsActivity; +import com.uiuios.aios.config.CommonConfig; + +public class SmsReceiver extends BroadcastReceiver { + private static final String TAG = SmsReceiver.class.getSimpleName(); + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + + @Override + public void onReceive(Context context, Intent intent) { + Log.e(TAG, "onReceive: " + intent.getAction()); + Bundle bundle = intent.getExtras(); + String format = intent.getStringExtra("format"); + if (bundle != null) { + Object[] pdus = (Object[]) bundle.get("pdus"); + for (Object object : pdus) { + SmsMessage message = SmsMessage.createFromPdu((byte[]) object, format); + String sender = message.getOriginatingAddress(); + Log.e(TAG, "onReceive: sender = " + sender); + long millis = message.getTimestampMillis(); + int status = message.getStatus(); + String body = message.getMessageBody(); + Log.e(TAG, "onReceive: body = " + body); + boolean voiceBroadcast = mMMKV.decodeBool(CommonConfig.VOICE_BROADCAST, false); + Log.e(TAG, "onReceive: voiceBroadcast = " + voiceBroadcast); + if (voiceBroadcast) { + Intent ttsIntent = new Intent(context, TtsActivity.class); + ttsIntent.putExtra("sender", sender); + ttsIntent.putExtra("body", body); + ttsIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(ttsIntent); + } + } + } + } +} diff --git a/app/src/main/java/com/uiuios/aios/service/WeAccessibilityService.java b/app/src/main/java/com/uiuios/aios/service/WeAccessibilityService.java index 873b6a3..570ff63 100644 --- a/app/src/main/java/com/uiuios/aios/service/WeAccessibilityService.java +++ b/app/src/main/java/com/uiuios/aios/service/WeAccessibilityService.java @@ -21,7 +21,6 @@ import android.widget.Toast; import com.tencent.mmkv.MMKV; import com.uiuios.aios.bean.Contact; -import com.uiuios.aios.bean.WechatInfo; import com.uiuios.aios.config.CommonConfig; public class WeAccessibilityService extends AccessibilityService { @@ -71,6 +70,7 @@ public class WeAccessibilityService extends AccessibilityService { super.onCreate(); Log.e(TAG, "onCreate: "); registerSettingReceiver(); + mAutoAccept = mMMKV.decodeBool(CommonConfig.WECHAT_CALL_AUTO_ACCEPT, false); handler = new Handler(); } @@ -131,9 +131,9 @@ public class WeAccessibilityService extends AccessibilityService { switch (mCurrentStep) { case WAITING: if (!mAutoAccept) return; - if (step(Property.DESCRIPTION, RECEIVE_DESCRIPTION, Step.WAITING)) { + if (stepAnswer(Property.DESCRIPTION, RECEIVE_DESCRIPTION)) { mCurrentStep = Step.WAITING; - Toast.makeText(this, "自动接听视频/语音聊天", Toast.LENGTH_LONG).show(); + Toast.makeText(this, "已自动接听视频/语音", Toast.LENGTH_LONG).show(); } break; case CLICK_HOME://主页能找到直接点击进去更多 @@ -325,6 +325,23 @@ public class WeAccessibilityService extends AccessibilityService { } } + private boolean stepAnswer(Property type, String text) { + AccessibilityNodeInfo node = findNode(getRootInActiveWindow(), type, text); + if (node != null) { + Point point = getPointtByNode(node); + Log.e(TAG, "stepAnswer: " + point); + clickByNode(point.x, point.y + 50); +// clickNode(node); + Log.e(TAG, "stepAnswer: mCurrentStep " + mCurrentStep + " done"); + mCurrentStep = Step.WAITING; + Log.e(TAG, "stepAnswer: next " + mCurrentStep); + return true; + } else { + Log.e(TAG, "stepAnswer: not found"); + return false; + } + } + //根据节点信息可获得对应的x,y坐标 static Point getPointtByNode(AccessibilityNodeInfo node) { if (node == null) { @@ -336,7 +353,6 @@ public class WeAccessibilityService extends AccessibilityService { return point; } - //实现对(x,y)坐标进行点击操作。 private boolean clickByNode(int x, int y) { Point point = new Point(x, y); diff --git a/app/src/main/java/com/uiuios/aios/service/main/MainService.java b/app/src/main/java/com/uiuios/aios/service/main/MainService.java index 16dc2ac..58f7140 100644 --- a/app/src/main/java/com/uiuios/aios/service/main/MainService.java +++ b/app/src/main/java/com/uiuios/aios/service/main/MainService.java @@ -1,15 +1,16 @@ package com.uiuios.aios.service.main; -import android.annotation.SuppressLint; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.graphics.PixelFormat; import android.os.Build; +import android.os.Bundle; import android.os.IBinder; import android.os.PowerManager; import android.provider.Settings; +import android.telephony.SmsMessage; import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; @@ -27,13 +28,14 @@ import com.uiuios.aios.BuildConfig; import com.uiuios.aios.R; import com.uiuios.aios.activity.main.MainActivity; import com.uiuios.aios.activity.noti.NoticeActivity; +import com.uiuios.aios.alarm.AlarmClockData; import com.uiuios.aios.alarm.AlarmUtils; import com.uiuios.aios.base.rx.BaseRxService; -import com.uiuios.aios.alarm.AlarmClockData; import com.uiuios.aios.bean.BaseResponse; import com.uiuios.aios.config.CommonConfig; import com.uiuios.aios.manager.RemoteManager; import com.uiuios.aios.network.NetInterfaceManager; +import com.uiuios.aios.receiver.SmsReceiver; import com.uiuios.aios.utils.ApkUtils; import com.uiuios.aios.utils.AppUsedTimeUtils; import com.uiuios.aios.utils.CmdUtil; @@ -146,6 +148,7 @@ public class MainService extends BaseRxService implements MainSContact.MainSView registerLockScreenReceiver(); registerRefreshReceiver(); registerScreenLockReceiver(); + registerSmsReceiver(); } @Override @@ -174,6 +177,9 @@ public class MainService extends BaseRxService implements MainSContact.MainSView if (mWindowReceiver != null) { unregisterReceiver(mWindowReceiver); } + if (mSmsReceiver != null) { + unregisterReceiver(mSmsReceiver); + } } @Override @@ -533,6 +539,18 @@ public class MainService extends BaseRxService implements MainSContact.MainSView } } + private void registerSmsReceiver() { + if (mSmsReceiver == null) { + mSmsReceiver = new SmsReceiver(); + } + IntentFilter smsFilter = new IntentFilter(); + smsFilter.addAction("android.provider.Telephony.SMS_RECEIVED"); + smsFilter.addAction("android.provider.Telephony.SMS_DELIVER"); + registerReceiver(new SmsReceiver(), smsFilter); + } + + private SmsReceiver mSmsReceiver; + /** * 显示弹出框 */ diff --git a/app/src/main/java/com/uiuios/aios/utils/ApkUtils.java b/app/src/main/java/com/uiuios/aios/utils/ApkUtils.java index 8e0c044..61302dd 100644 --- a/app/src/main/java/com/uiuios/aios/utils/ApkUtils.java +++ b/app/src/main/java/com/uiuios/aios/utils/ApkUtils.java @@ -170,6 +170,9 @@ public class ApkUtils { this.add("com.android.stk"); this.add("com.debug.loggerui"); this.add("com.mediatek.gnss.nonframeworklbs"); + this.add("com.tencent.mm"); + this.add("com.ss.android.ugc.aweme"); + this.add("com.mediatek.camera"); }}; /** diff --git a/app/src/main/java/com/uiuios/aios/view/FadeInOutAnimator.java b/app/src/main/java/com/uiuios/aios/view/FadeInOutAnimator.java new file mode 100644 index 0000000..3e9bf8d --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/view/FadeInOutAnimator.java @@ -0,0 +1,114 @@ +package com.uiuios.aios.view; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; + +import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.SimpleItemAnimator; + +public class FadeInOutAnimator extends SimpleItemAnimator { + private boolean mPendingRemovals = false; + private boolean mPendingAdditions = false; + + @Override + public boolean animateRemove(final RecyclerView.ViewHolder holder) { + mPendingRemovals = true; + holder.itemView.animate() + .alpha(0) + .setDuration(getRemoveDuration()) + .setListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator anim) { + dispatchRemoveFinished(holder); + mPendingRemovals = false; + if (!mPendingAdditions && !isRunning()) { + dispatchAnimationsFinished(); + } + } + }) + .start(); + return true; + } + + @Override + public boolean animateAdd(final RecyclerView.ViewHolder holder) { + mPendingAdditions = true; + holder.itemView.setAlpha(0); + holder.itemView.animate() + .alpha(1) + .setDuration(getAddDuration()) + .setListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator anim) { + dispatchAddFinished(holder); + mPendingAdditions = false; + if (!mPendingRemovals && !isRunning()) { + dispatchAnimationsFinished(); + } + } + }) + .start(); + return true; + } + + @Override + public boolean animateMove(RecyclerView.ViewHolder holder, int fromX, int fromY, int toX, int toY) { + // Fade in and out are implemented for add/remove, no need to implement move + return false; + } + + @Override + public boolean animateChange(RecyclerView.ViewHolder oldHolder, RecyclerView.ViewHolder newHolder, int fromLeft, int fromTop, int toLeft, int toTop) { + // Fade in and out are implemented for add/remove, no need to implement change + mPendingAdditions = true; + oldHolder.itemView.animate() + .alpha(0) + .setDuration(getChangeDuration()) + .setListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator anim) { + dispatchRemoveFinished(oldHolder); + mPendingRemovals = false; + if (!mPendingAdditions && !isRunning()) { + dispatchAnimationsFinished(); + } + } + }) + .start(); + newHolder.itemView.animate() + .alpha(1) + .setDuration(getChangeDuration()) + .setListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator anim) { + dispatchRemoveFinished(newHolder); + mPendingRemovals = false; + if (!mPendingAdditions && !isRunning()) { + dispatchAnimationsFinished(); + } + } + }) + .start(); + return true; + } + + @Override + public void runPendingAnimations() { + + } + + @Override + public void endAnimation(RecyclerView.ViewHolder item) { + item.itemView.animate().cancel(); + } + + @Override + public void endAnimations() { + // No animations running, nothing to cancel + } + + @Override + public boolean isRunning() { + return mPendingAdditions || mPendingRemovals; + } +} diff --git a/app/src/main/res/drawable-hdpi/home_icon_clock.png b/app/src/main/res/drawable-hdpi/home_icon_clock.png index 3caa761..eaa2260 100644 Binary files a/app/src/main/res/drawable-hdpi/home_icon_clock.png and b/app/src/main/res/drawable-hdpi/home_icon_clock.png differ diff --git a/app/src/main/res/drawable-hdpi/home_icon_family_space.png b/app/src/main/res/drawable-hdpi/home_icon_family_space.png new file mode 100644 index 0000000..b919c55 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/home_icon_family_space.png differ diff --git a/app/src/main/res/drawable-hdpi/home_icon_light_off.png b/app/src/main/res/drawable-hdpi/home_icon_light_off.png new file mode 100644 index 0000000..a2175d6 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/home_icon_light_off.png differ diff --git a/app/src/main/res/drawable-hdpi/home_icon_light_on.png b/app/src/main/res/drawable-hdpi/home_icon_light_on.png new file mode 100644 index 0000000..04388b4 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/home_icon_light_on.png differ diff --git a/app/src/main/res/drawable-hdpi/setting_icon_bind.png b/app/src/main/res/drawable-hdpi/setting_icon_bind.png index 2b3e166..a1c2394 100644 Binary files a/app/src/main/res/drawable-hdpi/setting_icon_bind.png and b/app/src/main/res/drawable-hdpi/setting_icon_bind.png differ diff --git a/app/src/main/res/drawable/home_card_clock_bg.xml b/app/src/main/res/drawable/home_card_clock_bg.xml index 133119c..1181282 100644 --- a/app/src/main/res/drawable/home_card_clock_bg.xml +++ b/app/src/main/res/drawable/home_card_clock_bg.xml @@ -10,7 +10,7 @@ - + diff --git a/app/src/main/res/drawable/home_card_family_bg.xml b/app/src/main/res/drawable/home_card_family_bg.xml new file mode 100644 index 0000000..ac7307c --- /dev/null +++ b/app/src/main/res/drawable/home_card_family_bg.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/location_city_background.xml b/app/src/main/res/drawable/location_city_background.xml new file mode 100644 index 0000000..13baa85 --- /dev/null +++ b/app/src/main/res/drawable/location_city_background.xml @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/position_background.xml b/app/src/main/res/drawable/position_background.xml index e981267..231341e 100644 --- a/app/src/main/res/drawable/position_background.xml +++ b/app/src/main/res/drawable/position_background.xml @@ -5,14 +5,14 @@ + android:bottomLeftRadius="@dimen/dp_32" + android:bottomRightRadius="@dimen/dp_32" + android:topLeftRadius="@dimen/dp_32" + android:topRightRadius="@dimen/dp_32" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/setting_card_bind_bg.xml b/app/src/main/res/drawable/setting_card_bind_bg.xml index 4e382af..65aa078 100644 --- a/app/src/main/res/drawable/setting_card_bind_bg.xml +++ b/app/src/main/res/drawable/setting_card_bind_bg.xml @@ -10,7 +10,7 @@ - + diff --git a/app/src/main/res/drawable/view_clock_button_bg.xml b/app/src/main/res/drawable/view_clock_button_bg.xml new file mode 100644 index 0000000..8f5717f --- /dev/null +++ b/app/src/main/res/drawable/view_clock_button_bg.xml @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_custom.xml b/app/src/main/res/layout-land/fragment_custom.xml index 89dee63..24495d5 100644 --- a/app/src/main/res/layout-land/fragment_custom.xml +++ b/app/src/main/res/layout-land/fragment_custom.xml @@ -6,6 +6,9 @@ + - - + - + + + + + + + android:layout_height="match_parent" + android:orientation="vertical"> - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + android:orientation="horizontal"> + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_marginStart="@dimen/dp_8" + android:layout_marginTop="@dimen/dp_4" + android:layout_marginBottom="@dimen/dp_8" + android:layout_weight="1" + android:background="@drawable/background_second_card"> - - - - - - + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_marginStart="@dimen/dp_8" + android:layout_marginTop="@dimen/dp_4" + android:layout_marginBottom="@dimen/dp_8" + android:layout_weight="1" + android:background="@drawable/background_second_card"> - + android:layout_height="wrap_content" + android:background="@drawable/background_second_title" + android:text="学习大课堂" + android:textColor="#8c550e" + android:textSize="@dimen/sp_11" + android:textStyle="bold" + app:layout_constraintTop_toTopOf="parent" /> + + + + + + - + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + \ No newline at end of file diff --git a/app/src/main/res/layout-port/fragment_custom.xml b/app/src/main/res/layout-port/fragment_custom.xml index c32272b..5ded751 100644 --- a/app/src/main/res/layout-port/fragment_custom.xml +++ b/app/src/main/res/layout-port/fragment_custom.xml @@ -6,6 +6,9 @@ + + + @@ -205,26 +210,36 @@ android:layout_height="match_parent" android:adjustViewBounds="true" android:scaleType="centerCrop" - android:src="@drawable/home_family_space" + android:background="@drawable/home_card_family_bg" app:corner_radius="@dimen/dp_8" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> + + + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" /> @@ -371,7 +386,7 @@ android:layout_height="@dimen/dp_80" android:adjustViewBounds="true" android:scaleType="centerCrop" - android:src="@drawable/home_icon_setting" + android:src="@{flashing?@drawable/home_icon_light_on:@drawable/home_icon_light_off}" app:layout_constraintBottom_toTopOf="@+id/textView18" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" @@ -382,7 +397,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="@dimen/dp_8" - android:text="设置" + android:text="手电筒" android:textColor="@color/white" android:textSize="@dimen/sp_17" android:textStyle="bold" diff --git a/app/src/main/res/layout-port/fragment_second.xml b/app/src/main/res/layout-port/fragment_second.xml index cdb56cb..c7b9aa3 100644 --- a/app/src/main/res/layout-port/fragment_second.xml +++ b/app/src/main/res/layout-port/fragment_second.xml @@ -1,201 +1,211 @@ - - + + + + + - + android:layout_height="match_parent"> + android:layout_height="match_parent" + android:orientation="vertical"> - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + android:orientation="horizontal"> + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_marginStart="@dimen/dp_8" + android:layout_marginTop="@dimen/dp_4" + android:layout_marginBottom="@dimen/dp_8" + android:layout_weight="1" + android:background="@drawable/background_second_card"> - - - - - - + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_marginStart="@dimen/dp_8" + android:layout_marginTop="@dimen/dp_4" + android:layout_marginBottom="@dimen/dp_8" + android:layout_weight="1" + android:background="@drawable/background_second_card"> - + android:layout_height="wrap_content" + android:background="@drawable/background_second_title" + android:text="学习大课堂" + android:textColor="#8c550e" + android:textSize="@dimen/sp_11" + android:textStyle="bold" + app:layout_constraintTop_toTopOf="parent" /> + + + + + + - + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_location.xml b/app/src/main/res/layout/activity_location.xml index f9945fc..4053294 100644 --- a/app/src/main/res/layout/activity_location.xml +++ b/app/src/main/res/layout/activity_location.xml @@ -18,8 +18,8 @@ diff --git a/app/src/main/res/layout/activity_notice.xml b/app/src/main/res/layout/activity_notice.xml index 9c4a49f..37316a8 100644 --- a/app/src/main/res/layout/activity_notice.xml +++ b/app/src/main/res/layout/activity_notice.xml @@ -14,8 +14,8 @@ android:orientation="vertical"> + tools:context=".activity.selectnumber.SelectNumberActivity"> diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml index 3214c9e..8989c8d 100644 --- a/app/src/main/res/layout/activity_setting.xml +++ b/app/src/main/res/layout/activity_setting.xml @@ -11,7 +11,19 @@ type="com.uiuios.aios.activity.setting.SettingActivity.BtnClick" /> + + + + + + @@ -92,8 +104,8 @@ android:layout_marginStart="@dimen/dp_16" android:layout_marginEnd="@dimen/dp_16" android:maxLines="1" - android:text='@{floatWindowEnable?"已开启":"未开启"}' - android:textColor="@{floatWindowEnable?@color/setting_enable_color:@color/setting_disable_color}" + android:text='@{float_window_enable?"已开启":"未开启"}' + android:textColor="@{float_window_enable?@color/setting_enable_color:@color/setting_disable_color}" android:textSize="@dimen/sp_18" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" @@ -111,7 +123,8 @@ + android:layout_height="@dimen/dp_80" + android:onClick="@{click::voiceBroadcast}"> - + app:layout_constraintTop_toTopOf="parent" + tools:text="未开启" /> + android:layout_height="@dimen/dp_80" + android:onClick="@{click::autoAccept}"> + + + + + + + + + + + + app:layout_constraintTop_toTopOf="parent" + tools:text="未开启" /> - - - - - - - - - - - + xmlns:tools="http://schemas.android.com/tools" + tools:context=".activity.spikelist.SpikeListActivity"> + + + + - - + android:layout_height="match_parent" + android:background="@color/gray"> - + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toEndOf="@+id/iv_back" + app:layout_constraintTop_toTopOf="parent"> + + + + + + + + + + + + + + + + - - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_touch.xml b/app/src/main/res/layout/activity_touch.xml index 028fc3b..8829e35 100644 --- a/app/src/main/res/layout/activity_touch.xml +++ b/app/src/main/res/layout/activity_touch.xml @@ -9,6 +9,18 @@ + + + + + + + android:layout_height="@dimen/dp_80" + android:onClick="@{click::disableVolumeKey}"> + app:layout_constraintTop_toTopOf="parent" + tools:text="未开启" /> + android:layout_height="@dimen/dp_80" + android:onClick="@{click::disableContactModify}"> + app:layout_constraintTop_toTopOf="parent" + tools:text="未开启" /> + android:layout_height="@dimen/dp_80" + android:visibility="gone"> + android:layout_height="@dimen/dp_80" + android:onClick="@{click::disableClockModify}"> + app:layout_constraintTop_toTopOf="parent" + tools:text="未开启" /> + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_district.xml b/app/src/main/res/layout/item_district.xml index af2b506..777a60c 100644 --- a/app/src/main/res/layout/item_district.xml +++ b/app/src/main/res/layout/item_district.xml @@ -1,10 +1,9 @@ + android:layout_width="match_parent" + android:layout_height="@dimen/dp_32"> @@ -178,7 +178,7 @@ android:id="@+id/tv_appname3" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="万年历" + android:text="相机" android:textColor="@color/white" android:textSize="@dimen/sp_16" app:layout_constraintEnd_toEndOf="@+id/iv_icon3" @@ -186,38 +186,6 @@ app:layout_constraintTop_toBottomOf="@+id/iv_icon3" /> - - - - - - -