From ace600870916b8317800739fc8a480ae833e9654 Mon Sep 17 00:00:00 2001 From: Fanhuitong <981964879@qq.com> Date: Wed, 8 Feb 2023 12:04:19 +0800 Subject: [PATCH] =?UTF-8?q?version:1.0=20fix:=20update:=E6=9B=B4=E6=8D=A2?= =?UTF-8?q?=E5=8C=85=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 74 +- app/keystore/TeclastMTK12.jks | Bin 0 -> 2553 bytes app/keystore/mtkAndroid12.keystore | Bin 2701 -> 0 bytes app/keystore/xueshibaoos.jks | Bin 2552 -> 0 bytes app/keystore/zhanxun.keystore | Bin 2617 -> 0 bytes app/libs/QWeather_Public_Android_V4.9.jar | Bin 195680 -> 0 bytes .../ExampleInstrumentedTest.java | 4 +- app/src/main/AndroidManifest.xml | 117 +- .../uiui/aios/activity/APPListActivity.java | 100 -- .../uiui/aios/activity/EmergencyActivity.java | 253 ---- .../uiui/aios/activity/QuickAppActivity.java | 91 -- .../activity/alarm/AlarmClockActivity.java | 116 -- .../activity/alarm/AlarmClockContact.java | 19 - .../activity/alarm/AlarmClockPresenter.java | 64 - .../activity/code/FamilySpaceActivity.java | 111 -- .../activity/code/FamilySpaceContact.java | 19 - .../activity/code/FamilySpacePresenter.java | 68 - .../activity/contact/ContactActivity.java | 84 -- .../aios/activity/contact/ContactContact.java | 17 - .../activity/contact/ContactPresenter.java | 100 -- .../uiui/aios/activity/main/MainContact.java | 31 - .../aios/activity/main/MainPresenter.java | 215 --- .../activity/weather/WeatherActivity.java | 108 -- .../aios/activity/weather/WeatherContact.java | 26 - .../activity/weather/WeatherPresenter.java | 96 -- .../com/uiui/aios/adapter/APPListAdapter.java | 92 -- .../com/uiui/aios/adapter/AlarmAdapter.java | 228 ---- .../uiui/aios/adapter/AlarmClockAdapter.java | 61 - .../uiui/aios/adapter/AppSelectedAdapter.java | 88 -- .../com/uiui/aios/adapter/ContactAdapter.java | 103 -- .../uiui/aios/adapter/HealthCodeAdapter.java | 43 - .../aios/adapter/NotificationAdapter.java | 155 --- .../uiui/aios/adapter/SOSNnmberAdapter.java | 67 - .../uiui/aios/adapter/WeatherDayApdapter.java | 116 -- .../com/uiui/aios/bean/WeatherDailyJson.java | 294 ----- .../uiui/aios/fragment/AppListFragment.java | 358 ----- .../uiui/aios/fragment/ControlFragment.java | 847 ------------ .../uiui/aios/fragment/SecondFragment.java | 415 ------ .../aios/network/NetInterfaceManager.java | 1168 ----------------- .../com/uiui/aios/network/URLAddress.java | 53 - .../aios/network/api/ActivityListApi.java | 21 - .../uiui/aios/network/api/AlarmClockApi.java | 18 - .../aios/network/api/AppUsageRecordApi.java | 21 - .../aios/network/api/ArticleDetailsApi.java | 16 - .../uiui/aios/network/api/ArticleListApi.java | 18 - .../uiui/aios/network/api/DemandListApi.java | 21 - .../network/api/GetAdminSnSettingApi.java | 15 - .../uiui/aios/network/api/GetDesktopApi.java | 18 - .../uiui/aios/network/api/GetMailList.java | 18 - .../uiui/aios/network/api/GetUserIDApi.java | 16 - .../aios/network/api/GoodsDetailsApi.java | 16 - .../uiui/aios/network/api/GoodsListApi.java | 18 - .../uiui/aios/network/api/HealthCodeApi.java | 18 - .../com/uiui/aios/network/api/RunNewApp.java | 18 - .../com/uiui/aios/network/api/SNInfoApi.java | 16 - .../uiui/aios/network/api/SOSRecordApi.java | 20 - .../aios/network/api/SendScreenshotApi.java | 21 - .../com/uiui/aios/network/api/Setting.java | 16 - .../aios/network/api/SnIsActivationApi.java | 15 - .../aios/network/api/UpdateAlarmClockApi.java | 18 - .../aios/network/api/UpdateAppIconApi.java | 20 - .../aios/network/api/UpdateDesktopApi.java | 18 - .../aios/network/api/UserInfoControl.java | 19 - .../uiui/aios/service/main/MainSContact.java | 19 - .../uiui/aios/service/main/MainService.java | 433 ------ .../activity/NoticeActivity.java | 47 +- .../activity/PolicyActivity.java | 4 +- .../activity/main/MainActivity.java | 323 ++--- .../uiui/zyos/activity/main/MainContact.java | 14 + .../zyos/activity/main/MainPresenter.java | 39 + .../adapter}/CustomPagerAdapter.java | 2 +- .../{aios => zyos}/alarm/AlarmOpenHelper.java | 2 +- .../{aios => zyos}/alarm/AlarmService.java | 2 +- .../uiui/{aios => zyos}/alarm/AlarmUtils.java | 10 +- .../{aios => zyos}/base/BaseActivity.java | 4 +- .../{aios => zyos}/base/BaseApplication.java | 29 +- .../{aios => zyos}/base/BaseFragment.java | 2 +- .../base/BaseFragmentPagerAdapter.java | 2 +- .../{aios => zyos}/base/BasePresenter.java | 2 +- .../uiui/{aios => zyos}/base/BaseService.java | 2 +- .../uiui/{aios => zyos}/base/BaseView.java | 2 +- .../{aios => zyos}/bean/ActivityBean.java | 2 +- .../{aios => zyos}/bean/AlarmClockData.java | 4 +- .../uiui/{aios => zyos}/bean/AlarmItem.java | 2 +- .../uiui/{aios => zyos}/bean/AppListInfo.java | 2 +- .../{aios => zyos}/bean/AppSelectBean.java | 2 +- .../{aios => zyos}/bean/ArticleDetails.java | 2 +- .../uiui/{aios => zyos}/bean/ArticleInfo.java | 2 +- .../{aios => zyos}/bean/BaseResponse.java | 2 +- .../com/uiui/{aios => zyos}/bean/Contact.java | 2 +- .../uiui/{aios => zyos}/bean/DemandBean.java | 2 +- .../uiui/{aios => zyos}/bean/DesktopIcon.java | 3 +- .../{aios => zyos}/bean/GoodsDetails.java | 2 +- .../uiui/{aios => zyos}/bean/GoodsInfo.java | 2 +- .../uiui/{aios => zyos}/bean/HealthCode.java | 2 +- .../com/uiui/{aios => zyos}/bean/MapBean.java | 2 +- .../{aios => zyos}/bean/NetDesktopIcon.java | 2 +- .../com/uiui/{aios => zyos}/bean/SnInfo.java | 2 +- .../{aios => zyos}/bean/SystemSettings.java | 2 +- .../{aios => zyos}/bean/UserAvatarInfo.java | 2 +- .../com/uiui/{aios => zyos}/bean/UserId.java | 2 +- .../{aios => zyos}/config/CommonConfig.java | 2 +- .../{aios => zyos}/dialog/CustomDialog.java | 4 +- .../{aios => zyos}/dialog/PasswordDialog.java | 4 +- .../dialog/PrivacyPolicyDialog.java | 7 +- .../{aios => zyos}/dialog/SingleDialog.java | 4 +- .../disklrucache/CacheHelper.java | 2 +- .../{aios => zyos}/disklrucache/Utils.java | 2 +- .../fragment/custom/CustomContact.java | 12 +- .../fragment/custom/CustomFragment.java | 358 +---- .../fragment/custom/CustomPresenter.java | 18 +- .../iconpostition/IconPositionDBHelper.java | 2 +- .../iconpostition/IconPositionManager.java | 6 +- .../iconpostition/IconUtils.java | 2 +- .../manager/ConnectManager.java | 4 +- .../{aios => zyos}/manager/ConnectMode.java | 2 +- .../{aios => zyos}/manager/RemoteManager.java | 8 +- .../zyos/network/NetInterfaceManager.java | 110 ++ .../com/uiui/zyos/network/UrlAddress.java | 7 + .../interceptor/RepeatRequestInterceptor.java | 6 +- .../{aios => zyos}/receiver/BootReceiver.java | 6 +- .../receiver/InstallResultReceiver.java | 2 +- .../uiui/zyos/service/DownloadService.java | 56 + .../service/NotificationService.java | 2 +- .../uiui/zyos/service/main/MainSContact.java | 12 + .../service/main/MainSPresenter.java | 32 +- .../uiui/zyos/service/main/MainService.java | 59 + .../uiui/{aios => zyos}/tpush/Constants.java | 2 +- .../{aios => zyos}/tpush/MessageReceiver.java | 12 +- .../tpush/common/DBOpenHelper.java | 2 +- .../tpush/common/NotificationService.java | 4 +- .../tpush/po/XGNotification.java | 2 +- .../uiui/{aios => zyos}/utils/ApkUtils.java | 10 +- .../utils/AppUsedTimeUtils.java | 2 +- .../uiui/{aios => zyos}/utils/AppUtil.java | 2 +- .../{aios => zyos}/utils/BitmapUtils.java | 2 +- .../{aios => zyos}/utils/BrightnessUtils.java | 2 +- .../uiui/{aios => zyos}/utils/CmdUtil.java | 2 +- .../uiui/{aios => zyos}/utils/DataUtil.java | 2 +- .../{aios => zyos}/utils/FFmpegUtils.java | 3 +- .../uiui/{aios => zyos}/utils/FileUtil.java | 2 +- .../utils/ForegroundAppUtil.java | 2 +- .../{aios => zyos}/utils/GlideLoadUtils.java | 2 +- .../uiui/{aios => zyos}/utils/GsonUtils.java | 2 +- .../{aios => zyos}/utils/HomeWatcher.java | 2 +- .../uiui/{aios => zyos}/utils/IconUtils.java | 2 +- .../{aios => zyos}/utils/LauncherUtils.java | 2 +- .../uiui/{aios => zyos}/utils/MD5Util.java | 2 +- .../{aios => zyos}/utils/NetStateUtils.java | 2 +- .../{aios => zyos}/utils/SchemeUtils.java | 2 +- .../{aios => zyos}/utils/ScreenUtils.java | 2 +- .../{aios => zyos}/utils/SystemUtils.java | 2 +- .../uiui/{aios => zyos}/utils/TimeUtils.java | 2 +- .../uiui/{aios => zyos}/utils/ToastUtil.java | 4 +- .../com/uiui/{aios => zyos}/utils/Utils.java | 6 +- .../{aios => zyos}/utils/WakeUpUtils.java | 2 +- .../{aios => zyos}/view/CustomContent.java | 2 +- .../view/CustomContentCallbacks.java | 2 +- .../view/GridSpaceItemDecoration.java | 2 +- .../view/HorizontalItemDecoration.java | 2 +- .../{aios => zyos}/view/JzvdStdAssert.java | 2 +- .../{aios => zyos}/view/JzvdStdRound.java | 4 +- .../{aios => zyos}/view/MyGridLayout.java | 6 +- .../view/MyJzvdStdNoTitleNoClarity.java | 4 +- .../view/RecyclerItemDecoration.java | 2 +- .../RecyclerViewSpacesItemDecoration.java | 2 +- .../{aios => zyos}/view/RulerSeekBar.java | 2 +- .../view/ScaleCircleNavigator.java | 2 +- .../viewpager2/ViewPager2Helper.java | 3 +- .../viewpager2/Viewpager2Adapter.java | 2 +- .../main/res/layout-land/activity_main.xml | 43 + .../main/res/layout-land/fragment_control.xml | 2 +- .../main/res/layout-land/fragment_custom.xml | 4 +- .../res/layout-land/fragment_custom_back.xml | 4 +- .../{layout => layout-port}/activity_main.xml | 14 + .../main/res/layout-port/fragment_control.xml | 2 +- .../main/res/layout-port/fragment_custom.xml | 4 +- app/src/main/res/layout/activity_notice.xml | 2 +- app/src/main/res/layout/fragment_applist.xml | 2 +- app/src/main/res/layout/item_alarm_clock.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- .../uiui/{aios => zyos}/ExampleUnitTest.java | 2 +- app/tpns-configs.json | 2 +- settings.gradle | 2 +- 184 files changed, 689 insertions(+), 7446 deletions(-) create mode 100644 app/keystore/TeclastMTK12.jks delete mode 100644 app/keystore/mtkAndroid12.keystore delete mode 100644 app/keystore/xueshibaoos.jks delete mode 100644 app/keystore/zhanxun.keystore delete mode 100644 app/libs/QWeather_Public_Android_V4.9.jar rename app/src/androidTest/java/com/uiui/{aios => zyos}/ExampleInstrumentedTest.java (88%) delete mode 100644 app/src/main/java/com/uiui/aios/activity/APPListActivity.java delete mode 100644 app/src/main/java/com/uiui/aios/activity/EmergencyActivity.java delete mode 100644 app/src/main/java/com/uiui/aios/activity/QuickAppActivity.java delete mode 100644 app/src/main/java/com/uiui/aios/activity/alarm/AlarmClockActivity.java delete mode 100644 app/src/main/java/com/uiui/aios/activity/alarm/AlarmClockContact.java delete mode 100644 app/src/main/java/com/uiui/aios/activity/alarm/AlarmClockPresenter.java delete mode 100644 app/src/main/java/com/uiui/aios/activity/code/FamilySpaceActivity.java delete mode 100644 app/src/main/java/com/uiui/aios/activity/code/FamilySpaceContact.java delete mode 100644 app/src/main/java/com/uiui/aios/activity/code/FamilySpacePresenter.java delete mode 100644 app/src/main/java/com/uiui/aios/activity/contact/ContactActivity.java delete mode 100644 app/src/main/java/com/uiui/aios/activity/contact/ContactContact.java delete mode 100644 app/src/main/java/com/uiui/aios/activity/contact/ContactPresenter.java delete mode 100644 app/src/main/java/com/uiui/aios/activity/main/MainContact.java delete mode 100644 app/src/main/java/com/uiui/aios/activity/main/MainPresenter.java delete mode 100644 app/src/main/java/com/uiui/aios/activity/weather/WeatherActivity.java delete mode 100644 app/src/main/java/com/uiui/aios/activity/weather/WeatherContact.java delete mode 100644 app/src/main/java/com/uiui/aios/activity/weather/WeatherPresenter.java delete mode 100644 app/src/main/java/com/uiui/aios/adapter/APPListAdapter.java delete mode 100644 app/src/main/java/com/uiui/aios/adapter/AlarmAdapter.java delete mode 100644 app/src/main/java/com/uiui/aios/adapter/AlarmClockAdapter.java delete mode 100644 app/src/main/java/com/uiui/aios/adapter/AppSelectedAdapter.java delete mode 100644 app/src/main/java/com/uiui/aios/adapter/ContactAdapter.java delete mode 100644 app/src/main/java/com/uiui/aios/adapter/HealthCodeAdapter.java delete mode 100644 app/src/main/java/com/uiui/aios/adapter/NotificationAdapter.java delete mode 100644 app/src/main/java/com/uiui/aios/adapter/SOSNnmberAdapter.java delete mode 100644 app/src/main/java/com/uiui/aios/adapter/WeatherDayApdapter.java delete mode 100644 app/src/main/java/com/uiui/aios/bean/WeatherDailyJson.java delete mode 100644 app/src/main/java/com/uiui/aios/fragment/AppListFragment.java delete mode 100644 app/src/main/java/com/uiui/aios/fragment/ControlFragment.java delete mode 100644 app/src/main/java/com/uiui/aios/fragment/SecondFragment.java delete mode 100644 app/src/main/java/com/uiui/aios/network/NetInterfaceManager.java delete mode 100644 app/src/main/java/com/uiui/aios/network/URLAddress.java delete mode 100644 app/src/main/java/com/uiui/aios/network/api/ActivityListApi.java delete mode 100644 app/src/main/java/com/uiui/aios/network/api/AlarmClockApi.java delete mode 100644 app/src/main/java/com/uiui/aios/network/api/AppUsageRecordApi.java delete mode 100644 app/src/main/java/com/uiui/aios/network/api/ArticleDetailsApi.java delete mode 100644 app/src/main/java/com/uiui/aios/network/api/ArticleListApi.java delete mode 100644 app/src/main/java/com/uiui/aios/network/api/DemandListApi.java delete mode 100644 app/src/main/java/com/uiui/aios/network/api/GetAdminSnSettingApi.java delete mode 100644 app/src/main/java/com/uiui/aios/network/api/GetDesktopApi.java delete mode 100644 app/src/main/java/com/uiui/aios/network/api/GetMailList.java delete mode 100644 app/src/main/java/com/uiui/aios/network/api/GetUserIDApi.java delete mode 100644 app/src/main/java/com/uiui/aios/network/api/GoodsDetailsApi.java delete mode 100644 app/src/main/java/com/uiui/aios/network/api/GoodsListApi.java delete mode 100644 app/src/main/java/com/uiui/aios/network/api/HealthCodeApi.java delete mode 100644 app/src/main/java/com/uiui/aios/network/api/RunNewApp.java delete mode 100644 app/src/main/java/com/uiui/aios/network/api/SNInfoApi.java delete mode 100644 app/src/main/java/com/uiui/aios/network/api/SOSRecordApi.java delete mode 100644 app/src/main/java/com/uiui/aios/network/api/SendScreenshotApi.java delete mode 100644 app/src/main/java/com/uiui/aios/network/api/Setting.java delete mode 100644 app/src/main/java/com/uiui/aios/network/api/SnIsActivationApi.java delete mode 100644 app/src/main/java/com/uiui/aios/network/api/UpdateAlarmClockApi.java delete mode 100644 app/src/main/java/com/uiui/aios/network/api/UpdateAppIconApi.java delete mode 100644 app/src/main/java/com/uiui/aios/network/api/UpdateDesktopApi.java delete mode 100644 app/src/main/java/com/uiui/aios/network/api/UserInfoControl.java delete mode 100644 app/src/main/java/com/uiui/aios/service/main/MainSContact.java delete mode 100644 app/src/main/java/com/uiui/aios/service/main/MainService.java rename app/src/main/java/com/uiui/{aios => zyos}/activity/NoticeActivity.java (82%) rename app/src/main/java/com/uiui/{aios => zyos}/activity/PolicyActivity.java (97%) rename app/src/main/java/com/uiui/{aios => zyos}/activity/main/MainActivity.java (68%) create mode 100644 app/src/main/java/com/uiui/zyos/activity/main/MainContact.java create mode 100644 app/src/main/java/com/uiui/zyos/activity/main/MainPresenter.java rename app/src/main/java/com/uiui/{aios/fragment/custom => zyos/adapter}/CustomPagerAdapter.java (94%) rename app/src/main/java/com/uiui/{aios => zyos}/alarm/AlarmOpenHelper.java (98%) rename app/src/main/java/com/uiui/{aios => zyos}/alarm/AlarmService.java (89%) rename app/src/main/java/com/uiui/{aios => zyos}/alarm/AlarmUtils.java (99%) rename app/src/main/java/com/uiui/{aios => zyos}/base/BaseActivity.java (98%) rename app/src/main/java/com/uiui/{aios => zyos}/base/BaseApplication.java (86%) rename app/src/main/java/com/uiui/{aios => zyos}/base/BaseFragment.java (99%) rename app/src/main/java/com/uiui/{aios => zyos}/base/BaseFragmentPagerAdapter.java (99%) rename app/src/main/java/com/uiui/{aios => zyos}/base/BasePresenter.java (84%) rename app/src/main/java/com/uiui/{aios => zyos}/base/BaseService.java (98%) rename app/src/main/java/com/uiui/{aios => zyos}/base/BaseView.java (52%) rename app/src/main/java/com/uiui/{aios => zyos}/bean/ActivityBean.java (99%) rename app/src/main/java/com/uiui/{aios => zyos}/bean/AlarmClockData.java (98%) rename app/src/main/java/com/uiui/{aios => zyos}/bean/AlarmItem.java (95%) rename app/src/main/java/com/uiui/{aios => zyos}/bean/AppListInfo.java (96%) rename app/src/main/java/com/uiui/{aios => zyos}/bean/AppSelectBean.java (96%) rename app/src/main/java/com/uiui/{aios => zyos}/bean/ArticleDetails.java (96%) rename app/src/main/java/com/uiui/{aios => zyos}/bean/ArticleInfo.java (97%) rename app/src/main/java/com/uiui/{aios => zyos}/bean/BaseResponse.java (94%) rename app/src/main/java/com/uiui/{aios => zyos}/bean/Contact.java (97%) rename app/src/main/java/com/uiui/{aios => zyos}/bean/DemandBean.java (98%) rename app/src/main/java/com/uiui/{aios => zyos}/bean/DesktopIcon.java (97%) rename app/src/main/java/com/uiui/{aios => zyos}/bean/GoodsDetails.java (98%) rename app/src/main/java/com/uiui/{aios => zyos}/bean/GoodsInfo.java (98%) rename app/src/main/java/com/uiui/{aios => zyos}/bean/HealthCode.java (93%) rename app/src/main/java/com/uiui/{aios => zyos}/bean/MapBean.java (98%) rename app/src/main/java/com/uiui/{aios => zyos}/bean/NetDesktopIcon.java (97%) rename app/src/main/java/com/uiui/{aios => zyos}/bean/SnInfo.java (99%) rename app/src/main/java/com/uiui/{aios => zyos}/bean/SystemSettings.java (99%) rename app/src/main/java/com/uiui/{aios => zyos}/bean/UserAvatarInfo.java (96%) rename app/src/main/java/com/uiui/{aios => zyos}/bean/UserId.java (91%) rename app/src/main/java/com/uiui/{aios => zyos}/config/CommonConfig.java (96%) rename app/src/main/java/com/uiui/{aios => zyos}/dialog/CustomDialog.java (99%) rename app/src/main/java/com/uiui/{aios => zyos}/dialog/PasswordDialog.java (99%) rename app/src/main/java/com/uiui/{aios => zyos}/dialog/PrivacyPolicyDialog.java (97%) rename app/src/main/java/com/uiui/{aios => zyos}/dialog/SingleDialog.java (99%) rename app/src/main/java/com/uiui/{aios => zyos}/disklrucache/CacheHelper.java (99%) rename app/src/main/java/com/uiui/{aios => zyos}/disklrucache/Utils.java (98%) rename app/src/main/java/com/uiui/{aios => zyos}/fragment/custom/CustomContact.java (72%) rename app/src/main/java/com/uiui/{aios => zyos}/fragment/custom/CustomFragment.java (63%) rename app/src/main/java/com/uiui/{aios => zyos}/fragment/custom/CustomPresenter.java (88%) rename app/src/main/java/com/uiui/{aios => zyos}/iconpostition/IconPositionDBHelper.java (96%) rename app/src/main/java/com/uiui/{aios => zyos}/iconpostition/IconPositionManager.java (96%) rename app/src/main/java/com/uiui/{aios => zyos}/iconpostition/IconUtils.java (97%) rename app/src/main/java/com/uiui/{aios => zyos}/manager/ConnectManager.java (98%) rename app/src/main/java/com/uiui/{aios => zyos}/manager/ConnectMode.java (82%) rename app/src/main/java/com/uiui/{aios => zyos}/manager/RemoteManager.java (96%) create mode 100644 app/src/main/java/com/uiui/zyos/network/NetInterfaceManager.java create mode 100644 app/src/main/java/com/uiui/zyos/network/UrlAddress.java rename app/src/main/java/com/uiui/{aios => zyos}/network/interceptor/RepeatRequestInterceptor.java (97%) rename app/src/main/java/com/uiui/{aios => zyos}/receiver/BootReceiver.java (94%) rename app/src/main/java/com/uiui/{aios => zyos}/receiver/InstallResultReceiver.java (98%) create mode 100644 app/src/main/java/com/uiui/zyos/service/DownloadService.java rename app/src/main/java/com/uiui/{aios => zyos}/service/NotificationService.java (98%) create mode 100644 app/src/main/java/com/uiui/zyos/service/main/MainSContact.java rename app/src/main/java/com/uiui/{aios => zyos}/service/main/MainSPresenter.java (54%) create mode 100644 app/src/main/java/com/uiui/zyos/service/main/MainService.java rename app/src/main/java/com/uiui/{aios => zyos}/tpush/Constants.java (94%) rename app/src/main/java/com/uiui/{aios => zyos}/tpush/MessageReceiver.java (97%) rename app/src/main/java/com/uiui/{aios => zyos}/tpush/common/DBOpenHelper.java (94%) rename app/src/main/java/com/uiui/{aios => zyos}/tpush/common/NotificationService.java (98%) rename app/src/main/java/com/uiui/{aios => zyos}/tpush/po/XGNotification.java (98%) rename app/src/main/java/com/uiui/{aios => zyos}/utils/ApkUtils.java (99%) rename app/src/main/java/com/uiui/{aios => zyos}/utils/AppUsedTimeUtils.java (99%) rename app/src/main/java/com/uiui/{aios => zyos}/utils/AppUtil.java (99%) rename app/src/main/java/com/uiui/{aios => zyos}/utils/BitmapUtils.java (98%) rename app/src/main/java/com/uiui/{aios => zyos}/utils/BrightnessUtils.java (99%) rename app/src/main/java/com/uiui/{aios => zyos}/utils/CmdUtil.java (99%) rename app/src/main/java/com/uiui/{aios => zyos}/utils/DataUtil.java (96%) rename app/src/main/java/com/uiui/{aios => zyos}/utils/FFmpegUtils.java (97%) rename app/src/main/java/com/uiui/{aios => zyos}/utils/FileUtil.java (98%) rename app/src/main/java/com/uiui/{aios => zyos}/utils/ForegroundAppUtil.java (99%) rename app/src/main/java/com/uiui/{aios => zyos}/utils/GlideLoadUtils.java (98%) rename app/src/main/java/com/uiui/{aios => zyos}/utils/GsonUtils.java (95%) rename app/src/main/java/com/uiui/{aios => zyos}/utils/HomeWatcher.java (98%) rename app/src/main/java/com/uiui/{aios => zyos}/utils/IconUtils.java (99%) rename app/src/main/java/com/uiui/{aios => zyos}/utils/LauncherUtils.java (99%) rename app/src/main/java/com/uiui/{aios => zyos}/utils/MD5Util.java (98%) rename app/src/main/java/com/uiui/{aios => zyos}/utils/NetStateUtils.java (98%) rename app/src/main/java/com/uiui/{aios => zyos}/utils/SchemeUtils.java (96%) rename app/src/main/java/com/uiui/{aios => zyos}/utils/ScreenUtils.java (97%) rename app/src/main/java/com/uiui/{aios => zyos}/utils/SystemUtils.java (96%) rename app/src/main/java/com/uiui/{aios => zyos}/utils/TimeUtils.java (97%) rename app/src/main/java/com/uiui/{aios => zyos}/utils/ToastUtil.java (97%) rename app/src/main/java/com/uiui/{aios => zyos}/utils/Utils.java (98%) rename app/src/main/java/com/uiui/{aios => zyos}/utils/WakeUpUtils.java (99%) rename app/src/main/java/com/uiui/{aios => zyos}/view/CustomContent.java (98%) rename app/src/main/java/com/uiui/{aios => zyos}/view/CustomContentCallbacks.java (95%) rename app/src/main/java/com/uiui/{aios => zyos}/view/GridSpaceItemDecoration.java (98%) rename app/src/main/java/com/uiui/{aios => zyos}/view/HorizontalItemDecoration.java (97%) rename app/src/main/java/com/uiui/{aios => zyos}/view/JzvdStdAssert.java (98%) rename app/src/main/java/com/uiui/{aios => zyos}/view/JzvdStdRound.java (98%) rename app/src/main/java/com/uiui/{aios => zyos}/view/MyGridLayout.java (98%) rename app/src/main/java/com/uiui/{aios => zyos}/view/MyJzvdStdNoTitleNoClarity.java (89%) rename app/src/main/java/com/uiui/{aios => zyos}/view/RecyclerItemDecoration.java (97%) rename app/src/main/java/com/uiui/{aios => zyos}/view/RecyclerViewSpacesItemDecoration.java (98%) rename app/src/main/java/com/uiui/{aios => zyos}/view/RulerSeekBar.java (99%) rename app/src/main/java/com/uiui/{aios => zyos}/view/ScaleCircleNavigator.java (99%) rename app/src/main/java/com/uiui/{aios => zyos}/viewpager2/ViewPager2Helper.java (92%) rename app/src/main/java/com/uiui/{aios => zyos}/viewpager2/Viewpager2Adapter.java (97%) create mode 100644 app/src/main/res/layout-land/activity_main.xml rename app/src/main/res/{layout => layout-port}/activity_main.xml (68%) rename app/src/test/java/com/uiui/{aios => zyos}/ExampleUnitTest.java (93%) diff --git a/app/build.gradle b/app/build.gradle index e1c8a14..fe05d45 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.application' apply plugin: "com.tencent.android.tpns" def appName() { - return "关怀系统OS" + return "科大讯飞学习桌面" } def releaseTime() { @@ -13,11 +13,11 @@ android { compileSdkVersion 29 defaultConfig { - applicationId "com.uiui.aios" + applicationId "com.uiui.zyos" minSdkVersion 24 targetSdkVersion 29 - versionCode 76 - versionName "8.5" + versionCode 1 + versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -49,76 +49,23 @@ android { } signingConfigs { - zhanRui { - storeFile file("keystore/zhanxun.keystore") - storePassword "123456" - keyAlias "zhanxun" - keyPassword "123456" - v1SigningEnabled true - v2SigningEnabled true - } - - mtk { - storeFile file("keystore/xueshibaoos.jks") - storePassword "123456" - keyAlias "xueshibaoos" - keyPassword "123456" - v2SigningEnabled false - } - mtk12 { - storeFile file("keystore/mtkAndroid12.keystore") + storeFile file("keystore/TeclastMTK12.jks") storePassword "123456" - keyAlias "mtk12" + keyAlias "TeclastMTK12" keyPassword "123456" v2SigningEnabled false } } buildTypes { - MTKAndroid12Release.initWith(release) - MTKAndroid12Release { - signingConfig signingConfigs.mtk12 - manifestPlaceholders = [ - Baidu_AK: "ZauKWLbO0AfHSgR2j3unMkP0MwbBZHxO" - ] - } - - MTKAndroid12Debug.initWith(debug) - MTKAndroid12Debug { - versionNameSuffix "-debug" - debuggable true - signingConfig signingConfigs.mtk12 - manifestPlaceholders = [ - Baidu_AK: "ZauKWLbO0AfHSgR2j3unMkP0MwbBZHxO" - ] - } - - zhanRuiRelease.initWith(release) - zhanRuiRelease { - signingConfig signingConfigs.zhanRui - manifestPlaceholders = [ - Baidu_AK: "rKsRkc6YbQbHLyiAGCDqukj9ltkU2S7M" - ] - } - - zhanRuiDebug.initWith(debug) - zhanRuiDebug { - versionNameSuffix "-debug" - debuggable true - signingConfig signingConfigs.zhanRui - manifestPlaceholders = [ - Baidu_AK: "rKsRkc6YbQbHLyiAGCDqukj9ltkU2S7M" - ] - } - debug { // 显示Log versionNameSuffix "-debug" minifyEnabled false //Zipalign优化 zipAlignEnabled true - signingConfig signingConfigs.mtk + signingConfig signingConfigs.mtk12 applicationVariants.all { variant -> variant.outputs.each { output -> if (outputFile != null) { @@ -142,7 +89,7 @@ android { //前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,后一个文件是自己的定义混淆文件 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' //签名 - signingConfig signingConfigs.mtk + signingConfig signingConfigs.mtk12 // 将release版本的包名重命名,加上版本及日期 applicationVariants.all { variant -> variant.outputs.each { output -> @@ -164,7 +111,6 @@ android { dependencies { // implementation fileTree(dir: 'libs', include: ['*.jar']) compileOnly files('libs/framework.jar') - implementation files('libs/QWeather_Public_Android_V4.9.jar') implementation project(path: ':niceimageview') //保持1.3.1 更新会报错 @@ -213,8 +159,6 @@ dependencies { //bindView implementation 'com.jakewharton:butterknife:10.2.3' annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.3' - //百度地图 -// implementation 'com.baidu.lbsyun:BaiduMapSDK_Location:9.1.8' //MMKV implementation 'com.tencent:mmkv-static:1.2.14' implementation 'com.tencent.tpns:tpns:1.3.7.0-release' @@ -222,6 +166,8 @@ dependencies { implementation 'com.gitee.zackratos:UltimateBarX:0.8.0' //指示器 implementation 'com.github.hackware1993:MagicIndicator:1.7.0' // for androidx + // implementation 'io.github.h07000223:flycoTabLayout:3.0.0' + implementation 'com.github.liyujiang-gzu:FlycoTabLayout:781b8829a7' implementation 'com.king.view:circleprogressview:1.1.2' //工具类 implementation 'com.blankj:utilcodex:1.31.0' diff --git a/app/keystore/TeclastMTK12.jks b/app/keystore/TeclastMTK12.jks new file mode 100644 index 0000000000000000000000000000000000000000..669cfa92936634484a135ca9a0486d5ad89899d3 GIT binary patch literal 2553 zcmd6o`8U-2AIE3K3}YM7hztf1<1_Y>7G#M?GM0;MBkRbTBF2p-M9MPu zy-{|;MTX2Rl1bd$>3;9``|X_X_Yb%~yw3Z)9`E=2oY(7pp6}=DJL@|O1Oh=g0sbra zLP+j@uE8PxA-)7P4y57x+qyv@I0&G^b^v}ZdP{PL1PzsknLCq!akT8`qN3wZjo1Y@X`yKtUqA?5SM!r;5GknM&VirR<) z&y0}1z-@Hxr-@GXGxDukm>nh?!&Rf}C;WuI(qyG{eK>m2bC-6g7)#{rVAEdn(p-vWfZjWw6|Mbp$%!EMujP53lgd@CfN? zVV_kP()x~sN^fnobK7)2s4=vgJ(6;Ho9wXG)V>*J?$e&+{@OUlFz%|_!^?%4SikjG zSrZD{kDZOgFio(}nQ~G~Z=T54wBXzF;f6shCt4CTxUXJ&vYsf_|b4)sWLyD>K!A9s{ z^GNZ91BMkz2QH`@PsvBzzx7$+WZR(^D^*EY>yd+Tn8XL8HWV?9>7?+PHc_{0&Lgep0eLc&&*yB2a$T_~tcG=Y6pHY-%sPGwE~1~c!o*38!+jn`|>*<&qo+6Vy~+`5)H z(K;%Y`%_s^(HMIpH~1N2^_$1LO^3}VZ|KoyEM}DE)l%%GQ4o82CepU)8C7@+bzAP6 zrq0bE1R@vbG^BZxF{roKHm|y7zEdx(vPjXONR=Vn*;XA_h0Cv?CpPEpaa_u3mRjd> z*WbR+?(mIiFd4YMgV(Yy9@lP*WM%k!67US?pXPFzyh{ZQux*!4#n0wR)o+6|K@_e^9r zp0q%Z_%b1TsQjPW59sdq{)J1-F^y8EeExRElO?y8P57yL5UK8jxHAM_>n6z5xs-P~ zjFzoy=+aZzfb28MQdRmj{uy~rNn3_BljyU+LXgHYSzr7VuZ!) zJH`q&f76Qhq~w{IL!U-XIji^L7P%CEA*B{4k(~qwxkYfhQ#jf~`sV(Z{)u<7b@CM^ z5p$LDt6J5!D#9C&ua2ye@^b872zYIrGAyR|?k6&4qxB`aVFtdR9L1i0nYo+N&|KoO zq4$?N!tL;yz#$L_R?4x%#{dK=vmnmG6kKye|IXeKl^3JivETr(z( zzzZO_pf)frG{nZ5fChwqBs^%OfvcalXFw3y+m#>+i2Q)uXw>O|P;!W?HyKOxCS4*3 zatxQlk!bD{WRIW#Z;yWy-v1%c{}LGh`=1&RU{SQ|zwRFYd&Rp4_yhaJP=F4gLC{oF z(*QI92Qid7r!j!=clu8)n+nGM{J@+M1f_yeoY@5Cfl$FaUR^tT9nh7)-S;xvyI{QyYOv>YQZ&3W?tIW`$vIVJLGN!O8 zu<6lACU ze=PdjHI6YSM7Q!?5ZT&~HHv0f&ugns!5(twdG8D=pG#jK)EYUxh15+-*2sTRV*W)v zutXv7zHVXMxiUWM9g(@olf(OEEgP1P+%I5l4V;rlpINmgayNPB?VifHTEkw!q7X$b z)eohQt0u67QW6fAINYYJon@-V7T8)3o^MGBZ2!GW0Ro2R$Ls(xTYw}-IFkG@QJ9G3 zLQd6m_6tR}WKdk&Qfo4nM!yHdbpP0wg~hZ0F^!b}dnPv~s~{%hAF2fEPd|?DM=NL; z9DstsyFbf=^Zz*V0E2Ahtm?)OO9j6Z@Hcuyn;5w$0#ZB@pVJ>X8vb0bq7M^Y682si zPi*OQ9c)t_ReyK39XT5>GO&Zxbr3f&f}f^7lB8B2#F{k4*Dy>KKgMqIPYaK#*pQ-R z=9x~gF2V?!aZjfqfr^XHmzML*Rgv^bPF<0#Yz-zvpGw^wO2c9lAh`a8{u12|2*$U31I;IY_i+A>=NryR_?hD%Xnx#xm+R-5oG$Iq# zZY~_%d|YXx&e~p1c;#a?-x|r{Etg-VqtiM7ek+~%!J*jq i3k%n*Z`M^-*)|E%3NhLDTX{PpKhi;3+Qwyp5q|=Hqc`OM literal 0 HcmV?d00001 diff --git a/app/keystore/mtkAndroid12.keystore b/app/keystore/mtkAndroid12.keystore deleted file mode 100644 index 860f30f3fb87fbfeac382d4ac144be5ba998cd0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2701 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 diff --git a/app/keystore/xueshibaoos.jks b/app/keystore/xueshibaoos.jks deleted file mode 100644 index b94a626a1e59b41e0d2b0e1725c1d164b6a8f5ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2552 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 KiHH~&lJ##+rq5Ua diff --git a/app/libs/QWeather_Public_Android_V4.9.jar b/app/libs/QWeather_Public_Android_V4.9.jar deleted file mode 100644 index 55800dbb8b803094f44437021a8e5252a49b200a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 195680 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%0AF+BJ~q^1dF zK?=1q`1N@$qy*bF*Q$6FL5BNq#Ae1TxS9Yak#^K-Iz<~oWc_eOG+|Yl+~DtiNNMSh3!KrWv)^D~H~=>^M)Lt+21Q{gTFKPc z;i43S3hW&3Xyw=__d5a&h$sx% zLYTx=qeyFv31Bd&Us{o2C#2h!8@+k0JzHnJoNSY+ZWl|O^?8j+)*{4PIQ5&{s0$J{ z$(hG9W zpRo-0-=umQRl665{|sapLC`0ba)d0&4zMca#CI$=j8;c22@Wow;Rp-v7w*XTRsm0u zBE}_DimoQkp79X$LpG9>GlH4Rg=?kjyikPK5lnQQmR#oSobZ?89cUcLaNsByeJJ;C+k!9HA?ETgKTl=W zXf2GEZ1-v&G4DYsvRBaEj)N-&B^aBvOgA1I#FY+Xd}{JWsqraP#u`#3Jxp$a9WM<{ zF{dh0!wo5d6yg~$T6EE_LDVrAnZHU2{Va_|#H&TP2fGhQ7aT0a9hM=OObYqQY1<}O zuM(B-h$4cQL#*l+JUF`&2mNJ*rz%QwD!zD^`zHY5+v8Ms{;k;UScX}v94^k#H{>E3 zH(7bVs?)~7_zQ!xiC!qYL~8Vkx7^c#6$^oLTBypFk9Zi0R1Z(x>iLp#tpn;YG;{N1 zb<@WU!ikE!0j(8jWb5;1HehssF zAOSpB2=PIUiZBwVYbTc{#&NeT#R3nhf}QZAq-_!HviR}ktiC<9n<=F$T{0SBVR*&} z#4hXSi25A&ArT|_^{XwzlwCfr(T>dE~sz-gO>#aWTO8!Kk#QE9O$I~s|@}-X=rxxpEO`jR!e62 z{$Er(h>fYG;~(S%wa*}AiN5BAYmI1Qj$pP&2LCFB8*T;qBL86we<%(LH(6<>WbGl}*jWP8yjWP`}P1b#?8?NiG8;dKDkCrSPwA8R(@G=`{NXZPZeefI_ zkFrrEIQ1$}Qn}uG4csx_!X+hph2&1NUG#O)u4$}=?I>ti*F}#vcUU{e!uz$Da*Rza z!I{I-9fA#QMTnpId}nfB9=!PJDOX!<{>)A~r1Ei1eGrZ-$a8Dto#3{x)PE zw%No@*bKV|<3Y;x1LP@`nv=TYQ5La$AnTacxRukq)BIcUE)?$x_fPyRJ^F035|BR^ z=cZq<&k{9FBf}!8pf8-|E13>mu*%P}1ti`cw6!j>i@JRnS#+=X;Z=fgxr5Fn&N(pe zcC9!#Z@k*-dk70TNl})NFx;PfM5D!r#IIUeX?nvlM{VkrY^|qW8<1$-#8A1Azb3fX z_1rnl+-Q9!8&k;l4H*M3UXBAz_E0wghgDfi{Gn1sUp)`Fd>P0{s}srk;wjb{L)t#9n_7&Q++s zFnokoCP2bkqzd#$DVfTj+oTp{-G*~LtlzO>FYRUy8TQQ3e+S}T!A)Lg2D}ji&=lqQ z|EYR^c&9%*qd!Yp?2c)m^#$oQsTMI0D>l%Ikb=|F*eqY%csAo78!jD9sQ-}{{n2(} zZEtk+p7!uONS{4_cQyXebh72#pbKoV*9XoF4g*de5#G~o!pg+PnLn1yi35|_!2}-y zx24XuFrpxuSJPONK_jDjt^De~dZPz!legk=#u4H+3sR%Li8b1hDhDnXyAlnDL8Eu+ zxC!FJUYKj|`rA^%;hNbb8lnr2S6{M;ZYn4z>nt|!S}AWoo^;tLwz6Hg9g$_yY2>hc zp;Mr@qam-7Q;|-j>f2(o>%yy*FI3n%5TH^xHg_wg4CE1!ru-C#i)?v;#HaAxTdyWb z5kA;p%w741ZQHr(57J}2arUx*j1IlF@TqN*oa1~ghn1^$pbq3s9YUbT?S1lx1LC zr?_N*ytqZ%J-vkwnq@P#Mt ze>jnU`+&drSN}!>nVk4c8jbwPBLDPeggDIKPe~~WOd10nJ za=VjvQ`|ETz@7m@pyy#g2D*o&kOm5eIp*mZc2_z z;ec3|=olgFc$79Lf%e05P@AgOBPA7<1iB6ui#0nT842nk7N2eT|TEI$Uy38ZC*rM zb5C|=0k{W3vGyS!Hs@15o-#?=wyV{C(trScJAb>fzP*-0+xyh$?zkMG$|_( ze#JezlThuMBFI6}&SWn@-LCwI#7U{PS@njX0>YfY8kAkp7Nk2<$*blH0SZmSnXV|T zSeD=iRTfs)(2uhoAiG9)UE_3*boj=QQyDqz!)AbwSoK>3_hJzc~YH5P7U^n-{wlJ_F8i5X`icP28 z*X5)`Ald#YItt(QV*auSmq$+n;%A>##QxW&sPeLXnl~C!z?yTMs@;CYnph80OYXge zQXN*do0cv7o0kLT$H||povpi7$gTRcXND7_c;@RRJnLDTs$lliks%-L0un;Ls^e;m zBx#)VHjviPQYg>|5q`Z?A z)Vzco8oLXAga>>=&}Nm=ZahxIP4o@9WG2lnUhPi~aEW%HJk*ZHM++bmC zd20mLmL$eFv$hvYktd^djXFI#)|e1dZ%G@epWm5y%@WdFf50=1V4jhd>(9|};HnJ; zmpEmPxk~I6INd}>ihXGiht-s!t8@B)=#BjIxS_MFy`6)@e|JYHc1Py-0fAHoCS3nH zPWbEFa==ggsx3V~C|Uw7k>_`Rh-7raug!uGiz}m{av5nWYJ*_kptvG*!VSnR!Qukx zVlin|L@{Ap3#pc-gro#~)%QB78H&TWH$fPXGOKGpsRj0h`axva zrsb-MrSKK2Ybb%cXD3nb_S02ayeIOS6Qdx&{S>I<&qQ@?@^Ko!6{A9VzCk^VizR`l zTXq}k28QQ_-`<3U?A{)u)j*`fX9SWdhm>&A>2h}%;J5wkADir~%D6vkqHuaJZ zUvm$7cXI{svLl%K@@Qhb?rY7w+GHo`W@mx3%2ys^{<5a>JH?UaWyXifDG+9p%DkHv zXCx0)ls?1}s&BQinM>CbLdWDHQ)|o-`ku^OdmR(nBUqDy_%-s)OS+V4gfHs(T7Jj0 za||EGd+|4F@e3M^#5iTIap&lH+l&fgQ64d~U1^uur_U81+!}2PL_}k!wHgZW(fEW; zm!@OF`9)lUCirOE>w#OV~=@a2}HDxvv;vJ$oEN!rzii~&h=t~L3*eG zF2+eFlag8gbIS~rNgHY50hQJHJR+GUsUbc$Azu5Ihncs)geg{gN|2sf6c}7R?BqWAtP<7cH+i#j z<<&&>xFG-GJz2<>xWE+ucZny5lg{xL@|38vA#|a1pOzDDp;Za5rAO^m#?PS)`x$gj zv{T*6i``4JW<-`Zbmg$psb-3nqHG%+Ask@mj0Bt_iVCkDYPPBhGZTbFD6&xQmyd2D zx8mtGUF((^QfdfjaX=-qGY*zTYP7VjS;-NT(vQi>_pG!SW@3qpGJ2Xo=6%8OK6L|x zp0g;r8NQ01gF77_99)Yjyk4OHebKTGO>ponY}V&Hhonb%i78pCNkhUDxz|>OzWF

&Y__rfHMl2kfU5qg+}T_+Dm~Mmo-{wz(kAunO8wzm0Mc zPi;0lpDyM)jAHP?pNSMyKfpU{bCFKfk9qA&&|;^Ec1o=56{Z%X8QIkyk;?u$x}2ms zR6BH4NW-K;@|gH5^alu2cJ<|{Vt2#yK^fe(YadAge@+|{u$(;4kvvD;$uAE7E`dC6 zS&h*_Wl#e0{Soljy#JU+{UzTj4z@;4Vzy>(zt$Lq>@9!};=k=<;vX*C!r3XI?OK-# zdASHZD`~zc9}BM-9m7#6Kot4bt&NN!oW4Uo-h&1(j=C2w-k@)-%Sk7VL$=;o@I9P! zvVQ$#9g&p+&$LvV%e0Baot15=uap_2wBqVDi_kIb+Jq}P?55c>@o1J*3oAK5yGMf3 zfznYN*+){mNA2eVZy682E@G6P>*jjrKSXrzUW$mXu;O=7wmz`&?7pq;b=}MMwx5LK zwWkdatP6BmF7GmG-2KrM()cCI3=?Jm%T|anBhh>_t3p9 zW8`mzR4x`TaJ2Aq;P)Focp=s;nNY_lf3u zfoC)K!`edZAU(TV+Tx+bf)RT~%vYa10f<_|B#$5WqE#a z;}qt7eB(>XVs`4SPoZ3|!d1k`-?y$DqUyeu@WA(=e|E+mF9={=-ByivxB^D2_;Mak zO|PDA9)=WNAicFT84|CA1!pI}lEx#~NYbq~LR5pQY(2}1afL$o;x;u%4|V(DFfULJ zT*v;nOyIQ_AwP_OC#A7MPRA|SriA`Ns?pQus(#u_^?unCS-DqT=xbNg;fB`f0e)cL`jNsK0y_=t9f=#r59HFr`+$Q8? zJ$=~ioO{|<$BgNf?7%|;N9q0+$ePop>LSy$W{Gz@5UEI>wZ?UX>XP>!a!l~X=(x*% zm5yIErf|~|-4n|jK^2nZu!Pr+zeGSQy^TM1hqTX;>QG}Aiy9R?QmcD=L-pD!-Lb8d zgtg>HUlNYW&+#Oj*_6~8@}_}scCK!JsojmQR`PNm^tt=IcCn9}3Ku-jHtJLszBl)P z6dzXBmF{|>ej2FCWFj_&+n`O?Qu$4YX_Vc*-6mPyu&PJ~tv!S|g;ZO)N82qNo*3u9 z&>JZP4e`-o<;!@wWFJ6g^J>xwW_r3Lw$-*P*b#*W=R`+ zhU_CbL@&DHc`Z_*5!HNkAR#JH(ojrk_<;9sA^N?JOZbmMY|I}bljXwxw;JZJz)X?o*pZ@qPsw5+` ztLS=?(;gABfo)|P1qxefqTT)e{dxUy{dN79Yy$_DA@Z}I;q{89;djYuq{bw7$j!<3 z$Wq8stdgb;-3nUmPBqO}ojAvpH&)K}zzQ|pwqOeLPc|*;b95W^cw76Zx{g3xg=63g zyFaa0QQyOfcZ#j-B4x@4KbTc2ONeyai?{8tKhiKR)|-@}dvvK>ywh(Ituuz{>ZMPe zerti>WL0jQROuCSXP&ClgLx~b<6I?xxs0&9h44k z<{K(ePgKuo*n)l$o!6h+TKcZ8K7KPA|906^AX47r8LfmAgUgRqa43@0TmGZD=c$>m zX;ph}e&J_WEX_(sgw}^P4CNRZ?rJR~OhlHfZ%Jo^KcPkN7IhlGVODnz^gREG?XMM> zIDF`CIauT+2vRd?Q7gD=ZD9W5?&qqI!N$F!2E``#9d1l$;gh`6hE~SoYxljLB(qZW>@;T3pQ`!2S9ts-gy1%VsH7!>wq0$#4J)sX)xLFJLKG zbFVz&yGYSrt^T!PoeWdWQ(OV~`qB7?Y6jJ7^vy#(V^L_;H0FFeLt0}A(f-UP#2&I z;UVMApK-L3ad_Z=*C7gsBraygKy5s@&1{D$s3eXl2<0KBz>F8ixNHIFKh^^SbxT>1P&iB*(r#>Fev&I2&1fo z-EpbA*1)TT{7pxQN|&LKLfB>>rAYPQC-Dwz(><#=ZBseDd@;PYYEqL_l2T$sv!aY! z`BbXZHQ0*k{YUW0+X4}BEj8$nr{P;M4*)R|_H)^fP#lGbr;N9|jC(rP-d!GV4tPo4 zjbsxbeb%8<^nvZddzZ%Flcn-DqYe47AqNv18w$}z!Pbi4< zaJKS+4RyCx3}TO>gQ2fnQQT5fjIA-!%~h*DT&73G+bR`~n)(k|1~SCPPf!%Ay$!92 zNdz8f<7&W`3TCjaSgAV^9|RY25;ziPTqQaEZD%lkP!>B&9gctR*}rU&SlFW7SKdjW zc8fFS>~hCnm%}%@s5@b5Rm0bM`i&qh=7Yh}bF$6{Bukk;oOJA|hi&J%wpWZI=M~PH?xEu)JIl7FG;dkOnohsR3386}Q74#Q_2p0~LzE zKUDbL@oVK~@68PdbBpfB=+mX#?ye`If)$t9VzbnmR+qj)R5`25rmSfv^--7X5!Ktn zH`!NK@tE(lXX;DL^kgzIvB%jnI(>YH15si_g#={G-gJzXeX;B^W?Sd#EIkH!v!pD6 zizjEB5@Fx1a$z1$gwc|t7arzB4V?9Gp&!B##2BVE-IU!X2C|{X7P)ym(n$^B_n5R^ zbx^96EVNuJUGFGSAZ@w`*O2L+QsF=m^26qIVp!!tp1(&vBa%tHW!Wm+AcQXDeKIlN zz2sO^G+hxpfBkjB(HqLj{nN16mt7ObtW%gA78)trFsLM`Cq;;wjic?ZNN(qGKppQn4(tGGew^j?A$t{nrrw6Glx@!`FB7oL{?$j9gx7 zk4NfEVPtTdJxYTnLvHvRr5b`=F;=C$YMVSoK`_lZ8ZDR2_^RsFmJ6Z+LCq(?;U3@{ zHNsB2%sj1-hrkOQlm5OjBd)Y<<^=}AoTmpF;cMXc>@*tH2NB`E;H!0ov=kZO_#~N= zw5_2Y4Dk|JSGbOMod1plp3@mMrqdl3z^1_iHjU-~qX7MtwExOt@F^X$UWqv9>L_Ov zCFx4TBV5c>Ae9Hbf+a$kyKQQJg*EiD7Q7n*6*?S>-#=D3Yqco6{^MJpi<6V31`9Xy zj)%vg1qac&ya&u=`U*|e$pj&8s|hI+8E1Y8sgY%u=y}`a{9}&Q0=Z1QkrkKNX81Ox zn#KT-2cej3@yyppAHR?w_#Zo1ag$E2TDil%_Te|m1XN5N<7~{DFDNY17#aTngM+~M4NeM*GFVu#`@q;;qMl>0-)n120{Wlp+9|+ z_+MI}s-uyK&HssEf4%)%8CjjOsjRGoHoPpc1BEwuRk+Z|#@dU9+N4Yh-lX~pcK-ay z;*8258=j|2ZE}HaUL0{o^bSgIK@O9Bzj5h=sBV>0i?gTcVf*~sCHX#qfPwcb*e4|} zWkVVNFpzl|zH2|wc4+<}eG$T4o?VFiTqYqbvJEmgdZg7rxERa43L7x*Pl(x$;SlZKg%3tBJl=tLT&_culW*s=cgKvB%8o=_bNXKQnpR{2=jB%BYO|putkgb}y6tP9tYKp9TDZ14W){GTCX%n)G`bwMO8*!Cg1w4KL zJGqo10E5zI=tgp7huHn63P|Sk#0vfbPpl{1nujoelIr}FR(ZRgYAk8)=;C<+PZR(e zC`;Q!Qc)Ur>Il49DB=(PV%|t7;}yH-V+ofDZx>Z%%=1J}1TSw_Q5}w3cXTN&iz(#s zA1zQl$6P!e!Eak*tl(7Y3f|XiRt+g%;cu#ELn(sUDoFBCv^BgKbCfE3WT<}{`rYFe=aa0(F5(hkR&& zs<14UEcQ6oI5sU7E%uivwW!4?_9*kAH6%5qLg7rSKw(5lyqK;HstuMhynWf@LwBpOY&*uQf#RX^UTX~a`(jB zx>-3**<_NC?AkDs9=8S9(&mDph#^rE&CkiAB>XSMwSe#wd&w^WF z=uQ+2H>am9SE4U5sUa8JYBJY|IoN0BjSi2IK2ydhsmebIIUh zl1E2AMMt&`iEHf_R5>UuwNhDi(j2u#ouJHiT3MVVq4%Bqd};j5sepdL42r%CBZ2OH z>E1M4Tl%(kx$MyM@N^$$;PnV1Vb0<$*kG}Goun+F2z#lx0Td&a{JdRs_cW9C99}?fo4)h-q-ygLZ=@w-@ z#!5nelRtbsU$}czvTT_@6hQFMh5u5MA@fQC;Ap);@YVbQ;J7LFNY3S}o;G+w@Rg{a z0)aUTgz;ykE-?2bT5r&J{>u6KWR-%VZ{VY!i#_YB-eG|3z(})u&axg-?lRToQ2^l% zbyK^%`bW?+ri2c&omln2JpRD<2DY`BHGrP1?SGy@iWb#WeM5|$S-^d}H_-*xJx9ZopLok~(pZ_k?f5`*CpE#@)Hg;YF$X0CyJ7vP z3y26-qqouKP&7)bu*+e4BD8C1`??~J_S|rtY*g0n(WhA6onzJWIGO6(I36bm1qkTl zNl^}hwEY9KF`?{6YqA?g-{p2&M@t)7Q*sTkI}R5$prpvAg5o_Q{;mBIFwV%M(1Y8$ z?W47f8ZxavQ(yZHEY>%2M*TkJJmH(9k^O;Jr!A#4oY%LpT8nBtyRb5fDfi9GimlVb zgK_DJtoN_pS1k&gC08U6Di1$O&LF?A6O|1xB(D^sbS#YPl>nNY_we-aM^uV4RZ{0M zV^1Y&YlfP@N(ABOpgrl8%v51@5ScE^@}~nEu`(r#V6lAA-y&aaX|ze-{I2z#qni)z zzS_JHJbiA)>#(5eCAOeO)srh^loB*AjI_E#6!{>t;6}AAnoTXrZJ3q7IY(I|wO~fo zlPdfkUt>`SYvr6cLl2-Z2~`?qk`2v>ndZ3t53F%WR4Lpasx&h&fV2Mp4d8zj@=a>% z%0L{=IXqcr&;bc1Bb6g8PE9391d1JW9#ycKNZ+kF_P)r<@f3uwY-MBBO&{V_A>Fhb zlur7WPv8daUQ@2QIVTru@BeDLWt4F8@GqXE%RBM#FI$ld<1|6fGKhsDaRwcu70^m6 zS+iTFUEr{ZBEn@9Hwurl*(s(-z>m#}2I|iTNxYrRe(7*F_2n^2`SACk*cN2Fop7A2 z8pQW{=Zkea$nHYf|-S3rsY*KG@7pBO78L4}vrPp?z0#4^j*e7fd&I>ro60?^WkS@m6|Ar_M}(<;rX_g@Sy(|= zHt~{*1}9-(f-ER0;+L+jtG6Rk5qi#JKR#Y@W9jalv6P#Gt%G;Wu?x}dNqEfJ_v*0Ng@Vu3SoN zAf1ZjqFkKw>7FbOyj?AnCtq1Gz+3w5z6_P-9_q|mO~X=LVo`IS=g#t)rz{Y@y49T$?98ro66xtBRDb|I?}6j;JDuL+ish<0Js(;mEd+} zp1^ZR)XRr083+3}>md_?;e^?Q2^;evYX&wf79tCQaU)YeRB%)%b|h9Lwk%dGQwmE8 za|$bgS(RaxY1Pd+9n@7)Q#Xyoc7>VEGpg#;Z!L*krlw2417!^Y}ZKs9-7bg@&A@ z#5gbSlkgpS@BHP6Xy=e2CyM68^e9TooCHb$_0!tnECQvmQ7Uet0PeSXs6gNKa60{V zMLU|&sm1Pz2oB!(77(W! zUSIor>(CELqs$O{s8YV)Y^@B`dl{#*y2X}({*IB$YSu9A5c=ipKXM8ZzYb2)11si> z88)g%bki>M%hiA61SEbLoTLR-Odd0Ag8`{ckH``D?{5Ah=OFPXAo(u-X$#;Yry$Jb zumeR5NFfYJiS0si7a*}Cs%ID#x(X~RHl72)#zhr($Ao{Ogzj+ zZPGJZH5-aGr?an~1#CM>e^B&Pt4)MtR)s-W8rL#+{lT=T@vG!MNkrX9 z#3_)B0OVO93ewrYsqIw7Q8q;;MH+%ElI$(vAYq=oD*-)0U{q!lJApmHCE*8|h0K!7 zk}QXmCs`!9ELkNvELkNPtRTs|lmIkE8G>$b>Y}tSpg?&|NNpkdOv1Y8%YqpHf=E|m z5XU?Wpm4aH@IWv!wH;ie#keurbyl>55Jrg{te)5jH z{&E0iz3fl9oRzXJ_f!ieBVU;-#+~m!U&U$Zl~f`M`(UN(7xLs)#`?WX0{m(OVD6bs zIdB)n+n>SQd#f1c7EAL4q9-T{*J>-L{Y}i93^WV^o>^FQq5+P2z_R(Pdg>{FGv60B z-B#k>S?>+uF+hu7PooF+{)=gQv~_KbFQQ!fqQ2gnzyfeay;)W>vq%`on6Zf7{>)nT zjrhlG*~1B7eWy(8e16d_?;S54U&5uh<{gC3SX~1EV9bAqN#B&Xhtu=H^d79r$*%;$ z+i^`Hq5wF0Z}jdHRW-AVK($+b7UaTqd5w=x-PY>MCjg)lBXl~y#66wf8|!0+7Qd{< z2grTxNKh0Yz5SW0F+fX^ljz5IS^+|;Pc#5TZxfDU z;?E7l1t~pS!X>#zAFSI{UE>5$tazK7%`f4SU!(syCUY^k-IIO6hRHe+`}Nk(f%fT` zdZKiu{om8lpMI=)4+k;zZFGPq;zrSQ)GlH z1&Y+ji^`Iz0*;z~fTb=V>q8D0_=Ab;`6KQWBK>H_jhqZV4YaVZn9A8tpS}1CpWj>J z-|ipsxdSYufyE+;Ihk8W0)re?gX!BI2MxuA;cQTFMYvaMU!CT+#?ANeHy}QLR~C7t z;daaw?DsiFYEB0`{Iyso(r4ln3KBeq;I8#cD3M8IKw8i41JRwQ>v|$FIHE+rI%=6b z==8oztXG#Cz05+$))E4;`DwHT9OtP@WCl!lrE=UFnUr=)z~u6MyXu`{?7NClM19@) zlYVP|oXQ+rF|l9B+sbe8y7fOpCB>&fIm!bCO6|93kEup}13Wl+JY>ED`B+~dHoyD) zgLiW-e)-;m3recmdw~$FX61L%U4U<0xij`nOhuaZp#;6ndpb{lV9%Rg!Ua`s{tCJg z?K^DXhPx|GYwBTPw+d*X`F-nl6JoZ>ZpZ-2KzV_j)~`765;_(m;p7^h6#Wo97C=K{ zsuHK5b~RN8+EdGMA*G-9z2Xe0@B_^`O(To;?UDtWV4SF1@K<6O8cS4G(wSJMEgQw; z&e&kEiUk%Li)!zH__>rqOLPwrrj5ZfEI_Axmz*m;=CIO{3jjh%2TiN5jd_7P+cWtL zhaswP>SV!2tV=##EvvLkUT>zHGjV8o)($i^fmBc$%{e@j?3#+(Exr3xDI|W_KDtCH zl4V@*KL(t1X&n;czyqcM@DL&NzpZNii%<-lZ<76=U;i@1Z~yGb48&`)P0ot5X6wg5XF%B5XO-D5XX?~5W5%mtE*ibj|xHYD~DHYOIbgrJEZP^{fpj@38{d&mXAVyP#2bS(1f%a;|Q|)3g_tJERWmRZF0|9wcRbUNV)I|h7>)%CeAIKRj?HPqi$sy>>J68c-&|(D z9ojEWkz|D3HmRj(5!-Wocpt#o%?k*r-0uxrV2Xh_YNR0kn&c_HwxE@~9tR{f@D*33 zE7znctCu7lP@7FAISwW@uoPFxQQMRz0oTMOtBj$mwBI&E`O|kBYZ+NQybIO0wbCqyf=4s>?jve%_c6~LAyr}|5sY=&MYiI<(qTL^~0dlfH^;%&CVL; zSG%xUPvA2@jYT6sLhbEyXN3l51t3=OyU0P6`espuVBqo{fI{sJ96+u*Wwkh2@r;YL zSedB?B$o-syR4vtrVGDN3B81Wh#|g${=HGFzYROX0L%}#!2Iyf(w6^`AO6!XtN#mv z@C67#2nk8SfGHveO1>uz3GIqh5-3CaqcsW9a;;w^v=_x(@esYEOA(PF{1GGGJ6{_# zq};vTS-s9|`Q~cg_;PSsIxW^H?B>GaVhu1&4p$P-V4cI7%c@q)8H1Rdj}op_Wj*Gh z$5|+87v{9`pDkEDYY#*{J+QG0mE@}%*o7V6ZT{x+b+;`u5li9GiNLR(FJ*TnK!-O_ z6k&-?bNGRF9VbM88{kO-_DBV47ah+7o+Ex5*vE9-b3!yHwJ~WcbvSvbBC$LXZuX@} z%tczp1dp6rZq9td*$l-eOX8!Rtz2v4#+z}&Ts3Z#`69?aTo4FJJiD_cZZ%YW88jRo zR2bI&h|ZUH;m^H9P{1R=TahQEtS}GleCd(Y-TLj>jgJ7j>hCk4>${yedc>l$&caSQ z882RFTVtJh9|~#ce0do=QMRyeM9Jfaz=@-WtuGbEs{E8KIlr6o%{Ic5-~nNBNHv|F(xkcxv52w(J$NcX!bxbUj7LOU zR(867OC6VGPFuSj;sl(Co`+MUJuW5XtxX(LLK<^!jy6so+!3_tkY#SL(V5lmmF=D5 z*tqkc6m8Hs!llS^_=RD&qk;sEppZ6ALR4J6`#yz)l^S1sr zrb|v4|Awjo%n;GrF~r0{0#s~Y^5P&3WwggSkV=WI=E0<-h=eNYeV`LpOjws=Jf!G^ z00A<3XyM>edVT`|GHM=8D9M_Q%9vMz#J(1M&HI@hMz`5c(^)T*+~E{sr!9;I$g@Om zSoxdC&mzt&P zqL%;*T|~kL{0?U^MJBZo8R2l|;dnb53u^M@yk>{>c+>-L?e=+fp3o44d0uTwm}Fwv zQDQ6ZfIXGqhRk?Uj^DMp$?7Kw&TXIyZr8TL`EoUiQ!s1s)V~r_X%|z9#u&)wEoGKq zCf&f#y>cI_zlef2G>}laDvf2~w4^d=ISZ!%t9@M^xS>Yt z)d+o|7oUOJ?QsVMTXag>8+x-JdIi6Zkhs*&Jkl7k@KXaT@mcRF4$R;{38h z@7(t5bMPy*7UI2Ak)@xx$(WFDTxY{SeEE)sZ+$y=hCKvJUfnlh3w^V0P3B^~I#%1Q>C?; zU#VAyP6HVQXsywQpqvEWx*_geRAaCfZCvi*?Z>M0D=WW=_`oJJMg#I{-l6eWD+Ak~ zITi#99Y@OKj{yd~iRLaM8XqwC_^J=si%P)b&}&~+3;^JzxGi~5r_?2(@d1&;Qn`E# zfK(I|J1A4ytO3p=N+$uXdT&^OZ6$7V)!O;R?|!W2_dI%kmWq^l+p0=B-y7_-YT?f= z0?%2H$$=6sl{LQLIZTy0F84i(AE9F!5-w62ABesd>Y>hm){GFH-qL_zzrW;Ros+%4 zbe`h>J-wLmGRwaJ#|*Z>-qt_ELH;AX{B7u0oV57|MHD`pbH)j@1{rnqBn&gb>8eqA+e(BtzC zVu%mqq0w(N%%leZd1zL)Uu~z<6bF)`XGk-yVv! z_iL~?F1*_eC)yp~>7qX(Qc&lNrLq(h#8+PFl4n=XR7mu}OZn@Eg0U2F&ive3|~erIM1W5E$ZC$S}P-jKnWH7>d(C&=VI zhYlT8$FAuMiq2ntD2!V)2P$6R5qhwAUU>R+_uVOg_}WZE497DPLV8-gYb*frUzX6B z_}*B~{0Q9)5583(uRJdAfsa8tuESF+qv(Yd4|pr-l)Jf z4TYfyYeh=~Af=9DQxh0wYIgU^ox@Af@3c!_ke9G@!hb|EDVmsL|G>5+jkcSq z*;B??lPXLNw_|p~Jz||HW^0%Ag1pr_R>nC;>Kc-Rb;7n}jn*%9vFC=hEt<wq@u{ zKLsW6dVO7BeciO!^KX^Pe>PZA|EI%*$^Q#ie7|OJ(+TXT=8=E;^gphaGGR3O>tqqF z4egz%hLZc_=xs0`s|-S)^itB8R6#{V6<0zHHrHPg3f@#Qx{Q)R!7L4Xzv7~YxZuLS z#NVs8Y_dsnN&^x?647qlwe-?^udc2atM?5P`E06_jL=Hj?CI^X=gIuAi}Ties}ou< z=XJN6{}Yo!M$rx(I4pWrwPAd~Ak36fomgKRObU&AR=_Z=dqBV~8lO^MB3f4M4hT3V zjeA2tB${s34mC_p#SRL1Dov}LaAtrR%o;kK#!S9paKJdaZhoFhUouRM@=UQ|alk41 zMxJ3yz!9~3egG%UBPKYZa?w|DWprwd_#3oxq4*)1IWX}Is(pNxE$V#(vrgHe4zmrK zeSQ|ZM2C(jUeivEq1Gr~v$JG})TrO1tvW+5X5K}tBag*V2BVKnQQISr z)lnbG*M3pkqwb1Bmu7rq`$pK`@zN2vkoI?X@23cvgzFhL zD0_q~u`_!_)i2z$m3vD!f^BB0GJz_4WXc(w`H7@@{mnf)BGxc4!mD0sP?EV~&t#=! z54GxsOuuALrSo-LN#)w=tHw1ppX8v$(=B&Y`6HhSW1hhvX1&BTLBMt!DL} zfc}$OmC7|Cmhv?_pXlIn`frGwn!QZ9uE8sg@7;mO=-Y$ys@}04FZD8m-;JvyE^m(@ z;Rsn?BX>#fm>yMM(*yQfUA=Qh-`qo(ri+ro#&D!34 zxu3kaa?)~Qf%8j2cMaNN#qE-Wi?vV0%_*&0BOs~!n`Y|JnsbF{>0NS%w)0q}if{HD z{ke>$VTQv7bSa|<6WWw3i5zX#`3;y)eB8DM03O^#n@QbTA*xB64efZ2BocWDzPO24 zVh$U-Xg6jKC$?pCzC_J4AgFUJ3C_m)T z%+YAWm}{{dWmWTpSK&W!)HLH6YM_GnnCoj9YOlz;iyifU& zCr={h;MRm4=iXPRXuPTm=akeeoQTV&3>70+KyxfrO{$ZD`@oSr1Ns!@vLwqpSn&>T zou2}|;pSO`S1}MEU-k2I;qL8~mn(R9wHu|fOUZ?{v{(n_s~go8fg;&1_f306G$+m@ z&B)2`mPu^ZjZ%;*`9$O<$)%!|FoQHA*}}Odff}&GU50!L zsAp&>NzL7f$aS1(I;`w?o$xd5Qi8pz{qk~_an#tqgnfF$$%_b3pVEzTM z6o2)Yn1=P|f(azD(O#^9Q$OgXDhSg-u!>{Ous3vma6rx@#)bKzYgoVcv` zYEiQ>lTAB8bGT@@vO{AD^@5m)sb0Isu2k8$LU7wc^`LRm0$CbK3M+sjH@ijpVXr|b$}>9Gm#n^HYxsTa{>N`|L@BUyfG^#_sp5mB;L+~ElJZ~b8%PfCF_bQI$o1w)Y%5PhceC`45=ZF8X#Z>JD*Lj^ldn|l+IKoL zgQ;GQ9Q7|Yq)+FCG0#wx)z3vI;p#axI@*|oP?okie)Mxoqb0>(a2-@D1$!avmPc3n zq9;G81L7nQXLsP^;4BZQcv)OTR3k&qg37K=SlmX|Yl?Xj-HK2fLP7ioHp38hN?qj9 zeiwc>EbhdVyC|aK`K%C$QFZ{w3fX9=^Oc@I`7<$#i}SL5Uw(a#q=}*!Z)T_|j-r{= z_q{4f0g9Kx#K3I-PhXBuM(Ppf>jwui^)QjA#*m{gXjJ+O^c93|lS={7+%yfz9Ff85 zmbl8oipKe9(gB_of$?Ia%qXeWbsN}U5kr;|$x9d%@)BE+OxV?mzS3ZQ)!b9Ydcr1Y zx<_l-KXwX?rOm9@fpaH#>-tn8M7{v}feoS63eGO{%I#AP2@S^_nD1R^oUM&5tjFacPe3e)>49=r!Tu zWV-%b5|`-rR>>(hou;p2nQnw`fQ@R4+_P6Ok&1kdbE$hF^GyeE#ffM_NuIozDjqz1nGg(}{YYbz{i}V*p8o1frpphhL zqJxIQcMC*0+KB$(CDeWUQBg&8?oz}mr#*W!LepEMP}&h(6SI03ea5d17+TB--#2B3 zzxms783fsL*DQ#(rT>Iviv4vfy>AM0L;|yKoCa2^$OH@`bwOm~y$BqdlATOSn>%^Q zW4j2ux!p(Fe>k8whOxC1R=qJL-}H-V{ZK5?`b7GYAJpxPP>L#S zB1mrCULYpb;5$N60v)zJlAe|=Co?tVJ0_v5^VL|G04rE1%AdcW> zkI8JOG#L);ldUN%zj=0tOqm`MNhH6LLr#yCL>}Y&c_ZY78BE1L5)a01_=pLvcm34z z<5kg*gIsU%PlZveA(wNpz_qk;w!zsC374y)mxQEG`NKg+9Rl=nBh1nSzDV(~N|nG$FUMA8thB#SMHdLXiq%rxHO`uJWCISSAukP$eHmYk zn6~3~wz=XI7>`QB0gc!d$A|g`Y9eMnky?oUps_bMk6C;HJ?(47%%-6F}2R4!R4NaQcBVmus4$jWT!3Dif)~uh0;yMbuj0 zsI+g}x#F%>0Z@@NDui*xq_XGaSN*NX+aB$idcJUS;fJ&#doPI4qO5T9>F%e%3b;Y9 zPa1rO1H^{H<`C!#m{%Pv!GO&U@dgOuzP|O{Rsq4~r?cdn9VIJ}J89S*hZ8n;5$jOO zVk$mzJ@9F%<)1(1;IBFx@%7_!0x*l;t`hEuJL!B7YNfV&1x}DUt+Bvsv4?)1hLm50 z7%_L+YC>FME%kOlAa+_@_51dVUv(RidKs6NKfn@&Bf4&!Acu|_r0qXg)d8hps>JUDxASjDVL;*6^6;GZp6=cF#_Q1Y= zLD{j9m=&IE>m zw~ZgLzDCjs+l>(ut4-KdYRvHAsE+<7#?mj6&LdO|$b&gMOTX9#`Bno+WIxwlzH-p*Ip?3m{kDWNd3 z*H7P*u3ZcKdxt`|avuTi?|0@Cy89`& zv6^U5JW{lUz8<{PkXimg%?p=&R4%^>8)7(lhbDR_V`H|=l72*Ek=D6k9cZtPgMC?~ z-9`PZXSV&M3|FX=?wlKSF8C0Q^|Pg)CeopgSyX4s*@p;hgtLtyoJ*-2S3VSOGl)}WH+Qr%K zTIx(mC})`)M*d4$`QnZ|@I9Q`Z%FuSCF7zE7LVNL7~;={{@q*s=O*>|=?Q3R z)^W7>U7R%sCakExEt_SVJ&v;#w`XyZEiy!R6R+rPG|Ds2pu4;|nnwJq_J?+(AkyZ< zjOW|Y7O78qodQ-CKMsl#hP|0U>&w42kNUHh7KtV%|f*|~a8d4~+G02~3T50MvxW;@$XGTsMAl!*% z$!VdBq6;JRoSJvaaXLTwv!vm(d%zPFfg|6Z`^0t9KK8I|j0PTgj8@FD-f^!X=1-|X zsf`2@`oVK7lA9(}QD!mn2qUf-22-?OacWG_UNEY^&?}fL3?WEia!hplU^kSQLYYIH zyXz`=UGC@eXFBnBE8tBO78kX{jk0t**8EGJbF9kSO@PZoVAfSqV}dTcVq~*kKe*I( z3DVk$tR=ha2IIyIuIMMX)H%J^m#kB$q^Aee6c(Mncy*|@8f!N;N(A1BS-6Y?7o*1H zJ2gZ9jEo`1(o7eoUT?MsZLnm5d$(yHsIZERFsOxgQ+eo}>9Vuhk{qtaG*g1m_xW*? zue)j*riQ=0IM{$aQ;}10*|qqPY23)pm`_8nty?+5pL^ZTX!eTg}R!)*}D9`#hInL^1=vS9&1Z9`{iCZJKPz? zTuJbhaCA0UO_po8ad1AGo$zq>6^fj~!I@^nM~^91GXr~rdk>%m-q>P?cx2p+Y^`rU zq1>>d%Nnt&W=A8!F=pvgL2f;T?V8P&V|wla#^o;uKF+-A@9buHzz1DI$_FrqxAJ97 z95&jJxdEj&KM_&%F&Md3RBYrGavqX-)*sq^6Xd>ez3^bvd-f}yj)k!HY6d~!~6BCA8vK+fq%le8= z4mXrPF&}q11Rks82M!0DC>GZ`iXye~ODw)&h;;)|-n|S9XMaYRVL;LGG&e5-^0n3; zLN7v3Q2r(frqYVRaK2#D?=UjL41F9duGpu5y?Ul6z$>XsVT&ib()85s1tz4!1AMb< z=v4!TnU5li9M+p;L&QnUQ%xVCaYGg>HSOi|xk=!xa8Jk+d z(*;+c5lf>XHH{xUoP%ZgH}!c7ukLSLc1uT<`-}!?b#XL`QyXI zGej?kH|{M5##g#E%Qel4f}m72O?R`r!@Q_jC8kye3Pm^ONM_Jl_)aJ0P)>#v<|)G` zLIiB}H=-%|r>9^j7lU8A_ww!&`-kSdTnIg(oioy7fnq1k-28`#DwuCXyeBq3&6B)F z8OC;Ur}jSq48~I8--z2FEY0p`R@=s(w!xxJs!LfwTOHzCakcR6bI6zeFy< zphVp8y`Orwd;k_`eIy(V zwC*x>Ov(*4J%S8;jkc1- z$Reig@w&^32x@*t1ko*KgXV|du7aN4dEPLrMb%?EA))I1i9Sc}8-3wCk}*f_2a-(^ z({DRG{941KbC7$}^6Mp8knBsZ9w&gA`JJxaZ&(WcX*>QlA zaPlhF%#BbdzPZMFMdUNNu$vG|B*}hoC2t?0?ujW!^eoFL5DtM*&~M@$2gHvZB@Ti} z&DqV4l^h%N!$)k9*(RQ`jb?SZKx}Rah%N~X?`b$PZxCluLIdN1u!HWM`wAY_YUzwZ z{T1k12M8&t7s5VnO%YS|aww>v3A%yh4E-D{S*m?z<42W#IA4;cWwkc^XI=0Yzp`o)G#WAtMckK+ zFAXxLtMIE|RG!mLoF(wq1qY_5ROgn`A8-kuG4EAQF6}@lkiNQ^Pj?+5RpK*?<+^=m;3w?X2n z&WAr@19MOog(_tWx-JQE?aU`GkU|TLAY;QDRD?v>{|dH0gWi@mA}%gLnl`W=(OEc> z3}v^Y45osm{>vI{o{O+AbnHwe3hHhU^2l+jqFbFA{@W_uiJhN_ z%NgWzfd3nAs$igbV*UpcwHLT-E^TX0?2=Al;!ClX&uYtYG-r^!1z`raXFH{Rr&70K zvn{DjdiS81_xCm&$8^q!S|~S;Zk+|`{sshw#gneyF1OvnpQ*5}eH}DNSW-z)gBJ^S9%HwmFXhKzf`LWxB_eB?XPBWv2dU<$J~RTxmiF*|eBFdS zTUv_HD3?G~kA`+`X-&hoa>{HV^5QL%R<((zST8}O z+=YU>!apMV<<`5&J;g$PA_vDW>1O=M-HxI*kfTI)C190C%M}2|;@)D%)?Z&51%c9& zX9MfgQ{V=xSHy@kK^9WU)f`T6P%!D{FaY_zPxz7i*@19*G??g}g47=Ia{=i^MCp{L zdl)fEqqXvk;6=c=i1rtq{t(S~2=T0590*0@RXyDRNkQDG>mVfp69mE8{g&3?%PVev z?FIC5r}F=Yv$qP1L(8^>3GTrmxLa^{cXxujyE_Dey9IaG;O?H_?(QyuK;eI}clYhH z)4T6~`o2`vOTCP5tTo3RYppr1OUgHqpY0T`1E=tJ#E0>>%(^l*1XfHx=NOlg<)L6# zM=7eh*IE*&u~R#kr`HPLsbSs_fcGJm7^N2{ToO3)30YqoU*b?pVw1W-Cbs}>)STd7 zYdu}(%cvDq3s2NOm-K(FAJph@UrvGb!vnYz{KsA3U*h2H?iFu(fy*{FwoqD9QiMNf zY5F|MUKpXSR9vhQbpu40xL1dzc7}^(mBlM4Oec6)2`K5?K%UVwfpB}8v(eKfPUfMu z>z#vz3y{W5wHo~#8~w4*M*3?4L)~Hs=q&XuWwJB<@O0@64E!M|-#&d3lujpuyR(-~ zH?gtRXpZ5=!0$G7H@=8SkSQ4EL(e*n=ttz)TVg!Wh!5=^FW|s|{YHsqrVX!(C7t(m z#j5HjkXU6;L z?Ec~`f-s)@tJz(dpt!aZgyQ;z-NM`1);f8i4`s#hU(Yy@;IFyk#T}&f+=7mW-hKHc zBo${ZuA3H~n5(*4bSa<*`}H(PseKf(Qv%UNFF2@|+n^+dU=RIyx=7A|;r%wv*0x89 zM%VS|nPQ}^-f|&?r7V=47@;$pBBd?#SaYMU$EokCpdW$qN z-mOs%|7y)*|I8DmeQt4Vo+n+eRxP2iKy^IXDb#sX5u?wQiCi{52+ewc>y!;`)-3Cq z#B-T-O0H?NueJ{J$(b+z0bwv5GQY$X@dS?UD+5uw$H;q;r%)za1#Kd|p|PjPy|Z6U zX%TIYaDQdVksdAK+5ca!!Tir^@z!eqUwZpC(&D;hG^&*-cyl)NI*7{6^wYEYS`ZSI z#)G5*u5{UMhFvhvZ~OI30{oF!ub=?=kxn*7jE%{wqo<=hk38I|f5?oTnoI* zy2#>Tt^?prk$za-Jq;%4TGFlDhNiA-&dp-#_+CTG<#Ylp-NiKl#ML^+UfDiWcKa`4 z|J=l#Hx;w5xhfa+y2tQ@@jYWH)^H+^>0lSXGb z3fwOl!8;3g59I@J=$v6mWbu=(=#}ewuRiWD4Gh3GaR-YmWulrz7CbDS&c9!lo<$dB z&p7zeHybKEmrD}QSSXTo;Z?HCy!#c_Y_f3iS00CSNll6|C*HC-~ZQ`!L5H!`HT`W^^JtNAiqu=HPj6jc5zK!k-1sW^= zu_o!nRr6YC^cu2$UEHjSF4;ZR-f;^UO@yvQL*tY+$#*Ug@yW15#(8UW-hh+ zA}|1xYoPp|iO^6}f#ZbVwt`VQ1nW1|K7zM8!{_OVUnOJgD^%Kb++#GZj`?5TB}Ve*c=$IniDOy z8>#y|6*5V)w_(1Id}nKknq2##Q$d23SYS+NxA74`(2u8iadi{x#_u9-ZH(zj(-|?p zh*@ugioy~=1-{3(_whzOpdaZAs0e?*Yt99s#9V90EpK4wcI*3N&j-x2#a?$yIHOX{ z`WW*IZCdP<7y{b_FD&FFb8|1E^M*AElNvQ2ad|`H@j)5B6aQ!p=$)WT+P(}jTn;(dku|W?qVkfDI?SpSM zWw^!Lu!-eK#YlV|6nx~%AUNAoW=9_1lznc*S5;-48rtYiU(fs`X${o;42GMbZ~U$(G0p$a=5pkee8AOD~B&%aW(1 zgwCY_7NMSn`956GsD#l;)tZ@}^WNECWVYz}W%#~R5Yq53(pTGJ=9ZMl(`bS} znn`j7AY14lzp%8;uS`u-G=)C+If2FIB4(|mVna$kr#DZnq( ztk+yxMi?+NG;@U6LP^V$He&nz_!uu0B^O?E}yKPA~6vtV% zjiv8}`A9&4S3ke#3RW)_1P0KjtSeWOw6U%?j4_~2np5xH$>L+t+Ir4bPc@<%-Iy!r zkQ7~)>xXh0syChLCf}BkjN^SO`k-VUXb4@X7GPtRh4dc{YNJ0}vkvt~b!~O@7rN2W55ehyG7@Pp zpHTcSWyoPHEXfmNL8wU4PzVd^2R+U9U9qsvyLkv}EUo7F>gn}-_$z4}EoE~M3(d6> zuA+Jyu)GjfEFG-c0mB|SH`dKIoHiZ-V@)8lTUB!KoDN;6 z?>VokQRTU>cqw#Uw#DV1hQr>2>!P@8=xcAX`V+uqpmNYN5HV0)wsy;dD}gG5UO+!- zZw7RW`ny5+64^`Yt8FHOCPVms1jdJNz�W#(??__hCEl^+Y8o-AFoUhOhjzN8sBL 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 diff --git a/app/src/androidTest/java/com/uiui/aios/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/uiui/zyos/ExampleInstrumentedTest.java similarity index 88% rename from app/src/androidTest/java/com/uiui/aios/ExampleInstrumentedTest.java rename to app/src/androidTest/java/com/uiui/zyos/ExampleInstrumentedTest.java index 93cbad8..318f75f 100644 --- a/app/src/androidTest/java/com/uiui/aios/ExampleInstrumentedTest.java +++ b/app/src/androidTest/java/com/uiui/zyos/ExampleInstrumentedTest.java @@ -1,4 +1,4 @@ -package com.uiui.aios; +package com.uiui.zyos; import android.content.Context; @@ -22,6 +22,6 @@ public class ExampleInstrumentedTest { // Context of the app under test. Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); - assertEquals("com.uiui.aios", appContext.getPackageName()); + assertEquals("com.uiui.zyos", appContext.getPackageName()); } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0adc6c6..34f828c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,7 +1,7 @@ @@ -10,9 +10,7 @@ - - - + @@ -22,46 +20,33 @@ - - - - - - + + + - + - - - - - - - - - + + + + + - + - - - - + + - - - + - - + - - + @@ -79,15 +64,20 @@ android:restoreAnyVersion="true" android:supportsRtl="true" android:theme="@style/AppTheme"> + + @@ -173,19 +163,15 @@ - - - - - - - - - - - - - + + + + + + + + + @@ -222,7 +208,7 @@ @@ -233,9 +219,7 @@ - - - + - - + - + android:process=":xg_vip_service" /> @@ -262,22 +244,18 @@ - - + - + android:authorities="${applicationId}.XGVIP_PUSH_AUTH" /> - + android:authorities="${applicationId}.TPUSH_PROVIDER" /> - + tools:replace="android:exported" /> @@ -287,9 +265,7 @@ - - - + - - + android:exported="false" /> - + android:value="1500030457" /> - + \ No newline at end of file diff --git a/app/src/main/java/com/uiui/aios/activity/APPListActivity.java b/app/src/main/java/com/uiui/aios/activity/APPListActivity.java deleted file mode 100644 index 50de7b2..0000000 --- a/app/src/main/java/com/uiui/aios/activity/APPListActivity.java +++ /dev/null @@ -1,100 +0,0 @@ -package com.uiui.aios.activity; - -import android.content.Context; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageManager; -import android.content.res.Configuration; -import android.util.DisplayMetrics; -import android.view.View; -import android.view.WindowManager; -import android.widget.ImageView; - -import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - - -import com.uiui.aios.R; -import com.uiui.aios.adapter.APPListAdapter; -import com.uiui.aios.base.BaseActivity; -import com.uiui.aios.bean.AppListInfo; -import com.uiui.aios.service.NotificationService; -import com.uiui.aios.utils.ApkUtils; -import com.uiui.aios.utils.BitmapUtils; -import com.uiui.aios.view.RecyclerViewSpacesItemDecoration; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -public class APPListActivity extends BaseActivity { - private ImageView back; - private RecyclerView mRecyclerView; - private APPListAdapter adapter; - - - @Override - public int getLayoutId() { - return R.layout.activity_applist; - } - - @Override - public void initView() { - back = findViewById(R.id.iv_back); - back.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } - }); - mRecyclerView = findViewById(R.id.recyclerview); - - } - - @Override - public void initData() { - List applicationInfoList = ApkUtils.getSystemApp(APPListActivity.this); - PackageManager pm = getPackageManager(); - if (null != applicationInfoList) { - List appinfoList = new ArrayList<>(); - for (ApplicationInfo applicationInfo : applicationInfoList) { - AppListInfo info = new AppListInfo( - applicationInfo.loadLabel(pm).toString(), - applicationInfo.packageName, - BitmapUtils.getIconBitmap(APPListActivity.this, applicationInfo.loadIcon(pm)) - ); - appinfoList.add(info); - } - HashMap stringIntegerHashMap = new HashMap<>(); - WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); - DisplayMetrics dm = new DisplayMetrics(); - wm.getDefaultDisplay().getRealMetrics(dm); - float density = dm.density; // 屏幕密度(0.75 / 1.0 / 1.5) - int orientation = 0; - orientation = getResources().getConfiguration().orientation; - if (orientation == Configuration.ORIENTATION_LANDSCAPE) { - stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.TOP_DECORATION, (int) (density * 16));//top间距 - stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.BOTTOM_DECORATION, (int) (density * 32));//top间距 - } else if (orientation == Configuration.ORIENTATION_PORTRAIT) { - stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.TOP_DECORATION, (int) (density * 50));//top间距 - stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.BOTTOM_DECORATION, (int) (density * 100));//top间距 - } -// stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.TOP_DECORATION, (int) (density * 40));//top间距 -// stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.BOTTOM_DECORATION, (int) (density * 20));//底部间距 -// stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.LEFT_DECORATION, (int) (density * 20));//左间距 -// stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.RIGHT_DECORATION, (int) (density * 20));//右间距 - adapter = new APPListAdapter(APPListActivity.this); - mRecyclerView.setLayoutManager(new GridLayoutManager(APPListActivity.this, 3)); -// rv_list.addItemDecoration(new RecyclerItemDecoration(10, 10, 4)); - mRecyclerView.addItemDecoration(new RecyclerViewSpacesItemDecoration(stringIntegerHashMap)); - mRecyclerView.setAdapter(adapter); - adapter.setAppListInfos(appinfoList); - NotificationService.setListener(new NotificationService.NotificationListener() { - @Override - public void onListenerUpdate() { - adapter.notifyDataSetChanged(); - } - }); - } - - } -} diff --git a/app/src/main/java/com/uiui/aios/activity/EmergencyActivity.java b/app/src/main/java/com/uiui/aios/activity/EmergencyActivity.java deleted file mode 100644 index 4cc1f31..0000000 --- a/app/src/main/java/com/uiui/aios/activity/EmergencyActivity.java +++ /dev/null @@ -1,253 +0,0 @@ -package com.uiui.aios.activity; - -import androidx.appcompat.app.AppCompatActivity; - -import android.content.ComponentName; -import android.content.Intent; -import android.net.Uri; -import android.os.Bundle; -import android.os.Handler; -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.tencent.mmkv.MMKV; -import com.uiui.aios.R; -import com.uiui.aios.bean.BaseResponse; -import com.uiui.aios.bean.Contact; -import com.uiui.aios.config.CommonConfig; -import com.uiui.aios.disklrucache.CacheHelper; -import com.uiui.aios.network.NetInterfaceManager; -import com.uiui.aios.network.URLAddress; -import com.uiui.aios.receiver.BootReceiver; -import com.uiui.aios.utils.ToastUtil; - -import java.lang.reflect.Type; -import java.util.List; -import java.util.concurrent.TimeUnit; -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.Observer; -import io.reactivex.rxjava3.disposables.Disposable; -import io.reactivex.rxjava3.schedulers.Schedulers; - -public class EmergencyActivity extends AppCompatActivity { - private static final String TAG = EmergencyActivity.class.getSimpleName(); - - @BindView(R.id.tv_countdown) - TextView tv_countdown; - @BindView(R.id.iv_finish) - ImageView iv_finish; - private Disposable subscribe; - private boolean needDial = false; - private boolean isCalling = false; - private List phoneListSet; - private CacheHelper mCacheHelper; - - @Override - protected void onCreate(Bundle savedInstanceState) { - Log.e(TAG, "onCreate: "); - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_emergency); - mCacheHelper = new CacheHelper(this); - ButterKnife.bind(this); - - //发送紧急广播 - Intent bootIntent = new Intent(BootReceiver.SOS); - bootIntent.setComponent(new ComponentName("com.uiui.sn", "com.uiui.sn.receiver.BootReceiver")); - sendBroadcast(bootIntent); - - Intent intent = getIntent(); -// String contactList = intent.getStringExtra("contactList"); -// if (TextUtils.isEmpty(contactList)) { -// finish(); -// return; -// } - - String jsonString = mCacheHelper.getAsString(URLAddress.GET_MAIL_LIST); - //为 "" 是已经请求成功的 - if (jsonString == null) { - return; - } - Gson gson = new Gson(); - Type type = new TypeToken>() { - }.getType(); - List contactList = gson.fromJson(jsonString, type); - if (contactList == null || contactList.size() == 0) { - return; - } - phoneListSet = contactList.stream().filter(contact -> contact.getIs_urgent() == 1).collect(Collectors.toList()); - Log.e(TAG, "onCreate: " + phoneListSet); - - final Long time = 3L; - subscribe = Observable.interval(1, TimeUnit.SECONDS) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(aLong -> { - Log.e("TAG", "倒计时:" + aLong); - if (aLong < time && !subscribe.isDisposed()) { - tv_countdown.setText("倒计时(" + (time - aLong - 1) + ")秒"); - Log.e(TAG, "accept: " + (time - aLong - 1)); - } else { - MMKV mmkv = MMKV.defaultMMKV(); - String longitude = mmkv.decodeString(CommonConfig.MAP_LONGITUDE_KEY, "未知"); - String latitude = mmkv.decodeString(CommonConfig.MAP_LATITUDE_KEY, "未知"); - String address = mmkv.decodeString(CommonConfig.MAP_ADDRESS_KEY, "未知"); - NetInterfaceManager.getInstance() - .getSOSRecordObservable(longitude, latitude, address) - .subscribe(new Observer() { - @Override - public void onSubscribe(@NonNull Disposable d) { - Log.e("SOSRecordApi", "onSubscribe: "); - } - - @Override - public void onNext(@NonNull BaseResponse baseResponse) { - Log.e("SOSRecordApi", "onNext: " + baseResponse); - - } - - @Override - public void onError(@NonNull Throwable e) { - Log.e("SOSRecordApi", "onError: " + e.getMessage()); - } - - @Override - public void onComplete() { - Log.e("SOSRecordApi", "onComplete: "); - } - }); - needDial = true; - Intent intent1 = new Intent(Intent.ACTION_CALL); - Uri data = Uri.parse("tel:" + phoneListSet.get(0).getMobile()); - intent1.setData(data); - startActivity(intent1); - isCalling = true; - phoneListSet.remove(0); -// finish(); - subscribe.dispose(); - } - }); - iv_finish.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } - }); -// TelephonyManager telM = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); -// telM.listen(new PhoneStateListener() { -// /** -// * 当有精确通话状态时回调 -// * Callback invoked when precise device call state changes -// * @hide 隐藏api, 给系统app使用的 -// */ -// public void onPreciseCallStateChanged(PreciseCallState callState) { -// //当有精确通话状态时回调 -// Log.e(TAG, "onPreciseCallStateChanged: " + callState); -// } -// }, PhoneStateListener.LISTEN_PRECISE_CALL_STATE); //需要权限android.permission.READ_PRECISE_PHONE_STATE -// -// StatusBarManager mStatusBarManager = (StatusBarManager) getApplicationContext().getSystemService(Context.STATUS_BAR_SERVICE); -//// mStatusBarManager.disable(StatusBarManager.DISABLE_HOME);//隐藏home键 - } - - @Override - protected void onStart() { - super.onStart(); - Log.e(TAG, "onStart: "); - Log.e(TAG, "onStart: " + phoneListSet); - if (needDial) { - if (phoneListSet == null || phoneListSet.size() == 0) { - finish(); - return; - } - Handler.getMain().postDelayed(new Runnable() { - @Override - public void run() { - Intent intent1 = new Intent(Intent.ACTION_CALL); - String phone = phoneListSet.get(0).getMobile(); - Uri data = Uri.parse("tel:" + phone); - intent1.setData(data); - startActivity(intent1); - isCalling = true; - phoneListSet.remove(0); - } - }, 2000); - } else { - if (phoneListSet == null) { - ToastUtil.show("没有设置紧急联系人"); - finish(); - } - } - } - - @Override - protected void onDestroy() { - super.onDestroy(); - Log.e(TAG, "onDestroy: "); - if (subscribe != null) { - subscribe.dispose(); - subscribe = null; - } - } - - // class MobileCallReceiver extends BroadcastReceiver { -// @Override -// public void onReceive(Context context, Intent intent) { -// if (intent.getAction() == null) { -// return; -// } -//// switch (intent.getAction()) { -//// case CustomAction.PRECISE_CALL_STATE: -//// int callState = intent.getIntExtra("foreground_state", -2); -//// switch (callState) { -//// case PreciseCallState.PRECISE_CALL_STATE_IDLE: -//// Log.d(TAG, "IDLE"); -//// break; -//// case PreciseCallState.PRECISE_CALL_STATE_DIALING: -//// Log.d(TAG, "DIALING"); -//// break; -//// case PreciseCallState.PRECISE_CALL_STATE_ALERTING: -//// Log.d(TAG, "ALERTING isHandFree=" + isHandFree); -//// break; -//// case PreciseCallState.PRECISE_CALL_STATE_ACTIVE: -//// Log.d(TAG, "ACTIVE"); -//// break; -//// case PreciseCallState.PRECISE_CALL_STATE_INCOMING: -//// Log.d(TAG, "INCOMING来电"); -//// break; -//// case PreciseCallState.PRECISE_CALL_STATE_DISCONNECTING: -//// Log.d(TAG, "DISCONNECTING"); -//// break; -//// case PreciseCallState.PRECISE_CALL_STATE_DISCONNECTED: -//// Log.d(TAG, "DISCONNECTED"); -//// break; -//// } -//// break; -//// case TelephonyManager.ACTION_PHONE_STATE_CHANGED: -//// break; -//// } -// } -// } -// -// // 精确的九大通话状态 -// public class PreciseCallState { -// public static final int PRECISE_CALL_STATE_IDLE = 0; //通话空闲 -// public static final int PRECISE_CALL_STATE_ACTIVE = 1; //正在通话(活动中) -// public static final int PRECISE_CALL_STATE_HOLDING = 2; //通话挂起(例如我和多个人通话,其中一个通话在活动,而其它通话就会进入挂起状态) -// public static final int PRECISE_CALL_STATE_DIALING = 3; //拨号开始 -// public static final int PRECISE_CALL_STATE_ALERTING = 4; //正在呼出(提醒对方接电话) -// public static final int PRECISE_CALL_STATE_INCOMING = 5; //对方来电 -// public static final int PRECISE_CALL_STATE_WAITING = 6; //第三方来电等待(例如我正在和某人通话,而其他人打入时就会就进入等待状态) -// public static final int PRECISE_CALL_STATE_DISCONNECTED = 7; //挂断完成 -// public static final int PRECISE_CALL_STATE_DISCONNECTING = 8; //正在挂断 -// } -} diff --git a/app/src/main/java/com/uiui/aios/activity/QuickAppActivity.java b/app/src/main/java/com/uiui/aios/activity/QuickAppActivity.java deleted file mode 100644 index e4c65dd..0000000 --- a/app/src/main/java/com/uiui/aios/activity/QuickAppActivity.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.uiui.aios.activity; - -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageInfo; -import android.content.pm.PackageManager; -import android.content.res.Configuration; -import android.util.Log; - -import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - -import com.uiui.aios.BuildConfig; -import com.uiui.aios.R; -import com.uiui.aios.adapter.AppSelectedAdapter; -import com.uiui.aios.base.BaseActivity; -import com.uiui.aios.bean.AppSelectBean; -import com.uiui.aios.view.GridSpaceItemDecoration; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import butterknife.BindView; -import butterknife.ButterKnife; - -public class QuickAppActivity extends BaseActivity { - private static final String TAG = QuickAppActivity.class.getSimpleName(); - - public static final String QUICK_APP_KEY = "QuickAppPackageKey"; - public static final String QUICK_APP_REFRESH_KEY = "QuickAppRefreshKey"; - public static final String QUICK_APP_ENABLED_KEY = "QuickAppEnabledKey"; - - private AppSelectedAdapter mAppSelectedAdapter; - - @BindView(R.id.recyclerView) - RecyclerView recyclerView; - - private Set hideApp = new HashSet() {{ - this.add(BuildConfig.APPLICATION_ID); - this.add("com.android.calendar"); - this.add("com.android.dreams.basic"); - this.add("com.android.musicfx"); - this.add("com.uiui.appstore"); - this.add("com.uiui.sn"); - }}; - - @Override - public int getLayoutId() { - return R.layout.activity_quick_app; - } - - @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)); - } else { - recyclerView.setLayoutManager(new GridLayoutManager(this, 2)); - recyclerView.addItemDecoration(new GridSpaceItemDecoration(2, 50, 50)); - } - recyclerView.setAdapter(mAppSelectedAdapter); - } - - @Override - public void initData() { - mAppSelectedAdapter.setAppSelectBeans(getPackageList()); - } - - boolean listThirdParty = true; - - private List getPackageList() { - PackageManager pm = getPackageManager(); - List appSelectBeanList = new ArrayList<>(); - List applicationInfos = pm.getInstalledPackages(0); - for (PackageInfo packageInfo : applicationInfos) { - if (hideApp.contains(packageInfo.applicationInfo.packageName)) { - continue; - } - final boolean isSystem = (packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0; - if (!listThirdParty || !isSystem) { - Log.e(TAG, "getPackageList: " + packageInfo.applicationInfo.packageName); - AppSelectBean appSelectBean = new AppSelectBean(packageInfo.applicationInfo.loadLabel(pm).toString(), packageInfo.applicationInfo.packageName, packageInfo.applicationInfo.loadIcon(pm)); - appSelectBeanList.add(appSelectBean); - } - } - return appSelectBeanList; - } -} diff --git a/app/src/main/java/com/uiui/aios/activity/alarm/AlarmClockActivity.java b/app/src/main/java/com/uiui/aios/activity/alarm/AlarmClockActivity.java deleted file mode 100644 index 96fd313..0000000 --- a/app/src/main/java/com/uiui/aios/activity/alarm/AlarmClockActivity.java +++ /dev/null @@ -1,116 +0,0 @@ -package com.uiui.aios.activity.alarm; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.util.Log; -import android.view.View; -import android.widget.ImageView; - -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - -import com.uiui.aios.R; -import com.uiui.aios.adapter.AlarmAdapter; -import com.uiui.aios.alarm.AlarmUtils; -import com.uiui.aios.base.BaseActivity; -import com.uiui.aios.bean.AlarmClockData; -import com.uiui.aios.tpush.MessageReceiver; -import com.uiui.aios.utils.ToastUtil; - -import java.util.List; - -import butterknife.BindView; -import butterknife.ButterKnife; -import cn.jzvd.Jzvd; - -public class AlarmClockActivity extends BaseActivity implements AlarmClockContact.ClockView { - private static final String TAG = AlarmClockActivity.class.getSimpleName(); - - @BindView(R.id.recyclerView) - RecyclerView recyclerView; - @BindView(R.id.iv_back) - ImageView iv_back; - - - private AlarmClockPresenter mPresenter; - private AlarmAdapter mAlarmAdapter; - - @Override - public int getLayoutId() { - return R.layout.activity_alarm_clock; - } - - @Override - public void initView() { - ButterKnife.bind(this); - mPresenter = new AlarmClockPresenter(this); - mPresenter.attachView(this); - mPresenter.setLifecycle(lifecycleSubject); - - mAlarmAdapter = new AlarmAdapter(); - recyclerView.setLayoutManager(new LinearLayoutManager(AlarmClockActivity.this)); - recyclerView.setAdapter(mAlarmAdapter); - iv_back.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - finish(); - } - }); - } - - @Override - public void initData() { - registerAlarmClockReceiver(); - mPresenter.getAlarmClock(); - } - - @Override - public void showAlarmClock(List alarmClockData) { - mAlarmAdapter.setAlarmClockData(alarmClockData); - } - - @Override - public void setAlarmClockEmpty() { - mAlarmAdapter.setAlarmClockData(null); - } - - @Override - public void onError() { - ToastUtil.show("服务器连接失败,检查网络连接"); - } - - @Override - protected void onDestroy() { - super.onDestroy(); - Jzvd.releaseAllVideos(); - if (mAlarmClockReceiver != null) { - unregisterReceiver(mAlarmClockReceiver); - } - } - - private void registerAlarmClockReceiver() { - if (null == mAlarmClockReceiver) { - mAlarmClockReceiver = new AlarmClockReceiver(); - } - IntentFilter filter = new IntentFilter(); - filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); - filter.addAction(MessageReceiver.SET_ALARMCLOCK); - registerReceiver(mAlarmClockReceiver, filter); - } - - private AlarmClockReceiver mAlarmClockReceiver; - - private class AlarmClockReceiver extends BroadcastReceiver { - - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - Log.e(TAG, "onReceive: " + action); - if (MessageReceiver.SET_ALARMCLOCK.equals(action)) { - mPresenter.getAlarmClock(); - } - } - } -} diff --git a/app/src/main/java/com/uiui/aios/activity/alarm/AlarmClockContact.java b/app/src/main/java/com/uiui/aios/activity/alarm/AlarmClockContact.java deleted file mode 100644 index ce8385e..0000000 --- a/app/src/main/java/com/uiui/aios/activity/alarm/AlarmClockContact.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.uiui.aios.activity.alarm; - -import com.uiui.aios.base.BasePresenter; -import com.uiui.aios.base.BaseView; -import com.uiui.aios.bean.AlarmClockData; - -import java.util.List; - -public class AlarmClockContact { - public interface Presenter extends BasePresenter { - void getAlarmClock(); - } - - public interface ClockView extends BaseView { - void showAlarmClock(List alarmClockData); - void setAlarmClockEmpty(); - void onError(); - } -} diff --git a/app/src/main/java/com/uiui/aios/activity/alarm/AlarmClockPresenter.java b/app/src/main/java/com/uiui/aios/activity/alarm/AlarmClockPresenter.java deleted file mode 100644 index 3689ecf..0000000 --- a/app/src/main/java/com/uiui/aios/activity/alarm/AlarmClockPresenter.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.uiui.aios.activity.alarm; - -import android.content.Context; - -import androidx.annotation.NonNull; - -import com.trello.rxlifecycle4.android.ActivityEvent; -import com.uiui.aios.bean.AlarmClockData; -import com.uiui.aios.network.NetInterfaceManager; - -import java.util.List; - -import io.reactivex.rxjava3.subjects.BehaviorSubject; - -public class AlarmClockPresenter implements AlarmClockContact.Presenter { - - private AlarmClockContact.ClockView mView; - private Context mContext; - - AlarmClockPresenter(Context context) { - this.mContext = context; - } - - private BehaviorSubject lifecycle; - - void setLifecycle(BehaviorSubject lifecycle) { - this.lifecycle = lifecycle; - } - - public BehaviorSubject getLifecycle() { - return lifecycle; - } - - @Override - public void attachView(@NonNull AlarmClockContact.ClockView view) { - this.mView = view; - } - - @Override - public void detachView() { - this.mView = null; - } - - - @Override - public void getAlarmClock() { - NetInterfaceManager.getInstance().getAlarmClock(true, getLifecycle(), new NetInterfaceManager.AlarmClockCallback() { - @Override - public void setAlarmClock(List alarmClockList) { - mView.showAlarmClock(alarmClockList); - } - - @Override - public void setAlarmClockEmpty() { - mView.setAlarmClockEmpty(); - } - - @Override - public void onError() { - mView.onError(); - } - }); - } -} diff --git a/app/src/main/java/com/uiui/aios/activity/code/FamilySpaceActivity.java b/app/src/main/java/com/uiui/aios/activity/code/FamilySpaceActivity.java deleted file mode 100644 index ee73fd0..0000000 --- a/app/src/main/java/com/uiui/aios/activity/code/FamilySpaceActivity.java +++ /dev/null @@ -1,111 +0,0 @@ -package com.uiui.aios.activity.code; - -import android.graphics.Color; -import android.view.View; -import android.widget.ImageView; - -import androidx.viewpager.widget.ViewPager; - -import com.bumptech.glide.Glide; -import com.uiui.aios.R; -import com.uiui.aios.adapter.HealthCodeAdapter; -import com.uiui.aios.base.BaseActivity; -import com.uiui.aios.bean.HealthCode; -import com.uiui.aios.utils.ToastUtil; -import com.uiui.aios.view.ScaleCircleNavigator; - -import net.lucode.hackware.magicindicator.MagicIndicator; -import net.lucode.hackware.magicindicator.ViewPagerHelper; - -import java.util.ArrayList; -import java.util.List; - -import butterknife.BindView; -import butterknife.ButterKnife; - -public class FamilySpaceActivity extends BaseActivity implements FamilySpaceContact.CodeView { - - @BindView(R.id.iv_back) - ImageView iv_back; - @BindView(R.id.viewPager) - ViewPager mViewPager; - @BindView(R.id.magicIndicator) - MagicIndicator mMagicIndicator; - @BindView(R.id.iv_nodata) - ImageView iv_nodata; - - private FamilySpacePresenter mPresenter; - private HealthCodeAdapter mHealthCodeAdapter; - private ScaleCircleNavigator scaleCircleNavigator; - - @Override - public int getLayoutId() { - return R.layout.activity_family_space; - } - - @Override - public void initView() { - ButterKnife.bind(this); - mPresenter = new FamilySpacePresenter(this); - mPresenter.attachView(this); - mPresenter.setLifecycle(lifecycleSubject); - iv_back.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - finish(); - } - }); - mHealthCodeAdapter = new HealthCodeAdapter(); - mViewPager.setAdapter(mHealthCodeAdapter); - scaleCircleNavigator = new ScaleCircleNavigator(this); - } - - @Override - public void initData() { - mPresenter.getHealthCode(); - } - - private void setImageViews(List healthCodes) { - mMagicIndicator.setNavigator(scaleCircleNavigator); - scaleCircleNavigator.setCircleCount(healthCodes.size()); - scaleCircleNavigator.setNormalCircleColor(Color.DKGRAY); - scaleCircleNavigator.setSelectedCircleColor(Color.LTGRAY); - scaleCircleNavigator.setCircleClickListener(new ScaleCircleNavigator.OnCircleClickListener() { - @Override - public void onClick(int index) { - - } - }); - ViewPagerHelper.bind(mMagicIndicator, mViewPager); - List imageViews = new ArrayList<>(); - for (HealthCode healthCode : healthCodes) { - ImageView image = new ImageView(this); - image.setAdjustViewBounds(true); - image.setScaleType(ImageView.ScaleType.FIT_CENTER); - Glide.with(this).load(healthCode.getImg()).into(image); - imageViews.add(image); - } - mHealthCodeAdapter.setImageViews(imageViews); - mHealthCodeAdapter.notifyDataSetChanged(); - } - - @Override - public void setHealthCode(List codeList) { - setImageViews(codeList); - mViewPager.setVisibility(View.VISIBLE); - mMagicIndicator.setVisibility(View.VISIBLE); - iv_nodata.setVisibility(View.GONE); - } - - @Override - public void setHealthCodeNodata() { - mViewPager.setVisibility(View.GONE); - mMagicIndicator.setVisibility(View.GONE); - iv_nodata.setVisibility(View.VISIBLE); - } - - @Override - public void onError() { - ToastUtil.show("连接服务器失败,请检查网络连接"); - } -} diff --git a/app/src/main/java/com/uiui/aios/activity/code/FamilySpaceContact.java b/app/src/main/java/com/uiui/aios/activity/code/FamilySpaceContact.java deleted file mode 100644 index 271c81f..0000000 --- a/app/src/main/java/com/uiui/aios/activity/code/FamilySpaceContact.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.uiui.aios.activity.code; - -import com.uiui.aios.base.BasePresenter; -import com.uiui.aios.base.BaseView; -import com.uiui.aios.bean.HealthCode; - -import java.util.List; - -public class FamilySpaceContact { - public interface Presenter extends BasePresenter { - void getHealthCode(); - } - - public interface CodeView extends BaseView { - void setHealthCode(List codeList); - void setHealthCodeNodata(); - void onError(); - } -} diff --git a/app/src/main/java/com/uiui/aios/activity/code/FamilySpacePresenter.java b/app/src/main/java/com/uiui/aios/activity/code/FamilySpacePresenter.java deleted file mode 100644 index cbbdac4..0000000 --- a/app/src/main/java/com/uiui/aios/activity/code/FamilySpacePresenter.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.uiui.aios.activity.code; - -import android.content.Context; -import android.util.Log; - -import androidx.annotation.NonNull; - -import com.trello.rxlifecycle4.android.ActivityEvent; -import com.uiui.aios.bean.HealthCode; -import com.uiui.aios.network.NetInterfaceManager; - -import java.util.List; - -import io.reactivex.rxjava3.subjects.BehaviorSubject; - -public class FamilySpacePresenter implements FamilySpaceContact.Presenter { - private static final String TAG = FamilySpacePresenter.class.getSimpleName(); - private FamilySpaceContact.CodeView mView; - - private Context mContext; - - private BehaviorSubject lifecycle; - - void setLifecycle(BehaviorSubject lifecycle) { - this.lifecycle = lifecycle; - } - - public BehaviorSubject getLifecycle() { - return lifecycle; - } - - FamilySpacePresenter(Context context) { - this.mContext = context; - Log.e(TAG, "MainPresenter: " + context.getClass()); - } - - - @Override - public void attachView(@NonNull FamilySpaceContact.CodeView view) { - this.mView = view; - } - - @Override - public void detachView() { - this.mView = null; - } - - - @Override - public void getHealthCode() { - NetInterfaceManager.getInstance().getHealthCode(true, getLifecycle(), new NetInterfaceManager.HealthCodeCallback() { - @Override - public void setHealthCode(List healthCode) { - mView.setHealthCode(healthCode); - } - - @Override - public void noData() { - mView.setHealthCodeNodata(); - } - - @Override - public void onError() { - mView.onError(); - } - }); - } -} diff --git a/app/src/main/java/com/uiui/aios/activity/contact/ContactActivity.java b/app/src/main/java/com/uiui/aios/activity/contact/ContactActivity.java deleted file mode 100644 index a1a6d2e..0000000 --- a/app/src/main/java/com/uiui/aios/activity/contact/ContactActivity.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.uiui.aios.activity.contact; - -import android.content.res.Configuration; -import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; - -import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - -import com.uiui.aios.R; -import com.uiui.aios.adapter.ContactAdapter; -import com.uiui.aios.base.BaseActivity; -import com.uiui.aios.bean.Contact; - -import java.util.List; - -import butterknife.BindView; -import butterknife.ButterKnife; -import butterknife.OnClick; - -public class ContactActivity extends BaseActivity implements ContactContact.ContactView { - @BindView(R.id.rv_contact) - RecyclerView rv_contact; - @BindView(R.id.tv_people) - TextView tv_people; - @BindView(R.id.iv_back) - ImageView iv_back; - - @OnClick({R.id.iv_back}) - public void onClick(View view) { - switch (view.getId()) { - case R.id.iv_back: - finish(); - break; - default: - } - } - - private ContactPresenter mContactPresenter; - private ContactAdapter mContactAdapter; - - @Override - public int getLayoutId() { - return R.layout.activity_contact; - } - - @Override - public void initView() { - ButterKnife.bind(this); - mContactPresenter = new ContactPresenter(this); - mContactPresenter.attachView(this); - mContactPresenter.setLifecycle(lifecycleSubject); - mContactAdapter = new ContactAdapter(); - if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { - rv_contact.setLayoutManager(new GridLayoutManager(this, 3)); - } else { - rv_contact.setLayoutManager(new GridLayoutManager(this, 2)); - } - rv_contact.setAdapter(mContactAdapter); - } - - @Override - public void initData() { - mContactPresenter.getContact(); - } - - @Override - protected void onDestroy() { - super.onDestroy(); - mContactPresenter.detachView(); - } - - @Override - public void setContact(List contactList) { - tv_people.setText(contactList.size() + "人"); - Contact contact = new Contact(); - contact.setName("拨号"); - contact.setMobile(ContactAdapter.DIALER_PACKAGE); - contactList.add(0, contact); - mContactAdapter.setContactList(contactList); - } -} diff --git a/app/src/main/java/com/uiui/aios/activity/contact/ContactContact.java b/app/src/main/java/com/uiui/aios/activity/contact/ContactContact.java deleted file mode 100644 index 20041c6..0000000 --- a/app/src/main/java/com/uiui/aios/activity/contact/ContactContact.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.uiui.aios.activity.contact; - -import com.uiui.aios.base.BasePresenter; -import com.uiui.aios.base.BaseView; -import com.uiui.aios.bean.Contact; - -import java.util.List; - -public class ContactContact { - public interface Presenter extends BasePresenter { - void getContact(); - } - - public interface ContactView extends BaseView { - void setContact(List contactList); - } -} diff --git a/app/src/main/java/com/uiui/aios/activity/contact/ContactPresenter.java b/app/src/main/java/com/uiui/aios/activity/contact/ContactPresenter.java deleted file mode 100644 index 22133be..0000000 --- a/app/src/main/java/com/uiui/aios/activity/contact/ContactPresenter.java +++ /dev/null @@ -1,100 +0,0 @@ -package com.uiui.aios.activity.contact; - -import android.content.Context; -import android.util.Log; - -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.tencent.mmkv.MMKV; -import com.trello.rxlifecycle4.RxLifecycle; -import com.trello.rxlifecycle4.android.ActivityEvent; -import com.uiui.aios.bean.BaseResponse; -import com.uiui.aios.bean.Contact; -import com.uiui.aios.network.NetInterfaceManager; -import com.uiui.aios.network.URLAddress; -import com.uiui.aios.utils.GsonUtils; - -import java.lang.reflect.Type; -import java.util.ArrayList; -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 ContactPresenter implements ContactContact.Presenter { - private Context mContext; - private ContactContact.ContactView mView; - private MMKV mMMKV = MMKV.defaultMMKV(); - - private BehaviorSubject lifecycle; - - void setLifecycle(BehaviorSubject lifecycle) { - this.lifecycle = lifecycle; - } - - public BehaviorSubject getLifecycle() { - return lifecycle; - } - - ContactPresenter(Context context) { - this.mContext = context; - } - - @Override - public void attachView(@NonNull ContactContact.ContactView view) { - this.mView = view; - } - - @Override - public void detachView() { - this.mView = null; - } - - @Override - public void getContact() { - NetInterfaceManager.getInstance() - .getContactListObservable() - .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY)) - .subscribe(new Observer>>() { - @Override - public void onSubscribe(@NonNull Disposable d) { - Log.e("getContactList", "onSubscribe: "); - } - - @Override - public void onNext(@NonNull BaseResponse> listBaseResponse) { - Log.e("getContactList", "onNext: " + listBaseResponse); - if (listBaseResponse.code == 200) { - mMMKV.putString(URLAddress.GET_MAIL_LIST, GsonUtils.toJsonString(listBaseResponse.data)); - mView.setContact(listBaseResponse.data); - } else { - mMMKV.putString(URLAddress.GET_MAIL_LIST, ""); - mView.setContact(new ArrayList<>()); - } - } - - @Override - public void onError(@NonNull Throwable e) { - Log.e("getContactList", "onError: " + e.getMessage()); - String jsonString = mMMKV.getString(URLAddress.GET_MAIL_LIST, null); - Gson gson = new Gson(); - Type type = new TypeToken>() { - }.getType(); - List contacts = gson.fromJson(jsonString, type); - if (contacts == null) { - mView.setContact(new ArrayList<>()); - } else { - mView.setContact(contacts); - } - onComplete(); - } - - @Override - public void onComplete() { - Log.e("getContactList", "onComplete: "); - } - }); - } -} diff --git a/app/src/main/java/com/uiui/aios/activity/main/MainContact.java b/app/src/main/java/com/uiui/aios/activity/main/MainContact.java deleted file mode 100644 index 7de0405..0000000 --- a/app/src/main/java/com/uiui/aios/activity/main/MainContact.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.uiui.aios.activity.main; - -import com.uiui.aios.base.BasePresenter; -import com.uiui.aios.base.BaseView; - -public class MainContact { - public interface Presenter extends BasePresenter { - /*获取系统设置*/ - void getSystemSettings(); - /*获取桌面布局*/ - void getDesktopLayout(); - /*更新桌面布局*/ - void updateDesktopLayout(); - /*上传正在运行的APP*/ - void sendAPPUsage(); - /*上传后台运行的APP*/ - void sendRunningInfo(); - /*获取负二屏开关*/ - void getAdminSnSetting(); - } - - public interface MainView extends BaseView { - void setSystemSettings(); - void getDesktopLayoutFinish(); - void updateDesktopLayoutFinish(); - void sendAPPUsageFinish(); - void sendRunningInfoFinish(); - void setAdminSnSetting(); - - } -} diff --git a/app/src/main/java/com/uiui/aios/activity/main/MainPresenter.java b/app/src/main/java/com/uiui/aios/activity/main/MainPresenter.java deleted file mode 100644 index fe62457..0000000 --- a/app/src/main/java/com/uiui/aios/activity/main/MainPresenter.java +++ /dev/null @@ -1,215 +0,0 @@ -package com.uiui.aios.activity.main; - -import android.content.Context; -import android.content.Intent; -import android.text.TextUtils; -import android.util.Log; - -import com.google.gson.JsonObject; -import com.trello.rxlifecycle4.RxLifecycle; -import com.trello.rxlifecycle4.android.ActivityEvent; -import com.uiui.aios.BuildConfig; -import com.uiui.aios.bean.BaseResponse; -import com.uiui.aios.bean.Contact; -import com.uiui.aios.bean.NetDesktopIcon; -import com.uiui.aios.network.NetInterfaceManager; -import com.uiui.aios.utils.ApkUtils; -import com.uiui.aios.utils.AppUsedTimeUtils; -import com.uiui.aios.utils.Utils; - -import java.util.List; - -import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; -import io.reactivex.rxjava3.annotations.NonNull; -import io.reactivex.rxjava3.core.Observer; -import io.reactivex.rxjava3.disposables.Disposable; -import io.reactivex.rxjava3.schedulers.Schedulers; -import io.reactivex.rxjava3.subjects.BehaviorSubject; - -public class MainPresenter implements MainContact.Presenter { - private static final String TAG = MainPresenter.class.getSimpleName(); - private MainContact.MainView mView; - private Context mContext; - - private BehaviorSubject lifecycle; - - void setLifecycle(BehaviorSubject lifecycle) { - this.lifecycle = lifecycle; - } - - public BehaviorSubject getLifecycle() { - return lifecycle; - } - - MainPresenter(Context context) { - this.mContext = context; - Log.e(TAG, "MainPresenter: " + context.getClass()); - } - - @Override - public void attachView(MainContact.MainView view) { - this.mView = view; - } - - @Override - public void detachView() { - this.mView = null; - } - - @Override - public void getSystemSettings() { -// NetInterfaceManager.getInstance().getSystemSettings(true, getLifecycle(), new NetInterfaceManager.ContactCallback() { -// @Override -// public void setContact(List contactList) { -// Intent intent = new Intent("setting_sos"); -// mContext.sendBroadcast(intent); -// } -// -// @Override -// public void setEmergencyContact(List emergencyContact) { -// -// } -// -// @Override -// public void setEmpty() { -// -// } -// -// @Override -// public void onComplete() { -// -// } -// }); - mView.setSystemSettings(); - } - - @Override - public void getDesktopLayout() { -// NetInterfaceManager.getInstance().getDesktopLayoutObservable() -// .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY)) -// .subscribe(new Observer>>() { -// @Override -// public void onSubscribe(@NonNull Disposable d) { -// Log.e("getDesktopLayout", "onSubscribe: "); -// } -// -// @Override -// public void onNext(@NonNull BaseResponse> listBaseResponse) { -// Log.e("getDesktopLayout", "onNext: " + listBaseResponse); -// } -// -// @Override -// public void onError(@NonNull Throwable e) { -// Log.e("getDesktopLayout", "onError: " + e.getMessage()); -// onComplete(); -// } -// -// @Override -// public void onComplete() { -// Log.e("getDesktopLayout", "onComplete: "); -// } -// }); - } - - @Override - public void updateDesktopLayout() { - - } - - @Override - public void sendAPPUsage() { - AppUsedTimeUtils.getInstance().setEndTime(System.currentTimeMillis()); - String packagename = AppUsedTimeUtils.getInstance().getAppPackageName(); - Log.e(TAG, "onRestart packagename == " + packagename); - if (!TextUtils.isEmpty(packagename)) { - Log.e(TAG, "onRestart: " + ApkUtils.getAppNameByPackage(mContext, packagename)); - Log.e(TAG, "onRestart: " + packagename); - NetInterfaceManager.getInstance() - .getAppUsageRecordControl() - .sendappUsageRecord(Utils.getSerial(), - ApkUtils.getAppNameByPackage(mContext, packagename), - packagename, - AppUsedTimeUtils.getInstance().getStartTime() / 1000, - AppUsedTimeUtils.getInstance().getEndTime() / 1000) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY)) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - Log.e("sendAPPUsage", "onSubscribe: "); - } - - @Override - public void onNext(BaseResponse baseResponse) { - Log.e("sendAPPUsage", "onNext: " + baseResponse); - } - - @Override - public void onError(Throwable e) { - Log.e("sendAPPUsage", "onError: " + e.getMessage()); - onComplete(); - } - - @Override - public void onComplete() { - Log.e("sendAPPUsage", "onComplete: "); - mView.sendAPPUsageFinish(); - } - }); - } else { - Log.e("onRestart", "app = null" + packagename); - mView.sendAPPUsageFinish(); - } - } - - @Override - public void sendRunningInfo() { - AppUsedTimeUtils.getInstance().setAppPackageName(BuildConfig.APPLICATION_ID); - AppUsedTimeUtils.getInstance().setStartTime(System.currentTimeMillis()); - long time = AppUsedTimeUtils.getInstance().getStartTime(); - JsonObject jsonObject = new JsonObject(); - jsonObject.addProperty("app_package", BuildConfig.APPLICATION_ID); - jsonObject.addProperty("version_name", ApkUtils.getAPPVersionName(mContext, BuildConfig.APPLICATION_ID)); - jsonObject.addProperty("start_time", time / 1000); - String jsonString = jsonObject.toString(); - Log.e(TAG, "sendRunningInfo: " + jsonString); - NetInterfaceManager.getInstance() - .getRunningAppObservable(jsonString) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY)) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - Log.e("sendRunningInfo", "onSubscribe: "); - } - - @Override - public void onNext(BaseResponse baseResponse) { - Log.e("sendRunningInfo", "onNext: " + baseResponse); - } - - @Override - public void onError(Throwable e) { - Log.e("sendRunningInfo", "onError: " + e.getMessage()); - onComplete(); - } - - @Override - public void onComplete() { - Log.e("sendRunningInfo", "onComplete: "); - } - }); - } - - @Override - public void getAdminSnSetting() { - NetInterfaceManager.getInstance().getAdminSnSetting(true, lifecycle, new NetInterfaceManager.onCompleteCallback() { - @Override - public void onComplete() { - - } - }); - } -} diff --git a/app/src/main/java/com/uiui/aios/activity/weather/WeatherActivity.java b/app/src/main/java/com/uiui/aios/activity/weather/WeatherActivity.java deleted file mode 100644 index 2757278..0000000 --- a/app/src/main/java/com/uiui/aios/activity/weather/WeatherActivity.java +++ /dev/null @@ -1,108 +0,0 @@ -package com.uiui.aios.activity.weather; - -import android.content.res.Configuration; -import android.content.res.Resources; -import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; - -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - -import com.qweather.sdk.bean.weather.WeatherDailyBean; -import com.uiui.aios.R; -import com.uiui.aios.adapter.WeatherDayApdapter; -import com.uiui.aios.base.BaseActivity; -import com.uiui.aios.manager.RemoteManager; -import com.uiui.aios.view.HorizontalItemDecoration; - -import butterknife.BindView; -import butterknife.ButterKnife; - -public class WeatherActivity extends BaseActivity implements WeatherContact.WeatherView { - @BindView(R.id.rv_weather) - RecyclerView rv_weather; - @BindView(R.id.tv_location) - TextView tv_location; - @BindView(R.id.iv_back) - ImageView iv_back; - - private WeatherPresenter mPresenter; - private WeatherDayApdapter mWeatherDayApdapter; - - @Override - public int getLayoutId() { - return R.layout.activity_weather; - } - - @Override - public void initView() { - ButterKnife.bind(this); - mPresenter = new WeatherPresenter(this); - mPresenter.attachView(this); - mPresenter.setLifecycle(lifecycleSubject); - RemoteManager.getInstance().getLocation(); - LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); - Resources resources = getResources(); - if (resources.getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { - linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); - rv_weather.addItemDecoration(new HorizontalItemDecoration(30, this));//10表示10dp - } else { - linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); - } - rv_weather.setLayoutManager(linearLayoutManager); -// rv_weather.setLayoutManager(new GridLayoutManager(this, 3)); -// rv_weather.addItemDecoration(new RecyclerItemDecoration(ScreenUtils.dp2px(resources, 10), ScreenUtils.dp2px(resources, 10), 3)); - mWeatherDayApdapter = new WeatherDayApdapter(); - rv_weather.setAdapter(mWeatherDayApdapter); - iv_back.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - finish(); - } - }); - } - - @Override - public void initData() { - mPresenter.getLocation(); - } - - @Override - public void setLocation(String location) { - tv_location.setText(location); - mPresenter.getWeatherCache(); - } - - @Override - public void setWeatherCache(WeatherDailyBean weatherCache) { - if (weatherCache != null) { - mWeatherDayApdapter.setDailyBeans(weatherCache.getDaily()); - } - mPresenter.getWeather(); - - } - - @Override - public void setWeather(WeatherDailyBean weather) { - if (weather != null) { - mWeatherDayApdapter.setDailyBeans(weather.getDaily()); - } - } - - @Override - protected void onResume() { - super.onResume(); - } - - @Override - protected void onPause() { - super.onPause(); - } - - @Override - protected void onDestroy() { - super.onDestroy(); - mPresenter.detachView(); - } -} diff --git a/app/src/main/java/com/uiui/aios/activity/weather/WeatherContact.java b/app/src/main/java/com/uiui/aios/activity/weather/WeatherContact.java deleted file mode 100644 index 0e0950f..0000000 --- a/app/src/main/java/com/uiui/aios/activity/weather/WeatherContact.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.uiui.aios.activity.weather; - -import com.qweather.sdk.bean.weather.WeatherDailyBean; -import com.uiui.aios.base.BasePresenter; -import com.uiui.aios.base.BaseView; - -public class WeatherContact { - public interface Presenter extends BasePresenter { - //获取定位缓存 - void getLocation(); - //获取天气缓存 - void getWeatherCache(); - //获取天气 - void getWeather(); - } - - public interface WeatherView extends BaseView { - //设置定位缓存 - void setLocation(String location); - //设置天气缓存 - void setWeatherCache(WeatherDailyBean weatherCache); - //设置天气 - void setWeather(WeatherDailyBean weather); - - } -} diff --git a/app/src/main/java/com/uiui/aios/activity/weather/WeatherPresenter.java b/app/src/main/java/com/uiui/aios/activity/weather/WeatherPresenter.java deleted file mode 100644 index 958ce7b..0000000 --- a/app/src/main/java/com/uiui/aios/activity/weather/WeatherPresenter.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.uiui.aios.activity.weather; - -import android.content.Context; -import android.util.Log; - -import androidx.annotation.NonNull; - -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.qweather.sdk.bean.weather.WeatherDailyBean; -import com.qweather.sdk.view.QWeather; -import com.tencent.mmkv.MMKV; -import com.trello.rxlifecycle4.android.ActivityEvent; -import com.uiui.aios.manager.RemoteManager; - -import java.lang.reflect.Type; - -import io.reactivex.rxjava3.subjects.BehaviorSubject; - -/** - * MainActivity和MainService 的 Presenter - * - * @author jgy02 - */ -public class WeatherPresenter implements WeatherContact.Presenter { - private static final String TAG = WeatherPresenter.class.getSimpleName(); - private static final String WEATHER_DAILY_KEY = "WEATHER_DAILY_JSON_STRING"; - private WeatherContact.WeatherView mView; - private Context mContext; - private MMKV mMMKV = MMKV.defaultMMKV(); - - private BehaviorSubject lifecycle; - - public void setLifecycle(BehaviorSubject lifecycle) { - this.lifecycle = lifecycle; - } - - public BehaviorSubject getLifecycle() { - return lifecycle; - } - - public WeatherPresenter(Context context) { - this.mContext = context; - Log.e(TAG, "WeatherPresenter: " + context.getClass()); - } - - @Override - public void attachView(@NonNull WeatherContact.WeatherView view) { - this.mView = view; - } - - @Override - public void detachView() { - this.mView = null; - } - - - @Override - public void getLocation() { - String location = RemoteManager.getInstance().getCityDistrict(); - mView.setLocation(location); - } - - @Override - public void getWeatherCache() { - // TODO: 2022/1/21 读取json,反序列化,排序 - String jsonString = mMMKV.decodeString(WEATHER_DAILY_KEY, ""); - Type type = new TypeToken() { - }.getType(); - WeatherDailyBean weatherDailyBean = new Gson().fromJson(jsonString, type); - mView.setWeatherCache(weatherDailyBean); - } - - @Override - public void getWeather() { - QWeather.getWeather7D(mContext, RemoteManager.getInstance().getLocationTude(), new QWeather.OnResultWeatherDailyListener() { - @Override - public void onError(Throwable throwable) { - Log.e("getWeather", "onError: " + throwable.getMessage()); - if (mView != null) { - mView.setWeather(null); - } - } - - @Override - public void onSuccess(WeatherDailyBean weatherDailyBean) { - String jsonString = new Gson().toJson(weatherDailyBean); - Log.d("getWeather", "onSuccess: " + jsonString); - mMMKV.encode(WEATHER_DAILY_KEY, jsonString); - if (mView != null) { - mView.setWeather(weatherDailyBean); - } - } - }); - } -} diff --git a/app/src/main/java/com/uiui/aios/adapter/APPListAdapter.java b/app/src/main/java/com/uiui/aios/adapter/APPListAdapter.java deleted file mode 100644 index 303a6ed..0000000 --- a/app/src/main/java/com/uiui/aios/adapter/APPListAdapter.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.uiui.aios.adapter; - -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.constraintlayout.widget.ConstraintLayout; -import androidx.recyclerview.widget.RecyclerView; - - -import com.uiui.aios.R; -import com.uiui.aios.bean.AppListInfo; -import com.uiui.aios.service.NotificationService; -import com.uiui.aios.utils.ApkUtils; - -import java.util.List; - -public class APPListAdapter extends RecyclerView.Adapter { - private Context mContext; - private List mAppListInfos; - - public APPListAdapter(Context context) { - this.mContext = context; - } - - public APPListAdapter(Context context, List list) { - this.mContext = context; - this.mAppListInfos = list; - } - - public void setAppListInfos(List listInfos) { - this.mAppListInfos = listInfos; - notifyDataSetChanged(); - } - - @NonNull - @Override - public holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new APPListAdapter.holder(LayoutInflater.from(mContext).inflate(R.layout.item_app, parent, false)); - - } - - @Override - public void onBindViewHolder(@NonNull holder holder, int position) { - final AppListInfo info = mAppListInfos.get(position); - String pkg = info.getPackageName(); - holder.icon.setImageBitmap(info.getIcon()); - holder.appname.setText(info.getAppName()); - holder.root.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - ApkUtils.openPackage(mContext, pkg); - } - }); - int size = NotificationService.getNotificationLength(pkg); - if (size == 0) { - holder.bg.setVisibility(View.GONE); - } else if (size < 99) { - holder.bg.setVisibility(View.VISIBLE); - holder.bg.setText(String.valueOf(size)); - } else { - holder.bg.setVisibility(View.VISIBLE); - holder.bg.setText("99+"); - } - } - - @Override - public int getItemCount() { - return mAppListInfos == null ? 0 : mAppListInfos.size(); - } - - class holder extends RecyclerView.ViewHolder { - private ImageView icon; - private TextView appname; - private TextView bg; - private ConstraintLayout root; - - public holder(@NonNull View itemView) { - super(itemView); - icon = itemView.findViewById(R.id.iv_icon); - appname = itemView.findViewById(R.id.tv_appname); - bg = itemView.findViewById(R.id.bg); - root = itemView.findViewById(R.id.root); - } - - } -} diff --git a/app/src/main/java/com/uiui/aios/adapter/AlarmAdapter.java b/app/src/main/java/com/uiui/aios/adapter/AlarmAdapter.java deleted file mode 100644 index ecd7590..0000000 --- a/app/src/main/java/com/uiui/aios/adapter/AlarmAdapter.java +++ /dev/null @@ -1,228 +0,0 @@ -package com.uiui.aios.adapter; - -import android.content.Context; -import android.graphics.Bitmap; -import android.media.AudioAttributes; -import android.media.MediaPlayer; -import android.os.Build; -import android.text.TextUtils; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.Switch; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.constraintlayout.widget.ConstraintLayout; -import androidx.fragment.app.FragmentActivity; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.resource.bitmap.RoundedCorners; -import com.bumptech.glide.request.RequestOptions; -import com.uiui.aios.R; -import com.uiui.aios.bean.AlarmClockData; -import com.uiui.aios.utils.FFmpegUtils; -import com.uiui.aios.utils.ScreenUtils; -import com.uiui.aios.view.JzvdStdRound; -import com.uiui.aios.view.MyJzvdStdNoTitleNoClarity; - -import java.io.IOException; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.List; -import java.util.regex.Pattern; - -import io.reactivex.rxjava3.core.Observer; -import io.reactivex.rxjava3.disposables.Disposable; - -public class AlarmAdapter extends RecyclerView.Adapter { - - private FragmentActivity mContext; - private List mAlarmClockData; - - public void setAlarmClockData(List alarmClockData) { - this.mAlarmClockData = alarmClockData; - notifyDataSetChanged(); - } - - @NonNull - @Override - public holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - mContext = (FragmentActivity) parent.getContext(); - return new AlarmAdapter.holder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_alarm_clock, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull holder holder, int position) { - AlarmClockData alarmClockData = mAlarmClockData.get(position); - switch (alarmClockData.getType()) { - case 1: - try { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); - Date date = sdf.parse(alarmClockData.getTime()); - SimpleDateFormat hours = new SimpleDateFormat("HH:mm"); - String time = hours.format(date); - holder.tv_time.setText(time); - } catch (ParseException e) { - e.printStackTrace(); - } - holder.tv_remind_type.setText("单次"); - break; - case 2: - holder.tv_time.setText(alarmClockData.getTime()); - holder.tv_remind_type.setText("循环"); - break; - case 3: - holder.tv_time.setText(alarmClockData.getTime()); - holder.tv_remind_type.setText("周一至周五"); - break; - case 4: - holder.tv_time.setText(alarmClockData.getTime()); - holder.tv_remind_type.setText("周六至周日"); - break; - default: - } - String title = alarmClockData.getTitle(); - if (TextUtils.isEmpty(title)) { - holder.tv_title.setText("无标题"); - } else { - holder.tv_title.setText(title); - } - String voice = alarmClockData.getVoice(); - if (TextUtils.isEmpty(voice)) { - holder.cl_voice.setVisibility(View.GONE); - } else { - holder.cl_voice.setVisibility(View.VISIBLE); - MediaPlayer mMediaPlayer = new MediaPlayer(); - mMediaPlayer.setAudioAttributes( - new AudioAttributes.Builder() - .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) - .build() - ); - mMediaPlayer.setOnCompletionListener(mp -> Log.e("setOnCompletionListener", "onCompletion: ")); - mMediaPlayer.setOnPreparedListener(mp -> Log.e("setOnPreparedListener", "onPrepared: ")); - mMediaPlayer.setOnErrorListener((mp, what, extra) -> false); - //设置音频文件到MediaPlayer对象中 - try { - mMediaPlayer.setDataSource(voice); - } catch (IOException e) { - e.printStackTrace(); - } - //让MediaPlayer对象准备,用这个方法防止加载时耗时导致anr - mMediaPlayer.prepareAsync(); - FFmpegUtils.getDurationInMilliseconds(voice, new Observer() { - @Override - public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) { - - } - - @Override - public void onNext(@io.reactivex.rxjava3.annotations.NonNull Integer integer) { - holder.tv_voice.setText(integer + "秒"); - } - - @Override - public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) { - - } - - @Override - public void onComplete() { - - } - }); - holder.cl_voice.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - mMediaPlayer.start(); - } - }); - } - String url = alarmClockData.getFile(); - if (TextUtils.isEmpty(url)) { - holder.cl_vp.setVisibility(View.GONE); - } else { - holder.cl_vp.setVisibility(View.VISIBLE); - if (isImgUrl(url)) { - holder.imageView.setVisibility(View.VISIBLE); - holder.jz_video.setVisibility(View.GONE); - if (!mContext.isDestroyed()) { - RequestOptions options = new RequestOptions().transform(new RoundedCorners(ScreenUtils.dip2px(mContext, 16F))); - Glide.with(mContext).load(url).apply(options).into(holder.imageView); - } - } else { - holder.imageView.setVisibility(View.GONE); - holder.jz_video.setVisibility(View.VISIBLE); - holder.jz_video.setUp(url, ""); - holder.jz_video.startButton.setImageDrawable(mContext.getDrawable(R.drawable.play)); - FFmpegUtils.loadVideoScreenshot(url, new Observer() { - @Override - public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) { - - } - - @Override - public void onNext(@io.reactivex.rxjava3.annotations.NonNull Bitmap bitmap) { - if (!mContext.isDestroyed()) { - RequestOptions options = new RequestOptions().transform(new RoundedCorners(ScreenUtils.dip2px(mContext, 16F))); - Glide.with(mContext).load(bitmap).apply(options).into(holder.jz_video.posterImageView); - } - holder.jz_video.startButton.setImageDrawable(mContext.getDrawable(R.drawable.play)); - } - - @Override - public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) { - - } - - @Override - public void onComplete() { - - } - }); - - } - } - - - } - - private Pattern mCompile = Pattern.compile(".*?(gif|jpeg|png|jpg|bmp|webp)"); - - private boolean isImgUrl(String url) { - if (TextUtils.isEmpty(url) || url.trim().length() == 0) { - return false; - } - return mCompile.matcher(url).matches(); - } - - @Override - public int getItemCount() { - return mAlarmClockData == null ? 0 : mAlarmClockData.size(); - } - - class holder extends RecyclerView.ViewHolder { - TextView tv_time, tv_remind_type, tv_title, tv_voice; - ConstraintLayout cl_voice, cl_vp; - JzvdStdRound jz_video; - ImageView imageView; - Switch switch1; - - public holder(@NonNull View itemView) { - super(itemView); - tv_time = itemView.findViewById(R.id.tv_time); - tv_remind_type = itemView.findViewById(R.id.tv_remind_type); - tv_title = itemView.findViewById(R.id.tv_title); - tv_voice = itemView.findViewById(R.id.tv_voice); - cl_voice = itemView.findViewById(R.id.cl_voice); - switch1 = itemView.findViewById(R.id.switch1); - cl_vp = itemView.findViewById(R.id.cl_vp); - jz_video = itemView.findViewById(R.id.jz_video); - imageView = itemView.findViewById(R.id.imageView); - } - } -} diff --git a/app/src/main/java/com/uiui/aios/adapter/AlarmClockAdapter.java b/app/src/main/java/com/uiui/aios/adapter/AlarmClockAdapter.java deleted file mode 100644 index 97dcd3e..0000000 --- a/app/src/main/java/com/uiui/aios/adapter/AlarmClockAdapter.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.uiui.aios.adapter; - -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.uiui.aios.R; -import com.uiui.aios.bean.AlarmItem; - -import java.util.List; - -public class AlarmClockAdapter extends RecyclerView.Adapter { - private List alarmItemList; - - public void setAlarmItemList(List alarmItems) { - this.alarmItemList = alarmItems; - notifyDataSetChanged(); - } - - - @NonNull - @Override - public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new AlarmClockAdapter.ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_alarmclock, parent, false)); - - } - - @Override - public void onBindViewHolder(@NonNull ViewHolder holder, int position) { - AlarmItem alarmItem = alarmItemList.get(position); - holder.tv_time.setText(alarmItem.mTime); - holder.tv_type.setText(alarmItem.mRepeatType); - if (alarmItem.mActive) { - holder.tv_status.setText("打开"); - } else { - holder.tv_status.setText("关闭"); - } - } - - @Override - public int getItemCount() { - return alarmItemList == null ? 0 : alarmItemList.size(); - } - - static class ViewHolder extends RecyclerView.ViewHolder { - TextView tv_time; - TextView tv_status; - TextView tv_type; - - ViewHolder(@NonNull View itemView) { - super(itemView); - tv_time = itemView.findViewById(R.id.tv_time); - tv_status = itemView.findViewById(R.id.tv_status); - tv_type = itemView.findViewById(R.id.tv_type); - } - } -} diff --git a/app/src/main/java/com/uiui/aios/adapter/AppSelectedAdapter.java b/app/src/main/java/com/uiui/aios/adapter/AppSelectedAdapter.java deleted file mode 100644 index 0ac3abb..0000000 --- a/app/src/main/java/com/uiui/aios/adapter/AppSelectedAdapter.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.uiui.aios.adapter; - -import android.content.Context; -import android.provider.Settings; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.tencent.mmkv.MMKV; -import com.uiui.aios.R; -import com.uiui.aios.activity.QuickAppActivity; -import com.uiui.aios.bean.AppSelectBean; - -import java.util.List; - -public class AppSelectedAdapter extends RecyclerView.Adapter { - private static final String TAG = AppSelectedAdapter.class.getSimpleName(); - - private Context mContext; - private List mAppSelectBeans; - private int unselectedStatus = -1; - private int selecedPosition = unselectedStatus; - - public void setAppSelectBeans(List appSelectBeanList) { - this.mAppSelectBeans = appSelectBeanList; - notifyDataSetChanged(); - } - - @NonNull - @Override - public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - mContext = parent.getContext(); - return new Holder(LayoutInflater.from(mContext).inflate(R.layout.item_app_select, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull Holder holder, int position) { - AppSelectBean appSelectBean = mAppSelectBeans.get(position); - holder.iv_icon.setImageDrawable(appSelectBean.getIcon()); - holder.tv_name.setText(appSelectBean.getAppName()); - if (selecedPosition == position) { - holder.iv_select.setImageDrawable(mContext.getDrawable(R.drawable.icon_selected)); - } else { - holder.iv_select.setImageDrawable(mContext.getDrawable(R.drawable.icon_unselected)); - } - holder.iv_select.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - if (position != selecedPosition) { - holder.iv_select.setImageDrawable(mContext.getDrawable(R.drawable.icon_selected)); - selecedPosition = position; - Settings.Global.putString(mContext.getContentResolver(), QuickAppActivity.QUICK_APP_KEY, appSelectBean.getPackageName()); - Log.e(TAG, "setQuickApp: " + appSelectBean.getPackageName()); - - } else { - holder.iv_select.setImageDrawable(mContext.getDrawable(R.drawable.icon_unselected)); - selecedPosition = -1; - Settings.Global.putString(mContext.getContentResolver(),QuickAppActivity.QUICK_APP_KEY, ""); - Log.e(TAG, "setQuickApp: empty"); - } - notifyDataSetChanged(); - } - }); - } - - @Override - public int getItemCount() { - return mAppSelectBeans == null ? 0 : mAppSelectBeans.size(); - } - - static class Holder extends RecyclerView.ViewHolder { - ImageView iv_select, iv_icon; - TextView tv_name; - - Holder(@NonNull View itemView) { - super(itemView); - iv_select = itemView.findViewById(R.id.iv_select); - iv_icon = itemView.findViewById(R.id.iv_icon); - tv_name = itemView.findViewById(R.id.tv_name); - } - } -} diff --git a/app/src/main/java/com/uiui/aios/adapter/ContactAdapter.java b/app/src/main/java/com/uiui/aios/adapter/ContactAdapter.java deleted file mode 100644 index 1c2a7be..0000000 --- a/app/src/main/java/com/uiui/aios/adapter/ContactAdapter.java +++ /dev/null @@ -1,103 +0,0 @@ -package com.uiui.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; -import androidx.constraintlayout.widget.ConstraintLayout; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.shehuan.niv.NiceImageView; -import com.uiui.aios.R; -import com.uiui.aios.bean.Contact; - -import java.util.List; - -public class ContactAdapter extends RecyclerView.Adapter { - private List mContactList; - private Context mContext; - - public static final String DIALER_PACKAGE = "com.android.dialer"; - - public void setContactList(List contactList) { - this.mContactList = contactList; - notifyDataSetChanged(); - } - - @NonNull - @Override - public ContactHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - mContext = parent.getContext(); - return new ContactHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_contact, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ContactHolder contactHolder, int position) { - Contact contact = mContactList.get(position); - contactHolder.root.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Intent intent1 = new Intent(Intent.ACTION_CALL); - String phone = contact.getMobile(); - if (DIALER_PACKAGE.equals(phone)) { - mContext.startActivity(new Intent(Intent.ACTION_DIAL)); - } else if (!TextUtils.isEmpty(phone)) { - Uri data = Uri.parse("tel:" + phone); - intent1.setData(data); - mContext.startActivity(intent1); - } - - } - }); - contactHolder.tv_name.setText(contact.getName()); - if (DIALER_PACKAGE.equals(contact.getMobile())) { - contactHolder.tv_phone.setText(""); - Glide.with(contactHolder.iv_head).load(R.drawable.icon_dialer).error(R.drawable.icon_dialer).into(contactHolder.iv_head); - } else { - contactHolder.tv_phone.setText(contact.getMobile()); - Glide.with(contactHolder.iv_head).load(contact.getAvatar()).error(R.drawable.default_head).into(contactHolder.iv_head); - } - int index = position % 3; - switch (index) { - case 0: - contactHolder.root.setBackground(mContext.getDrawable(R.drawable.background_weather_rain)); - break; - case 1: - contactHolder.root.setBackground(mContext.getDrawable(R.drawable.background_weather_sun)); - break; - case 2: - contactHolder.root.setBackground(mContext.getDrawable(R.drawable.background_weather_sunny)); - break; - default: - contactHolder.root.setBackground(mContext.getDrawable(R.drawable.background_weather_rain)); - } - } - - @Override - public int getItemCount() { - return mContactList == null ? 0 : mContactList.size(); - } - - static class ContactHolder extends RecyclerView.ViewHolder { - ConstraintLayout root; - NiceImageView iv_head; - TextView tv_name; - TextView tv_phone; - - public ContactHolder(@NonNull View itemView) { - super(itemView); - root = itemView.findViewById(R.id.root); - iv_head = itemView.findViewById(R.id.iv_head); - tv_name = itemView.findViewById(R.id.tv_name); - tv_phone = itemView.findViewById(R.id.tv_phone); - } - } -} diff --git a/app/src/main/java/com/uiui/aios/adapter/HealthCodeAdapter.java b/app/src/main/java/com/uiui/aios/adapter/HealthCodeAdapter.java deleted file mode 100644 index d50c7e5..0000000 --- a/app/src/main/java/com/uiui/aios/adapter/HealthCodeAdapter.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.uiui.aios.adapter; - -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; - -import androidx.annotation.NonNull; -import androidx.viewpager.widget.PagerAdapter; - -import java.util.List; - -public class HealthCodeAdapter extends PagerAdapter { - private List mImageViews; - - public void setImageViews(List imageViews) { - this.mImageViews = imageViews; - } - - @Override - public int getCount() { - return mImageViews == null ? 0 : mImageViews.size(); - } - - @Override - public boolean isViewFromObject(@NonNull View view, @NonNull Object object) { - return view == object; - - } - - @NonNull - @Override - public Object instantiateItem(@NonNull ViewGroup container, int position) { - // 给 container 添加一个view - container.addView(mImageViews.get(position)); - // 返回一个和该view相对的object - return mImageViews.get(position); - } - - @Override - public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { - container.removeView(mImageViews.get(position)); - } -} diff --git a/app/src/main/java/com/uiui/aios/adapter/NotificationAdapter.java b/app/src/main/java/com/uiui/aios/adapter/NotificationAdapter.java deleted file mode 100644 index 7ce5523..0000000 --- a/app/src/main/java/com/uiui/aios/adapter/NotificationAdapter.java +++ /dev/null @@ -1,155 +0,0 @@ -package com.uiui.aios.adapter; - -import android.content.Context; -import android.content.Intent; -import android.media.AudioAttributes; -import android.media.MediaPlayer; -import android.text.TextUtils; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.constraintlayout.widget.ConstraintLayout; -import androidx.recyclerview.widget.RecyclerView; - -import com.uiui.aios.R; -import com.uiui.aios.bean.AlarmClockData; -import com.uiui.aios.utils.FFmpegUtils; - -import java.io.IOException; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.List; - -import io.reactivex.rxjava3.core.Observer; -import io.reactivex.rxjava3.disposables.Disposable; - -public class NotificationAdapter extends RecyclerView.Adapter { - private Context mContext; - private List dataList; - private OnClickListener mOnClickListener; - - public void setDataList(List data) { - this.dataList = data; - notifyDataSetChanged(); - } - - public void setOnClickListener(OnClickListener listener) { - this.mOnClickListener = listener; - } - - public interface OnClickListener { - void onClick(); - } - - @NonNull - @Override - public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - mContext = parent.getContext(); - return new Holder(LayoutInflater.from(mContext).inflate(R.layout.item_notification, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull Holder holder, int position) { - AlarmClockData alarmClockData = dataList.get(position); - holder.tv_title.setText("提醒事件:" + alarmClockData.getTitle()); - String time = alarmClockData.getTime(); - if (time.length() > 5) { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); - SimpleDateFormat hours = new SimpleDateFormat("HH:mm"); - try { - Date date = sdf.parse(time); - String hourTime = hours.format(date); - holder.tv_time.setText(hourTime); - } catch (ParseException e) { - e.printStackTrace(); - } - } else { - holder.tv_time.setText(time); - } - String voice = alarmClockData.getVoice(); - holder.root.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - if (mOnClickListener != null) { - mOnClickListener.onClick(); - } - } - }); - if (TextUtils.isEmpty(voice)) { - holder.cl_voice.setVisibility(View.GONE); - } else { - holder.cl_voice.setVisibility(View.VISIBLE); - MediaPlayer mMediaPlayer = new MediaPlayer(); - mMediaPlayer.setAudioAttributes( - new AudioAttributes.Builder() - .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) - .build() - ); - mMediaPlayer.setOnCompletionListener(mp -> Log.e("setOnCompletionListener", "onCompletion: ")); - mMediaPlayer.setOnPreparedListener(mp -> Log.e("setOnPreparedListener", "onPrepared: ")); - mMediaPlayer.setOnErrorListener((mp, what, extra) -> false); - //设置音频文件到MediaPlayer对象中 - try { - mMediaPlayer.setDataSource(voice); - } catch (IOException e) { - e.printStackTrace(); - } - //让MediaPlayer对象准备,用这个方法防止加载时耗时导致anr - mMediaPlayer.prepareAsync(); - FFmpegUtils.getDurationInMilliseconds(voice, new Observer() { - @Override - public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) { - - } - - @Override - public void onNext(@io.reactivex.rxjava3.annotations.NonNull Integer integer) { - holder.tv_voice.setText(integer + "秒"); - } - - @Override - public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) { - - } - - @Override - public void onComplete() { - - } - }); - holder.cl_voice.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - mMediaPlayer.start(); - } - }); - } - } - - @Override - public int getItemCount() { - return dataList == null ? 0 : dataList.size(); - } - - class Holder extends RecyclerView.ViewHolder { - TextView tv_title; - TextView tv_time; - TextView tv_voice; - ConstraintLayout cl_voice; - ConstraintLayout root; - - public Holder(@NonNull View itemView) { - super(itemView); - root = itemView.findViewById(R.id.root); - tv_title = itemView.findViewById(R.id.tv_title); - tv_time = itemView.findViewById(R.id.tv_time); - tv_voice = itemView.findViewById(R.id.tv_voice); - cl_voice = itemView.findViewById(R.id.cl_voice); - } - } -} diff --git a/app/src/main/java/com/uiui/aios/adapter/SOSNnmberAdapter.java b/app/src/main/java/com/uiui/aios/adapter/SOSNnmberAdapter.java deleted file mode 100644 index 0f01007..0000000 --- a/app/src/main/java/com/uiui/aios/adapter/SOSNnmberAdapter.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.uiui.aios.adapter; - -import android.content.Context; -import android.content.Intent; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.constraintlayout.widget.ConstraintLayout; -import androidx.recyclerview.widget.RecyclerView; - -import com.uiui.aios.R; -import com.uiui.aios.activity.EmergencyActivity; -import com.uiui.aios.bean.Contact; - -import java.util.List; - -public class SOSNnmberAdapter extends RecyclerView.Adapter { - private List phoneNumberList; - private Context mContext; - - public void setPhoneNumberList(List contactList) { - this.phoneNumberList = contactList; - notifyDataSetChanged(); - } - - - @NonNull - @Override - public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - mContext = parent.getContext(); - return new SOSNnmberAdapter.ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_sosnumber, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ViewHolder holder, int position) { - Contact contact = phoneNumberList.get(position); - holder.tv_number.setText(contact.getMobile()); - holder.root.setOnClickListener(v -> { - Intent intent = new Intent(mContext, EmergencyActivity.class); - intent.putExtra("setting_sos", contact.getMobile()); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - mContext.startActivity(intent); - - }); - } - - @Override - public int getItemCount() { - return phoneNumberList == null ? 0 : phoneNumberList.size(); - } - - static class ViewHolder extends RecyclerView.ViewHolder { - TextView tv_number; - TextView tv_dial; - ConstraintLayout root; - - ViewHolder(@NonNull View itemView) { - super(itemView); - tv_number = itemView.findViewById(R.id.tv_number); - tv_dial = itemView.findViewById(R.id.tv_dial); - root = itemView.findViewById(R.id.root); - } - } -} diff --git a/app/src/main/java/com/uiui/aios/adapter/WeatherDayApdapter.java b/app/src/main/java/com/uiui/aios/adapter/WeatherDayApdapter.java deleted file mode 100644 index d19ee49..0000000 --- a/app/src/main/java/com/uiui/aios/adapter/WeatherDayApdapter.java +++ /dev/null @@ -1,116 +0,0 @@ -package com.uiui.aios.adapter; - -import android.content.Context; -import android.graphics.drawable.Drawable; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; -import androidx.recyclerview.widget.RecyclerView; - -import com.qweather.sdk.bean.weather.WeatherDailyBean; -import com.uiui.aios.R; - -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.List; - -public class WeatherDayApdapter extends RecyclerView.Adapter { - private static final String TAG = WeatherDayApdapter.class.getSimpleName(); - private List mDailyBeans; - private Context mContext; - - public void setDailyBeans(List dailyBeans) { - this.mDailyBeans = dailyBeans; - notifyDataSetChanged(); - } - - @NonNull - @Override - public WeatherHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - mContext = parent.getContext(); - return new WeatherHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_weather, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull WeatherHolder holder, int position) { - WeatherDailyBean.DailyBean dailyBean = mDailyBeans.get(position); - String dateString; - switch (position) { -// case 0: -// dateString = "今天"; -// break; -// case 1: -// dateString = "明天"; -// break; -// case 2: -// dateString = "后天"; -// break; - default: - dateString = dailyBean.getFxDate(); - try { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - Date date = sdf.parse(dailyBean.getFxDate()); - SimpleDateFormat now = new SimpleDateFormat("MM月dd日"); - dateString = now.format(date); - } catch (ParseException e) { - e.printStackTrace(); - } - } - holder.tv_date.setText(dateString); - holder.tv_temp.setText(dailyBean.getTempMin() + "℃ - " + dailyBean.getTempMax() + "℃"); - holder.tv_weather.setText(dailyBean.getTextDay()); - String iconDay = dailyBean.getIconDay(); - switch (iconDay) { - case "100": - case "150": - holder.iv_bg.setImageDrawable(ContextCompat.getDrawable(mContext, R.drawable.background_weather_sun)); - break; - case "102": - case "152": - holder.iv_bg.setImageDrawable(ContextCompat.getDrawable(mContext, R.drawable.background_weather_sunny)); - break; - default: - holder.iv_bg.setImageDrawable(ContextCompat.getDrawable(mContext, R.drawable.background_weather_rain)); - } - holder.iv_weather.setImageDrawable(getWeatherDrawable(iconDay)); - } - - private Drawable getWeatherDrawable(String iconName) { - int resID = mContext.getResources().getIdentifier("he" + iconName, "drawable", "com.uiui.aios"); - if (resID == 0) { - Log.e(TAG, "getView: not found src : " + iconName); - return mContext.getResources().getDrawable(R.drawable.he100); - } else { - return mContext.getResources().getDrawable(resID); - } - } - - @Override - public int getItemCount() { - return mDailyBeans == null ? 0 : mDailyBeans.size(); - } - - static class WeatherHolder extends RecyclerView.ViewHolder { - TextView tv_date; - ImageView iv_weather; - ImageView iv_bg; - TextView tv_weather; - TextView tv_temp; - - public WeatherHolder(@NonNull View itemView) { - super(itemView); - tv_date = itemView.findViewById(R.id.tv_date); - iv_weather = itemView.findViewById(R.id.iv_weather); - iv_bg = itemView.findViewById(R.id.iv_bg); - tv_weather = itemView.findViewById(R.id.tv_weather); - tv_temp = itemView.findViewById(R.id.tv_temp); - } - } -} diff --git a/app/src/main/java/com/uiui/aios/bean/WeatherDailyJson.java b/app/src/main/java/com/uiui/aios/bean/WeatherDailyJson.java deleted file mode 100644 index 82dbfd8..0000000 --- a/app/src/main/java/com/uiui/aios/bean/WeatherDailyJson.java +++ /dev/null @@ -1,294 +0,0 @@ -package com.uiui.aios.bean; - -import com.qweather.sdk.bean.Basic; -import com.qweather.sdk.bean.Refer; -import com.qweather.sdk.bean.base.Code; - -import java.io.Serializable; -import java.util.List; - -public class WeatherDailyJson implements Serializable { - private static final long serialVersionUID = 1585791680452421396L; - - private Code code; - private Basic basic; - private List daily; - private Refer refer; - - public WeatherDailyJson() { - } - - public Refer getRefer() { - return this.refer; - } - - public void setRefer(Refer var1) { - this.refer = var1; - } - - public Code getCode() { - return this.code; - } - - public void setCode(Code var1) { - this.code = var1; - } - - public Basic getBasic() { - return this.basic; - } - - public void setBasic(Basic var1) { - this.basic = var1; - } - - public List getDaily() { - return this.daily; - } - - public void setDaily(List var1) { - this.daily = var1; - } - - public static class DailyJson { - String fxDate = ""; - String sunrise = ""; - String sunset = ""; - String moonRise = ""; - String moonSet = ""; - String moonPhase = ""; - String tempMax = ""; - String tempMin = ""; - String iconDay = ""; - String textDay = ""; - String iconNight = ""; - String textNight = ""; - String wind360Day = ""; - String windDirDay = ""; - String windScaleDay = ""; - String windSpeedDay = ""; - String wind360Night = ""; - String windDirNight = ""; - String windScaleNight = ""; - String windSpeedNight = ""; - String humidity = ""; - String precip = ""; - String pressure = ""; - String vis = ""; - String cloud = ""; - String uvIndex = ""; - - public DailyJson() { - - } - - public String getFxDate() { - return this.fxDate; - } - - public void setFxDate(String var1) { - this.fxDate = var1; - } - - public String getSunrise() { - return this.sunrise; - } - - public void setSunrise(String var1) { - this.sunrise = var1; - } - - public String getSunset() { - return this.sunset; - } - - public void setSunset(String var1) { - this.sunset = var1; - } - - public String getMoonRise() { - return this.moonRise; - } - - public void setMoonRise(String var1) { - this.moonRise = var1; - } - - public String getMoonSet() { - return this.moonSet; - } - - public void setMoonSet(String var1) { - this.moonSet = var1; - } - - public String getMoonPhase() { - return this.moonPhase; - } - - public void setMoonPhase(String var1) { - this.moonPhase = var1; - } - - public String getTempMax() { - return this.tempMax; - } - - public void setTempMax(String var1) { - this.tempMax = var1; - } - - public String getTempMin() { - return this.tempMin; - } - - public void setTempMin(String var1) { - this.tempMin = var1; - } - - public String getIconDay() { - return this.iconDay; - } - - public void setIconDay(String var1) { - this.iconDay = var1; - } - - public String getTextDay() { - return this.textDay; - } - - public void setTextDay(String var1) { - this.textDay = var1; - } - - public String getIconNight() { - return this.iconNight; - } - - public void setIconNight(String var1) { - this.iconNight = var1; - } - - public String getTextNight() { - return this.textNight; - } - - public void setTextNight(String var1) { - this.textNight = var1; - } - - public String getWind360Day() { - return this.wind360Day; - } - - public void setWind360Day(String var1) { - this.wind360Day = var1; - } - - public String getWindDirDay() { - return this.windDirDay; - } - - public void setWindDirDay(String var1) { - this.windDirDay = var1; - } - - public String getWindScaleDay() { - return this.windScaleDay; - } - - public void setWindScaleDay(String var1) { - this.windScaleDay = var1; - } - - public String getWindSpeedDay() { - return this.windSpeedDay; - } - - public void setWindSpeedDay(String var1) { - this.windSpeedDay = var1; - } - - public String getWind360Night() { - return this.wind360Night; - } - - public void setWind360Night(String var1) { - this.wind360Night = var1; - } - - public String getWindDirNight() { - return this.windDirNight; - } - - public void setWindDirNight(String var1) { - this.windDirNight = var1; - } - - public String getWindScaleNight() { - return this.windScaleNight; - } - - public void setWindScaleNight(String var1) { - this.windScaleNight = var1; - } - - public String getWindSpeedNight() { - return this.windSpeedNight; - } - - public void setWindSpeedNight(String var1) { - this.windSpeedNight = var1; - } - - public String getHumidity() { - return this.humidity; - } - - public void setHumidity(String var1) { - this.humidity = var1; - } - - public String getPrecip() { - return this.precip; - } - - public void setPrecip(String var1) { - this.precip = var1; - } - - public String getPressure() { - return this.pressure; - } - - public void setPressure(String var1) { - this.pressure = var1; - } - - public String getVis() { - return this.vis; - } - - public void setVis(String var1) { - this.vis = var1; - } - - public String getCloud() { - return this.cloud; - } - - public void setCloud(String var1) { - this.cloud = var1; - } - - public String getUvIndex() { - return this.uvIndex; - } - - public void setUvIndex(String var1) { - this.uvIndex = var1; - } - } -} - diff --git a/app/src/main/java/com/uiui/aios/fragment/AppListFragment.java b/app/src/main/java/com/uiui/aios/fragment/AppListFragment.java deleted file mode 100644 index fea2cb8..0000000 --- a/app/src/main/java/com/uiui/aios/fragment/AppListFragment.java +++ /dev/null @@ -1,358 +0,0 @@ -package com.uiui.aios.fragment; - -import android.content.Context; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.content.res.Configuration; -import android.os.Bundle; -import android.provider.Settings; -import android.util.Log; -import android.view.Gravity; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.view.WindowManager; -import android.widget.ImageView; -import android.widget.TextView; - -import androidx.constraintlayout.widget.ConstraintLayout; -import androidx.fragment.app.Fragment; - -import com.google.gson.JsonObject; -import com.trello.rxlifecycle4.RxLifecycle; -import com.trello.rxlifecycle4.android.FragmentEvent; -import com.uiui.aios.R; -import com.uiui.aios.activity.code.FamilySpaceActivity; -import com.uiui.aios.base.BaseFragment; -import com.uiui.aios.bean.BaseResponse; -import com.uiui.aios.bean.DesktopIcon; -import com.uiui.aios.config.CommonConfig; -import com.uiui.aios.dialog.CustomDialog; -import com.uiui.aios.dialog.PasswordDialog; -import com.uiui.aios.network.NetInterfaceManager; -import com.uiui.aios.service.NotificationService; -import com.uiui.aios.utils.ApkUtils; -import com.uiui.aios.utils.AppUsedTimeUtils; -import com.uiui.aios.utils.BitmapUtils; -import com.uiui.aios.utils.IconUtils; -import com.uiui.aios.utils.LauncherUtils; -import com.uiui.aios.utils.ToastUtil; -import com.uiui.aios.view.MyGridLayout; - -import java.util.ArrayList; -import java.util.Arrays; - -import io.reactivex.rxjava3.annotations.NonNull; -import io.reactivex.rxjava3.core.Observer; -import io.reactivex.rxjava3.disposables.Disposable; - -/** - * A simple {@link Fragment} subclass. - * Use the {@link AppListFragment#newInstance} factory method to - * create an instance of this fragment. - */ -public class AppListFragment extends BaseFragment { - // TODO: Rename parameter arguments, choose names that match - // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER - private static final String ARG_PARAM1 = "param1"; - private static final String ARG_PARAM2 = "param2"; - - // TODO: Rename and change types of parameters - private String mParam1; - private String mParam2; - - private Context mContext; - private ArrayList mDesktopIcons; - private MyGridLayout gridLayout; - private String TAG = AppListFragment.class.getSimpleName(); - - public AppListFragment() { - // Required empty public constructor - } - - /** - * Use this factory method to create a new instance of - * this fragment using the provided parameters. - * - * @param param1 Parameter 1. - * @param param2 Parameter 2. - * @return A new instance of fragment AppListFragment. - */ - // TODO: Rename and change types and number of parameters - public static AppListFragment newInstance(String param1, String param2) { - AppListFragment fragment = new AppListFragment(); - Bundle args = new Bundle(); - args.putString(ARG_PARAM1, param1); - args.putString(ARG_PARAM2, param2); - fragment.setArguments(args); - return fragment; - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - if (savedInstanceState != null) { - mDesktopIcons = savedInstanceState.getParcelableArrayList("applicationInfos"); - } - if (getArguments() != null) { - mParam1 = getArguments().getString(ARG_PARAM1); - mParam2 = getArguments().getString(ARG_PARAM2); - } - } - - @Override - public void fetchData() { - - } - - private View rootView; - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - // Inflate the layout for this fragment - rootView = inflater.inflate(R.layout.fragment_applist, container, false); - mContext = rootView.getContext(); - initView(); - return rootView; - } - - private void initView() { - if (mDesktopIcons.size() != 12) { - mDesktopIcons.addAll(new ArrayList<>(Arrays.asList(new DesktopIcon[12 - mDesktopIcons.size()]))); - } - gridLayout = rootView.findViewById(R.id.list); - if (mContext.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { - gridLayout.set(4, 3); - } else { - gridLayout.set(3, 4); - } - - gridLayout.setGridAdapter(new MyGridLayout.GridAdatper() { - @Override - public View getView(int index) { - PackageManager pm = rootView.getContext().getPackageManager(); - View view = getLayoutInflater().inflate(R.layout.item_actions, null); - ImageView iv = view.findViewById(R.id.iv); - TextView tv = view.findViewById(R.id.tv); - TextView bg = view.findViewById(R.id.bg); - ConstraintLayout constraintLayout = view.findViewById(R.id.btn_booktag); - DesktopIcon desktopIcon = mDesktopIcons.get(index); - if (desktopIcon != null) { - String pkg = desktopIcon.getPackageName(); - Log.e(TAG, "getView: " + pkg); - int i = IconUtils.appClassNameList.indexOf(pkg); - if (i != -1) { - String val = IconUtils.appIconList.get(i); - int resID = mContext.getResources().getIdentifier(val, "drawable", "com.uiui.aios"); - int size = NotificationService.getNotificationLength(pkg); - if (size == 0) { - bg.setVisibility(View.GONE); - } else if (size < 99) { - bg.setVisibility(View.VISIBLE); - bg.setText(String.valueOf(size)); - } else { - bg.setVisibility(View.VISIBLE); - bg.setText("99+"); - } - if (resID == 0) { - Log.e(TAG, "getView: not found src : " + pkg); - iv.setImageDrawable(desktopIcon.getIcon()); - } else { - iv.setImageDrawable(mContext.getResources().getDrawable(resID)); - } - } else { - iv.setImageBitmap(BitmapUtils.getIconBitmap(rootView.getContext(), desktopIcon.getIcon())); - } - tv.setText(desktopIcon.getLable()); -// linearLayout.setEnabled(true); - } else { -// linearLayout.setEnabled(false); - } - - return view; - } - - @Override - public int getCount() { -// return applicationInfos == null ? 0 : applicationInfos.size(); - return mDesktopIcons.size(); - } - }); - gridLayout.setApplicationInfos(mDesktopIcons); - gridLayout.setOnItemClickListener(new MyGridLayout.OnItemClickListener() { - @Override - public void onItemClick(View v, int index) { - DesktopIcon desktopIcon = mDesktopIcons.get(index); - if (desktopIcon != null) { - Log.e(TAG, "onItemClick: " + desktopIcon.getPackageName()); - switch (desktopIcon.getPackageName()) { - case "aios.exit": - int is_activation = Settings.Global.getInt(mContext.getContentResolver(), CommonConfig.UIUI_ACTIVATION_KEY, 0); - if (is_activation == 0) { - LauncherUtils.openLauncher3(mContext); - } else { - showPassword(); - } - break; - case "aios.family": - startActivity(new Intent(mContext, FamilySpaceActivity.class)); - break; - case "com.android.dialer": - int qch_call_forbid = Settings.System.getInt(mContext.getContentResolver(), "qch_call_forbid", 0); - if (qch_call_forbid == 1) { - ToastUtil.show("电话功能被禁用"); - return; - } else { - ApkUtils.openPackage(v.getContext(), desktopIcon.getPackageName(), desktopIcon.getClassName()); - AppUsedTimeUtils.getInstance().setAppPackageName(desktopIcon.getPackageName()); - AppUsedTimeUtils.getInstance().setStartTime(System.currentTimeMillis()); - SendRunningApp(mContext); - } - break; - default: - ApkUtils.openPackage(v.getContext(), desktopIcon.getPackageName(), desktopIcon.getClassName()); - AppUsedTimeUtils.getInstance().setAppPackageName(desktopIcon.getPackageName()); - AppUsedTimeUtils.getInstance().setStartTime(System.currentTimeMillis()); - SendRunningApp(mContext); - } - } - } - - @Override - public void onLongClick(View v, int index) { - DesktopIcon desktopIcon = mDesktopIcons.get(index); - if (desktopIcon == null) return; - String pkg = desktopIcon.getPackageName(); - Log.e(TAG, "onLongClick: " + pkg); - switch (pkg) { - case "aios.exit": - case "com.uiui.sn": - break; - default: - showHinDialog(pkg, desktopIcon.getLable()); - } - } - }); - } - - private void updateAppDisableStatus(String pkg, String label) { - NetInterfaceManager.getInstance().getUpdateAppIconObservable(pkg, label, 0) - .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, FragmentEvent.DESTROY)) - .subscribe(new Observer() { - @Override - public void onSubscribe(@NonNull Disposable d) { - Log.e("updateAppDisableStatus", "onSubscribe: "); - } - - @Override - public void onNext(@NonNull BaseResponse baseResponse) { - Log.e("updateAppDisableStatus", "onNext: " + baseResponse); - if (baseResponse.code == 200) { - ApkUtils.disableApp(mContext, pkg); - } else { - ToastUtil.show("隐藏失败,检查网络连接"); - } - } - - @Override - public void onError(@NonNull Throwable e) { - Log.e("updateAppDisableStatus", "onError: "); - onComplete(); - } - - @Override - public void onComplete() { - Log.e("updateAppDisableStatus", "onComplete: "); - } - }); - } - - private void showHinDialog(String pkg, String label) { - CustomDialog customDialog = new CustomDialog(mContext); - customDialog.setTitle("隐藏应用"); - customDialog.setMessage("是否要隐藏:" + label); - customDialog.setOnClickBottomListener(new CustomDialog.OnClickBottomListener() { - @Override - public void onPositiveClick() { - updateAppDisableStatus(pkg, label); - customDialog.dismiss(); - } - - @Override - public void onNegtiveClick() { - customDialog.dismiss(); - } - }); - customDialog.show(); - } - - private void showPassword() { - PasswordDialog passwordDialog = new PasswordDialog(mContext); - passwordDialog.setTitle("退出关怀系统"); - passwordDialog.setOnClickBottomListener(new PasswordDialog.OnClickBottomListener() { - @Override - public void onPositiveClick() { - if ("666666".equals(passwordDialog.getPassword())) { - LauncherUtils.openLauncher3(mContext); - passwordDialog.dismiss(); - } else { - ToastUtil.show("密码错误"); - } - } - - @Override - public void onNegtiveClick() { - passwordDialog.dismiss(); - } - }); - passwordDialog.show(); - passwordDialog.getWindow().setGravity(Gravity.CENTER); - passwordDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); - passwordDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); - } - - private void SendRunningApp(Context context) { - String packageName = AppUsedTimeUtils.getInstance().getAppPackageName(); - long time = AppUsedTimeUtils.getInstance().getStartTime(); - JsonObject jsonObject = new JsonObject(); - jsonObject.addProperty("app_package", packageName); - jsonObject.addProperty("version_name", ApkUtils.getAPPVersionName(context, packageName)); - jsonObject.addProperty("start_time", time / 1000); - String jsonString = jsonObject.toString(); - Log.e(TAG, "SendRunningApp: " + jsonString); - NetInterfaceManager.getInstance() - .getRunningAppObservable(jsonString) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - Log.e("SendRunningApp", "onSubscribe: "); - } - - @Override - public void onNext(BaseResponse baseResponse) { - Log.e("SendRunningApp", "onSubscribe: " + baseResponse); - } - - @Override - public void onError(Throwable e) { - Log.e("SendRunningApp", "onError: " + e.getMessage()); - onComplete(); - } - - @Override - public void onComplete() { - Log.e("SendRunningApp", "onComplete: "); - } - }); - } - - public void setAppList(ArrayList appList) { - this.mDesktopIcons = appList; - } - - @Override - public void onSaveInstanceState(@NonNull Bundle outState) { - outState.putParcelableArrayList("applicationInfos", mDesktopIcons); - super.onSaveInstanceState(outState); - } -} diff --git a/app/src/main/java/com/uiui/aios/fragment/ControlFragment.java b/app/src/main/java/com/uiui/aios/fragment/ControlFragment.java deleted file mode 100644 index 7a985c7..0000000 --- a/app/src/main/java/com/uiui/aios/fragment/ControlFragment.java +++ /dev/null @@ -1,847 +0,0 @@ -package com.uiui.aios.fragment; - -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; -import android.content.pm.PackageManager; -import android.content.res.Configuration; -import android.hardware.camera2.CameraAccessException; -import android.hardware.camera2.CameraCharacteristics; -import android.hardware.camera2.CameraManager; -import android.media.AudioManager; -import android.net.ConnectivityManager; -import android.net.NetworkInfo; -import android.net.wifi.WifiInfo; -import android.net.wifi.WifiManager; -import android.os.BatteryManager; -import android.os.Build; -import android.os.Bundle; -import android.provider.Settings; -import android.text.TextUtils; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.SeekBar; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.constraintlayout.widget.ConstraintLayout; -import androidx.fragment.app.Fragment; - -import com.tencent.mmkv.MMKV; -import com.uiui.aios.R; -import com.uiui.aios.config.CommonConfig; -import com.uiui.aios.disklrucache.CacheHelper; -import com.uiui.aios.manager.RemoteManager; -import com.uiui.aios.utils.BrightnessUtils; -import com.uiui.aios.view.RulerSeekBar; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.text.SimpleDateFormat; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.function.Predicate; -import java.util.stream.Collectors; - -import butterknife.BindView; -import butterknife.ButterKnife; - -/** - * A simple {@link Fragment} subclass. - * Use the {@link ControlFragment#newInstance} factory method to - * create an instance of this fragment. - */ -public class ControlFragment extends Fragment { - private static final String TAG = ControlFragment.class.getSimpleName(); - -// @BindView(R.id.iv_back) -// ImageView iv_back; - - @BindView(R.id.tv_wifi) - TextView tv_wifi; - @BindView(R.id.tv_wifi_ssid) - TextView tv_wifi_ssid; - @BindView(R.id.tv_bt) - TextView tv_bt; - @BindView(R.id.tv_bt_ssid) - TextView tv_bt_ssid; - - // @BindView(R.id.tv_font_size) -// TextView tv_font_size; - @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_electricity) - TextView tv_electricity; - @BindView(R.id.tv_flashlight) - TextView tv_flashlight; - @BindView(R.id.tv_flashlight_switch) - TextView tv_flashlight_switch; - - @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; - - private View rootView; - private Context mContext; - private ContentResolver mCRv; - private CacheHelper mCacheHelper; - - // TODO: Rename parameter arguments, choose names that match - // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER - private static final String ARG_PARAM1 = "param1"; - private static final String ARG_PARAM2 = "param2"; - - // TODO: Rename and change types of parameters - private String mParam1; - private String mParam2; - - public ControlFragment() { - // Required empty public constructor - } - - /** - * Use this factory method to create a new instance of - * this fragment using the provided parameters. - * - * @param param1 Parameter 1. - * @param param2 Parameter 2. - * @return A new instance of fragment ControlFragment. - */ - // TODO: Rename and change types and number of parameters - public static ControlFragment newInstance(String param1, String param2) { - ControlFragment fragment = new ControlFragment(); - Bundle args = new Bundle(); - args.putString(ARG_PARAM1, param1); - args.putString(ARG_PARAM2, param2); - fragment.setArguments(args); - return fragment; - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - if (getArguments() != null) { - mParam1 = getArguments().getString(ARG_PARAM1); - mParam2 = getArguments().getString(ARG_PARAM2); - } - } - - @Override - public void onConfigurationChanged(@NonNull Configuration newConfig) { - super.onConfigurationChanged(newConfig); - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment - rootView = inflater.inflate(R.layout.fragment_control, container, false); - mContext = rootView.getContext(); - mCRv = mContext.getContentResolver(); - mCacheHelper = new CacheHelper(mContext); - ButterKnife.bind(this, rootView); - initView(); - initData(); - return rootView; - } - - private void initView() { - tv_wifi_ssid.requestFocus(); - - getWifi(); - registerWiFiReceiver(); - getBluetooth(); - registerBluetoothReceiver(); - getBattery(); - registerBatteryReceiver(); - getFlashlight(); - getFontSize(); - getLocation(); - getBrightness(); - getSound(); - } - - private void initData() { - - } - - private void getWifi() { - cl_wifi.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - startActivity(new Intent(android.provider.Settings.ACTION_WIFI_SETTINGS)); - } - }); - if (isWifiEnabled()) { - tv_wifi_ssid.setText(getConnectWifiSsid()); - cl_wifi.setBackground(mContext.getDrawable(R.drawable.control_background_item)); - } else { - tv_wifi_ssid.setText("未连接"); - cl_wifi.setBackground(mContext.getDrawable(R.drawable.control_background_item_dis)); - } - } - - public boolean isWifiEnabled() { - WifiManager wifiMgr = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); - if (wifiMgr.getWifiState() == WifiManager.WIFI_STATE_ENABLED) { - ConnectivityManager connManager = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE); - NetworkInfo wifiInfo = connManager - .getNetworkInfo(ConnectivityManager.TYPE_WIFI); - return wifiInfo.isConnected(); - } else { - return false; - } - } - - private WifiReceiver mWifiReceiver; - - private void registerWiFiReceiver() { - if (mWifiReceiver == null) { - mWifiReceiver = new WifiReceiver(); - } - IntentFilter filter = new IntentFilter(); - filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); - filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); - filter.addAction(WifiManager.RSSI_CHANGED_ACTION); - filter.addAction(WifiManager.NETWORK_IDS_CHANGED_ACTION); - filter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION); - filter.addAction(WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION); - filter.addAction(WifiManager.LINK_CONFIGURATION_CHANGED_ACTION); - filter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION); - filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); - mContext.registerReceiver(mWifiReceiver, filter); - } - - class WifiReceiver extends BroadcastReceiver { - private static final String TAG = "wifiReceiver"; - - @Override - public void onReceive(Context context, Intent intent) { - switch (intent.getAction()) { - case WifiManager.RSSI_CHANGED_ACTION: - Log.e(TAG, "wifi信号强度变化"); - break; - //wifi连接上与否 - case WifiManager.NETWORK_STATE_CHANGED_ACTION: - NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); - if (info.getState().equals(NetworkInfo.State.DISCONNECTED)) { - Log.e(TAG, "wifi断开"); - tv_wifi_ssid.setText("未连接"); - cl_wifi.setBackground(mContext.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(newSSID.replaceAll("\"", "")); - cl_wifi.setBackground(mContext.getDrawable(R.drawable.control_background_item)); - } - break; - //wifi打开与否 - case WifiManager.WIFI_STATE_CHANGED_ACTION: - int wifistate = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_DISABLED); - if (wifistate == WifiManager.WIFI_STATE_DISABLED) { - Log.e(TAG, "系统关闭wifi"); - tv_wifi_ssid.setText("关"); - cl_wifi.setBackground(mContext.getDrawable(R.drawable.control_background_item_dis)); - } else if (wifistate == WifiManager.WIFI_STATE_ENABLED) { - Log.e(TAG, "系统开启wifi"); - } - break; - default: - } - } - } - - @Override - public void onResume() { - super.onResume(); - setBrightness(); - } - - /** - * 获取当前连接WIFI的SSID - */ - public String getSSID() { - WifiManager wm = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); - if (wm != null) { - WifiInfo winfo = wm.getConnectionInfo(); - if (winfo != null) { - String s = winfo.getSSID(); - if (s.length() > 2 && s.charAt(0) == '"' && s.charAt(s.length() - 1) == '"') { - return s.substring(1, s.length() - 1); - } - } - } - return ""; - } - - private String getConnectWifiSsid() { - WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); - WifiInfo wifiInfo = wifiManager.getConnectionInfo(); -// //去掉带引号的字符串方法一 -// String wifiInfo1 = wifiInfo.getSSID(); -// if (wifiInfo1.contains("\"")) { -// wifiInfo1 = wifiInfo1.substring(1, wifiInfo1.length() - 1); -// } -//去掉带引号的字符串方法二 - String wifiSSID = wifiInfo.getSSID(); - String wifiInfo1 = wifiSSID.replaceAll("\"", ""); - return wifiInfo1; - } - - private BluetoothAdapter bluetoothAdapter; - - private void getBluetooth() { - bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); - if (bluetoothAdapter.isEnabled()) { - if (isConnected()) { - cl_bt.setBackground(mContext.getDrawable(R.drawable.control_background_item)); - tv_bt_ssid.setText(getBluetoothDeviceName()); - } else { - cl_bt.setBackground(mContext.getDrawable(R.drawable.control_background_item_dis)); - tv_bt_ssid.setText("未连接"); - } - } else { - cl_bt.setBackground(mContext.getDrawable(R.drawable.control_background_item_dis)); - tv_bt_ssid.setText("已关闭"); - } - getConnectedDevicesV1(); - cl_bt.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - startActivity(new Intent(Settings.ACTION_BLUETOOTH_SETTINGS)); - } - }); - } - - public boolean isConnected() { - Set bondedDevices = bluetoothAdapter.getBondedDevices(); - List deviceList = bondedDevices.stream().filter(new Predicate() { - @Override - public boolean test(BluetoothDevice bluetoothDevice) { - return bluetoothDevice.isConnected(); - } - }).collect(Collectors.toList()); - return deviceList.size() > 0; - } - - public String getBluetoothDeviceName() { - Set bondedDevices = bluetoothAdapter.getBondedDevices(); - List deviceList = bondedDevices.stream().filter(new Predicate() { - @Override - public boolean test(BluetoothDevice bluetoothDevice) { - return bluetoothDevice.isConnected(); - } - }).collect(Collectors.toList()); - if (deviceList.size() == 0) { - return "未连接"; - } else { - return deviceList.get(0).getName(); - } - } - - //TODO 根据mac地址判断是否已连接(这里参数可以直接用BluetoothDevice对象) -//但这么写其实更通用。 - public boolean isConnected(String macAddress) { - if (!BluetoothAdapter.checkBluetoothAddress(macAddress)) { - return false; - } - final BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); - BluetoothDevice device = bluetoothAdapter.getRemoteDevice(macAddress); - - Method isConnectedMethod = null; - boolean isConnected; - try { - isConnectedMethod = BluetoothDevice.class.getDeclaredMethod("isConnected", (Class[]) null); - isConnectedMethod.setAccessible(true); - isConnected = (boolean) isConnectedMethod.invoke(device, (Object[]) null); - } catch (NoSuchMethodException e) { - isConnected = false; - } catch (IllegalAccessException e) { - isConnected = false; - } catch (InvocationTargetException e) { - isConnected = false; - } - return isConnected; - } - - /** - * 获取系统中已连接的蓝牙设备 - * - * @return - */ - public Set getConnectedDevicesV1() { - Class bluetoothAdapterClass = BluetoothAdapter.class;//得到BluetoothAdapter的Class对象 - Set deviceSet = new HashSet<>(); - //是否存在连接的蓝牙设备 - try { - Method method = bluetoothAdapterClass.getDeclaredMethod("getMostRecentlyConnectedDevices", (Class[]) null); - //打开权限 - method.setAccessible(true); - List list = (List) method.invoke(BluetoothAdapter.getDefaultAdapter(), (Object[]) null); - Log.e("zbh", "最近连接过的设备:"); - for (BluetoothDevice dev : list - ) { - String Type = ""; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { - switch (dev.getType()) { - case BluetoothDevice.DEVICE_TYPE_CLASSIC: - Type = "经典"; - break; - case BluetoothDevice.DEVICE_TYPE_LE: - Type = "BLE"; - break; - case BluetoothDevice.DEVICE_TYPE_DUAL: - Type = "双模"; - break; - default: - Type = "未知"; - break; - } - } - String connect = "设备未连接"; - if (isConnected(dev.getAddress())) { - deviceSet.add(dev); - connect = "设备已连接"; - } - Log.e("zbh", connect + ", address = " + dev.getAddress() + "(" + Type + "), name --> " + dev.getName()); - - } - } catch (NoSuchMethodException e) { - e.printStackTrace(); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } catch (InvocationTargetException e) { - e.printStackTrace(); - } - return deviceSet; - } - - private BluetoothMonitorReceiver bleListenerReceiver; - - private void registerBluetoothReceiver() { - bleListenerReceiver = new BluetoothMonitorReceiver(); - IntentFilter intentFilter = new IntentFilter(); - // 监视蓝牙关闭和打开的状态 - intentFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED); - // 监视蓝牙设备与APP连接的状态 - intentFilter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED); - intentFilter.addAction(BluetoothDevice.ACTION_ACL_CONNECTED); - // 注册广播 - mContext.registerReceiver(this.bleListenerReceiver, intentFilter); - } - - class BluetoothMonitorReceiver extends BroadcastReceiver { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - Log.e("BluetoothMonitorReceiver", "onReceive: " + action); - if (!TextUtils.isEmpty(action)) { - switch (action) { - case BluetoothAdapter.ACTION_STATE_CHANGED: - int blueState = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, 0); - switch (blueState) { - case BluetoothAdapter.STATE_TURNING_ON: - tv_bt_ssid.setText("正在打开"); - cl_bt.setBackground(mContext.getDrawable(R.drawable.control_background_item)); - break; - case BluetoothAdapter.STATE_ON: - tv_bt_ssid.setText("已打开"); - cl_bt.setBackground(mContext.getDrawable(R.drawable.control_background_item)); - break; - case BluetoothAdapter.STATE_TURNING_OFF: - tv_bt_ssid.setText("正在关闭"); - cl_bt.setBackground(mContext.getDrawable(R.drawable.control_background_item)); - break; - case BluetoothAdapter.STATE_OFF: - tv_bt_ssid.setText("已关闭"); - cl_bt.setBackground(mContext.getDrawable(R.drawable.control_background_item_dis)); - break; - default: - } - break; - case BluetoothDevice.ACTION_ACL_CONNECTED: - tv_bt_ssid.setText(getBluetoothDeviceName()); - cl_bt.setBackground(mContext.getDrawable(R.drawable.control_background_item)); - break; - case BluetoothDevice.ACTION_ACL_DISCONNECTED: - tv_bt_ssid.setText("未连接"); - cl_bt.setBackground(mContext.getDrawable(R.drawable.control_background_item_dis)); - break; - default: - } - - } - } - } - - private void getBattery() { - tv_electricity.setText(getBatteryCapacity() + "%"); - if (isBatteryCharging()) { - cl_battery.setBackground(mContext.getDrawable(R.drawable.control_background_item)); - } else { - cl_battery.setBackground(mContext.getDrawable(R.drawable.control_background_item_dis)); - } - } - - /** - * 主动获取当前电池是否在充电 , 即数据线是否插在手机上 - * - * @return - */ - public boolean isBatteryCharging() { - boolean isBatteryCharging = false; - // 主动发送包含是否正在充电状态的广播 , 该广播会持续发送 - IntentFilter intentFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); - // 注册广播接受者 - Intent intent = mContext.registerReceiver(null, intentFilter); - // 获取充电状态 - int batteryChargeState = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); - // 判定是否是 AC 交流电充电 - boolean isAc = batteryChargeState == BatteryManager.BATTERY_PLUGGED_AC; - // 判断是否是 USB 充电 - boolean isUsb = batteryChargeState == BatteryManager.BATTERY_PLUGGED_USB; - // 判断是否是 无线充电 - boolean isWireless = batteryChargeState == BatteryManager.BATTERY_PLUGGED_WIRELESS; - // 如何上述任意一种为 true , 说明当前正在充电 - isBatteryCharging = isAc || isUsb || isWireless; - return isBatteryCharging; - } - - - public int getBatteryCapacity() { - try { - BatteryManager batteryManager = (BatteryManager) mContext.getSystemService(Context.BATTERY_SERVICE); - return batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY); - } catch (Exception e) { - Log.e("getBattery", "getBattery" + e.getMessage()); - } - return 0; - } - - private BatteryReceiver mBatteryReceiver; - - private void registerBatteryReceiver() { - if (mBatteryReceiver == null) { - mBatteryReceiver = new BatteryReceiver(); - IntentFilter filter = new IntentFilter(); - filter.addAction(Intent.ACTION_POWER_CONNECTED); - filter.addAction(Intent.ACTION_POWER_DISCONNECTED); - filter.addAction(Intent.ACTION_BATTERY_CHANGED); - filter.addAction(Intent.ACTION_BATTERY_LEVEL_CHANGED); - filter.addAction(Intent.ACTION_BATTERY_LOW); - filter.addAction(Intent.ACTION_BATTERY_OKAY); - mContext.registerReceiver(mBatteryReceiver, filter); - } - } - - class BatteryReceiver extends BroadcastReceiver { - public static final String TAG = "BatteryReceiver"; - - @Override - public void onReceive(Context context, Intent intent) { - // 获取广播事件 - String action = intent.getAction(); - if (TextUtils.isEmpty(action)) return; -// Log.e(TAG, "onReceive: " + action); - switch (action) { - case Intent.ACTION_POWER_CONNECTED: - cl_battery.setBackground(mContext.getDrawable(R.drawable.control_background_item)); - break; - case Intent.ACTION_POWER_DISCONNECTED: - cl_battery.setBackground(mContext.getDrawable(R.drawable.control_background_item_dis)); - break; - case Intent.ACTION_BATTERY_LEVEL_CHANGED: - tv_electricity.setText(getBatteryCapacity() + "%"); - break; - default: - } - } - } - - private boolean flashing = false; - private CameraManager cameraManager; - - BroadcastReceiver mTimeUpdateReceiver; - - class TimeUpdateReceiver extends BroadcastReceiver { - @Override - public void onReceive(Context context, Intent intent) { - if (intent == null) return; - String action = intent.getAction(); - if (action == null || action.isEmpty()) return; - - if (action.equals(Intent.ACTION_TIME_TICK)) { - //系统每1分钟发送一次广播 - updateTimeUi(); - } else if (action.equals(Intent.ACTION_TIME_CHANGED)) { - //系统手动更改时间发送广播 - updateTimeUi(); - } - } - } - - private void updateTimeUi() { - long time = System.currentTimeMillis(); - SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm"); - String timeText = timeFormat.format(time); - tv_flashlight.setText(timeText); - SimpleDateFormat format = new SimpleDateFormat("MM月dd日"); - String dataText = format.format(time); - tv_flashlight_switch.setText(dataText); - } - - - private void getFlashlight() { - if (mTimeUpdateReceiver == null) { - mTimeUpdateReceiver = new TimeUpdateReceiver(); - } - IntentFilter filter = new IntentFilter(); - filter.addAction(Intent.ACTION_TIME_TICK); - filter.addAction(Intent.ACTION_TIME_CHANGED); - mContext.registerReceiver(mTimeUpdateReceiver, filter); - updateTimeUi(); -// if (isFlashlightAvailable()) { -// tv_flashlight_switch.setText("关"); -// cl_flashlight.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)); -// return; -// } -//// if (isFlashlightEnabled()) { -//// tv_flashlight_switch.setText("开"); -//// cl_flashlight.setBackground(getDrawable(R.drawable.control_background_item)); -//// } else { -//// tv_flashlight_switch.setText("关"); -//// cl_flashlight.setBackground(getDrawable(R.drawable.control_background_item_dis)); -//// } -// -// cameraManager = (CameraManager) mContext.getSystemService(Context.CAMERA_SERVICE); -// -// cl_flashlight.setOnClickListener(new View.OnClickListener() { -// @Override -// public void onClick(View view) { -// if (flashing) { -// try { -// String CameraId = cameraManager.getCameraIdList()[0]; -// cameraManager.setTorchMode(CameraId, false); -// } catch (CameraAccessException e) { -// e.printStackTrace(); -// } -// flashing = false; -// tv_flashlight_switch.setText("关"); -// cl_flashlight.setBackground(mContext.getDrawable(R.drawable.control_background_item_dis)); -// } else { -// try { -// String CameraId = cameraManager.getCameraIdList()[0]; -// cameraManager.setTorchMode(CameraId, true); -// } catch (CameraAccessException e) { -// e.printStackTrace(); -// } -// tv_flashlight_switch.setText("开"); -// cl_flashlight.setBackground(mContext.getDrawable(R.drawable.control_background_item)); -// flashing = true; -// } -// } -// }); - } - - - private boolean isFlashlightAvailable() { - return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH); - } - - private static String getCameraId(Context context) throws CameraAccessException { - final CameraManager cameraManager = context.getSystemService(CameraManager.class); - final String[] ids = cameraManager.getCameraIdList(); - for (String id : ids) { - CameraCharacteristics c = cameraManager.getCameraCharacteristics(id); - Boolean flashAvailable = c.get(CameraCharacteristics.FLASH_INFO_AVAILABLE); - Integer lensFacing = c.get(CameraCharacteristics.LENS_FACING); - if (flashAvailable != null && flashAvailable - && lensFacing != null && lensFacing == CameraCharacteristics.LENS_FACING_BACK) { - return id; - } - } - return null; - } - - private boolean isFlashlightEnabled() { - return Settings.Secure.getInt(mCRv, Settings.Secure.FLASHLIGHT_ENABLED, 0) == 1; - } - - private void getFontSize() { - float fontScale = Settings.System.getFloat(mCRv, Settings.System.FONT_SCALE, 0.0f); - Log.e(TAG, "getFontSize: fontScale = " + fontScale); - List mEntries = Arrays.asList(getResources().getStringArray(R.array.entries_font_size)); - String[] strEntryValues = getResources().getStringArray(R.array.entryvalues_font_size); - float[] mValues = new float[strEntryValues.length]; - for (int i = 0; i < strEntryValues.length; ++i) { - mValues[i] = Float.parseFloat(strEntryValues[i]); - } - seekBar.setMax(mEntries.size() - 1); - String font_size; - int index = Arrays.binarySearch(mValues, fontScale); - Log.e(TAG, "getFontSize: index: " + index); - if (index >= 0) { - font_size = mEntries.get(index); - } else { - font_size = "默认"; - } -// tv_font_size.setText(font_size); - seekBar.setProgress(index); - seekBar.postDelayed(new Runnable() { - @Override - public void run() { - seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { - @Override - public void onProgressChanged(SeekBar seekBar, int i, boolean b) { - Log.e(TAG, "getFontSize: onProgressChanged: " + i); - Log.e(TAG, "getFontSize: FONT_SCALE = " + Float.parseFloat(strEntryValues[i])); - Settings.System.putFloat(mCRv, Settings.System.FONT_SCALE, Float.parseFloat(strEntryValues[i])); - } - - @Override - public void onStartTrackingTouch(SeekBar seekBar) { - - } - - @Override - public void onStopTrackingTouch(SeekBar seekBar) { - - } - }); - } - }, 1999); - } - - private void getLocation() { - String addr = MMKV.defaultMMKV().decodeString(CommonConfig.MAP_ADDRESS_KEY); - if (TextUtils.isEmpty(addr)) { - tv_location.setText("未知"); - } else { - tv_location.setText(addr); - } - cl_location.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - RemoteManager.getInstance().getLocation(); - } - }); - } - - private void getBrightness() { - seekbar_brightness.setMax(255); - setBrightness(); - seekbar_brightness.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { - @Override - public void onProgressChanged(SeekBar seekBar, int i, boolean b) { - Log.e(TAG, "onProgressChanged: i = " + i); - Settings.System.putInt(mCRv, Settings.System.SCREEN_BRIGHTNESS, i); - int gamma = BrightnessUtils.convertLinearToGamma(i, 0, 255); - Log.e(TAG, "onProgressChanged: gamma = " + gamma); - int linear = BrightnessUtils.convertGammaToLinear(gamma, 0, 255); - Log.e(TAG, "onProgressChanged: linear = " + linear); - long percentage = Math.round((((double) gamma / 65535) * 100f)); - Log.e(TAG, "onProgressChanged: percentage = " + percentage); -// tv_brightness.setText(percentage + "%"); - } - - @Override - public void onStartTrackingTouch(SeekBar seekBar) { - - } - - @Override - public void onStopTrackingTouch(SeekBar seekBar) { - - } - }); - } - - private void setBrightness() { - //亮度 - int brightness = Settings.System.getInt(mCRv, Settings.System.SCREEN_BRIGHTNESS, 0); - seekbar_brightness.setProgress(brightness); - Log.e(TAG, "getBrightness: brightness = " + brightness); - int gamma = BrightnessUtils.convertLinearToGamma(brightness, 0, 255); - Log.e(TAG, "getBrightness: gamma = " + gamma); - long percentage = Math.round((((double) gamma / 65535) * 100f)); -// tv_brightness.setText(percentage + "%"); - Log.e(TAG, "getBrightness: percentage = " + percentage); - } - - private AudioManager mAudioManager; - - private void getSound() { - mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE); - //最大音量 - int maxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); - seekbar_sound.setMax(maxVolume); - Log.e(TAG, "getSound: maxVolume = " + maxVolume); - //音量 - int streamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); - seekbar_sound.setProgress(streamVolume); - Log.e(TAG, "getSound: streamVolume = " + streamVolume); - int currentVolume = (int) (((double) streamVolume / (double) maxVolume) * 100f); - Log.e(TAG, "getSound: currentVolume = " + currentVolume); - tv_sound.setText(currentVolume + "%"); - seekbar_sound.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 + "%"); - mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, i, 0); - } - - @Override - public void onStartTrackingTouch(SeekBar seekBar) { - - } - - @Override - public void onStopTrackingTouch(SeekBar seekBar) { - - } - }); - } - - @Override - public void onDestroy() { - super.onDestroy(); - if (mWifiReceiver != null) mContext.unregisterReceiver(mWifiReceiver); - if (mTimeUpdateReceiver != null) mContext.unregisterReceiver(mTimeUpdateReceiver); - } -} diff --git a/app/src/main/java/com/uiui/aios/fragment/SecondFragment.java b/app/src/main/java/com/uiui/aios/fragment/SecondFragment.java deleted file mode 100644 index 82e2977..0000000 --- a/app/src/main/java/com/uiui/aios/fragment/SecondFragment.java +++ /dev/null @@ -1,415 +0,0 @@ -package com.uiui.aios.fragment; - -import android.content.ComponentName; -import android.content.ContentResolver; -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; - -import androidx.constraintlayout.widget.ConstraintLayout; -import androidx.fragment.app.Fragment; - -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.ProgressBar; -import android.widget.TextView; - -import com.blankj.utilcode.util.NetworkUtils; -import com.bumptech.glide.Glide; -import com.shehuan.niv.NiceImageView; -import com.trello.rxlifecycle4.RxLifecycle; -import com.trello.rxlifecycle4.android.FragmentEvent; -import com.uiui.aios.R; -import com.uiui.aios.base.BaseFragment; -import com.uiui.aios.bean.ActivityBean; -import com.uiui.aios.bean.ArticleInfo; -import com.uiui.aios.bean.BaseResponse; -import com.uiui.aios.bean.DemandBean; -import com.uiui.aios.bean.GoodsInfo; -import com.uiui.aios.network.NetInterfaceManager; - -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.List; - -import butterknife.BindView; -import butterknife.ButterKnife; -import io.reactivex.rxjava3.annotations.NonNull; -import io.reactivex.rxjava3.core.Observer; -import io.reactivex.rxjava3.disposables.Disposable; - -/** - * A simple {@link Fragment} subclass. - * Use the {@link SecondFragment#newInstance} factory method to - * create an instance of this fragment. - */ -public class SecondFragment extends BaseFragment implements NetworkUtils.OnNetworkStatusChangedListener { - private static final String TAG = SecondFragment.class.getSimpleName(); - - @BindView(R.id.iv_img) - ImageView iv_img; - @BindView(R.id.tv_goods_name) - TextView tv_goods_name; - @BindView(R.id.tv_goods_desc) - TextView tv_goods_desc; - @BindView(R.id.tv_buying_price) - TextView tv_buying_price; - @BindView(R.id.progressBar) - ProgressBar progressBar; - @BindView(R.id.tv_snapup) - TextView tv_snapup; - - @BindView(R.id.iv_aimg) - ImageView iv_aimg; - @BindView(R.id.tv_title) - TextView tv_title; - @BindView(R.id.tv_content) - TextView tv_content; - - @BindView(R.id.iv_avatar_a) - ImageView iv_avatar_a; - @BindView(R.id.tv_title_a) - TextView tv_title_a; - @BindView(R.id.tc_joined_num_a) - TextView tc_joined_num_a; - @BindView(R.id.tv_time_a) - TextView tv_time_a; - @BindView(R.id.tv_address_a) - TextView tv_address_a; - - @BindView(R.id.iv_avatar_d) - ImageView iv_avatar_d; - @BindView(R.id.tv_title_d) - TextView tv_title_d; - @BindView(R.id.tc_joined_num_d) - TextView tc_joined_num_d; - @BindView(R.id.tv_time_d) - TextView tv_time_d; - @BindView(R.id.tv_address_d) - TextView tv_address_d; - - @BindView(R.id.iv1) - ImageView iv1; - @BindView(R.id.iv2) - ImageView iv2; - @BindView(R.id.iv3) - ImageView iv3; - @BindView(R.id.iv4) - ImageView iv4; - - @BindView(R.id.cl_activity) - ConstraintLayout cl_activity; - - @BindView(R.id.cl_demand) - ConstraintLayout cl_demand; - @BindView(R.id.cl1) - ConstraintLayout cl1; - @BindView(R.id.cl2) - ConstraintLayout cl2; - @BindView(R.id.cl3) - ConstraintLayout cl3; - @BindView(R.id.cl4) - ConstraintLayout cl4; - - @BindView(R.id.nv_pic) - NiceImageView nv_pic; - @BindView(R.id.tv_like) - TextView tv_like; - @BindView(R.id.tv_comment) - TextView tv_comment; - - private View rootView; - private Context mContext; - private ContentResolver mCRv; - - // TODO: Rename parameter arguments, choose names that match - // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER - private static final String ARG_PARAM1 = "param1"; - private static final String ARG_PARAM2 = "param2"; - - // TODO: Rename and change types of parameters - private String mParam1; - private String mParam2; - - @Override - public void onDisconnected() { - - } - - @Override - public void onConnected(NetworkUtils.NetworkType networkType) { - initData(); - } - - public SecondFragment() { - // Required empty public constructor - } - - /** - * Use this factory method to create a new instance of - * this fragment using the provided parameters. - * - * @param param1 Parameter 1. - * @param param2 Parameter 2. - * @return A new instance of fragment SecondFragment. - */ - // TODO: Rename and change types and number of parameters - public static SecondFragment newInstance(String param1, String param2) { - SecondFragment fragment = new SecondFragment(); - Bundle args = new Bundle(); - args.putString(ARG_PARAM1, param1); - args.putString(ARG_PARAM2, param2); - fragment.setArguments(args); - return fragment; - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - if (getArguments() != null) { - mParam1 = getArguments().getString(ARG_PARAM1); - mParam2 = getArguments().getString(ARG_PARAM2); - } - NetworkUtils.registerNetworkStatusChangedListener(this); - } - - @Override - public void fetchData() { - - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment - rootView = inflater.inflate(R.layout.fragment_second, container, false); - mContext = rootView.getContext(); - mCRv = mContext.getContentResolver(); - ButterKnife.bind(this, rootView); - initView(); - initData(); - return rootView; - } - - private void initData() { - getGoods(); - getArticle(); - getActivityList(); - getDemandList(); - } - - @Override - public void onDestroy() { - super.onDestroy(); - NetworkUtils.unregisterNetworkStatusChangedListener(this); - } - - private void getDemandList() { - NetInterfaceManager.getInstance().getDemandList(true, lifecycleSubject, new NetInterfaceManager.DemandListCallback() { - @Override - public void setDemandList(List demandBeans) { - cl4.setVisibility(View.VISIBLE); - iv4.setVisibility(View.GONE); - DemandBean demandBean = demandBeans.get(0); - setDemand(demandBean); - } - - @Override - public void noData() { - cl4.setVisibility(View.GONE); - iv4.setVisibility(View.VISIBLE); - } - - @Override - public void onError() { - - } - - @Override - public void onComplete() { - - } - }); - } - - private void setDemand(DemandBean demandBean) { - Glide.with(iv_avatar_d).load(demandBean.getAvatar()).error(getResources().getDrawable(R.drawable.default_head)).into(iv_avatar_d); - tv_title_d.setText(demandBean.getTitle()); -// tv_price.setText(String.valueOf(demandBean.getPrice())); - tc_joined_num_d.setText(demandBean.getLike_count() + "人参加"); - tv_time_d.setText(getTime(demandBean.getDemand_time())); - tv_address_d.setText(demandBean.getAddress()); - } - - private void getActivityList() { - NetInterfaceManager.getInstance().getActivityList(true, lifecycleSubject, new NetInterfaceManager.ActivitiesListCallback() { - @Override - public void setActivitiesList(List activityBeans) { - cl3.setVisibility(View.VISIBLE); - iv3.setVisibility(View.GONE); - ActivityBean activityBean = activityBeans.get(0); - setActivity(activityBean); - } - - @Override - public void noData() { - cl3.setVisibility(View.GONE); - iv3.setVisibility(View.VISIBLE); - } - - @Override - public void onError() { - - } - - @Override - public void onComplete() { - - } - }); - } - - private void setActivity(ActivityBean activity) { - Glide.with(iv_avatar_a).load(activity.getAvatar()).error(getResources().getDrawable(R.drawable.default_head)).into(iv_avatar_a); - tv_title_a.setText(activity.getName()); - tc_joined_num_a.setText(activity.getJoin_num() + "人参加"); - tv_time_a.setText(getTime(activity.getAdd_time())); - tv_address_a.setText(activity.getLocation()); - Glide.with(nv_pic).load(activity.getFile()).centerCrop().into(nv_pic); - tv_like.setText(activity.getLike_count() + ""); - tv_comment.setText(activity.getComment_count() + ""); - } - - private String getTime(long second) { - long ms = second * 1000L; - SimpleDateFormat sdf = new SimpleDateFormat("MM月dd日"); - Date date = new Date(ms); - String time = sdf.format(date); - Log.e(TAG, "getTime: " + time); - return time; - } - - private void initView() { - cl_activity.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - openApp(0); - } - }); - cl_demand.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - openApp(1); - } - }); - } - - private void openApp(int position) { - try { - Intent intent = new Intent(Intent.ACTION_MAIN); - /*知道要跳转应用的包命与目标Activity*/ - ComponentName componentName = new ComponentName("com.uiui.city", "com.uiui.city.activity.MainActivity"); - intent.putExtra("position", position); - intent.setComponent(componentName); - intent.putExtra("", "");//这里Intent传值 - startActivity(intent); - } catch (Exception e) { - Log.e(TAG, "openApp: " + e.getMessage()); - } - } - - private void getGoods() { - NetInterfaceManager.getInstance() - .getGoodsListObservable() - .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, FragmentEvent.DESTROY)) - .subscribe(new Observer>>() { - @Override - public void onSubscribe(@NonNull Disposable d) { - Log.e("getGoods", "onSubscribe: "); - } - - @Override - public void onNext(@NonNull BaseResponse> listBaseResponse) { - Log.e("getGoods", "onNext: " + listBaseResponse); - if (listBaseResponse.code == 200) { - cl1.setVisibility(View.VISIBLE); - iv1.setVisibility(View.GONE); - List goodsInfoList = listBaseResponse.data; - if (goodsInfoList != null && goodsInfoList.size() != 0) { - GoodsInfo goodsInfo = goodsInfoList.get(0); - setGoodsInfo(goodsInfo); - } - } else { - cl1.setVisibility(View.GONE); - iv1.setVisibility(View.VISIBLE); - } - } - - @Override - public void onError(@NonNull Throwable e) { - Log.e("getGoods", "onError: " + e.getMessage()); - } - - @Override - public void onComplete() { - Log.e("getGoods", "onComplete: "); - } - }); - } - - private void setGoodsInfo(GoodsInfo goodsInfo) { - Glide.with(iv_img).load(goodsInfo.getImg()).into(iv_img); - tv_goods_name.setText(goodsInfo.getGoods_name()); - tv_goods_desc.setText(goodsInfo.getGoods_desc()); - tv_buying_price.setText(String.valueOf(goodsInfo.getBuying_price())); - } - - private void getArticle() { - NetInterfaceManager.getInstance().getArticleListObservable() - .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, FragmentEvent.DESTROY)) - .subscribe(new Observer>>() { - @Override - public void onSubscribe(@NonNull Disposable d) { - Log.e("getArticle", "onSubscribe: "); - } - - @Override - public void onNext(@NonNull BaseResponse> listBaseResponse) { - Log.e("getArticle", "onNext: " + listBaseResponse); - if (listBaseResponse.code == 200) { - cl2.setVisibility(View.VISIBLE); - iv2.setVisibility(View.GONE); - List articleInfos = listBaseResponse.data; - if (articleInfos != null && articleInfos.size() != 0) { - ArticleInfo articleInfo = articleInfos.get(0); - setArticleInfo(articleInfo); - } - } else { - cl2.setVisibility(View.GONE); - iv2.setVisibility(View.VISIBLE); - } - } - - @Override - public void onError(@NonNull Throwable e) { - Log.e("getArticle", "onError: " + e.getMessage()); - } - - @Override - public void onComplete() { - Log.e("getArticle", "onComplete: "); - } - }); - } - - private void setArticleInfo(ArticleInfo articleInfo) { - Glide.with(iv_aimg).load(articleInfo.getImg()).into(iv_aimg); - tv_title.setText(articleInfo.getTitle()); - tv_content.setText(articleInfo.getContent()); - } - - -} diff --git a/app/src/main/java/com/uiui/aios/network/NetInterfaceManager.java b/app/src/main/java/com/uiui/aios/network/NetInterfaceManager.java deleted file mode 100644 index 686c21b..0000000 --- a/app/src/main/java/com/uiui/aios/network/NetInterfaceManager.java +++ /dev/null @@ -1,1168 +0,0 @@ -package com.uiui.aios.network; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.util.Log; - -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.tencent.mmkv.MMKV; -import com.trello.rxlifecycle4.RxLifecycle; -import com.trello.rxlifecycle4.android.ActivityEvent; -import com.trello.rxlifecycle4.android.FragmentEvent; -import com.uiui.aios.alarm.AlarmUtils; -import com.uiui.aios.bean.ActivityBean; -import com.uiui.aios.bean.AlarmClockData; -import com.uiui.aios.bean.ArticleInfo; -import com.uiui.aios.bean.BaseResponse; -import com.uiui.aios.bean.Contact; -import com.uiui.aios.bean.DemandBean; -import com.uiui.aios.bean.GoodsInfo; -import com.uiui.aios.bean.HealthCode; -import com.uiui.aios.bean.NetDesktopIcon; -import com.uiui.aios.bean.SnInfo; -import com.uiui.aios.bean.SystemSettings; -import com.uiui.aios.bean.UserAvatarInfo; -import com.uiui.aios.bean.UserId; -import com.uiui.aios.disklrucache.CacheHelper; -import com.uiui.aios.manager.ConnectManager; -import com.uiui.aios.manager.ConnectMode; -import com.uiui.aios.network.api.ActivityListApi; -import com.uiui.aios.network.api.AlarmClockApi; -import com.uiui.aios.network.api.AppUsageRecordApi; -import com.uiui.aios.network.api.ArticleListApi; -import com.uiui.aios.network.api.DemandListApi; -import com.uiui.aios.network.api.GetAdminSnSettingApi; -import com.uiui.aios.network.api.GetDesktopApi; -import com.uiui.aios.network.api.GetMailList; -import com.uiui.aios.network.api.GetUserIDApi; -import com.uiui.aios.network.api.GoodsListApi; -import com.uiui.aios.network.api.HealthCodeApi; -import com.uiui.aios.network.api.RunNewApp; -import com.uiui.aios.network.api.SNInfoApi; -import com.uiui.aios.network.api.SOSRecordApi; -import com.uiui.aios.network.api.SendScreenshotApi; -import com.uiui.aios.network.api.Setting; -import com.uiui.aios.network.api.SnIsActivationApi; -import com.uiui.aios.network.api.UpdateAlarmClockApi; -import com.uiui.aios.network.api.UpdateAppIconApi; -import com.uiui.aios.network.api.UpdateDesktopApi; -import com.uiui.aios.network.api.UserInfoControl; -import com.uiui.aios.network.interceptor.RepeatRequestInterceptor; -import com.uiui.aios.utils.GsonUtils; -import com.uiui.aios.utils.Utils; - -import java.io.File; -import java.lang.reflect.Type; -import java.util.List; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; - -import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; -import io.reactivex.rxjava3.annotations.NonNull; -import io.reactivex.rxjava3.core.Observable; -import io.reactivex.rxjava3.core.Observer; -import io.reactivex.rxjava3.disposables.Disposable; -import io.reactivex.rxjava3.schedulers.Schedulers; -import io.reactivex.rxjava3.subjects.BehaviorSubject; -import okhttp3.Cache; -import okhttp3.Headers; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import retrofit2.Retrofit; -import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory; -import retrofit2.converter.gson.GsonConverterFactory; - -public class NetInterfaceManager { - @SuppressLint("StaticFieldLeak") - private static NetInterfaceManager INSTANCE; - private Context mContext; - private CacheHelper mCacheHelper; - - private Retrofit mRetrofit; - private OkHttpClient okHttpClient; - private MMKV mMMKV = MMKV.defaultMMKV(); - - private final ConcurrentHashMap requestIdsMap = new ConcurrentHashMap<>(); - //超时时间 - private static int timeOut = 30; - // 缓存文件最大限制大小20M - private static long cacheSize = 1024 * 1024 * 64; - - public static final String HTTP_KEY = "YTM3YTAxNTJmMmZmNzkyM2E2YzIwZjlhZTc0NzNmMGI="; - public static final String CUSTOM_REPEAT_REQ_PROTOCOL = "MY_CUSTOM_REPEAT_REQ_PROTOCOL"; - - private NetInterfaceManager(Context context) { - this.mContext = context; - this.mCacheHelper = new CacheHelper(context); - if (okHttpClient == null) { - - //如果无法生存缓存文件目录,检测权限使用已经加上,检测手机是否把文件读写权限禁止了 - OkHttpClient.Builder builder = new OkHttpClient.Builder(); - builder.connectTimeout(timeOut, TimeUnit.SECONDS); // 设置连接超时时间 - builder.writeTimeout(timeOut, TimeUnit.SECONDS);// 设置写入超时时间 - builder.readTimeout(timeOut, TimeUnit.SECONDS);// 设置读取数据超时时间 - builder.retryOnConnectionFailure(true);// 设置进行连接失败重试 - builder.addInterceptor(new RepeatRequestInterceptor()); - - // 设置缓存文件路径 - String cacheDirectory = mContext.getExternalCacheDir().getAbsolutePath() + "/OkHttpCache"; - Cache cache = new Cache(new File(cacheDirectory), cacheSize); - builder.cache(cache);// 设置缓存 - okHttpClient = builder.build(); - } - - if (mRetrofit == null) { - mRetrofit = new Retrofit.Builder() - .client(okHttpClient) - .baseUrl(URLAddress.ROOT_URL) - .addConverterFactory(GsonConverterFactory.create()) - .addCallAdapterFactory(RxJava3CallAdapterFactory.create()) - .build(); - } - } - - /** - * 打印全局统一拦截添加的Http Headers - *

- * 全局拦截的http 没法在配置中直接打印处理,因为先http 请求然后打印然后拦截添加的 - * - * @param request - */ - private static void logRequestHeaders(Request request) { - Log.e("OKhttp ", " 开始打印HTTP请求 Headers \n"); - Headers headers = request.headers(); - for (int i = 0, count = headers.size(); i < count; i++) { - String name = headers.name(i); - // Skip headers from the request body as they are explicitly logged above. - if (!"Content-Type".equalsIgnoreCase(name) && !"Content-Length".equalsIgnoreCase(name)) { - Log.e("OKhttp: " + i + " ", name + ": " + headers.value(i)); - } - } - Log.e("OKhttp ", " 打印HTTP请求完成 Headers \n"); - } - - public static void init(Context context) { - if (INSTANCE == null) { - INSTANCE = new NetInterfaceManager(context); - } - } - - public static NetInterfaceManager getInstance() { - if (INSTANCE == null) { - throw new IllegalStateException("You must be init NetworkManager first"); - } - return INSTANCE; - } - - public OkHttpClient getOkHttpClient() { - return okHttpClient; - } - - /** - * 通过sn获取设备的信息 - * - * @return - */ - public Observable> getsnInfoControl() { - return mRetrofit.create(SNInfoApi.class) - .getsninfo(Utils.getSerial()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()); - } - - public Observable> getUserAvatarInfoControl() { - return mRetrofit.create(UserInfoControl.class) - .getUserAvatarInfo(Utils.getSerial()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()); - } - - public Observable>> getAlarmClockObservable() { - return mRetrofit - .create(AlarmClockApi.class) - .getAlarmClock(Utils.getSerial()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()); - } - - public Observable getRunningAppObservable(String json) { - return mRetrofit.create(RunNewApp.class) - .sendRunningInfo(Utils.getSerial(), json) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()); - } - - public Observable> getsettingControl() { - return mRetrofit.create(Setting.class) - .getSetting(Utils.getSerial()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()); - } - - public Observable getSOSRecordObservable(String longitude, String latitude, String address) { - return mRetrofit.create(SOSRecordApi.class) - .sendSOSRecord(Utils.getSerial(), longitude, latitude, address) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()); - } - - public Observable getUpdateAlarmObservable(int id) { - return mRetrofit.create(UpdateAlarmClockApi.class) - .updateAlarm(Utils.getSerial(), id) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()); - } - - public Observable getUpdateDesktopObservable(String jsonArray) { - return mRetrofit.create(UpdateDesktopApi.class) - .updateLayout(Utils.getSerial(), jsonArray) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()); - } - - public Observable>> getDesktopLayoutObservable() { - return mRetrofit.create(GetDesktopApi.class) - .getDesktopLayout(Utils.getSerial()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()); - } - - public Observable>> getGoodsListObservable() { - return mRetrofit.create(GoodsListApi.class) - .getGoodsList(Utils.getSerial()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()); - } - - public Observable>> getArticleListObservable() { - return mRetrofit.create(ArticleListApi.class) - .getArticleList(Utils.getSerial()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()); - } - - public Observable>> getContactListObservable() { - return mRetrofit.create(GetMailList.class) - .getContact(Utils.getSerial()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()); - } - - public Observable getAdminSnSettingObservable() { - return mRetrofit.create(GetAdminSnSettingApi.class) - .getAdminSnSetting(Utils.getSerial()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()); - } - - public Observable getSnIsActivationObservable() { - return mRetrofit.create(SnIsActivationApi.class) - .getSnIsActivation(Utils.getSerial()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()); - } - - public Observable getUpdateAppIconObservable(String pkg, String label, int type) { - return mRetrofit.create(UpdateAppIconApi.class) - .appIconUpdate(Utils.getSerial(), pkg, type, label) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()); - } - - - public interface onCompleteCallback { - void onComplete(); - } - - public Observable> getUserIDObservable() { - return mRetrofit.create(GetUserIDApi.class) - .getUserID(Utils.getSerial()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()); - } - - public void getUserID(BehaviorSubject lifecycle, onCompleteCallback callback) { - getUserIDObservable() - .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY)) - .subscribe(getUserIDObserver(callback)); - } - - public void getUserID(onCompleteCallback callback) { - getUserIDObservable() - .subscribe(getUserIDObserver(callback)); - } - - public void getUserID() { - getUserIDObservable() - .subscribe(getUserIDObserver(null)); - } - - public int getUserId() { - int userId = mMMKV.decodeInt("USER_ID", -1); - if (userId == -1) { - getUserID(); - } - return userId; - } - - public Observer getUserIDObserver(onCompleteCallback callback) { - return new Observer>() { - @Override - public void onSubscribe(@NonNull Disposable d) { - Log.e("getUserID", "onSubscribe: "); - } - - @Override - public void onNext(@NonNull BaseResponse userIdBaseResponse) { - Log.e("getUserID", "onNext: " + userIdBaseResponse); - if (userIdBaseResponse.code == 200) { - UserId userId = userIdBaseResponse.data; - mCacheHelper.put(URLAddress.GET_USER_ID, GsonUtils.toJsonString(userId)); - mMMKV.encode("USER_ID", userId.getUser_id()); - } else { - mCacheHelper.put(URLAddress.GET_USER_ID, -1); - } - } - - @Override - public void onError(@NonNull Throwable e) { - Log.e("getUserID", "onError: " + e.getMessage()); - onComplete(); - } - - @Override - public void onComplete() { - Log.e("getUserID", "onComplete: "); - if (callback != null) { - callback.onComplete(); - } - } - }; - } - - - public Observable>> getActivityListObservable() { - return mRetrofit.create(ActivityListApi.class) - .getActivityList(Utils.getSerial(), 1, 1, getUserId()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()); - } - - public interface ActivitiesListCallback { - void setActivitiesList(List activityBeans); - - void noData(); - - void onError(); - - void onComplete(); - } - - public void getActivityList(boolean refresh, BehaviorSubject lifecycle, ActivitiesListCallback callback) { - ConnectMode connectMode = ConnectMode.ONE_MINUTE; - if (refresh) { - connectMode = ConnectMode.DEFAULT; - } - if (ConnectManager.getInstance().isNeedConnect(URLAddress.GET_ACTIVITY_LIST, connectMode)) { - getActivityList(lifecycle, callback); - } else { - String jsonString = mCacheHelper.getAsString(URLAddress.GET_ACTIVITY_LIST); - //为 "" 是已经请求成功的 - if (jsonString == null) { - getActivityList(lifecycle, callback); - } else { - Gson gson = new Gson(); - Type type = new TypeToken>() { - }.getType(); - List activityBeans = gson.fromJson(jsonString, type); - if (activityBeans == null || activityBeans.size() == 0) { - if (callback != null) callback.noData(); - } else { - if (callback != null) callback.setActivitiesList(activityBeans); - } - if (callback != null) callback.onComplete(); - } - } - } - - public void getActivityList(BehaviorSubject lifecycle, ActivitiesListCallback callback) { - getActivityListObservable() - .compose(RxLifecycle.bindUntilEvent(lifecycle, FragmentEvent.DESTROY)) - .subscribe(getActivityListObserver(callback)); - } - - public void getActivityList(ActivitiesListCallback callback) { - getActivityListObservable() - .subscribe(getActivityListObserver(callback)); - } - - public void getActivityList() { - getActivityListObservable() - .subscribe(getActivityListObserver(null)); - } - - public Observer>> getActivityListObserver(ActivitiesListCallback callback) { - return new Observer>>() { - @Override - public void onSubscribe(@NonNull Disposable d) { - Log.e("getActivityListObserver", "onSubscribe: "); - } - - @Override - public void onNext(@NonNull BaseResponse> listBaseResponse) { - Log.e("getActivityListObserver", "onNext: "); - if (listBaseResponse.code == 200) { - List activityBeans = listBaseResponse.data; - if (activityBeans == null || activityBeans.size() == 0) { - mCacheHelper.put(URLAddress.GET_ACTIVITY_LIST, ""); - if (callback != null) callback.noData(); - } else { - mCacheHelper.put(URLAddress.GET_ACTIVITY_LIST, GsonUtils.toJsonString(activityBeans)); - if (callback != null) callback.setActivitiesList(activityBeans); - } - } else { - mCacheHelper.put(URLAddress.GET_ACTIVITY_LIST, ""); - if (callback != null) callback.noData(); - } - } - - @Override - public void onError(@NonNull Throwable e) { - Log.e("getActivityListObserver", "onError: " + e.getMessage()); - String jsonString = mCacheHelper.getAsString(URLAddress.GET_ACTIVITY_LIST); - Gson gson = new Gson(); - Type type = new TypeToken>() { - }.getType(); - List activityBeans = gson.fromJson(jsonString, type); - if (activityBeans == null || activityBeans.size() == 0) { - if (callback != null) callback.noData(); - } else { - if (callback != null) callback.setActivitiesList(activityBeans); - } - if (callback != null) callback.onError(); - onComplete(); - } - - @Override - public void onComplete() { - Log.e("getActivityListObserver", "onComplete: "); - } - }; - } - - - public Observable>> getDemandListObservable() { - return mRetrofit.create(DemandListApi.class) - .getDemandList(Utils.getSerial(), 1, 1, getUserId()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()); - } - - public interface DemandListCallback { - void setDemandList(List demandBeans); - - void noData(); - - void onError(); - - void onComplete(); - } - - public void getDemandList(boolean refresh, BehaviorSubject lifecycle, DemandListCallback callback) { - ConnectMode connectMode = ConnectMode.ONE_MINUTE; - if (refresh) { - connectMode = ConnectMode.DEFAULT; - } - if (ConnectManager.getInstance().isNeedConnect(URLAddress.GET_DEMAND_LIST, connectMode)) { - getDemandList(lifecycle, callback); - } else { - String jsonString = mCacheHelper.getAsString(URLAddress.GET_DEMAND_LIST); - //为 "" 是已经请求成功的 - if (jsonString == null) { - getDemandList(lifecycle, callback); - } else { - Gson gson = new Gson(); - Type type = new TypeToken>() { - }.getType(); - List demandBeans = gson.fromJson(jsonString, type); - if (demandBeans == null || demandBeans.size() == 0) { - if (callback != null) callback.noData(); - } else { - if (callback != null) callback.setDemandList(demandBeans); - } - if (callback != null) callback.onComplete(); - } - } - } - - public void getDemandList(BehaviorSubject lifecycle, DemandListCallback callback) { - getDemandListObservable() - .compose(RxLifecycle.bindUntilEvent(lifecycle, FragmentEvent.DESTROY)) - .subscribe(getDemandListObserver(callback)); - } - - public void getDemandList(DemandListCallback callback) { - getDemandListObservable() - .subscribe(getDemandListObserver(callback)); - } - - public void getDemandList() { - getDemandListObservable() - .subscribe(getDemandListObserver(null)); - } - - public Observer>> getDemandListObserver(DemandListCallback callback) { - return new Observer>>() { - - @Override - public void onSubscribe(@NonNull Disposable d) { - Log.e("getDemandListObserver", "onSubscribe: "); - } - - @Override - public void onNext(@NonNull BaseResponse> listBaseResponse) { - Log.e("getDemandListObserver", "onNext: "); - if (listBaseResponse.code == 200) { - List demandBeans = listBaseResponse.data; - if (demandBeans == null || demandBeans.size() == 0) { - mCacheHelper.put(URLAddress.GET_DEMAND_LIST, ""); - if (callback != null) callback.noData(); - } else { - mCacheHelper.put(URLAddress.GET_DEMAND_LIST, GsonUtils.toJsonString(demandBeans)); - if (callback != null) callback.setDemandList(demandBeans); - } - } else { - mCacheHelper.put(URLAddress.GET_DEMAND_LIST, ""); - if (callback != null) callback.noData(); - } - } - - @Override - public void onError(@NonNull Throwable e) { - Log.e("getDemandListObserver", "onError: " + e.getMessage()); - String jsonString = mCacheHelper.getAsString(URLAddress.GET_DEMAND_LIST); - Gson gson = new Gson(); - Type type = new TypeToken>() { - }.getType(); - List demandBeans = gson.fromJson(jsonString, type); - if (demandBeans == null || demandBeans.size() == 0) { - if (callback != null) callback.noData(); - } else { - if (callback != null) callback.setDemandList(demandBeans); - } - if (callback != null) callback.onError(); - onComplete(); - } - - @Override - public void onComplete() { - Log.e("getDemandListObserver", "onComplete: "); - if (callback != null) callback.onComplete(); - } - }; - } - - - public AppUsageRecordApi getAppUsageRecordControl() { - return mRetrofit.create(AppUsageRecordApi.class); - } - - public SendScreenshotApi getScreenshotApi() { - return mRetrofit.create(SendScreenshotApi.class); - } - - public Observable>> getHealthCodeObservable() { - return mRetrofit.create(HealthCodeApi.class) - .getArticleDetails(Utils.getSerial()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()); - } - - public interface HealthCodeCallback { - void setHealthCode(List healthCode); - - void noData(); - - void onError(); - } - - public void getHealthCode(boolean refresh, BehaviorSubject lifecycle, HealthCodeCallback callback) { - ConnectMode connectMode = ConnectMode.ONE_MINUTE; - if (refresh) { - connectMode = ConnectMode.DEFAULT; - } - if (ConnectManager.getInstance().isNeedConnect(URLAddress.GET_HEALTH_CODE, connectMode)) { - getHealthCode(lifecycle, callback); - } else { - String jsonString = mCacheHelper.getAsString(URLAddress.GET_HEALTH_CODE); - //为 "" 是已经请求成功的 - if (jsonString == null) { - getHealthCode(lifecycle, callback); - } else { - Gson gson = new Gson(); - Type type = new TypeToken>() { - }.getType(); - List healthCodeList = gson.fromJson(jsonString, type); - if (healthCodeList == null || healthCodeList.size() == 0) { - callback.noData(); - } else { - callback.setHealthCode(healthCodeList); - } - } - } - } - - private void getHealthCodeCache(HealthCodeCallback callback) { - - } - - - public void getHealthCode(BehaviorSubject lifecycle, HealthCodeCallback callback) { - getHealthCodeObservable() - .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY)) - .subscribe(getHealthCodeObserver(callback)); - } - - public void getHealthCode(HealthCodeCallback callback) { - getHealthCodeObservable() - .subscribe(getHealthCodeObserver(callback)); - } - - public void getHealthCode() { - getHealthCodeObservable() - .subscribe(getHealthCodeObserver(null)); - } - - - public Observer>> getHealthCodeObserver(HealthCodeCallback callback) { - return new Observer>>() { - @Override - public void onSubscribe(@NonNull Disposable d) { - Log.e("getHealthCode", "onSubscribe: "); - } - - @Override - public void onNext(@NonNull BaseResponse> listBaseResponse) { - Log.e("getHealthCode", "onNext: " + listBaseResponse); - if (listBaseResponse.code == 200) { - List healthCodeList = listBaseResponse.data; - mCacheHelper.put(URLAddress.GET_HEALTH_CODE, GsonUtils.toJsonString(healthCodeList)); - callback.setHealthCode(healthCodeList); - } else { - mCacheHelper.put(URLAddress.GET_HEALTH_CODE, ""); - callback.noData(); - } - } - - @Override - public void onError(@NonNull Throwable e) { - Log.e("getHealthCode", "onError: "); - String jsonString = mCacheHelper.getAsString(URLAddress.GET_HEALTH_CODE); - Gson gson = new Gson(); - Type type = new TypeToken>() { - }.getType(); - List healthCodeList = gson.fromJson(jsonString, type); - if (healthCodeList == null || healthCodeList.size() == 0) { - callback.noData(); - } else { - callback.setHealthCode(healthCodeList); - } - callback.onError(); - onComplete(); - } - - @Override - public void onComplete() { - Log.e("getHealthCode", "onComplete: "); - } - }; - } - - - public interface AlarmClockCallback { - void setAlarmClock(List alarmClockList); - - void setAlarmClockEmpty(); - - void onError(); - } - - public void getAlarmClock(boolean refresh, BehaviorSubject lifecycle, AlarmClockCallback callback) { -// ConnectMode connectMode = ConnectMode.DEFAULT; -// if (refresh) { -// connectMode = ConnectMode.DEFAULT; -// } -// if (ConnectManager.getInstance().isNeedConnect(URLAddress.GET_ALARM_CLOCK, connectMode)) { - getAlarmClock(lifecycle, callback); -// } else { -// getAlarmClockCache(lifecycle, callback); -// } - } - - public void getAlarmClockCache(BehaviorSubject lifecycle, AlarmClockCallback callback) { - String jsonString = mCacheHelper.getAsString(URLAddress.GET_ALARM_CLOCK); - //为 "" 是已经请求成功的 - if (jsonString == null) { - getAlarmClock(lifecycle, callback); - } else { - Gson gson = new Gson(); - Type type = new TypeToken>() { - }.getType(); - List list = gson.fromJson(jsonString, type); - if (list == null || list.size() == 0) { - callback.setAlarmClockEmpty(); - } else { - callback.setAlarmClock(list); - } - } - } - - public void getAlarmClock(BehaviorSubject lifecycle, AlarmClockCallback callback) { - getAlarmClockObservable() - .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY)) - .subscribe(getAlarmClockObserver(callback)); - } - - public void getAlarmClockFragment(BehaviorSubject lifecycle, AlarmClockCallback callback) { - getAlarmClockObservable() - .compose(RxLifecycle.bindUntilEvent(lifecycle, FragmentEvent.DESTROY)) - .subscribe(getAlarmClockObserver(callback)); - } - - public void getAlarmClock(AlarmClockCallback callback) { - getAlarmClockObservable() - .subscribe(getAlarmClockObserver(callback)); - } - - public void getAlarmClock() { - getAlarmClockObservable() - .subscribe(getAlarmClockObserver(null)); - } - - public Observer>> getAlarmClockObserver(AlarmClockCallback callback) { - return new Observer>>() { - @Override - public void onSubscribe(@NonNull Disposable d) { - Log.e("getAlarmClockObserver", "onSubscribe: "); - } - - @Override - public void onNext(@NonNull BaseResponse> listBaseResponse) { - Log.e("getAlarmClockObserver", "onNext: "); - if (listBaseResponse.code == 200) { - List alarmClockData = listBaseResponse.data; - if (alarmClockData != null && alarmClockData.size() != 0) { - AlarmUtils.getInstance().setAlarmClockData(alarmClockData); - if (callback != null) callback.setAlarmClock(alarmClockData); - } else { - AlarmUtils.getInstance().deleteAllAlarmClock(); - AlarmUtils.getInstance().setAlarmClockData(null); - if (callback != null) callback.setAlarmClockEmpty(); - } - mCacheHelper.put(URLAddress.GET_ALARM_CLOCK, GsonUtils.toJsonString(alarmClockData)); - } else { - AlarmUtils.getInstance().deleteAllAlarmClock(); - AlarmUtils.getInstance().setAlarmClockData(null); - mCacheHelper.put(URLAddress.GET_ALARM_CLOCK, ""); - if (callback != null) callback.setAlarmClockEmpty(); - } - } - - @Override - public void onError(@NonNull Throwable e) { - Log.e("getAlarmClockObserver", "onError: " + e.getMessage()); - String jsonString = mCacheHelper.getAsString(URLAddress.GET_ALARM_CLOCK); - Gson gson = new Gson(); - Type type = new TypeToken>() { - }.getType(); - List list = gson.fromJson(jsonString, type); - if (list == null || list.size() == 0) { - if (callback != null) callback.setAlarmClockEmpty(); - } else { - if (callback != null) callback.setAlarmClock(list); - } - if (callback != null) callback.onError(); - onComplete(); - } - - @Override - public void onComplete() { - Log.e("getAlarmClockObserver", "onComplete: "); - } - }; - } - - public interface SnInfoCallback { - void setSnInfo(SnInfo snInfo); - } - - public void getSnInfo(BehaviorSubject lifecycle, SnInfoCallback callback) { - getsnInfoControl() - .compose(RxLifecycle.bindUntilEvent(lifecycle, FragmentEvent.DESTROY)) - .subscribe(new Observer>() { - @Override - public void onSubscribe(@NonNull Disposable d) { - Log.e("getSnInfo", "onSubscribe: "); - } - - @Override - public void onNext(@NonNull BaseResponse snInfoBaseResponse) { - Log.e("getSnInfo", "onNext: "); - callback.setSnInfo(snInfoBaseResponse.data); - } - - @Override - public void onError(@NonNull Throwable e) { - Log.e("getSnInfo", "onError: "); - callback.setSnInfo(null); - onComplete(); - } - - @Override - public void onComplete() { - Log.e("getSnInfo", "onComplete: "); - } - }); - } - - public interface ContactCallback { - void setContact(List contactList); - - void setEmergencyContact(List emergencyContact); - - void setEmpty(); - - void onComplete(); - } - - public void getSystemSettings(boolean refresh, BehaviorSubject lifecycle, ContactCallback callback) { - ConnectMode connectMode = ConnectMode.ONE_MINUTE; - if (refresh) { - connectMode = ConnectMode.DEFAULT; - } - if (ConnectManager.getInstance().isNeedConnect(URLAddress.GET_SETTINGS, connectMode)) { - getSystemSettings(lifecycle, callback); - } else { - String jsonString = mCacheHelper.getAsString(URLAddress.GET_SETTINGS); - //为 "" 是已经请求成功的 - if (jsonString == null) { - getSystemSettings(lifecycle, callback); - } else { - Gson gson = new Gson(); - Type type = new TypeToken>() { - }.getType(); - List setting_sos = gson.fromJson(jsonString, type); - if (setting_sos == null || setting_sos.size() == 0) { - if (callback != null) callback.setEmpty(); - } else { - if (callback != null) callback.setContact(setting_sos); - } - if (callback != null) callback.onComplete(); - } - } - } - - public void getSystemSettings(BehaviorSubject lifecycle, ContactCallback callback) { - getsettingControl() - .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY)) - .subscribe(getSystemSettingsObserver(callback)); - } - - public void getSystemSettings(ContactCallback callback) { - getsettingControl() - .subscribe(getSystemSettingsObserver(callback)); - } - - public void getSystemSettings() { - getsettingControl() - .subscribe(getSystemSettingsObserver(null)); - } - - public Observer> getSystemSettingsObserver(ContactCallback callback) { - return new Observer>() { - @Override - public void onSubscribe(@NonNull Disposable d) { - Log.e("getSystemSettings", "onSubscribe: "); - } - - @Override - public void onNext(@NonNull BaseResponse settingsBaseResponse) { - Log.e("getSystemSettings", "onNext: " + settingsBaseResponse); - if (settingsBaseResponse.code == 200) { - SystemSettings systemSettings = settingsBaseResponse.data; - mMMKV.encode("is_health", systemSettings.getIs_health()); - mMMKV.encode("is_shopping", systemSettings.getIs_shopping()); - mMMKV.encode("is_info", systemSettings.getIs_info()); - List setting_sos = systemSettings.getSetting_sos(); - if (setting_sos == null || setting_sos.size() == 0) { - mCacheHelper.put(URLAddress.GET_SETTINGS, ""); - if (callback != null) callback.setEmpty(); - } else { - List emergencyContact = setting_sos.stream().filter(contact -> contact.getIs_urgent() == 1).collect(Collectors.toList()); - mCacheHelper.put(URLAddress.GET_SETTINGS, GsonUtils.toJsonString(setting_sos)); - if (callback != null) { - callback.setContact(setting_sos); - callback.setEmergencyContact(emergencyContact); - } - } - } else { - mCacheHelper.put(URLAddress.GET_SETTINGS, ""); - if (callback != null) callback.setEmpty(); - } - } - - @Override - public void onError(@NonNull Throwable e) { - Log.e("getSystemSettings", "onError: " + e.getMessage()); - String jsonString = mCacheHelper.getAsString(URLAddress.GET_SETTINGS); - //为 "" 是已经请求成功的 - if (jsonString == null) { - if (callback != null) callback.setEmpty(); - } else { - Gson gson = new Gson(); - Type type = new TypeToken>() { - }.getType(); - List setting_sos = gson.fromJson(jsonString, type); - if (setting_sos == null || setting_sos.size() == 0) { - if (callback != null) callback.setEmpty(); - } else { - if (callback != null) callback.setContact(setting_sos); - } - } - onComplete(); - } - - @Override - public void onComplete() { - Log.e("getSystemSettings", "onComplete: "); - if (callback != null) callback.onComplete(); - } - }; - } - - - public void getContactList(boolean refresh, BehaviorSubject lifecycle, ContactCallback callback) { - ConnectMode connectMode = ConnectMode.ONE_MINUTE; - if (refresh) { - connectMode = ConnectMode.DEFAULT; - } - if (ConnectManager.getInstance().isNeedConnect(URLAddress.GET_MAIL_LIST, connectMode)) { - getContactList(lifecycle, callback); - } else { - String jsonString = mCacheHelper.getAsString(URLAddress.GET_MAIL_LIST); - //为 "" 是已经请求成功的 - if (jsonString == null) { - getContactList(lifecycle, callback); - } else { - Gson gson = new Gson(); - Type type = new TypeToken>() { - }.getType(); - List setting_sos = gson.fromJson(jsonString, type); - if (setting_sos == null || setting_sos.size() == 0) { - if (callback != null) callback.setEmpty(); - } else { - if (callback != null) callback.setContact(setting_sos); - } - if (callback != null) callback.onComplete(); - } - } - } - - public void getContactList(BehaviorSubject lifecycle, ContactCallback callback) { - getContactListObservable() - .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY)) - .subscribe(getContactListObserver(callback)); - } - - public void getContactList(ContactCallback callback) { - getContactListObservable() - .subscribe(getContactListObserver(callback)); - } - - public void getContactList() { - getContactListObservable() - .subscribe(getContactListObserver(null)); - } - - public Observer>> getContactListObserver(ContactCallback callback) { - return new Observer>>() { - @Override - public void onSubscribe(@NonNull Disposable d) { - Log.e("getContactList", "onSubscribe: "); - } - - @Override - public void onNext(@NonNull BaseResponse> listBaseResponse) { - Log.e("getContactList", "onNext: " + listBaseResponse); - if (listBaseResponse.code == 200) { - List contactList = listBaseResponse.data; - if (contactList == null || contactList.size() == 0) { - mCacheHelper.put(URLAddress.GET_MAIL_LIST, ""); - if (callback != null) callback.setEmpty(); - } else { - mCacheHelper.put(URLAddress.GET_MAIL_LIST, GsonUtils.toJsonString(contactList)); - List emergencyContact = contactList.stream().filter(contact -> contact.getIs_urgent() == 1).collect(Collectors.toList()); - if (callback != null) { - callback.setContact(contactList); - callback.setEmergencyContact(emergencyContact); - } - } - } else { - mCacheHelper.put(URLAddress.GET_MAIL_LIST, ""); - if (callback != null) callback.setEmpty(); - } - } - - @Override - public void onError(@NonNull Throwable e) { - Log.e("getContactList", "onError: " + e.getMessage()); - onComplete(); - } - - @Override - public void onComplete() { - Log.e("getContactList", "onComplete: "); - if (callback != null) callback.onComplete(); - } - - }; - } - - public void getAdminSnSetting(boolean refresh, BehaviorSubject lifecycle, onCompleteCallback callback) { - ConnectMode connectMode = ConnectMode.ONE_MINUTE; - if (refresh) { - connectMode = ConnectMode.DEFAULT; - } - if (ConnectManager.getInstance().isNeedConnect(URLAddress.GET_ADMIN_SN_SETTING, connectMode)) { - getAdminSnSetting(lifecycle, callback); - } else { - String jsonString = mCacheHelper.getAsString(URLAddress.GET_ADMIN_SN_SETTING); - //为 "" 是已经请求成功的 - if (jsonString == null) { - getAdminSnSetting(lifecycle, callback); - } else { - Gson gson = new Gson(); - Type type = new TypeToken>() { - }.getType(); - List setting_sos = gson.fromJson(jsonString, type); - - } - } - } - - public void getAdminSnSetting(BehaviorSubject lifecycle, onCompleteCallback callback) { - getAdminSnSettingObservable() - .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY)) - .subscribe(getAdminSnSettingObserver(callback)); - } - - public void getAdminSnSetting(onCompleteCallback callback) { - getAdminSnSettingObservable() - .subscribe(getAdminSnSettingObserver(callback)); - } - - - public void getAdminSnSetting() { - getAdminSnSettingObservable() - .subscribe(getAdminSnSettingObserver(null)); - } - - public Observer getAdminSnSettingObserver(onCompleteCallback callback) { - return new Observer() { - @Override - public void onSubscribe(@NonNull Disposable d) { - Log.e("getAdminSnSettingObserver", "onSubscribe: "); - } - - @Override - public void onNext(@NonNull BaseResponse baseResponse) { - Log.e("getAdminSnSettingObserver", "onNext: " + baseResponse); - } - - @Override - public void onError(@NonNull Throwable e) { - Log.e("getAdminSnSettingObserver", "onError: "); - onComplete(); - } - - @Override - public void onComplete() { - Log.e("getAdminSnSettingObserver", "onComplete: "); - } - }; - } - - public void getUserAvatarInfo(boolean refresh, BehaviorSubject lifecycle, onCompleteCallback callback) { - ConnectMode connectMode = ConnectMode.ONE_MINUTE; - if (refresh) { - connectMode = ConnectMode.DEFAULT; - } - if (ConnectManager.getInstance().isNeedConnect(URLAddress.GET_ADMIN_SN_SETTING, connectMode)) { - getUserAvatarInfo(lifecycle, callback); - } else { - String jsonString = mCacheHelper.getAsString(URLAddress.GET_ADMIN_SN_SETTING); - //为 "" 是已经请求成功的 - if (jsonString == null) { - getUserAvatarInfo(lifecycle, callback); - } else { - Gson gson = new Gson(); - Type type = new TypeToken() { - }.getType(); - UserAvatarInfo userAvatarInfo = gson.fromJson(jsonString, type); - if (callback != null) { - callback.onComplete(); - } - } - } - } - - public void getUserAvatarInfo(BehaviorSubject lifecycle, onCompleteCallback callback) { - NetInterfaceManager.getInstance() - .getUserAvatarInfoControl() - .compose(RxLifecycle.bindUntilEvent(lifecycle, FragmentEvent.DESTROY)) - .subscribe(getUserAvatarInfoObserver(callback)); - } - - public void getUserAvatarInfo(onCompleteCallback callback) { - NetInterfaceManager.getInstance() - .getUserAvatarInfoControl() - .subscribe(getUserAvatarInfoObserver(callback)); - } - - public void getUserAvatarInfo() { - NetInterfaceManager.getInstance() - .getUserAvatarInfoControl() - .subscribe(getUserAvatarInfoObserver(null)); - } - - public Observer> getUserAvatarInfoObserver(onCompleteCallback callback) { - return new Observer>() { - @Override - public void onSubscribe(@NonNull Disposable d) { - Log.e("getUserAvatarInfoControl", "onSubscribe: "); - } - - @Override - public void onNext(@NonNull BaseResponse userAvatarInfoBaseResponse) { - Log.e("getUserAvatarInfoControl", "onNext: " + userAvatarInfoBaseResponse); - - } - - @Override - public void onError(@NonNull Throwable e) { - Log.e("getUserAvatarInfoControl", "onError: " + e.getMessage()); - onComplete(); - } - - @Override - public void onComplete() { - Log.e("getUserAvatarInfoControl", "onComplete: "); - if (callback != null) { - callback.onComplete(); - } - } - }; - } -} diff --git a/app/src/main/java/com/uiui/aios/network/URLAddress.java b/app/src/main/java/com/uiui/aios/network/URLAddress.java deleted file mode 100644 index d5d655c..0000000 --- a/app/src/main/java/com/uiui/aios/network/URLAddress.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.uiui.aios.network; - -public class URLAddress { - public static final String ROOT_URL = "https://led.zuoyepad.com/android/"; - - /*获取设备是否激活*/ - public static final String GET_SN_IS_ACTIVATION = "sn/getSnIsActivation"; - /*设备信息接口*/ - public static final String SNINFO = "sn/getSnInfo"; - /*获取用户头像和信息*/ - public static final String GET_USER_AVATAR_INFO = "sn/getUserAvatarInfo"; - /*获取闹钟*/ - public static final String GET_ALARM_CLOCK = "getAlarmClock"; - /*应用使用记录*/ - public static final String APP_USAGE_RECORD = "appUsageRecord"; - /*正在运行的应用*/ - public static final String RUN_NEW_APP = "app/runNewApp"; - /*上传截图*/ - public static final String SEND_SCREENSHOT = "sn/uploadScreenshot"; - /*获取系统设置*/ - public final static String GET_SETTINGS = "control/getSetting"; - /*sos记录*/ - public static final String SOS_RECORD = "sosRecord"; - /*爱心提醒通知成功*/ - public static final String UPDATE_ALARM_CLOCK = "updateAlarmClock"; - /*更新桌面布局*/ - public static final String UPDATE_DESKTOP_LAYOUT = "updateDesktopLayout"; - /*获取桌面布局*/ - public static final String GET_DESKTOP_LAYOUT = "getDesktopLayout"; - /*获取抢购列表*/ - public static final String GET_GOODS_LIST = "getGoodsList"; - /*获取资讯列表*/ - public static final String GET_ARTICLE_LIST = "getArticleList"; - /*获取抢购详情*/ - public static final String GET_GOODS_DETAILS = "getGoodsDetails"; - /*获取资讯详情*/ - public static final String GET_ARTICLE_DETAILS = "getArticleDetails"; - /*同城活动列表*/ - public static final String GET_ACTIVITY_LIST = "activityList"; - /*同城需求列表*/ - public static final String GET_DEMAND_LIST = "demandList"; - /*获取健康吗*/ - public static final String GET_HEALTH_CODE = "getHealthCode"; - /*获取联系人*/ - public static final String GET_MAIL_LIST = "Control/getMailList"; - /*获取负二屏开关*/ - public static final String GET_ADMIN_SN_SETTING = "getAdminSnSetting"; - /*更新app隐藏或者显示状态*/ - public static final String APP_ICON_UPDATE = "Control/appIconUpdate"; - - - public static final String GET_USER_ID = "getUserId"; -} diff --git a/app/src/main/java/com/uiui/aios/network/api/ActivityListApi.java b/app/src/main/java/com/uiui/aios/network/api/ActivityListApi.java deleted file mode 100644 index 29ac4df..0000000 --- a/app/src/main/java/com/uiui/aios/network/api/ActivityListApi.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.uiui.aios.network.api; - -import com.uiui.aios.bean.ActivityBean; -import com.uiui.aios.bean.BaseResponse; -import com.uiui.aios.network.URLAddress; - -import java.util.List; - -import io.reactivex.rxjava3.core.Observable; -import retrofit2.http.GET; -import retrofit2.http.Query; - -public interface ActivityListApi { - @GET(URLAddress.GET_ACTIVITY_LIST) - Observable>> getActivityList( - @Query("sn") String sn, - @Query("startSize") int startSize, - @Query("pageSize") int pageSize, - @Query("user_id") int user_id - ); -} diff --git a/app/src/main/java/com/uiui/aios/network/api/AlarmClockApi.java b/app/src/main/java/com/uiui/aios/network/api/AlarmClockApi.java deleted file mode 100644 index 71543fc..0000000 --- a/app/src/main/java/com/uiui/aios/network/api/AlarmClockApi.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.uiui.aios.network.api; - -import com.uiui.aios.bean.AlarmClockData; -import com.uiui.aios.bean.BaseResponse; -import com.uiui.aios.network.URLAddress; - -import java.util.List; - -import io.reactivex.rxjava3.core.Observable; -import retrofit2.http.GET; -import retrofit2.http.Query; - -public interface AlarmClockApi { - @GET(URLAddress.GET_ALARM_CLOCK) - Observable>> getAlarmClock( - @Query("sn") String sn - ); -} diff --git a/app/src/main/java/com/uiui/aios/network/api/AppUsageRecordApi.java b/app/src/main/java/com/uiui/aios/network/api/AppUsageRecordApi.java deleted file mode 100644 index ed1e2a3..0000000 --- a/app/src/main/java/com/uiui/aios/network/api/AppUsageRecordApi.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.uiui.aios.network.api; - -import com.uiui.aios.bean.BaseResponse; -import com.uiui.aios.network.URLAddress; - -import io.reactivex.rxjava3.core.Observable; -import retrofit2.http.Field; -import retrofit2.http.FormUrlEncoded; -import retrofit2.http.POST; - -public interface AppUsageRecordApi { - @FormUrlEncoded - @POST(URLAddress.APP_USAGE_RECORD) - Observable sendappUsageRecord( - @Field("sn") String sn, - @Field("app_name") String app_name, - @Field("app_package") String app_package, - @Field("open_time") long open_time, - @Field("close_time") long close_time - ); -} diff --git a/app/src/main/java/com/uiui/aios/network/api/ArticleDetailsApi.java b/app/src/main/java/com/uiui/aios/network/api/ArticleDetailsApi.java deleted file mode 100644 index 71b2145..0000000 --- a/app/src/main/java/com/uiui/aios/network/api/ArticleDetailsApi.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.uiui.aios.network.api; - -import com.uiui.aios.bean.ArticleDetails; -import com.uiui.aios.bean.BaseResponse; -import com.uiui.aios.network.URLAddress; - -import io.reactivex.rxjava3.core.Observable; -import retrofit2.http.GET; -import retrofit2.http.Query; - -public interface ArticleDetailsApi { - @GET(URLAddress.GET_ARTICLE_DETAILS) - Observable> getArticleDetails( - @Query("id") int id - ); -} diff --git a/app/src/main/java/com/uiui/aios/network/api/ArticleListApi.java b/app/src/main/java/com/uiui/aios/network/api/ArticleListApi.java deleted file mode 100644 index 532e68b..0000000 --- a/app/src/main/java/com/uiui/aios/network/api/ArticleListApi.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.uiui.aios.network.api; - -import com.uiui.aios.bean.ArticleInfo; -import com.uiui.aios.bean.BaseResponse; -import com.uiui.aios.network.URLAddress; - -import java.util.List; - -import io.reactivex.rxjava3.core.Observable; -import retrofit2.http.GET; -import retrofit2.http.Query; - -public interface ArticleListApi { - @GET(URLAddress.GET_ARTICLE_LIST) - Observable>> getArticleList( - @Query("sn") String sn - ); -} diff --git a/app/src/main/java/com/uiui/aios/network/api/DemandListApi.java b/app/src/main/java/com/uiui/aios/network/api/DemandListApi.java deleted file mode 100644 index c65674f..0000000 --- a/app/src/main/java/com/uiui/aios/network/api/DemandListApi.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.uiui.aios.network.api; - -import com.uiui.aios.bean.BaseResponse; -import com.uiui.aios.bean.DemandBean; -import com.uiui.aios.network.URLAddress; - -import java.util.List; - -import io.reactivex.rxjava3.core.Observable; -import retrofit2.http.GET; -import retrofit2.http.Query; - -public interface DemandListApi { - @GET(URLAddress.GET_DEMAND_LIST) - Observable>> getDemandList( - @Query("sn") String sn, - @Query("startSize") int startSize, - @Query("pageSize") int pageSize, - @Query("user_id") int user_id - ); -} diff --git a/app/src/main/java/com/uiui/aios/network/api/GetAdminSnSettingApi.java b/app/src/main/java/com/uiui/aios/network/api/GetAdminSnSettingApi.java deleted file mode 100644 index 604fccc..0000000 --- a/app/src/main/java/com/uiui/aios/network/api/GetAdminSnSettingApi.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.uiui.aios.network.api; - -import com.uiui.aios.bean.BaseResponse; -import com.uiui.aios.network.URLAddress; - -import io.reactivex.rxjava3.core.Observable; -import retrofit2.http.GET; -import retrofit2.http.Query; - -public interface GetAdminSnSettingApi { - @GET(URLAddress.GET_ADMIN_SN_SETTING) - Observable getAdminSnSetting( - @Query("sn") String sn - ); -} diff --git a/app/src/main/java/com/uiui/aios/network/api/GetDesktopApi.java b/app/src/main/java/com/uiui/aios/network/api/GetDesktopApi.java deleted file mode 100644 index 0b4b6b6..0000000 --- a/app/src/main/java/com/uiui/aios/network/api/GetDesktopApi.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.uiui.aios.network.api; - -import com.uiui.aios.bean.BaseResponse; -import com.uiui.aios.bean.NetDesktopIcon; -import com.uiui.aios.network.URLAddress; - -import java.util.List; - -import io.reactivex.rxjava3.core.Observable; -import retrofit2.http.GET; -import retrofit2.http.Query; - -public interface GetDesktopApi { - @GET(URLAddress.GET_DESKTOP_LAYOUT) - Observable>> getDesktopLayout( - @Query("sn") String sn - ); -} diff --git a/app/src/main/java/com/uiui/aios/network/api/GetMailList.java b/app/src/main/java/com/uiui/aios/network/api/GetMailList.java deleted file mode 100644 index d24d4a6..0000000 --- a/app/src/main/java/com/uiui/aios/network/api/GetMailList.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.uiui.aios.network.api; - -import com.uiui.aios.bean.BaseResponse; -import com.uiui.aios.bean.Contact; -import com.uiui.aios.network.URLAddress; - -import java.util.List; - -import io.reactivex.rxjava3.core.Observable; -import retrofit2.http.GET; -import retrofit2.http.Query; - -public interface GetMailList { - @GET(URLAddress.GET_MAIL_LIST) - Observable>> getContact( - @Query("sn") String sn - ); -} diff --git a/app/src/main/java/com/uiui/aios/network/api/GetUserIDApi.java b/app/src/main/java/com/uiui/aios/network/api/GetUserIDApi.java deleted file mode 100644 index cf8340c..0000000 --- a/app/src/main/java/com/uiui/aios/network/api/GetUserIDApi.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.uiui.aios.network.api; - -import com.uiui.aios.bean.BaseResponse; -import com.uiui.aios.bean.UserId; -import com.uiui.aios.network.URLAddress; - -import io.reactivex.rxjava3.core.Observable; -import retrofit2.http.GET; -import retrofit2.http.Query; - -public interface GetUserIDApi { - @GET(URLAddress.GET_USER_ID) - Observable> getUserID( - @Query("sn") String sn - ); -} diff --git a/app/src/main/java/com/uiui/aios/network/api/GoodsDetailsApi.java b/app/src/main/java/com/uiui/aios/network/api/GoodsDetailsApi.java deleted file mode 100644 index 3a0db76..0000000 --- a/app/src/main/java/com/uiui/aios/network/api/GoodsDetailsApi.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.uiui.aios.network.api; - -import com.uiui.aios.bean.BaseResponse; -import com.uiui.aios.bean.GoodsDetails; -import com.uiui.aios.network.URLAddress; - -import io.reactivex.rxjava3.core.Observable; -import retrofit2.http.GET; -import retrofit2.http.Query; - -public interface GoodsDetailsApi { - @GET(URLAddress.GET_GOODS_DETAILS) - Observable> getGoodsDetails( - @Query("id") int id - ); -} diff --git a/app/src/main/java/com/uiui/aios/network/api/GoodsListApi.java b/app/src/main/java/com/uiui/aios/network/api/GoodsListApi.java deleted file mode 100644 index fe7a5d7..0000000 --- a/app/src/main/java/com/uiui/aios/network/api/GoodsListApi.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.uiui.aios.network.api; - -import com.uiui.aios.bean.BaseResponse; -import com.uiui.aios.bean.GoodsInfo; -import com.uiui.aios.network.URLAddress; - -import java.util.List; - -import io.reactivex.rxjava3.core.Observable; -import retrofit2.http.GET; -import retrofit2.http.Query; - -public interface GoodsListApi { - @GET(URLAddress.GET_GOODS_LIST) - Observable>> getGoodsList( - @Query("sn") String sn - ); -} diff --git a/app/src/main/java/com/uiui/aios/network/api/HealthCodeApi.java b/app/src/main/java/com/uiui/aios/network/api/HealthCodeApi.java deleted file mode 100644 index db5b1e3..0000000 --- a/app/src/main/java/com/uiui/aios/network/api/HealthCodeApi.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.uiui.aios.network.api; - -import com.uiui.aios.bean.BaseResponse; -import com.uiui.aios.bean.HealthCode; -import com.uiui.aios.network.URLAddress; - -import java.util.List; - -import io.reactivex.rxjava3.core.Observable; -import retrofit2.http.GET; -import retrofit2.http.Query; - -public interface HealthCodeApi { - @GET(URLAddress.GET_HEALTH_CODE) - Observable>> getArticleDetails( - @Query("sn") String sn - ); -} diff --git a/app/src/main/java/com/uiui/aios/network/api/RunNewApp.java b/app/src/main/java/com/uiui/aios/network/api/RunNewApp.java deleted file mode 100644 index 1bd4534..0000000 --- a/app/src/main/java/com/uiui/aios/network/api/RunNewApp.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.uiui.aios.network.api; - -import com.uiui.aios.bean.BaseResponse; -import com.uiui.aios.network.URLAddress; - -import io.reactivex.rxjava3.core.Observable; -import retrofit2.http.Field; -import retrofit2.http.FormUrlEncoded; -import retrofit2.http.POST; - -public interface RunNewApp { - @FormUrlEncoded - @POST(URLAddress.RUN_NEW_APP) - Observable sendRunningInfo( - @Field("sn") String sn, - @Field("app") String app - ); -} diff --git a/app/src/main/java/com/uiui/aios/network/api/SNInfoApi.java b/app/src/main/java/com/uiui/aios/network/api/SNInfoApi.java deleted file mode 100644 index 60cf13e..0000000 --- a/app/src/main/java/com/uiui/aios/network/api/SNInfoApi.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.uiui.aios.network.api; - -import com.uiui.aios.bean.BaseResponse; -import com.uiui.aios.bean.SnInfo; -import com.uiui.aios.network.URLAddress; - -import io.reactivex.rxjava3.core.Observable; -import retrofit2.http.GET; -import retrofit2.http.Query; - -public interface SNInfoApi { - @GET(URLAddress.SNINFO) - Observable> getsninfo( - @Query("sn") String sn - ); -} diff --git a/app/src/main/java/com/uiui/aios/network/api/SOSRecordApi.java b/app/src/main/java/com/uiui/aios/network/api/SOSRecordApi.java deleted file mode 100644 index c82454d..0000000 --- a/app/src/main/java/com/uiui/aios/network/api/SOSRecordApi.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.uiui.aios.network.api; - -import com.uiui.aios.bean.BaseResponse; -import com.uiui.aios.network.URLAddress; - -import io.reactivex.rxjava3.core.Observable; -import retrofit2.http.Field; -import retrofit2.http.FormUrlEncoded; -import retrofit2.http.POST; - -public interface SOSRecordApi { - @FormUrlEncoded - @POST(URLAddress.SOS_RECORD) - Observable sendSOSRecord( - @Field("sn") String sn, - @Field("longitude") String longitude, - @Field("latitude") String latitude, - @Field("address") String address - ); -} diff --git a/app/src/main/java/com/uiui/aios/network/api/SendScreenshotApi.java b/app/src/main/java/com/uiui/aios/network/api/SendScreenshotApi.java deleted file mode 100644 index 774d008..0000000 --- a/app/src/main/java/com/uiui/aios/network/api/SendScreenshotApi.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.uiui.aios.network.api; - - -import com.uiui.aios.bean.BaseResponse; -import com.uiui.aios.network.URLAddress; - -import io.reactivex.rxjava3.core.Observable; -import okhttp3.MultipartBody; -import retrofit2.http.Multipart; -import retrofit2.http.POST; -import retrofit2.http.Part; -import retrofit2.http.Query; - -public interface SendScreenshotApi { - @Multipart - @POST(URLAddress.SEND_SCREENSHOT) - Observable sendScreenshot( - @Query("sn") String sn, - @Part MultipartBody.Part file - ); -} diff --git a/app/src/main/java/com/uiui/aios/network/api/Setting.java b/app/src/main/java/com/uiui/aios/network/api/Setting.java deleted file mode 100644 index 41e4cde..0000000 --- a/app/src/main/java/com/uiui/aios/network/api/Setting.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.uiui.aios.network.api; - -import com.uiui.aios.bean.BaseResponse; -import com.uiui.aios.bean.SystemSettings; -import com.uiui.aios.network.URLAddress; - -import io.reactivex.rxjava3.core.Observable; -import retrofit2.http.GET; -import retrofit2.http.Query; - -public interface Setting { - @GET(URLAddress.GET_SETTINGS) - Observable> getSetting( - @Query("sn") String sn - ); -} diff --git a/app/src/main/java/com/uiui/aios/network/api/SnIsActivationApi.java b/app/src/main/java/com/uiui/aios/network/api/SnIsActivationApi.java deleted file mode 100644 index 3790547..0000000 --- a/app/src/main/java/com/uiui/aios/network/api/SnIsActivationApi.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.uiui.aios.network.api; - -import com.uiui.aios.bean.BaseResponse; -import com.uiui.aios.network.URLAddress; - -import io.reactivex.rxjava3.core.Observable; -import retrofit2.http.GET; -import retrofit2.http.Query; - -public interface SnIsActivationApi { - @GET(URLAddress.GET_SN_IS_ACTIVATION) - Observable getSnIsActivation( - @Query("sn") String sn - ); -} diff --git a/app/src/main/java/com/uiui/aios/network/api/UpdateAlarmClockApi.java b/app/src/main/java/com/uiui/aios/network/api/UpdateAlarmClockApi.java deleted file mode 100644 index 3ffe26c..0000000 --- a/app/src/main/java/com/uiui/aios/network/api/UpdateAlarmClockApi.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.uiui.aios.network.api; - -import com.uiui.aios.bean.BaseResponse; -import com.uiui.aios.network.URLAddress; - -import io.reactivex.rxjava3.core.Observable; -import retrofit2.http.Field; -import retrofit2.http.FormUrlEncoded; -import retrofit2.http.POST; - -public interface UpdateAlarmClockApi { - @FormUrlEncoded - @POST(URLAddress.UPDATE_ALARM_CLOCK) - Observable updateAlarm( - @Field("sn") String sn, - @Field("id") int id - ); -} diff --git a/app/src/main/java/com/uiui/aios/network/api/UpdateAppIconApi.java b/app/src/main/java/com/uiui/aios/network/api/UpdateAppIconApi.java deleted file mode 100644 index 53ed84d..0000000 --- a/app/src/main/java/com/uiui/aios/network/api/UpdateAppIconApi.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.uiui.aios.network.api; - -import com.uiui.aios.bean.BaseResponse; -import com.uiui.aios.network.URLAddress; - -import io.reactivex.rxjava3.core.Observable; -import retrofit2.http.Field; -import retrofit2.http.FormUrlEncoded; -import retrofit2.http.POST; - -public interface UpdateAppIconApi { - @FormUrlEncoded - @POST(URLAddress.APP_ICON_UPDATE) - Observable appIconUpdate( - @Field("sn") String sn, - @Field("app_package") String app_package, - @Field("type") int type,//类型 1显示 0隐藏 - @Field("app_name") String app_name - ); -} diff --git a/app/src/main/java/com/uiui/aios/network/api/UpdateDesktopApi.java b/app/src/main/java/com/uiui/aios/network/api/UpdateDesktopApi.java deleted file mode 100644 index 034e387..0000000 --- a/app/src/main/java/com/uiui/aios/network/api/UpdateDesktopApi.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.uiui.aios.network.api; - -import com.uiui.aios.bean.BaseResponse; -import com.uiui.aios.network.URLAddress; - -import io.reactivex.rxjava3.core.Observable; -import retrofit2.http.Field; -import retrofit2.http.FormUrlEncoded; -import retrofit2.http.POST; - -public interface UpdateDesktopApi { - @FormUrlEncoded - @POST(URLAddress.UPDATE_DESKTOP_LAYOUT) - Observable updateLayout( - @Field("sn") String sn, - @Field("app") String app - ); -} diff --git a/app/src/main/java/com/uiui/aios/network/api/UserInfoControl.java b/app/src/main/java/com/uiui/aios/network/api/UserInfoControl.java deleted file mode 100644 index 316594e..0000000 --- a/app/src/main/java/com/uiui/aios/network/api/UserInfoControl.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.uiui.aios.network.api; - - -import com.uiui.aios.bean.BaseResponse; -import com.uiui.aios.bean.UserAvatarInfo; -import com.uiui.aios.network.URLAddress; - -import io.reactivex.rxjava3.core.Observable; -import retrofit2.http.Field; -import retrofit2.http.FormUrlEncoded; -import retrofit2.http.POST; - -public interface UserInfoControl { - @FormUrlEncoded - @POST(URLAddress.GET_USER_AVATAR_INFO) - Observable> getUserAvatarInfo( - @Field("sn") String sn - ); -} diff --git a/app/src/main/java/com/uiui/aios/service/main/MainSContact.java b/app/src/main/java/com/uiui/aios/service/main/MainSContact.java deleted file mode 100644 index 9632b5a..0000000 --- a/app/src/main/java/com/uiui/aios/service/main/MainSContact.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.uiui.aios.service.main; - -import com.uiui.aios.base.BasePresenter; -import com.uiui.aios.base.BaseView; -import com.uiui.aios.bean.AlarmClockData; - -import java.util.List; - -public class MainSContact { - public interface Presenter extends BasePresenter { - //设置所有信息 - void getAlarmClock(); - } - - public interface MainSView extends BaseView { - //获取所有信息 - void setAlarmClock(List dataList); - } -} diff --git a/app/src/main/java/com/uiui/aios/service/main/MainService.java b/app/src/main/java/com/uiui/aios/service/main/MainService.java deleted file mode 100644 index ce72fcc..0000000 --- a/app/src/main/java/com/uiui/aios/service/main/MainService.java +++ /dev/null @@ -1,433 +0,0 @@ -package com.uiui.aios.service.main; - -import android.annotation.SuppressLint; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.os.IBinder; -import android.os.PowerManager; -import android.text.TextUtils; -import android.text.format.Formatter; -import android.util.Log; - -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.uiui.aios.BuildConfig; -import com.uiui.aios.activity.NoticeActivity; -import com.uiui.aios.alarm.AlarmUtils; -import com.uiui.aios.base.BaseService; -import com.uiui.aios.bean.AlarmClockData; -import com.uiui.aios.bean.BaseResponse; -import com.uiui.aios.network.NetInterfaceManager; -import com.uiui.aios.utils.ApkUtils; -import com.uiui.aios.utils.CmdUtil; -import com.uiui.aios.utils.ForegroundAppUtil; -import com.uiui.aios.utils.AppUsedTimeUtils; -import com.uiui.aios.utils.ToastUtil; -import com.uiui.aios.utils.Utils; - -import java.io.File; -import java.io.FileNotFoundException; -import java.util.Calendar; -import java.util.HashMap; -import java.util.List; - -import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; -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 okhttp3.MediaType; -import okhttp3.MultipartBody; -import okhttp3.RequestBody; - -public class MainService extends BaseService implements MainSContact.MainSView, NetworkUtils.OnNetworkStatusChangedListener { - private static final String TAG = MainService.class.getSimpleName(); - public MainSPresenter mPresenter; - - public MainService() { - - } - - @Override - public void onDisconnected() { - - } - - @Override - public void onConnected(NetworkUtils.NetworkType networkType) { - if (isScreenOn()) { - mPresenter.getAlarmClock(); - } - } - - @Override - public IBinder onBind(Intent intent) { - Log.e(TAG, "onBind: "); - return null; - } - - @Override - public void onCreate() { - super.onCreate(); - Log.e(TAG, "onCreate: "); -// ApkUtils.UninstallAPP(this, "com.joytv.live"); -// ApkUtils.UninstallAPP(this, "com.tencent.android.qqdownloader"); - - Aria.init(this); - Aria.download(this).register(); - mPresenter = new MainSPresenter(this); - mPresenter.attachView(this); - mPresenter.setLifecycle(lifecycleSubject); - NetworkUtils.registerNetworkStatusChangedListener(this); - mPresenter.getAlarmClock(); - registerAlarmReceiver(); - registerTimeReceiver(); - registerLockScreenReceiver(); - } - - @Override - public int onStartCommand(Intent intent, int flags, int startId) { - Log.e(TAG, "onStartCommand: "); - return START_STICKY; - } - - @Override - public void onDestroy() { - super.onDestroy(); - mPresenter.detachView(); - NetworkUtils.unregisterNetworkStatusChangedListener(this); - if (alarmReceiver != null) { - unregisterReceiver(alarmReceiver); - } - if (mTimeChangedReceiver != null) { - unregisterReceiver(mTimeChangedReceiver); - } - } - - @Override - public void setAlarmClock(List dataList) { - - } - - public boolean isScreenOn() { - PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); - //true为打开,false为关闭 - return powerManager.isInteractive(); - } - - public static final String ALARMWAKEUP = "ALARM_WAKEUP"; - - private void registerAlarmReceiver() { - if (alarmReceiver == null) { - alarmReceiver = new AlarmReceiver(); - } - IntentFilter filter = new IntentFilter(); - filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); - filter.addAction(ALARMWAKEUP); - registerReceiver(alarmReceiver, filter); - } - - private AlarmReceiver alarmReceiver = new AlarmReceiver(); - - private class AlarmReceiver extends BroadcastReceiver { - @Override - public void onReceive(Context context, Intent intent) { - Log.e(TAG, "onReceive: " + System.currentTimeMillis()); - String action = intent.getAction(); - if (TextUtils.isEmpty(action)) return; - Log.e(TAG, "onReceive: " + action); - String title = intent.getStringExtra("title"); - int code = intent.getIntExtra("id", -1); - Log.e(TAG, "onReceive: title = " + title); - setNextAlarm(code); - if (ALARMWAKEUP.equals(action)) { - Intent noticeIntent = new Intent(); - noticeIntent.putExtra("id", code); - noticeIntent.setClass(MainService.this, NoticeActivity.class); - noticeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - startActivity(noticeIntent); - } - } - } - - public void setNextAlarm(int code) { - HashMap clockDataHashMap = AlarmUtils.getInstance().getOldData(); - AlarmClockData alarmClockData = clockDataHashMap.get(code); - Log.e(TAG, "setNextAlarm: " + alarmClockData); - if (alarmClockData != null) { - Calendar calendar = Calendar.getInstance(); - int day_of_week = calendar.get(Calendar.DAY_OF_WEEK) - 1; - Log.e(TAG, "setNextAlarm: " + day_of_week); - switch (alarmClockData.getType()) { - case AlarmUtils.ONCE: - break; - case AlarmUtils.LOOP: - AlarmUtils.getInstance().setDayLoopAlarm(MainService.ALARMWAKEUP, alarmClockData.getTitle(), alarmClockData.getId(), alarmClockData.getTime()); - break; - case AlarmUtils.WORKING_DAY: - if (day_of_week < 5 || day_of_week == 7) { - AlarmUtils.getInstance().setWorkDayAlarm(MainService.ALARMWAKEUP, alarmClockData.getTitle(), alarmClockData.getId(), alarmClockData.getTime()); - } - break; - case AlarmUtils.OFF_DAY: - AlarmUtils.getInstance().setOffDayAlarm(MainService.ALARMWAKEUP, alarmClockData.getTitle(), alarmClockData.getId(), alarmClockData.getTime()); - default: - } - } - } - - //监听时间和日期变化 - public void registerTimeReceiver() { - mTimeChangedReceiver = new TimeChangedReceiver(); - IntentFilter filter = new IntentFilter(); - filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); - filter.addAction(Intent.ACTION_DATE_CHANGED); - filter.addAction(Intent.ACTION_TIME_CHANGED); - filter.addAction(Intent.ACTION_TIMEZONE_CHANGED); - filter.addAction(Intent.ACTION_TIME_TICK); - registerReceiver(mTimeChangedReceiver, filter); - } - - private TimeChangedReceiver mTimeChangedReceiver; - - private class TimeChangedReceiver extends BroadcastReceiver { - - @Override - public void onReceive(Context context, Intent intent) { - if (Intent.ACTION_DATE_CHANGED.equals(intent.getAction())) { - Log.e(TAG, "TimeChangedReceiver:" + "data changed"); - } else if (Intent.ACTION_TIME_CHANGED.equals(intent.getAction())) { - Log.e(TAG, "TimeChangedReceiver:" + "time changed"); - } else if (Intent.ACTION_TIMEZONE_CHANGED.equals(intent.getAction())) { - Log.e(TAG, "TimeChangedReceiver:" + "timezone changed"); - } else if (Intent.ACTION_TIME_TICK.equals(intent.getAction())) { - Log.e(TAG, "TimeChangedReceiver:" + "time tick"); -// isScreenshot(); - } - } - } - - private final static long ONE_HOURS_TIME = 60 * 60 * 1000; - private final static long TEN_MINUTES_TIME = 60 * 10 * 1000; - - private void isScreenshot() { - //1、检测应用使用情况,如果设备长时间运行一个应用,超过1小时,启动截屏一次。 - //2、检测设备在非正常时间使用时,使用第三方应用,在运行10分钟后,启动截屏功能一次 - //屏幕未点亮时不用截图 - // TODO: 2021/12/20 计算当前app打开时间 - String topPackageName = ForegroundAppUtil.getForegroundPackageName(MainService.this); - Log.e(TAG, "isScreenshot: " + topPackageName); - String pkg = AppUsedTimeUtils.getInstance().getAppPackageName(); - if (TextUtils.isEmpty(pkg) || BuildConfig.APPLICATION_ID.equals(pkg)) { - return; - } - - PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); - //true为打开,false为关闭 - boolean screenOn = powerManager.isInteractive(); - Log.e(TAG, "isScreenshot: screenOn = " + screenOn); - if (!screenOn) return; - - long startTime = AppUsedTimeUtils.getInstance().getStartTime(); - if (AppUsedTimeUtils.getInstance().isNormalTime()) {//正常时间段 - if (System.currentTimeMillis() - startTime >= ONE_HOURS_TIME) { - Log.e(TAG, "isScreenshot: " + "截图"); - doscreenshot(this); - } - } else {//非正常时间段 - if (System.currentTimeMillis() - startTime >= TEN_MINUTES_TIME) { - Log.e(TAG, "isScreenshot: " + "截图"); - doscreenshot(this); - } - } - } - - private static Observable getScreenshot(Context context, String filePath) { - Observable screenshotObservable = Observable.create(new ObservableOnSubscribe() { - @Override - public void subscribe(ObservableEmitter e) { - int code = CmdUtil.execute("screencap -p " + filePath).code; - e.onNext(code); - e.onComplete(); - } - }).subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()); - return screenshotObservable; - } - - private static Observable getSendFile(String path, MultipartBody.Part body) { - return NetInterfaceManager.getInstance() - .getScreenshotApi() - .sendScreenshot(Utils.getSerial(), body) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()); - } - - public static void doscreenshot(Context context) { - long time = System.currentTimeMillis(); - String path = context.getExternalFilesDir("db").getAbsolutePath(); - String filePath = path + File.separator + time + ".png"; - getScreenshot(context, filePath).concatMap(new Function>() { - @Override - public ObservableSource apply(Integer integer) throws Exception { - if (integer != 0) { - throw new FileNotFoundException(); - } - File file = new File(filePath); - if (!file.exists()) { - throw new FileNotFoundException(filePath); - } -// Bitmap bitmap = BitmapFactory.decodeFile(filePath); -// if (bitmap.getWidth() < bitmap.getHeight()) { -// bitmap = ImageUtils.rotate(bitmap, -90, bitmap.getWidth(), bitmap.getHeight()); -// } -// ByteArrayOutputStream baos = new ByteArrayOutputStream(); -// bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); -// file.createNewFile(); -// FileOutputStream fos = new FileOutputStream(file); -// InputStream is = new ByteArrayInputStream(baos.toByteArray()); -// int x; -// byte[] b = new byte[1024 * 100]; -// while ((x = is.read(b)) != -1) { -// fos.write(b, 0, x); -// } -// fos.close(); - RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file); - MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getName(), requestFile); - return getSendFile(filePath, body); - } - }).subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - Log.e("screenshot", "onSubscribe: "); - } - - @Override - public void onNext(BaseResponse baseResponse) { - Log.e("screenshot", "onNext: " + baseResponse); - } - - @Override - public void onError(Throwable e) { - Log.e("screenshot", "onError: " + e.getMessage()); - onComplete(); - } - - @Override - public void onComplete() { - Log.e("screenshot", "onComplete: "); - } - }); - } - - - private LockScreenReceiver lockScreenReceiver; - - private void registerLockScreenReceiver() { - if (lockScreenReceiver == null) { - lockScreenReceiver = new LockScreenReceiver(); - } - IntentFilter filter = new IntentFilter(); - filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); - filter.addAction(Intent.ACTION_USER_PRESENT); - filter.addAction(Intent.ACTION_SCREEN_ON); - filter.addAction(Intent.ACTION_SCREEN_OFF); - registerReceiver(lockScreenReceiver, filter); - } - - static class LockScreenReceiver extends BroadcastReceiver { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (TextUtils.isEmpty(action)) return; - Log.e(TAG, "onReceive: " + action); - switch (action) { - default: - break; - case Intent.ACTION_USER_PRESENT: - resetStartTime(context); - break; - case Intent.ACTION_SCREEN_ON: - - break; - case Intent.ACTION_SCREEN_OFF: - //关闭屏幕上传数据 - sendAppUsed(context); - break; - } - } - } - - private static void resetStartTime(Context context) { - String topPackageName = ForegroundAppUtil.getForegroundPackageName(context); - Log.e(TAG, "resetStartTime: " + topPackageName); - AppUsedTimeUtils.getInstance().setAppPackageName(topPackageName); - AppUsedTimeUtils.getInstance().setStartTime(System.currentTimeMillis()); - } - - private static void sendAppUsed(Context context) { - String packagename = AppUsedTimeUtils.getInstance().getAppPackageName(); - Log.e(TAG, "onResume packagename == " + packagename); -// AppUsedTimeUtils.getInstance().setEndTime(System.currentTimeMillis()); - if (!TextUtils.isEmpty(packagename)) { - NetInterfaceManager.getInstance().getAppUsageRecordControl() - .sendappUsageRecord(Utils.getSerial(), - ApkUtils.getAppNameByPackage(context, packagename), - packagename, - AppUsedTimeUtils.getInstance().getStartTime() / 1000, - AppUsedTimeUtils.getInstance().getEndTime() / 1000) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - Log.e("sendAppUsed", "onSubscribe: "); - } - - @Override - public void onNext(BaseResponse baseResponse) { - Log.e("sendAppUsed", "onNext: " + baseResponse); - } - - @Override - public void onError(Throwable e) { - Log.e("sendAppUsed", "onError: " + e.getMessage()); - onComplete(); - } - - @Override - public void onComplete() { - Log.e("sendAppUsed", "onComplete: "); - } - }); - } else { - Log.e("fht", "app = null" + packagename); - } - } - - //在这里处理任务执行中的状态,如进度进度条的刷新 - @Download.onTaskRunning - protected void running(DownloadTask task) { - Log.e("aria", "正在下载:" + task.getPercent() + ":" + task.getExtendField()); -// ToastUtil.show("正在下载:" + task.getPercent() + "%" + "\t" + Formatter.formatFileSize(MainService.this, task.getSpeed()) + "/s"); - } - - @Download.onTaskComplete - void taskComplete(DownloadTask task) { - //在这里处理任务完成的状态 - Log.e(TAG, "taskComplete: " + task.getFilePath()); - } - - @Download.onTaskFail - void taskFail(DownloadTask task, Exception e) { - - } -} diff --git a/app/src/main/java/com/uiui/aios/activity/NoticeActivity.java b/app/src/main/java/com/uiui/zyos/activity/NoticeActivity.java similarity index 82% rename from app/src/main/java/com/uiui/aios/activity/NoticeActivity.java rename to app/src/main/java/com/uiui/zyos/activity/NoticeActivity.java index 80b9947..3df3e5d 100644 --- a/app/src/main/java/com/uiui/aios/activity/NoticeActivity.java +++ b/app/src/main/java/com/uiui/zyos/activity/NoticeActivity.java @@ -1,10 +1,9 @@ -package com.uiui.aios.activity; +package com.uiui.zyos.activity; import android.content.Context; import android.content.Intent; import android.media.AudioManager; import android.media.MediaPlayer; -import android.net.Uri; import android.os.Bundle; import android.os.PowerManager; import android.os.Vibrator; @@ -22,16 +21,14 @@ import com.blankj.utilcode.util.FileUtils; import com.bumptech.glide.Glide; import com.bumptech.glide.load.resource.bitmap.RoundedCorners; import com.bumptech.glide.request.RequestOptions; -import com.uiui.aios.R; -import com.uiui.aios.alarm.AlarmUtils; -import com.uiui.aios.bean.AlarmClockData; -import com.uiui.aios.bean.BaseResponse; -import com.uiui.aios.network.NetInterfaceManager; -import com.uiui.aios.utils.FileUtil; -import com.uiui.aios.utils.ScreenUtils; -import com.uiui.aios.utils.Utils; -import com.uiui.aios.utils.WakeUpUtils; -import com.uiui.aios.view.JzvdStdAssert; +import com.uiui.zyos.R; +import com.uiui.zyos.alarm.AlarmUtils; +import com.uiui.zyos.bean.AlarmClockData; +import com.uiui.zyos.utils.FileUtil; +import com.uiui.zyos.utils.ScreenUtils; +import com.uiui.zyos.utils.Utils; +import com.uiui.zyos.utils.WakeUpUtils; +import com.uiui.zyos.view.JzvdStdAssert; import java.io.File; import java.io.FileInputStream; @@ -114,32 +111,6 @@ public class NoticeActivity extends AppCompatActivity { alarm.setFinished(true); AlarmUtils.getInstance().updateAlarmFinished(alarm); } - NetInterfaceManager.getInstance() - .getUpdateAlarmObservable(alarmClockData.getId()) - .subscribe(new Observer() { - @Override - public void onSubscribe(@NonNull Disposable d) { - Log.e("showData", "onSubscribe: "); - } - - @Override - public void onNext(@NonNull BaseResponse baseResponse) { - Log.e("showData", "onNext: " + baseResponse); - } - - @Override - public void onError(@NonNull Throwable e) { - Log.e("showData", "onError: " + e.getMessage()); - onComplete(); - } - - @Override - public void onComplete() { - Log.e("showData", "onComplete: "); - finish(); - } - }); - } }); String voiceUrl = alarmClockData.getVoice(); diff --git a/app/src/main/java/com/uiui/aios/activity/PolicyActivity.java b/app/src/main/java/com/uiui/zyos/activity/PolicyActivity.java similarity index 97% rename from app/src/main/java/com/uiui/aios/activity/PolicyActivity.java rename to app/src/main/java/com/uiui/zyos/activity/PolicyActivity.java index 8c02769..d61fec5 100644 --- a/app/src/main/java/com/uiui/aios/activity/PolicyActivity.java +++ b/app/src/main/java/com/uiui/zyos/activity/PolicyActivity.java @@ -1,4 +1,4 @@ -package com.uiui.aios.activity; +package com.uiui.zyos.activity; import android.content.Intent; import android.os.Bundle; @@ -6,7 +6,7 @@ import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; -import com.uiui.aios.R; +import com.uiui.zyos.R; import java.io.BufferedReader; import java.io.IOException; diff --git a/app/src/main/java/com/uiui/aios/activity/main/MainActivity.java b/app/src/main/java/com/uiui/zyos/activity/main/MainActivity.java similarity index 68% rename from app/src/main/java/com/uiui/aios/activity/main/MainActivity.java rename to app/src/main/java/com/uiui/zyos/activity/main/MainActivity.java index e30459a..ea1e7df 100644 --- a/app/src/main/java/com/uiui/aios/activity/main/MainActivity.java +++ b/app/src/main/java/com/uiui/zyos/activity/main/MainActivity.java @@ -1,4 +1,4 @@ -package com.uiui.aios.activity.main; +package com.uiui.zyos.activity.main; import android.content.ActivityNotFoundException; import android.content.BroadcastReceiver; @@ -12,14 +12,10 @@ import android.content.res.Configuration; import android.graphics.Color; import android.os.Bundle; import android.os.IBinder; -import android.os.PersistableBundle; -import android.os.RemoteException; import android.provider.Settings; import android.text.TextUtils; import android.util.Log; -import android.view.Gravity; import android.view.KeyEvent; -import android.view.WindowManager; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; @@ -27,34 +23,25 @@ import androidx.fragment.app.FragmentManager; import androidx.viewpager.widget.ViewPager; import com.alarmclock.uiui.IAlarmAidlInterface; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; +import com.flyco.tablayout.SlidingTabLayout; import com.tencent.mmkv.MMKV; -import com.uiui.aios.BuildConfig; -import com.uiui.aios.R; -import com.uiui.aios.base.BaseActivity; -import com.uiui.aios.base.BaseFragmentPagerAdapter; -import com.uiui.aios.bean.AlarmItem; -import com.uiui.aios.bean.DesktopIcon; -import com.uiui.aios.config.CommonConfig; -import com.uiui.aios.dialog.PasswordDialog; -import com.uiui.aios.dialog.PrivacyPolicyDialog; -import com.uiui.aios.fragment.AppListFragment; -import com.uiui.aios.fragment.ControlFragment; -import com.uiui.aios.fragment.SecondFragment; -import com.uiui.aios.fragment.custom.CustomFragment; -import com.uiui.aios.service.NotificationService; -import com.uiui.aios.utils.ApkUtils; -import com.uiui.aios.utils.AppUsedTimeUtils; -import com.uiui.aios.utils.HomeWatcher; -import com.uiui.aios.utils.LauncherUtils; -import com.uiui.aios.utils.ToastUtil; -import com.uiui.aios.view.ScaleCircleNavigator; +import com.uiui.zyos.BuildConfig; +import com.uiui.zyos.R; +import com.uiui.zyos.base.BaseActivity; +import com.uiui.zyos.base.BaseFragmentPagerAdapter; +import com.uiui.zyos.config.CommonConfig; +import com.uiui.zyos.dialog.PrivacyPolicyDialog; +import com.uiui.zyos.fragment.custom.CustomFragment; +import com.uiui.zyos.service.NotificationService; +import com.uiui.zyos.utils.AppUsedTimeUtils; +import com.uiui.zyos.utils.HomeWatcher; +import com.uiui.zyos.utils.LauncherUtils; +import com.uiui.zyos.utils.ToastUtil; +import com.uiui.zyos.view.ScaleCircleNavigator; import net.lucode.hackware.magicindicator.MagicIndicator; import net.lucode.hackware.magicindicator.ViewPagerHelper; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -63,13 +50,16 @@ import butterknife.ButterKnife; public class MainActivity extends BaseActivity implements MainContact.MainView { private static final String TAG = MainActivity.class.getSimpleName(); - private MainPresenter mMainPresenter; + @BindView(R.id.main_sliding_tab_layout) + SlidingTabLayout main_sliding_tab_layout; @BindView(R.id.viewPager) ViewPager mViewPager; @BindView(R.id.magicIndicator) MagicIndicator mMagicIndicator; + private MainPresenter mMainPresenter; + private ScaleCircleNavigator scaleCircleNavigator; private FragmentManager mFragmentManager; @@ -77,13 +67,9 @@ public class MainActivity extends BaseActivity implements MainContact.MainView { private BaseFragmentPagerAdapter mBaseFragmentPagerAdapter; private List mFragments; - private ControlFragment mControlFragment; - private CustomFragment mCustomFragment; - private SecondFragment mSecondFragment; - private boolean is_twoscreen = false; - private int appListIndex = 2; - private int defaultCurrent = 1; + private int defaultCurrent = 0; + private String[] title = new String[]{"语文","数学","英语","物理","化学","生物","其他",}; private MMKV mMMKV = MMKV.defaultMMKV(); @@ -109,35 +95,13 @@ public class MainActivity extends BaseActivity implements MainContact.MainView { // fragmentTransaction.add(R.id.viewPager, appListFragment); // fragmentTransaction.commit(); - mControlFragment = new ControlFragment(); - mFragments.add(mControlFragment); - - is_twoscreen = Settings.Global.getInt(getContentResolver(), "is_twoscreen", 0) == 1; - if (is_twoscreen) { - appListIndex = 3; - defaultCurrent = 2; - mSecondFragment = new SecondFragment(); - mFragments.add(mSecondFragment); - } - - mCustomFragment = new CustomFragment(); - mFragments.add(mCustomFragment); - mMainPresenter.getSystemSettings(); - - ArrayList desktopIcons = ApkUtils.queryFilterAppInfo(this); - int x = 0; - for (int i = 0; i <= desktopIcons.size(); i++) { - if (i != 0 && i % APP_LIST_SIZE == 0) { - AppListFragment appListFragment = new AppListFragment(); - appListFragment.setAppList(new ArrayList<>(desktopIcons.subList(x, i))); - mFragments.add(appListFragment); - x = i; - } else if (i == desktopIcons.size()) { - AppListFragment appListFragment = new AppListFragment(); - mFragments.add(appListFragment); - appListFragment.setAppList(new ArrayList<>(desktopIcons.subList(x, i))); - } - } + mFragments.add(new CustomFragment()); + mFragments.add(new CustomFragment()); + mFragments.add(new CustomFragment()); + mFragments.add(new CustomFragment()); + mFragments.add(new CustomFragment()); + mFragments.add(new CustomFragment()); + mFragments.add(new CustomFragment()); scaleCircleNavigator = new ScaleCircleNavigator(this); scaleCircleNavigator.setCircleCount(mFragments.size()); @@ -151,37 +115,13 @@ public class MainActivity extends BaseActivity implements MainContact.MainView { }); mViewPager.setAdapter(mBaseFragmentPagerAdapter); - mViewPager.setOffscreenPageLimit(3); + mViewPager.setOffscreenPageLimit(4); mMagicIndicator.setNavigator(scaleCircleNavigator); ViewPagerHelper.bind(mMagicIndicator, mViewPager); if (mFragments.size() > 1) { mViewPager.setCurrentItem(defaultCurrent); } - } - - private void showPassword() { - PasswordDialog passwordDialog = new PasswordDialog(MainActivity.this); - passwordDialog.setTitle("退出关怀系统"); - passwordDialog.setOnClickBottomListener(new PasswordDialog.OnClickBottomListener() { - @Override - public void onPositiveClick() { - if ("666666".equals(passwordDialog.getPassword())) { - LauncherUtils.openLauncher3(MainActivity.this); - passwordDialog.dismiss(); - } else { - ToastUtil.show("密码错误"); - } - } - - @Override - public void onNegtiveClick() { - passwordDialog.dismiss(); - } - }); - passwordDialog.show(); - passwordDialog.getWindow().setGravity(Gravity.CENTER); - passwordDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); - passwordDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); + main_sliding_tab_layout.setViewPager(mViewPager,title); } @Override @@ -194,7 +134,6 @@ public class MainActivity extends BaseActivity implements MainContact.MainView { public void onServiceConnected(ComponentName name, IBinder service) { Log.e(TAG, "onServiceConnected: "); mIAlarmAidlInterface = IAlarmAidlInterface.Stub.asInterface(service); - getAlarmData(); } @Override @@ -232,74 +171,14 @@ public class MainActivity extends BaseActivity implements MainContact.MainView { PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); } - private void getAlarmData() { - if (mIAlarmAidlInterface == null) { - bindAlarmService(); - return; - } - try { - String json = mIAlarmAidlInterface.getAlarm(); - Log.e(TAG, "onServiceConnected: " + json); - if ("暂无闹钟".equalsIgnoreCase(json) || TextUtils.isEmpty(json)) { - mCustomFragment.setAlarmItem(null); - return; - } - Type type = new TypeToken>() { - }.getType(); - List alarmItem = new Gson().fromJson(json, type); - mCustomFragment.setAlarmItem(alarmItem); - } catch (RemoteException e) { - e.printStackTrace(); - } - } @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (hasFocus) {//表示渲染结束 - addData(); - } - } - - private final static int APP_LIST_SIZE = 3 * 4; - - private void addData() { - Log.e(TAG, "addData: "); - List fragmentList = new ArrayList<>(); - ArrayList applicationInfoList = ApkUtils.queryFilterAppInfo(this); - int x = 0; - for (int i = 0; i <= applicationInfoList.size(); i++) { - if (i != 0 && i % APP_LIST_SIZE == 0) { - AppListFragment appListFragment = new AppListFragment(); - appListFragment.setAppList(new ArrayList<>(applicationInfoList.subList(x, i))); - fragmentList.add(appListFragment); - x = i; - } else if (i == applicationInfoList.size()) { - AppListFragment appListFragment = new AppListFragment(); - fragmentList.add(appListFragment); - appListFragment.setAppList(new ArrayList<>(applicationInfoList.subList(x, i))); - } } - //从第三个开始改 - for (int i = 0; i < fragmentList.size(); i++) { - if (i + appListIndex < mFragments.size()) { - mBaseFragmentPagerAdapter.replaceFragment(i + appListIndex, fragmentList.get(i)); -// mFragments.remove(i + 2); -// mFragments.add(i + 2, fragmentList.get(i)); - } else { -// mFragments.add(fragmentList.get(i)); -// mBaseFragmentPagerAdapter.getFragments(); - mBaseFragmentPagerAdapter.addFragment(fragmentList.get(i)); - } - } - for (int i = mFragments.size(); i > fragmentList.size() + appListIndex; i--) { - mFragments.remove(i - 1); - } - scaleCircleNavigator.setCircleCount(mFragments.size()); - scaleCircleNavigator.notifyDataSetChanged(); - mBaseFragmentPagerAdapter.notifyItemChanged(); } @Override @@ -341,9 +220,6 @@ public class MainActivity extends BaseActivity implements MainContact.MainView { protected void onStart() { super.onStart(); Log.e(TAG, "onStart: "); - AppUsedTimeUtils.getInstance().setAppPackageName(BuildConfig.APPLICATION_ID); - AppUsedTimeUtils.getInstance().setStartTime(System.currentTimeMillis()); - getAlarmData(); } @Override @@ -359,6 +235,57 @@ public class MainActivity extends BaseActivity implements MainContact.MainView { } } + @Override + protected void onRestart() { + super.onRestart(); + Log.e(TAG, "onRestart: "); + } + + @Override + protected void onPause() { + super.onPause(); + Log.e(TAG, "onPause: "); + if (mHomeWatcher != null) { + mHomeWatcher.stopWatch();// 在销毁时停止监听,不然会报错的。 + } + } + + @Override + protected void onStop() { + super.onStop(); + Log.e(TAG, "onStop: "); + AppUsedTimeUtils.getInstance().setEndTime(System.currentTimeMillis()); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mMainPresenter.detachView(); + if (mNewAppReceiver != null) { + unregisterReceiver(mNewAppReceiver); + } + if (sosNumberReceiver != null) { + unregisterReceiver(sosNumberReceiver); + } + if (updateDesktopReceiver != null) { + unregisterReceiver(updateDesktopReceiver); + } + } + + @Override + protected void onSaveInstanceState(@NonNull Bundle outState) { + super.onSaveInstanceState(outState); + Log.e(TAG, "onSaveInstanceState: "); + Log.e(TAG, "onSaveInstanceState: " + System.currentTimeMillis()); + } + + @Override + protected void onRestoreInstanceState(Bundle savedInstanceState) { + super.onRestoreInstanceState(savedInstanceState); + Log.e(TAG, "onRestoreInstanceState: "); + Log.e(TAG, "onRestoreInstanceState: " + System.currentTimeMillis()); + } + private void getData() { if (!isNotificationListenersEnabled()) { ToastUtil.show("请授予\"" + getString(R.string.app_name) + "\"使用通知权"); @@ -371,7 +298,6 @@ public class MainActivity extends BaseActivity implements MainContact.MainView { } else { LauncherUtils.setDefaultDesktop(MainActivity.this, LauncherUtils.Launcher3, LauncherUtils.Launcher3Class); } - addData(); addHomeWatcher(); } @@ -468,60 +394,6 @@ public class MainActivity extends BaseActivity implements MainContact.MainView { } } - @Override - protected void onRestart() { - super.onRestart(); - Log.e(TAG, "onRestart: "); - mMainPresenter.sendAPPUsage(); - mMainPresenter.sendRunningInfo(); - } - - @Override - protected void onPause() { - super.onPause(); - Log.e(TAG, "onPause: "); - if (mHomeWatcher != null) { - mHomeWatcher.stopWatch();// 在销毁时停止监听,不然会报错的。 - } - } - - @Override - protected void onSaveInstanceState(@NonNull Bundle outState) { - super.onSaveInstanceState(outState); - Log.e(TAG, "onSaveInstanceState: "); - Log.e(TAG, "onSaveInstanceState: " + System.currentTimeMillis()); - } - - @Override - protected void onRestoreInstanceState(Bundle savedInstanceState) { - super.onRestoreInstanceState(savedInstanceState); - Log.e(TAG, "onRestoreInstanceState: "); - Log.e(TAG, "onRestoreInstanceState: " + System.currentTimeMillis()); - } - - @Override - protected void onStop() { - super.onStop(); - Log.e(TAG, "onStop: "); - AppUsedTimeUtils.getInstance().setEndTime(System.currentTimeMillis()); - } - - @Override - protected void onDestroy() { - super.onDestroy(); - mMainPresenter.detachView(); - if (mNewAppReceiver != null) { - unregisterReceiver(mNewAppReceiver); - } - if (sosNumberReceiver != null) { - unregisterReceiver(sosNumberReceiver); - } - if (updateDesktopReceiver != null) { - unregisterReceiver(updateDesktopReceiver); - } - } - - private void registmNewAppReceiver() { mNewAppReceiver = new NewAppReceiver(); IntentFilter filter = new IntentFilter(); @@ -545,7 +417,6 @@ public class MainActivity extends BaseActivity implements MainContact.MainView { || Intent.ACTION_PACKAGE_REMOVED.equals(action) // || Intent.ACTION_PACKAGE_CHANGED.equals(action) ) { - addData(); } } } @@ -570,7 +441,6 @@ public class MainActivity extends BaseActivity implements MainContact.MainView { if (TextUtils.isEmpty(setting_sos)) { return; } -// mCustomFragment.setSosNumber(); } } @@ -591,37 +461,6 @@ public class MainActivity extends BaseActivity implements MainContact.MainView { @Override public void onReceive(Context context, Intent intent) { Log.e(TAG, "onReceive: " + intent.getAction()); - addData(); } } - - @Override - public void setSystemSettings() { - mMainPresenter.getDesktopLayout(); - } - - @Override - public void getDesktopLayoutFinish() { - - } - - @Override - public void updateDesktopLayoutFinish() { - - } - - @Override - public void sendAPPUsageFinish() { - - } - - @Override - public void sendRunningInfoFinish() { - - } - - @Override - public void setAdminSnSetting() { - - } } diff --git a/app/src/main/java/com/uiui/zyos/activity/main/MainContact.java b/app/src/main/java/com/uiui/zyos/activity/main/MainContact.java new file mode 100644 index 0000000..0d3855d --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/activity/main/MainContact.java @@ -0,0 +1,14 @@ +package com.uiui.zyos.activity.main; + +import com.uiui.zyos.base.BasePresenter; +import com.uiui.zyos.base.BaseView; + +public class MainContact { + public interface Presenter extends BasePresenter { + + } + + public interface MainView extends BaseView { + + } +} diff --git a/app/src/main/java/com/uiui/zyos/activity/main/MainPresenter.java b/app/src/main/java/com/uiui/zyos/activity/main/MainPresenter.java new file mode 100644 index 0000000..f3c7cf9 --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/activity/main/MainPresenter.java @@ -0,0 +1,39 @@ +package com.uiui.zyos.activity.main; + +import android.content.Context; +import android.util.Log; + +import com.trello.rxlifecycle4.android.ActivityEvent; + +import io.reactivex.rxjava3.subjects.BehaviorSubject; + +public class MainPresenter implements MainContact.Presenter { + private static final String TAG = MainPresenter.class.getSimpleName(); + private MainContact.MainView mView; + private Context mContext; + + private BehaviorSubject lifecycle; + + void setLifecycle(BehaviorSubject lifecycle) { + this.lifecycle = lifecycle; + } + + public BehaviorSubject getLifecycle() { + return lifecycle; + } + + MainPresenter(Context context) { + this.mContext = context; + Log.e(TAG, "MainPresenter: " + context.getClass()); + } + + @Override + public void attachView(MainContact.MainView view) { + this.mView = view; + } + + @Override + public void detachView() { + this.mView = null; + } +} diff --git a/app/src/main/java/com/uiui/aios/fragment/custom/CustomPagerAdapter.java b/app/src/main/java/com/uiui/zyos/adapter/CustomPagerAdapter.java similarity index 94% rename from app/src/main/java/com/uiui/aios/fragment/custom/CustomPagerAdapter.java rename to app/src/main/java/com/uiui/zyos/adapter/CustomPagerAdapter.java index 1d64512..68179bb 100644 --- a/app/src/main/java/com/uiui/aios/fragment/custom/CustomPagerAdapter.java +++ b/app/src/main/java/com/uiui/zyos/adapter/CustomPagerAdapter.java @@ -1,4 +1,4 @@ -package com.uiui.aios.fragment.custom; +package com.uiui.zyos.adapter; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; diff --git a/app/src/main/java/com/uiui/aios/alarm/AlarmOpenHelper.java b/app/src/main/java/com/uiui/zyos/alarm/AlarmOpenHelper.java similarity index 98% rename from app/src/main/java/com/uiui/aios/alarm/AlarmOpenHelper.java rename to app/src/main/java/com/uiui/zyos/alarm/AlarmOpenHelper.java index 0ac96eb..a1cc4a0 100644 --- a/app/src/main/java/com/uiui/aios/alarm/AlarmOpenHelper.java +++ b/app/src/main/java/com/uiui/zyos/alarm/AlarmOpenHelper.java @@ -1,4 +1,4 @@ -package com.uiui.aios.alarm; +package com.uiui.zyos.alarm; import android.content.Context; import android.database.sqlite.SQLiteDatabase; diff --git a/app/src/main/java/com/uiui/aios/alarm/AlarmService.java b/app/src/main/java/com/uiui/zyos/alarm/AlarmService.java similarity index 89% rename from app/src/main/java/com/uiui/aios/alarm/AlarmService.java rename to app/src/main/java/com/uiui/zyos/alarm/AlarmService.java index bde59c6..39563ec 100644 --- a/app/src/main/java/com/uiui/aios/alarm/AlarmService.java +++ b/app/src/main/java/com/uiui/zyos/alarm/AlarmService.java @@ -1,4 +1,4 @@ -package com.uiui.aios.alarm; +package com.uiui.zyos.alarm; import android.app.Service; import android.content.Intent; diff --git a/app/src/main/java/com/uiui/aios/alarm/AlarmUtils.java b/app/src/main/java/com/uiui/zyos/alarm/AlarmUtils.java similarity index 99% rename from app/src/main/java/com/uiui/aios/alarm/AlarmUtils.java rename to app/src/main/java/com/uiui/zyos/alarm/AlarmUtils.java index 2a85b80..b67f4d5 100644 --- a/app/src/main/java/com/uiui/aios/alarm/AlarmUtils.java +++ b/app/src/main/java/com/uiui/zyos/alarm/AlarmUtils.java @@ -1,4 +1,4 @@ -package com.uiui.aios.alarm; +package com.uiui.zyos.alarm; import android.annotation.SuppressLint; import android.app.AlarmManager; @@ -14,10 +14,10 @@ import android.util.Log; import com.arialyy.aria.core.Aria; import com.blankj.utilcode.util.FileUtils; import com.bumptech.glide.Glide; -import com.uiui.aios.bean.AlarmClockData; -import com.uiui.aios.service.main.MainService; -import com.uiui.aios.utils.FileUtil; -import com.uiui.aios.utils.Utils; +import com.uiui.zyos.bean.AlarmClockData; +import com.uiui.zyos.service.main.MainService; +import com.uiui.zyos.utils.FileUtil; +import com.uiui.zyos.utils.Utils; import java.io.File; import java.text.ParseException; diff --git a/app/src/main/java/com/uiui/aios/base/BaseActivity.java b/app/src/main/java/com/uiui/zyos/base/BaseActivity.java similarity index 98% rename from app/src/main/java/com/uiui/aios/base/BaseActivity.java rename to app/src/main/java/com/uiui/zyos/base/BaseActivity.java index 1186354..decd185 100644 --- a/app/src/main/java/com/uiui/aios/base/BaseActivity.java +++ b/app/src/main/java/com/uiui/zyos/base/BaseActivity.java @@ -1,4 +1,4 @@ -package com.uiui.aios.base; +package com.uiui.zyos.base; import android.os.Bundle; @@ -15,7 +15,7 @@ import com.trello.rxlifecycle4.LifecycleTransformer; import com.trello.rxlifecycle4.RxLifecycle; import com.trello.rxlifecycle4.android.ActivityEvent; import com.trello.rxlifecycle4.android.RxLifecycleAndroid; -import com.uiui.aios.R; +import com.uiui.zyos.R; import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX; import io.reactivex.rxjava3.core.Observable; diff --git a/app/src/main/java/com/uiui/aios/base/BaseApplication.java b/app/src/main/java/com/uiui/zyos/base/BaseApplication.java similarity index 86% rename from app/src/main/java/com/uiui/aios/base/BaseApplication.java rename to app/src/main/java/com/uiui/zyos/base/BaseApplication.java index 0180335..db2b5ef 100644 --- a/app/src/main/java/com/uiui/aios/base/BaseApplication.java +++ b/app/src/main/java/com/uiui/zyos/base/BaseApplication.java @@ -1,4 +1,4 @@ -package com.uiui.aios.base; +package com.uiui.zyos.base; import android.app.Application; import android.content.Intent; @@ -7,25 +7,23 @@ import android.os.Looper; import android.util.Log; import com.arialyy.aria.core.Aria; -import com.qweather.sdk.view.HeConfig; import com.tencent.android.tpush.XGIOperateCallback; import com.tencent.android.tpush.XGPushConfig; import com.tencent.android.tpush.XGPushManager; import com.tencent.mmkv.MMKV; -import com.uiui.aios.BuildConfig; -import com.uiui.aios.alarm.AlarmUtils; -import com.uiui.aios.manager.ConnectManager; -import com.uiui.aios.manager.RemoteManager; -import com.uiui.aios.network.NetInterfaceManager; -import com.uiui.aios.service.main.MainService; -import com.uiui.aios.utils.AppUsedTimeUtils; -import com.uiui.aios.utils.SystemUtils; -import com.uiui.aios.utils.Utils; +import com.uiui.zyos.BuildConfig; +import com.uiui.zyos.alarm.AlarmUtils; +import com.uiui.zyos.manager.ConnectManager; +import com.uiui.zyos.manager.RemoteManager; +import com.uiui.zyos.network.NetInterfaceManager; +import com.uiui.zyos.service.main.MainService; +import com.uiui.zyos.utils.AppUsedTimeUtils; +import com.uiui.zyos.utils.SystemUtils; +import com.uiui.zyos.utils.Utils; import java.util.ArrayList; import java.util.List; - public class BaseApplication extends Application { private static final String TAG = BaseApplication.class.getSimpleName(); @@ -48,9 +46,6 @@ public class BaseApplication extends Application { AppUsedTimeUtils.init(this); AlarmUtils.init(this); tpushInit(); - HeConfig.init("HE2206151627491952", "03125bfee8934cf4b640af48e8187c9d"); - //切换至开发版服务 - HeConfig.switchToDevService(); RemoteManager.init(this); ConnectManager.init(this); NetInterfaceManager.init(this); @@ -113,6 +108,4 @@ public class BaseApplication extends Application { } }); } - - -} +} \ No newline at end of file diff --git a/app/src/main/java/com/uiui/aios/base/BaseFragment.java b/app/src/main/java/com/uiui/zyos/base/BaseFragment.java similarity index 99% rename from app/src/main/java/com/uiui/aios/base/BaseFragment.java rename to app/src/main/java/com/uiui/zyos/base/BaseFragment.java index db6765c..469f977 100644 --- a/app/src/main/java/com/uiui/aios/base/BaseFragment.java +++ b/app/src/main/java/com/uiui/zyos/base/BaseFragment.java @@ -1,4 +1,4 @@ -package com.uiui.aios.base; +package com.uiui.zyos.base; import android.os.Bundle; import android.view.View; diff --git a/app/src/main/java/com/uiui/aios/base/BaseFragmentPagerAdapter.java b/app/src/main/java/com/uiui/zyos/base/BaseFragmentPagerAdapter.java similarity index 99% rename from app/src/main/java/com/uiui/aios/base/BaseFragmentPagerAdapter.java rename to app/src/main/java/com/uiui/zyos/base/BaseFragmentPagerAdapter.java index 26c36d3..72aa5d9 100644 --- a/app/src/main/java/com/uiui/aios/base/BaseFragmentPagerAdapter.java +++ b/app/src/main/java/com/uiui/zyos/base/BaseFragmentPagerAdapter.java @@ -1,4 +1,4 @@ -package com.uiui.aios.base; +package com.uiui.zyos.base; import android.util.SparseArray; diff --git a/app/src/main/java/com/uiui/aios/base/BasePresenter.java b/app/src/main/java/com/uiui/zyos/base/BasePresenter.java similarity index 84% rename from app/src/main/java/com/uiui/aios/base/BasePresenter.java rename to app/src/main/java/com/uiui/zyos/base/BasePresenter.java index c2e48aa..27f9213 100644 --- a/app/src/main/java/com/uiui/aios/base/BasePresenter.java +++ b/app/src/main/java/com/uiui/zyos/base/BasePresenter.java @@ -1,4 +1,4 @@ -package com.uiui.aios.base; +package com.uiui.zyos.base; import androidx.annotation.NonNull; diff --git a/app/src/main/java/com/uiui/aios/base/BaseService.java b/app/src/main/java/com/uiui/zyos/base/BaseService.java similarity index 98% rename from app/src/main/java/com/uiui/aios/base/BaseService.java rename to app/src/main/java/com/uiui/zyos/base/BaseService.java index 4d323ab..4347604 100644 --- a/app/src/main/java/com/uiui/aios/base/BaseService.java +++ b/app/src/main/java/com/uiui/zyos/base/BaseService.java @@ -1,4 +1,4 @@ -package com.uiui.aios.base; +package com.uiui.zyos.base; import android.app.Service; import android.content.Intent; diff --git a/app/src/main/java/com/uiui/aios/base/BaseView.java b/app/src/main/java/com/uiui/zyos/base/BaseView.java similarity index 52% rename from app/src/main/java/com/uiui/aios/base/BaseView.java rename to app/src/main/java/com/uiui/zyos/base/BaseView.java index b97fe9a..a347ad1 100644 --- a/app/src/main/java/com/uiui/aios/base/BaseView.java +++ b/app/src/main/java/com/uiui/zyos/base/BaseView.java @@ -1,4 +1,4 @@ -package com.uiui.aios.base; +package com.uiui.zyos.base; public interface BaseView { } diff --git a/app/src/main/java/com/uiui/aios/bean/ActivityBean.java b/app/src/main/java/com/uiui/zyos/bean/ActivityBean.java similarity index 99% rename from app/src/main/java/com/uiui/aios/bean/ActivityBean.java rename to app/src/main/java/com/uiui/zyos/bean/ActivityBean.java index b6ed51c..6e886b5 100644 --- a/app/src/main/java/com/uiui/aios/bean/ActivityBean.java +++ b/app/src/main/java/com/uiui/zyos/bean/ActivityBean.java @@ -1,4 +1,4 @@ -package com.uiui.aios.bean; +package com.uiui.zyos.bean; import java.io.Serializable; diff --git a/app/src/main/java/com/uiui/aios/bean/AlarmClockData.java b/app/src/main/java/com/uiui/zyos/bean/AlarmClockData.java similarity index 98% rename from app/src/main/java/com/uiui/aios/bean/AlarmClockData.java rename to app/src/main/java/com/uiui/zyos/bean/AlarmClockData.java index dfe6d77..5a3ed60 100644 --- a/app/src/main/java/com/uiui/aios/bean/AlarmClockData.java +++ b/app/src/main/java/com/uiui/zyos/bean/AlarmClockData.java @@ -1,4 +1,4 @@ -package com.uiui.aios.bean; +package com.uiui.zyos.bean; import android.text.TextUtils; import android.util.Log; @@ -8,7 +8,7 @@ import androidx.annotation.Nullable; import com.google.gson.Gson; import com.google.gson.JsonParser; -import com.uiui.aios.alarm.AlarmUtils; +import com.uiui.zyos.alarm.AlarmUtils; import java.io.Serializable; import java.text.ParseException; diff --git a/app/src/main/java/com/uiui/aios/bean/AlarmItem.java b/app/src/main/java/com/uiui/zyos/bean/AlarmItem.java similarity index 95% rename from app/src/main/java/com/uiui/aios/bean/AlarmItem.java rename to app/src/main/java/com/uiui/zyos/bean/AlarmItem.java index 4b3a886..14ef473 100644 --- a/app/src/main/java/com/uiui/aios/bean/AlarmItem.java +++ b/app/src/main/java/com/uiui/zyos/bean/AlarmItem.java @@ -1,4 +1,4 @@ -package com.uiui.aios.bean; +package com.uiui.zyos.bean; import java.io.Serializable; diff --git a/app/src/main/java/com/uiui/aios/bean/AppListInfo.java b/app/src/main/java/com/uiui/zyos/bean/AppListInfo.java similarity index 96% rename from app/src/main/java/com/uiui/aios/bean/AppListInfo.java rename to app/src/main/java/com/uiui/zyos/bean/AppListInfo.java index e557432..e4175e8 100644 --- a/app/src/main/java/com/uiui/aios/bean/AppListInfo.java +++ b/app/src/main/java/com/uiui/zyos/bean/AppListInfo.java @@ -1,4 +1,4 @@ -package com.uiui.aios.bean; +package com.uiui.zyos.bean; import android.graphics.Bitmap; diff --git a/app/src/main/java/com/uiui/aios/bean/AppSelectBean.java b/app/src/main/java/com/uiui/zyos/bean/AppSelectBean.java similarity index 96% rename from app/src/main/java/com/uiui/aios/bean/AppSelectBean.java rename to app/src/main/java/com/uiui/zyos/bean/AppSelectBean.java index f0f5a35..75f6160 100644 --- a/app/src/main/java/com/uiui/aios/bean/AppSelectBean.java +++ b/app/src/main/java/com/uiui/zyos/bean/AppSelectBean.java @@ -1,4 +1,4 @@ -package com.uiui.aios.bean; +package com.uiui.zyos.bean; import android.graphics.drawable.Drawable; diff --git a/app/src/main/java/com/uiui/aios/bean/ArticleDetails.java b/app/src/main/java/com/uiui/zyos/bean/ArticleDetails.java similarity index 96% rename from app/src/main/java/com/uiui/aios/bean/ArticleDetails.java rename to app/src/main/java/com/uiui/zyos/bean/ArticleDetails.java index a12813e..4942ce0 100644 --- a/app/src/main/java/com/uiui/aios/bean/ArticleDetails.java +++ b/app/src/main/java/com/uiui/zyos/bean/ArticleDetails.java @@ -1,4 +1,4 @@ -package com.uiui.aios.bean; +package com.uiui.zyos.bean; import java.io.Serializable; diff --git a/app/src/main/java/com/uiui/aios/bean/ArticleInfo.java b/app/src/main/java/com/uiui/zyos/bean/ArticleInfo.java similarity index 97% rename from app/src/main/java/com/uiui/aios/bean/ArticleInfo.java rename to app/src/main/java/com/uiui/zyos/bean/ArticleInfo.java index 9005b48..317ebe5 100644 --- a/app/src/main/java/com/uiui/aios/bean/ArticleInfo.java +++ b/app/src/main/java/com/uiui/zyos/bean/ArticleInfo.java @@ -1,4 +1,4 @@ -package com.uiui.aios.bean; +package com.uiui.zyos.bean; import java.io.Serializable; diff --git a/app/src/main/java/com/uiui/aios/bean/BaseResponse.java b/app/src/main/java/com/uiui/zyos/bean/BaseResponse.java similarity index 94% rename from app/src/main/java/com/uiui/aios/bean/BaseResponse.java rename to app/src/main/java/com/uiui/zyos/bean/BaseResponse.java index 8a3a171..6ca4fe7 100644 --- a/app/src/main/java/com/uiui/aios/bean/BaseResponse.java +++ b/app/src/main/java/com/uiui/zyos/bean/BaseResponse.java @@ -1,4 +1,4 @@ -package com.uiui.aios.bean; +package com.uiui.zyos.bean; import androidx.annotation.NonNull; diff --git a/app/src/main/java/com/uiui/aios/bean/Contact.java b/app/src/main/java/com/uiui/zyos/bean/Contact.java similarity index 97% rename from app/src/main/java/com/uiui/aios/bean/Contact.java rename to app/src/main/java/com/uiui/zyos/bean/Contact.java index c26bd49..67d6d44 100644 --- a/app/src/main/java/com/uiui/aios/bean/Contact.java +++ b/app/src/main/java/com/uiui/zyos/bean/Contact.java @@ -1,4 +1,4 @@ -package com.uiui.aios.bean; +package com.uiui.zyos.bean; import androidx.annotation.NonNull; diff --git a/app/src/main/java/com/uiui/aios/bean/DemandBean.java b/app/src/main/java/com/uiui/zyos/bean/DemandBean.java similarity index 98% rename from app/src/main/java/com/uiui/aios/bean/DemandBean.java rename to app/src/main/java/com/uiui/zyos/bean/DemandBean.java index 6a05de1..1007577 100644 --- a/app/src/main/java/com/uiui/aios/bean/DemandBean.java +++ b/app/src/main/java/com/uiui/zyos/bean/DemandBean.java @@ -1,4 +1,4 @@ -package com.uiui.aios.bean; +package com.uiui.zyos.bean; import java.io.Serializable; diff --git a/app/src/main/java/com/uiui/aios/bean/DesktopIcon.java b/app/src/main/java/com/uiui/zyos/bean/DesktopIcon.java similarity index 97% rename from app/src/main/java/com/uiui/aios/bean/DesktopIcon.java rename to app/src/main/java/com/uiui/zyos/bean/DesktopIcon.java index 0825135..7c1468e 100644 --- a/app/src/main/java/com/uiui/aios/bean/DesktopIcon.java +++ b/app/src/main/java/com/uiui/zyos/bean/DesktopIcon.java @@ -1,7 +1,6 @@ -package com.uiui.aios.bean; +package com.uiui.zyos.bean; import android.content.Context; -import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.graphics.drawable.Drawable; diff --git a/app/src/main/java/com/uiui/aios/bean/GoodsDetails.java b/app/src/main/java/com/uiui/zyos/bean/GoodsDetails.java similarity index 98% rename from app/src/main/java/com/uiui/aios/bean/GoodsDetails.java rename to app/src/main/java/com/uiui/zyos/bean/GoodsDetails.java index bcafe80..11a0a2d 100644 --- a/app/src/main/java/com/uiui/aios/bean/GoodsDetails.java +++ b/app/src/main/java/com/uiui/zyos/bean/GoodsDetails.java @@ -1,4 +1,4 @@ -package com.uiui.aios.bean; +package com.uiui.zyos.bean; import java.io.Serializable; diff --git a/app/src/main/java/com/uiui/aios/bean/GoodsInfo.java b/app/src/main/java/com/uiui/zyos/bean/GoodsInfo.java similarity index 98% rename from app/src/main/java/com/uiui/aios/bean/GoodsInfo.java rename to app/src/main/java/com/uiui/zyos/bean/GoodsInfo.java index b3f6af7..6f8a68b 100644 --- a/app/src/main/java/com/uiui/aios/bean/GoodsInfo.java +++ b/app/src/main/java/com/uiui/zyos/bean/GoodsInfo.java @@ -1,4 +1,4 @@ -package com.uiui.aios.bean; +package com.uiui.zyos.bean; import java.io.Serializable; diff --git a/app/src/main/java/com/uiui/aios/bean/HealthCode.java b/app/src/main/java/com/uiui/zyos/bean/HealthCode.java similarity index 93% rename from app/src/main/java/com/uiui/aios/bean/HealthCode.java rename to app/src/main/java/com/uiui/zyos/bean/HealthCode.java index 133c2e3..327eb74 100644 --- a/app/src/main/java/com/uiui/aios/bean/HealthCode.java +++ b/app/src/main/java/com/uiui/zyos/bean/HealthCode.java @@ -1,4 +1,4 @@ -package com.uiui.aios.bean; +package com.uiui.zyos.bean; import java.io.Serializable; diff --git a/app/src/main/java/com/uiui/aios/bean/MapBean.java b/app/src/main/java/com/uiui/zyos/bean/MapBean.java similarity index 98% rename from app/src/main/java/com/uiui/aios/bean/MapBean.java rename to app/src/main/java/com/uiui/zyos/bean/MapBean.java index 19feaa1..e82075b 100644 --- a/app/src/main/java/com/uiui/aios/bean/MapBean.java +++ b/app/src/main/java/com/uiui/zyos/bean/MapBean.java @@ -1,4 +1,4 @@ -package com.uiui.aios.bean; +package com.uiui.zyos.bean; import java.io.Serializable; diff --git a/app/src/main/java/com/uiui/aios/bean/NetDesktopIcon.java b/app/src/main/java/com/uiui/zyos/bean/NetDesktopIcon.java similarity index 97% rename from app/src/main/java/com/uiui/aios/bean/NetDesktopIcon.java rename to app/src/main/java/com/uiui/zyos/bean/NetDesktopIcon.java index f941f55..5364912 100644 --- a/app/src/main/java/com/uiui/aios/bean/NetDesktopIcon.java +++ b/app/src/main/java/com/uiui/zyos/bean/NetDesktopIcon.java @@ -1,4 +1,4 @@ -package com.uiui.aios.bean; +package com.uiui.zyos.bean; import android.graphics.Bitmap; diff --git a/app/src/main/java/com/uiui/aios/bean/SnInfo.java b/app/src/main/java/com/uiui/zyos/bean/SnInfo.java similarity index 99% rename from app/src/main/java/com/uiui/aios/bean/SnInfo.java rename to app/src/main/java/com/uiui/zyos/bean/SnInfo.java index 1d1dd06..3b58ca2 100644 --- a/app/src/main/java/com/uiui/aios/bean/SnInfo.java +++ b/app/src/main/java/com/uiui/zyos/bean/SnInfo.java @@ -1,4 +1,4 @@ -package com.uiui.aios.bean; +package com.uiui.zyos.bean; import androidx.annotation.NonNull; diff --git a/app/src/main/java/com/uiui/aios/bean/SystemSettings.java b/app/src/main/java/com/uiui/zyos/bean/SystemSettings.java similarity index 99% rename from app/src/main/java/com/uiui/aios/bean/SystemSettings.java rename to app/src/main/java/com/uiui/zyos/bean/SystemSettings.java index 81946d5..5beca92 100644 --- a/app/src/main/java/com/uiui/aios/bean/SystemSettings.java +++ b/app/src/main/java/com/uiui/zyos/bean/SystemSettings.java @@ -1,4 +1,4 @@ -package com.uiui.aios.bean; +package com.uiui.zyos.bean; import com.google.gson.Gson; diff --git a/app/src/main/java/com/uiui/aios/bean/UserAvatarInfo.java b/app/src/main/java/com/uiui/zyos/bean/UserAvatarInfo.java similarity index 96% rename from app/src/main/java/com/uiui/aios/bean/UserAvatarInfo.java rename to app/src/main/java/com/uiui/zyos/bean/UserAvatarInfo.java index b538052..babc434 100644 --- a/app/src/main/java/com/uiui/aios/bean/UserAvatarInfo.java +++ b/app/src/main/java/com/uiui/zyos/bean/UserAvatarInfo.java @@ -1,4 +1,4 @@ -package com.uiui.aios.bean; +package com.uiui.zyos.bean; import java.io.Serializable; diff --git a/app/src/main/java/com/uiui/aios/bean/UserId.java b/app/src/main/java/com/uiui/zyos/bean/UserId.java similarity index 91% rename from app/src/main/java/com/uiui/aios/bean/UserId.java rename to app/src/main/java/com/uiui/zyos/bean/UserId.java index 635cb91..2513709 100644 --- a/app/src/main/java/com/uiui/aios/bean/UserId.java +++ b/app/src/main/java/com/uiui/zyos/bean/UserId.java @@ -1,4 +1,4 @@ -package com.uiui.aios.bean; +package com.uiui.zyos.bean; import java.io.Serializable; diff --git a/app/src/main/java/com/uiui/aios/config/CommonConfig.java b/app/src/main/java/com/uiui/zyos/config/CommonConfig.java similarity index 96% rename from app/src/main/java/com/uiui/aios/config/CommonConfig.java rename to app/src/main/java/com/uiui/zyos/config/CommonConfig.java index adb0a22..86485d6 100644 --- a/app/src/main/java/com/uiui/aios/config/CommonConfig.java +++ b/app/src/main/java/com/uiui/zyos/config/CommonConfig.java @@ -1,4 +1,4 @@ -package com.uiui.aios.config; +package com.uiui.zyos.config; public class CommonConfig { /*是否激活接口请求缓存*/ diff --git a/app/src/main/java/com/uiui/aios/dialog/CustomDialog.java b/app/src/main/java/com/uiui/zyos/dialog/CustomDialog.java similarity index 99% rename from app/src/main/java/com/uiui/aios/dialog/CustomDialog.java rename to app/src/main/java/com/uiui/zyos/dialog/CustomDialog.java index eeac082..344e31a 100644 --- a/app/src/main/java/com/uiui/aios/dialog/CustomDialog.java +++ b/app/src/main/java/com/uiui/zyos/dialog/CustomDialog.java @@ -1,4 +1,4 @@ -package com.uiui.aios.dialog; +package com.uiui.zyos.dialog; import android.content.Context; @@ -10,7 +10,7 @@ import android.widget.TextView; import androidx.appcompat.app.AlertDialog; -import com.uiui.aios.R; +import com.uiui.zyos.R; /** diff --git a/app/src/main/java/com/uiui/aios/dialog/PasswordDialog.java b/app/src/main/java/com/uiui/zyos/dialog/PasswordDialog.java similarity index 99% rename from app/src/main/java/com/uiui/aios/dialog/PasswordDialog.java rename to app/src/main/java/com/uiui/zyos/dialog/PasswordDialog.java index aba1a93..1a4038c 100644 --- a/app/src/main/java/com/uiui/aios/dialog/PasswordDialog.java +++ b/app/src/main/java/com/uiui/zyos/dialog/PasswordDialog.java @@ -1,4 +1,4 @@ -package com.uiui.aios.dialog; +package com.uiui.zyos.dialog; import android.content.Context; @@ -12,7 +12,7 @@ import android.widget.TextView; import androidx.appcompat.app.AlertDialog; -import com.uiui.aios.R; +import com.uiui.zyos.R; /** diff --git a/app/src/main/java/com/uiui/aios/dialog/PrivacyPolicyDialog.java b/app/src/main/java/com/uiui/zyos/dialog/PrivacyPolicyDialog.java similarity index 97% rename from app/src/main/java/com/uiui/aios/dialog/PrivacyPolicyDialog.java rename to app/src/main/java/com/uiui/zyos/dialog/PrivacyPolicyDialog.java index b0f0d8d..b02d067 100644 --- a/app/src/main/java/com/uiui/aios/dialog/PrivacyPolicyDialog.java +++ b/app/src/main/java/com/uiui/zyos/dialog/PrivacyPolicyDialog.java @@ -1,9 +1,8 @@ -package com.uiui.aios.dialog; +package com.uiui.zyos.dialog; import android.content.Context; import android.content.Intent; import android.graphics.Color; -import android.net.Uri; import android.os.Bundle; import android.text.Spannable; import android.text.SpannableString; @@ -18,8 +17,8 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; -import com.uiui.aios.R; -import com.uiui.aios.activity.PolicyActivity; +import com.uiui.zyos.R; +import com.uiui.zyos.activity.PolicyActivity; public class PrivacyPolicyDialog extends AlertDialog { private Context mContext; diff --git a/app/src/main/java/com/uiui/aios/dialog/SingleDialog.java b/app/src/main/java/com/uiui/zyos/dialog/SingleDialog.java similarity index 99% rename from app/src/main/java/com/uiui/aios/dialog/SingleDialog.java rename to app/src/main/java/com/uiui/zyos/dialog/SingleDialog.java index 5b96579..573def3 100644 --- a/app/src/main/java/com/uiui/aios/dialog/SingleDialog.java +++ b/app/src/main/java/com/uiui/zyos/dialog/SingleDialog.java @@ -1,4 +1,4 @@ -package com.uiui.aios.dialog; +package com.uiui.zyos.dialog; import android.content.Context; @@ -10,7 +10,7 @@ import android.widget.TextView; import androidx.appcompat.app.AlertDialog; -import com.uiui.aios.R; +import com.uiui.zyos.R; /** diff --git a/app/src/main/java/com/uiui/aios/disklrucache/CacheHelper.java b/app/src/main/java/com/uiui/zyos/disklrucache/CacheHelper.java similarity index 99% rename from app/src/main/java/com/uiui/aios/disklrucache/CacheHelper.java rename to app/src/main/java/com/uiui/zyos/disklrucache/CacheHelper.java index 1591ce9..70ed83f 100644 --- a/app/src/main/java/com/uiui/aios/disklrucache/CacheHelper.java +++ b/app/src/main/java/com/uiui/zyos/disklrucache/CacheHelper.java @@ -1,4 +1,4 @@ -package com.uiui.aios.disklrucache; +package com.uiui.zyos.disklrucache; import android.content.Context; import android.graphics.Bitmap; diff --git a/app/src/main/java/com/uiui/aios/disklrucache/Utils.java b/app/src/main/java/com/uiui/zyos/disklrucache/Utils.java similarity index 98% rename from app/src/main/java/com/uiui/aios/disklrucache/Utils.java rename to app/src/main/java/com/uiui/zyos/disklrucache/Utils.java index 59970d7..be41a6e 100644 --- a/app/src/main/java/com/uiui/aios/disklrucache/Utils.java +++ b/app/src/main/java/com/uiui/zyos/disklrucache/Utils.java @@ -1,4 +1,4 @@ -package com.uiui.aios.disklrucache; +package com.uiui.zyos.disklrucache; import android.content.Context; import android.content.pm.PackageInfo; diff --git a/app/src/main/java/com/uiui/aios/fragment/custom/CustomContact.java b/app/src/main/java/com/uiui/zyos/fragment/custom/CustomContact.java similarity index 72% rename from app/src/main/java/com/uiui/aios/fragment/custom/CustomContact.java rename to app/src/main/java/com/uiui/zyos/fragment/custom/CustomContact.java index 45b21dc..d79dbcb 100644 --- a/app/src/main/java/com/uiui/aios/fragment/custom/CustomContact.java +++ b/app/src/main/java/com/uiui/zyos/fragment/custom/CustomContact.java @@ -1,11 +1,11 @@ -package com.uiui.aios.fragment.custom; +package com.uiui.zyos.fragment.custom; -import com.uiui.aios.base.BasePresenter; -import com.uiui.aios.base.BaseView; -import com.uiui.aios.bean.AlarmClockData; -import com.uiui.aios.bean.SnInfo; -import com.uiui.aios.bean.UserAvatarInfo; +import com.uiui.zyos.base.BasePresenter; +import com.uiui.zyos.base.BaseView; +import com.uiui.zyos.bean.AlarmClockData; +import com.uiui.zyos.bean.SnInfo; +import com.uiui.zyos.bean.UserAvatarInfo; import java.util.List; diff --git a/app/src/main/java/com/uiui/aios/fragment/custom/CustomFragment.java b/app/src/main/java/com/uiui/zyos/fragment/custom/CustomFragment.java similarity index 63% rename from app/src/main/java/com/uiui/aios/fragment/custom/CustomFragment.java rename to app/src/main/java/com/uiui/zyos/fragment/custom/CustomFragment.java index d3bf947..8833aae 100644 --- a/app/src/main/java/com/uiui/aios/fragment/custom/CustomFragment.java +++ b/app/src/main/java/com/uiui/zyos/fragment/custom/CustomFragment.java @@ -1,4 +1,4 @@ -package com.uiui.aios.fragment.custom; +package com.uiui.zyos.fragment.custom; import android.app.Activity; import android.app.ActivityManager; @@ -36,43 +36,30 @@ import com.blankj.utilcode.util.NetworkUtils; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.king.view.circleprogressview.CircleProgressView; -import com.qweather.sdk.bean.base.Code; -import com.qweather.sdk.bean.base.Lang; -import com.qweather.sdk.bean.base.Unit; -import com.qweather.sdk.bean.weather.WeatherHourlyBean; -import com.qweather.sdk.bean.weather.WeatherNowBean; -import com.qweather.sdk.view.QWeather; import com.tencent.mmkv.MMKV; -import com.uiui.aios.BuildConfig; -import com.uiui.aios.R; -import com.uiui.aios.activity.EmergencyActivity; -import com.uiui.aios.activity.QuickAppActivity; -import com.uiui.aios.activity.alarm.AlarmClockActivity; -import com.uiui.aios.activity.code.FamilySpaceActivity; -import com.uiui.aios.activity.contact.ContactActivity; -import com.uiui.aios.activity.weather.WeatherActivity; -import com.uiui.aios.adapter.SOSNnmberAdapter; -import com.uiui.aios.base.BaseFragment; -import com.uiui.aios.bean.AlarmClockData; -import com.uiui.aios.bean.AlarmItem; -import com.uiui.aios.bean.Contact; -import com.uiui.aios.bean.HealthCode; -import com.uiui.aios.bean.SnInfo; -import com.uiui.aios.bean.UserAvatarInfo; -import com.uiui.aios.config.CommonConfig; -import com.uiui.aios.dialog.SingleDialog; -import com.uiui.aios.disklrucache.CacheHelper; -import com.uiui.aios.manager.RemoteManager; -import com.uiui.aios.network.NetInterfaceManager; -import com.uiui.aios.network.URLAddress; -import com.uiui.aios.tpush.MessageReceiver; -import com.uiui.aios.utils.ApkUtils; -import com.uiui.aios.utils.AppUtil; -import com.uiui.aios.utils.DataUtil; -import com.uiui.aios.utils.NetStateUtils; -import com.uiui.aios.utils.SchemeUtils; -import com.uiui.aios.utils.ToastUtil; -import com.uiui.aios.utils.Utils; +import com.uiui.zyos.BuildConfig; +import com.uiui.zyos.R; +import com.uiui.zyos.base.BaseFragment; +import com.uiui.zyos.bean.AlarmClockData; +import com.uiui.zyos.bean.AlarmItem; +import com.uiui.zyos.bean.Contact; +import com.uiui.zyos.bean.HealthCode; +import com.uiui.zyos.bean.SnInfo; +import com.uiui.zyos.bean.UserAvatarInfo; +import com.uiui.zyos.config.CommonConfig; +import com.uiui.zyos.dialog.SingleDialog; +import com.uiui.zyos.disklrucache.CacheHelper; +import com.uiui.zyos.manager.RemoteManager; +import com.uiui.zyos.network.NetInterfaceManager; +import com.uiui.zyos.network.UrlAddress; +import com.uiui.zyos.tpush.MessageReceiver; +import com.uiui.zyos.utils.ApkUtils; +import com.uiui.zyos.utils.AppUtil; +import com.uiui.zyos.utils.DataUtil; +import com.uiui.zyos.utils.NetStateUtils; +import com.uiui.zyos.utils.SchemeUtils; +import com.uiui.zyos.utils.ToastUtil; +import com.uiui.zyos.utils.Utils; import java.lang.reflect.Method; import java.lang.reflect.Type; @@ -162,7 +149,6 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom private List alarmItemList; // private NotificationAdapter notificationAdapter; // private AlarmClockAdapter alarmClockAdapter; - private SOSNnmberAdapter sosNnmberAdapter; private MMKV mMMKV; private Activity mContext; private ContentResolver mCRv; @@ -267,7 +253,6 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom private void initView() { Log.e(TAG, "initView: " + Utils.getBatteryLevel(mContext)); - registerRefreshReceiver(); registerBatteryReceiver(); registerAlarmClockReceiver(); registTimeReceiver(); @@ -299,7 +284,6 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom if (checkExpired()) { showExpired(); } else { - getAlarm(); } } }); @@ -323,16 +307,12 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom } else { // wifi_ssid.setText("WiFi未连接"); } - sosNnmberAdapter = new SOSNnmberAdapter(); - rv_sos.setLayoutManager(new LinearLayoutManager(mContext)); - rv_sos.setAdapter(sosNnmberAdapter); cl_sos.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (checkExpired()) { showExpired(); } else { - checkSosNumber(); } } }); @@ -342,7 +322,7 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom if (checkExpired()) { showExpired(); } else { - startActivity(new Intent(mContext, WeatherActivity.class)); + } } }); @@ -365,7 +345,6 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom cl_health.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - getHealthCode(); } }); cl_contact.setOnClickListener(new View.OnClickListener() { @@ -374,7 +353,6 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom if (checkExpired()) { showExpired(); } else { - checkContact(); } } }); @@ -384,7 +362,6 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom if (checkExpired()) { showExpired(); } else { - openScheme(SchemeUtils.SCHEME_HAND); } } }); @@ -394,26 +371,13 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom if (checkExpired()) { showExpired(); } else { - if (TextUtils.isEmpty(quickAppPackagesName)) { - int is_quick = Settings.Global.getInt(mContext.getContentResolver(), QuickAppActivity.QUICK_APP_ENABLED_KEY, 0); - if (is_quick == 0) { - startActivity(new Intent(mContext, QuickAppActivity.class)); - } - } else { - ApkUtils.openPackage(mContext, quickAppPackagesName); - } + } } }); cl_app.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { - int is_quick = Settings.Global.getInt(mContext.getContentResolver(), QuickAppActivity.QUICK_APP_ENABLED_KEY, 0); - if (is_quick == 0) { - startActivity(new Intent(mContext, QuickAppActivity.class)); - } else { - ToastUtil.show("已在小程序设置"); - } return false; } }); @@ -486,66 +450,6 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom } } - private void checkSosNumber() { - NetInterfaceManager.getInstance().getContactList(new NetInterfaceManager.ContactCallback() { - @Override - public void setContact(List contactList) { - - } - - @Override - public void setEmergencyContact(List emergencyContact) { - if (emergencyContact == null || emergencyContact.size() == 0) { - showNoData("温馨提示", "请在小程序上面设置紧急联系人"); - } else { - Intent intent = new Intent(mContext, EmergencyActivity.class); -// intent.putExtra("setting_sos", phone); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - mContext.startActivity(intent); - } - } - - @Override - public void setEmpty() { - showNoData("温馨提示", "请在小程序上面设置紧急联系人"); - } - - @Override - public void onComplete() { - - } - }); - } - - private void checkContact() { -// NetInterfaceManager.getInstance().getContactList(new NetInterfaceManager.ContactCallback() { -// @Override -// public void setContact(List contactList) { -//// if (contactList == null || contactList.size() == 0) { -//// showNoData("温馨提示", "请在小程序上设置通讯录"); -//// } else { -//// startActivity(new Intent(mContext, ContactActivity.class)); -//// } -// } -// -// @Override -// public void setEmergencyContact(List emergencyContact) { -// -// } -// -// @Override -// public void setEmpty() { -//// showNoData("温馨提示", "请在小程序上设置通讯录"); -// } -// -// @Override -// public void onComplete() { -// -// } -// }); - startActivity(new Intent(mContext, ContactActivity.class)); - } - private void initData() { mCustomPresenter.getSnIsActivation(); initAmap(); @@ -616,115 +520,13 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom @Override public void onResume() { super.onResume(); - setSosNumber(); - setQuickApp(); mCustomPresenter.getSnIsActivation(); } - private String quickAppPackagesName; - - private void setQuickApp() { - quickAppPackagesName = Settings.Global.getString(mCRv, QuickAppActivity.QUICK_APP_KEY); - Log.e(TAG, "setQuickApp: " + quickAppPackagesName); - if (!TextUtils.isEmpty(quickAppPackagesName)) { - ApplicationInfo applicationInfo = null; - PackageManager pm = mContext.getPackageManager(); - try { - applicationInfo = pm.getApplicationInfo(quickAppPackagesName, 0); - } catch (PackageManager.NameNotFoundException e) { - e.printStackTrace(); - } - if (applicationInfo != null) { - iv_app.setImageDrawable(applicationInfo.loadIcon(pm)); - } - } - } - - private void openScheme(String uri) { - int is_health = mMMKV.decodeInt("is_health", 0); - if (is_health == 0) { - ToastUtil.show("AI健康功能已关闭"); - return; - } - SingleDialog dialog = new SingleDialog(mContext); - dialog.setTitle("温馨提示") - .setMessage("网络不可用") - .setPositive("确定") -// .setNegtive("拒绝") -// .setSingle(true) - .setOnClickBottomListener(new SingleDialog.OnClickBottomListener() { - @Override - public void onPositiveClick() { - dialog.dismiss(); - } - }); -// dialog.setCancelable(false); - if (!NetStateUtils.isNetworkConnected(mContext)) { - dialog.show(); - return; - } - - NetInterfaceManager.getInstance().getSnInfo(lifecycleSubject, new NetInterfaceManager.SnInfoCallback() { - @Override - public void setSnInfo(SnInfo snInfo) { - if (snInfo == null || TextUtils.isEmpty(snInfo.getMobile())) { - dialog.setMessage("绑定手机才能使用"); - dialog.show(); - } else { - ApkUtils.openApp(mContext, "com.uiui.health"); - SchemeUtils.openScheme(mContext, uri); - } - } - }); - } - - public void setSosNumber() { - String jsonString = mCacheHelper.getAsString(URLAddress.GET_SETTINGS); - //为 "" 是已经请求成功的 - if (jsonString == null) { - // rv_sos.setVisibility(View.GONE); -// iv_sos.setVisibility(View.VISIBLE); - } else { - Gson gson = new Gson(); - Type type = new TypeToken>() { - }.getType(); - List setting_sos = gson.fromJson(jsonString, type); - if (setting_sos == null || setting_sos.size() == 0) { - // rv_sos.setVisibility(View.VISIBLE); -// iv_sos.setVisibility(View.GONE); - sosNnmberAdapter.setPhoneNumberList(setting_sos); - } else { - // rv_sos.setVisibility(View.GONE); -// iv_sos.setVisibility(View.VISIBLE); - } - } - } private void initAmap() { String city = RemoteManager.getInstance().getCity(); tv_location.setText(city); - getweather(RemoteManager.getInstance().getLongitude(), RemoteManager.getInstance().getLatitude()); - } - - private void getAlarm() { - NetInterfaceManager.getInstance().getAlarmClock(new NetInterfaceManager.AlarmClockCallback() { - @Override - public void setAlarmClock(List alarmClockList) { - startActivity(new Intent(mContext, AlarmClockActivity.class)); - } - - @Override - public void setAlarmClockEmpty() { - showNoData("温馨提示", "请在小程序上设置爱心闹钟"); -// rv_noti.setVisibility(View.GONE); - iv_note_nodata.setVisibility(View.VISIBLE); - } - - @Override - public void onError() { - - } - }); } private void showNoData(String title, String msg) { @@ -744,96 +546,6 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom dialog.show(); } - private void getHealthCode() { - NetInterfaceManager.getInstance().getHealthCode(new NetInterfaceManager.HealthCodeCallback() { - @Override - public void setHealthCode(List healthCode) { - startActivity(new Intent(mContext, FamilySpaceActivity.class)); - } - - @Override - public void noData() { - showNoData("温馨提示", "请在小程序上设置健康码"); - } - - @Override - public void onError() { - - } - }); - } - - private void getweather(double longitude, double latitude) { - String location = longitude + "," + latitude; - Log.e(TAG, "getweather: " + location); - /** - * 实况天气数据 - * @param location 所查询的地区,可通过该地区名称、ID、IP和经纬度进行查询经纬度格式:经度,纬度 - * (英文,分隔,十进制格式,北纬东经为正,南纬西经为负) - * @param lang (选填)多语言,可以不使用该参数,默认为简体中文 - * @param unit (选填)单位选择,公制(m)或英制(i),默认为公制单位 - * @param listener 网络访问结果回调 - */ - QWeather.getWeatherNow(mContext, 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(); -// String imageName = "he" + now.getIcon(); -// int resId = getResources().getIdentifier(imageName, "drawable", mContext.getPackageName()); -// iv_pic.setImageDrawable(mContext.getDrawable(resId)); - tv_temp.setText(now.getTemp() + "℃"); - tv_weather.setText(now.getText()); - } else { - //在此查看返回数据失败的原因 - Code code = weatherBean.getCode(); - Log.d("getWeatherNow", "failed code: " + code); - } - } - }); - - QWeather.getWeather24Hourly(mContext, 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); - String imageName = "he" + now.getIcon(); - Log.e(TAG, "onSuccess: " + imageName); - if (isAdded()) { - int resId = getResources().getIdentifier(imageName, "drawable", mContext.getPackageName()); - Log.e(TAG, "onSuccess: " + resId); - if (resId == 0) { - iv_pic.setImageDrawable(mContext.getDrawable(R.drawable.he100)); - } else { - iv_pic.setImageDrawable(mContext.getDrawable(resId)); - } - tv_temp.setText(now.getTemp() + "℃"); - } - } - } else { - //在此查看返回数据失败的原因 - Code code = weatherHourlyBean.getCode(); - Log.e("getWeather24Hourly", "failed code: " + code); - } - } - }); - } - private void killBackgroundApp() { List pkgList = ApkUtils.queryFilterAppList(mContext); for (String pkg : pkgList) { @@ -876,24 +588,6 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom float x2 = (((total - avail) / (float) total)); } - private RefreshBroadcastReceiver mRefreshBroadcastReceiver; - - private void registerRefreshReceiver() { - if (mRefreshBroadcastReceiver == null) { - mRefreshBroadcastReceiver = new RefreshBroadcastReceiver(); - } - IntentFilter filter = new IntentFilter(); - filter.addAction(QuickAppActivity.QUICK_APP_REFRESH_KEY); - mContext.registerReceiver(mRefreshBroadcastReceiver, filter); - } - - class RefreshBroadcastReceiver extends BroadcastReceiver { - @Override - public void onReceive(Context context, Intent intent) { - Log.e(TAG, "onReceive: " + intent.getAction()); - setQuickApp(); - } - } private void registerAlarmClockReceiver() { if (null == mAlarmClockReceiver) { diff --git a/app/src/main/java/com/uiui/aios/fragment/custom/CustomPresenter.java b/app/src/main/java/com/uiui/zyos/fragment/custom/CustomPresenter.java similarity index 88% rename from app/src/main/java/com/uiui/aios/fragment/custom/CustomPresenter.java rename to app/src/main/java/com/uiui/zyos/fragment/custom/CustomPresenter.java index 7567ff6..26dc9dd 100644 --- a/app/src/main/java/com/uiui/aios/fragment/custom/CustomPresenter.java +++ b/app/src/main/java/com/uiui/zyos/fragment/custom/CustomPresenter.java @@ -1,26 +1,12 @@ -package com.uiui.aios.fragment.custom; +package com.uiui.zyos.fragment.custom; import android.content.Context; import android.provider.Settings; -import android.util.Log; -import com.google.gson.JsonObject; -import com.trello.rxlifecycle4.RxLifecycle; import com.trello.rxlifecycle4.android.FragmentEvent; -import com.uiui.aios.alarm.AlarmUtils; -import com.uiui.aios.bean.AlarmClockData; -import com.uiui.aios.bean.BaseResponse; -import com.uiui.aios.bean.SnInfo; -import com.uiui.aios.config.CommonConfig; -import com.uiui.aios.network.NetInterfaceManager; -import com.uiui.aios.utils.GsonUtils; - -import java.util.ArrayList; -import java.util.List; +import com.uiui.zyos.config.CommonConfig; 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 CustomPresenter implements CustomContact.Presenter { diff --git a/app/src/main/java/com/uiui/aios/iconpostition/IconPositionDBHelper.java b/app/src/main/java/com/uiui/zyos/iconpostition/IconPositionDBHelper.java similarity index 96% rename from app/src/main/java/com/uiui/aios/iconpostition/IconPositionDBHelper.java rename to app/src/main/java/com/uiui/zyos/iconpostition/IconPositionDBHelper.java index 261a73e..dd903b9 100644 --- a/app/src/main/java/com/uiui/aios/iconpostition/IconPositionDBHelper.java +++ b/app/src/main/java/com/uiui/zyos/iconpostition/IconPositionDBHelper.java @@ -1,4 +1,4 @@ -package com.uiui.aios.iconpostition; +package com.uiui.zyos.iconpostition; import android.content.Context; import android.database.sqlite.SQLiteDatabase; diff --git a/app/src/main/java/com/uiui/aios/iconpostition/IconPositionManager.java b/app/src/main/java/com/uiui/zyos/iconpostition/IconPositionManager.java similarity index 96% rename from app/src/main/java/com/uiui/aios/iconpostition/IconPositionManager.java rename to app/src/main/java/com/uiui/zyos/iconpostition/IconPositionManager.java index 402e968..88934ad 100644 --- a/app/src/main/java/com/uiui/aios/iconpostition/IconPositionManager.java +++ b/app/src/main/java/com/uiui/zyos/iconpostition/IconPositionManager.java @@ -1,4 +1,4 @@ -package com.uiui.aios.iconpostition; +package com.uiui.zyos.iconpostition; import android.annotation.SuppressLint; import android.content.ContentValues; @@ -6,8 +6,8 @@ import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; -import com.uiui.aios.bean.NetDesktopIcon; -import com.uiui.aios.utils.ApkUtils; +import com.uiui.zyos.bean.NetDesktopIcon; +import com.uiui.zyos.utils.ApkUtils; import java.util.ArrayList; import java.util.HashMap; diff --git a/app/src/main/java/com/uiui/aios/iconpostition/IconUtils.java b/app/src/main/java/com/uiui/zyos/iconpostition/IconUtils.java similarity index 97% rename from app/src/main/java/com/uiui/aios/iconpostition/IconUtils.java rename to app/src/main/java/com/uiui/zyos/iconpostition/IconUtils.java index 7c0d06c..ee4e817 100644 --- a/app/src/main/java/com/uiui/aios/iconpostition/IconUtils.java +++ b/app/src/main/java/com/uiui/zyos/iconpostition/IconUtils.java @@ -1,4 +1,4 @@ -package com.uiui.aios.iconpostition; +package com.uiui.zyos.iconpostition; import android.content.Context; import android.content.pm.ApplicationInfo; diff --git a/app/src/main/java/com/uiui/aios/manager/ConnectManager.java b/app/src/main/java/com/uiui/zyos/manager/ConnectManager.java similarity index 98% rename from app/src/main/java/com/uiui/aios/manager/ConnectManager.java rename to app/src/main/java/com/uiui/zyos/manager/ConnectManager.java index 7d7ece1..99255c6 100644 --- a/app/src/main/java/com/uiui/aios/manager/ConnectManager.java +++ b/app/src/main/java/com/uiui/zyos/manager/ConnectManager.java @@ -1,11 +1,11 @@ -package com.uiui.aios.manager; +package com.uiui.zyos.manager; import android.annotation.SuppressLint; import android.content.Context; import android.util.Log; import com.tencent.mmkv.MMKV; -import com.uiui.aios.utils.TimeUtils; +import com.uiui.zyos.utils.TimeUtils; public class ConnectManager { private static final String TAG = ConnectManager.class.getSimpleName(); diff --git a/app/src/main/java/com/uiui/aios/manager/ConnectMode.java b/app/src/main/java/com/uiui/zyos/manager/ConnectMode.java similarity index 82% rename from app/src/main/java/com/uiui/aios/manager/ConnectMode.java rename to app/src/main/java/com/uiui/zyos/manager/ConnectMode.java index ea36582..8c67682 100644 --- a/app/src/main/java/com/uiui/aios/manager/ConnectMode.java +++ b/app/src/main/java/com/uiui/zyos/manager/ConnectMode.java @@ -1,4 +1,4 @@ -package com.uiui.aios.manager; +package com.uiui.zyos.manager; public enum ConnectMode { DEFAULT, diff --git a/app/src/main/java/com/uiui/aios/manager/RemoteManager.java b/app/src/main/java/com/uiui/zyos/manager/RemoteManager.java similarity index 96% rename from app/src/main/java/com/uiui/aios/manager/RemoteManager.java rename to app/src/main/java/com/uiui/zyos/manager/RemoteManager.java index 40f592b..cc6c55a 100644 --- a/app/src/main/java/com/uiui/aios/manager/RemoteManager.java +++ b/app/src/main/java/com/uiui/zyos/manager/RemoteManager.java @@ -1,4 +1,4 @@ -package com.uiui.aios.manager; +package com.uiui.zyos.manager; import android.annotation.SuppressLint; import android.content.ComponentName; @@ -12,9 +12,9 @@ import android.util.Log; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.tencent.mmkv.MMKV; -import com.uiui.aios.bean.MapBean; -import com.uiui.aios.config.CommonConfig; -import com.uiui.aios.disklrucache.CacheHelper; +import com.uiui.zyos.bean.MapBean; +import com.uiui.zyos.config.CommonConfig; +import com.uiui.zyos.disklrucache.CacheHelper; import com.uiui.sn.IGetInfoInterface; import java.lang.reflect.Type; diff --git a/app/src/main/java/com/uiui/zyos/network/NetInterfaceManager.java b/app/src/main/java/com/uiui/zyos/network/NetInterfaceManager.java new file mode 100644 index 0000000..cef643b --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/network/NetInterfaceManager.java @@ -0,0 +1,110 @@ +package com.uiui.zyos.network; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.util.Log; + +import com.tencent.mmkv.MMKV; +import com.uiui.zyos.disklrucache.CacheHelper; +import com.uiui.zyos.network.interceptor.RepeatRequestInterceptor; + +import java.io.File; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.TimeUnit; + +import okhttp3.Cache; +import okhttp3.Headers; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import retrofit2.Retrofit; +import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory; +import retrofit2.converter.gson.GsonConverterFactory; + +public class NetInterfaceManager { + @SuppressLint("StaticFieldLeak") + private static NetInterfaceManager INSTANCE; + private Context mContext; + private CacheHelper mCacheHelper; + + private Retrofit mRetrofit; + private OkHttpClient okHttpClient; + private MMKV mMMKV = MMKV.defaultMMKV(); + + private final ConcurrentHashMap requestIdsMap = new ConcurrentHashMap<>(); + //超时时间 + private static int timeOut = 30; + // 缓存文件最大限制大小20M + private static long cacheSize = 1024 * 1024 * 64; + + public static final String HTTP_KEY = "YTM3YTAxNTJmMmZmNzkyM2E2YzIwZjlhZTc0NzNmMGI="; + public static final String CUSTOM_REPEAT_REQ_PROTOCOL = "MY_CUSTOM_REPEAT_REQ_PROTOCOL"; + + private NetInterfaceManager(Context context) { + this.mContext = context; + this.mCacheHelper = new CacheHelper(context); + if (okHttpClient == null) { + + //如果无法生存缓存文件目录,检测权限使用已经加上,检测手机是否把文件读写权限禁止了 + OkHttpClient.Builder builder = new OkHttpClient.Builder(); + builder.connectTimeout(timeOut, TimeUnit.SECONDS); // 设置连接超时时间 + builder.writeTimeout(timeOut, TimeUnit.SECONDS);// 设置写入超时时间 + builder.readTimeout(timeOut, TimeUnit.SECONDS);// 设置读取数据超时时间 + builder.retryOnConnectionFailure(true);// 设置进行连接失败重试 + builder.addInterceptor(new RepeatRequestInterceptor()); + + // 设置缓存文件路径 + String cacheDirectory = mContext.getExternalCacheDir().getAbsolutePath() + "/OkHttpCache"; + Cache cache = new Cache(new File(cacheDirectory), cacheSize); + builder.cache(cache);// 设置缓存 + okHttpClient = builder.build(); + } + + if (mRetrofit == null) { + mRetrofit = new Retrofit.Builder() + .client(okHttpClient) + .baseUrl(UrlAddress.ROOT_URL) + .addConverterFactory(GsonConverterFactory.create()) + .addCallAdapterFactory(RxJava3CallAdapterFactory.create()) + .build(); + } + } + + /** + * 打印全局统一拦截添加的Http Headers + *

+ * 全局拦截的http 没法在配置中直接打印处理,因为先http 请求然后打印然后拦截添加的 + * + * @param request + */ + private static void logRequestHeaders(Request request) { + Log.e("OKhttp ", " 开始打印HTTP请求 Headers \n"); + Headers headers = request.headers(); + for (int i = 0, count = headers.size(); i < count; i++) { + String name = headers.name(i); + // Skip headers from the request body as they are explicitly logged above. + if (!"Content-Type".equalsIgnoreCase(name) && !"Content-Length".equalsIgnoreCase(name)) { + Log.e("OKhttp: " + i + " ", name + ": " + headers.value(i)); + } + } + Log.e("OKhttp ", " 打印HTTP请求完成 Headers \n"); + } + + public static void init(Context context) { + if (INSTANCE == null) { + INSTANCE = new NetInterfaceManager(context); + } + } + + public static NetInterfaceManager getInstance() { + if (INSTANCE == null) { + throw new IllegalStateException("You must be init NetworkManager first"); + } + return INSTANCE; + } + + public OkHttpClient getOkHttpClient() { + return okHttpClient; + } + + +} diff --git a/app/src/main/java/com/uiui/zyos/network/UrlAddress.java b/app/src/main/java/com/uiui/zyos/network/UrlAddress.java new file mode 100644 index 0000000..942cfc4 --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/network/UrlAddress.java @@ -0,0 +1,7 @@ +package com.uiui.zyos.network; + +public class UrlAddress { + public static final String ROOT_URL = "https://led.zuoyepad.com/android/"; + + +} diff --git a/app/src/main/java/com/uiui/aios/network/interceptor/RepeatRequestInterceptor.java b/app/src/main/java/com/uiui/zyos/network/interceptor/RepeatRequestInterceptor.java similarity index 97% rename from app/src/main/java/com/uiui/aios/network/interceptor/RepeatRequestInterceptor.java rename to app/src/main/java/com/uiui/zyos/network/interceptor/RepeatRequestInterceptor.java index 3da88e4..cd501ac 100644 --- a/app/src/main/java/com/uiui/aios/network/interceptor/RepeatRequestInterceptor.java +++ b/app/src/main/java/com/uiui/zyos/network/interceptor/RepeatRequestInterceptor.java @@ -1,9 +1,9 @@ -package com.uiui.aios.network.interceptor; +package com.uiui.zyos.network.interceptor; import android.util.Log; -import com.uiui.aios.BuildConfig; -import com.uiui.aios.utils.MD5Util; +import com.uiui.zyos.BuildConfig; +import com.uiui.zyos.utils.MD5Util; import org.jetbrains.annotations.NotNull; diff --git a/app/src/main/java/com/uiui/aios/receiver/BootReceiver.java b/app/src/main/java/com/uiui/zyos/receiver/BootReceiver.java similarity index 94% rename from app/src/main/java/com/uiui/aios/receiver/BootReceiver.java rename to app/src/main/java/com/uiui/zyos/receiver/BootReceiver.java index bd097cd..79f3585 100644 --- a/app/src/main/java/com/uiui/aios/receiver/BootReceiver.java +++ b/app/src/main/java/com/uiui/zyos/receiver/BootReceiver.java @@ -1,4 +1,4 @@ -package com.uiui.aios.receiver; +package com.uiui.zyos.receiver; import android.content.BroadcastReceiver; import android.content.Context; @@ -6,10 +6,6 @@ import android.content.Intent; import android.text.TextUtils; import android.util.Log; -import com.uiui.aios.network.NetInterfaceManager; -import com.uiui.aios.service.main.MainService; -import com.uiui.aios.tpush.MessageReceiver; - import java.util.concurrent.TimeUnit; import io.reactivex.rxjava3.core.Observable; diff --git a/app/src/main/java/com/uiui/aios/receiver/InstallResultReceiver.java b/app/src/main/java/com/uiui/zyos/receiver/InstallResultReceiver.java similarity index 98% rename from app/src/main/java/com/uiui/aios/receiver/InstallResultReceiver.java rename to app/src/main/java/com/uiui/zyos/receiver/InstallResultReceiver.java index 94d2ed3..c5fe60d 100644 --- a/app/src/main/java/com/uiui/aios/receiver/InstallResultReceiver.java +++ b/app/src/main/java/com/uiui/zyos/receiver/InstallResultReceiver.java @@ -1,4 +1,4 @@ -package com.uiui.aios.receiver; +package com.uiui.zyos.receiver; import android.content.BroadcastReceiver; import android.content.Context; diff --git a/app/src/main/java/com/uiui/zyos/service/DownloadService.java b/app/src/main/java/com/uiui/zyos/service/DownloadService.java new file mode 100644 index 0000000..9b001f0 --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/service/DownloadService.java @@ -0,0 +1,56 @@ +package com.uiui.zyos.service; + +import android.app.Service; +import android.content.Intent; +import android.os.IBinder; +import android.util.Log; + +import com.arialyy.annotations.Download; +import com.arialyy.aria.core.Aria; +import com.arialyy.aria.core.task.DownloadTask; + +public class DownloadService extends Service { + private static final String TAG = DownloadService.class.getSimpleName(); + + public DownloadService() { + } + + @Override + public IBinder onBind(Intent intent) { + return null; + } + + @Override + public void onCreate() { + super.onCreate(); + Aria.init(this); + Aria.download(this).register(); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + return super.onStartCommand(intent, flags, startId); + } + + @Override + public void onDestroy() { + super.onDestroy(); + } + + //在这里处理任务执行中的状态,如进度进度条的刷新 + @Download.onTaskRunning + protected void running(DownloadTask task) { + Log.e("aria", "正在下载:" + task.getPercent() + ":" + task.getExtendField()); + } + + @Download.onTaskComplete + void taskComplete(DownloadTask task) { + //在这里处理任务完成的状态 + Log.e(TAG, "taskComplete: " + task.getFilePath()); + } + + @Download.onTaskFail + void taskFail(DownloadTask task, Exception e) { + + } +} diff --git a/app/src/main/java/com/uiui/aios/service/NotificationService.java b/app/src/main/java/com/uiui/zyos/service/NotificationService.java similarity index 98% rename from app/src/main/java/com/uiui/aios/service/NotificationService.java rename to app/src/main/java/com/uiui/zyos/service/NotificationService.java index e23ba1b..cd90e17 100644 --- a/app/src/main/java/com/uiui/aios/service/NotificationService.java +++ b/app/src/main/java/com/uiui/zyos/service/NotificationService.java @@ -1,4 +1,4 @@ -package com.uiui.aios.service; +package com.uiui.zyos.service; import android.service.notification.NotificationListenerService; import android.service.notification.StatusBarNotification; diff --git a/app/src/main/java/com/uiui/zyos/service/main/MainSContact.java b/app/src/main/java/com/uiui/zyos/service/main/MainSContact.java new file mode 100644 index 0000000..0721337 --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/service/main/MainSContact.java @@ -0,0 +1,12 @@ +package com.uiui.zyos.service.main; + +import com.uiui.zyos.base.BasePresenter; +import com.uiui.zyos.base.BaseView; + +public class MainSContact { + public interface Presenter extends BasePresenter { + } + + public interface MainSView extends BaseView { + } +} diff --git a/app/src/main/java/com/uiui/aios/service/main/MainSPresenter.java b/app/src/main/java/com/uiui/zyos/service/main/MainSPresenter.java similarity index 54% rename from app/src/main/java/com/uiui/aios/service/main/MainSPresenter.java rename to app/src/main/java/com/uiui/zyos/service/main/MainSPresenter.java index f14d454..86042bd 100644 --- a/app/src/main/java/com/uiui/aios/service/main/MainSPresenter.java +++ b/app/src/main/java/com/uiui/zyos/service/main/MainSPresenter.java @@ -1,19 +1,11 @@ -package com.uiui.aios.service.main; +package com.uiui.zyos.service.main; import android.content.Context; import android.util.Log; import com.tencent.mmkv.MMKV; import com.trello.rxlifecycle4.android.ActivityEvent; -import com.uiui.aios.bean.AlarmClockData; -import com.uiui.aios.bean.BaseResponse; -import com.uiui.aios.network.NetInterfaceManager; -import com.uiui.aios.alarm.AlarmUtils; -import java.util.List; - -import io.reactivex.rxjava3.core.Observer; -import io.reactivex.rxjava3.disposables.Disposable; import io.reactivex.rxjava3.subjects.BehaviorSubject; @@ -53,26 +45,4 @@ public class MainSPresenter implements MainSContact.Presenter { public void detachView() { this.mView = null; } - - - @Override - public void getAlarmClock() { - NetInterfaceManager.getInstance().getAlarmClock(true, getLifecycle(), new NetInterfaceManager.AlarmClockCallback() { - @Override - public void setAlarmClock(List alarmClockList) { - Log.e(TAG, "setAlarmClock: " + alarmClockList); - } - - @Override - public void setAlarmClockEmpty() { - Log.e(TAG, "setAlarmClock: setAlarmClockEmpty"); - } - - @Override - public void onError() { - Log.e(TAG, "setAlarmClock: onError"); - } - }); - - } } diff --git a/app/src/main/java/com/uiui/zyos/service/main/MainService.java b/app/src/main/java/com/uiui/zyos/service/main/MainService.java new file mode 100644 index 0000000..13cd6d7 --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/service/main/MainService.java @@ -0,0 +1,59 @@ +package com.uiui.zyos.service.main; + +import android.content.Intent; +import android.os.IBinder; +import android.util.Log; + +import com.blankj.utilcode.util.NetworkUtils; +import com.uiui.zyos.base.BaseService; + +public class MainService extends BaseService implements MainSContact.MainSView, NetworkUtils.OnNetworkStatusChangedListener { + private static final String TAG = MainService.class.getSimpleName(); + public MainSPresenter mPresenter; + + public MainService() { + + } + + @Override + public void onDisconnected() { + + } + + @Override + public void onConnected(NetworkUtils.NetworkType networkType) { + + } + + @Override + public IBinder onBind(Intent intent) { + Log.e(TAG, "onBind: "); + return null; + } + + @Override + public void onCreate() { + super.onCreate(); + Log.e(TAG, "onCreate: "); + mPresenter = new MainSPresenter(this); + mPresenter.attachView(this); + mPresenter.setLifecycle(lifecycleSubject); + NetworkUtils.registerNetworkStatusChangedListener(this); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + Log.e(TAG, "onStartCommand: "); + return START_STICKY; + } + + @Override + public void onDestroy() { + super.onDestroy(); + mPresenter.detachView(); + NetworkUtils.unregisterNetworkStatusChangedListener(this); + } + + public static final String ALARMWAKEUP = "ALARM_WAKEUP"; + +} diff --git a/app/src/main/java/com/uiui/aios/tpush/Constants.java b/app/src/main/java/com/uiui/zyos/tpush/Constants.java similarity index 94% rename from app/src/main/java/com/uiui/aios/tpush/Constants.java rename to app/src/main/java/com/uiui/zyos/tpush/Constants.java index b838f48..4a0ed25 100644 --- a/app/src/main/java/com/uiui/aios/tpush/Constants.java +++ b/app/src/main/java/com/uiui/zyos/tpush/Constants.java @@ -1,4 +1,4 @@ -package com.uiui.aios.tpush; +package com.uiui.zyos.tpush; /** * Created by chacewang on 2019/7/5. diff --git a/app/src/main/java/com/uiui/aios/tpush/MessageReceiver.java b/app/src/main/java/com/uiui/zyos/tpush/MessageReceiver.java similarity index 97% rename from app/src/main/java/com/uiui/aios/tpush/MessageReceiver.java rename to app/src/main/java/com/uiui/zyos/tpush/MessageReceiver.java index 9550608..e3a4b27 100644 --- a/app/src/main/java/com/uiui/aios/tpush/MessageReceiver.java +++ b/app/src/main/java/com/uiui/zyos/tpush/MessageReceiver.java @@ -1,4 +1,4 @@ -package com.uiui.aios.tpush; +package com.uiui.zyos.tpush; import android.content.ContentResolver; import android.content.Context; @@ -16,11 +16,10 @@ import com.tencent.android.tpush.XGPushClickedResult; import com.tencent.android.tpush.XGPushRegisterResult; import com.tencent.android.tpush.XGPushShowedResult; import com.tencent.android.tpush.XGPushTextMessage; -import com.uiui.aios.network.NetInterfaceManager; -import com.uiui.aios.service.main.MainService; -import com.uiui.aios.tpush.common.NotificationService; -import com.uiui.aios.tpush.po.XGNotification; -import com.uiui.aios.utils.ToastUtil; +import com.uiui.zyos.network.NetInterfaceManager; +import com.uiui.zyos.tpush.common.NotificationService; +import com.uiui.zyos.tpush.po.XGNotification; +import com.uiui.zyos.utils.ToastUtil; import java.text.SimpleDateFormat; import java.util.Calendar; @@ -310,7 +309,6 @@ public class MessageReceiver extends XGPushBaseReceiver { switch (title) { case JIGUANG_ALARM_CLOCK: ToastUtil.betaShow("收到推送消息: 设置闹钟"); - NetInterfaceManager.getInstance().getAlarmClock(); Intent intent = new Intent(SET_ALARMCLOCK); mContext.sendBroadcast(intent); break; diff --git a/app/src/main/java/com/uiui/aios/tpush/common/DBOpenHelper.java b/app/src/main/java/com/uiui/zyos/tpush/common/DBOpenHelper.java similarity index 94% rename from app/src/main/java/com/uiui/aios/tpush/common/DBOpenHelper.java rename to app/src/main/java/com/uiui/zyos/tpush/common/DBOpenHelper.java index fa225b4..b7b3ca0 100644 --- a/app/src/main/java/com/uiui/aios/tpush/common/DBOpenHelper.java +++ b/app/src/main/java/com/uiui/zyos/tpush/common/DBOpenHelper.java @@ -1,4 +1,4 @@ -package com.uiui.aios.tpush.common; +package com.uiui.zyos.tpush.common; import android.content.Context; import android.database.sqlite.SQLiteDatabase; diff --git a/app/src/main/java/com/uiui/aios/tpush/common/NotificationService.java b/app/src/main/java/com/uiui/zyos/tpush/common/NotificationService.java similarity index 98% rename from app/src/main/java/com/uiui/aios/tpush/common/NotificationService.java rename to app/src/main/java/com/uiui/zyos/tpush/common/NotificationService.java index 10344d1..58e0b55 100644 --- a/app/src/main/java/com/uiui/aios/tpush/common/NotificationService.java +++ b/app/src/main/java/com/uiui/zyos/tpush/common/NotificationService.java @@ -1,4 +1,4 @@ -package com.uiui.aios.tpush.common; +package com.uiui.zyos.tpush.common; import android.content.ContentValues; import android.content.Context; @@ -6,7 +6,7 @@ import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; -import com.uiui.aios.tpush.po.XGNotification; +import com.uiui.zyos.tpush.po.XGNotification; import java.util.ArrayList; import java.util.List; diff --git a/app/src/main/java/com/uiui/aios/tpush/po/XGNotification.java b/app/src/main/java/com/uiui/zyos/tpush/po/XGNotification.java similarity index 98% rename from app/src/main/java/com/uiui/aios/tpush/po/XGNotification.java rename to app/src/main/java/com/uiui/zyos/tpush/po/XGNotification.java index c13e3d9..9c6eef2 100644 --- a/app/src/main/java/com/uiui/aios/tpush/po/XGNotification.java +++ b/app/src/main/java/com/uiui/zyos/tpush/po/XGNotification.java @@ -1,4 +1,4 @@ -package com.uiui.aios.tpush.po; +package com.uiui.zyos.tpush.po; public class XGNotification { private Integer id; diff --git a/app/src/main/java/com/uiui/aios/utils/ApkUtils.java b/app/src/main/java/com/uiui/zyos/utils/ApkUtils.java similarity index 99% rename from app/src/main/java/com/uiui/aios/utils/ApkUtils.java rename to app/src/main/java/com/uiui/zyos/utils/ApkUtils.java index a50c7b0..277f451 100644 --- a/app/src/main/java/com/uiui/aios/utils/ApkUtils.java +++ b/app/src/main/java/com/uiui/zyos/utils/ApkUtils.java @@ -1,4 +1,4 @@ -package com.uiui.aios.utils; +package com.uiui.zyos.utils; import android.app.PendingIntent; import android.content.ComponentName; @@ -17,10 +17,10 @@ import android.util.Log; import androidx.annotation.RequiresApi; -import com.uiui.aios.BuildConfig; -import com.uiui.aios.R; -import com.uiui.aios.bean.DesktopIcon; -import com.uiui.aios.receiver.InstallResultReceiver; +import com.uiui.zyos.BuildConfig; +import com.uiui.zyos.R; +import com.uiui.zyos.bean.DesktopIcon; +import com.uiui.zyos.receiver.InstallResultReceiver; import java.io.File; import java.lang.reflect.InvocationTargetException; diff --git a/app/src/main/java/com/uiui/aios/utils/AppUsedTimeUtils.java b/app/src/main/java/com/uiui/zyos/utils/AppUsedTimeUtils.java similarity index 99% rename from app/src/main/java/com/uiui/aios/utils/AppUsedTimeUtils.java rename to app/src/main/java/com/uiui/zyos/utils/AppUsedTimeUtils.java index a632406..84b8e8f 100644 --- a/app/src/main/java/com/uiui/aios/utils/AppUsedTimeUtils.java +++ b/app/src/main/java/com/uiui/zyos/utils/AppUsedTimeUtils.java @@ -1,4 +1,4 @@ -package com.uiui.aios.utils; +package com.uiui.zyos.utils; import android.annotation.SuppressLint; import android.content.Context; diff --git a/app/src/main/java/com/uiui/aios/utils/AppUtil.java b/app/src/main/java/com/uiui/zyos/utils/AppUtil.java similarity index 99% rename from app/src/main/java/com/uiui/aios/utils/AppUtil.java rename to app/src/main/java/com/uiui/zyos/utils/AppUtil.java index d2f6113..4e0a519 100644 --- a/app/src/main/java/com/uiui/aios/utils/AppUtil.java +++ b/app/src/main/java/com/uiui/zyos/utils/AppUtil.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.uiui.aios.utils; +package com.uiui.zyos.utils; import android.app.ActivityManager; diff --git a/app/src/main/java/com/uiui/aios/utils/BitmapUtils.java b/app/src/main/java/com/uiui/zyos/utils/BitmapUtils.java similarity index 98% rename from app/src/main/java/com/uiui/aios/utils/BitmapUtils.java rename to app/src/main/java/com/uiui/zyos/utils/BitmapUtils.java index f17546a..6ce1589 100644 --- a/app/src/main/java/com/uiui/aios/utils/BitmapUtils.java +++ b/app/src/main/java/com/uiui/zyos/utils/BitmapUtils.java @@ -1,4 +1,4 @@ -package com.uiui.aios.utils; +package com.uiui.zyos.utils; import android.content.Context; import android.graphics.Bitmap; diff --git a/app/src/main/java/com/uiui/aios/utils/BrightnessUtils.java b/app/src/main/java/com/uiui/zyos/utils/BrightnessUtils.java similarity index 99% rename from app/src/main/java/com/uiui/aios/utils/BrightnessUtils.java rename to app/src/main/java/com/uiui/zyos/utils/BrightnessUtils.java index 06a2533..5ad618f 100644 --- a/app/src/main/java/com/uiui/aios/utils/BrightnessUtils.java +++ b/app/src/main/java/com/uiui/zyos/utils/BrightnessUtils.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.uiui.aios.utils; +package com.uiui.zyos.utils; import android.util.MathUtils; diff --git a/app/src/main/java/com/uiui/aios/utils/CmdUtil.java b/app/src/main/java/com/uiui/zyos/utils/CmdUtil.java similarity index 99% rename from app/src/main/java/com/uiui/aios/utils/CmdUtil.java rename to app/src/main/java/com/uiui/zyos/utils/CmdUtil.java index 3dd5591..aaa9a1f 100644 --- a/app/src/main/java/com/uiui/aios/utils/CmdUtil.java +++ b/app/src/main/java/com/uiui/zyos/utils/CmdUtil.java @@ -1,4 +1,4 @@ -package com.uiui.aios.utils; +package com.uiui.zyos.utils; import android.text.TextUtils; import android.util.Log; diff --git a/app/src/main/java/com/uiui/aios/utils/DataUtil.java b/app/src/main/java/com/uiui/zyos/utils/DataUtil.java similarity index 96% rename from app/src/main/java/com/uiui/aios/utils/DataUtil.java rename to app/src/main/java/com/uiui/zyos/utils/DataUtil.java index 1fc8c6b..5f6d362 100644 --- a/app/src/main/java/com/uiui/aios/utils/DataUtil.java +++ b/app/src/main/java/com/uiui/zyos/utils/DataUtil.java @@ -1,4 +1,4 @@ -package com.uiui.aios.utils; +package com.uiui.zyos.utils; import java.text.SimpleDateFormat; import java.util.Date; diff --git a/app/src/main/java/com/uiui/aios/utils/FFmpegUtils.java b/app/src/main/java/com/uiui/zyos/utils/FFmpegUtils.java similarity index 97% rename from app/src/main/java/com/uiui/aios/utils/FFmpegUtils.java rename to app/src/main/java/com/uiui/zyos/utils/FFmpegUtils.java index 39e8acd..ff24319 100644 --- a/app/src/main/java/com/uiui/aios/utils/FFmpegUtils.java +++ b/app/src/main/java/com/uiui/zyos/utils/FFmpegUtils.java @@ -1,6 +1,5 @@ -package com.uiui.aios.utils; +package com.uiui.zyos.utils; -import android.content.Context; import android.graphics.Bitmap; import android.util.Log; diff --git a/app/src/main/java/com/uiui/aios/utils/FileUtil.java b/app/src/main/java/com/uiui/zyos/utils/FileUtil.java similarity index 98% rename from app/src/main/java/com/uiui/aios/utils/FileUtil.java rename to app/src/main/java/com/uiui/zyos/utils/FileUtil.java index b381e39..8debaeb 100644 --- a/app/src/main/java/com/uiui/aios/utils/FileUtil.java +++ b/app/src/main/java/com/uiui/zyos/utils/FileUtil.java @@ -1,4 +1,4 @@ -package com.uiui.aios.utils; +package com.uiui.zyos.utils; import android.text.TextUtils; diff --git a/app/src/main/java/com/uiui/aios/utils/ForegroundAppUtil.java b/app/src/main/java/com/uiui/zyos/utils/ForegroundAppUtil.java similarity index 99% rename from app/src/main/java/com/uiui/aios/utils/ForegroundAppUtil.java rename to app/src/main/java/com/uiui/zyos/utils/ForegroundAppUtil.java index fbcd566..133533d 100644 --- a/app/src/main/java/com/uiui/aios/utils/ForegroundAppUtil.java +++ b/app/src/main/java/com/uiui/zyos/utils/ForegroundAppUtil.java @@ -1,4 +1,4 @@ -package com.uiui.aios.utils; +package com.uiui.zyos.utils; import android.app.ActivityManager; import android.app.usage.UsageStats; diff --git a/app/src/main/java/com/uiui/aios/utils/GlideLoadUtils.java b/app/src/main/java/com/uiui/zyos/utils/GlideLoadUtils.java similarity index 98% rename from app/src/main/java/com/uiui/aios/utils/GlideLoadUtils.java rename to app/src/main/java/com/uiui/zyos/utils/GlideLoadUtils.java index 3885fc6..e504544 100644 --- a/app/src/main/java/com/uiui/aios/utils/GlideLoadUtils.java +++ b/app/src/main/java/com/uiui/zyos/utils/GlideLoadUtils.java @@ -1,4 +1,4 @@ -package com.uiui.aios.utils; +package com.uiui.zyos.utils; import android.annotation.TargetApi; import android.app.Activity; diff --git a/app/src/main/java/com/uiui/aios/utils/GsonUtils.java b/app/src/main/java/com/uiui/zyos/utils/GsonUtils.java similarity index 95% rename from app/src/main/java/com/uiui/aios/utils/GsonUtils.java rename to app/src/main/java/com/uiui/zyos/utils/GsonUtils.java index 9ea2b86..8c42e66 100644 --- a/app/src/main/java/com/uiui/aios/utils/GsonUtils.java +++ b/app/src/main/java/com/uiui/zyos/utils/GsonUtils.java @@ -1,4 +1,4 @@ -package com.uiui.aios.utils; +package com.uiui.zyos.utils; import com.google.gson.Gson; import com.google.gson.JsonObject; diff --git a/app/src/main/java/com/uiui/aios/utils/HomeWatcher.java b/app/src/main/java/com/uiui/zyos/utils/HomeWatcher.java similarity index 98% rename from app/src/main/java/com/uiui/aios/utils/HomeWatcher.java rename to app/src/main/java/com/uiui/zyos/utils/HomeWatcher.java index 131e6dc..2daa39c 100644 --- a/app/src/main/java/com/uiui/aios/utils/HomeWatcher.java +++ b/app/src/main/java/com/uiui/zyos/utils/HomeWatcher.java @@ -1,4 +1,4 @@ -package com.uiui.aios.utils; +package com.uiui.zyos.utils; import android.content.BroadcastReceiver; import android.content.Context; diff --git a/app/src/main/java/com/uiui/aios/utils/IconUtils.java b/app/src/main/java/com/uiui/zyos/utils/IconUtils.java similarity index 99% rename from app/src/main/java/com/uiui/aios/utils/IconUtils.java rename to app/src/main/java/com/uiui/zyos/utils/IconUtils.java index 01cb120..c4e50d9 100644 --- a/app/src/main/java/com/uiui/aios/utils/IconUtils.java +++ b/app/src/main/java/com/uiui/zyos/utils/IconUtils.java @@ -1,4 +1,4 @@ -package com.uiui.aios.utils; +package com.uiui.zyos.utils; import android.util.Log; diff --git a/app/src/main/java/com/uiui/aios/utils/LauncherUtils.java b/app/src/main/java/com/uiui/zyos/utils/LauncherUtils.java similarity index 99% rename from app/src/main/java/com/uiui/aios/utils/LauncherUtils.java rename to app/src/main/java/com/uiui/zyos/utils/LauncherUtils.java index 6c3a9de..ec2de76 100644 --- a/app/src/main/java/com/uiui/aios/utils/LauncherUtils.java +++ b/app/src/main/java/com/uiui/zyos/utils/LauncherUtils.java @@ -1,4 +1,4 @@ -package com.uiui.aios.utils; +package com.uiui.zyos.utils; import android.app.role.RoleManager; import android.content.ComponentName; diff --git a/app/src/main/java/com/uiui/aios/utils/MD5Util.java b/app/src/main/java/com/uiui/zyos/utils/MD5Util.java similarity index 98% rename from app/src/main/java/com/uiui/aios/utils/MD5Util.java rename to app/src/main/java/com/uiui/zyos/utils/MD5Util.java index ad473f5..a709730 100644 --- a/app/src/main/java/com/uiui/aios/utils/MD5Util.java +++ b/app/src/main/java/com/uiui/zyos/utils/MD5Util.java @@ -1,4 +1,4 @@ -package com.uiui.aios.utils; +package com.uiui.zyos.utils; import android.annotation.SuppressLint; diff --git a/app/src/main/java/com/uiui/aios/utils/NetStateUtils.java b/app/src/main/java/com/uiui/zyos/utils/NetStateUtils.java similarity index 98% rename from app/src/main/java/com/uiui/aios/utils/NetStateUtils.java rename to app/src/main/java/com/uiui/zyos/utils/NetStateUtils.java index 694f1a6..f521a2c 100644 --- a/app/src/main/java/com/uiui/aios/utils/NetStateUtils.java +++ b/app/src/main/java/com/uiui/zyos/utils/NetStateUtils.java @@ -1,4 +1,4 @@ -package com.uiui.aios.utils; +package com.uiui.zyos.utils; import android.content.Context; import android.net.ConnectivityManager; diff --git a/app/src/main/java/com/uiui/aios/utils/SchemeUtils.java b/app/src/main/java/com/uiui/zyos/utils/SchemeUtils.java similarity index 96% rename from app/src/main/java/com/uiui/aios/utils/SchemeUtils.java rename to app/src/main/java/com/uiui/zyos/utils/SchemeUtils.java index 8a3c80d..9332965 100644 --- a/app/src/main/java/com/uiui/aios/utils/SchemeUtils.java +++ b/app/src/main/java/com/uiui/zyos/utils/SchemeUtils.java @@ -1,4 +1,4 @@ -package com.uiui.aios.utils; +package com.uiui.zyos.utils; import android.app.Activity; import android.content.Intent; diff --git a/app/src/main/java/com/uiui/aios/utils/ScreenUtils.java b/app/src/main/java/com/uiui/zyos/utils/ScreenUtils.java similarity index 97% rename from app/src/main/java/com/uiui/aios/utils/ScreenUtils.java rename to app/src/main/java/com/uiui/zyos/utils/ScreenUtils.java index 06a8e7c..539ebcc 100644 --- a/app/src/main/java/com/uiui/aios/utils/ScreenUtils.java +++ b/app/src/main/java/com/uiui/zyos/utils/ScreenUtils.java @@ -1,4 +1,4 @@ -package com.uiui.aios.utils; +package com.uiui.zyos.utils; import android.content.Context; import android.content.res.Resources; diff --git a/app/src/main/java/com/uiui/aios/utils/SystemUtils.java b/app/src/main/java/com/uiui/zyos/utils/SystemUtils.java similarity index 96% rename from app/src/main/java/com/uiui/aios/utils/SystemUtils.java rename to app/src/main/java/com/uiui/zyos/utils/SystemUtils.java index 6fba55b..d641dba 100644 --- a/app/src/main/java/com/uiui/aios/utils/SystemUtils.java +++ b/app/src/main/java/com/uiui/zyos/utils/SystemUtils.java @@ -1,4 +1,4 @@ -package com.uiui.aios.utils; +package com.uiui.zyos.utils; import android.app.ActivityManager; import android.content.Context; diff --git a/app/src/main/java/com/uiui/aios/utils/TimeUtils.java b/app/src/main/java/com/uiui/zyos/utils/TimeUtils.java similarity index 97% rename from app/src/main/java/com/uiui/aios/utils/TimeUtils.java rename to app/src/main/java/com/uiui/zyos/utils/TimeUtils.java index 70b3712..cbfd429 100644 --- a/app/src/main/java/com/uiui/aios/utils/TimeUtils.java +++ b/app/src/main/java/com/uiui/zyos/utils/TimeUtils.java @@ -1,4 +1,4 @@ -package com.uiui.aios.utils; +package com.uiui.zyos.utils; import android.os.Build; diff --git a/app/src/main/java/com/uiui/aios/utils/ToastUtil.java b/app/src/main/java/com/uiui/zyos/utils/ToastUtil.java similarity index 97% rename from app/src/main/java/com/uiui/aios/utils/ToastUtil.java rename to app/src/main/java/com/uiui/zyos/utils/ToastUtil.java index 87fb3da..ada1e0f 100644 --- a/app/src/main/java/com/uiui/aios/utils/ToastUtil.java +++ b/app/src/main/java/com/uiui/zyos/utils/ToastUtil.java @@ -1,4 +1,4 @@ -package com.uiui.aios.utils; +package com.uiui.zyos.utils; import android.annotation.SuppressLint; import android.content.Context; @@ -10,7 +10,7 @@ import android.util.Log; import android.widget.Toast; import com.blankj.utilcode.util.ToastUtils; -import com.uiui.aios.BuildConfig; +import com.uiui.zyos.BuildConfig; /** diff --git a/app/src/main/java/com/uiui/aios/utils/Utils.java b/app/src/main/java/com/uiui/zyos/utils/Utils.java similarity index 98% rename from app/src/main/java/com/uiui/aios/utils/Utils.java rename to app/src/main/java/com/uiui/zyos/utils/Utils.java index 0f98079..9e54885 100644 --- a/app/src/main/java/com/uiui/aios/utils/Utils.java +++ b/app/src/main/java/com/uiui/zyos/utils/Utils.java @@ -1,4 +1,4 @@ -package com.uiui.aios.utils; +package com.uiui.zyos.utils; import android.annotation.SuppressLint; import android.content.Context; @@ -18,8 +18,8 @@ import android.util.Log; import androidx.core.content.ContextCompat; -import com.uiui.aios.BuildConfig; -import com.uiui.aios.R; +import com.uiui.zyos.BuildConfig; +import com.uiui.zyos.R; import java.io.File; import java.lang.reflect.Method; diff --git a/app/src/main/java/com/uiui/aios/utils/WakeUpUtils.java b/app/src/main/java/com/uiui/zyos/utils/WakeUpUtils.java similarity index 99% rename from app/src/main/java/com/uiui/aios/utils/WakeUpUtils.java rename to app/src/main/java/com/uiui/zyos/utils/WakeUpUtils.java index fb35a7b..3d349b4 100644 --- a/app/src/main/java/com/uiui/aios/utils/WakeUpUtils.java +++ b/app/src/main/java/com/uiui/zyos/utils/WakeUpUtils.java @@ -1,4 +1,4 @@ -package com.uiui.aios.utils; +package com.uiui.zyos.utils; import android.annotation.SuppressLint; import android.app.Activity; diff --git a/app/src/main/java/com/uiui/aios/view/CustomContent.java b/app/src/main/java/com/uiui/zyos/view/CustomContent.java similarity index 98% rename from app/src/main/java/com/uiui/aios/view/CustomContent.java rename to app/src/main/java/com/uiui/zyos/view/CustomContent.java index 4737752..df9c87d 100644 --- a/app/src/main/java/com/uiui/aios/view/CustomContent.java +++ b/app/src/main/java/com/uiui/zyos/view/CustomContent.java @@ -1,4 +1,4 @@ -package com.uiui.aios.view; +package com.uiui.zyos.view; import android.content.Context; import android.util.AttributeSet; diff --git a/app/src/main/java/com/uiui/aios/view/CustomContentCallbacks.java b/app/src/main/java/com/uiui/zyos/view/CustomContentCallbacks.java similarity index 95% rename from app/src/main/java/com/uiui/aios/view/CustomContentCallbacks.java rename to app/src/main/java/com/uiui/zyos/view/CustomContentCallbacks.java index dafaef8..952e686 100644 --- a/app/src/main/java/com/uiui/aios/view/CustomContentCallbacks.java +++ b/app/src/main/java/com/uiui/zyos/view/CustomContentCallbacks.java @@ -1,4 +1,4 @@ -package com.uiui.aios.view; +package com.uiui.zyos.view; // add by codemx.cn ---- 20190712 ---plus- start diff --git a/app/src/main/java/com/uiui/aios/view/GridSpaceItemDecoration.java b/app/src/main/java/com/uiui/zyos/view/GridSpaceItemDecoration.java similarity index 98% rename from app/src/main/java/com/uiui/aios/view/GridSpaceItemDecoration.java rename to app/src/main/java/com/uiui/zyos/view/GridSpaceItemDecoration.java index aa1c293..9b2fdc4 100644 --- a/app/src/main/java/com/uiui/aios/view/GridSpaceItemDecoration.java +++ b/app/src/main/java/com/uiui/zyos/view/GridSpaceItemDecoration.java @@ -1,4 +1,4 @@ -package com.uiui.aios.view; +package com.uiui.zyos.view; import android.graphics.Rect; import android.util.Log; diff --git a/app/src/main/java/com/uiui/aios/view/HorizontalItemDecoration.java b/app/src/main/java/com/uiui/zyos/view/HorizontalItemDecoration.java similarity index 97% rename from app/src/main/java/com/uiui/aios/view/HorizontalItemDecoration.java rename to app/src/main/java/com/uiui/zyos/view/HorizontalItemDecoration.java index afd8b97..9b70e33 100644 --- a/app/src/main/java/com/uiui/aios/view/HorizontalItemDecoration.java +++ b/app/src/main/java/com/uiui/zyos/view/HorizontalItemDecoration.java @@ -1,4 +1,4 @@ -package com.uiui.aios.view; +package com.uiui.zyos.view; import android.content.Context; import android.graphics.Rect; diff --git a/app/src/main/java/com/uiui/aios/view/JzvdStdAssert.java b/app/src/main/java/com/uiui/zyos/view/JzvdStdAssert.java similarity index 98% rename from app/src/main/java/com/uiui/aios/view/JzvdStdAssert.java rename to app/src/main/java/com/uiui/zyos/view/JzvdStdAssert.java index fdf4462..30bdf94 100644 --- a/app/src/main/java/com/uiui/aios/view/JzvdStdAssert.java +++ b/app/src/main/java/com/uiui/zyos/view/JzvdStdAssert.java @@ -1,4 +1,4 @@ -package com.uiui.aios.view; +package com.uiui.zyos.view; import android.content.Context; import android.util.AttributeSet; diff --git a/app/src/main/java/com/uiui/aios/view/JzvdStdRound.java b/app/src/main/java/com/uiui/zyos/view/JzvdStdRound.java similarity index 98% rename from app/src/main/java/com/uiui/aios/view/JzvdStdRound.java rename to app/src/main/java/com/uiui/zyos/view/JzvdStdRound.java index b16208b..50056a4 100644 --- a/app/src/main/java/com/uiui/aios/view/JzvdStdRound.java +++ b/app/src/main/java/com/uiui/zyos/view/JzvdStdRound.java @@ -1,4 +1,4 @@ -package com.uiui.aios.view; +package com.uiui.zyos.view; import android.content.Context; import android.content.res.TypedArray; @@ -9,7 +9,7 @@ import android.graphics.Path; import android.graphics.RectF; import android.util.AttributeSet; -import com.uiui.aios.R; +import com.uiui.zyos.R; import cn.jzvd.JzvdStd; diff --git a/app/src/main/java/com/uiui/aios/view/MyGridLayout.java b/app/src/main/java/com/uiui/zyos/view/MyGridLayout.java similarity index 98% rename from app/src/main/java/com/uiui/aios/view/MyGridLayout.java rename to app/src/main/java/com/uiui/zyos/view/MyGridLayout.java index f4a62a4..3589b38 100644 --- a/app/src/main/java/com/uiui/aios/view/MyGridLayout.java +++ b/app/src/main/java/com/uiui/zyos/view/MyGridLayout.java @@ -1,4 +1,4 @@ -package com.uiui.aios.view; +package com.uiui.zyos.view; import android.annotation.SuppressLint; import android.content.Context; @@ -7,8 +7,8 @@ import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; -import com.uiui.aios.R; -import com.uiui.aios.bean.DesktopIcon; +import com.uiui.zyos.R; +import com.uiui.zyos.bean.DesktopIcon; import java.util.ArrayList; diff --git a/app/src/main/java/com/uiui/aios/view/MyJzvdStdNoTitleNoClarity.java b/app/src/main/java/com/uiui/zyos/view/MyJzvdStdNoTitleNoClarity.java similarity index 89% rename from app/src/main/java/com/uiui/aios/view/MyJzvdStdNoTitleNoClarity.java rename to app/src/main/java/com/uiui/zyos/view/MyJzvdStdNoTitleNoClarity.java index 381dd75..8d56157 100644 --- a/app/src/main/java/com/uiui/aios/view/MyJzvdStdNoTitleNoClarity.java +++ b/app/src/main/java/com/uiui/zyos/view/MyJzvdStdNoTitleNoClarity.java @@ -1,9 +1,9 @@ -package com.uiui.aios.view; +package com.uiui.zyos.view; import android.content.Context; import android.util.AttributeSet; -import com.uiui.aios.R; +import com.uiui.zyos.R; import cn.jzvd.JzvdStd; diff --git a/app/src/main/java/com/uiui/aios/view/RecyclerItemDecoration.java b/app/src/main/java/com/uiui/zyos/view/RecyclerItemDecoration.java similarity index 97% rename from app/src/main/java/com/uiui/aios/view/RecyclerItemDecoration.java rename to app/src/main/java/com/uiui/zyos/view/RecyclerItemDecoration.java index 4efb0c2..1d54211 100644 --- a/app/src/main/java/com/uiui/aios/view/RecyclerItemDecoration.java +++ b/app/src/main/java/com/uiui/zyos/view/RecyclerItemDecoration.java @@ -1,4 +1,4 @@ -package com.uiui.aios.view; +package com.uiui.zyos.view; import android.graphics.Rect; import android.view.View; diff --git a/app/src/main/java/com/uiui/aios/view/RecyclerViewSpacesItemDecoration.java b/app/src/main/java/com/uiui/zyos/view/RecyclerViewSpacesItemDecoration.java similarity index 98% rename from app/src/main/java/com/uiui/aios/view/RecyclerViewSpacesItemDecoration.java rename to app/src/main/java/com/uiui/zyos/view/RecyclerViewSpacesItemDecoration.java index ed8f17d..fa29c10 100644 --- a/app/src/main/java/com/uiui/aios/view/RecyclerViewSpacesItemDecoration.java +++ b/app/src/main/java/com/uiui/zyos/view/RecyclerViewSpacesItemDecoration.java @@ -1,4 +1,4 @@ -package com.uiui.aios.view; +package com.uiui.zyos.view; import android.graphics.Rect; import android.view.View; diff --git a/app/src/main/java/com/uiui/aios/view/RulerSeekBar.java b/app/src/main/java/com/uiui/zyos/view/RulerSeekBar.java similarity index 99% rename from app/src/main/java/com/uiui/aios/view/RulerSeekBar.java rename to app/src/main/java/com/uiui/zyos/view/RulerSeekBar.java index 2de3097..88f12e3 100644 --- a/app/src/main/java/com/uiui/aios/view/RulerSeekBar.java +++ b/app/src/main/java/com/uiui/zyos/view/RulerSeekBar.java @@ -1,4 +1,4 @@ -package com.uiui.aios.view; +package com.uiui.zyos.view; import android.content.Context; diff --git a/app/src/main/java/com/uiui/aios/view/ScaleCircleNavigator.java b/app/src/main/java/com/uiui/zyos/view/ScaleCircleNavigator.java similarity index 99% rename from app/src/main/java/com/uiui/aios/view/ScaleCircleNavigator.java rename to app/src/main/java/com/uiui/zyos/view/ScaleCircleNavigator.java index 0eb58d5..b1b5f2d 100644 --- a/app/src/main/java/com/uiui/aios/view/ScaleCircleNavigator.java +++ b/app/src/main/java/com/uiui/zyos/view/ScaleCircleNavigator.java @@ -1,4 +1,4 @@ -package com.uiui.aios.view; +package com.uiui.zyos.view; import android.content.Context; import android.graphics.Canvas; diff --git a/app/src/main/java/com/uiui/aios/viewpager2/ViewPager2Helper.java b/app/src/main/java/com/uiui/zyos/viewpager2/ViewPager2Helper.java similarity index 92% rename from app/src/main/java/com/uiui/aios/viewpager2/ViewPager2Helper.java rename to app/src/main/java/com/uiui/zyos/viewpager2/ViewPager2Helper.java index 1d95a29..8793980 100644 --- a/app/src/main/java/com/uiui/aios/viewpager2/ViewPager2Helper.java +++ b/app/src/main/java/com/uiui/zyos/viewpager2/ViewPager2Helper.java @@ -1,6 +1,5 @@ -package com.uiui.aios.viewpager2; +package com.uiui.zyos.viewpager2; -import androidx.viewpager.widget.ViewPager; import androidx.viewpager2.widget.ViewPager2; import net.lucode.hackware.magicindicator.MagicIndicator; diff --git a/app/src/main/java/com/uiui/aios/viewpager2/Viewpager2Adapter.java b/app/src/main/java/com/uiui/zyos/viewpager2/Viewpager2Adapter.java similarity index 97% rename from app/src/main/java/com/uiui/aios/viewpager2/Viewpager2Adapter.java rename to app/src/main/java/com/uiui/zyos/viewpager2/Viewpager2Adapter.java index 946225f..1524fce 100644 --- a/app/src/main/java/com/uiui/aios/viewpager2/Viewpager2Adapter.java +++ b/app/src/main/java/com/uiui/zyos/viewpager2/Viewpager2Adapter.java @@ -1,4 +1,4 @@ -package com.uiui.aios.viewpager2; +package com.uiui.zyos.viewpager2; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; diff --git a/app/src/main/res/layout-land/activity_main.xml b/app/src/main/res/layout-land/activity_main.xml new file mode 100644 index 0000000..7c6882d --- /dev/null +++ b/app/src/main/res/layout-land/activity_main.xml @@ -0,0 +1,43 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_control.xml b/app/src/main/res/layout-land/fragment_control.xml index 60e2364..fcffc8c 100644 --- a/app/src/main/res/layout-land/fragment_control.xml +++ b/app/src/main/res/layout-land/fragment_control.xml @@ -183,7 +183,7 @@ android:layout_weight="1" 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-land/fragment_custom_back.xml b/app/src/main/res/layout-land/fragment_custom_back.xml index fd9325d..1eea6c1 100644 --- a/app/src/main/res/layout-land/fragment_custom_back.xml +++ b/app/src/main/res/layout-land/fragment_custom_back.xml @@ -1,5 +1,5 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout-port/activity_main.xml similarity index 68% rename from app/src/main/res/layout/activity_main.xml rename to app/src/main/res/layout-port/activity_main.xml index 812bc15..dd6ee48 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout-port/activity_main.xml @@ -6,6 +6,20 @@ android:layout_height="match_parent" tools:context=".activity.main.MainActivity"> + + - - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_notice.xml b/app/src/main/res/layout/activity_notice.xml index 0162943..9f9d31c 100644 --- a/app/src/main/res/layout/activity_notice.xml +++ b/app/src/main/res/layout/activity_notice.xml @@ -58,7 +58,7 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/cl_voice"> - diff --git a/app/src/main/res/layout/fragment_applist.xml b/app/src/main/res/layout/fragment_applist.xml index cbb612c..e655a1c 100644 --- a/app/src/main/res/layout/fragment_applist.xml +++ b/app/src/main/res/layout/fragment_applist.xml @@ -6,7 +6,7 @@ android:layout_height="match_parent" tools:context=".fragment.AppListFragment"> - - - 关怀系统OS + 学习桌面 Hello blank fragment diff --git a/app/src/test/java/com/uiui/aios/ExampleUnitTest.java b/app/src/test/java/com/uiui/zyos/ExampleUnitTest.java similarity index 93% rename from app/src/test/java/com/uiui/aios/ExampleUnitTest.java rename to app/src/test/java/com/uiui/zyos/ExampleUnitTest.java index ec22a89..4b89682 100644 --- a/app/src/test/java/com/uiui/aios/ExampleUnitTest.java +++ b/app/src/test/java/com/uiui/zyos/ExampleUnitTest.java @@ -1,4 +1,4 @@ -package com.uiui.aios; +package com.uiui.zyos; import org.junit.Test; diff --git a/app/tpns-configs.json b/app/tpns-configs.json index b27cd81..50d827b 100644 --- a/app/tpns-configs.json +++ b/app/tpns-configs.json @@ -3,7 +3,7 @@ "access_id": "1500030457", "access_key": "AZZXANJF4HBD" }, - "com.uiui.aios": { + "com.uiui.zyos": { "channel": { "enable": true } diff --git a/settings.gradle b/settings.gradle index 02d332a..378693f 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,2 +1,2 @@ include ':app', ':niceimageview' -rootProject.name='关怀系统OS' \ No newline at end of file +rootProject.name='科大讯飞学习桌面' \ No newline at end of file