From 90e98b73c09b191b8f14cc94847dc87d4ba13a5c Mon Sep 17 00:00:00 2001 From: Fanhuitong <981964879@qq.com> Date: Mon, 8 Jul 2024 10:35:12 +0800 Subject: [PATCH] =?UTF-8?q?version:6.2=20fix:=20update:=E6=89=8B=E6=9C=BA?= =?UTF-8?q?=E9=80=82=E9=85=8D=EF=BC=8C=E4=BC=98=E5=8C=96mvvm?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 7 +- app/src/main/AndroidManifest.xml | 31 +- .../aios/activity/SelectNumberActivity.java | 1 - .../uiuios/aios/activity/SplashActivity.java | 4 +- .../{ => additem}/AddItemActivity.java | 37 +- .../activity/additem/AddItemViewModel.java | 18 + .../activity/alarm/main/AlarmActivity.java | 199 ++-- .../activity/alarm/main/AlarmContact.java | 21 - ...larmPresenter.java => AlarmViewModel.java} | 46 +- .../alarmclock/add/AlarmClockAddActivity.java | 135 +-- .../add/AlarmClockAddViewModel.java | 18 + .../add/port/PortAlarmClockAddActivity.java | 1 - .../edit/AlarmClockEditActivity.java | 247 ++--- .../edit/AlarmClockEditViewModel.java | 18 + .../{ => article}/ArticleActivity.java | 57 +- .../activity/article/ArticleViewModel.java | 18 + .../contact/AddWechatContactActivity.java | 7 - .../{ => control}/ControlActivity.java | 193 ++-- .../activity/control/ControlViewModel.java | 18 + .../activity/dailyapp/DailyAppActivity.java | 43 +- .../activity/dailyapp/DailyAppViewModel.java | 18 + .../{ => details}/DetailsActivity.java | 123 +-- .../activity/details/DetailsViewModel.java | 18 + .../aios/activity/dialer/DialerActivity.java | 106 +-- .../aios/activity/dialer/DialerViewModel.java | 18 + .../{ => emergency}/EmergencyActivity.java | 52 +- .../emergency/EmergencyViewModel.java | 18 + .../{ => infolist}/InfoListActivity.java | 35 +- .../activity/infolist/InfoListViewModel.java | 18 + .../aios/activity/main/MainActivity.java | 198 +++- .../aios/activity/main/MainViewModel.java | 134 +++ .../{ => deprecated}/OldMainActivity.java | 4 +- .../{ => deprecated}/PhoneMainActivity.java | 6 +- .../{ => quickapp}/QuickAppActivity.java | 35 +- .../activity/quickapp/QuickAppViewModel.java | 18 + .../activity/records/RecordsActivity.java | 66 +- .../activity/records/RecordsViewModel.java | 18 + .../{ => screenlock}/ScreenLockActivity.java | 108 +-- .../screenlock/ScreenLockViewModel.java | 18 + .../activity/setting/SettingActivity.java | 167 ++++ .../activity/setting/SettingViewModel.java | 18 + .../activity/setting/SettingsActivity.java | 54 ++ .../aios/activity/setting/TouchActivity.java | 51 ++ .../aios/activity/setting/TouchViewModel.java | 18 + .../aios/activity/wifi/WiFiContact.java | 18 - .../activity/wifi/WiFiManagerActivity.java | 88 +- ...esenter.java => WiFiManagerViewModel.java} | 51 +- .../aios/adapter/AppSelectedAdapter.java | 2 +- .../uiuios/aios/adapter/ArticleAdapter.java | 2 +- .../com/uiuios/aios/adapter/GoodsAdapter.java | 4 +- .../uiuios/aios/adapter/GoodsListAdapter.java | 2 +- .../uiuios/aios/adapter/NewGoodsAdapter.java | 3 +- .../uiuios/aios/adapter/SOSNnmberAdapter.java | 2 +- .../aios/adapter/WechatContactAdapter.java | 8 - .../com/uiuios/aios/base/BaseApplication.java | 4 +- .../com/uiuios/aios/config/CommonConfig.java | 4 + ...Helper.java => WechatContactDbHelper.java} | 10 +- ...Manager.java => WechatContactManager.java} | 34 +- .../aios/fragment/app/AppListFragment.java | 7 +- .../fragment/contact/ContactFragment.java | 128 ++- .../fragment/contact/ContactViewModel.java | 55 +- .../fragment/control/ControlFragment.java | 20 +- .../aios/fragment/custom/CustomFragment.java | 17 +- .../aios/fragment/home/HomeFragment.java | 195 ++-- .../aios/fragment/home/HomeViewModel.java | 111 --- .../phone/contact/ContactFragment.java | 6 +- .../phone/contact/ContactViewModel.java | 22 +- .../fragment/settings/SettingsFragment.java | 315 +++++++ .../fragment/settings/SettingsViewModel.java | 29 + .../com/uiuios/aios/manager/AmapManager.java | 2 +- .../uiuios/aios/manager/AppStatusManager.java | 2 +- .../uiuios/aios/service/main/MainService.java | 188 +++- .../java/com/uiuios/aios/utils/ApkUtils.java | 16 +- .../java/com/uiuios/aios/utils/DayUtils.java | 29 + .../res/drawable-hdpi/home_family_space.png | Bin 114942 -> 87986 bytes .../drawable-hdpi/home_icon_accessibility.png | Bin 0 -> 13964 bytes .../main/res/drawable-hdpi/home_icon_app.png | Bin 0 -> 5293 bytes .../res/drawable-hdpi/home_icon_appstore.png | Bin 0 -> 4268 bytes .../res/drawable-hdpi/home_icon_calendar.png | Bin 0 -> 16700 bytes .../res/drawable-hdpi/home_icon_clock.png | Bin 0 -> 4872 bytes .../res/drawable-hdpi/home_icon_dialer.png | Bin 0 -> 3795 bytes .../res/drawable-hdpi/home_icon_flash.png | Bin 0 -> 3398 bytes .../res/drawable-hdpi/home_icon_setting.png | Bin 0 -> 7281 bytes .../res/drawable-hdpi/home_icon_tiktok.png | Bin 0 -> 11219 bytes .../res/drawable-hdpi/home_icon_wechat.png | Bin 0 -> 5911 bytes .../main/res/drawable-hdpi/icon_floatball.png | Bin 0 -> 12920 bytes app/src/main/res/drawable-hdpi/icon_more.png | Bin 840 -> 716 bytes .../setting_icon_add_contact.png | Bin 0 -> 6238 bytes .../res/drawable-hdpi/setting_icon_bind.png | Bin 0 -> 5733 bytes .../drawable-hdpi/setting_icon_network.png | Bin 0 -> 2882 bytes .../res/drawable-hdpi/setting_icon_wifi.png | Bin 0 -> 3631 bytes .../fragment_add_contact_background.xml | 2 +- .../main/res/drawable/general_setting_bg.xml | 8 + .../drawable/home_card_accessibility_bg.xml | 20 + .../main/res/drawable/home_card_app_bg.xml | 20 + .../res/drawable/home_card_appsotre_bg.xml | 20 + .../main/res/drawable/home_card_clock_bg.xml | 20 + .../res/drawable/home_card_setting_bg.xml | 20 + .../drawable/setting_card_add_contact_bg.xml | 20 + .../res/drawable/setting_card_bind_bg.xml | 20 + .../res/drawable/setting_card_location_bg.xml | 20 + .../res/drawable/setting_card_network_bg.xml | 20 + .../res/drawable/setting_card_wifi_bg.xml | 20 + .../main/res/layout-land/activity_control.xml | 844 ++++++++--------- .../res/layout-land/activity_dailyapp.xml | 107 ++- .../main/res/layout-land/activity_dialer.xml | 843 ++++++++--------- .../res/layout-land/activity_emergency.xml | 89 +- .../main/res/layout-port/activity_control.xml | 854 +++++++++--------- .../res/layout-port/activity_dailyapp.xml | 107 ++- .../main/res/layout-port/activity_dialer.xml | 844 ++++++++--------- .../res/layout-port/activity_emergency.xml | 91 +- .../main/res/layout-port/fragment_home.xml | 132 ++- .../main/res/layout/activity_add_alarm.xml | 727 +++++++-------- app/src/main/res/layout/activity_add_item.xml | 93 ++ app/src/main/res/layout/activity_articl.xml | 157 ++-- app/src/main/res/layout/activity_details.xml | 2 +- .../main/res/layout/activity_info_list.xml | 167 ++-- app/src/main/res/layout/activity_main_old.xml | 2 +- .../main/res/layout/activity_quick_app.xml | 35 +- app/src/main/res/layout/activity_records.xml | 175 ++-- .../main/res/layout/activity_screen_lock.xml | 480 +++++----- .../res/layout/activity_select_number.xml | 15 +- app/src/main/res/layout/activity_setting.xml | 432 +++++++++ app/src/main/res/layout/activity_touch.xml | 225 +++++ .../main/res/layout/activity_wifi_manager.xml | 252 +++--- .../layout/add_item_confirmation_activity.xml | 85 -- .../main/res/layout/fragment_contact_home.xml | 134 ++- app/src/main/res/layout/fragment_control.xml | 2 +- app/src/main/res/layout/fragment_settings.xml | 364 ++++++++ .../main/res/layout/item_contact_wechat.xml | 4 +- .../main/res/layout/phone_activity_main.xml | 68 +- app/src/main/res/layout/settings_activity.xml | 16 + app/src/main/res/layout/window_float_ball.xml | 31 + app/src/main/res/values/arrays.xml | 12 + app/src/main/res/values/colors.xml | 5 +- app/src/main/res/values/strings.xml | 16 + app/src/main/res/xml/root_preferences.xml | 35 + 137 files changed, 7047 insertions(+), 4420 deletions(-) rename app/src/main/java/com/uiuios/aios/activity/{ => additem}/AddItemActivity.java (86%) create mode 100644 app/src/main/java/com/uiuios/aios/activity/additem/AddItemViewModel.java delete mode 100644 app/src/main/java/com/uiuios/aios/activity/alarm/main/AlarmContact.java rename app/src/main/java/com/uiuios/aios/activity/alarm/main/{AlarmPresenter.java => AlarmViewModel.java} (71%) create mode 100644 app/src/main/java/com/uiuios/aios/activity/alarmclock/add/AlarmClockAddViewModel.java create mode 100644 app/src/main/java/com/uiuios/aios/activity/alarmclock/edit/AlarmClockEditViewModel.java rename app/src/main/java/com/uiuios/aios/activity/{ => article}/ArticleActivity.java (55%) create mode 100644 app/src/main/java/com/uiuios/aios/activity/article/ArticleViewModel.java rename app/src/main/java/com/uiuios/aios/activity/{ => control}/ControlActivity.java (81%) create mode 100644 app/src/main/java/com/uiuios/aios/activity/control/ControlViewModel.java create mode 100644 app/src/main/java/com/uiuios/aios/activity/dailyapp/DailyAppViewModel.java rename app/src/main/java/com/uiuios/aios/activity/{ => details}/DetailsActivity.java (70%) create mode 100644 app/src/main/java/com/uiuios/aios/activity/details/DetailsViewModel.java create mode 100644 app/src/main/java/com/uiuios/aios/activity/dialer/DialerViewModel.java rename app/src/main/java/com/uiuios/aios/activity/{ => emergency}/EmergencyActivity.java (91%) create mode 100644 app/src/main/java/com/uiuios/aios/activity/emergency/EmergencyViewModel.java rename app/src/main/java/com/uiuios/aios/activity/{ => infolist}/InfoListActivity.java (74%) create mode 100644 app/src/main/java/com/uiuios/aios/activity/infolist/InfoListViewModel.java rename app/src/main/java/com/uiuios/aios/activity/main/{ => deprecated}/OldMainActivity.java (89%) rename app/src/main/java/com/uiuios/aios/activity/main/{ => deprecated}/PhoneMainActivity.java (89%) rename app/src/main/java/com/uiuios/aios/activity/{ => quickapp}/QuickAppActivity.java (69%) create mode 100644 app/src/main/java/com/uiuios/aios/activity/quickapp/QuickAppViewModel.java create mode 100644 app/src/main/java/com/uiuios/aios/activity/records/RecordsViewModel.java rename app/src/main/java/com/uiuios/aios/activity/{ => screenlock}/ScreenLockActivity.java (58%) create mode 100644 app/src/main/java/com/uiuios/aios/activity/screenlock/ScreenLockViewModel.java create mode 100644 app/src/main/java/com/uiuios/aios/activity/setting/SettingActivity.java create mode 100644 app/src/main/java/com/uiuios/aios/activity/setting/SettingViewModel.java create mode 100644 app/src/main/java/com/uiuios/aios/activity/setting/SettingsActivity.java create mode 100644 app/src/main/java/com/uiuios/aios/activity/setting/TouchActivity.java create mode 100644 app/src/main/java/com/uiuios/aios/activity/setting/TouchViewModel.java delete mode 100644 app/src/main/java/com/uiuios/aios/activity/wifi/WiFiContact.java rename app/src/main/java/com/uiuios/aios/activity/wifi/{WiFiPresenter.java => WiFiManagerViewModel.java} (79%) rename app/src/main/java/com/uiuios/aios/db/{ContactDbHelper.java => WechatContactDbHelper.java} (72%) rename app/src/main/java/com/uiuios/aios/db/{ContactManager.java => WechatContactManager.java} (75%) create mode 100644 app/src/main/java/com/uiuios/aios/fragment/settings/SettingsFragment.java create mode 100644 app/src/main/java/com/uiuios/aios/fragment/settings/SettingsViewModel.java create mode 100644 app/src/main/java/com/uiuios/aios/utils/DayUtils.java create mode 100644 app/src/main/res/drawable-hdpi/home_icon_accessibility.png create mode 100644 app/src/main/res/drawable-hdpi/home_icon_app.png create mode 100644 app/src/main/res/drawable-hdpi/home_icon_appstore.png create mode 100644 app/src/main/res/drawable-hdpi/home_icon_calendar.png create mode 100644 app/src/main/res/drawable-hdpi/home_icon_clock.png create mode 100644 app/src/main/res/drawable-hdpi/home_icon_dialer.png create mode 100644 app/src/main/res/drawable-hdpi/home_icon_flash.png create mode 100644 app/src/main/res/drawable-hdpi/home_icon_setting.png create mode 100644 app/src/main/res/drawable-hdpi/home_icon_tiktok.png create mode 100644 app/src/main/res/drawable-hdpi/home_icon_wechat.png create mode 100644 app/src/main/res/drawable-hdpi/icon_floatball.png create mode 100644 app/src/main/res/drawable-hdpi/setting_icon_add_contact.png create mode 100644 app/src/main/res/drawable-hdpi/setting_icon_bind.png create mode 100644 app/src/main/res/drawable-hdpi/setting_icon_network.png create mode 100644 app/src/main/res/drawable-hdpi/setting_icon_wifi.png create mode 100644 app/src/main/res/drawable/general_setting_bg.xml create mode 100644 app/src/main/res/drawable/home_card_accessibility_bg.xml create mode 100644 app/src/main/res/drawable/home_card_app_bg.xml create mode 100644 app/src/main/res/drawable/home_card_appsotre_bg.xml create mode 100644 app/src/main/res/drawable/home_card_clock_bg.xml create mode 100644 app/src/main/res/drawable/home_card_setting_bg.xml create mode 100644 app/src/main/res/drawable/setting_card_add_contact_bg.xml create mode 100644 app/src/main/res/drawable/setting_card_bind_bg.xml create mode 100644 app/src/main/res/drawable/setting_card_location_bg.xml create mode 100644 app/src/main/res/drawable/setting_card_network_bg.xml create mode 100644 app/src/main/res/drawable/setting_card_wifi_bg.xml create mode 100644 app/src/main/res/layout/activity_add_item.xml create mode 100644 app/src/main/res/layout/activity_setting.xml create mode 100644 app/src/main/res/layout/activity_touch.xml delete mode 100644 app/src/main/res/layout/add_item_confirmation_activity.xml create mode 100644 app/src/main/res/layout/fragment_settings.xml create mode 100644 app/src/main/res/layout/settings_activity.xml create mode 100644 app/src/main/res/layout/window_float_ball.xml create mode 100644 app/src/main/res/values/arrays.xml create mode 100644 app/src/main/res/xml/root_preferences.xml diff --git a/app/build.gradle b/app/build.gradle index b93cc1f..8ee853d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,8 +15,8 @@ android { applicationId "com.uiuios.aios" minSdkVersion 24 targetSdkVersion 29 - versionCode 52 - versionName "6.1" + versionCode 53 + versionName "6.2" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -27,7 +27,7 @@ android { } manifestPlaceholders = [ - AMAP_KEY : "372937d213ff288dc150c31967a200cd" + AMAP_KEY: "372937d213ff288dc150c31967a200cd" ] } @@ -121,6 +121,7 @@ dependencies { implementation "androidx.fragment:fragment:1.4.1" implementation 'androidx.legacy:legacy-support-v4:1.0.0' + implementation 'androidx.preference:preference:1.1.1' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 50a6e00..28d9760 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -32,6 +32,7 @@ + @@ -141,7 +142,7 @@ - - + + - - + + + + + android:launchMode="singleTask" + android:screenOrientation="portrait" /> @@ -230,7 +239,7 @@ android:screenOrientation="portrait" android:theme="@style/activity_styles" /> { private static final String TAG = AddItemActivity.class.getSimpleName(); - @BindView(R.id.tv_app_name) - TextView tv_app_name; - @BindView(R.id.iv_icon) - ImageView iv_icon; - @BindView(R.id.tv_add) - TextView tv_add; - @BindView(R.id.tv_cancel) - TextView tv_cancel; - int mIconDpi = 1000; @@ -56,9 +49,18 @@ public class AddItemActivity extends BaseDataBindingActivity { private ShortcutPkgInfo mShortcutPkgInfo; + + @Override + protected int getLayoutId() { + return R.layout.activity_add_item; + } + @Override protected void initDataBinding() { - DataBindingUtil.setContentView(this, R.layout.add_item_confirmation_activity); + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); +// mViewDataBinding.setClick(new BtnClick()); } /** @@ -66,14 +68,13 @@ public class AddItemActivity extends BaseDataBindingActivity { */ @Override public void initView() { - ButterKnife.bind(this); - tv_cancel.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.tvCancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); - tv_add.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.tvAdd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -117,9 +118,9 @@ public class AddItemActivity extends BaseDataBindingActivity { mId = mInfo.getId(); mPackageName = mInfo.getPackage(); mTitle = mInfo.getShortLabel().toString(); - tv_app_name.setText(mTitle); + mViewDataBinding.tvAppName.setText(mTitle); Drawable d = getSystemService(LauncherApps.class).getShortcutIconDrawable(mInfo, mIconDpi); - iv_icon.setImageDrawable(d); + mViewDataBinding.ivIcon.setImageDrawable(d); mComponentName = mInfo.getActivity(); // Drawable icon = getFullResIcon(mAppWidgetProviderInfo.provider.getPackageName(), mAppWidgetProviderInfo.icon); // RemoteViews remoteViews = getPreview(mRequest); @@ -165,4 +166,6 @@ public class AddItemActivity extends BaseDataBindingActivity { ? android.R.drawable.sym_def_app_icon : android.R.mipmap.sym_def_app_icon, iconDpi); } + + } diff --git a/app/src/main/java/com/uiuios/aios/activity/additem/AddItemViewModel.java b/app/src/main/java/com/uiuios/aios/activity/additem/AddItemViewModel.java new file mode 100644 index 0000000..c8b39d3 --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/additem/AddItemViewModel.java @@ -0,0 +1,18 @@ +package com.uiuios.aios.activity.additem; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.databinding.ActivityAddItemBinding; + +public class AddItemViewModel extends BaseViewModel { + + @Override + public ActivityAddItemBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/alarm/main/AlarmActivity.java b/app/src/main/java/com/uiuios/aios/activity/alarm/main/AlarmActivity.java index 56971f8..e0f9cde 100644 --- a/app/src/main/java/com/uiuios/aios/activity/alarm/main/AlarmActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/alarm/main/AlarmActivity.java @@ -3,13 +3,9 @@ package com.uiuios.aios.activity.alarm.main; import android.content.Intent; import android.util.Log; import android.view.View; -import android.widget.ImageView; import androidx.annotation.NonNull; -import androidx.constraintlayout.widget.ConstraintLayout; -import androidx.databinding.DataBindingUtil; import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import com.hjq.toast.Toaster; import com.trello.rxlifecycle4.RxLifecycle; @@ -19,64 +15,34 @@ import com.uiuios.aios.activity.alarmclock.add.AlarmClockAddActivity; import com.uiuios.aios.alarm.AlarmAdapter; import com.uiuios.aios.alarm.AlarmClockData; import com.uiuios.aios.alarm.AlarmUtils; -import com.uiuios.aios.base.BaseDataBindingActivity; +import com.uiuios.aios.base.mvvm.BaseMvvmActivity; import com.uiuios.aios.bean.BaseResponse; +import com.uiuios.aios.databinding.ActivityAlarmBinding; import com.uiuios.aios.dialog.DeleteDialog; import com.uiuios.aios.network.NetInterfaceManager; import java.util.List; -import butterknife.BindView; -import butterknife.ButterKnife; import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; -public class AlarmActivity extends BaseDataBindingActivity implements AlarmContact.AlarmView { +public class AlarmActivity extends BaseMvvmActivity { private static final String TAG = AlarmActivity.class.getSimpleName(); - @BindView(R.id.cl_exit) - ConstraintLayout cl_exit; - @BindView(R.id.cl_all) - ConstraintLayout cl_all; - @BindView(R.id.cl_medicine) - ConstraintLayout cl_medicine; - @BindView(R.id.cl_look) - ConstraintLayout cl_look; - @BindView(R.id.cl_reserve) - ConstraintLayout cl_reserve; - @BindView(R.id.imageView1) - ImageView imageView1; - @BindView(R.id.imageView3) - ImageView imageView3; - @BindView(R.id.imageView5) - ImageView imageView5; - @BindView(R.id.imageView7) - ImageView imageView7; - - @BindView(R.id.rv_data) - RecyclerView rv_data; - @BindView(R.id.cl_nodata) - ConstraintLayout cl_nodata; - - @BindView(R.id.imageView2) - ImageView imageView2; - @BindView(R.id.imageView4) - ImageView imageView4; - @BindView(R.id.imageView6) - ImageView imageView6; - @BindView(R.id.imageView8) - ImageView imageView8; - - @BindView(R.id.iv_add) - ImageView iv_add; - - private AlarmPresenter mPresenter; private AlarmAdapter mAlarmAdapter; private int mType = 0; + @Override + protected int getLayoutId() { + return R.layout.activity_alarm; + } + @Override protected void initDataBinding() { - DataBindingUtil.setContentView(this, R.layout.activity_alarm); + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); +// mViewDataBinding.setClick(new BtnClick()); } /** @@ -84,11 +50,6 @@ public class AlarmActivity extends BaseDataBindingActivity implements AlarmConta */ @Override public void initView() { - ButterKnife.bind(this); - mPresenter = new AlarmPresenter(this); - mPresenter.attachView(this); - mPresenter.setLifecycle(getLifecycleSubject()); - mAlarmAdapter = new AlarmAdapter(); mAlarmAdapter.setOnLongClickListener(new AlarmAdapter.OnLongClickListener() { @Override @@ -96,45 +57,45 @@ public class AlarmActivity extends BaseDataBindingActivity implements AlarmConta showDialog(alarmClockData); } }); - rv_data.setLayoutManager(new LinearLayoutManager(AlarmActivity.this)); - rv_data.setAdapter(mAlarmAdapter); + mViewDataBinding.rvData.setLayoutManager(new LinearLayoutManager(AlarmActivity.this)); + mViewDataBinding.rvData.setAdapter(mAlarmAdapter); switchItem(0); - cl_exit.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clExit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); - cl_all.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clAll.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { switchItem(0); - mPresenter.getAlarmClock(mType); + mViewModel.getAlarmClock(mType); } }); - cl_medicine.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clMedicine.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { switchItem(1); - mPresenter.getAlarmClock(mType); + mViewModel.getAlarmClock(mType); } }); - cl_look.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clLook.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { switchItem(2); - mPresenter.getAlarmClock(mType); + mViewModel.getAlarmClock(mType); } }); - cl_reserve.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clReserve.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { switchItem(3); - mPresenter.getAlarmClock(mType); + mViewModel.getAlarmClock(mType); } }); - iv_add.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivAdd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(AlarmActivity.this, AlarmClockAddActivity.class)); @@ -147,60 +108,82 @@ public class AlarmActivity extends BaseDataBindingActivity implements AlarmConta */ @Override public void initData() { - mPresenter.getAlarmClock(mType); + mViewModel.getAlarmClockDataData().observe(this, new androidx.lifecycle.Observer>() { + @Override + public void onChanged(List alarmClockData) { + List localAddAlarm = AlarmUtils.getInstance().getLocalAddAlarm(); + Log.e(TAG, "setAlarmClock: localAddAlarm size = " + localAddAlarm); + if (alarmClockData != null) { + localAddAlarm.addAll(alarmClockData); + } + if (localAddAlarm.size() == 0) { + mAlarmAdapter.setAlarmClockData(null); +// swipeRefreshLayout.setRefreshing(false); + mViewDataBinding.clNodata.setVisibility(View.VISIBLE); + mViewDataBinding.rvData.setVisibility(View.GONE); + Toaster.show("没有数据"); + } else { + mAlarmAdapter.setAlarmClockData(localAddAlarm); +// swipeRefreshLayout.setRefreshing(false); + mViewDataBinding.clNodata.setVisibility(View.GONE); + mViewDataBinding.rvData.setVisibility(View.VISIBLE); + } + } + }); + mViewModel.getAlarmClock(mType); } @Override protected void onResume() { super.onResume(); - mPresenter.getAlarmClock(mType); + mViewModel.getAlarmClock(mType); } private void switchItem(int position) { mType = position; - cl_all.setBackground(null); - cl_medicine.setBackground(null); - cl_look.setBackground(null); - cl_reserve.setBackground(null); + mViewDataBinding.clAll.setBackground(null); + mViewDataBinding.clMedicine.setBackground(null); + mViewDataBinding.clLook.setBackground(null); + mViewDataBinding.clReserve.setBackground(null); - imageView2.setImageDrawable(null); - imageView4.setImageDrawable(null); - imageView6.setImageDrawable(null); - imageView8.setImageDrawable(null); + mViewDataBinding.imageView2.setImageDrawable(null); + mViewDataBinding.imageView4.setImageDrawable(null); + mViewDataBinding.imageView6.setImageDrawable(null); + mViewDataBinding.imageView8.setImageDrawable(null); switch (position) { case 0: default: // cl_all.setBackground(getDrawable(R.drawable.alarm_pressed_background)); - imageView2.setImageDrawable(getDrawable(R.drawable.icon_touch)); - imageView1.setImageDrawable(getDrawable(R.drawable.icon_alarm_all_pressed)); - imageView3.setImageDrawable(getDrawable(R.drawable.icon_alarm_medicine)); - imageView5.setImageDrawable(getDrawable(R.drawable.icon_alarm_look)); - imageView7.setImageDrawable(getDrawable(R.drawable.icon_alarm_reserve)); + mViewDataBinding.imageView2.setImageDrawable(getDrawable(R.drawable.icon_touch)); + mViewDataBinding.imageView1.setImageDrawable(getDrawable(R.drawable.icon_alarm_all_pressed)); + mViewDataBinding.imageView3.setImageDrawable(getDrawable(R.drawable.icon_alarm_medicine)); + mViewDataBinding.imageView5.setImageDrawable(getDrawable(R.drawable.icon_alarm_look)); + mViewDataBinding.imageView7.setImageDrawable(getDrawable(R.drawable.icon_alarm_reserve)); break; case 1: // cl_medicine.setBackground(getDrawable(R.drawable.alarm_pressed_background)); - imageView4.setImageDrawable(getDrawable(R.drawable.icon_touch)); - imageView1.setImageDrawable(getDrawable(R.drawable.icon_alarm_all)); - imageView3.setImageDrawable(getDrawable(R.drawable.icon_alarm_medicine_pressed)); - imageView5.setImageDrawable(getDrawable(R.drawable.icon_alarm_look)); - imageView7.setImageDrawable(getDrawable(R.drawable.icon_alarm_reserve)); + mViewDataBinding.imageView4.setImageDrawable(getDrawable(R.drawable.icon_touch)); + mViewDataBinding.imageView1.setImageDrawable(getDrawable(R.drawable.icon_alarm_all)); + mViewDataBinding.imageView3.setImageDrawable(getDrawable(R.drawable.icon_alarm_medicine_pressed)); + mViewDataBinding.imageView5.setImageDrawable(getDrawable(R.drawable.icon_alarm_look)); + mViewDataBinding.imageView7.setImageDrawable(getDrawable(R.drawable.icon_alarm_reserve)); break; case 2: // cl_look.setBackground(getDrawable(R.drawable.alarm_pressed_background)); - imageView6.setImageDrawable(getDrawable(R.drawable.icon_touch)); - imageView1.setImageDrawable(getDrawable(R.drawable.icon_alarm_all)); - imageView3.setImageDrawable(getDrawable(R.drawable.icon_alarm_medicine)); - imageView5.setImageDrawable(getDrawable(R.drawable.icon_alarm_look_pressed)); - imageView7.setImageDrawable(getDrawable(R.drawable.icon_alarm_reserve)); + mViewDataBinding.imageView6.setImageDrawable(getDrawable(R.drawable.icon_touch)); + mViewDataBinding.imageView1.setImageDrawable(getDrawable(R.drawable.icon_alarm_all)); + mViewDataBinding.imageView3.setImageDrawable(getDrawable(R.drawable.icon_alarm_medicine)); + mViewDataBinding.imageView5.setImageDrawable(getDrawable(R.drawable.icon_alarm_look_pressed)); + mViewDataBinding.imageView7.setImageDrawable(getDrawable(R.drawable.icon_alarm_reserve)); break; case 3: // cl_reserve.setBackground(getDrawable(R.drawable.alarm_pressed_background)); - imageView8.setImageDrawable(getDrawable(R.drawable.icon_touch)); - imageView1.setImageDrawable(getDrawable(R.drawable.icon_alarm_all)); - imageView3.setImageDrawable(getDrawable(R.drawable.icon_alarm_medicine)); - imageView5.setImageDrawable(getDrawable(R.drawable.icon_alarm_look)); - imageView7.setImageDrawable(getDrawable(R.drawable.icon_alarm_reserve_pressed)); + mViewDataBinding.imageView8.setImageDrawable(getDrawable(R.drawable.icon_touch)); + mViewDataBinding.imageView1.setImageDrawable(getDrawable(R.drawable.icon_alarm_all)); + mViewDataBinding.imageView3.setImageDrawable(getDrawable(R.drawable.icon_alarm_medicine)); + mViewDataBinding.imageView5.setImageDrawable(getDrawable(R.drawable.icon_alarm_look)); + mViewDataBinding.imageView7.setImageDrawable(getDrawable(R.drawable.icon_alarm_reserve_pressed)); break; } } @@ -231,7 +214,7 @@ public class AlarmActivity extends BaseDataBindingActivity implements AlarmConta if (alarmClockData.isIs_local()) { alarmClockData.setDeleted(true); AlarmUtils.getInstance().deleteAlarmClock(alarmClockData); - mPresenter.getAlarmClock(mType); + mViewModel.getAlarmClock(mType); } else { NetInterfaceManager.getInstance().deleteAlarmClockObservable(alarmClockData.getId()) .compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY)) @@ -263,36 +246,10 @@ public class AlarmActivity extends BaseDataBindingActivity implements AlarmConta @Override public void onComplete() { Log.e("deleteAlarm", "onComplete: "); - mPresenter.getAlarmClock(mType); + mViewModel.getAlarmClock(mType); } }); } } - - @Override - public void setAlarmClock(List alarmClockData) { - List localAddAlarm = AlarmUtils.getInstance().getLocalAddAlarm(); - Log.e(TAG, "setAlarmClock: localAddAlarm size = " + localAddAlarm); - if (alarmClockData != null) { - localAddAlarm.addAll(alarmClockData); - } - if (localAddAlarm.size() == 0) { - mAlarmAdapter.setAlarmClockData(null); -// swipeRefreshLayout.setRefreshing(false); - cl_nodata.setVisibility(View.VISIBLE); - rv_data.setVisibility(View.GONE); - Toaster.show("没有数据"); - } else { - mAlarmAdapter.setAlarmClockData(localAddAlarm); -// swipeRefreshLayout.setRefreshing(false); - cl_nodata.setVisibility(View.GONE); - rv_data.setVisibility(View.VISIBLE); - } - } - - @Override - public void setAlarmClockEmpty() { - - } } diff --git a/app/src/main/java/com/uiuios/aios/activity/alarm/main/AlarmContact.java b/app/src/main/java/com/uiuios/aios/activity/alarm/main/AlarmContact.java deleted file mode 100644 index fa169d1..0000000 --- a/app/src/main/java/com/uiuios/aios/activity/alarm/main/AlarmContact.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.uiuios.aios.activity.alarm.main; - -import com.uiuios.aios.alarm.AlarmClockData; -import com.uiuios.aios.base.mvp.BasePresenter; -import com.uiuios.aios.base.mvp.BaseView; - -import java.util.List; - -public class AlarmContact { - public interface Presenter extends BasePresenter { - void getAlarmClock(); - - void getAlarmClock(int type); - } - - public interface AlarmView extends BaseView { - void setAlarmClock(List alarmClockData); - - void setAlarmClockEmpty(); - } -} diff --git a/app/src/main/java/com/uiuios/aios/activity/alarm/main/AlarmPresenter.java b/app/src/main/java/com/uiuios/aios/activity/alarm/main/AlarmViewModel.java similarity index 71% rename from app/src/main/java/com/uiuios/aios/activity/alarm/main/AlarmPresenter.java rename to app/src/main/java/com/uiuios/aios/activity/alarm/main/AlarmViewModel.java index 298115a..9ff36a5 100644 --- a/app/src/main/java/com/uiuios/aios/activity/alarm/main/AlarmPresenter.java +++ b/app/src/main/java/com/uiuios/aios/activity/alarm/main/AlarmViewModel.java @@ -1,11 +1,14 @@ package com.uiuios.aios.activity.alarm.main; -import android.content.Context; import android.util.Log; +import androidx.lifecycle.MutableLiveData; + import com.trello.rxlifecycle4.android.ActivityEvent; import com.uiuios.aios.alarm.AlarmClockData; +import com.uiuios.aios.base.mvvm.BaseViewModel; import com.uiuios.aios.bean.BaseResponse; +import com.uiuios.aios.databinding.ActivityAlarmBinding; import com.uiuios.aios.network.NetInterfaceManager; import java.util.List; @@ -13,40 +16,22 @@ 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 AlarmPresenter implements AlarmContact.Presenter { - private static final String TAG = AlarmPresenter.class.getSimpleName(); - - private AlarmContact.AlarmView mView; - private Context mContext; - - AlarmPresenter(Context context) { - this.mContext = context; - } - - private BehaviorSubject lifecycle; - - void setLifecycle(BehaviorSubject lifecycle) { - this.lifecycle = lifecycle; - } - - public BehaviorSubject getLifecycle() { - return lifecycle; - } +public class AlarmViewModel extends BaseViewModel { @Override - public void attachView(@NonNull AlarmContact.AlarmView view) { - this.mView = view; + public ActivityAlarmBinding getVDBinding() { + return binding; } + private static final String TAG = AlarmViewModel.class.getSimpleName(); + @Override - public void detachView() { - this.mView = null; + public void onDestroy() { + } - @Override public void getAlarmClock() { NetInterfaceManager.getInstance().getAlarmClock(true, getLifecycle(), new NetInterfaceManager.AlarmClockCallback() { @Override @@ -70,7 +55,12 @@ public class AlarmPresenter implements AlarmContact.Presenter { }); } - @Override + private MutableLiveData> mAlarmClockDataData = new MutableLiveData<>(); + + public MutableLiveData> getAlarmClockDataData() { + return mAlarmClockDataData; + } + public void getAlarmClock(int type) { Log.e(TAG, "getAlarmClock: " + type); NetInterfaceManager.getInstance().getAlarmClockObservable(type) @@ -83,7 +73,7 @@ public class AlarmPresenter implements AlarmContact.Presenter { @Override public void onNext(@NonNull BaseResponse> listBaseResponse) { Log.e("getAlarmClock", "onNext: " + listBaseResponse); - mView.setAlarmClock(listBaseResponse.data); + mAlarmClockDataData.setValue(listBaseResponse.data); } @Override diff --git a/app/src/main/java/com/uiuios/aios/activity/alarmclock/add/AlarmClockAddActivity.java b/app/src/main/java/com/uiuios/aios/activity/alarmclock/add/AlarmClockAddActivity.java index 8cb67ba..238a767 100644 --- a/app/src/main/java/com/uiuios/aios/activity/alarmclock/add/AlarmClockAddActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/alarmclock/add/AlarmClockAddActivity.java @@ -9,15 +9,9 @@ import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.CompoundButton; -import android.widget.EditText; -import android.widget.ImageView; -import android.widget.LinearLayout; import android.widget.PopupWindow; -import android.widget.RadioButton; import android.widget.TextView; -import androidx.constraintlayout.widget.ConstraintLayout; - import com.bigkoo.pickerview.builder.TimePickerBuilder; import com.bigkoo.pickerview.listener.CustomListener; import com.bigkoo.pickerview.listener.OnTimeSelectListener; @@ -30,19 +24,18 @@ 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.android.ActivityEvent; import com.uiuios.aios.R; import com.uiuios.aios.alarm.AlarmClockData; import com.uiuios.aios.alarm.AlarmUtils; import com.uiuios.aios.base.GlideEngine; -import com.uiuios.aios.base.mvp.BaseMvpActivity; +import com.uiuios.aios.base.mvvm.BaseMvvmActivity; +import com.uiuios.aios.databinding.ActivityAddAlarmBinding; import com.uiuios.aios.service.main.MainService; import com.uiuios.aios.utils.FFmpegUtils; import com.uiuios.aios.utils.FileUtil; import com.uiuios.aios.utils.ScreenUtil; import com.uiuios.aios.utils.TimeUtils; - import com.uiuios.aios.utils.Utils; import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX; @@ -55,8 +48,6 @@ import java.util.HashMap; import java.util.Map; import java.util.concurrent.ThreadLocalRandom; -import butterknife.BindView; -import butterknife.ButterKnife; import io.reactivex.rxjava3.annotations.NonNull; import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; @@ -64,42 +55,9 @@ import okhttp3.MediaType; import okhttp3.MultipartBody; import okhttp3.RequestBody; -public class AlarmClockAddActivity extends BaseMvpActivity { +public class AlarmClockAddActivity extends BaseMvvmActivity { private static final String TAG = AlarmClockAddActivity.class.getSimpleName(); - @BindView(R.id.cl_content) - ConstraintLayout cl_content; - @BindView(R.id.ll_type) - LinearLayout ll_type; - @BindView(R.id.cl_type) - ConstraintLayout cl_type; - @BindView(R.id.tv_type) - TextView tv_type; - @BindView(R.id.cl_pic) - ConstraintLayout cl_pic; - @BindView(R.id.et_activation) - EditText et_activation; - @BindView(R.id.nv_pic) - NiceImageView nv_pic; - @BindView(R.id.iv_back) - ImageView iv_back; - @BindView(R.id.tv_duration) - TextView tv_duration; - - @BindView(R.id.rb1) - RadioButton rb1; - @BindView(R.id.rb2) - RadioButton rb2; - @BindView(R.id.rb_all) - RadioButton rb_all; - @BindView(R.id.rb_look) - RadioButton rb_look; - @BindView(R.id.rb_reserve) - RadioButton rb_reserve; - - @BindView(R.id.iv_add) - ImageView iv_add; - private PopupWindow mPopupWindow; private TimePickerView pvTime; @@ -115,6 +73,14 @@ public class AlarmClockAddActivity extends BaseMvpActivity { return R.layout.activity_add_alarm; } + @Override + protected void initDataBinding() { + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); +// mViewDataBinding.setClick(new BtnClick()); + } + @Override public void initView() { getLifecycleSubject().onNext(ActivityEvent.CREATE); @@ -123,95 +89,94 @@ public class AlarmClockAddActivity extends BaseMvpActivity { .fitWindow(true) .apply(); - ButterKnife.bind(this); initTimePicker(); - rb1.setChecked(true); - rb1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + mViewDataBinding.rb1.setChecked(true); + mViewDataBinding.rb1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) { if (isChecked) { ColorStateList colorStateList = getResources().getColorStateList(R.color.white); - rb1.setTextColor(colorStateList); + mViewDataBinding.rb1.setTextColor(colorStateList); mDayType = 1; } else { ColorStateList colorStateList = getResources().getColorStateList(R.color.radio_botton_gray); - rb1.setTextColor(colorStateList); + mViewDataBinding.rb1.setTextColor(colorStateList); } } }); - rb2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + mViewDataBinding.rb2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) { if (isChecked) { ColorStateList colorStateList = getResources().getColorStateList(R.color.white); - rb2.setTextColor(colorStateList); + mViewDataBinding.rb2.setTextColor(colorStateList); mDayType = 2; } else { ColorStateList colorStateList = getResources().getColorStateList(R.color.radio_botton_gray); - rb2.setTextColor(colorStateList); + mViewDataBinding.rb2.setTextColor(colorStateList); } } }); - rb_all.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + mViewDataBinding.rbAll.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { mClockType = 1; - et_activation.setText("用药闹钟"); + mViewDataBinding.etActivation.setText("用药闹钟"); } else { } } }); - rb_look.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + mViewDataBinding.rbLook.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { mClockType = 2; - et_activation.setText("接送闹钟"); + mViewDataBinding.etActivation.setText("接送闹钟"); } else { } } }); - rb_reserve.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + mViewDataBinding.rbReserve.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { mClockType = 3; - et_activation.setText("预约闹钟"); + mViewDataBinding.etActivation.setText("预约闹钟"); } else { } } }); - cl_pic.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clPic.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { openSelector(); } }); - cl_type.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clType.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // showTimeFilterWindow(); } }); - nv_pic.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.nvPic.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { openSelector(); } }); - iv_add.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivAdd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { checkContent(); } }); - iv_back.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { finish(); @@ -237,7 +202,7 @@ public class AlarmClockAddActivity extends BaseMvpActivity { @Override public void onClick(View view) { mDayType = 1; - tv_type.setText("只响一次"); + mViewDataBinding.tvType.setText("只响一次"); mPopupWindow.dismiss(); } }); @@ -245,7 +210,7 @@ public class AlarmClockAddActivity extends BaseMvpActivity { @Override public void onClick(View view) { mDayType = 2; - tv_type.setText("每天"); + mViewDataBinding.tvType.setText("每天"); mPopupWindow.dismiss(); } }); @@ -253,7 +218,7 @@ public class AlarmClockAddActivity extends BaseMvpActivity { @Override public void onClick(View view) { mDayType = 3; - tv_type.setText("周一至周五"); + mViewDataBinding.tvType.setText("周一至周五"); mPopupWindow.dismiss(); } }); @@ -261,7 +226,7 @@ public class AlarmClockAddActivity extends BaseMvpActivity { @Override public void onClick(View view) { mDayType = 4; - tv_type.setText("周六至周日"); + mViewDataBinding.tvType.setText("周六至周日"); mPopupWindow.dismiss(); } }); @@ -269,11 +234,11 @@ public class AlarmClockAddActivity extends BaseMvpActivity { if (mPopupWindow.isShowing()) { mPopupWindow.dismiss(); } else { - Log.e(TAG, "showTimeFilterWindow: right " + tv_type.getRight()); - Log.e(TAG, "showTimeFilterWindow: top " + tv_type.getTop()); - Log.e(TAG, "showTimeFilterWindow: right " + cl_type.getRight()); - Log.e(TAG, "showTimeFilterWindow: top " + cl_type.getTop()); - mPopupWindow.showAtLocation(cl_type, Gravity.END, 20, 0); + Log.e(TAG, "showTimeFilterWindow: right " + mViewDataBinding.tvType.getRight()); + Log.e(TAG, "showTimeFilterWindow: top " + mViewDataBinding.tvType.getTop()); + Log.e(TAG, "showTimeFilterWindow: right " + mViewDataBinding.clType.getRight()); + Log.e(TAG, "showTimeFilterWindow: top " + mViewDataBinding.clType.getTop()); + mPopupWindow.showAtLocation(mViewDataBinding.clType, Gravity.END, 20, 0); } } @@ -282,7 +247,7 @@ public class AlarmClockAddActivity extends BaseMvpActivity { private void checkContent() { pvTime.returnData(); - if (TextUtils.isEmpty(et_activation.getText())) { + if (TextUtils.isEmpty(mViewDataBinding.etActivation.getText())) { Toaster.show("请输入标题"); return; } @@ -304,7 +269,7 @@ public class AlarmClockAddActivity extends BaseMvpActivity { alarmClockData.setFile(mPictrueFilePath); alarmClockData.setType(mDayType); alarmClockData.setTime(timeStamp); - alarmClockData.setTitle(et_activation.getText().toString()); + alarmClockData.setTitle(mViewDataBinding.etActivation.getText().toString()); alarmClockData.setRemind_type(0); alarmClockData.setIs_onoff(1); alarmClockData.setClazz(mClockType); @@ -313,7 +278,7 @@ public class AlarmClockAddActivity extends BaseMvpActivity { params.put("sn", Utils.getSerial()); params.put("time", timeStamp); params.put("type", String.valueOf(mDayType)); - params.put("title", et_activation.getText().toString()); + params.put("title", mViewDataBinding.etActivation.getText().toString()); params.put("remind_type", "0"); params.put("is_onoff", "1"); params.put("class", String.valueOf(mClockType)); @@ -390,9 +355,9 @@ public class AlarmClockAddActivity extends BaseMvpActivity { File file = new File(mPictrueFilePath); if (file.exists()) { RequestOptions options = new RequestOptions().transform(new RoundedCorners(ScreenUtil.dip2px(AlarmClockAddActivity.this, 8F))); - Glide.with(nv_pic).load(file).apply(options).into(nv_pic); - nv_pic.setVisibility(View.VISIBLE); - cl_pic.setVisibility(View.GONE); + Glide.with(mViewDataBinding.nvPic).load(file).apply(options).into(mViewDataBinding.nvPic); + mViewDataBinding.nvPic.setVisibility(View.VISIBLE); + mViewDataBinding.clPic.setVisibility(View.GONE); if (FileUtil.isVideoFile(mPictrueFilePath)) { FFmpegUtils.getDurationInMilliseconds(mPictrueFilePath, new Observer() { @Override @@ -403,7 +368,7 @@ public class AlarmClockAddActivity extends BaseMvpActivity { @Override public void onNext(@NonNull Integer integer) { Log.e("openSelector", "onNext: " + integer); - tv_duration.setText(TimeUtils.secToTime(integer)); + mViewDataBinding.tvDuration.setText(TimeUtils.secToTime(integer)); } @Override @@ -417,12 +382,12 @@ public class AlarmClockAddActivity extends BaseMvpActivity { } }); } else { - tv_duration.setText(""); + mViewDataBinding.tvDuration.setText(""); } } else { mPictrueFilePath = ""; - nv_pic.setVisibility(View.GONE); - cl_pic.setVisibility(View.VISIBLE); + mViewDataBinding.nvPic.setVisibility(View.GONE); + mViewDataBinding.clPic.setVisibility(View.VISIBLE); } } @@ -466,12 +431,12 @@ public class AlarmClockAddActivity extends BaseMvpActivity { .setContentTextSize(30) .setDate(selectedDate) .setRangDate(startDate, selectedDate) - .setDecorView(cl_content)//非dialog模式下,设置ViewGroup, pickerView将会添加到这个ViewGroup中 + .setDecorView(mViewDataBinding.clContent)//非dialog模式下,设置ViewGroup, pickerView将会添加到这个ViewGroup中 .setOutSideColor(0x00000000) .setOutSideCancelable(false) .build(); pvTime.setKeyBackCancelable(false);//系统返回键监听屏蔽掉 - pvTime.show(cl_content, false);//弹出时间选择器,传递参数过去,回调的时候则可以绑定此view + pvTime.show(mViewDataBinding.clContent, false);//弹出时间选择器,传递参数过去,回调的时候则可以绑定此view } diff --git a/app/src/main/java/com/uiuios/aios/activity/alarmclock/add/AlarmClockAddViewModel.java b/app/src/main/java/com/uiuios/aios/activity/alarmclock/add/AlarmClockAddViewModel.java new file mode 100644 index 0000000..b4f81ec --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/alarmclock/add/AlarmClockAddViewModel.java @@ -0,0 +1,18 @@ +package com.uiuios.aios.activity.alarmclock.add; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.databinding.ActivityAddAlarmBinding; + +public class AlarmClockAddViewModel extends BaseViewModel { + + @Override + public ActivityAddAlarmBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/alarmclock/add/port/PortAlarmClockAddActivity.java b/app/src/main/java/com/uiuios/aios/activity/alarmclock/add/port/PortAlarmClockAddActivity.java index 4b83f2b..3bd13b8 100644 --- a/app/src/main/java/com/uiuios/aios/activity/alarmclock/add/port/PortAlarmClockAddActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/alarmclock/add/port/PortAlarmClockAddActivity.java @@ -83,7 +83,6 @@ public class PortAlarmClockAddActivity extends BaseMvvmActivity { - +public class AlarmClockEditActivity extends BaseMvvmActivity { private static final String TAG = AlarmClockEditActivity.class.getSimpleName(); - private final BehaviorSubject lifecycleSubject = BehaviorSubject.create(); private LoadingDialog mLoadingDialog; - - @BindView(R.id.cl_content) - ConstraintLayout cl_content; - @BindView(R.id.ll_type) - LinearLayout ll_type; - @BindView(R.id.cl_type) - ConstraintLayout cl_type; - @BindView(R.id.tv_type) - TextView tv_type; - @BindView(R.id.cl_pic) - ConstraintLayout cl_pic; - @BindView(R.id.et_activation) - EditText et_activation; - @BindView(R.id.nv_pic) - NiceImageView nv_pic; - @BindView(R.id.iv_back) - ImageView iv_back; - @BindView(R.id.tv_duration) - TextView tv_duration; - - @BindView(R.id.rb1) - RadioButton rb1; - @BindView(R.id.rb2) - RadioButton rb2; - @BindView(R.id.rb_all) - RadioButton rb_all; - @BindView(R.id.rb_look) - RadioButton rb_look; - @BindView(R.id.rb_reserve) - RadioButton rb_reserve; - - @BindView(R.id.iv_add) - ImageView iv_add; - private PopupWindow mMenuPopupWindow; private TimePickerView pvTime; @@ -128,132 +73,77 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc private int mId; private AlarmClockData mAlarmClockData; + @Override - @androidx.annotation.NonNull - @CheckResult - public final Observable lifecycle() { - return lifecycleSubject.hide(); + protected int getLayoutId() { + return R.layout.activity_add_alarm; } @Override - @androidx.annotation.NonNull - @CheckResult - public final LifecycleTransformer bindUntilEvent(@androidx.annotation.NonNull ActivityEvent event) { - return RxLifecycle.bindUntilEvent(lifecycleSubject, event); + protected void initDataBinding() { + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); +// mViewDataBinding.setClick(new BtnClick()); } @Override - @androidx.annotation.NonNull - @CheckResult - public final LifecycleTransformer bindToLifecycle() { - return RxLifecycleAndroid.bindActivity(lifecycleSubject); - } - - @Override - @CallSuper - protected void onStart() { - super.onStart(); - lifecycleSubject.onNext(ActivityEvent.START); - } - - @Override - @CallSuper - protected void onResume() { - super.onResume(); - lifecycleSubject.onNext(ActivityEvent.RESUME); - } - - @Override - @CallSuper - protected void onPause() { - lifecycleSubject.onNext(ActivityEvent.PAUSE); - super.onPause(); - } - - @Override - @CallSuper - protected void onStop() { - lifecycleSubject.onNext(ActivityEvent.STOP); - super.onStop(); - } - - @Override - @CallSuper - protected void onDestroy() { - lifecycleSubject.onNext(ActivityEvent.DESTROY); - super.onDestroy(); - } - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_add_alarm); - lifecycleSubject.onNext(ActivityEvent.CREATE); - UltimateBarX.statusBarOnly(this) - .colorRes(R.color.default_blue) - .fitWindow(true) - .apply(); - initView(); - initData(); - } - - private void initView() { - ButterKnife.bind(this); + public void initView() { // tv_title.setText("编辑闹钟"); initTimePicker(); - cl_pic.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clPic.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { openSelector(); } }); - cl_type.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clType.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // showTimeFilterWindow(); } }); - nv_pic.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.nvPic.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { openSelector(); } }); - iv_back.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { finish(); } }); - rb1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + mViewDataBinding.rb1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean b) { if (b) { ColorStateList colorStateList = getResources().getColorStateList(R.color.white); - rb1.setTextColor(colorStateList); + mViewDataBinding.rb1.setTextColor(colorStateList); mDayType = 1; } else { ColorStateList colorStateList = getResources().getColorStateList(R.color.radio_botton_gray); - rb1.setTextColor(colorStateList); + mViewDataBinding.rb1.setTextColor(colorStateList); } } }); - rb2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + mViewDataBinding.rb2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean b) { if (b) { ColorStateList colorStateList = getResources().getColorStateList(R.color.white); - rb2.setTextColor(colorStateList); + mViewDataBinding.rb2.setTextColor(colorStateList); mDayType = 2; } else { ColorStateList colorStateList = getResources().getColorStateList(R.color.radio_botton_gray); - rb2.setTextColor(colorStateList); + mViewDataBinding.rb2.setTextColor(colorStateList); } } }); - rb_all.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + mViewDataBinding.rbAll.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { @@ -263,7 +153,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc } } }); - rb_look.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + mViewDataBinding.rbLook.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { @@ -273,7 +163,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc } } }); - rb_reserve.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + mViewDataBinding.rbReserve.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { @@ -283,7 +173,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc } } }); - iv_add.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivAdd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { checkContent(); @@ -291,7 +181,8 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc }); } - private void initData() { + @Override + public void initData() { Intent intent = getIntent(); if (intent == null) { Toaster.show("获取闹钟信息失败"); @@ -308,7 +199,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc AlarmClockData alarmClockData = clockDataHashMap.get(mId); if (alarmClockData == null || !alarmClockData.isIs_local()) { NetInterfaceManager.getInstance().getAlarmClockByIdObservable(mId) - .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY)) + .compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY)) .subscribe(new Observer>() { @Override public void onSubscribe(@NonNull Disposable d) { @@ -355,33 +246,33 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc switch (mDayType) { default: case AlarmUtils.ONCE: - rb1.setChecked(true); -// tv_type.setText("只响一次"); + mViewDataBinding.rb1.setChecked(true); +// tvType.setText("只响一次"); break; case AlarmUtils.LOOP: - rb2.setChecked(true); -// tv_type.setText("每天"); + mViewDataBinding.rb2.setChecked(true); +// tvType.setText("每天"); break; // case AlarmUtils.WORKING_DAY: // rb3.setChecked(true); -// tv_type.setText("周一至周五"); +// tvType.setText("周一至周五"); // break; // case AlarmUtils.OFF_DAY: // rb4.setChecked(true); -// tv_type.setText("周六至周日"); +// tvType.setText("周六至周日"); // break; } mClockType = alarmClockData.getClazz(); switch (mClockType) { case 1: default: - rb_all.setChecked(true); + mViewDataBinding.rbAll.setChecked(true); break; case 2: - rb_look.setChecked(true); + mViewDataBinding.rbLook.setChecked(true); break; case 3: - rb_reserve.setChecked(true); + mViewDataBinding.rbReserve.setChecked(true); break; } String time = alarmClockData.getTime(); @@ -391,28 +282,28 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc Log.e(TAG, "setAlarmClockInfo: " + date.getTimeInMillis()); pvTime.setDate(date); String title = alarmClockData.getTitle(); - et_activation.setText(title); + mViewDataBinding.etActivation.setText(title); String fileUrl = alarmClockData.getFile(); mPictrueFilePath = fileUrl; String fileName = Utils.getFileNamefromURL(fileUrl); File file = new File(Utils.getDownLoadPath(AlarmClockEditActivity.this) + fileName); if (TextUtils.isEmpty(fileUrl)) { - cl_pic.setVisibility(View.VISIBLE); - nv_pic.setVisibility(View.GONE); + mViewDataBinding.clPic.setVisibility(View.VISIBLE); + mViewDataBinding.nvPic.setVisibility(View.GONE); } else { if (file.exists() && !file.isDirectory()) { - GlideLoadUtils.getInstance().glideLoad(this, file, nv_pic); + GlideLoadUtils.getInstance().glideLoad(this, file, mViewDataBinding.nvPic); } else { - GlideLoadUtils.getInstance().glideLoad(this, fileUrl, nv_pic); + GlideLoadUtils.getInstance().glideLoad(this, fileUrl, mViewDataBinding.nvPic); } - cl_pic.setVisibility(View.GONE); - nv_pic.setVisibility(View.VISIBLE); + mViewDataBinding.clPic.setVisibility(View.GONE); + mViewDataBinding.nvPic.setVisibility(View.VISIBLE); } } private void checkContent() { pvTime.returnData(); - if (TextUtils.isEmpty(et_activation.getText())) { + if (TextUtils.isEmpty(mViewDataBinding.etActivation.getText())) { Toaster.show("请输入标题"); return; } @@ -442,7 +333,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc mAlarmClockData.setId(mId); mAlarmClockData.setType(mDayType); mAlarmClockData.setTime(timeStamp); - mAlarmClockData.setTitle(et_activation.getText().toString()); + mAlarmClockData.setTitle(mViewDataBinding.etActivation.getText().toString()); mAlarmClockData.setFile(mPictrueFilePath); mAlarmClockData.setRemind_type(0); mAlarmClockData.setIs_onoff(1); @@ -455,7 +346,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc params.put("id", String.valueOf(mId)); params.put("type", String.valueOf(mDayType)); params.put("time", timeStamp); - params.put("title", et_activation.getText().toString()); + params.put("title", mViewDataBinding.etActivation.getText().toString()); params.put("remind_type", "0"); params.put("is_onoff", "1"); params.put("class", String.valueOf(mClockType)); @@ -479,13 +370,13 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc finish(); } else { NetInterfaceManager.getInstance().getAlarmClockEditObservable(params, body) - .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY)) + .compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY)) .subscribe(new Observer() { @Override public void onSubscribe(@NonNull Disposable d) { Log.e("checkContent", "onSubscribe: "); Toaster.show("正在上传"); - iv_add.setEnabled(false); + mViewDataBinding.ivAdd.setEnabled(false); } @Override @@ -515,7 +406,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc @Override public void onComplete() { Log.e("checkContent", "onComplete: "); - iv_add.setEnabled(true); + mViewDataBinding.ivAdd.setEnabled(true); finish(); mLoadingDialog.close(); } @@ -537,7 +428,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc @Override public void onClick(View view) { mDayType = 1; - tv_type.setText("只响一次"); + mViewDataBinding.tvType.setText("只响一次"); mMenuPopupWindow.dismiss(); } }); @@ -545,7 +436,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc @Override public void onClick(View view) { mDayType = 2; - tv_type.setText("每天"); + mViewDataBinding.tvType.setText("每天"); mMenuPopupWindow.dismiss(); } }); @@ -553,7 +444,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc @Override public void onClick(View view) { mDayType = 3; - tv_type.setText("周一至周五"); + mViewDataBinding.tvType.setText("周一至周五"); mMenuPopupWindow.dismiss(); } }); @@ -561,7 +452,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc @Override public void onClick(View view) { mDayType = 4; - tv_type.setText("周六至周日"); + mViewDataBinding.tvType.setText("周六至周日"); mMenuPopupWindow.dismiss(); } }); @@ -569,11 +460,11 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc if (mMenuPopupWindow.isShowing()) { mMenuPopupWindow.dismiss(); } else { - Log.e(TAG, "showTimeFilterWindow: right " + tv_type.getRight()); - Log.e(TAG, "showTimeFilterWindow: top " + tv_type.getTop()); - Log.e(TAG, "showTimeFilterWindow: right " + cl_type.getRight()); - Log.e(TAG, "showTimeFilterWindow: top " + cl_type.getTop()); - mMenuPopupWindow.showAtLocation(cl_type, Gravity.END, 20, 0); + Log.e(TAG, "showTimeFilterWindow: right " + mViewDataBinding.tvType.getRight()); + Log.e(TAG, "showTimeFilterWindow: top " + mViewDataBinding.tvType.getTop()); + Log.e(TAG, "showTimeFilterWindow: right " + mViewDataBinding.clType.getRight()); + Log.e(TAG, "showTimeFilterWindow: top " + mViewDataBinding.clType.getTop()); + mMenuPopupWindow.showAtLocation(mViewDataBinding.clType, Gravity.END, 20, 0); } } @@ -589,9 +480,9 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc File file = new File(mPictrueFilePath); if (file.exists()) { RequestOptions options = new RequestOptions().transform(new RoundedCorners(ScreenUtil.dip2px(AlarmClockEditActivity.this, 8F))); - Glide.with(nv_pic).load(file).apply(options).into(nv_pic); - nv_pic.setVisibility(View.VISIBLE); - cl_pic.setVisibility(View.GONE); + Glide.with(mViewDataBinding.nvPic).load(file).apply(options).into(mViewDataBinding.nvPic); + mViewDataBinding.nvPic.setVisibility(View.VISIBLE); + mViewDataBinding.clPic.setVisibility(View.GONE); if (FileUtil.isVideoFile(mPictrueFilePath)) { FFmpegUtils.getDurationInMilliseconds(mPictrueFilePath, new Observer() { @Override @@ -602,7 +493,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc @Override public void onNext(@NonNull Integer integer) { Log.e("openSelector", "onNext: " + integer); - tv_duration.setText(TimeUtils.secToTime(integer)); + mViewDataBinding.tvDuration.setText(TimeUtils.secToTime(integer)); } @Override @@ -616,12 +507,12 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc } }); } else { - tv_duration.setText(""); + mViewDataBinding.tvDuration.setText(""); } } else { mPictrueFilePath = ""; - nv_pic.setVisibility(View.GONE); - cl_pic.setVisibility(View.VISIBLE); + mViewDataBinding.nvPic.setVisibility(View.GONE); + mViewDataBinding.clPic.setVisibility(View.VISIBLE); } } @@ -665,12 +556,12 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc .setContentTextSize(30) .setDate(selectedDate) .setRangDate(startDate, selectedDate) - .setDecorView(cl_content)//非dialog模式下,设置ViewGroup, pickerView将会添加到这个ViewGroup中 + .setDecorView(mViewDataBinding.clContent)//非dialog模式下,设置ViewGroup, pickerView将会添加到这个ViewGroup中 .setOutSideColor(0x00000000) .setOutSideCancelable(false) .build(); pvTime.setKeyBackCancelable(false);//系统返回键监听屏蔽掉 - pvTime.show(cl_content, false);//弹出时间选择器,传递参数过去,回调的时候则可以绑定此view + pvTime.show(mViewDataBinding.clContent, false);//弹出时间选择器,传递参数过去,回调的时候则可以绑定此view } diff --git a/app/src/main/java/com/uiuios/aios/activity/alarmclock/edit/AlarmClockEditViewModel.java b/app/src/main/java/com/uiuios/aios/activity/alarmclock/edit/AlarmClockEditViewModel.java new file mode 100644 index 0000000..75deb3b --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/alarmclock/edit/AlarmClockEditViewModel.java @@ -0,0 +1,18 @@ +package com.uiuios.aios.activity.alarmclock.edit; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.databinding.ActivityAddAlarmBinding; + +public class AlarmClockEditViewModel extends BaseViewModel { + + @Override + public ActivityAddAlarmBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/ArticleActivity.java b/app/src/main/java/com/uiuios/aios/activity/article/ArticleActivity.java similarity index 55% rename from app/src/main/java/com/uiuios/aios/activity/ArticleActivity.java rename to app/src/main/java/com/uiuios/aios/activity/article/ArticleActivity.java index a14c830..bca3c37 100644 --- a/app/src/main/java/com/uiuios/aios/activity/ArticleActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/article/ArticleActivity.java @@ -1,4 +1,4 @@ -package com.uiuios.aios.activity; +package com.uiuios.aios.activity.article; import android.content.Intent; import android.graphics.Bitmap; @@ -7,42 +7,35 @@ import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; -import android.widget.ImageView; -import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.databinding.DataBindingUtil; import com.bumptech.glide.Glide; import com.bumptech.glide.request.target.CustomTarget; import com.bumptech.glide.request.transition.Transition; -import com.shehuan.niv.NiceImageView; import com.uiuios.aios.R; -import com.uiuios.aios.base.BaseDataBindingActivity; +import com.uiuios.aios.base.mvvm.BaseMvvmActivity; import com.uiuios.aios.bean.ArticleInfo; +import com.uiuios.aios.databinding.ActivityArticlBinding; -import butterknife.BindView; -import butterknife.ButterKnife; +public class ArticleActivity extends BaseMvvmActivity { -public class ArticleActivity extends BaseDataBindingActivity { - @BindView(R.id.iv_back) - ImageView iv_back; - @BindView(R.id.tv_title) - TextView tv_title; - @BindView(R.id.tv_content) - TextView tv_content; - @BindView(R.id.iv_img) - NiceImageView iv_img; + @Override + protected int getLayoutId() { + return R.layout.activity_articl; + } @Override protected void initDataBinding() { - DataBindingUtil.setContentView(this, R.layout.activity_articl); + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); +// mViewDataBinding.setClick(new BtnClick()); } @Override public void initView() { - ButterKnife.bind(this); Intent intent = getIntent(); if (intent == null) { finish(); @@ -51,35 +44,35 @@ public class ArticleActivity extends BaseDataBindingActivity { if (articleInfo == null) { finish(); } - iv_back.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { finish(); } }); - tv_title.setText(articleInfo.getTitle()); - tv_content.setText(articleInfo.getContent()); - ViewTreeObserver observer = iv_img.getViewTreeObserver(); + mViewDataBinding.tvTitle.setText(articleInfo.getTitle()); + mViewDataBinding.tvContent.setText(articleInfo.getContent()); + ViewTreeObserver observer = mViewDataBinding.ivImg.getViewTreeObserver(); observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { - ViewGroup.LayoutParams layoutParams = iv_img.getLayoutParams(); - int width = iv_img.getWidth(); + ViewGroup.LayoutParams layoutParams = mViewDataBinding.ivImg.getLayoutParams(); + int width = mViewDataBinding.ivImg.getWidth(); // layoutParams.height = width; -// iv_img.setLayoutParams(layoutParams); +// ivImg.setLayoutParams(layoutParams); } }); - Glide.with(iv_img).asBitmap().load(articleInfo.getImg()).into(new CustomTarget() { + Glide.with(mViewDataBinding.ivImg).asBitmap().load(articleInfo.getImg()).into(new CustomTarget() { @Override public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition transition) { int imgWidth = resource.getWidth(); int imgHeight = resource.getHeight(); - iv_img.setImageBitmap(resource); + mViewDataBinding.ivImg.setImageBitmap(resource); Log.e("into", "onResourceReady: width = " + imgWidth + "height = " + imgHeight); - ViewGroup.LayoutParams layoutParams = iv_img.getLayoutParams(); - int width = iv_img.getWidth(); + ViewGroup.LayoutParams layoutParams = mViewDataBinding.ivImg.getLayoutParams(); + int width = mViewDataBinding.ivImg.getWidth(); layoutParams.height = (int) (imgHeight * (1.0f * width / imgWidth)); - iv_img.setLayoutParams(layoutParams); + mViewDataBinding.ivImg.setLayoutParams(layoutParams); } @Override @@ -93,4 +86,6 @@ public class ArticleActivity extends BaseDataBindingActivity { public void initData() { } + + } diff --git a/app/src/main/java/com/uiuios/aios/activity/article/ArticleViewModel.java b/app/src/main/java/com/uiuios/aios/activity/article/ArticleViewModel.java new file mode 100644 index 0000000..e162c72 --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/article/ArticleViewModel.java @@ -0,0 +1,18 @@ +package com.uiuios.aios.activity.article; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.databinding.ActivityArticlBinding; + +public class ArticleViewModel extends BaseViewModel { + + @Override + public ActivityArticlBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/contact/AddWechatContactActivity.java b/app/src/main/java/com/uiuios/aios/activity/contact/AddWechatContactActivity.java index 9ecf5d7..3bb1a6b 100644 --- a/app/src/main/java/com/uiuios/aios/activity/contact/AddWechatContactActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/contact/AddWechatContactActivity.java @@ -21,17 +21,12 @@ 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.trello.rxlifecycle4.RxLifecycle; -import com.trello.rxlifecycle4.android.ActivityEvent; import com.uiuios.aios.R; import com.uiuios.aios.base.GlideEngine; import com.uiuios.aios.base.mvvm.BaseMvvmActivity; import com.uiuios.aios.bean.BaseResponse; -import com.uiuios.aios.bean.WechatInfo; import com.uiuios.aios.databinding.ActivityAddWechatContactBinding; -import com.uiuios.aios.db.ContactManager; import com.uiuios.aios.manager.RemoteManager; -import com.uiuios.aios.network.NetInterfaceManager; import com.uiuios.aios.utils.ScreenUtil; import com.xiasuhuei321.loadingdialog.view.LoadingDialog; @@ -41,8 +36,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.Map; -import io.reactivex.rxjava3.annotations.NonNull; -import io.reactivex.rxjava3.disposables.Disposable; import okhttp3.MediaType; import okhttp3.MultipartBody; import okhttp3.RequestBody; diff --git a/app/src/main/java/com/uiuios/aios/activity/ControlActivity.java b/app/src/main/java/com/uiuios/aios/activity/control/ControlActivity.java similarity index 81% rename from app/src/main/java/com/uiuios/aios/activity/ControlActivity.java rename to app/src/main/java/com/uiuios/aios/activity/control/ControlActivity.java index 5dc9ce5..588e43e 100644 --- a/app/src/main/java/com/uiuios/aios/activity/ControlActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/control/ControlActivity.java @@ -1,9 +1,8 @@ -package com.uiuios.aios.activity; +package com.uiuios.aios.activity.control; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.content.BroadcastReceiver; -import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; @@ -22,24 +21,18 @@ import android.provider.Settings; import android.text.TextUtils; import android.util.Log; import android.view.View; -import android.widget.ImageView; import android.widget.SeekBar; -import android.widget.TextView; - -import androidx.constraintlayout.widget.ConstraintLayout; -import androidx.databinding.DataBindingUtil; import com.hjq.toast.Toaster; import com.tencent.mmkv.MMKV; import com.uiuios.aios.R; -import com.uiuios.aios.base.BaseDataBindingActivity; +import com.uiuios.aios.base.mvvm.BaseMvvmActivity; import com.uiuios.aios.config.CommonConfig; +import com.uiuios.aios.databinding.ActivityControlBinding; import com.uiuios.aios.manager.AmapManager; import com.uiuios.aios.manager.RemoteManager; import com.uiuios.aios.utils.BrightnessUtils; -import com.uiuios.aios.view.RulerSeekBar; - import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Arrays; @@ -47,73 +40,27 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import butterknife.BindView; -import butterknife.ButterKnife; -import butterknife.OnClick; - -public class ControlActivity extends BaseDataBindingActivity { +public class ControlActivity extends BaseMvvmActivity { private static final String TAG = ControlActivity.class.getSimpleName(); - @BindView(R.id.iv_back) - ImageView iv_back; - @BindView(R.id.tv_wifi) - TextView tv_wifi; - @BindView(R.id.tv_bt) - TextView tv_bt; - - @BindView(R.id.seekBar) - RulerSeekBar seekBar; - @BindView(R.id.seekbar_brightness) - SeekBar seekbar_brightness; - @BindView(R.id.seekbar_sound) - SeekBar seekbar_sound; - - @BindView(R.id.tv_sound) - TextView tv_sound; - @BindView(R.id.tv_battery) - TextView tv_battery; - @BindView(R.id.tv_flashlight) - TextView tv_flashlight; - @BindView(R.id.tv_brightness) - TextView tv_brightness; - @BindView(R.id.tv_location) - TextView tv_location; - @BindView(R.id.cl_wifi) - ConstraintLayout cl_wifi; - @BindView(R.id.cl_bt) - ConstraintLayout cl_bt; - @BindView(R.id.cl_battery) - ConstraintLayout cl_battery; - @BindView(R.id.cl_flashlight) - ConstraintLayout cl_flashlight; - @BindView(R.id.cl_location) - ConstraintLayout cl_location; - - - @OnClick({R.id.iv_back}) - void OnClick(View v) { - switch (v.getId()) { - case R.id.iv_back: - finish(); - break; - default: - } - } - - - private ContentResolver crv; private static final String ACTION_FLASHLIGHT_CHANGED = "com.android.settings.flashlight.action.FLASHLIGHT_CHANGED"; + @Override + protected int getLayoutId() { + return R.layout.activity_control; + } + @Override protected void initDataBinding() { - DataBindingUtil.setContentView(this,R.layout.activity_control); + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); + mViewDataBinding.setClick(new BtnClick()); } @Override public void initView() { - ButterKnife.bind(this); - crv = getContentResolver(); getWifi(); registerReceivers(); getBluetooth(); @@ -125,7 +72,7 @@ public class ControlActivity extends BaseDataBindingActivity { getLocation(); getBrightness(); getSound(); - cl_flashlight.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clFlashlight.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { try { @@ -136,7 +83,7 @@ public class ControlActivity extends BaseDataBindingActivity { } } }); - cl_battery.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clBattery.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(Settings.ACTION_BATTERY_SAVER_SETTINGS)); @@ -150,7 +97,7 @@ public class ControlActivity extends BaseDataBindingActivity { } private void getWifi() { - cl_wifi.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clWifi.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); @@ -159,10 +106,10 @@ public class ControlActivity extends BaseDataBindingActivity { }); if (isWifiEnabled()) { // tv_wifi_ssid.setText(getConnectWifiSsid()); - cl_wifi.setBackground(getDrawable(R.drawable.control_background_item)); + mViewDataBinding.clBattery.setBackground(getDrawable(R.drawable.control_background_item)); } else { // tv_wifi_ssid.setText("未连接"); - cl_wifi.setBackground(getDrawable(R.drawable.control_background_item_dis)); + mViewDataBinding.clBattery.setBackground(getDrawable(R.drawable.control_background_item_dis)); } } @@ -214,14 +161,14 @@ public class ControlActivity extends BaseDataBindingActivity { if (info.getState().equals(NetworkInfo.State.DISCONNECTED)) { Log.e(TAG, "wifi断开"); // tv_wifi_ssid.setText("未连接"); - cl_wifi.setBackground(getDrawable(R.drawable.control_background_item_dis)); + mViewDataBinding.clBattery.setBackground(getDrawable(R.drawable.control_background_item_dis)); } else if (info.getState().equals(NetworkInfo.State.CONNECTED)) { WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); //获取当前wifi名称 String newSSID = wifiInfo.getSSID(); // tv_wifi_ssid.setText(getConnectWifiSsid()); - cl_wifi.setBackground(getDrawable(R.drawable.control_background_item)); + mViewDataBinding.clBattery.setBackground(getDrawable(R.drawable.control_background_item)); } break; //wifi打开与否 @@ -230,7 +177,7 @@ public class ControlActivity extends BaseDataBindingActivity { if (wifistate == WifiManager.WIFI_STATE_DISABLED) { Log.e(TAG, "系统关闭wifi"); // tv_wifi_ssid.setText("关"); - cl_wifi.setBackground(getDrawable(R.drawable.control_background_item_dis)); + mViewDataBinding.clBattery.setBackground(getDrawable(R.drawable.control_background_item_dis)); } else if (wifistate == WifiManager.WIFI_STATE_ENABLED) { Log.e(TAG, "系统开启wifi"); } @@ -277,18 +224,18 @@ public class ControlActivity extends BaseDataBindingActivity { bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); if (bluetoothAdapter.isEnabled()) { // if (isConnected()) { -// cl_bt.setBackground(getDrawable(R.drawable.control_background_item)); +// clBt.setBackground(getDrawable(R.drawable.control_background_item)); // tv_bt_ssid.setText(getBluetoothDeviceName()); // } else { -// cl_bt.setBackground(getDrawable(R.drawable.control_background_item_dis)); +// clBt.setBackground(getDrawable(R.drawable.control_background_item_dis)); // tv_bt_ssid.setText("未连接"); // } } else { - cl_bt.setBackground(getDrawable(R.drawable.control_background_item_dis)); + mViewDataBinding.clBt.setBackground(getDrawable(R.drawable.control_background_item_dis)); // tv_bt_ssid.setText("已关闭"); } getConnectedDevicesV1(); - cl_bt.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clBt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { startActivity(new Intent(Settings.ACTION_BLUETOOTH_SETTINGS)); @@ -425,30 +372,30 @@ public class ControlActivity extends BaseDataBindingActivity { switch (blueState) { case BluetoothAdapter.STATE_TURNING_ON: // tv_bt_ssid.setText("正在打开"); - cl_bt.setBackground(getDrawable(R.drawable.control_background_item)); + mViewDataBinding.clBt.setBackground(getDrawable(R.drawable.control_background_item)); break; case BluetoothAdapter.STATE_ON: // tv_bt_ssid.setText("已打开"); - cl_bt.setBackground(getDrawable(R.drawable.control_background_item)); + mViewDataBinding.clBt.setBackground(getDrawable(R.drawable.control_background_item)); break; case BluetoothAdapter.STATE_TURNING_OFF: // tv_bt_ssid.setText("正在关闭"); - cl_bt.setBackground(getDrawable(R.drawable.control_background_item)); + mViewDataBinding.clBt.setBackground(getDrawable(R.drawable.control_background_item)); break; case BluetoothAdapter.STATE_OFF: // tv_bt_ssid.setText("已关闭"); - cl_bt.setBackground(getDrawable(R.drawable.control_background_item_dis)); + mViewDataBinding.clBt.setBackground(getDrawable(R.drawable.control_background_item_dis)); break; default: } break; case BluetoothDevice.ACTION_ACL_CONNECTED: // tv_bt_ssid.setText(getBluetoothDeviceName()); - cl_bt.setBackground(getDrawable(R.drawable.control_background_item)); + mViewDataBinding.clBt.setBackground(getDrawable(R.drawable.control_background_item)); break; case BluetoothDevice.ACTION_ACL_DISCONNECTED: // tv_bt_ssid.setText("未连接"); - cl_bt.setBackground(getDrawable(R.drawable.control_background_item_dis)); + mViewDataBinding.clBt.setBackground(getDrawable(R.drawable.control_background_item_dis)); break; default: } @@ -460,9 +407,9 @@ public class ControlActivity extends BaseDataBindingActivity { private void getBattery() { // tv_electricity.setText(getBatteryCapacity() + "%"); if (isBatteryCharging()) { - cl_battery.setBackground(getDrawable(R.drawable.control_background_item)); + mViewDataBinding.clBattery.setBackground(getDrawable(R.drawable.control_background_item)); } else { - cl_battery.setBackground(getDrawable(R.drawable.control_background_item_dis)); + mViewDataBinding.clBattery.setBackground(getDrawable(R.drawable.control_background_item_dis)); } } @@ -528,10 +475,10 @@ public class ControlActivity extends BaseDataBindingActivity { Log.e(TAG, "onReceive: " + action); switch (action) { case Intent.ACTION_POWER_CONNECTED: - cl_battery.setBackground(getDrawable(R.drawable.control_background_item)); + mViewDataBinding.clBattery.setBackground(getDrawable(R.drawable.control_background_item)); break; case Intent.ACTION_POWER_DISCONNECTED: - cl_battery.setBackground(getDrawable(R.drawable.control_background_item_dis)); + mViewDataBinding.clBattery.setBackground(getDrawable(R.drawable.control_background_item_dis)); break; // case Intent.ACTION_BATTERY_LEVEL_CHANGED: // tv_electricity.setText(getBatteryCapacity() + "%"); @@ -547,23 +494,23 @@ public class ControlActivity extends BaseDataBindingActivity { // private void getFlashlight() { // if (isFlashlightAvailable()) { // tv_flashlight_switch.setText("关"); -// cl_flashlight.setBackground(getDrawable(R.drawable.control_background_item_dis)); +// clFlashlight.setBackground(getDrawable(R.drawable.control_background_item_dis)); // } else { // tv_flashlight_switch.setText("不可用"); -// cl_flashlight.setBackground(getDrawable(R.drawable.control_background_item_dis)); +// clFlashlight.setBackground(getDrawable(R.drawable.control_background_item_dis)); // return; // } //// if (isFlashlightEnabled()) { //// tv_flashlight_switch.setText("开"); -//// cl_flashlight.setBackground(getDrawable(R.drawable.control_background_item)); +//// clFlashlight.setBackground(getDrawable(R.drawable.control_background_item)); //// } else { //// tv_flashlight_switch.setText("关"); -//// cl_flashlight.setBackground(getDrawable(R.drawable.control_background_item_dis)); +//// clFlashlight.setBackground(getDrawable(R.drawable.control_background_item_dis)); //// } // // cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); // -// cl_flashlight.setOnClickListener(new View.OnClickListener() { +// clFlashlight.setOnClickListener(new View.OnClickListener() { // @Override // public void onClick(View view) { // if (flashing) { @@ -575,7 +522,7 @@ public class ControlActivity extends BaseDataBindingActivity { // } // flashing = false; // tv_flashlight_switch.setText("关"); -// cl_flashlight.setBackground(getDrawable(R.drawable.control_background_item_dis)); +// clFlashlight.setBackground(getDrawable(R.drawable.control_background_item_dis)); // } else { // try { // String CameraId = cameraManager.getCameraIdList()[0]; @@ -584,7 +531,7 @@ public class ControlActivity extends BaseDataBindingActivity { // e.printStackTrace(); // } // tv_flashlight_switch.setText("开"); -// cl_flashlight.setBackground(getDrawable(R.drawable.control_background_item)); +// clFlashlight.setBackground(getDrawable(R.drawable.control_background_item)); // flashing = true; // } // } @@ -631,23 +578,23 @@ public class ControlActivity extends BaseDataBindingActivity { updateTimeUi(); // if (isFlashlightAvailable()) { // tv_flashlight_switch.setText("关"); -// cl_flashlight.setBackground(mContext.getDrawable(R.drawable.control_background_item_dis)); +// clFlashlight.setBackground(mContext.getDrawable(R.drawable.control_background_item_dis)); // } else { // tv_flashlight_switch.setText("不可用"); -// cl_flashlight.setBackground(mContext.getDrawable(R.drawable.control_background_item_dis)); +// clFlashlight.setBackground(mContext.getDrawable(R.drawable.control_background_item_dis)); // return; // } //// if (isFlashlightEnabled()) { //// tv_flashlight_switch.setText("开"); -//// cl_flashlight.setBackground(getDrawable(R.drawable.control_background_item)); +//// clFlashlight.setBackground(getDrawable(R.drawable.control_background_item)); //// } else { //// tv_flashlight_switch.setText("关"); -//// cl_flashlight.setBackground(getDrawable(R.drawable.control_background_item_dis)); +//// clFlashlight.setBackground(getDrawable(R.drawable.control_background_item_dis)); //// } // // cameraManager = (CameraManager) mContext.getSystemService(Context.CAMERA_SERVICE); // -// cl_flashlight.setOnClickListener(new View.OnClickListener() { +// clFlashlight.setOnClickListener(new View.OnClickListener() { // @Override // public void onClick(View view) { // if (flashing) { @@ -659,7 +606,7 @@ public class ControlActivity extends BaseDataBindingActivity { // } // flashing = false; // tv_flashlight_switch.setText("关"); -// cl_flashlight.setBackground(mContext.getDrawable(R.drawable.control_background_item_dis)); +// clFlashlight.setBackground(mContext.getDrawable(R.drawable.control_background_item_dis)); // } else { // try { // String CameraId = cameraManager.getCameraIdList()[0]; @@ -668,7 +615,7 @@ public class ControlActivity extends BaseDataBindingActivity { // e.printStackTrace(); // } // tv_flashlight_switch.setText("开"); -// cl_flashlight.setBackground(mContext.getDrawable(R.drawable.control_background_item)); +// clFlashlight.setBackground(mContext.getDrawable(R.drawable.control_background_item)); // flashing = true; // } // } @@ -695,15 +642,15 @@ public class ControlActivity extends BaseDataBindingActivity { } // private boolean isFlashlightEnabled() { -// return Settings.Secure.getInt(crv, Settings.Secure.FLASHLIGHT_ENABLED, 0) == 1; +// return Settings.Secure.getInt(getContentResolver(), Settings.Secure.FLASHLIGHT_ENABLED, 0) == 1; // } private void getFontSize() { - float fontScale = Settings.System.getFloat(crv, Settings.System.FONT_SCALE, 0.0f); + float fontScale = Settings.System.getFloat(getContentResolver(), Settings.System.FONT_SCALE, 0.0f); Log.e(TAG, "getHardware: fontScale = " + fontScale); List mEntries = Arrays.asList(getResources().getStringArray(R.array.entries_font_size)); List strEntryValues = Arrays.asList(getResources().getStringArray(R.array.entryvalues_font_size)); - seekBar.setMax(mEntries.size() - 1); + mViewDataBinding.seekBar.setMax(mEntries.size() - 1); String font_size; int index = strEntryValues.indexOf(String.valueOf(fontScale)); if (index == -1) { @@ -712,11 +659,11 @@ public class ControlActivity extends BaseDataBindingActivity { font_size = mEntries.get(index); } // tv_font_size.setText(font_size); - seekBar.setProgress(index); - seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + mViewDataBinding.seekBar.setProgress(index); + mViewDataBinding.seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int i, boolean b) { - Settings.System.putFloat(crv, Settings.System.FONT_SCALE, Float.parseFloat(strEntryValues.get(i))); + Settings.System.putFloat(getContentResolver(), Settings.System.FONT_SCALE, Float.parseFloat(strEntryValues.get(i))); } @Override @@ -735,11 +682,11 @@ public class ControlActivity extends BaseDataBindingActivity { String addr = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE).decodeString(CommonConfig.MAP_ADDRESS_KEY); if (TextUtils.isEmpty(addr) || "nullnull".equals(addr) || "null".equals(addr)) { - tv_location.setText("未能获取到位置信息"); + mViewDataBinding.tvLocation.setText("未能获取到位置信息"); } else { - tv_location.setText(addr); + mViewDataBinding.tvLocation.setText(addr); } - cl_location.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clLocation.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { AmapManager.getInstance().startLocation(); @@ -748,17 +695,17 @@ public class ControlActivity extends BaseDataBindingActivity { } private void getBrightness() { - seekbar_brightness.setMax(255); + mViewDataBinding.seekbarBrightness.setMax(255); //亮度 - int brightness = Settings.System.getInt(crv, Settings.System.SCREEN_BRIGHTNESS, 1); - seekbar_brightness.setProgress(brightness); + int brightness = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, 1); + mViewDataBinding.seekbarBrightness.setProgress(brightness); Log.e(TAG, "getHardware: brightness = " + brightness); int gamma = BrightnessUtils.convertLinearToGamma(brightness, 1, 255); Log.e(TAG, "getHardware: gamma = " + gamma); long percentage = Math.round((((double) gamma / 65535) * 100f)); // tv_brightness.setText(percentage + "%"); Log.e(TAG, "getHardware: percentage = " + percentage); - seekbar_brightness.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + mViewDataBinding.seekbarBrightness.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int i, boolean b) { Log.e(TAG, "onProgressChanged: i = " + i); @@ -788,20 +735,20 @@ public class ControlActivity extends BaseDataBindingActivity { mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); //最大音量 int maxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); - seekbar_sound.setMax(maxVolume); + mViewDataBinding.seekbarSound.setMax(maxVolume); Log.e(TAG, "getHardware: maxVolume = " + maxVolume); //音量 int streamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); - seekbar_sound.setProgress(streamVolume); + mViewDataBinding.seekbarSound.setProgress(streamVolume); Log.e(TAG, "getHardware: streamVolume = " + streamVolume); int currentVolume = (int) (((double) streamVolume / (double) maxVolume) * 100f); Log.e(TAG, "getHardware: currentVolume = " + currentVolume); - tv_sound.setText(currentVolume + "%"); - seekbar_sound.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + mViewDataBinding.tvSound.setText(currentVolume + "%"); + mViewDataBinding.seekbarSound.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int i, boolean b) { int volume = (int) (((double) i / (double) maxVolume) * 100f); - tv_sound.setText(volume + "%"); + mViewDataBinding.tvSound.setText(volume + "%"); mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, i, 0); } @@ -823,4 +770,10 @@ public class ControlActivity extends BaseDataBindingActivity { if (mWifiReceiver != null) unregisterReceiver(mWifiReceiver); if (mTimeUpdateReceiver != null) unregisterReceiver(mTimeUpdateReceiver); } + + public class BtnClick { + public void exit(View view) { + finish(); + } + } } diff --git a/app/src/main/java/com/uiuios/aios/activity/control/ControlViewModel.java b/app/src/main/java/com/uiuios/aios/activity/control/ControlViewModel.java new file mode 100644 index 0000000..4d52e50 --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/control/ControlViewModel.java @@ -0,0 +1,18 @@ +package com.uiuios.aios.activity.control; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.databinding.ActivityControlBinding; + +public class ControlViewModel extends BaseViewModel { + + @Override + public ActivityControlBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/dailyapp/DailyAppActivity.java b/app/src/main/java/com/uiuios/aios/activity/dailyapp/DailyAppActivity.java index b4ac196..3ee48f7 100644 --- a/app/src/main/java/com/uiuios/aios/activity/dailyapp/DailyAppActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/dailyapp/DailyAppActivity.java @@ -2,55 +2,49 @@ package com.uiuios.aios.activity.dailyapp; import android.content.res.Configuration; import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; -import androidx.databinding.DataBindingUtil; import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import com.uiuios.aios.R; import com.uiuios.aios.adapter.DailyAppAdapter; -import com.uiuios.aios.base.BaseDataBindingActivity; +import com.uiuios.aios.base.mvvm.BaseMvvmActivity; import com.uiuios.aios.bean.DailyAppBean; +import com.uiuios.aios.databinding.ActivityDailyappBinding; import com.uiuios.aios.manager.AppStatusManager; import com.uiuios.aios.view.GridSpaceItemDecoration; import java.util.List; -import butterknife.BindView; -import butterknife.ButterKnife; - -public class DailyAppActivity extends BaseDataBindingActivity { +public class DailyAppActivity extends BaseMvvmActivity { private static final String TAG = DailyAppActivity.class.getSimpleName(); private DailyAppAdapter mDailyAppAdapter; - @BindView(R.id.recyclerView) - RecyclerView recyclerView; - @BindView(R.id.iv_back) - ImageView iv_back; - @BindView(R.id.tv_appsize) - TextView tv_appsize; + @Override + protected int getLayoutId() { + return R.layout.activity_dailyapp; + } @Override protected void initDataBinding() { - DataBindingUtil.setContentView(this,R.layout.activity_dailyapp); + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); +// mViewDataBinding.setClick(new BtnClick()); } @Override public void initView() { - ButterKnife.bind(this); mDailyAppAdapter = new DailyAppAdapter(); if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { - recyclerView.setLayoutManager(new GridLayoutManager(this, 5)); - recyclerView.addItemDecoration(new GridSpaceItemDecoration(5, 50, 50)); + mViewDataBinding.recyclerView.setLayoutManager(new GridLayoutManager(this, 5)); + mViewDataBinding.recyclerView.addItemDecoration(new GridSpaceItemDecoration(5, 50, 50)); } else { - recyclerView.setLayoutManager(new GridLayoutManager(this, 3)); - recyclerView.addItemDecoration(new GridSpaceItemDecoration(3, 50, 50)); + mViewDataBinding.recyclerView.setLayoutManager(new GridLayoutManager(this, 3)); + mViewDataBinding.recyclerView.addItemDecoration(new GridSpaceItemDecoration(3, 50, 50)); } - recyclerView.setAdapter(mDailyAppAdapter); - iv_back.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.recyclerView.setAdapter(mDailyAppAdapter); + mViewDataBinding.ivBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { finish(); @@ -62,6 +56,7 @@ public class DailyAppActivity extends BaseDataBindingActivity { public void initData() { List appBeanList = AppStatusManager.getInstance().getPackageList(); mDailyAppAdapter.setDailyAppBeans(appBeanList); - tv_appsize.setText(String.format(getString(R.string.app_size), appBeanList.size())); + mViewDataBinding.tvAppsize.setText(String.format(getString(R.string.app_size), appBeanList.size())); } + } diff --git a/app/src/main/java/com/uiuios/aios/activity/dailyapp/DailyAppViewModel.java b/app/src/main/java/com/uiuios/aios/activity/dailyapp/DailyAppViewModel.java new file mode 100644 index 0000000..3c52777 --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/dailyapp/DailyAppViewModel.java @@ -0,0 +1,18 @@ +package com.uiuios.aios.activity.dailyapp; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.databinding.ActivityDailyappBinding; + +public class DailyAppViewModel extends BaseViewModel { + + @Override + public ActivityDailyappBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/DetailsActivity.java b/app/src/main/java/com/uiuios/aios/activity/details/DetailsActivity.java similarity index 70% rename from app/src/main/java/com/uiuios/aios/activity/DetailsActivity.java rename to app/src/main/java/com/uiuios/aios/activity/details/DetailsActivity.java index 61d6bed..e2e56ca 100644 --- a/app/src/main/java/com/uiuios/aios/activity/DetailsActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/details/DetailsActivity.java @@ -1,93 +1,26 @@ -package com.uiuios.aios.activity; +package com.uiuios.aios.activity.details; 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.view.ViewGroup; import android.view.ViewTreeObserver; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; - -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; -import androidx.databinding.DataBindingUtil; import com.bumptech.glide.Glide; import com.tencent.mmkv.MMKV; import com.uiuios.aios.R; -import com.uiuios.aios.base.BaseDataBindingActivity; -import com.uiuios.aios.bean.BaseResponse; +import com.uiuios.aios.activity.OrderActivity; +import com.uiuios.aios.base.mvvm.BaseMvvmActivity; import com.uiuios.aios.bean.GoodsInfo; -import com.uiuios.aios.bean.RegionInfo; import com.uiuios.aios.config.CommonConfig; import com.uiuios.aios.databinding.ActivityDetailsBinding; -import com.uiuios.aios.network.NetInterfaceManager; -import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX; - -import org.reactivestreams.Publisher; import java.math.BigDecimal; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; -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; -import io.reactivex.rxjava3.core.ObservableEmitter; -import io.reactivex.rxjava3.core.ObservableOnSubscribe; -import io.reactivex.rxjava3.core.ObservableSource; -import io.reactivex.rxjava3.core.Observer; -import io.reactivex.rxjava3.disposables.Disposable; -import io.reactivex.rxjava3.functions.Function; -import io.reactivex.rxjava3.schedulers.Schedulers; -import retrofit2.Call; -import retrofit2.Callback; -import retrofit2.Response; -import retrofit2.Retrofit; -public class DetailsActivity extends BaseDataBindingActivity { - @BindView(R.id.iv_details) - ImageView iv_details; - @BindView(R.id.iv_exit) - ImageView iv_exit; - @BindView(R.id.tv_buying_price) - TextView tv_buying_price; - @BindView(R.id.tv_original_price) - TextView tv_original_price; - @BindView(R.id.tv_stock) - TextView tv_stock; - @BindView(R.id.tv_subsidy) - TextView tv_subsidy; - @BindView(R.id.tv_price) - TextView tv_price; - @BindView(R.id.tv_title) - TextView tv_title; - @BindView(R.id.tv_details) - TextView tv_details; - @BindView(R.id.tv_certified) - TextView tv_certified; - @BindView(R.id.tv_ship) - TextView tv_ship; - @BindView(R.id.tv_insurance) - TextView tv_insurance; - @BindView(R.id.tv_sale) - TextView tv_sale; - @BindView(R.id.tv_type) - TextView tv_type; - @BindView(R.id.ll_buy) - LinearLayout ll_buy; +public class DetailsActivity extends BaseMvvmActivity { private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); - - private ActivityDetailsBinding mBinding; private GoodsInfo mGoodsInfo; @Override @@ -95,9 +28,17 @@ public class DetailsActivity extends BaseDataBindingActivity { return true; } + @Override + protected int getLayoutId() { + return R.layout.activity_details; + } + @Override protected void initDataBinding() { - mBinding = DataBindingUtil.setContentView(this, R.layout.activity_details); + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); +// mViewDataBinding.setClick(new BtnClick()); } /** @@ -111,37 +52,37 @@ public class DetailsActivity extends BaseDataBindingActivity { GoodsInfo goodsInfo = (GoodsInfo) intent.getSerializableExtra("GoodsInfo"); if (goodsInfo == null) return; mGoodsInfo = goodsInfo; - Glide.with(iv_details).load(mGoodsInfo.getDetails_img()).into(iv_details); - ViewTreeObserver observer = iv_details.getViewTreeObserver(); + Glide.with(mViewDataBinding.ivDetails).load(mGoodsInfo.getDetails_img()).into(mViewDataBinding.ivDetails); + ViewTreeObserver observer = mViewDataBinding.ivDetails.getViewTreeObserver(); observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { - ViewGroup.LayoutParams layoutParams = iv_details.getLayoutParams(); - int width = iv_details.getWidth(); + ViewGroup.LayoutParams layoutParams = mViewDataBinding.ivDetails.getLayoutParams(); + int width = mViewDataBinding.ivDetails.getWidth(); layoutParams.height = width; - iv_details.setLayoutParams(layoutParams); + mViewDataBinding.ivDetails.setLayoutParams(layoutParams); } }); - iv_exit.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivExit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { finish(); } }); - tv_stock.setText("库存:" + mGoodsInfo.getStock()); + mViewDataBinding.tvStock.setText("库存:" + mGoodsInfo.getStock()); BigDecimal d = new BigDecimal(mGoodsInfo.getOriginal_price()); BigDecimal d2 = new BigDecimal(mGoodsInfo.getBuying_price()); - tv_subsidy.setText("官方补贴" + d.subtract(d2).toString()); - tv_buying_price.setText("¥" + mGoodsInfo.getBuying_price()); - tv_original_price.setText("原价:" + mGoodsInfo.getOriginal_price() + "元"); - tv_price.setText("抢购:" + mGoodsInfo.getBuying_price() + "元"); - tv_title.setText(mGoodsInfo.getGoods_name()); - tv_details.setText(mGoodsInfo.getGoods_desc()); - tv_certified.setText(mGoodsInfo.getEnsure()); - tv_ship.setText(mGoodsInfo.getDeliver_goods()); - tv_insurance.setText(mGoodsInfo.getInsure()); - tv_sale.setText(mGoodsInfo.getAfter_sales()); - ll_buy.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.tvSubsidy.setText("官方补贴" + d.subtract(d2).toString()); + mViewDataBinding.tvBuyingPrice.setText("¥" + mGoodsInfo.getBuying_price()); + mViewDataBinding.tvOriginalPrice.setText("原价:" + mGoodsInfo.getOriginal_price() + "元"); + mViewDataBinding.tvPrice.setText("抢购:" + mGoodsInfo.getBuying_price() + "元"); + mViewDataBinding.tvTitle.setText(mGoodsInfo.getGoods_name()); + mViewDataBinding.tvDetails.setText(mGoodsInfo.getGoods_desc()); + mViewDataBinding.tvCertified.setText(mGoodsInfo.getEnsure()); + mViewDataBinding.tvShip.setText(mGoodsInfo.getDeliver_goods()); + mViewDataBinding.tvInsurance.setText(mGoodsInfo.getInsure()); + mViewDataBinding.tvSale.setText(mGoodsInfo.getAfter_sales()); + mViewDataBinding.llBuy.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // Uri uri = Uri.parse(goodsInfo.getJump_url()); @@ -229,7 +170,7 @@ public class DetailsActivity extends BaseDataBindingActivity { // }); } }); - tv_type.setText(mGoodsInfo.getType()); + mViewDataBinding.tvType.setText(mGoodsInfo.getType()); } /** diff --git a/app/src/main/java/com/uiuios/aios/activity/details/DetailsViewModel.java b/app/src/main/java/com/uiuios/aios/activity/details/DetailsViewModel.java new file mode 100644 index 0000000..bbb51b1 --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/details/DetailsViewModel.java @@ -0,0 +1,18 @@ +package com.uiuios.aios.activity.details; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.databinding.ActivityDetailsBinding; + +public class DetailsViewModel extends BaseViewModel { + + @Override + public ActivityDetailsBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/dialer/DialerActivity.java b/app/src/main/java/com/uiuios/aios/activity/dialer/DialerActivity.java index 527d312..0db8619 100644 --- a/app/src/main/java/com/uiuios/aios/activity/dialer/DialerActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/dialer/DialerActivity.java @@ -7,72 +7,39 @@ import android.net.Uri; import android.text.TextUtils; import android.view.View; import android.view.WindowManager; -import android.widget.EditText; -import android.widget.ImageView; -import android.widget.TextView; -import androidx.constraintlayout.widget.ConstraintLayout; -import androidx.databinding.DataBindingUtil; - -import com.shehuan.niv.NiceImageView; import com.uiuios.aios.R; import com.uiuios.aios.activity.contact.ContactActivity; -import com.uiuios.aios.base.BaseDataBindingActivity; +import com.uiuios.aios.base.mvvm.BaseMvvmActivity; +import com.uiuios.aios.databinding.ActivityDialerBinding; import java.util.HashMap; -import butterknife.BindView; import butterknife.ButterKnife; -public class DialerActivity extends BaseDataBindingActivity { +public class DialerActivity extends BaseMvvmActivity { - @BindView(R.id.et_phone) - EditText et_phone; - @BindView(R.id.iv_delete) - ImageView iv_delete; - @BindView(R.id.nv_dialer) - NiceImageView nv_dialer; - @BindView(R.id.iv_contact) - ImageView iv_contact; - @BindView(R.id.tv_contact) - TextView tv_contact; - @BindView(R.id.cl_0) - ConstraintLayout cl_0; - @BindView(R.id.cl_1) - ConstraintLayout cl_1; - @BindView(R.id.cl_2) - ConstraintLayout cl_2; - @BindView(R.id.cl_3) - ConstraintLayout cl_3; - @BindView(R.id.cl_4) - ConstraintLayout cl_4; - @BindView(R.id.cl_5) - ConstraintLayout cl_5; - @BindView(R.id.cl_6) - ConstraintLayout cl_6; - @BindView(R.id.cl_7) - ConstraintLayout cl_7; - @BindView(R.id.cl_8) - ConstraintLayout cl_8; - @BindView(R.id.cl_9) - ConstraintLayout cl_9; - @BindView(R.id.cl_11) - ConstraintLayout cl_11; - @BindView(R.id.cl_12) - ConstraintLayout cl_12; private SoundPool soundPool; private HashMap soundMap = new HashMap<>(); + @Override + protected int getLayoutId() { + return R.layout.activity_dialer; + } + @Override protected void initDataBinding() { - DataBindingUtil.setContentView(this,R.layout.activity_dialer); + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); +// mViewDataBinding.setClick(new BtnClick()); } @Override public void initView() { getWindow().addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); - ButterKnife.bind(this); + AudioAttributes attr = new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_GAME) // 设置音效使用场景 .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC).build(); // 设置音效的类型 soundPool = new SoundPool.Builder().setAudioAttributes(attr) // 设置音效池的属性 @@ -96,107 +63,107 @@ public class DialerActivity extends BaseDataBindingActivity { @Override public void initData() { - cl_0.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.cl0.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { addNumber("0", 0); } }); - cl_1.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.cl1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { addNumber("1", 1); } }); - cl_2.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.cl2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { addNumber("2", 2); } }); - cl_3.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.cl3.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { addNumber("3", 3); } }); - cl_4.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.cl4.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { addNumber("4", 4); } }); - cl_5.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.cl5.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { addNumber("5", 5); } }); - cl_6.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.cl6.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { addNumber("6", 6); } }); - cl_7.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.cl7.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { addNumber("7", 7); } }); - cl_8.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.cl8.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { addNumber("8", 8); } }); - cl_9.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.cl9.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { addNumber("9", 9); } }); - cl_11.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.cl11.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { addNumber("*", 10); } }); - cl_12.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.cl12.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { addNumber("#", 11); } }); - nv_dialer.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.nvDialer.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - String phone = et_phone.getText().toString(); + String phone = mViewDataBinding.etPhone.getText().toString(); Intent dialIntent = new Intent(Intent.ACTION_CALL); Uri data = Uri.parse("tel:" + phone); dialIntent.setData(data); startActivity(dialIntent); } }); - iv_delete.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivDelete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - String tmp = et_phone.getText().toString(); + String tmp = mViewDataBinding.etPhone.getText().toString(); if (TextUtils.isEmpty(tmp)) { - et_phone.setText(""); + mViewDataBinding.etPhone.setText(""); } else { - et_phone.setText(tmp.substring(0, tmp.length() - 1)); + mViewDataBinding.etPhone.setText(tmp.substring(0, tmp.length() - 1)); } } }); - iv_contact.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivContact.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(DialerActivity.this, ContactActivity.class); startActivity(intent); } }); - tv_contact.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.tvContact.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(DialerActivity.this, ContactActivity.class); @@ -207,13 +174,14 @@ public class DialerActivity extends BaseDataBindingActivity { private void addNumber(String number, int position) { - String tmp = et_phone.getText().toString(); + String tmp = mViewDataBinding.etPhone.getText().toString(); if (TextUtils.isEmpty(tmp)) { - et_phone.setText(number); + mViewDataBinding.etPhone.setText(number); } else { - et_phone.setText(tmp + number); + mViewDataBinding.etPhone.setText(tmp + number); } soundPool.play(soundMap.get(position), 1, 1, 0, 0, 1); } + } diff --git a/app/src/main/java/com/uiuios/aios/activity/dialer/DialerViewModel.java b/app/src/main/java/com/uiuios/aios/activity/dialer/DialerViewModel.java new file mode 100644 index 0000000..ea5c7e0 --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/dialer/DialerViewModel.java @@ -0,0 +1,18 @@ +package com.uiuios.aios.activity.dialer; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.databinding.ActivityDialerBinding; + +public class DialerViewModel extends BaseViewModel { + + @Override + public ActivityDialerBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/EmergencyActivity.java b/app/src/main/java/com/uiuios/aios/activity/emergency/EmergencyActivity.java similarity index 91% rename from app/src/main/java/com/uiuios/aios/activity/EmergencyActivity.java rename to app/src/main/java/com/uiuios/aios/activity/emergency/EmergencyActivity.java index aeab661..4d6936a 100644 --- a/app/src/main/java/com/uiuios/aios/activity/EmergencyActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/emergency/EmergencyActivity.java @@ -1,38 +1,28 @@ -package com.uiuios.aios.activity; - -import androidx.appcompat.app.AppCompatActivity; +package com.uiuios.aios.activity.emergency; import android.content.ComponentName; import android.content.Intent; import android.net.Uri; import android.os.Bundle; -import android.os.Handler; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.widget.ImageView; import android.widget.TextView; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.hjq.toast.Toaster; import com.tencent.mmkv.MMKV; import com.uiuios.aios.R; +import com.uiuios.aios.base.mvvm.BaseMvvmActivity; import com.uiuios.aios.bean.BaseResponse; -import com.uiuios.aios.bean.Contact; import com.uiuios.aios.config.CommonConfig; -import com.uiuios.aios.disklrucache.CacheHelper; +import com.uiuios.aios.databinding.ActivityEmergencyBinding; import com.uiuios.aios.manager.AmapManager; import com.uiuios.aios.network.NetInterfaceManager; -import com.uiuios.aios.network.UrlAddress; import com.uiuios.aios.receiver.BootReceiver; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; import butterknife.BindView; import butterknife.ButterKnife; @@ -43,17 +33,11 @@ import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; import io.reactivex.rxjava3.schedulers.Schedulers; -public class EmergencyActivity extends AppCompatActivity { +public class EmergencyActivity extends BaseMvvmActivity { private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); - @BindView(R.id.tv_countdown) - TextView tv_countdown; - @BindView(R.id.iv_finish) - ImageView iv_finish; - - private Disposable subscribe; private String TAG = EmergencyActivity.class.getSimpleName(); private boolean needDial = false; @@ -62,12 +46,21 @@ public class EmergencyActivity extends AppCompatActivity { // private CacheHelper mCacheHelper; @Override - protected void onCreate(Bundle savedInstanceState) { - Log.e(TAG, "onCreate: "); - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_emergency); + protected int getLayoutId() { + return R.layout.activity_emergency; + } + + @Override + protected void initDataBinding() { + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); +// mViewDataBinding.setClick(new BtnClick()); + } + + @Override + protected void initView() { // mCacheHelper = new CacheHelper(this); - ButterKnife.bind(this); //发送紧急广播 Intent bootIntent = new Intent(BootReceiver.SOS); @@ -107,7 +100,7 @@ public class EmergencyActivity extends AppCompatActivity { .subscribe(aLong -> { Log.e("TAG", "倒计时:" + aLong); if (aLong < time && !subscribe.isDisposed()) { - tv_countdown.setText("倒计时(" + (time - aLong - 1) + ")秒"); + mViewDataBinding.tvCountdown.setText("倒计时(" + (time - aLong - 1) + ")秒"); Log.e(TAG, "accept: " + (time - aLong - 1)); } else { String longitude = mMMKV.decodeString(CommonConfig.MAP_LONGITUDE_KEY, ""); @@ -154,7 +147,7 @@ public class EmergencyActivity extends AppCompatActivity { finish(); } }); - iv_finish.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivFinish.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -177,6 +170,11 @@ public class EmergencyActivity extends AppCompatActivity { //// mStatusBarManager.disable(StatusBarManager.DISABLE_HOME);//隐藏home键 } + @Override + protected void initData() { + + } + @Override protected void onStart() { super.onStart(); diff --git a/app/src/main/java/com/uiuios/aios/activity/emergency/EmergencyViewModel.java b/app/src/main/java/com/uiuios/aios/activity/emergency/EmergencyViewModel.java new file mode 100644 index 0000000..f74ad53 --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/emergency/EmergencyViewModel.java @@ -0,0 +1,18 @@ +package com.uiuios.aios.activity.emergency; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.databinding.ActivityEmergencyBinding; + +public class EmergencyViewModel extends BaseViewModel { + + @Override + public ActivityEmergencyBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/InfoListActivity.java b/app/src/main/java/com/uiuios/aios/activity/infolist/InfoListActivity.java similarity index 74% rename from app/src/main/java/com/uiuios/aios/activity/InfoListActivity.java rename to app/src/main/java/com/uiuios/aios/activity/infolist/InfoListActivity.java index 28cc641..8e14198 100644 --- a/app/src/main/java/com/uiuios/aios/activity/InfoListActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/infolist/InfoListActivity.java @@ -1,4 +1,4 @@ -package com.uiuios.aios.activity; +package com.uiuios.aios.activity.infolist; import android.util.Log; import android.view.View; @@ -13,9 +13,11 @@ 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; @@ -27,28 +29,28 @@ import io.reactivex.rxjava3.annotations.NonNull; import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; -public class InfoListActivity extends BaseDataBindingActivity { - @BindView(R.id.iv_back) - ImageView iv_back; - @BindView(R.id.iv1) - ImageView iv1; - @BindView(R.id.recyclerView) - RecyclerView recyclerView; - +public class InfoListActivity extends BaseMvvmActivity { private ArticleAdapter mArticleAdapter; + @Override + protected int getLayoutId() { + return R.layout.activity_info_list; + } + @Override protected void initDataBinding() { - DataBindingUtil.setContentView(this,R.layout.activity_info_list); + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); +// mViewDataBinding.setClick(new BtnClick()); } @Override public void initView() { - ButterKnife.bind(this); mArticleAdapter = new ArticleAdapter(); - recyclerView.setLayoutManager(new LinearLayoutManager(this)); - recyclerView.setAdapter(mArticleAdapter); - iv_back.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.recyclerView.setLayoutManager(new LinearLayoutManager(this)); + mViewDataBinding.recyclerView.setAdapter(mArticleAdapter); + mViewDataBinding.ivBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { finish(); @@ -73,10 +75,10 @@ public class InfoListActivity extends BaseDataBindingActivity { List articleInfoList = articleList.getData(); if (articleInfoList != null && articleInfoList.size() != 0) { articleInfoList.sort((o1, o2) -> Integer.compare(o2.getWeight(), o1.getWeight())); - iv1.setVisibility(android.view.View.GONE); + mViewDataBinding.iv1.setVisibility(android.view.View.GONE); mArticleAdapter.setArticleBeanList(articleInfoList); } else { - iv1.setVisibility(android.view.View.VISIBLE); + mViewDataBinding.iv1.setVisibility(android.view.View.VISIBLE); } } @@ -91,4 +93,5 @@ public class InfoListActivity extends BaseDataBindingActivity { } }); } + } diff --git a/app/src/main/java/com/uiuios/aios/activity/infolist/InfoListViewModel.java b/app/src/main/java/com/uiuios/aios/activity/infolist/InfoListViewModel.java new file mode 100644 index 0000000..48a84b9 --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/infolist/InfoListViewModel.java @@ -0,0 +1,18 @@ +package com.uiuios.aios.activity.infolist; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.databinding.ActivityInfoListBinding; + +public class InfoListViewModel extends BaseViewModel { + + @Override + public ActivityInfoListBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} 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 afee0ee..9b58d7d 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 @@ -11,6 +11,9 @@ import android.content.pm.PackageManager; import android.content.pm.ShortcutManager; import android.content.res.Configuration; import android.graphics.Color; +import android.hardware.camera2.CameraAccessException; +import android.hardware.camera2.CameraCharacteristics; +import android.hardware.camera2.CameraManager; import android.os.Build; import android.os.Bundle; import android.os.IBinder; @@ -22,6 +25,7 @@ import android.view.KeyEvent; import android.view.View; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; @@ -35,36 +39,44 @@ import com.hjq.permissions.OnPermissionCallback; import com.hjq.permissions.Permission; import com.hjq.permissions.XXPermissions; import com.hjq.toast.Toaster; +import com.jeremyliao.liveeventbus.LiveEventBus; +import com.tencent.mmkv.MMKV; import com.uiuios.aios.BuildConfig; import com.uiuios.aios.R; -import com.uiuios.aios.activity.EmergencyActivity; import com.uiuios.aios.activity.phone.PhoneActivity; import com.uiuios.aios.base.BaseFragmentPagerAdapter; import com.uiuios.aios.base.mvvm.BaseMvvmActivity; import com.uiuios.aios.bean.AlarmItem; import com.uiuios.aios.bean.DesktopIcon; +import com.uiuios.aios.bean.MapBean; import com.uiuios.aios.config.CommonConfig; import com.uiuios.aios.databinding.PhoneActivityMainBinding; import com.uiuios.aios.fragment.app.AppListFragment; -import com.uiuios.aios.fragment.control.ControlFragment; import com.uiuios.aios.fragment.contact.ContactFragment; import com.uiuios.aios.fragment.home.HomeFragment; +import com.uiuios.aios.fragment.settings.SettingsFragment; import com.uiuios.aios.manager.AmapManager; import com.uiuios.aios.manager.RemoteManager; import com.uiuios.aios.service.NotificationService; import com.uiuios.aios.utils.ApkUtils; import com.uiuios.aios.utils.AppUsedTimeUtils; +import com.uiuios.aios.utils.DayUtils; import com.uiuios.aios.view.ScaleCircleNavigator; import net.lucode.hackware.magicindicator.ViewPagerHelper; import java.lang.reflect.Type; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Date; import java.util.List; -public class MainActivity extends BaseMvvmActivity implements RemoteManager.ConnectedListener { +public class MainActivity extends BaseMvvmActivity implements RemoteManager.ConnectedListener, NetworkUtils.OnNetworkStatusChangedListener { private static final String TAG = MainActivity.class.getSimpleName(); + + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + private FragmentManager mFragmentManager; private FragmentTransaction mFragmentTransaction; @@ -72,15 +84,29 @@ public class MainActivity extends BaseMvvmActivity mFragments; - private ControlFragment mControlFragment; + // private ControlFragment mControlFragment; + private SettingsFragment mSettingsFragment; private HomeFragment mHomeFragment; // private CustomFragment mCustomFragment; - private ContactFragment mSecondFragment; + private ContactFragment mContactFragment; private boolean is_twoscreen = false; private int appListIndex = 3; private int defaultCurrent = 2; + private CameraManager cameraManager; + + @Override + public void onDisconnected() { + Log.e(TAG, "onDisconnected: "); + } + + @Override + public void onConnected(NetworkUtils.NetworkType networkType) { + Log.e(TAG, "onConnected: " + networkType); + initAmap(); + } + @Override public void onRemoteConnected() { setDefaultDesktop(); @@ -121,6 +147,7 @@ public class MainActivity extends BaseMvvmActivity(desktopIcons.subList(x, i))); mFragments.add(appListFragment); x = i; - } else if (i != 0 &&i == desktopIcons.size()) { + } else if (i != 0 && i == desktopIcons.size()) { AppListFragment appListFragment = new AppListFragment(); appListFragment.setAppList(new ArrayList<>(desktopIcons.subList(x, i))); mFragments.add(appListFragment); @@ -177,8 +205,8 @@ public class MainActivity extends BaseMvvmActivity(desktopIcons.subList(x, i))); mFragments.add(appListFragment); x = i; - } else if (i != 0 &&i == desktopIcons.size()) { + } else if (i != 0 && i == desktopIcons.size()) { AppListFragment appListFragment = new AppListFragment(); appListFragment.setAppList(new ArrayList<>(desktopIcons.subList(x, i))); mFragments.add(appListFragment); @@ -247,6 +275,28 @@ public class MainActivity extends BaseMvvmActivity() { + @Override + public void onChanged(@Nullable MapBean mapBean) { + mMMKV.encode(CommonConfig.MANUALLY_SELECT_LOCATION_DISTRICT, mapBean.getDistrict()); + mMMKV.encode(CommonConfig.MANUALLY_SELECT_LOCATION_TUDE, mapBean.getLongitude() + "," + mapBean.getLatitude()); +// mViewDataBinding.tvLocation.setText(mapBean.getDistrict()); + mViewModel.getWeather(mapBean.getLongitude() + "," + mapBean.getLatitude()); + } + }); + } else { + String district = mMMKV.decodeString(CommonConfig.MANUALLY_SELECT_LOCATION_DISTRICT, CommonConfig.DEFAULT_LOCATION_DISTRICT); +// mViewDataBinding.tvLocation.setText(district); + mViewModel.getWeather(tude); + } } private ServiceConnection mAlarmServiceConnection; @@ -312,7 +362,7 @@ public class MainActivity extends BaseMvvmActivity(applicationInfoList.subList(x, i))); fragmentList.add(appListFragment); x = i; - } else if (i != 0 &&i == applicationInfoList.size()) { + } else if (i != 0 && i == applicationInfoList.size()) { Log.e(TAG, "addData: i == size"); AppListFragment appListFragment = new AppListFragment(); appListFragment.setAppList(new ArrayList<>(applicationInfoList.subList(x, i))); @@ -361,7 +411,6 @@ public class MainActivity extends BaseMvvmActivity mNowBaseBeanData = new MutableLiveData<>(); + + public MutableLiveData getNowBaseBeanData() { + return mNowBaseBeanData; + } + + public void getWeatherNow(String location) { + Log.e(TAG, "getWeatherNow: " + location); + /** + * 实况天气数据 + * @param location 所查询的地区,可通过该地区名称、ID、IP和经纬度进行查询经纬度格式:经度,纬度 + * (英文,分隔,十进制格式,北纬东经为正,南纬西经为负) + * @param lang (选填)多语言,可以不使用该参数,默认为简体中文 + * @param unit (选填)单位选择,公制(m)或英制(i),默认为公制单位 + * @param listener 网络访问结果回调 + */ + QWeather.getWeatherNow(getCtx(), location, Lang.ZH_HANS, Unit.METRIC, new QWeather.OnResultWeatherNowListener() { + @Override + public void onError(Throwable e) { + Log.e("getWeatherNow", "onError: " + e); + } + + @Override + public void onSuccess(WeatherNowBean weatherBean) { + Log.d("getWeatherNow", "onSuccess: " + new Gson().toJson(weatherBean)); + //先判断返回的status是否正确,当status正确时获取数据,若status不正确,可查看status对应的Code值找到原因 + if (Code.OK == weatherBean.getCode()) { + WeatherNowBean.NowBaseBean now = weatherBean.getNow(); + LiveEventBus + .get("some_key1") + .post(now); + mNowBaseBeanData.postValue(now); + Log.d("getWeatherNow", "onSuccess: now " + new Gson().toJson(now)); + } else { + //在此查看返回数据失败的原因 + Code code = weatherBean.getCode(); + Log.d("getWeatherNow", "failed code: " + code); + } + } + }); + } + + private MutableLiveData mHourlyBeanData = new MutableLiveData<>(); + + public MutableLiveData getHourlyBeanData() { + return mHourlyBeanData; + } + + public void getWeather24Hourly(String location) { + QWeather.getWeather24Hourly(getCtx(), location, new QWeather.OnResultWeatherHourlyListener() { + @Override + public void onError(Throwable throwable) { + Log.e("getWeather24Hourly", "onError: " + throwable); + } + + @Override + public void onSuccess(WeatherHourlyBean weatherHourlyBean) { + Log.d("getWeather24Hourly", "onSuccess: " + new Gson().toJson(weatherHourlyBean)); + if (Code.OK == weatherHourlyBean.getCode()) { + List hourly = weatherHourlyBean.getHourly(); + if (hourly != null && hourly.size() != 0) { + WeatherHourlyBean.HourlyBean now = hourly.get(0); + mHourlyBeanData.postValue(now); + LiveEventBus + .get("some_key2") + .post(now); + } + } else { + //在此查看返回数据失败的原因 + Code code = weatherHourlyBean.getCode(); + Log.e("getWeather24Hourly", "failed code: " + code); + } + } + }); + } + + private MutableLiveData DailyBeanData = new MutableLiveData<>(); + + public MutableLiveData getDailyBeanData() { + return DailyBeanData; + } + + public void getWeather7D(String location) { + QWeather.getWeather7D(getCtx(), location, new QWeather.OnResultWeatherDailyListener() { + @Override + public void onError(Throwable throwable) { + Log.e("getWeather7D", "onError: " + throwable.getMessage()); + + } + + @Override + public void onSuccess(WeatherDailyBean weatherDailyBean) { + String jsonString = new Gson().toJson(weatherDailyBean); + Log.d("getWeather7D", "onSuccess: " + jsonString); + mMMKV.encode(CommonConfig.WEATHER_DAILY_KEY, jsonString); + List dailyBeans = weatherDailyBean.getDaily(); + if (dailyBeans != null && dailyBeans.size() != 0) { + WeatherDailyBean.DailyBean dailyBean = weatherDailyBean.getDaily().get(0); + DailyBeanData.postValue(dailyBean); + LiveEventBus + .get("some_key3") + .post(dailyBean); + } + } + }); + } + + + private MutableLiveData mSnInfoData = new MutableLiveData<>(); public MutableLiveData getSnInfoData() { @@ -88,6 +221,7 @@ public class MainViewModel extends BaseViewModel> mDesktopIconData = new MutableLiveData<>(); public MutableLiveData> getDesktopIconData() { diff --git a/app/src/main/java/com/uiuios/aios/activity/main/OldMainActivity.java b/app/src/main/java/com/uiuios/aios/activity/main/deprecated/OldMainActivity.java similarity index 89% rename from app/src/main/java/com/uiuios/aios/activity/main/OldMainActivity.java rename to app/src/main/java/com/uiuios/aios/activity/main/deprecated/OldMainActivity.java index 16432b9..15f1066 100644 --- a/app/src/main/java/com/uiuios/aios/activity/main/OldMainActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/main/deprecated/OldMainActivity.java @@ -1,4 +1,4 @@ -package com.uiuios.aios.activity.main; +package com.uiuios.aios.activity.main.deprecated; import android.content.Intent; import android.os.Bundle; @@ -8,7 +8,9 @@ import androidx.annotation.Nullable; import androidx.databinding.DataBindingUtil; import com.uiuios.aios.R; +import com.uiuios.aios.activity.main.MainActivity; +@Deprecated public class OldMainActivity extends MainActivity { private static final String TAG = OldMainActivity.class.getSimpleName(); diff --git a/app/src/main/java/com/uiuios/aios/activity/main/PhoneMainActivity.java b/app/src/main/java/com/uiuios/aios/activity/main/deprecated/PhoneMainActivity.java similarity index 89% rename from app/src/main/java/com/uiuios/aios/activity/main/PhoneMainActivity.java rename to app/src/main/java/com/uiuios/aios/activity/main/deprecated/PhoneMainActivity.java index 9c6eed9..5c982be 100644 --- a/app/src/main/java/com/uiuios/aios/activity/main/PhoneMainActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/main/deprecated/PhoneMainActivity.java @@ -1,4 +1,4 @@ -package com.uiuios.aios.activity.main; +package com.uiuios.aios.activity.main.deprecated; import android.content.Intent; import android.view.View; @@ -6,10 +6,12 @@ import android.view.View; import androidx.databinding.DataBindingUtil; import com.uiuios.aios.R; -import com.uiuios.aios.activity.EmergencyActivity; +import com.uiuios.aios.activity.emergency.EmergencyActivity; +import com.uiuios.aios.activity.main.MainActivity; import com.uiuios.aios.databinding.PhoneActivityMainBinding; import com.uiuios.aios.utils.ApkUtils; +@Deprecated public class PhoneMainActivity extends MainActivity { private static final String TAG = PhoneMainActivity.class.getSimpleName(); diff --git a/app/src/main/java/com/uiuios/aios/activity/QuickAppActivity.java b/app/src/main/java/com/uiuios/aios/activity/quickapp/QuickAppActivity.java similarity index 69% rename from app/src/main/java/com/uiuios/aios/activity/QuickAppActivity.java rename to app/src/main/java/com/uiuios/aios/activity/quickapp/QuickAppActivity.java index 90fdc04..bffacb9 100644 --- a/app/src/main/java/com/uiuios/aios/activity/QuickAppActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/quickapp/QuickAppActivity.java @@ -1,28 +1,24 @@ -package com.uiuios.aios.activity; +package com.uiuios.aios.activity.quickapp; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.res.Configuration; -import androidx.databinding.DataBindingUtil; import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import com.uiuios.aios.BuildConfig; import com.uiuios.aios.R; import com.uiuios.aios.adapter.AppSelectedAdapter; -import com.uiuios.aios.base.BaseDataBindingActivity; +import com.uiuios.aios.base.mvvm.BaseMvvmActivity; import com.uiuios.aios.bean.AppSelectBean; +import com.uiuios.aios.databinding.ActivityQuickAppBinding; import com.uiuios.aios.view.GridSpaceItemDecoration; import java.util.ArrayList; import java.util.List; -import butterknife.BindView; -import butterknife.ButterKnife; - -public class QuickAppActivity extends BaseDataBindingActivity { +public class QuickAppActivity extends BaseMvvmActivity { private static final String TAG = QuickAppActivity.class.getSimpleName(); public static final String QUICK_APP_KEY = "QuickAppPackageKey"; @@ -31,26 +27,30 @@ public class QuickAppActivity extends BaseDataBindingActivity { private AppSelectedAdapter mAppSelectedAdapter; - @BindView(R.id.rv_goods) - RecyclerView recyclerView; + @Override + protected int getLayoutId() { + return R.layout.activity_quick_app; + } @Override protected void initDataBinding() { - DataBindingUtil.setContentView(this,R.layout.activity_quick_app); + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); +// mViewDataBinding.setClick(new BtnClick()); } @Override public void initView() { - ButterKnife.bind(this); mAppSelectedAdapter = new AppSelectedAdapter(); if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { - recyclerView.setLayoutManager(new GridLayoutManager(this, 3)); - recyclerView.addItemDecoration(new GridSpaceItemDecoration(3,50,50)); + mViewDataBinding.rvApps.setLayoutManager(new GridLayoutManager(this, 3)); + mViewDataBinding.rvApps.addItemDecoration(new GridSpaceItemDecoration(3, 50, 50)); } else { - recyclerView.setLayoutManager(new GridLayoutManager(this, 2)); - recyclerView.addItemDecoration(new GridSpaceItemDecoration(2,50,50)); + mViewDataBinding.rvApps.setLayoutManager(new GridLayoutManager(this, 2)); + mViewDataBinding.rvApps.addItemDecoration(new GridSpaceItemDecoration(2, 50, 50)); } - recyclerView.setAdapter(mAppSelectedAdapter); + mViewDataBinding.rvApps.setAdapter(mAppSelectedAdapter); } @Override @@ -76,4 +76,5 @@ public class QuickAppActivity extends BaseDataBindingActivity { } return appSelectBeanList; } + } diff --git a/app/src/main/java/com/uiuios/aios/activity/quickapp/QuickAppViewModel.java b/app/src/main/java/com/uiuios/aios/activity/quickapp/QuickAppViewModel.java new file mode 100644 index 0000000..dea5b73 --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/quickapp/QuickAppViewModel.java @@ -0,0 +1,18 @@ +package com.uiuios.aios.activity.quickapp; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.databinding.ActivityQuickAppBinding; + +public class QuickAppViewModel extends BaseViewModel { + + @Override + public ActivityQuickAppBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/records/RecordsActivity.java b/app/src/main/java/com/uiuios/aios/activity/records/RecordsActivity.java index e05c233..efb10a1 100644 --- a/app/src/main/java/com/uiuios/aios/activity/records/RecordsActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/records/RecordsActivity.java @@ -7,73 +7,72 @@ import android.os.Bundle; import android.provider.CallLog; import android.util.Log; import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; -import com.shehuan.niv.NiceImageView; import com.uiuios.aios.R; import com.uiuios.aios.activity.dialer.DialerActivity; import com.uiuios.aios.adapter.CallRecordAdapter; +import com.uiuios.aios.base.mvvm.BaseMvvmActivity; import com.uiuios.aios.bean.RecordsInfo; +import com.uiuios.aios.databinding.ActivityRecordsBinding; import com.uiuios.aios.dialog.DeleteDialog; import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX; import java.util.ArrayList; import java.util.List; -import butterknife.BindView; -import butterknife.ButterKnife; - -public class RecordsActivity extends AppCompatActivity { +public class RecordsActivity extends BaseMvvmActivity { private static final String TAG = RecordsActivity.class.getSimpleName(); - @BindView(R.id.recyclerView) - RecyclerView recyclerView; - @BindView(R.id.iv_cancel) - ImageView iv_cancel; - @BindView(R.id.iv_clear) - ImageView iv_clear; - @BindView(R.id.nv_dialer) - NiceImageView nv_dialer; - @BindView(R.id.tv_nodata) - TextView tv_nodata; - private CallRecordAdapter mCallRecordAdapter; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.activity_records); + + } + + @Override + protected int getLayoutId() { + return R.layout.activity_records; + } + + @Override + protected void initDataBinding() { + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); +// mViewDataBinding.setClick(new BtnClick()); + } + + @Override + protected void initView() { UltimateBarX.statusBarOnly(this) .colorRes(R.color.default_blue) .fitWindow(true) .apply(); - ButterKnife.bind(this); Log.e(TAG, "initData: " + dataList); mCallRecordAdapter = new CallRecordAdapter(); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(RecordsActivity.this); linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); - recyclerView.setLayoutManager(linearLayoutManager); - recyclerView.setAdapter(mCallRecordAdapter); + mViewDataBinding.recyclerView.setLayoutManager(linearLayoutManager); + mViewDataBinding.recyclerView.setAdapter(mCallRecordAdapter); - iv_cancel.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivCancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { finish(); } }); - nv_dialer.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.nvDialer.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { startActivity(new Intent(RecordsActivity.this, DialerActivity.class)); } }); - iv_clear.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivClear.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { showDialog(); @@ -81,6 +80,11 @@ public class RecordsActivity extends AppCompatActivity { }); } + @Override + protected void initData() { + + } + private void showDialog() { DeleteDialog dialog = new DeleteDialog(this); dialog.setTitle("提醒") @@ -116,11 +120,11 @@ public class RecordsActivity extends AppCompatActivity { private void getData() { dataList = getDataList(); if (dataList.size() == 0) { - tv_nodata.setVisibility(View.VISIBLE); - recyclerView.setVisibility(View.GONE); + mViewDataBinding.tvNodata.setVisibility(View.VISIBLE); + mViewDataBinding.recyclerView.setVisibility(View.GONE); } else { - tv_nodata.setVisibility(View.GONE); - recyclerView.setVisibility(View.VISIBLE); + mViewDataBinding.tvNodata.setVisibility(View.GONE); + mViewDataBinding.recyclerView.setVisibility(View.VISIBLE); } mCallRecordAdapter.setRecordsInfoList(dataList); } diff --git a/app/src/main/java/com/uiuios/aios/activity/records/RecordsViewModel.java b/app/src/main/java/com/uiuios/aios/activity/records/RecordsViewModel.java new file mode 100644 index 0000000..9af7d5b --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/records/RecordsViewModel.java @@ -0,0 +1,18 @@ +package com.uiuios.aios.activity.records; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.databinding.ActivityRecordsBinding; + +public class RecordsViewModel extends BaseViewModel { + + @Override + public ActivityRecordsBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/ScreenLockActivity.java b/app/src/main/java/com/uiuios/aios/activity/screenlock/ScreenLockActivity.java similarity index 58% rename from app/src/main/java/com/uiuios/aios/activity/ScreenLockActivity.java rename to app/src/main/java/com/uiuios/aios/activity/screenlock/ScreenLockActivity.java index 3f9ba75..1ca2dbd 100644 --- a/app/src/main/java/com/uiuios/aios/activity/ScreenLockActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/screenlock/ScreenLockActivity.java @@ -1,4 +1,4 @@ -package com.uiuios.aios.activity; +package com.uiuios.aios.activity.screenlock; import android.content.Context; import android.media.AudioAttributes; @@ -11,63 +11,22 @@ import android.util.Log; import android.view.View; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; import androidx.annotation.Nullable; -import androidx.databinding.DataBindingUtil; import com.tuo.customview.VerificationCodeView; import com.uiuios.aios.R; -import com.uiuios.aios.base.BaseDataBindingActivity; +import com.uiuios.aios.base.mvvm.BaseMvvmActivity; import com.uiuios.aios.config.CommonConfig; +import com.uiuios.aios.databinding.ActivityScreenLockBinding; import com.uiuios.aios.manager.RemoteManager; -import butterknife.BindView; import butterknife.ButterKnife; -public class ScreenLockActivity extends BaseDataBindingActivity { - +public class ScreenLockActivity extends BaseMvvmActivity { private static final String TAG = ScreenLockActivity.class.getSimpleName(); - @BindView(R.id.iv_back) - ImageView iv_back; - @BindView(R.id.bt_0) - TextView bt0; - @BindView(R.id.bt_1) - TextView bt1; - @BindView(R.id.bt_2) - TextView bt2; - @BindView(R.id.bt_3) - TextView bt3; - @BindView(R.id.bt_4) - TextView bt4; - @BindView(R.id.bt_5) - TextView bt5; - @BindView(R.id.bt_6) - TextView bt6; - @BindView(R.id.bt_7) - TextView bt7; - @BindView(R.id.bt_8) - TextView bt8; - @BindView(R.id.bt_9) - TextView bt9; - @BindView(R.id.bt_del) - TextView bt_del; - @BindView(R.id.bt_confirm) - TextView bt_confirm; - - @BindView(R.id.textView) - TextView textView; - @BindView(R.id.tv_hint) - TextView tv_hint; - @BindView(R.id.ll_keyboard) - LinearLayout ll_keyboard; - @BindView(R.id.icv) - VerificationCodeView codeView; - private SoundPool soundPool; private int soundId; @@ -86,23 +45,30 @@ public class ScreenLockActivity extends BaseDataBindingActivity { soundId = soundPool.load(this, R.raw.click, 1); } + @Override + protected int getLayoutId() { + return R.layout.activity_screen_lock; + } + @Override protected void initDataBinding() { - DataBindingUtil.setContentView(this,R.layout.activity_screen_lock); + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); +// mViewDataBinding.setClick(new BtnClick()); } @Override public void initView() { - ButterKnife.bind(this); InputMethodManager imm = (InputMethodManager) ScreenLockActivity.this.getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(codeView.getWindowToken(), 0); - codeView.getEditText().setOnClickListener(new View.OnClickListener() { + imm.hideSoftInputFromWindow(mViewDataBinding.codeView.getWindowToken(), 0); + mViewDataBinding.codeView.getEditText().setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - ll_keyboard.setVisibility(View.VISIBLE); + mViewDataBinding.llKeyboard.setVisibility(View.VISIBLE); } }); - codeView.setInputCompleteListener(new VerificationCodeView.InputCompleteListener() { + mViewDataBinding.codeView.setInputCompleteListener(new VerificationCodeView.InputCompleteListener() { @Override public void inputComplete() { checkPasswd(); @@ -114,39 +80,39 @@ public class ScreenLockActivity extends BaseDataBindingActivity { } }); - bt_del.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.btDel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - tv_hint.setText(""); - codeView.clearInputContent(); + mViewDataBinding.tvHint.setText(""); + mViewDataBinding.codeView.clearInputContent(); } }); - bt_confirm.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.btConfirm.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { checkPasswd(); } }); - iv_back.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { finish(); } }); - bt0.setOnClickListener(view1 -> add(codeView, "0")); - bt1.setOnClickListener(view1 -> add(codeView, "1")); - bt2.setOnClickListener(view1 -> add(codeView, "2")); - bt3.setOnClickListener(view1 -> add(codeView, "3")); - bt4.setOnClickListener(view1 -> add(codeView, "4")); - bt5.setOnClickListener(view1 -> add(codeView, "5")); - bt6.setOnClickListener(view1 -> add(codeView, "6")); - bt7.setOnClickListener(view1 -> add(codeView, "7")); - bt8.setOnClickListener(view1 -> add(codeView, "8")); - bt9.setOnClickListener(view1 -> add(codeView, "9")); + mViewDataBinding.bt0.setOnClickListener(view1 -> add(mViewDataBinding.codeView, "0")); + mViewDataBinding.bt1.setOnClickListener(view1 -> add(mViewDataBinding.codeView, "1")); + mViewDataBinding.bt2.setOnClickListener(view1 -> add(mViewDataBinding.codeView, "2")); + mViewDataBinding.bt3.setOnClickListener(view1 -> add(mViewDataBinding.codeView, "3")); + mViewDataBinding.bt4.setOnClickListener(view1 -> add(mViewDataBinding.codeView, "4")); + mViewDataBinding.bt5.setOnClickListener(view1 -> add(mViewDataBinding.codeView, "5")); + mViewDataBinding.bt6.setOnClickListener(view1 -> add(mViewDataBinding.codeView, "6")); + mViewDataBinding.bt7.setOnClickListener(view1 -> add(mViewDataBinding.codeView, "7")); + mViewDataBinding.bt8.setOnClickListener(view1 -> add(mViewDataBinding.codeView, "8")); + mViewDataBinding.bt9.setOnClickListener(view1 -> add(mViewDataBinding.codeView, "9")); } private void checkPasswd() { - String content = codeView.getInputContent(); + String content = mViewDataBinding.codeView.getInputContent(); if (TextUtils.isEmpty(content) || content.length() != 4) { return; } @@ -157,13 +123,13 @@ public class ScreenLockActivity extends BaseDataBindingActivity { exitDesktop(); } else { setEmpty(); - tv_hint.setText("密码错误"); + mViewDataBinding.tvHint.setText("密码错误"); } } else if (CommonConfig.DEFAULT_PASSWORD.equals(content)) { exitDesktop(); } else { setEmpty(); - tv_hint.setText("密码错误"); + mViewDataBinding.tvHint.setText("密码错误"); } } @@ -171,8 +137,8 @@ public class ScreenLockActivity extends BaseDataBindingActivity { new Handler().postDelayed(new Runnable() { @Override public void run() { - codeView.clearInputContent(); - tv_hint.setText(""); + mViewDataBinding.codeView.clearInputContent(); + mViewDataBinding.tvHint.setText(""); } }, 1000); } diff --git a/app/src/main/java/com/uiuios/aios/activity/screenlock/ScreenLockViewModel.java b/app/src/main/java/com/uiuios/aios/activity/screenlock/ScreenLockViewModel.java new file mode 100644 index 0000000..58431fd --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/screenlock/ScreenLockViewModel.java @@ -0,0 +1,18 @@ +package com.uiuios.aios.activity.screenlock; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.databinding.ActivityScreenLockBinding; + +public class ScreenLockViewModel extends BaseViewModel { + + @Override + public ActivityScreenLockBinding 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 new file mode 100644 index 0000000..9e44ae5 --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/setting/SettingActivity.java @@ -0,0 +1,167 @@ +package com.uiuios.aios.activity.setting; + +import android.Manifest; +import android.app.AppOpsManager; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.net.Uri; +import android.os.Binder; +import android.os.Build; +import android.provider.Settings; +import android.view.View; +import android.widget.Toast; + +import androidx.core.content.ContextCompat; + +import com.tencent.mmkv.MMKV; +import com.uiuios.aios.R; +import com.uiuios.aios.base.mvvm.BaseMvvmActivity; +import com.uiuios.aios.config.CommonConfig; +import com.uiuios.aios.databinding.ActivitySettingBinding; +import com.uiuios.aios.service.main.MainService; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +public class SettingActivity extends BaseMvvmActivity { + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + + + @Override + protected int getLayoutId() { + return R.layout.activity_setting; + } + + @Override + protected void initDataBinding() { + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); + mViewDataBinding.setClick(new BtnClick()); + } + + @Override + protected void initView() { + + } + + @Override + protected void initData() { + + } + + private static final int REQUEST_CODE_DRAW_OVER_OTHER_APPS_PERMISSION = 200; + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == REQUEST_CODE_DRAW_OVER_OTHER_APPS_PERMISSION) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(this)) { + // 权限被拒绝 + Toast.makeText(this, "用户取消授予悬浮窗权限", Toast.LENGTH_SHORT).show(); + } else { + // 权限已授予,可以显示悬浮窗 + showFloatingWindow(); + } + } + } + + private void showFloatingWindow() { + mViewDataBinding.setFloatWindowEnable(true); + mMMKV.encode(CommonConfig.FLOAT_WINDOW, true); + startService(new Intent(SettingActivity.this, MainService.class)); + sendBroadcast(new Intent(MainService.ACTION_FLOAT_WINDOW_ON)); + } + + + private void hideFloatingWindow() { + mViewDataBinding.setFloatWindowEnable(false); + mMMKV.encode(CommonConfig.FLOAT_WINDOW, false); + startService(new Intent(SettingActivity.this, MainService.class)); + sendBroadcast(new Intent(MainService.ACTION_FLOAT_WINDOW_OFF)); + } + + /*** + * 检查悬浮窗开启权限 + * @param context + * @return + */ + public boolean checkFloatPermission(Context context) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) + return true; + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { + try { + Class cls = Class.forName("android.content.Context"); + Field declaredField = cls.getDeclaredField("APP_OPS_SERVICE"); + declaredField.setAccessible(true); + Object obj = declaredField.get(cls); + if (!(obj instanceof String)) { + return false; + } + String str2 = (String) obj; + obj = cls.getMethod("getSystemService", String.class).invoke(context, str2); + cls = Class.forName("android.app.AppOpsManager"); + Field declaredField2 = cls.getDeclaredField("MODE_ALLOWED"); + declaredField2.setAccessible(true); + Method checkOp = cls.getMethod("checkOp", Integer.TYPE, Integer.TYPE, String.class); + int result = (Integer) checkOp.invoke(obj, 24, Binder.getCallingUid(), context.getPackageName()); + return result == declaredField2.getInt(cls); + } catch (Exception e) { + return false; + } + } else { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + AppOpsManager appOpsMgr = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE); + if (appOpsMgr == null) + return false; + int mode = appOpsMgr.checkOpNoThrow("android:system_alert_window", android.os.Process.myUid(), context + .getPackageName()); + return Settings.canDrawOverlays(context) || mode == AppOpsManager.MODE_ALLOWED || mode == AppOpsManager.MODE_IGNORED; + } else { + return Settings.canDrawOverlays(context); + } + } + } + + public class BtnClick { + public void openFloat(View view) { + boolean floatWindowEnable = mMMKV.decodeBool(CommonConfig.FLOAT_WINDOW, false); + if (floatWindowEnable) { + + hideFloatingWindow(); + } else { + boolean permission = checkFloatPermission(SettingActivity.this); + if (permission) { + showFloatingWindow(); + } else { + // 在Activity或Fragment中请求权限 + if (!Settings.canDrawOverlays(SettingActivity.this)) { + Toast.makeText(SettingActivity.this, "请先打开悬浮窗权限", Toast.LENGTH_LONG).show(); + Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, + Uri.parse("package:" + getPackageName())); + startActivityForResult(intent, REQUEST_CODE_DRAW_OVER_OTHER_APPS_PERMISSION); + } else { + showFloatingWindow(); + } + } + } + } + + public void toInternet(View view) { + startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); + } + + public void toFont(View view) { + startActivity(new Intent(Settings.ACTION_DISPLAY_SETTINGS)); + } + + public void toTouch(View view) { + startActivity(new Intent(SettingActivity.this, TouchActivity.class)); + } + + public void toSettings(View view) { + startActivity(new Intent(Settings.ACTION_SETTINGS)); + } + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/setting/SettingViewModel.java b/app/src/main/java/com/uiuios/aios/activity/setting/SettingViewModel.java new file mode 100644 index 0000000..23fab4a --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/setting/SettingViewModel.java @@ -0,0 +1,18 @@ +package com.uiuios.aios.activity.setting; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.databinding.ActivitySettingBinding; + +public class SettingViewModel extends BaseViewModel { + + @Override + public ActivitySettingBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/setting/SettingsActivity.java b/app/src/main/java/com/uiuios/aios/activity/setting/SettingsActivity.java new file mode 100644 index 0000000..f33d583 --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/setting/SettingsActivity.java @@ -0,0 +1,54 @@ +package com.uiuios.aios.activity.setting; + +import android.os.Bundle; + +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; +import androidx.preference.PreferenceFragmentCompat; + +import com.uiuios.aios.R; +import com.uiuios.aios.base.mvvm.BaseMvvmActivity; + +public class SettingsActivity extends BaseMvvmActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.settings_activity); + getSupportFragmentManager() + .beginTransaction() + .replace(R.id.settings, new SettingsFragment()) + .commit(); + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.setDisplayHomeAsUpEnabled(true); + } + } + + @Override + protected int getLayoutId() { + return 0; + } + + @Override + protected void initDataBinding() { + + } + + @Override + protected void initView() { + + } + + @Override + protected void initData() { + + } + + public static class SettingsFragment extends PreferenceFragmentCompat { + @Override + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { + setPreferencesFromResource(R.xml.root_preferences, rootKey); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/uiuios/aios/activity/setting/TouchActivity.java b/app/src/main/java/com/uiuios/aios/activity/setting/TouchActivity.java new file mode 100644 index 0000000..609724d --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/setting/TouchActivity.java @@ -0,0 +1,51 @@ +package com.uiuios.aios.activity.setting; + +import android.content.Intent; +import android.provider.Settings; +import android.view.View; + +import com.uiuios.aios.R; +import com.uiuios.aios.base.mvvm.BaseMvvmActivity; +import com.uiuios.aios.databinding.ActivitySettingBinding; +import com.uiuios.aios.databinding.ActivityTouchBinding; + +public class TouchActivity extends BaseMvvmActivity { + + + @Override + protected int getLayoutId() { + return R.layout.activity_touch; + } + + @Override + protected void initDataBinding() { + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); + mViewDataBinding.setClick(new BtnClick()); + } + + @Override + protected void initView() { + + } + + @Override + protected void initData() { + + } + + public class BtnClick { + public void toInternet(View view) { + startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); + } + + public void toFont(View view) { + startActivity(new Intent(Settings.ACTION_DISPLAY_SETTINGS)); + } + + public void toSettings(View view) { + startActivity(new Intent(Settings.ACTION_SETTINGS)); + } + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/setting/TouchViewModel.java b/app/src/main/java/com/uiuios/aios/activity/setting/TouchViewModel.java new file mode 100644 index 0000000..d8a9c9d --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/setting/TouchViewModel.java @@ -0,0 +1,18 @@ +package com.uiuios.aios.activity.setting; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.databinding.ActivityTouchBinding; + +public class TouchViewModel extends BaseViewModel { + + @Override + public ActivityTouchBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/wifi/WiFiContact.java b/app/src/main/java/com/uiuios/aios/activity/wifi/WiFiContact.java deleted file mode 100644 index ce94a3f..0000000 --- a/app/src/main/java/com/uiuios/aios/activity/wifi/WiFiContact.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.uiuios.aios.activity.wifi; - -import com.uiuios.aios.base.mvp.BasePresenter; -import com.uiuios.aios.base.mvp.BaseView; -import com.uiuios.aios.bean.WiFiInfo; - -import java.util.List; - -public class WiFiContact { - public interface Presenter extends BasePresenter { - void getWiFiList(); - } - - public interface WiFiView extends BaseView { - void setSavedWiFiList(List wiFiList); - void setAvailableWiFiList(List wiFiList); - } -} diff --git a/app/src/main/java/com/uiuios/aios/activity/wifi/WiFiManagerActivity.java b/app/src/main/java/com/uiuios/aios/activity/wifi/WiFiManagerActivity.java index fd52f02..c100fc1 100644 --- a/app/src/main/java/com/uiuios/aios/activity/wifi/WiFiManagerActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/wifi/WiFiManagerActivity.java @@ -7,77 +7,65 @@ import android.content.IntentFilter; import android.net.ConnectivityManager; import android.net.wifi.WifiManager; import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; -import androidx.databinding.DataBindingUtil; +import androidx.lifecycle.Observer; import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import com.hjq.toast.Toaster; import com.uiuios.aios.R; import com.uiuios.aios.adapter.AvailableWiFiAdapter; import com.uiuios.aios.adapter.SavedWiFiAdapter; -import com.uiuios.aios.base.BaseDataBindingActivity; +import com.uiuios.aios.base.mvvm.BaseMvvmActivity; import com.uiuios.aios.bean.WiFiInfo; +import com.uiuios.aios.databinding.ActivityWifiManagerBinding; import com.uiuios.aios.view.HorizontalItemDecoration; import java.util.List; -import butterknife.BindView; import butterknife.ButterKnife; -public class WiFiManagerActivity extends BaseDataBindingActivity implements WiFiContact.WiFiView { +public class WiFiManagerActivity extends BaseMvvmActivity { - - @BindView(R.id.iv_close) - ImageView iv_close; - @BindView(R.id.rv_saved) - RecyclerView rv_saved; - @BindView(R.id.rv_available) - RecyclerView rv_available; - @BindView(R.id.tv_refresh) - TextView tv_refresh; - @BindView(R.id.tv_refresh2) - TextView tv_refresh2; - - private WiFiPresenter mPresenter; private SavedWiFiAdapter mSavedWiFiAdapter; private AvailableWiFiAdapter mAvailableWiFiAdapter; + @Override public boolean setNightMode() { return true; } + @Override + protected int getLayoutId() { + return R.layout.activity_wifi_manager; + } + @Override protected void initDataBinding() { - DataBindingUtil.setContentView(this, R.layout.activity_wifi_manager); + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); +// mViewDataBinding.setClick(new BtnClick()); } @Override public void initView() { - ButterKnife.bind(this); - mPresenter = new WiFiPresenter(this); - mPresenter.attachView(this); - mPresenter.setLifecycle(getLifecycleSubject()); - - iv_close.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivClose.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { finish(); } }); - tv_refresh.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.tvRefresh.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - mPresenter.getWiFiList(); + mViewModel.getWiFiList(); } }); - tv_refresh2.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.tvRefresh2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - mPresenter.getWiFiList(); + mViewModel.getWiFiList(); } }); @@ -86,14 +74,14 @@ public class WiFiManagerActivity extends BaseDataBindingActivity implements WiFi LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); - rv_saved.setLayoutManager(linearLayoutManager); - rv_saved.addItemDecoration(new HorizontalItemDecoration(30, this)); - rv_saved.setAdapter(mSavedWiFiAdapter); + mViewDataBinding.rvSaved.setLayoutManager(linearLayoutManager); + mViewDataBinding.rvSaved.addItemDecoration(new HorizontalItemDecoration(30, this)); + mViewDataBinding.rvSaved.setAdapter(mSavedWiFiAdapter); LinearLayoutManager linearLayoutManager2 = new LinearLayoutManager(this); linearLayoutManager2.setOrientation(LinearLayoutManager.VERTICAL); - rv_available.setLayoutManager(linearLayoutManager2); - rv_available.setAdapter(mAvailableWiFiAdapter); + mViewDataBinding.rvAvailable.setLayoutManager(linearLayoutManager2); + mViewDataBinding.rvAvailable.setAdapter(mAvailableWiFiAdapter); IntentFilter filter = new IntentFilter(); filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); @@ -105,12 +93,25 @@ public class WiFiManagerActivity extends BaseDataBindingActivity implements WiFi registerReceiver(broadcastReceiver, filter); - mPresenter.getWiFiList(); + mViewModel.getWiFiList(); } @Override public void initData() { + mViewModel.getSavedWiFiList().observe(this, new Observer>() { + @Override + public void onChanged(List wiFiInfos) { + Toaster.show("刷新成功"); + mSavedWiFiAdapter.setResultList(wiFiInfos); + } + }); + mViewModel.getAvailableWiFiList().observe(this, new Observer>() { + @Override + public void onChanged(List wiFiInfos) { + mAvailableWiFiAdapter.setResultList(wiFiInfos); + } + }); } @Override @@ -132,22 +133,11 @@ public class WiFiManagerActivity extends BaseDataBindingActivity implements WiFi case WifiManager.NETWORK_STATE_CHANGED_ACTION: case WifiManager.SUPPLICANT_STATE_CHANGED_ACTION: default: - mPresenter.getWiFiList(); + mViewModel.getWiFiList(); break; } } } }; - - @Override - public void setSavedWiFiList(List wiFiList) { - Toaster.show("刷新成功"); - mSavedWiFiAdapter.setResultList(wiFiList); - } - - @Override - public void setAvailableWiFiList(List wiFiList) { - mAvailableWiFiAdapter.setResultList(wiFiList); - } } diff --git a/app/src/main/java/com/uiuios/aios/activity/wifi/WiFiPresenter.java b/app/src/main/java/com/uiuios/aios/activity/wifi/WiFiManagerViewModel.java similarity index 79% rename from app/src/main/java/com/uiuios/aios/activity/wifi/WiFiPresenter.java rename to app/src/main/java/com/uiuios/aios/activity/wifi/WiFiManagerViewModel.java index 200da9b..940c933 100644 --- a/app/src/main/java/com/uiuios/aios/activity/wifi/WiFiPresenter.java +++ b/app/src/main/java/com/uiuios/aios/activity/wifi/WiFiManagerViewModel.java @@ -6,10 +6,12 @@ import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; -import androidx.annotation.NonNull; +import androidx.lifecycle.MutableLiveData; import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; import com.uiuios.aios.bean.WiFiInfo; +import com.uiuios.aios.databinding.ActivityWifiManagerBinding; import java.util.ArrayList; import java.util.Comparator; @@ -19,42 +21,35 @@ import java.util.Map; import java.util.function.Predicate; import java.util.stream.Collectors; -import io.reactivex.rxjava3.subjects.BehaviorSubject; - import static android.text.TextUtils.isEmpty; -public class WiFiPresenter implements WiFiContact.Presenter { +public class WiFiManagerViewModel extends BaseViewModel { - private WiFiContact.WiFiView mView; - private Context mContext; - - private BehaviorSubject lifecycle; - - public void setLifecycle(BehaviorSubject lifecycle) { - this.lifecycle = lifecycle; - } - - public BehaviorSubject getLifecycle() { - return lifecycle; - } - - WiFiPresenter(Context context) { - this.mContext = context; + @Override + public ActivityWifiManagerBinding getVDBinding() { + return binding; } @Override - public void attachView(@NonNull WiFiContact.WiFiView view) { - this.mView = view; + public void onDestroy() { + } - @Override - public void detachView() { - this.mView = null; + private MutableLiveData> mSavedWiFiList =new MutableLiveData<>(); + + public MutableLiveData> getSavedWiFiList() { + return mSavedWiFiList; + } + + private MutableLiveData> mAvailableWiFiList =new MutableLiveData<>(); + + public MutableLiveData> getAvailableWiFiList() { + return mAvailableWiFiList; } - @Override public void getWiFiList() { - WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); + if (getCtx()==null)return; + WifiManager wifiManager = (WifiManager) getCtx().getSystemService(Context.WIFI_SERVICE); List wifiConfigurations = wifiManager.getConfiguredNetworks(); Map savedWifiConfiguration = new HashMap<>(); for (WifiConfiguration wifiConfiguration : wifiConfigurations) { @@ -110,7 +105,7 @@ public class WiFiPresenter implements WiFiContact.Presenter { } }); } - mView.setSavedWiFiList(savedList.stream().sorted(new Comparator() { + mSavedWiFiList.setValue(savedList.stream().sorted(new Comparator() { @Override public int compare(WiFiInfo o1, WiFiInfo o2) { if (o1.isAvailable()) { @@ -122,6 +117,6 @@ public class WiFiPresenter implements WiFiContact.Presenter { } } }).collect(Collectors.toList())); - mView.setAvailableWiFiList(availableList); + mAvailableWiFiList.setValue(availableList); } } diff --git a/app/src/main/java/com/uiuios/aios/adapter/AppSelectedAdapter.java b/app/src/main/java/com/uiuios/aios/adapter/AppSelectedAdapter.java index c3ee060..1b08332 100644 --- a/app/src/main/java/com/uiuios/aios/adapter/AppSelectedAdapter.java +++ b/app/src/main/java/com/uiuios/aios/adapter/AppSelectedAdapter.java @@ -14,7 +14,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.tencent.mmkv.MMKV; import com.uiuios.aios.R; -import com.uiuios.aios.activity.QuickAppActivity; +import com.uiuios.aios.activity.quickapp.QuickAppActivity; import com.uiuios.aios.bean.AppSelectBean; import com.uiuios.aios.config.CommonConfig; diff --git a/app/src/main/java/com/uiuios/aios/adapter/ArticleAdapter.java b/app/src/main/java/com/uiuios/aios/adapter/ArticleAdapter.java index 93b57fe..8d49066 100644 --- a/app/src/main/java/com/uiuios/aios/adapter/ArticleAdapter.java +++ b/app/src/main/java/com/uiuios/aios/adapter/ArticleAdapter.java @@ -13,7 +13,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.bumptech.glide.Glide; import com.shehuan.niv.NiceImageView; import com.uiuios.aios.R; -import com.uiuios.aios.activity.ArticleActivity; +import com.uiuios.aios.activity.article.ArticleActivity; import com.uiuios.aios.bean.ArticleInfo; import java.util.List; diff --git a/app/src/main/java/com/uiuios/aios/adapter/GoodsAdapter.java b/app/src/main/java/com/uiuios/aios/adapter/GoodsAdapter.java index 002842a..2232ddc 100644 --- a/app/src/main/java/com/uiuios/aios/adapter/GoodsAdapter.java +++ b/app/src/main/java/com/uiuios/aios/adapter/GoodsAdapter.java @@ -2,12 +2,10 @@ package com.uiuios.aios.adapter; import android.content.Context; import android.content.Intent; -import android.net.Uri; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; @@ -17,7 +15,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.bumptech.glide.Glide; import com.shehuan.niv.NiceImageView; import com.uiuios.aios.R; -import com.uiuios.aios.activity.DetailsActivity; +import com.uiuios.aios.activity.details.DetailsActivity; import com.uiuios.aios.bean.GoodsInfo; import java.util.List; diff --git a/app/src/main/java/com/uiuios/aios/adapter/GoodsListAdapter.java b/app/src/main/java/com/uiuios/aios/adapter/GoodsListAdapter.java index 1b0afd2..320ecdc 100644 --- a/app/src/main/java/com/uiuios/aios/adapter/GoodsListAdapter.java +++ b/app/src/main/java/com/uiuios/aios/adapter/GoodsListAdapter.java @@ -15,7 +15,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.bumptech.glide.Glide; import com.shehuan.niv.NiceImageView; import com.uiuios.aios.R; -import com.uiuios.aios.activity.DetailsActivity; +import com.uiuios.aios.activity.details.DetailsActivity; import com.uiuios.aios.bean.GoodsInfo; import java.util.List; diff --git a/app/src/main/java/com/uiuios/aios/adapter/NewGoodsAdapter.java b/app/src/main/java/com/uiuios/aios/adapter/NewGoodsAdapter.java index 05846df..13ce5ef 100644 --- a/app/src/main/java/com/uiuios/aios/adapter/NewGoodsAdapter.java +++ b/app/src/main/java/com/uiuios/aios/adapter/NewGoodsAdapter.java @@ -2,7 +2,6 @@ package com.uiuios.aios.adapter; import android.content.Context; import android.content.Intent; -import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -15,7 +14,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.bumptech.glide.Glide; import com.shehuan.niv.NiceImageView; import com.uiuios.aios.R; -import com.uiuios.aios.activity.DetailsActivity; +import com.uiuios.aios.activity.details.DetailsActivity; import com.uiuios.aios.activity.GoodsActivity; import com.uiuios.aios.bean.GoodsInfo; diff --git a/app/src/main/java/com/uiuios/aios/adapter/SOSNnmberAdapter.java b/app/src/main/java/com/uiuios/aios/adapter/SOSNnmberAdapter.java index d8a9669..e2b8a9a 100644 --- a/app/src/main/java/com/uiuios/aios/adapter/SOSNnmberAdapter.java +++ b/app/src/main/java/com/uiuios/aios/adapter/SOSNnmberAdapter.java @@ -12,7 +12,7 @@ import androidx.constraintlayout.widget.ConstraintLayout; import androidx.recyclerview.widget.RecyclerView; import com.uiuios.aios.R; -import com.uiuios.aios.activity.EmergencyActivity; +import com.uiuios.aios.activity.emergency.EmergencyActivity; import com.uiuios.aios.bean.Contact; import java.util.List; diff --git a/app/src/main/java/com/uiuios/aios/adapter/WechatContactAdapter.java b/app/src/main/java/com/uiuios/aios/adapter/WechatContactAdapter.java index 62a3696..7247fd6 100644 --- a/app/src/main/java/com/uiuios/aios/adapter/WechatContactAdapter.java +++ b/app/src/main/java/com/uiuios/aios/adapter/WechatContactAdapter.java @@ -3,7 +3,6 @@ package com.uiuios.aios.adapter; import android.content.Context; import android.content.Intent; import android.provider.Settings; -import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -16,17 +15,10 @@ import androidx.constraintlayout.widget.ConstraintLayout; import androidx.recyclerview.widget.RecyclerView; import com.bumptech.glide.Glide; -import com.hjq.toast.Toaster; import com.shehuan.niv.NiceImageView; import com.uiuios.aios.R; import com.uiuios.aios.activity.callwechat.CallWechatActivity; -import com.uiuios.aios.alarm.AlarmClockData; import com.uiuios.aios.bean.Contact; -import com.uiuios.aios.bean.WechatInfo; -import com.uiuios.aios.db.ContactManager; -import com.uiuios.aios.dialog.DeleteContactDialog; -import com.uiuios.aios.dialog.DeleteDialog; -import com.uiuios.aios.service.WeAccessibilityService; import com.uiuios.aios.utils.AccessibilityUtils; import java.util.List; 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 3f3b223..573efbb 100644 --- a/app/src/main/java/com/uiuios/aios/base/BaseApplication.java +++ b/app/src/main/java/com/uiuios/aios/base/BaseApplication.java @@ -17,7 +17,7 @@ import com.tencent.bugly.crashreport.CrashReport; import com.tencent.mmkv.MMKV; import com.uiuios.aios.BuildConfig; import com.uiuios.aios.alarm.AlarmUtils; -import com.uiuios.aios.db.ContactManager; +import com.uiuios.aios.db.WechatContactManager; import com.uiuios.aios.manager.AmapManager; import com.uiuios.aios.manager.AppManager; import com.uiuios.aios.manager.AppStatusManager; @@ -76,7 +76,7 @@ public class BaseApplication extends Application { } catch (Exception e) { Log.e(TAG, "onCreate: " + e.getMessage()); } - ContactManager.init(this); + WechatContactManager.init(this); } private void aliyunPushInit() { 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 f00867f..2d06076 100644 --- a/app/src/main/java/com/uiuios/aios/config/CommonConfig.java +++ b/app/src/main/java/com/uiuios/aios/config/CommonConfig.java @@ -74,4 +74,8 @@ 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 FLOAT_WINDOW = "FloatWindowEnable"; + + public static final String AMAP_LOCATION_MAP_BEAN = "AMapLocation_MapBean_key"; + public static final String AMAP_LOCATION_District = "AMapLocationMapBean_key"; } diff --git a/app/src/main/java/com/uiuios/aios/db/ContactDbHelper.java b/app/src/main/java/com/uiuios/aios/db/WechatContactDbHelper.java similarity index 72% rename from app/src/main/java/com/uiuios/aios/db/ContactDbHelper.java rename to app/src/main/java/com/uiuios/aios/db/WechatContactDbHelper.java index e4d3994..ef25128 100644 --- a/app/src/main/java/com/uiuios/aios/db/ContactDbHelper.java +++ b/app/src/main/java/com/uiuios/aios/db/WechatContactDbHelper.java @@ -10,27 +10,27 @@ import androidx.annotation.Nullable; import java.io.File; -public class ContactDbHelper extends SQLiteOpenHelper { +public class WechatContactDbHelper extends SQLiteOpenHelper { public static final String DATABASE_NAME = "contactList.db"; public static final String TABLE_NAME = "contact_table"; private static final int DATABASE_VERSION = 1; - public ContactDbHelper(Context context) { + public WechatContactDbHelper(Context context) { // super(context, DATABASE_FILE_NAME, null, DATABASE_VERSION); super(context, context.getExternalCacheDir() + File.separator + DATABASE_NAME, null, DATABASE_VERSION); // super(context, Environment.getExternalStorageDirectory().getPath() + File.separator + DATABASE_FILE_NAME, null, DATABASE_VERSION); } - public ContactDbHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) { + public WechatContactDbHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } - public ContactDbHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version, @Nullable DatabaseErrorHandler errorHandler) { + public WechatContactDbHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version, @Nullable DatabaseErrorHandler errorHandler) { super(context, name, factory, version, errorHandler); } -// public ContactDbHelper(@Nullable Context context, @Nullable String name, int version, @NonNull SQLiteDatabase.OpenParams openParams) { +// public WechatContactDbHelper(@Nullable Context context, @Nullable String name, int version, @NonNull SQLiteDatabase.OpenParams openParams) { // super(context, name, version, openParams); // } diff --git a/app/src/main/java/com/uiuios/aios/db/ContactManager.java b/app/src/main/java/com/uiuios/aios/db/WechatContactManager.java similarity index 75% rename from app/src/main/java/com/uiuios/aios/db/ContactManager.java rename to app/src/main/java/com/uiuios/aios/db/WechatContactManager.java index 3817d34..ef035dd 100644 --- a/app/src/main/java/com/uiuios/aios/db/ContactManager.java +++ b/app/src/main/java/com/uiuios/aios/db/WechatContactManager.java @@ -12,39 +12,39 @@ import com.uiuios.aios.bean.WechatInfo; import java.util.ArrayList; import java.util.List; -public class ContactManager { - private static String TAG = ContactManager.class.getSimpleName(); +public class WechatContactManager { + private static String TAG = WechatContactManager.class.getSimpleName(); @SuppressLint("StaticFieldLeak") - private static ContactManager sInstance; + private static WechatContactManager sInstance; private Context mContext; - private ContactDbHelper mDBHelper; + private WechatContactDbHelper mDBHelper; - private ContactManager(Context context) { + private WechatContactManager(Context context) { if (context == null) { throw new RuntimeException("Context is NULL"); } mContext = context; - mDBHelper = new ContactDbHelper(context); + mDBHelper = new WechatContactDbHelper(context); } public static void init(Context context) { if (sInstance == null) { - sInstance = new ContactManager(context); + sInstance = new WechatContactManager(context); } } - public static ContactManager getInstance() { + public static WechatContactManager getInstance() { if (sInstance == null) { - throw new IllegalStateException("You must be init ContactManager first"); + throw new IllegalStateException("You must be init WechatContactManager first"); } return sInstance; } - public ContactDbHelper getDBHelper() { + public WechatContactDbHelper getDBHelper() { if (mDBHelper == null) { - mDBHelper = new ContactDbHelper(mContext); + mDBHelper = new WechatContactDbHelper(mContext); } return mDBHelper; } @@ -57,11 +57,11 @@ public class ContactManager { values.put("wechatid", wechatInfo.getWechatId()); values.put("mobile", wechatInfo.getMobile()); values.put("avatar_path", wechatInfo.getAvatarPath()); -// long id = db.insert(ContactDbHelper.TABLE_NAME, null, values); +// long id = db.insert(WechatContactDbHelper.TABLE_NAME, null, values); long id = -1; db.beginTransaction(); try { - id = db.insertWithOnConflict(ContactDbHelper.TABLE_NAME, null, values, SQLiteDatabase.CONFLICT_REPLACE); + id = db.insertWithOnConflict(WechatContactDbHelper.TABLE_NAME, null, values, SQLiteDatabase.CONFLICT_REPLACE); db.setTransactionSuccessful(); } catch (Exception e) { Log.e(TAG, "addWechatInfo: " + e.getMessage()); @@ -73,13 +73,13 @@ public class ContactManager { public boolean delete(Integer sqlId) { SQLiteDatabase db = mDBHelper.getWritableDatabase(); - long id = db.delete(ContactDbHelper.TABLE_NAME, "_id=?", new String[]{sqlId.toString()}); + long id = db.delete(WechatContactDbHelper.TABLE_NAME, "_id=?", new String[]{sqlId.toString()}); return id > 0; } public boolean deleteAll() { SQLiteDatabase db = mDBHelper.getWritableDatabase(); - long id = db.delete(ContactDbHelper.TABLE_NAME, "", null); + long id = db.delete(WechatContactDbHelper.TABLE_NAME, "", null); return id > 0; } @@ -91,7 +91,7 @@ public class ContactManager { values.put("wechatid", wechatInfo.getWechatId()); values.put("mobile", wechatInfo.getMobile()); values.put("avatar_path", wechatInfo.getAvatarPath()); - long id = db.update(ContactDbHelper.TABLE_NAME, values, "_id=?", new String[]{String.valueOf(wechatInfo.getId())}); + long id = db.update(WechatContactDbHelper.TABLE_NAME, values, "_id=?", new String[]{String.valueOf(wechatInfo.getId())}); return id > 0; } @@ -99,7 +99,7 @@ public class ContactManager { List wechatInfoList = new ArrayList<>(); SQLiteDatabase db = mDBHelper.getReadableDatabase(); long time = System.currentTimeMillis(); - String sql = "select * from " + ContactDbHelper.TABLE_NAME; + String sql = "select * from " + WechatContactDbHelper.TABLE_NAME; Cursor cursor = null; try { cursor = db.rawQuery(sql, null); diff --git a/app/src/main/java/com/uiuios/aios/fragment/app/AppListFragment.java b/app/src/main/java/com/uiuios/aios/fragment/app/AppListFragment.java index 6f29957..3105912 100644 --- a/app/src/main/java/com/uiuios/aios/fragment/app/AppListFragment.java +++ b/app/src/main/java/com/uiuios/aios/fragment/app/AppListFragment.java @@ -5,7 +5,6 @@ import android.content.Context; import android.content.Intent; import android.content.pm.LauncherApps; import android.content.pm.PackageManager; -import android.content.res.Configuration; import android.graphics.Rect; import android.os.Bundle; import android.os.Process; @@ -27,15 +26,13 @@ import com.hjq.toast.Toaster; import com.trello.rxlifecycle4.RxLifecycle; import com.trello.rxlifecycle4.android.FragmentEvent; import com.uiuios.aios.R; -import com.uiuios.aios.activity.ScreenLockActivity; +import com.uiuios.aios.activity.screenlock.ScreenLockActivity; import com.uiuios.aios.activity.dailyapp.DailyAppActivity; -import com.uiuios.aios.activity.main.OldMainActivity; +import com.uiuios.aios.activity.main.deprecated.OldMainActivity; import com.uiuios.aios.base.BaseFragment; -import com.uiuios.aios.base.mvvm.fragment.BaseMvvmFragment; import com.uiuios.aios.bean.BaseResponse; import com.uiuios.aios.bean.DesktopIcon; import com.uiuios.aios.config.CommonConfig; -import com.uiuios.aios.databinding.FragmentApplistBinding; import com.uiuios.aios.dialog.DailyAppDialog; import com.uiuios.aios.dialog.ShortcutDialog; import com.uiuios.aios.manager.AppManager; diff --git a/app/src/main/java/com/uiuios/aios/fragment/contact/ContactFragment.java b/app/src/main/java/com/uiuios/aios/fragment/contact/ContactFragment.java index 14c8a66..6435205 100644 --- a/app/src/main/java/com/uiuios/aios/fragment/contact/ContactFragment.java +++ b/app/src/main/java/com/uiuios/aios/fragment/contact/ContactFragment.java @@ -8,10 +8,17 @@ import android.view.Gravity; import android.view.View; import android.view.Window; +import androidx.annotation.Nullable; +import androidx.fragment.app.FragmentActivity; import androidx.lifecycle.Observer; import androidx.recyclerview.widget.GridLayoutManager; import com.hjq.toast.Toaster; +import com.jeremyliao.liveeventbus.LiveEventBus; +import com.qweather.sdk.bean.weather.WeatherDailyBean; +import com.qweather.sdk.bean.weather.WeatherHourlyBean; +import com.qweather.sdk.bean.weather.WeatherNowBean; +import com.tencent.mmkv.MMKV; import com.uiuios.aios.R; import com.uiuios.aios.activity.contact.AddWechatContactActivity; import com.uiuios.aios.activity.contact.EditContactActivity; @@ -19,18 +26,22 @@ import com.uiuios.aios.adapter.WechatContactAdapter; import com.uiuios.aios.base.mvvm.fragment.BaseMvvmFragment; import com.uiuios.aios.bean.BaseResponse; import com.uiuios.aios.bean.Contact; -import com.uiuios.aios.bean.WechatInfo; +import com.uiuios.aios.bean.MapBean; +import com.uiuios.aios.config.CommonConfig; import com.uiuios.aios.databinding.FragmentContactHomeBinding; -import com.uiuios.aios.db.ContactManager; -import com.uiuios.aios.dialog.DeleteContactDialog; import com.uiuios.aios.dialog.EditContactDialog; +import com.uiuios.aios.utils.DayUtils; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.List; public class ContactFragment extends BaseMvvmFragment { private static final String TAG = ContactFragment.class.getSimpleName(); + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + private FragmentActivity mContext; private WechatContactAdapter mContactAdapter; @Override @@ -40,6 +51,7 @@ public class ContactFragment extends BaseMvvmFragment() { + @Override + public void onChanged(@Nullable MapBean mapBean) { + mViewDataBinding.tvLocation.setText(mapBean.getDistrict()); + } + }); + } else { + + } } @Override protected void initData(Bundle savedInstanceState) { + LiveEventBus + .get("some_key1", WeatherNowBean.NowBaseBean.class) + .observe(this, new Observer() { + @Override + public void onChanged(@Nullable WeatherNowBean.NowBaseBean nowBaseBean) { + mViewDataBinding.tvTemp.setText(nowBaseBean.getTemp() + "℃"); + if (DayUtils.isNight()) { + mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather_night)); + } else { + switch (nowBaseBean.getIcon()) { + default: + case "100": + case "150": + //晴 + mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather)); + break; + case "102": + case "152": + //少云 + mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather_rain)); + break; + } + } +// mViewDataBinding.tvWeather.setText(nowBaseBean.getText()); + } + }); + + LiveEventBus + .get("some_key2", WeatherHourlyBean.HourlyBean.class) + .observe(this, new Observer() { + @Override + public void onChanged(@Nullable WeatherHourlyBean.HourlyBean hourlyBean) { + String imageName = "he" + hourlyBean.getIcon(); + Log.e(TAG, "onSuccess: " + imageName); + if (isAdded()) { + int resId = getResources().getIdentifier(imageName, "drawable", mContext.getPackageName()); + Log.e(TAG, "onSuccess: " + resId); + if (resId == 0) { + mViewDataBinding.ivPic.setImageDrawable(mContext.getDrawable(R.drawable.he100)); + } else { + mViewDataBinding.ivPic.setImageDrawable(mContext.getDrawable(resId)); + } + mViewDataBinding.tvTemp.setText(hourlyBean.getTemp() + "℃"); + } + } + }); + + LiveEventBus + .get("some_key3", WeatherDailyBean.DailyBean.class) + .observe(this, new Observer() { + @Override + public void onChanged(@Nullable WeatherDailyBean.DailyBean dailyBean) { + mViewDataBinding.tvWeather.setText(dailyBean.getTempMin() + "℃ - " + dailyBean.getTempMax() + "℃"); + } + }); + + LiveEventBus + .get("time", String.class) + .observe(this, new Observer() { + @Override + public void onChanged(@Nullable String s) { + mViewDataBinding.tvTime.setText(s); + } + }); + + LiveEventBus + .get("week", String.class) + .observe(this, new Observer() { + @Override + public void onChanged(@Nullable String s) { + mViewDataBinding.tvData.setText(s); + } + }); + mViewModel.getContactList().observe(this, new Observer>() { @Override public void onChanged(List contacts) { @@ -94,13 +207,14 @@ public class ContactFragment extends BaseMvvmFragment { private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); @@ -52,40 +46,21 @@ public class ContactViewModel extends BaseViewModel>() { -// @Override -// public void subscribe(@NonNull ObservableEmitter> emitter) throws Throwable { -// emitter.onNext(ContactManager.getInstance().getWechatInfoList()); -// } -// }) -// .compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY)) -// .subscribeOn(Schedulers.io()) -// .observeOn(AndroidSchedulers.mainThread()) -// .subscribe(new Observer>() { -// @Override -// public void onSubscribe(@NonNull Disposable d) { -// Log.e("getWechatInfoList", "onSubscribe: "); -// } -// -// @Override -// public void onNext(@NonNull List wechatInfos) { -// Log.e("getWechatInfoList", "onNext: " + wechatInfos); -// mContactList.setValue(wechatInfos); -// } -// -// @Override -// public void onError(@NonNull Throwable e) { -// Log.e("getWechatInfoList", "onError: " + e.getMessage()); -// mContactList.setValue(null); -// } -// -// @Override -// public void onComplete() { -// Log.e("getWechatInfoList", "onComplete: "); -// } -// }); + public void getCacheContact() { + String jsonString = mMMKV.getString(UrlAddress.GET_MAIL_LIST, null); + Gson gson = new Gson(); + Type type = new TypeToken>() { + }.getType(); + if (!TextUtils.isEmpty(jsonString)) { + List contacts = gson.fromJson(jsonString, type); + if (contacts != null) { + mContactList.setValue(contacts); + } + } + getContact(); + } + public void getContact() { NetInterfaceManager.getInstance() .getContactListObservable() .compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY)) diff --git a/app/src/main/java/com/uiuios/aios/fragment/control/ControlFragment.java b/app/src/main/java/com/uiuios/aios/fragment/control/ControlFragment.java index 8f4b20c..ded36a0 100644 --- a/app/src/main/java/com/uiuios/aios/fragment/control/ControlFragment.java +++ b/app/src/main/java/com/uiuios/aios/fragment/control/ControlFragment.java @@ -32,17 +32,14 @@ import android.view.WindowManager; import android.widget.SeekBar; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.lifecycle.Observer; -import com.hjq.toast.Toaster; -import com.jeremyliao.liveeventbus.LiveEventBus; import com.tencent.mmkv.MMKV; import com.uiuios.aios.R; +import com.uiuios.aios.activity.setting.SettingActivity; import com.uiuios.aios.base.mvvm.fragment.BaseMvvmFragment; import com.uiuios.aios.bean.FamilyAddress; -import com.uiuios.aios.bean.MapBean; import com.uiuios.aios.config.CommonConfig; import com.uiuios.aios.databinding.PhoneFragmentControlBinding; import com.uiuios.aios.manager.AmapManager; @@ -171,12 +168,13 @@ public class ControlFragment extends BaseMvvmFragment() { // @Override // public void onChanged(@Nullable MapBean mapBean) { 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 383fef1..e5cce6e 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 @@ -50,9 +50,9 @@ 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.ControlActivity; -import com.uiuios.aios.activity.EmergencyActivity; -import com.uiuios.aios.activity.QuickAppActivity; +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; @@ -79,6 +79,7 @@ import com.uiuios.aios.push.PushManager; import com.uiuios.aios.utils.ApkUtils; import com.uiuios.aios.utils.AppUtil; import com.uiuios.aios.utils.BitmapUtils; +import com.uiuios.aios.utils.DayUtils; import com.uiuios.aios.utils.NetStateUtils; import com.uiuios.aios.utils.SchemeUtils; @@ -902,7 +903,7 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom case "150": case "102": case "152": - if (isnight()) { + if (DayUtils.isNight()) { cl_weather.setBackground(ContextCompat.getDrawable(mContext, R.drawable.background_weather_sun)); } else { cl_weather.setBackground(ContextCompat.getDrawable(mContext, R.drawable.background_weather_sun_night)); @@ -974,14 +975,6 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom }); } - private boolean isnight() { - Calendar calendar = Calendar.getInstance(); - int hour = calendar.get(Calendar.HOUR_OF_DAY); - int minute = calendar.get(Calendar.MINUTE); - int second = calendar.get(Calendar.SECOND); - return hour >= 16 && minute >= 30; - } - private void killBackgroundApp() { List pkgList = ApkUtils.queryFilterAppList(mContext); for (String pkg : pkgList) { 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 26b94d4..376f641 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 @@ -26,11 +26,12 @@ import com.qweather.sdk.bean.weather.WeatherNowBean; import com.tencent.mmkv.MMKV; import com.uiuios.aios.BuildConfig; import com.uiuios.aios.R; -import com.uiuios.aios.activity.EmergencyActivity; +import com.uiuios.aios.activity.emergency.EmergencyActivity; import com.uiuios.aios.activity.addicon.AddIconActivity; import com.uiuios.aios.activity.alarm.port.PortAlarmActivity; import com.uiuios.aios.activity.contact.ContactActivity; import com.uiuios.aios.activity.dailyapp.DailyAppActivity; +import com.uiuios.aios.activity.setting.SettingActivity; import com.uiuios.aios.activity.weather.WeatherActivity; import com.uiuios.aios.adapter.HomeAppAdapter; import com.uiuios.aios.alarm.AlarmClockData; @@ -47,6 +48,7 @@ import com.uiuios.aios.network.NetInterfaceManager; import com.uiuios.aios.push.PushManager; import com.uiuios.aios.utils.ApkUtils; import com.uiuios.aios.utils.AppUtil; +import com.uiuios.aios.utils.DayUtils; import com.uiuios.aios.view.RecyclerViewSpacesItemDecoration; import java.text.ParseException; @@ -128,7 +130,7 @@ public class HomeFragment extends BaseMvvmFragment() { - @Override - public void onChanged(WeatherNowBean.NowBaseBean nowBaseBean) { - mViewDataBinding.tvTemp.setText(nowBaseBean.getTemp() + "℃"); - if (isNight()) { - mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather_night)); - } else { - switch (nowBaseBean.getIcon()) { - default: - case "100": - case "150": - //晴 - mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather)); - break; - case "102": - case "152": - //少云 - mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather_rain)); - break; - } - } + LiveEventBus + .get("some_key1", WeatherNowBean.NowBaseBean.class) + .observe(this, new Observer() { + @Override + public void onChanged(@Nullable WeatherNowBean.NowBaseBean nowBaseBean) { + mViewDataBinding.tvTemp.setText(nowBaseBean.getTemp() + "℃"); + if (DayUtils.isNight()) { + mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather_night)); + } else { + switch (nowBaseBean.getIcon()) { + default: + case "100": + case "150": + //晴 + mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather)); + break; + case "102": + case "152": + //少云 + mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather_rain)); + break; + } + } // mViewDataBinding.tvWeather.setText(nowBaseBean.getText()); - } - }); - - mViewModel.getHourlyBeanData().observe(this, new Observer() { - @Override - public void onChanged(WeatherHourlyBean.HourlyBean hourlyBean) { - String imageName = "he" + hourlyBean.getIcon(); - Log.e(TAG, "onSuccess: " + imageName); - if (isAdded()) { - int resId = getResources().getIdentifier(imageName, "drawable", mContext.getPackageName()); - Log.e(TAG, "onSuccess: " + resId); - if (resId == 0) { - mViewDataBinding.ivPic.setImageDrawable(mContext.getDrawable(R.drawable.he100)); - } else { - mViewDataBinding.ivPic.setImageDrawable(mContext.getDrawable(resId)); } - mViewDataBinding.tvTemp.setText(hourlyBean.getTemp() + "℃"); - } - } - }); + }); - mViewModel.getDailyBeanData().observe(this, new Observer() { - @Override - public void onChanged(WeatherDailyBean.DailyBean dailyBean) { - mViewDataBinding.tvWeather.setText(dailyBean.getTempMin() + "℃ - " + dailyBean.getTempMax() + "℃"); - } - }); + LiveEventBus + .get("some_key2", WeatherHourlyBean.HourlyBean.class) + .observe(this, new Observer() { + @Override + public void onChanged(@Nullable WeatherHourlyBean.HourlyBean hourlyBean) { + String imageName = "he" + hourlyBean.getIcon(); + Log.e(TAG, "onSuccess: " + imageName); + if (isAdded()) { + int resId = getResources().getIdentifier(imageName, "drawable", mContext.getPackageName()); + Log.e(TAG, "onSuccess: " + resId); + if (resId == 0) { + mViewDataBinding.ivPic.setImageDrawable(mContext.getDrawable(R.drawable.he100)); + } else { + mViewDataBinding.ivPic.setImageDrawable(mContext.getDrawable(resId)); + } + mViewDataBinding.tvTemp.setText(hourlyBean.getTemp() + "℃"); + } + } + }); + + LiveEventBus + .get("some_key3", WeatherDailyBean.DailyBean.class) + .observe(this, new Observer() { + @Override + public void onChanged(@Nullable WeatherDailyBean.DailyBean dailyBean) { + mViewDataBinding.tvWeather.setText(dailyBean.getTempMin() + "℃ - " + dailyBean.getTempMax() + "℃"); + } + }); + + LiveEventBus + .get("time", String.class) + .observe(this, new Observer() { + @Override + public void onChanged(@Nullable String s) { + mViewDataBinding.tvTime.setText(s); + } + }); + + LiveEventBus + .get("week", String.class) + .observe(this, new Observer() { + @Override + public void onChanged(@Nullable String s) { + mViewDataBinding.tvData.setText(s); + } + }); } @@ -271,18 +297,6 @@ public class HomeFragment extends BaseMvvmFragment stringIntegerHashMap = new HashMap<>(); WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); @@ -304,6 +318,8 @@ public class HomeFragment extends BaseMvvmFragment() { @Override public void onChanged(@Nullable MapBean mapBean) { - mMMKV.encode(CommonConfig.MANUALLY_SELECT_LOCATION_DISTRICT, mapBean.getDistrict()); - mMMKV.encode(CommonConfig.MANUALLY_SELECT_LOCATION_TUDE, mapBean.getLongitude() + "," + mapBean.getLatitude()); mViewDataBinding.tvLocation.setText(mapBean.getDistrict()); - mViewModel.getWeather(mapBean.getLongitude() + "," + mapBean.getLatitude()); } }); + } else { + } } - - private boolean isNight() { - Calendar calendar = Calendar.getInstance(); - int hour = calendar.get(Calendar.HOUR_OF_DAY); - int minute = calendar.get(Calendar.MINUTE); - int second = calendar.get(Calendar.SECOND); - return hour >= 16 && minute >= 30; - } - public class BtnClick { public void edit(View view) { startActivity(new Intent(mContext, AddIconActivity.class)); @@ -537,6 +505,11 @@ public class HomeFragment extends BaseMvvmFragment mNowBaseBeanData = new MutableLiveData<>(); - - public MutableLiveData getNowBaseBeanData() { - return mNowBaseBeanData; - } - - public void getWeatherNow(String location) { - Log.e(TAG, "getWeatherNow: " + location); - /** - * 实况天气数据 - * @param location 所查询的地区,可通过该地区名称、ID、IP和经纬度进行查询经纬度格式:经度,纬度 - * (英文,分隔,十进制格式,北纬东经为正,南纬西经为负) - * @param lang (选填)多语言,可以不使用该参数,默认为简体中文 - * @param unit (选填)单位选择,公制(m)或英制(i),默认为公制单位 - * @param listener 网络访问结果回调 - */ - QWeather.getWeatherNow(getCtx(), location, Lang.ZH_HANS, Unit.METRIC, new QWeather.OnResultWeatherNowListener() { - @Override - public void onError(Throwable e) { - Log.e("getWeatherNow", "onError: " + e); - } - - @Override - public void onSuccess(WeatherNowBean weatherBean) { - Log.d("getWeatherNow", "onSuccess: " + new Gson().toJson(weatherBean)); - //先判断返回的status是否正确,当status正确时获取数据,若status不正确,可查看status对应的Code值找到原因 - if (Code.OK == weatherBean.getCode()) { - WeatherNowBean.NowBaseBean now = weatherBean.getNow(); - mNowBaseBeanData.postValue(now); - Log.d("getWeatherNow", "onSuccess: now " + new Gson().toJson(now)); - } else { - //在此查看返回数据失败的原因 - Code code = weatherBean.getCode(); - Log.d("getWeatherNow", "failed code: " + code); - } - } - }); - } - - private MutableLiveData mHourlyBeanData = new MutableLiveData<>(); - - public MutableLiveData getHourlyBeanData() { - return mHourlyBeanData; - } - - public void getWeather24Hourly(String location) { - QWeather.getWeather24Hourly(getCtx(), location, new QWeather.OnResultWeatherHourlyListener() { - @Override - public void onError(Throwable throwable) { - Log.e("getWeather24Hourly", "onError: " + throwable); - } - - @Override - public void onSuccess(WeatherHourlyBean weatherHourlyBean) { - Log.d("getWeather24Hourly", "onSuccess: " + new Gson().toJson(weatherHourlyBean)); - if (Code.OK == weatherHourlyBean.getCode()) { - List hourly = weatherHourlyBean.getHourly(); - if (hourly != null && hourly.size() != 0) { - WeatherHourlyBean.HourlyBean now = hourly.get(0); - mHourlyBeanData.postValue(now); - } - } else { - //在此查看返回数据失败的原因 - Code code = weatherHourlyBean.getCode(); - Log.e("getWeather24Hourly", "failed code: " + code); - } - } - }); - } - - private MutableLiveData DailyBeanData = new MutableLiveData<>(); - - public MutableLiveData getDailyBeanData() { - return DailyBeanData; - } - - public void getWeather7D(String location) { - QWeather.getWeather7D(getCtx(), location, new QWeather.OnResultWeatherDailyListener() { - @Override - public void onError(Throwable throwable) { - Log.e("getWeather7D", "onError: " + throwable.getMessage()); - - } - - @Override - public void onSuccess(WeatherDailyBean weatherDailyBean) { - String jsonString = new Gson().toJson(weatherDailyBean); - Log.d("getWeather7D", "onSuccess: " + jsonString); - mMMKV.encode(CommonConfig.WEATHER_DAILY_KEY, jsonString); - List dailyBeans = weatherDailyBean.getDaily(); - if (dailyBeans != null && dailyBeans.size() != 0) { - WeatherDailyBean.DailyBean dailyBean = weatherDailyBean.getDaily().get(0); - DailyBeanData.postValue(dailyBean); - } - } - }); - } - } diff --git a/app/src/main/java/com/uiuios/aios/fragment/phone/contact/ContactFragment.java b/app/src/main/java/com/uiuios/aios/fragment/phone/contact/ContactFragment.java index 5e989a2..977a8d4 100644 --- a/app/src/main/java/com/uiuios/aios/fragment/phone/contact/ContactFragment.java +++ b/app/src/main/java/com/uiuios/aios/fragment/phone/contact/ContactFragment.java @@ -105,10 +105,10 @@ public class ContactFragment extends BaseMvvmFragment>() { + }.getType(); + if (!TextUtils.isEmpty(jsonString)) { + List contacts = gson.fromJson(jsonString, type); + if (contacts != null) { + mContactListData.setValue(contacts); + } + } + getContact(); + } + public void getContact() { NetInterfaceManager.getInstance() .getContactListObservable() @@ -62,7 +78,7 @@ public class ContactViewModel extends BaseViewModel()); } } @@ -75,7 +91,7 @@ public class ContactViewModel extends BaseViewModel contacts = gson.fromJson(jsonString, type); if (contacts == null) { -// mContactListData.setValue(null); + mContactListData.setValue(new ArrayList<>()); } else { mContactListData.setValue(contacts); } @@ -89,7 +105,7 @@ public class ContactViewModel extends BaseViewModel mDeleteData =new MutableLiveData<>(); + private MutableLiveData mDeleteData = new MutableLiveData<>(); public MutableLiveData getDeleteData() { return mDeleteData; diff --git a/app/src/main/java/com/uiuios/aios/fragment/settings/SettingsFragment.java b/app/src/main/java/com/uiuios/aios/fragment/settings/SettingsFragment.java new file mode 100644 index 0000000..877b3d5 --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/fragment/settings/SettingsFragment.java @@ -0,0 +1,315 @@ +package com.uiuios.aios.fragment.settings; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.os.Bundle; +import android.os.Handler; +import android.provider.Settings; +import android.text.TextUtils; +import android.util.DisplayMetrics; +import android.util.Log; +import android.view.View; +import android.view.WindowManager; + +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; +import androidx.lifecycle.Observer; +import androidx.recyclerview.widget.GridLayoutManager; + +import com.blankj.utilcode.util.NetworkUtils; +import com.hjq.toast.Toaster; +import com.jeremyliao.liveeventbus.LiveEventBus; +import com.qweather.sdk.bean.weather.WeatherDailyBean; +import com.qweather.sdk.bean.weather.WeatherHourlyBean; +import com.qweather.sdk.bean.weather.WeatherNowBean; +import com.tencent.mmkv.MMKV; +import com.uiuios.aios.BuildConfig; +import com.uiuios.aios.R; +import com.uiuios.aios.activity.addicon.AddIconActivity; +import com.uiuios.aios.activity.alarm.port.PortAlarmActivity; +import com.uiuios.aios.activity.contact.AddContactActivity; +import com.uiuios.aios.activity.contact.ContactActivity; +import com.uiuios.aios.activity.dailyapp.DailyAppActivity; +import com.uiuios.aios.activity.emergency.EmergencyActivity; +import com.uiuios.aios.activity.setting.SettingActivity; +import com.uiuios.aios.activity.weather.WeatherActivity; +import com.uiuios.aios.adapter.HomeAppAdapter; +import com.uiuios.aios.alarm.AlarmClockData; +import com.uiuios.aios.alarm.AlarmUtils; +import com.uiuios.aios.base.mvvm.fragment.BaseMvvmFragment; +import com.uiuios.aios.bean.Contact; +import com.uiuios.aios.bean.DesktopIcon; +import com.uiuios.aios.bean.MapBean; +import com.uiuios.aios.config.CommonConfig; +import com.uiuios.aios.databinding.FragmentHomeBinding; +import com.uiuios.aios.databinding.FragmentSettingsBinding; +import com.uiuios.aios.dialog.SingleDialog; +import com.uiuios.aios.fragment.home.HomeViewModel; +import com.uiuios.aios.manager.AmapManager; +import com.uiuios.aios.manager.RemoteManager; +import com.uiuios.aios.network.NetInterfaceManager; +import com.uiuios.aios.push.PushManager; +import com.uiuios.aios.utils.ApkUtils; +import com.uiuios.aios.utils.AppUtil; +import com.uiuios.aios.utils.DayUtils; +import com.uiuios.aios.view.RecyclerViewSpacesItemDecoration; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; + +/** + * A simple {@link Fragment} subclass. + * Use the {@link SettingsFragment#newInstance} factory method to + * create an instance of this fragment. + */ +public class SettingsFragment extends BaseMvvmFragment implements NetworkUtils.OnNetworkStatusChangedListener { + private static final String TAG = SettingsFragment.class.getSimpleName(); + + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + + + private FragmentActivity mContext; + + public SettingsFragment() { + + } + + + public static SettingsFragment newInstance() { + SettingsFragment fragment = new SettingsFragment(); + return fragment; + } + + @Override + public void onDisconnected() { + Log.e(TAG, "onDisconnected: "); + } + + @Override + public void onConnected(NetworkUtils.NetworkType networkType) { + Log.e(TAG, "onConnected: " + networkType); + initAmap(); + } + + @Override + public void fetchData() { + Log.e(TAG, "fetchData: "); + } + + @Override + protected int getLayoutId() { + return R.layout.fragment_settings; + } + + @Override + protected void initDataBinding() { + mContext = getActivity(); + mViewModel.setCtx(mContext); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); + mViewDataBinding.setClick(new BtnClick()); + } + + @Override + protected void initView(Bundle bundle) { + NetworkUtils.registerNetworkStatusChangedListener(this); + initView(); + } + + @Override + protected void initData(Bundle savedInstanceState) { + LiveEventBus.get(CommonConfig.AMAP_LOCATION_MAP_BEAN, MapBean.class) + .observe(this, new Observer() { + @Override + public void onChanged(@Nullable MapBean mapBean) { + mViewDataBinding.tvLocation2.setText(mapBean.getAddress()); + } + }); + LiveEventBus + .get("some_key1", WeatherNowBean.NowBaseBean.class) + .observe(this, new Observer() { + @Override + public void onChanged(@Nullable WeatherNowBean.NowBaseBean nowBaseBean) { + mViewDataBinding.tvTemp.setText(nowBaseBean.getTemp() + "℃"); + if (DayUtils.isNight()) { + mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather_night)); + } else { + switch (nowBaseBean.getIcon()) { + default: + case "100": + case "150": + //晴 + mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather)); + break; + case "102": + case "152": + //少云 + mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather_rain)); + break; + } + } +// mViewDataBinding.tvWeather.setText(nowBaseBean.getText()); + } + }); + + LiveEventBus + .get("some_key2", WeatherHourlyBean.HourlyBean.class) + .observe(this, new Observer() { + @Override + public void onChanged(@Nullable WeatherHourlyBean.HourlyBean hourlyBean) { + String imageName = "he" + hourlyBean.getIcon(); + Log.e(TAG, "onSuccess: " + imageName); + if (isAdded()) { + int resId = getResources().getIdentifier(imageName, "drawable", mContext.getPackageName()); + Log.e(TAG, "onSuccess: " + resId); + if (resId == 0) { + mViewDataBinding.ivPic.setImageDrawable(mContext.getDrawable(R.drawable.he100)); + } else { + mViewDataBinding.ivPic.setImageDrawable(mContext.getDrawable(resId)); + } + mViewDataBinding.tvTemp.setText(hourlyBean.getTemp() + "℃"); + } + } + }); + + LiveEventBus + .get("some_key3", WeatherDailyBean.DailyBean.class) + .observe(this, new Observer() { + @Override + public void onChanged(@Nullable WeatherDailyBean.DailyBean dailyBean) { + mViewDataBinding.tvWeather.setText(dailyBean.getTempMin() + "℃ - " + dailyBean.getTempMax() + "℃"); + } + }); + + LiveEventBus + .get("time", String.class) + .observe(this, new Observer() { + @Override + public void onChanged(@Nullable String s) { + mViewDataBinding.tvTime.setText(s); + } + }); + + LiveEventBus + .get("week", String.class) + .observe(this, new Observer() { + @Override + public void onChanged(@Nullable String s) { + mViewDataBinding.tvData.setText(s); + } + }); + + } + + private void initView() { + initAmap(); + setTime(); + getLocation(); + } + + @Override + public void onResume() { + super.onResume(); + Log.e(TAG, "onResume: "); + mViewModel.init(); + registerReceivers(); + String district = mMMKV.decodeString(CommonConfig.MANUALLY_SELECT_LOCATION_DISTRICT, CommonConfig.DEFAULT_LOCATION_DISTRICT); + mViewDataBinding.tvLocation.setText(district); + } + + @Override + public void onPause() { + super.onPause(); + unregisterReceivers(); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + NetworkUtils.unregisterNetworkStatusChangedListener(this); + } + + private void registerReceivers() { + + } + + private void unregisterReceivers() { + } + + + private void setTime() { + long time = System.currentTimeMillis(); + SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); + Date date = new Date(time); + mViewDataBinding.tvTime.setText(sdf.format(date)); + SimpleDateFormat sdf2 = new SimpleDateFormat("MM月-dd日"); + Date date2 = new Date(time); + mViewDataBinding.tvData.setText(sdf2.format(date2) + "\t" + DayUtils.getWeek()); + } + + + private void initAmap() { + boolean manual = mMMKV.decodeBool(CommonConfig.MANUALLY_SELECT_LOCATION_KEY, false); + + if (!manual) { + LiveEventBus.get(CommonConfig.AMAP_LOCATION_MAP_BEAN, MapBean.class) + .observe(this, new Observer() { + @Override + public void onChanged(@Nullable MapBean mapBean) { + mViewDataBinding.tvLocation.setText(mapBean.getDistrict()); + } + }); + } else { + + } + } + + private void getLocation() { + String addr = mMMKV.decodeString(CommonConfig.MAP_ADDRESS_KEY); + if (TextUtils.isEmpty(addr) || "nullnull".equals(addr) || "null".equals(addr)) { + mViewDataBinding.tvLocation2.setText("获取地址失败"); + } else { + mViewDataBinding.tvLocation2.setText(addr); + } + } + + + public class BtnClick { + + public void toSn(View view) { + if (!ApkUtils.openPackage(mContext, "com.uiuios.sn")) { + Toaster.show("打开失败,请检查应用是否安装"); + } + } + + public void addContact(View view) { + startActivity(new Intent(mContext, AddContactActivity.class)); + } + + public void openWifi(View view) { + startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); + } + + public void openNetwork(View view) { + startActivity(new Intent(Settings.ACTION_DATA_USAGE_SETTINGS)); +// startActivity(new Intent(Settings.ACTION_DATA_ROAMING_SETTINGS)); + } + + public void toWeather(View view) { + startActivity(new Intent(mContext, WeatherActivity.class)); + } + + public void getAddress(View view) { + AmapManager.getInstance().startLocation(); + } + + } +} diff --git a/app/src/main/java/com/uiuios/aios/fragment/settings/SettingsViewModel.java b/app/src/main/java/com/uiuios/aios/fragment/settings/SettingsViewModel.java new file mode 100644 index 0000000..938043f --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/fragment/settings/SettingsViewModel.java @@ -0,0 +1,29 @@ +package com.uiuios.aios.fragment.settings; + +import com.tencent.mmkv.MMKV; +import com.trello.rxlifecycle4.android.FragmentEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.config.CommonConfig; +import com.uiuios.aios.databinding.FragmentSettingsBinding; + +public class SettingsViewModel extends BaseViewModel { + private static final String TAG = SettingsViewModel.class.getSimpleName(); + + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + + @Override + public FragmentSettingsBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } + + public void init() { + + } + + +} diff --git a/app/src/main/java/com/uiuios/aios/manager/AmapManager.java b/app/src/main/java/com/uiuios/aios/manager/AmapManager.java index 131da95..ac4cb7a 100644 --- a/app/src/main/java/com/uiuios/aios/manager/AmapManager.java +++ b/app/src/main/java/com/uiuios/aios/manager/AmapManager.java @@ -128,7 +128,7 @@ public class AmapManager { mMapBean = getMapBean(aMapLocation); saveMapResult(mMapBean); LiveEventBus - .get("MapBean") + .get(CommonConfig.AMAP_LOCATION_MAP_BEAN) .post(mMapBean); Log.e(TAG, "onLocationChanged: " + aMapLocation.getAddress()); sb.append(aMapLocation.getAddress()).append("\n"); diff --git a/app/src/main/java/com/uiuios/aios/manager/AppStatusManager.java b/app/src/main/java/com/uiuios/aios/manager/AppStatusManager.java index f8096c8..590b125 100644 --- a/app/src/main/java/com/uiuios/aios/manager/AppStatusManager.java +++ b/app/src/main/java/com/uiuios/aios/manager/AppStatusManager.java @@ -8,7 +8,7 @@ import android.content.pm.ResolveInfo; import android.util.Log; import com.tencent.mmkv.MMKV; -import com.uiuios.aios.activity.main.OldMainActivity; +import com.uiuios.aios.activity.main.deprecated.OldMainActivity; import com.uiuios.aios.bean.DailyAppBean; import com.uiuios.aios.config.CommonConfig; 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 45f8b86..16dc2ac 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 @@ -5,21 +5,33 @@ 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.IBinder; import android.os.PowerManager; +import android.provider.Settings; import android.text.TextUtils; import android.util.Log; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.WindowManager; import com.arialyy.annotations.Download; import com.arialyy.aria.core.Aria; import com.arialyy.aria.core.task.DownloadTask; import com.blankj.utilcode.util.NetworkUtils; +import com.shehuan.niv.NiceImageView; +import com.tencent.mmkv.MMKV; 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.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.utils.ApkUtils; @@ -48,8 +60,18 @@ import okhttp3.RequestBody; public class MainService extends BaseRxService implements MainSContact.MainSView, NetworkUtils.OnNetworkStatusChangedListener { private static final String TAG = MainService.class.getSimpleName(); - @SuppressLint("StaticFieldLeak") - public MainSPresenter mPresenter; + + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + public MainSPresenter mPresenter; + + private boolean mFloatWindowEnable; + private WindowManager mWindowManager; + private View mBallView; + private WindowManager.LayoutParams mBallParams; + public boolean isBallShown = false; + + private static final String Float_Window_X = "float_window_x_key"; + private static final String Float_Window_Y = "float_window_y_key"; public MainService() { @@ -106,6 +128,11 @@ public class MainService extends BaseRxService implements MainSContact.MainSView // ApkUtils.UninstallAPP(this, "com.joytv.live"); // ApkUtils.UninstallAPP(this, "com.tencent.android.qqdownloader"); + mFloatWindowEnable = mMMKV.decodeBool(CommonConfig.FLOAT_WINDOW, false); + mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE); + showPopupWindow(); + + Aria.init(this); Aria.download(this).register(); mPresenter = new MainSPresenter(this); @@ -113,10 +140,12 @@ public class MainService extends BaseRxService implements MainSContact.MainSView mPresenter.setLifecycle(lifecycleSubject); NetworkUtils.registerNetworkStatusChangedListener(this); mPresenter.addAlarmClock(); + registerAlarmReceiver(); registerTimeReceiver(); registerLockScreenReceiver(); registerRefreshReceiver(); + registerScreenLockReceiver(); } @Override @@ -142,6 +171,9 @@ public class MainService extends BaseRxService implements MainSContact.MainSView if (mUploadAlarmClockReceiver != null) { unregisterReceiver(mUploadAlarmClockReceiver); } + if (mWindowReceiver != null) { + unregisterReceiver(mWindowReceiver); + } } @Override @@ -455,6 +487,158 @@ public class MainService extends BaseRxService implements MainSContact.MainSView } } + public static final String ACTION_FLOAT_WINDOW_ON = "com.tt.float.window.on"; + public static final String ACTION_FLOAT_WINDOW_OFF = "com.tt.float.window.off"; + + private WindowReceiver mWindowReceiver; + + private void registerScreenLockReceiver() { + if (null == mWindowReceiver) { + mWindowReceiver = new WindowReceiver(); + } + IntentFilter filter = new IntentFilter(); + filter.addAction(ACTION_FLOAT_WINDOW_ON); + filter.addAction(ACTION_FLOAT_WINDOW_OFF); + registerReceiver(mWindowReceiver, filter); + } + + private class WindowReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + Log.e(TAG, "onReceive: " + action); + if (TextUtils.isEmpty(action)) { + return; + } + switch (action) { + case ACTION_FLOAT_WINDOW_ON: + mMMKV.encode(CommonConfig.FLOAT_WINDOW, true); + mFloatWindowEnable = true; + showPopupWindow(); + break; + case ACTION_FLOAT_WINDOW_OFF: + mMMKV.encode(CommonConfig.FLOAT_WINDOW, false); + mFloatWindowEnable = false; + if (mWindowManager != null && mBallView != null) { + if (mBallView.isAttachedToWindow()) { + mWindowManager.removeView(mBallView); + } + mMMKV.encode(Float_Window_X, mBallParams.x); + mMMKV.encode(Float_Window_Y, mBallParams.y); + } + isBallShown = false; + break; + default: + } + } + } + + /** + * 显示弹出框 + */ + @SuppressWarnings("WrongConstant") + public void showPopupWindow() { + if (!mFloatWindowEnable) { + Log.e(TAG, "showPopupWindow: not enable"); + return; + } + if (isBallShown) { + return; + } + if (!Settings.canDrawOverlays(this)) { + return; + } + mBallView = setUpView(); + mBallParams = new WindowManager.LayoutParams(); + // 类型,系统提示以及它总是出现在应用程序窗口之上。 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + mBallParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; + } else { + mBallParams.type = WindowManager.LayoutParams.TYPE_PHONE; + } + // 设置flag + // | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; + // 如果设置了WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,弹出的View收不到Back键的事件 + mBallParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE + | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH +// | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS + | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL; + + // 不设置这个弹出框的透明遮罩显示为黑色 + mBallParams.format = PixelFormat.TRANSLUCENT; + // FLAG_NOT_TOUCH_MODAL不阻塞事件传递到后面的窗口 + // 设置 FLAG_NOT_FOCUSABLE 悬浮窗口较小时,后面的应用图标由不可长按变为可长按 + // 不设置这个flag的话,home页的划屏会有问题 + mBallParams.width = WindowManager.LayoutParams.WRAP_CONTENT; + mBallParams.height = WindowManager.LayoutParams.WRAP_CONTENT; +// mBallParams.gravity = Gravity.TOP; + int x = mMMKV.decodeInt(Float_Window_X, 0); + int y = mMMKV.decodeInt(Float_Window_Y, 0); + mBallParams.x = x; + mBallParams.y = y; + mWindowManager.addView(mBallView, mBallParams); + isBallShown = true; + } + + private View setUpView() { + View view = LayoutInflater.from(this).inflate(R.layout.window_float_ball, null); + NiceImageView iv_ball = view.findViewById(R.id.iv_ball); + iv_ball.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Log.e("iv_ball", "onClick: "); +// closeToolWindow(); + Intent intent = new Intent(MainService.this, MainActivity.class); + intent.setAction("android.intent.action.MAIN"); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + startActivity(intent); + } + }); + iv_ball.setOnTouchListener(new View.OnTouchListener() { + private float lastX; //上一次位置的X.Y坐标 + private float lastY; + private float nowX; //当前移动位置的X.Y坐标 + private float nowY; + private float tranX; //悬浮窗移动位置的相对值 + private float tranY; + + @Override + public boolean onTouch(View v, MotionEvent event) { + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + // 获取按下时的X,Y坐标 + lastX = event.getRawX(); + lastY = event.getRawY(); + break; + case MotionEvent.ACTION_MOVE: + // 获取移动时的X,Y坐标 + nowX = event.getRawX(); + nowY = event.getRawY(); + // 计算XY坐标偏移量 + tranX = nowX - lastX; + tranY = nowY - lastY; + mBallParams.x += tranX; + mBallParams.y += tranY; + //更新悬浮窗位置 + mWindowManager.updateViewLayout(mBallView, mBallParams); + mMMKV.encode(Float_Window_X, mBallParams.x); + mMMKV.encode(Float_Window_Y, mBallParams.y); + //记录当前坐标作为下一次计算的上一次移动的位置坐标 + lastX = nowX; + lastY = nowY; + break; + case MotionEvent.ACTION_UP: + + break; + default: + } + return false; + } + }); + return view; + } + + //在这里处理任务执行中的状态,如进度进度条的刷新 @Download.onTaskRunning protected void running(DownloadTask task) { 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 c16d0e8..8e0c044 100644 --- a/app/src/main/java/com/uiuios/aios/utils/ApkUtils.java +++ b/app/src/main/java/com/uiuios/aios/utils/ApkUtils.java @@ -22,7 +22,7 @@ import androidx.annotation.RequiresApi; import com.hjq.toast.Toaster; import com.tencent.mmkv.MMKV; import com.uiuios.aios.BuildConfig; -import com.uiuios.aios.activity.QuickAppActivity; +import com.uiuios.aios.activity.quickapp.QuickAppActivity; import com.uiuios.aios.bean.DesktopIcon; import com.uiuios.aios.config.CommonConfig; import com.uiuios.aios.manager.AppManager; @@ -163,6 +163,7 @@ public class ApkUtils { }}; private static List hideApp = new ArrayList() {{ + this.add("com.uiuios.sn"); this.add("com.uiuios.aios"); this.add("com.uiuios.appstore"); this.add("com.android.quicksearchbox"); @@ -373,12 +374,12 @@ public class ApkUtils { resolveInfos.add(resolveInfo); } } else { - if ("com.uiuios.sn".equals(pkg)) { - resolveInfos.add(resolveInfo); - } else { - Log.e(TAG, "getAppstoreAppInfo: pkgSet ! contains " + pkg); - AppStatusManager.getInstance().addHidedApp(pkg); - } +// if ("com.uiuios.sn".equals(pkg)) { +// resolveInfos.add(resolveInfo); +// } else { + Log.e(TAG, "getAppstoreAppInfo: pkgSet ! contains " + pkg); + AppStatusManager.getInstance().addHidedApp(pkg); +// } } } else { if (allPackages.contains(pkg) && !excludePackageName.contains(pkg)) { @@ -528,6 +529,7 @@ public class ApkUtils { pkgContext.startActivity(intent); return true; } + Toaster.show("应用未安装"); return false; } diff --git a/app/src/main/java/com/uiuios/aios/utils/DayUtils.java b/app/src/main/java/com/uiuios/aios/utils/DayUtils.java new file mode 100644 index 0000000..5a4e52e --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/utils/DayUtils.java @@ -0,0 +1,29 @@ +package com.uiuios.aios.utils; + +import java.util.Calendar; +import java.util.Date; + +public class DayUtils { + public static boolean isNight() { + Calendar calendar = Calendar.getInstance(); + int hour = calendar.get(Calendar.HOUR_OF_DAY); + int minute = calendar.get(Calendar.MINUTE); + int second = calendar.get(Calendar.SECOND); + return hour >= 16 && minute >= 30; + } + + /** + * @return 根据日期取得星期几 + */ + public static String getWeek() { + Date date = new Date(); + String[] weeks = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + int weekIndex = cal.get(Calendar.DAY_OF_WEEK) - 1; + if (weekIndex < 0) { + weekIndex = 0; + } + return weeks[weekIndex]; + } +} diff --git a/app/src/main/res/drawable-hdpi/home_family_space.png b/app/src/main/res/drawable-hdpi/home_family_space.png index f22cdf8a9abfcdfaa60e961192e871bdae897c05..cba1fd7d665c3b619968ec7adb290c048a847064 100644 GIT binary patch literal 87986 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%0AU82 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 ?Y35m`tOVfdq5vfLYK2^E=?? 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

3b`B~U%Zw03Gymc1CxfDK?Gw2BhN^Hx(-@UO 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/home_icon_app.png b/app/src/main/res/drawable-hdpi/home_icon_app.png new file mode 100644 index 0000000000000000000000000000000000000000..ab0ff10e94b20328ec37514c43c9851102a15962 GIT binary patch literal 5293 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/home_icon_clock.png b/app/src/main/res/drawable-hdpi/home_icon_clock.png new file mode 100644 index 0000000000000000000000000000000000000000..3caa76158c346ab8a29b2ff71949fe7c7d564b2c GIT binary patch literal 4872 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/home_icon_flash.png b/app/src/main/res/drawable-hdpi/home_icon_flash.png new file mode 100644 index 0000000000000000000000000000000000000000..bf6975bd03f891ddf222a06bbe5965b8821be6d9 GIT binary patch literal 3398 zcmaJ^c|6nqAD<&?;pQ@pU3C(z8R(G z^1Ckn&KeZPV$tD7MzOK6hOs7wGzQ5C41>WoIUo=NzJviYp31_-8Bm$(KNt{1CZ0j2 zv&b|maFY=iLW^cugZP&I?E;1Vla|W-9wvUkjN))~Be0?Irb|Br(dhp#N}>FeX0kkq z|JeIKiJ9K#KV5PLfa)C7h=g29eRdvhe%&H@3m zGj(tHbiQT;kwK0j5|9iU1^CTnIQiGMKz_;h z9ZUGNEhfLj8u5)W+Dz=f68+qe>DY zC!nCD9@o-W5pmC+bB>+FR%iQ!$#rpE$RkNE z2RjfPG~1_k_c@RWIvN3@OEt^;kKW8ojZsyU}rY9p6ns zW}EuJ#%r7?loLzqGJ2SI+fmZ#YEiRJ=+w4b?DR{9ne06^R|(G}b;893v86Xp?#RYA zTTHn-7)wm;aDrxQj&@P5sEDOn)WHI{uaOISSCqsGT6>>c-_H-}j5{j%Q4j~JnU>ak z?BDI@p;xjkDs-*7eK>nps#rV~$|cN4Xif@&2<0#HT{u<)BJVVe+&N@+riVgFL8knf z3|>OovEquY(;XJPavayJRO>d-Ogh_i2`U9Z0u9S^v0dWK!PKZMRF|Xv!yo{%Ks|(5 zCVe}&4#9C95Kwfj$TF3T28fs(Y;SWF35FIR^!0lMj)j)WnF9U-+=yxeeroJodUx#H z>#4a)TVFp963r+_kh{dy7;rDyx;@HEpqw&j{|HK3~b~Db7dg zeHIe|78>@+$@z=~WIJnbZSQlMyPXn#J|IFM0RJA8<(HBF>Oo0n1-f$iqH4m`Wvh0G zr88!)^@Vs*w6jZvObxUzyD+qW=9OpRWZ9dIL$%a}cIWzA9N|j){&l>v^lC?4z$&ke zS8u>nT`Ndr>S?)wM~}<~7BTyKPK?`hjO(OewcZ>#lUpdd^fc(;DSTDZVaDtP+4n)* z;PO<`E!i#(G(M?{Qc!T}>v6ION%)MWXCaE@g1CG)4Ev7S}GD`vY5Bzo}N}q8(H2jd@@?cHv&)aVhVMNd$((lQjA=(M84W7jv< z^Wr7L!s`;^mng*-we-}D$h)pj+F}gPo~ZRTDqGbrPFsE)*t>L~6SFto^rB$--pQa1 z;>Kvo$*-qdM;=t#q13p)ZN$X%O?{kvky&gI@LIu9a!ibB)n$65#GB#uW#Tlo4qjM1 zIzPocU8N*Z(~fYVTa>PkKC)4pscmKTH&&u@ua1Zm2piZoztBCj+uAG0C2{ru=;^4C0>kJ#x>HB`2Ik3z0*V#(GXdBH6CoQ3Ys zfo0~Vdjvwx${-IEs&qhesMD}dv(V%q{&)!6+Jj~bA%ROQrgxp&3*VV zchINeFy{yqbECokL#hO7S)y21NBR$!V@fNJ--DJUUTujNo)&%cwsmZk+srnM9Z$h7 zwD0~H&Ehn5)_>XiWqFe4f30wQSm?6b=^f`7)$T);)#W^2!&?o!@P(CknOe$eaUYg+ zHmvls~`%}qRN%Q&-Ad{!yqwRS_v+qfmKzud-Wa<#OZAEY0Si+PH)}Mik3!as zB(tB+C|QnVYo0jJISJ<4`zl)Xzu+D`Hv>!e-ql=XvUKt=8ZMw+P*!rEJ^;8g1$(>un1i_eqH{!Ua-n_N zUFVUxvrbI{a~DKpQ6{EOYWw~26r?u}&xfna*94(r%h8A^y6!QyOf9skQKhjn0tNKl zAs(Z~O$L}82Nq(|ZfWZ8q)De^0epI{EAzOcT@BY=A*;L~xC{7Eda2A<7Ns^-iSeQw zR3Pk5!4~EF4bD7hITKoOx%aC$dEJ)e=Hi62PdWL?`14zK&q}eKE9?0uSttGURPS#l za{(z>K!`xrmVf(D_%+jVPvP3T8~0=P=@)n;mvwC)7vQ=g{SK+k*c?)6=sD9f3weRE zz#pxiz|UC4W;|0-9X3u9L8CBQwRt}4$}aGPM4i_6yJo7JgQs$1Ig8T#7)PbMwND~c zQtq&Fu#_u8#%HCsO+h9BTi@nn`Q*X@=~v~sy6&RE#?)=s6!|T{OCw}0vp>@xkS=>B zFBd!WL3BV!@wb};X3%}BJ0}IUw$1hBV`=mR54nc0R?5C^vY_MFI*m+;faiSAWv5Gr#ov9R~&eTZtgr{g4L z2YA_z&rvVpZ7+h!FkC!P#`aaB^5)u}Tw$fsjqMX+;o*sSQIEAT`9WM^8IsUM&y{LQ zeDHNP!q!zSD+jRQXQ_6>WnowjW8nLRu z5+X^G3|`!8kY6z;sZ5BMSL^tONS*9CP#(~G%WXMmyYAR~zhU=bM)_EGk;k=1%03W3 zm|B-&2LvNH+%<4NU8a~mR&i(B61>a?>w7-?F{TT(ws{MRt6R-d#&}y+3Q4WYbp~H&=X)_U=XXSDC*viIe#Aj-u?U4 z4?Dj5fesBbM(d$$(VlQu1csaq$_fEgb%NU=bP;eH@0Z^ZQWzN6AP0S8w6Vrhh&9TI zAO07^@8#rjuZ@8rCFA7+w?-n+Kr4iugEJJg-_!;II@mx#Mxq*E4HpH3y@QI6D?-ml zQ{UPLX)R#`l92{Vc|q<8oDgU@(97wCvm3+<3i=l>Agko&f)Sf$puj+So#L z6_x&N>wX3W*`v`e5CH*CPfvbNVSbdWoq(W(gv4JCAtAnd1fQF?GaBy2=j_Jz4}&7Y z&Dzz$1?_-x2L5G)TcO<1P|&@n|FZ=rm;cZ@yZt*%_W={|g1ZO^@`L|w=^vnm#{VDc z0EBn}1(Dk+Ky%ZrPEl_Z1|{?S!LS-U$SoYDX2+WfCB?7!;%Ed?i+d&`OlR|gM- zjgl+M3HYxqLmd9QFY^DD@87yM|J@gb|Eeo+?~K6T#QtB2{%7gFdj5+4Dck$We+nPr zd|&OZ_hs$LsIrEELA$D|D5vi=vtx#jHh|Sb>C7pBVG{WGswzQYv=L<8;9jobD24np z6r=RUUH!~Wo$2cFx3k%Lr?Ow&rA)0;^&yQJWcsp1)+zXI0Cx5`Oci-sELKb*&)sEQ z;p44V-~F-&b(0X}7oz>vtF1lX4@0GH9$&^LCm(|EDiHdYtgTcou)ff2=Z=OL)koo&ApaETj~!N9XU7356FI(`x2Y|?Q7P7C z>UFp^6_sajm~^IZlny7%k6Kv=J?SHW|kvukEYxDejH1Z?R!DFF1hj;sDWnj&qb~tk1Qv@!)o9 ztlPwATB5cDko@9A(_IP|o|+5Ca!R63zct+Adgb{>=}==e~*aa5uFq+1e=v8 zC=-rPOf;}8SJD0$9}g!u>Ps=pX`VZF#4vpzPP10oY%#kr)4~QlG3F(X9x)_{wmLTW z#ay)Cs-_=09YKSGsW2{H8-5p%S#`>^!Wczvjc1bER?@@?+ z@}*&_RTPmU^sCM36RhfT2M@-vwX|w zNM>C9Ak)8jW33eX=>>7kI#JPGpj$fsq`c1qYl@k+M~FiPx- zkI^^$W|G5QTCwY-7L&bG6?6cPxO0oEyT3T+AR#PRGw^nA2#_ofG zuRdhJ*)Bg_5#>g41*V%PJYadfIxk}?#%QGX$@a%&hdiN0%FyJK`nOv^It#ZEeRFGXLt62q$P(S5N1=HW%SB$m7TDH>E4S7D(w zdN#O;uF8v{;mf&oS+2#rULD5H_WP7x-?xe1U%(D5nuiGteO{|A!|i#qrblP`s8gX2 zM_>C9(?Fp^4IX{9U2{UbcIT$CG?rtk2i1$NYK|sE`kVd&HN|6xWL(A=zi!I~wknas zB$v`XRURzRjDc@qH`d5u821eoX1b#Mi|=mhZ7_!FH9h<2yYqQ*2LhWyU`}#!xN-r( z8hmRYI3|dAV`*DM+N_!K@l!?nJ7(RvNXqDq#u-S~!_g*!X)b+(32nZn^}c>l{qMI; z){nGW-|npK^)+;6Jr(*AUw7sja6dy1)t=w91mLF|LiOIm`>`rjAw;9de zL-_K|8>a8Y^RvR-+3}Uv@`$Fp*2YV_4Dp`Ggr;w|Vy;v#Y_Y{D7 zy0ws>-xX+an|l0Hzh6Z`mZ6azhDP8G zpG?Q6x!cu(BsPf(IoH*X2MR&Jq6jImn^VD3o1610ER#B^=r_z_fzYu1Ft|y;L6xzz zL3;2_la^{7bz&uuihN~wsoMuvzl-!4GqV@Zmxo2>Yw4&{kl-pCLk(J zJb%J!gTXtXgC3H~YFB!>=ahPK2_7cHd|oe5X5H*fzcBFL^*wZ>M&_P-vhep4Vkat~Qt4T=zPI zZojSSwX5cA1LxQEDoHlBg58)dXPh(m$h#8U!krpz7TNgFELo<^;^go@r+JU22gk$v z`gkt>zo@oe6#TMge2Jo%m; zF4Mrx|GM?uOW@-|JQ+gw53aRcL4HKQRH6mPjE3~dZl0*?&l4AdjnUH?B;6Xm&M1Ho ze_QVT^!o5-L{k4L^36+9he>*8Woj7luExV6BC=~H=jwNF6&xK%?6bedQq0yWKbwq1 zp&GV*N2)Joiys~3Vfy;GwMhCNDLCiYV>}gWtMETNCV)9;( zqPKEugaXR2_tw7~zcTsdW2ZrHE$4WEG64F7suvVcuV$U66s3wmxrsn=BTM@rd^3$*~{Q z*IUx&gw6Trx2hGH8qT;u-B@CaxQVa*K@&Nn969yxH~!1j$0Vii1T9#|Pz$|NtOPk~$7npMg#yz~@AZ_d_JEJ}m4s=&)+iFUa}c00kW^YMX_6}jV|)%+(ITwe)kq2D z`INxs-ONjrMTbD1;u(Qy)nv;h0|rB4$n!(L%swH=<2c=r__Cj?^HVWIoc6(1r7!LW zi*`bl>xIjHxyA*;i6}5eURL_DuETcs!y#o^-nhF@_B`Rl;Q9f^SqnOcaQW;G=MZQX zHn~mrA*iw|_EKJe8hnbsXKN%t2nrNYj`liwPuERNyZG6}%Pw~ONj8%UKh}aQg z_NM^(5JUF!j*FHw!+}K6+NBXYFUzhZqy;gb$mK4pH5qx+tlqii$ z=`|r020Dp+3f$4Fee ziD9K-aOoKkX2gs=(+)j2uaa+4D*+R}xa2n25Ed^rQ(UO{P(72%lI!-6Y)~CU)swfd zKc#cU5b~xtrZCFSuQ`nK?ba3qCfk#nrI?h)g(j2JX}ux5mZ$z4HFnp5?eTCUG``@& zYB#$jbn4L}f1}4kqzlD&fqGo84OdJFA{$c0Bm$x2S&KWQtdeZJy{SIUH}zt+W(dB% z(d78J&NtlI^rOte>DxwjpyT;4$bk}b1k+ByrTK%(A#QE@55fXNh(|3K7KDHdheqPJ zk^Y_nDV5%f9qaTVL)l0Z#kTJ9u(nb1;cqzKd0|IzLxsm8BmLfPzl#M6BS_v0<$(J|lVP7QlJF4dG z!n7Rj1B>q7E=`O)#z~dd~cETA*U0wk}A`dWui=HRU?g!mKnTuvN z@9OG}y(baF@GGAO9wXNbFD>$T4C6z68I&Le02m@2HcnCf}8lk8cgwWjNRog22L5yr+O>(LD zK0-xxh&*2W2rg0-{~J3d{BR5=j7@xUTx}K87w3ZEwhPQKAq-|b9+Nx)GmA_UHFB`k z<*&v=@ngTlqFay1-WoX%>Is=V8jVzmI3sS~nUTpLy~t0GL$+v54{s);Dalv&4_YnR zGiAI3ix1W#zE17?k7%`co6$dsuNr+wlDHG`XXR_oG?vvgBl)GzXcDp2O&Jir7EM7f%=*;6>8XHhOJKg`iZ9|j`9LCvqH3gI zw`aiRTbw>|b6))cU$cjwFlouq*Zb3{u)RHJ`Q6vUNa?hc$K@@Nl|mU0i0Vp7mW@P8f!&@psY-!jnP8mXw`etSpwbUF(YOSQHqLN!<8!v% znWCF^+6@J^Y#uE3&!qT8UX@oOu~S`ax%0Ru`g8skME-Rz+Sc|JLDYEekv8|3f5hk&d*qp;_? zI30A3!g_Dl`g_~d9H2l-soiP&NuKK|`umg7XUyIf_&!Z0vh_Ceg3xtu4$<1GaIAy> zs`GTAQ-18#&wz>)alQ-zJATzExkr4M%CGBC=_FZOrRzl_*;(d=>Yk>*-9bdNG2F^W zL@bfB`^;7iahyK7WYBa2(E5oS;9Xx8q$FAXh=?6+nDfqlXb#@^T>Yc}ABK=1LAFrz zY%1XGNq!HF=GwZAIMqcF@i6=01T|jINqlv%sv6dtsNJ&dQ|+CDx&E4x$k4F^Sg?=6 z7}FMhxdH4gw22izD*PrWxCPzDAETP>@4yLr3wW30C4N9=PU^tU2KKO$fwdz^C`_-u ze5M`Mi@e3pz>N&6d;!>cMYBTVH*ZI&eH-Ck1z0{V#!^74|W2$RbH?^yaoG=UK?4Bppe5H1@Pud4aC% z+9y{#`)!kc&Q))?-dhnUdCnAUl9RNNW>`nQXNQYtUMrfA%e?yCo6Fc}ti#8?9gIB1 z-y9OnmJ@H0#N1W;j{Y>faR~QF3^y}E%C4*{>dR?7dwaJ3ojAw_57MI+!*jkMROCp> zDbkCr02=HX?F@exr*uSmu*9royZWJ{3yTsn@GPh@4S7C*5kqPzhnJbS1dv@cD}K`!~1G{urt#47g*25+V7~t zdEpftr+Re?)1E4>7rb@Q(J)>6ip>rYT6^DXnp0BFU>+3&y(rPjRUl@@*m|yKr*v>* zsjT8!tJLhopyhI?zQU*@Eo1c*K=TJ(r?=ArpGh1%7L`q__*@@!DPA#pcpIkooWyxD zDc0~uf`U1!a|}}i?kW?>{(8hH5$4XOX-(mgONxBKAqNrpi!gI$upZ{!o;Fw7w z;qh@k-}_d<`J_!+JzBL79!`T}?5#ET2NmZgB*0ztr6ifT*2-eWNv*uIMPOrgKjGW- zv5y)zPR&uMmS)u%hX%m{r>7{Arv|I527ZC{RVfG|h7}H!Q*majU!L+y(THzdnc0pu zYKnaTtk)^(G(3oW%#k0yM&ZCAdut&y=!@nlKpw}@b#AQAf~EBIVo%PGoLexX5=N#Xt8Xt%g@I~U{@aq2_rkEAmEKYh$kX#Tdao;@5Bf}XmxL*~&CL0&=S^WLS zGc^E^^Bzd!+Y!GbQ&d)EkFPRg^;R5QLg?)kg`!^qOe0u00oh^R*h>ttANq)ELszp| z7S;Z61&7RB*M(Sf^^ezx+Q48`h{EIzW(^BF6->;Rt^`9{C--ep$gmuzI?c2@jtl=o zWV_TVE*0a_O*?e*zDLbUnv&D4(6J*UetkiMC>cn=|{@c$L1Mk!PqQ?xL96RTtjpbxS zYPM?_Q+yEA1q0Mm|ICgtV+P9zJvOv1%n^>Mn9DP!HEW3v64nYbM`H=6sE%BO2xZ25><@aU$cLdLv|@7Tch?FT{q;V5Og3v;J^ zmZ_gK&0*6{1Ns_YLMkwfoUK<(T`L0Zk=B>=w&F6kECY_?=RCE+CXbb^=q@Ivjxast z4DTYQ32e25(iJs<+eMZH!w1#j)9JBZ+lta9FeYT?_^|R((75oK-jBryMLgk+0sro( z2J?R0op?J_R2|UPI`wspi3s;#>Nb@)KV`Ame(emu?ey7mZBl>Px%NrJE{A~I0r?b| zAfYvN`@oOOCjhul{MW7PC*nDMIH}L{zbjlkGy$nF=cBk%=`Qt;D*{Jx?-|MMWizrTf`-FDv#LJw&@4^3Aa z4{vjjHI%rOtA#a%ytBEjwT891m9N{lwGb2(ES0^Mo`;^Yl7OYFGpqSOG^{?(z<2I< z7*QXfxuv7E2Ze>Tt-Xsd)kSA76@|T(FqJNkGP^QR(%Q~m&JSd*>8GM)>E~z(u%Z$b zp%C&Bcn5H{_AsaLadvWX7w{3L`WLRid;OnoHY$pLk$5-?Q~j4xddg}PlCB_Y3LaK2 z7E5*x4hmjgRt|0+US1An3Ql$oPB!-Uo0o-yTY!gGfRm5nzb~qHX&@^b0Szgc|CaUM z5~i~A@Bj+1v3YxYvwCx}x`J%kH~;{^KNy^xEbkO7?!GP_<~}Sg?$rNAkg|5S1la>U z>|I?b{y{XiaP{;Mrh3=(zlPup{2y2s_y0E2yTRCe%zEDFP%Kv{-XXpQ+ zcK6V*{$G9npTO=~zCdd>4QqE-Pmtxi<7}w^5d{>G1X-JVxPr7?U7h}IMKwED4_9|P zS0II?CNBlOuDy$utG7GDzvz{f1>{}aJvYJsooJ-?d`1uWF#b|d8GNoxd2i! z930Xz{L8f5Qf zZ6yP8b*A{&kOl1jvo8Gq5%0fwt^Ttvfd9zL_O1-uKaTys9R2UE_vrbj`afa&-uR!u zw|04tcF=oRk9Kw0LP62X%1eoB`TRT$M9Q?%PCE$R#x^|H*G7_NQTsBi5fVmk;A9X2 z6Goha96%Mf$C+3J z+U`ExeJ?F_j+K>?rcZcrP0Gm0x!av_@%JM4jrravWt@4KkL_%CSrl1!K5@f@_7`#F_0i|e>;D^9ebS)xGNkY1YSvAy~<@h!b%nryXFFa19!E} zhIlfL)5%RI_BWY^pL&7cltJ48uqU@Px+%HXGm`~Gz0{8+xaChAP*RV1G+B zmI=4GtabA2_ANT16A5q*Dj;cemt5(5+m(Mc*RJZrcr%S?toV{v;ouLzOkl$tQRQcd z4tQbjd1G;}mBy9s*fC6Y6sW6^-IT9cD?>b*_TZnqfiOl2K5D+m0d@m3jQ@M5yirOU%F-5LSW zy-mJH`Ao<5W8}np>pe(NTNc(lHucF;ARM}h;>^%^56FBA+jHgExvh>%WXdUsJazCBPaGyYl z4JiS4X$e>wV|sF#!hIYLsyj+i42gP3eoAZqgMot1LpW*xZjU$DOGb=mTl(YQzxN?a z{D~H3)#bXDJYSJ+kn|APWLLHWWp>2p-y%CEc``-eN#5i}kDm8~DOQ_dIp_I3&xf5+25E_Mp*ad{P&TVP}9{yM+!=n$NHdR@`TJy6#bl!SHLEQH|Y!D z(5VZQKl(7H-*MLqI`f%6>UpM(a+CII93)JUhK^w&!mjuAY5a85WB61$p~0_BJJ?0b z98wgpFMTja}YA6(8ktI)DcPtw^Ep$upu5 znSXRBF`_q_SF32ouBSwSE!BYp7qVb)0@q-ZZ{MA@e)MHA!`nOc8=YP4nzSGnPtHhZPFCJ;flU++fpVc(m-ypoiR1ptM2bW+ z$>W`wV9O;K)|9Ejo4iH}Q+HH${xElg3=3zf&&-|hQ;1b1G#3h%NTie4OO((6meK47 zpWH=sOj_eFJ(oea{sMFQsBXS1;`DO>e3bQ=e_$uIhRf_8AvE1JbYGg%gCF|ojbADI z+}t8Naigsak_UI8bd|OoZ;%0AJSpRqlc+ivH8P|`GQcOKk3CPX{C)Dfnz4A78u+gY z-0!i#cRgJs0O3ENe`2*oVfEA4@52mh&5b+d2@b~~se`vob!&y2D&WhRiM@+iYA42wCb%@jkP5GX0hpQ`jrRTY3l9{gJFV{wAtwEc#u5d5HuOXg4XH~mcN<(X1Zr07um zaw0zj#VhO;L+^bWk3x_o8Ak2tV&|BUh{M>ZZUgg&>IbRYve5tD=D}Vq#Ir{D&%x>K z;{Ce4i0rk6%D>3JIoYE$Y>;{-CoXiIS%QS~< z^P+HI&0}m8D%oAKd8;>~C!exkma4WeCgm|zcomtIq=_csEcbMuml8}Ua|p~qk@I$J z^%!(XGdv^>e?IOi3G5Ibe?2_%^YLHY7DN)VE3N^wI|VnI{Ug%$iMz~1u`9uZdi(vSYdL_Dbf8n7h5ohbd(-6Gt&o1p4v@DUNL56zqc|?Zs3!)0e2B_%#Uf;c5BJ zZ4h7LIaa^llDQs|^~Di8;*f(AzQjet)&Sp?dbvAB4bJe%lomDSA9B1!F>4W4PlpG(^Bm9TQ3h*v~7cS8#w7GI z@M;;7#E&(pep6U@w7*W>?nXQRiqQvn^FTGO!zz|U4>_A__m%&+ee^rJhzzJaRtx!? zUyq+y-nbM;0N|7o?F259N8Q-dQG5O#uQRPDo37BV0~2n#=5N4`EQiY2HzD3@wLObs zIjtkL$@__B?tTHGc4mv$Bu}L&%N{w1uZo6s{=JfMdN|(Hdm6#vxI9>)FzVHDuLC2f z(>t*0=rkL_D!~J5r?(TVn`1kwG8DL7J#X!e_Nr?>1<-6jj9YCcag);P@LY}^aUA+kndF{3g zpm6|_|1Z~{vBa&;gX+C)1b?xjsd}&W5q+k1e&Qt?pZ)gxkmbdDF|in#Z;x&MLhH%2I8~)S`n#YxH0l!ReW?&3OCEQ*e}Y+M7z$*_x=z#?)0rRm zG0b0cL`$)-F~&ke1hp_MLv)50>bRXV^cvl@{^2wBX3;L<{9)ebmP(P&LvEuB!Z&hE zXnm!0+N)jJBfR#gNI9(Ol7fIEvSCPg=i{U0C;1pf> zrDZkAWY-a&Hm*4-)_>X3qhfuQ{)~K}ApYjq^%=BN``}hVK<*-lnDLB||2$4WNgj-U zE$iKnHJG2-}4qMG>MAAX^(k#*4p1Sc)Q0s9N z#(nyh(}wC} z(R05z3?s#=knFUWwNC}iYHNubN*KqcV2AFeffh}>#Q@79pDsK!eWevfxBp^z1inrV zi8ok1!KcB;cXc6Bpb~AF>`~LWQd1U&Fv|xo*^ao>YW?L?sO8|(97UhF)r}i7JXk1M zSF$6L;f=DCCnet#xaFW^T9zU~u0QIkHfm=yzDc#|=30ptZ0Kg(*|02j!<>uIRza@Z z#D!)HW#!y7wxViH;o4Q?P*tyrRM;B7#fV0jy&CTw2G<7ZLo2P`FoT|o6%^rQG>sLm zIl!=}-=lt9e6`OUF5~oq`GTtCeOKWSg*?e?lK$~^xMNSxl0W^oZG}IRYCxoiaSz80 zdLXa4*vvt%DSq8L#udTMT>dHYXaR;^QN2b>r6W581|#_#=ej253F_xoFrh&2Q!gga zPTaG)ObI-d>Z&B7{LZwN_vI59@X#jlin6a~Bw)21 zne*@0)Pr-ZSKM~6SmyL+`+#4{h`*CF7~YnCKr7U?*-7L^O z;LBBtEe}GCF_8x0jEBl70=Ra9K?#=!3b_tf)e4AZ0YZvX{`3{FiG}UNHU;&#x~NQN z-L~8^u+G0@)_aIi%ABGWutWrEACXUa94Y?*&=~c7Vc^lqdQ=;RUQT(B7CY3YJ?#02 z)wIaex4Z__OJw5ag3S0eYuT?ABDER3^`$J$J#x%(_&F19iVvyX|N07)8)=UWxc7HD zT_t|q<~5H9gEl;~?uX}J!q!=0b3>;8na#JmxZlAvbx{OyY@qwxHAA0Re5YDpw|Xa( z6?{D{RHzl!T!ldT?G<%$`B=NUlEgR zQTmW8wW3P`kZ38tx{oOtF&X6(IWdW9J0OQoP)DS)^=LLsmAhY=+_MYn*nvaKt}r4= zy~RlFinUT@$&J$_KBfs|hdxX>G~W&q-9UIFuPY|dX%RD+SP{&-mXzp2(Y@{4;`)#! zC-xwtnpnPplcGBYJ-_CsTS#?L1grhn6l*z73#T(UF1Wc^mnl0rd`MmYWcJVw-GJDl z(0FOje=!Q^eY4@$fut(`M#gbPUKjl3v=$3#Ztd%S#lUP2n>QH4OqxsvXz`$HXbV%^ zgiNhtmR%DyFY3=!Ys>Ryl$Tlm_)Zcyt?wJDDYca|kIVbPr~)Dsl4dV^@RcCbfuS-t zDgNNrRj%WE;qf$X->x5xM+>#@GptW=|9E8Qpcn&n83cGO*|~i^jKJ@vKfYmYT~SfQTCJf;Vgx z7+5P-*U7U1HupfEChi1b6KHCQ+HuRTbJlb~s|vhzMc-=`(lZ3H3mLY8t(FFH6LZKX zdLR$Sr~`@bN=O~p8K}AyQa91(wi{un{!QZ02TgvtO1KPNG5s(dfQ1D-jAfAv-jUHR zsoYiXAx~p2L(Nf4Jy@98{^2~x8|7DfMJ zT7>*sT|(M9{t`c37+Lg4;)EX8R&Zgzk+Y7bD`0m>-%(v@QP5?Io42cz$6)Rl#^%|c zzva!^o3TJ-`-R5J$um7iCmvI z_n3C|_QDGruaO^Pc(nP3Al+U`$%Ba}E9JkZ%J$K>O_tT@lB>*M*hV^Dmqust@}^mO z)tlx0<|<6#Wx|@KHN~NAFM@D8L74k9PqNZ<$2>LNAl;!5 zV^6Y{9TGqK0A7xcn6gv-uL*P3LpvX~Gmr?T(@olvgyQQy!A=@w@-l`&F}gh}s#@B% z#CWZQ(kW|8bpO_oi7g(Fw|@WK@D_ELn8Lv)e*lTKO%PyLS6{uI)4=iwC zrWT##1w!u@L!V_4noLo`#q%%fMz!vSrgTI0KiyhbG~&FrfwJt2H5jRB)qA+Ekqcc% zm(bAOS1)eq%v+l!(=&9Awb=3Y9 z!oi3(Z@5Rr_*xI*Hlf^sSuK88E-rA4yxx`$RU9EfH0Agn6W74LrtoarHSFmr_J9 zJ65HY;o`^G3n@P2{k9mry(BSGtDHtMYTY*p`=uAAe4!oZZudN1`ZdGj^`TZ&0J^4L+$RYv$8QNHPUM^^H_hJT6devo1Mjoj0OOv9YBaLOq7B zRGn(WmT-Me#HKW*>}}h=sCjthBxKC^U6jT&)jh>dN>xw zqjO{yBhe0%4*QAsQ<5=8vjW@4jJjO1wiYyhdK7(#RcpM0x~^vpJM9HpLj+~lnV@HO zTZLUC?eqXscsyCxpboWByHTq?H-U~;d#hM=b)(r-P*1>oQ1w}zsvpa7H5eI;+!)Z& z5$3CLJ!A8;p7IV|63Eiq5Mc46HQUINr)s8iR=x7qBa6VeWA;c?*`i_O0#4o|GaJ8y0~{mQo>;W@B8Zdw_;oR+z(yVooWH640^Fm4niZT&6Af^*+1DiCr|*mA}_o! ztLDj)gL)Yb{pRJoxOAr|nw{=g_;El#zu7BQQw^3+JCP-^(LD$OpXoABn3S))K`IMd zB2bPC_zgJ>h^B?$G#$~a{-Cf7OT)}wQeS*RU)`5Tp|*kG4O=1V&7T%IUgwUqS0pXT zq=dM=cUWK2nKhZ*rkw@9S0I>nuk0uL-hC-ue*Jp#t45TFQ_!jc4VLE?wMbjT8|jCo zhitEUtL#2EP90fb)Yvno6m|u-TsG7NN@!A0Z`pGxa(h|9#h+Gr9DDj5{>$^fJYo6W z5I{Rnj=Brc_`*aG^GNmM^q`?Xro#5qhbbQnR@S0=<}{hP^yU*N`0^8MeR5i~-xh00 zz0o)At}^VLO1KOh6Ty4ayc;_<01wQ~ys$zy8cN@b!4AF%{Q~mrAj277eTbxe2R9pQ zI!|y8H%FZYp-+-9+J*Q1ph7EHBU!=nj6!}1XSIpD?d3Mw?9yL%H`(1ZDQVmV_m6(t z4@aZY0+-6j*hI_pX9*Px zczMIMnTwFy(NWJ}%>^6IrOBvt6uNMiEBE!XCT&(y-e{& z4B6T;bbo=A&bz{gF=f-y@zHM){V7O7| z{dnL^QyuJS7t!%a=nsqkzNJC-qAZ~`X1iArAI z&sH`xmRUX0o&c#ek@(l|DBSna9DFl?EK)ZcDIISwqt9<~q!26t%x5&WT3Jh$1X3M) z3D{kcwch7~c@w3UU~xXd_%)We-AU4t&idSgGk7XlU4lT8>`9C7$+DvM@z|r&ZOtjw z)V3N+F7miXo{K@()ikZiT`QTr$CP4F%0K%ETbZGDmfQ{+H9 zyyb#F@U}(uzonhe$O>rC=V5~XG!9uiHGTEPZ<&XX%ci;y5B8#St8DZZmKY`QJM=wPy^lW2fONB(l^6TF&m9W?{@D+Z>!S=Cb&cwMO^`}zv&3LnSS4sYlKcm@~IqQP23Sgm*E5bi8!awTlN86x2G(1P3$Oz zeNMkOhC9r+eNR4ad4c;g3QH)vH^#yJ!fPT;ZU>>=;)FU>dhv*Qe+YcP9aXfa$Z|#w zw2*%6x(rMnQva)JD0ufl1Uz!)8dCdR3#;=r56K5THKA_SzpFp9418TtKaN}zHY;_u zFc$D6(1sy`w3anT$Kk!A`yJ#a=_PnhxE0?rOIukkiLsYRAiH%K=I9oX|6y$_bih(| zAo#i1r^_3oC*@eC<0JQZPqd#cPEAwFl33ibf|eqCJEDq`I}Y|Wd#Y{_N^I~mixomW z_YB2Kk!xG~7?%n9H~(X}qK8K;yrv0h#EQqHE>)Qb9}786>$ivZ4Wu3vzO&W1^)VqY zc<2}S>5yD9!PK~)*BSg;nZT4Mh^O3U072L}YcmQ#!NIGz_2!W5Q=YghLoH&bQBmHn zgis#a`YI%?xSM!HB%@*kGI6iH^{Zo1;Sjpc^n&p9e!jLr7vmFD{mJBef@B+PSb&wt z1BTqjljGRAmtLspl}Xl3BNq(8x8K2J-iKcK3(W}xZE{PCPD=T!wpbR~Vzouachxyp z8^o-Ac-uWl{yzohmcZ)7=5c|-Y*n9qZfE9I_%VbM?-WJihg`{I#su>~lHiKcX*$k~ zI_x$tE8-sBI>PFqdIegQ7Q5IbrS1X1(ClKkP))?4d70Xf<9giB!ok;Ov}5bBF}_XK8NkA3u#ebr(lP{vC%wb z7!r28rw3yJjzk3zYPXd^xu6q#epM0KJX4g{X>FGxlPM?ASXX_?*{)&x=7Ze@j+|I6 z{xvlY{h>YJRRTU8(|xG%H-Fw<5r@&oeu3+epzDs-UA&AQ($`Ybc(Y+n#Cej6*B0I8 zJ#7}T)Q`eDRbS_kv|q<_Fld7A`LX%7WezSF9dirl~G?1ToSXwep5 z=k%zsa@++pbM(<`8+LEREwRHg?35vEzzs=2Pak}h+jz!275s~MUrvB|y^D5EG?pFh z*lx8prIx9rhwc|^8`yRM*x-Dia$`iuubcSkMD8#8Oi*{geQi=YX`W&aQHHuMYG+mT z*!vAZCYfD^yGSPU8Lg3gh@-}=F+^fM78A2!f^0HYU5j*EvwXUi)?;Qv8`x^Vxuc%x z_k$4ftM)=&!YpVR)VAEIr>&>N$(CD%R>ag@T|An++;1tb8Zm$W%5QFWhfT7bB?7-3 z_P4OOoEg7Jo?kow$QaIKDCgg9>~|5Xf!NCe>(MF!46sKEWs)SbF}TM9!;$m48uPKE z#uEsfo<;NMQBc{uElLkYuS@W)<+?HnXH-wr{kgl~fAxKX; zh)j#dE|50SI))H!3p2NI^^-8Vi_}2nBY9Tj&5!p(Eh+)rjYNk<9dima1}rgC1Rg$N zQ-o|ND9)S6>+>q&nM%hJH)R;~{#l{4`wbghSvZgu1EYz_Q$AmSk!TmrHru)_P)BBE_L^zZW!X!0ks2Va)ma>n{=O|TPq=Fj!4m3h}mLRC9Bf( zCMsKi*(*v0m9Pm@-GNo~QhS?s#XanWqB#T8GUE?2VGm1qMYvNmSRvGf{1MQN2yc+q z!2lxaQXG*>^l{&oxZ~uYL@ro|(ghZ9Sj;v;F@*C5&h^-h(8eM6@hXXgu z(;__RRwY}6O|H<^TfF_hNG-pc2r@rml7*x8(+g>Px5bUNU18=(xK#HL@O<%L)4CR6 zx<$_{zFRANW?tx!Hh4&~l_qx!zn{Rqt~({yIx6p%fe#e~Pu#88cq-4OS@& z78?bJ559loF;%g})*Qi6N1JF9?7QH6Rz$Ajf5ziy}``R$ByEs@ZPtF`3Z-0z_yp-akGJ&{riq?$^q@eB~Cy8X{sM!$BYUu~`_?bA?=qperB*zc~_+ zJ7Pd@&Bf6}kf1yE**7utTv4ceBCv+6a`tw@Ly*mdN-#eVcQ zO7nI}>ZX+9BK0$hybINF%!Q{Wst%)W@=H@5+fw#@G&<&^=~jVJk)i*E_x5k_{=}YY~`g@q-rG0 G!u}6d(;kul literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/home_icon_wechat.png b/app/src/main/res/drawable-hdpi/home_icon_wechat.png new file mode 100644 index 0000000000000000000000000000000000000000..24417ec7459ff6b482343f39720a137c6fc4bf61 GIT binary patch literal 5911 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/icon_floatball.png b/app/src/main/res/drawable-hdpi/icon_floatball.png new file mode 100644 index 0000000000000000000000000000000000000000..042bb8d68fb9a6aa5afb85c28e79def16b580f66 GIT binary patch literal 12920 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 F`7gvyEhqp0 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/setting_icon_network.png b/app/src/main/res/drawable-hdpi/setting_icon_network.png new file mode 100644 index 0000000000000000000000000000000000000000..72ea1b8f857db1d000d9bf74ad37cd2146f781aa GIT binary patch literal 2882 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/fragment_add_contact_background.xml b/app/src/main/res/drawable/fragment_add_contact_background.xml index 7a66681..a10881f 100644 --- a/app/src/main/res/drawable/fragment_add_contact_background.xml +++ b/app/src/main/res/drawable/fragment_add_contact_background.xml @@ -1,7 +1,7 @@ - + diff --git a/app/src/main/res/drawable/general_setting_bg.xml b/app/src/main/res/drawable/general_setting_bg.xml new file mode 100644 index 0000000..951d76e --- /dev/null +++ b/app/src/main/res/drawable/general_setting_bg.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/home_card_accessibility_bg.xml b/app/src/main/res/drawable/home_card_accessibility_bg.xml new file mode 100644 index 0000000..1305f8d --- /dev/null +++ b/app/src/main/res/drawable/home_card_accessibility_bg.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/home_card_app_bg.xml b/app/src/main/res/drawable/home_card_app_bg.xml new file mode 100644 index 0000000..48f22aa --- /dev/null +++ b/app/src/main/res/drawable/home_card_app_bg.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/home_card_appsotre_bg.xml b/app/src/main/res/drawable/home_card_appsotre_bg.xml new file mode 100644 index 0000000..4ea417f --- /dev/null +++ b/app/src/main/res/drawable/home_card_appsotre_bg.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/home_card_clock_bg.xml b/app/src/main/res/drawable/home_card_clock_bg.xml new file mode 100644 index 0000000..133119c --- /dev/null +++ b/app/src/main/res/drawable/home_card_clock_bg.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/home_card_setting_bg.xml b/app/src/main/res/drawable/home_card_setting_bg.xml new file mode 100644 index 0000000..4e382af --- /dev/null +++ b/app/src/main/res/drawable/home_card_setting_bg.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/setting_card_add_contact_bg.xml b/app/src/main/res/drawable/setting_card_add_contact_bg.xml new file mode 100644 index 0000000..272ecfa --- /dev/null +++ b/app/src/main/res/drawable/setting_card_add_contact_bg.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ 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 new file mode 100644 index 0000000..4e382af --- /dev/null +++ b/app/src/main/res/drawable/setting_card_bind_bg.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/setting_card_location_bg.xml b/app/src/main/res/drawable/setting_card_location_bg.xml new file mode 100644 index 0000000..3338927 --- /dev/null +++ b/app/src/main/res/drawable/setting_card_location_bg.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/setting_card_network_bg.xml b/app/src/main/res/drawable/setting_card_network_bg.xml new file mode 100644 index 0000000..4ea417f --- /dev/null +++ b/app/src/main/res/drawable/setting_card_network_bg.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/setting_card_wifi_bg.xml b/app/src/main/res/drawable/setting_card_wifi_bg.xml new file mode 100644 index 0000000..48f22aa --- /dev/null +++ b/app/src/main/res/drawable/setting_card_wifi_bg.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/activity_control.xml b/app/src/main/res/layout-land/activity_control.xml index 5b6b497..157cb4b 100644 --- a/app/src/main/res/layout-land/activity_control.xml +++ b/app/src/main/res/layout-land/activity_control.xml @@ -1,469 +1,479 @@ - + tools:context=".activity.control.ControlActivity"> + + + + + android:layout_height="match_parent" + android:background="@drawable/control_bg"> - + app:layout_constraintTop_toTopOf="parent"> - + - + + + + + - - - - - + app:layout_constraintTop_toBottomOf="@+id/constraintLayout5"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:orientation="vertical"> + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="2" + android:orientation="horizontal"> - + android:background="@drawable/control_background_item"> - + - + + + + + android:background="@drawable/control_background_item"> + + + + + + + - - - - - - - - - - - - + - - - + + + - - - - - - - + app:layout_constraintEnd_toEndOf="@+id/linearLayout" + app:layout_constraintHorizontal_bias="0.0" + app:layout_constraintStart_toStartOf="@+id/linearLayout" + app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="parent" /> - + app:layout_constraintStart_toEndOf="@+id/imageView" + app:layout_constraintTop_toBottomOf="@+id/seekBar"> + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - + android:orientation="vertical"> - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/activity_dailyapp.xml b/app/src/main/res/layout-land/activity_dailyapp.xml index 3de638c..af547f7 100644 --- a/app/src/main/res/layout-land/activity_dailyapp.xml +++ b/app/src/main/res/layout-land/activity_dailyapp.xml @@ -1,64 +1,71 @@ - + + + + + android:layout_height="match_parent" + android:background="@drawable/control_bg"> - + - + + + + + + + + app:layout_constraintTop_toBottomOf="@+id/constraintLayout" /> - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout-land/activity_dialer.xml b/app/src/main/res/layout-land/activity_dialer.xml index f9f7195..371c34c 100644 --- a/app/src/main/res/layout-land/activity_dialer.xml +++ b/app/src/main/res/layout-land/activity_dialer.xml @@ -1,465 +1,472 @@ - - + - + + + + + + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_weight="1"> - - - - - - - - + app:layout_constraintTop_toTopOf="parent"> - + + + + + + + + + + + + + + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/constraintLayout9" /> - - - - - - + android:layout_weight="1"> - + android:layout_margin="@dimen/dp_32" + android:background="@drawable/add_contact_background"> + android:layout_height="match_parent" + android:orientation="vertical"> - + android:orientation="horizontal"> - - + + + + + + + + + + + + + + + + + + + - + android:orientation="horizontal"> - - + + + + + + + + + + + + + + + + + + + - + android:orientation="horizontal"> - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - \ No newline at end of file + + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/activity_emergency.xml b/app/src/main/res/layout-land/activity_emergency.xml index 0aac31d..7bc3639 100644 --- a/app/src/main/res/layout-land/activity_emergency.xml +++ b/app/src/main/res/layout-land/activity_emergency.xml @@ -1,49 +1,56 @@ - + tools:context=".activity.emergency.EmergencyActivity"> - + - + - + + + + + + + - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout-port/activity_control.xml b/app/src/main/res/layout-port/activity_control.xml index 528f0bc..d44a41b 100644 --- a/app/src/main/res/layout-port/activity_control.xml +++ b/app/src/main/res/layout-port/activity_control.xml @@ -1,447 +1,457 @@ - + tools:context=".activity.control.ControlActivity"> + + + + + android:layout_height="match_parent" + android:background="@drawable/control_bg"> - + app:layout_constraintTop_toTopOf="parent"> - + - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + app:layout_constraintTop_toBottomOf="@+id/constraintLayout5"> + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="4" + android:orientation="horizontal"> - + android:background="@drawable/control_background_item"> - + - + + + + + android:background="@drawable/control_background_item"> + + + + + + + - - - - - - - - - - - + - - + - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-port/activity_dailyapp.xml b/app/src/main/res/layout-port/activity_dailyapp.xml index 9363681..97afa4c 100644 --- a/app/src/main/res/layout-port/activity_dailyapp.xml +++ b/app/src/main/res/layout-port/activity_dailyapp.xml @@ -1,64 +1,71 @@ - + + + + + android:layout_height="match_parent" + android:background="@drawable/control_bg"> - + - + + + + + + + + app:layout_constraintTop_toBottomOf="@+id/constraintLayout" /> - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout-port/activity_dialer.xml b/app/src/main/res/layout-port/activity_dialer.xml index fdaccb6..da8fbd5 100644 --- a/app/src/main/res/layout-port/activity_dialer.xml +++ b/app/src/main/res/layout-port/activity_dialer.xml @@ -1,458 +1,466 @@ - + + + + + android:layout_height="match_parent" + android:background="@drawable/control_bg"> + android:layout_height="match_parent"> - - - - - - - - - - - - + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/dp_32" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + + + + + + + + + + + + + android:layout_height="match_parent" + android:orientation="vertical"> - + android:orientation="horizontal"> - - + + + + + + + + + + + + + + + + + + + - + android:orientation="horizontal"> - - + + + + + + + + + + + + + + + + + + + - + android:orientation="horizontal"> - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - + app:layout_constraintStart_toStartOf="parent"> - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-port/activity_emergency.xml b/app/src/main/res/layout-port/activity_emergency.xml index 5cc0c5a..ba4046e 100644 --- a/app/src/main/res/layout-port/activity_emergency.xml +++ b/app/src/main/res/layout-port/activity_emergency.xml @@ -1,50 +1,57 @@ - + tools:context=".activity.emergency.EmergencyActivity"> - + - + - + + + + + + + - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout-port/fragment_home.xml b/app/src/main/res/layout-port/fragment_home.xml index 5ce1ff2..179293e 100644 --- a/app/src/main/res/layout-port/fragment_home.xml +++ b/app/src/main/res/layout-port/fragment_home.xml @@ -30,9 +30,8 @@ + + + + + + + + + @@ -181,6 +222,7 @@ android:textColor="#b48a5a" android:textSize="@dimen/sp_16" android:textStyle="bold" + android:visibility="gone" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -190,6 +232,7 @@ android:adjustViewBounds="true" android:scaleType="centerCrop" android:src="@drawable/icon_play" + android:visibility="gone" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="@+id/niceImageView2" @@ -275,6 +318,7 @@ android:layout_weight="1" android:background="@drawable/home_card_bg" android:onClick="@{click::killApp}" + android:visibility="gone" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> @@ -285,7 +329,7 @@ android:layout_marginBottom="@dimen/dp_8" android:text="一键加速" android:textColor="@color/white" - android:textSize="@dimen/sp_16" + android:textSize="@dimen/sp_17" android:textStyle="bold" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" @@ -309,6 +353,46 @@ + + + + + + + + + + + @@ -526,7 +622,7 @@ android:layout_marginBottom="@dimen/dp_8" android:text="更多应用" android:textColor="@color/white" - android:textSize="@dimen/sp_16" + android:textSize="@dimen/sp_17" android:textStyle="bold" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" @@ -574,11 +670,11 @@ app:layout_constraintTop_toBottomOf="@+id/tv_app" /> - + + + + + android:layout_height="match_parent" + android:background="@color/gray"> - + app:layout_constraintTop_toTopOf="parent"> - + - + + android:layout_width="match_parent" + android:layout_height="0dp" + android:orientation="horizontal" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintTop_toBottomOf="@+id/constraintLayout13"> - - - + + android:layout_marginStart="@dimen/dp_8" + android:layout_marginEnd="@dimen/dp_8" + android:layout_marginBottom="@dimen/dp_8" + android:layout_weight="4" + android:background="@drawable/add_alarm_background"> - - - - - - - - - - - - - - - - - - - - - - - - - + + android:layout_marginStart="@dimen/dp_48" + android:layout_marginEnd="@dimen/dp_48" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/textView24" /> - + - + + + + + + + + + + + + + + + + + + + + + + + + android:id="@+id/cl_type" + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="1"> - + - + + + + + + + + + + + + - - + - + - + + + + + + + + + + + + + android:layout_marginTop="@dimen/dp_8" + android:text="标题" + android:textColor="@color/black" + android:textSize="@dimen/sp_12" + android:visibility="gone" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + android:id="@+id/cl_activation" + android:layout_width="0dp" + android:layout_height="@dimen/dp_28" + android:layout_marginStart="@dimen/dp_16" + android:layout_marginEnd="@dimen/dp_16" + android:background="@drawable/edit_background" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> - - - - - - - - - - - - - - - - - - - - - - - - - - + android:layout_marginBottom="@dimen/dp_8" + android:layout_weight="3" + android:background="@drawable/add_alarm_background"> + + + + + + + + + + + - + - - - - - - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_add_item.xml b/app/src/main/res/layout/activity_add_item.xml new file mode 100644 index 0000000..c3ed03b --- /dev/null +++ b/app/src/main/res/layout/activity_add_item.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_articl.xml b/app/src/main/res/layout/activity_articl.xml index 1298e0e..ceb5282 100644 --- a/app/src/main/res/layout/activity_articl.xml +++ b/app/src/main/res/layout/activity_articl.xml @@ -1,92 +1,99 @@ - + tools:context=".activity.article.ArticleActivity"> + + + + - - - - - - - + android:layout_height="match_parent" + android:background="@color/white"> + android:layout_height="@dimen/dp_36" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="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_details.xml b/app/src/main/res/layout/activity_details.xml index 5e4f062..2ba4b0b 100644 --- a/app/src/main/res/layout/activity_details.xml +++ b/app/src/main/res/layout/activity_details.xml @@ -2,7 +2,7 @@ + tools:context=".activity.details.DetailsActivity"> diff --git a/app/src/main/res/layout/activity_info_list.xml b/app/src/main/res/layout/activity_info_list.xml index 2d87cb5..d806f3b 100644 --- a/app/src/main/res/layout/activity_info_list.xml +++ b/app/src/main/res/layout/activity_info_list.xml @@ -1,104 +1,111 @@ - + tools:context=".activity.infolist.InfoListActivity"> + + + + - - + 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_main_old.xml b/app/src/main/res/layout/activity_main_old.xml index c4d82b5..e9b812a 100644 --- a/app/src/main/res/layout/activity_main_old.xml +++ b/app/src/main/res/layout/activity_main_old.xml @@ -5,7 +5,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/control_background" - tools:context=".activity.main.OldMainActivity"> + tools:context=".activity.main.deprecated.OldMainActivity"> - + tools:context=".activity.quickapp.QuickAppActivity"> - + + + + + android:layout_height="match_parent"> - \ No newline at end of file + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_records.xml b/app/src/main/res/layout/activity_records.xml index 3af15bb..db1bcd2 100644 --- a/app/src/main/res/layout/activity_records.xml +++ b/app/src/main/res/layout/activity_records.xml @@ -1,102 +1,109 @@ - - + - + + + + + app:layout_constraintTop_toTopOf="parent"> + + + + + + + + + + + app:layout_constraintTop_toBottomOf="@+id/constraintLayout3" /> - - - - - - - - - - - - + app:layout_constraintStart_toStartOf="parent"> - \ No newline at end of file + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_screen_lock.xml b/app/src/main/res/layout/activity_screen_lock.xml index 63dd006..c93fd50 100644 --- a/app/src/main/res/layout/activity_screen_lock.xml +++ b/app/src/main/res/layout/activity_screen_lock.xml @@ -1,250 +1,258 @@ - + tools:context=".activity.screenlock.ScreenLockActivity" + xmlns:tools="http://schemas.android.com/tools"> - + - + + android:layout_height="match_parent" + android:background="@drawable/control_bg"> - - - - + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.11" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/app/src/main/res/layout/activity_select_number.xml b/app/src/main/res/layout/activity_select_number.xml index e4e668e..b74ba41 100644 --- a/app/src/main/res/layout/activity_select_number.xml +++ b/app/src/main/res/layout/activity_select_number.xml @@ -1,14 +1,21 @@ - + + + + + + + - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml new file mode 100644 index 0000000..3214c9e --- /dev/null +++ b/app/src/main/res/layout/activity_setting.xml @@ -0,0 +1,432 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 new file mode 100644 index 0000000..028fc3b --- /dev/null +++ b/app/src/main/res/layout/activity_touch.xml @@ -0,0 +1,225 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_wifi_manager.xml b/app/src/main/res/layout/activity_wifi_manager.xml index f479b56..942c64e 100644 --- a/app/src/main/res/layout/activity_wifi_manager.xml +++ b/app/src/main/res/layout/activity_wifi_manager.xml @@ -1,142 +1,150 @@ - + + + + + android:background="@color/wifi_background_color"> + + android:layout_height="match_parent" + android:background="@drawable/background_wifi"> - + app:layout_constraintTop_toTopOf="parent"> - + + + + + + + app:layout_constraintTop_toBottomOf="@+id/constraintLayout12"> + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/add_item_confirmation_activity.xml b/app/src/main/res/layout/add_item_confirmation_activity.xml deleted file mode 100644 index 35c80ca..0000000 --- a/app/src/main/res/layout/add_item_confirmation_activity.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_contact_home.xml b/app/src/main/res/layout/fragment_contact_home.xml index 695eec8..abafdce 100644 --- a/app/src/main/res/layout/fragment_contact_home.xml +++ b/app/src/main/res/layout/fragment_contact_home.xml @@ -17,24 +17,136 @@ + android:layout_height="match_parent" + android:layout_marginTop="@dimen/dp_24"> + + + + + + + + + + + + + + + + + + + + + + + + + + app:layout_constraintTop_toBottomOf="@+id/cl_weather" /> diff --git a/app/src/main/res/layout/fragment_control.xml b/app/src/main/res/layout/fragment_control.xml index 5e72101..22f9bb8 100644 --- a/app/src/main/res/layout/fragment_control.xml +++ b/app/src/main/res/layout/fragment_control.xml @@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".activity.ControlActivity"> + tools:context=".activity.control.ControlActivity"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_contact_wechat.xml b/app/src/main/res/layout/item_contact_wechat.xml index a327957..eb6adde 100644 --- a/app/src/main/res/layout/item_contact_wechat.xml +++ b/app/src/main/res/layout/item_contact_wechat.xml @@ -8,8 +8,8 @@ @@ -94,18 +94,18 @@ android:id="@+id/cl_1" android:layout_width="wrap_content" android:layout_height="match_parent" - android:onClick="@{click::mms}" + android:onClick="@{click::wechat}" android:visibility="visible"> @@ -114,7 +114,7 @@ android:id="@+id/tv_appname1" 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_icon1" @@ -126,18 +126,18 @@ android:id="@+id/cl_2" android:layout_width="wrap_content" android:layout_height="match_parent" - android:onClick="@{click::camera}" + android:onClick="@{click::toTiktok}" android:visibility="visible"> @@ -146,7 +146,7 @@ android:id="@+id/tv_appname2" 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_icon2" @@ -158,18 +158,18 @@ android:id="@+id/cl_3" android:layout_width="wrap_content" android:layout_height="match_parent" - android:onClick="@{click::sos}" + android:onClick="@{click::toCalendar}" android:visibility="visible"> @@ -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,6 +186,38 @@ app:layout_constraintTop_toBottomOf="@+id/iv_icon3" /> + + + + + + + diff --git a/app/src/main/res/layout/settings_activity.xml b/app/src/main/res/layout/settings_activity.xml new file mode 100644 index 0000000..a0300d3 --- /dev/null +++ b/app/src/main/res/layout/settings_activity.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/window_float_ball.xml b/app/src/main/res/layout/window_float_ball.xml new file mode 100644 index 0000000..689ea21 --- /dev/null +++ b/app/src/main/res/layout/window_float_ball.xml @@ -0,0 +1,31 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml new file mode 100644 index 0000000..6cf9ed4 --- /dev/null +++ b/app/src/main/res/values/arrays.xml @@ -0,0 +1,12 @@ + + + + Reply + Reply to all + + + + reply + reply_all + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index b8796dd..a8caf91 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -3,6 +3,7 @@ #343336 #272727 #454347 + #ffffff #f5433f #F68F8C @@ -27,6 +28,7 @@ #2a2b35 #8e6afb + #00D56B #ffffff #ecfafd @@ -69,5 +71,6 @@ #3D54D9 #98999a - + #2384BC + #9D9D9D diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f14b297..e356319 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -13,4 +13,20 @@ 关爱守护快捷服务 关爱守护一键拨打视频 + Settings + + + Messages + Sync + + + Your signature + Default reply action + + + Sync email periodically + Download incoming attachments + Automatically download attachments for incoming emails + + Only download attachments when manually requested diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml new file mode 100644 index 0000000..7124ab7 --- /dev/null +++ b/app/src/main/res/xml/root_preferences.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + +