From 71e5516ab8ee0e77b0d8baa7ef1385bef904a64b Mon Sep 17 00:00:00 2001 From: tongtongstudio Date: Sat, 25 Dec 2021 16:54:44 +0800 Subject: [PATCH] =?UTF-8?q?version:1.1=20fix:=20add:=E5=BA=94=E7=94=A8?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E6=95=B0=E6=8D=AE=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 62 +- .../com/info/sn/ExampleInstrumentedTest.java | 27 - app/src/main/AndroidManifest.xml | 63 +- .../{info => uiui}/sn/IGetInfoInterface.aidl | 2 +- .../sn/KeepAliveConnection.aidl | 2 +- .../selectegrade/SelecteGradePresenter.java | 357 -------- .../java/com/info/sn/network/UrlAddress.java | 89 -- .../sn/network/api/gankao/ActiveUserApi.java | 20 - .../api/gankao/CancelUserPowerApi.java | 20 - .../sn/network/api/gankao/CreateUserApi.java | 18 - .../api/gankao/QueryPowerUserListApi.java | 17 - .../network/api/gankao/QueryProductApi.java | 17 - .../api/gankao/UpgradeUserPowerApi.java | 19 - .../network/api/gankao/UserProductsApi.java | 22 - .../sn/Statistics/AppInformation.java | 4 +- .../sn/Statistics/StatisticsInfo.java | 6 +- .../sn/activity/GuideActivity.java | 10 +- .../sn/activity/PrivacyPolicyActivity.java | 7 +- .../sn/activity/SNUidActivity.java | 13 +- .../sn/activity/ScreenLockActivity.java | 5 +- .../sn/activity/UserAgreementActivity.java | 7 +- .../sn/activity/main/MainActivity.java | 290 +++---- .../sn/activity/main/MainContact.java | 12 +- .../sn/activity/main/MainPresenter.java | 321 +------ .../selectegrade/SelecteGradeActivity.java | 27 +- .../selectegrade/SelecteGradeContact.java | 11 +- .../selectegrade/SelecteGradePresenter.java | 163 ++++ .../sn/adapter/SNUidAdapter.java | 6 +- .../{info => uiui}/sn/base/BaseActivity.java | 8 +- .../sn/base/BaseApplication.java | 27 +- .../sn/base/CheckPermissionsActivity.java | 4 +- .../sn/bean/gankao/ActiveUser.java | 2 +- .../sn/bean/gankao/AvailableProduct.java | 2 +- .../sn/bean/gankao/CancelUserPower.java | 2 +- .../sn/bean/gankao/CreateUserBean.java | 2 +- .../sn/bean/gankao/GankaoBaseResponse.java | 2 +- .../sn/bean/gankao/PowerUser.java | 2 +- .../sn/bean/gankao/UserProduct.java | 2 +- .../sn/bean/gankao/UserProductCards.java | 2 +- .../{info => uiui}/sn/bean/zuoye/AppInfo.java | 2 +- .../{info => uiui}/sn/bean/zuoye/AppJump.java | 2 +- .../sn/bean/zuoye/AppStart.java | 2 +- .../sn/bean/zuoye/AppUploadInfo.java | 2 +- .../{info => uiui}/sn/bean/zuoye/AppUsed.java | 2 +- .../sn/bean/zuoye/BaseResponse.java | 3 +- .../{info => uiui}/sn/bean/zuoye/Label.java | 2 +- .../sn/bean/zuoye/LocalAppInfo.java | 2 +- .../sn/bean/zuoye/Response.java | 2 +- .../sn/bean/zuoye/SNUidBean.java | 2 +- .../sn/bean/zuoye/SystemSettings.java | 2 +- .../sn/bean/zuoye/UserAvatarInfo.java | 2 +- .../sn/bean/zuoye/UserInfo.java | 2 +- .../sn/bean/zuoye/browser/BrowserApiData.java | 2 +- .../sn/bean/zuoye/browser/BrowserBean.java | 2 +- .../{info => uiui}/sn/config/CommonData.java | 2 +- .../com/{info => uiui}/sn/config/Configs.java | 2 +- .../com/{info => uiui}/sn/config/Scheme.java | 8 +- .../sn/dialog/ActivationDialog.java | 5 +- .../sn/dialog/CustomDialog.java | 6 +- .../{info => uiui}/sn/dialog/InfoDialog.java | 4 +- .../sn/dialog/UserDebugDialog.java | 8 +- .../sn/fragment/AppletQRCodeFragment.java | 17 +- .../sn/fragment/BaseFragmentPagerAdapter.java | 2 +- .../sn/fragment/QRCodeFragment.java | 12 +- .../sn/jpush/ExampleApplication.java | 5 +- .../{info => uiui}/sn/jpush/ExampleUtil.java | 4 +- .../sn/jpush/LocalBroadcastManager.java | 2 +- .../com/{info => uiui}/sn/jpush/Logger.java | 2 +- .../sn/jpush/MyJPushMessageReceiver.java | 4 +- .../{info => uiui}/sn/jpush/PushService.java | 2 +- .../sn/jpush/TagAliasOperatorHelper.java | 4 +- .../{info => uiui}/sn/jpush/TestActivity.java | 2 +- .../sn/manager/AmapManager.java | 4 +- .../sn/manager/ControlManager.java | 36 +- .../sn/manager/DeviceManager.java | 8 +- .../sn/manager/MyGlideModule.java | 4 +- .../sn/manager/NetInterfaceManager.java | 156 ++-- .../{info => uiui}/sn/mvp/BasePresenter.java | 2 +- .../com/{info => uiui}/sn/mvp/BaseView.java | 2 +- .../sn/network/HTTPInterface.java | 278 +++++- .../java/com/uiui/sn/network/UrlAddress.java | 93 ++ .../sn/network/api/APPJump.java | 8 +- .../sn/network/api/AddAppInstall.java | 6 +- .../sn/network/api/AppUsedApi.java | 6 +- .../{info => uiui}/sn/network/api/Applog.java | 6 +- .../sn/network/api/BindDevices.java | 6 +- .../sn/network/api/Browser.java | 8 +- .../sn/network/api/BrowserLabel.java | 8 +- .../sn/network/api/ForceInstall.java | 8 +- .../sn/network/api/GetBatchApi.java | 6 +- .../network/api/GetControlScreenshotApi.java | 20 + .../sn/network/api/GetGuideApi.java | 6 +- .../sn/network/api/GetGuideApiTest.java | 5 +- .../sn/network/api/GetSnUidApi.java | 6 +- .../sn/network/api/NewestAppUpdate.java | 8 +- .../sn/network/api/QRCodeApi.java | 6 +- .../sn/network/api/QueryAllApp.java | 8 +- .../sn/network/api/QueryAppInside.java | 6 +- .../sn/network/api/QuerySnAppStart.java | 11 +- .../sn/network/api/RunningApp.java | 6 +- .../sn/network/api/SNInfoApi.java | 8 +- .../sn/network/api/SaveSnUidApi.java | 6 +- .../sn/network/api/ScreenLock.java | 6 +- .../sn/network/api/ScreenState.java | 6 +- .../sn/network/api/Setting.java | 6 +- .../sn/network/api/TimeControl.java | 6 +- .../sn/network/api/UpdateAdminSn.java | 6 +- .../sn/network/api/UploadScreenshot.java | 6 +- .../sn/network/api/UserInfoApi.java | 8 +- .../sn/network/api/UserInfoControl.java | 8 +- .../sn/receiver/APKinstallReceiver.java | 29 +- .../sn/receiver/BootReceiver.java | 12 +- .../sn/receiver/InstallResultReceiver.java | 4 +- .../sn/receiver/MyJPushReceiver.java | 792 ++++++------------ .../sn/service/DownloadService.java | 18 +- .../sn/service/GuardService.java | 6 +- .../sn/service/MainService.java | 32 +- .../sn/service/ManagerService.java | 33 +- .../sn/service/RemoteService.java | 15 +- .../sn/service/StepService.java | 12 +- .../{info => uiui}/sn/utils/AmapUtils.java | 2 +- .../com/{info => uiui}/sn/utils/ApkUtils.java | 50 +- .../sn/utils/AppUpdateInfo.java | 2 +- .../sn/utils/AppsManagerUtils.java | 4 +- .../{info => uiui}/sn/utils/CXAESUtil.java | 2 +- .../{info => uiui}/sn/utils/CacheUtils.java | 2 +- .../com/{info => uiui}/sn/utils/CmdUtil.java | 2 +- .../{info => uiui}/sn/utils/FileUtils.java | 6 +- .../sn/utils/ForegroundAppUtil.java | 2 +- .../com/{info => uiui}/sn/utils/Hash.java | 2 +- .../com/{info => uiui}/sn/utils/JGYUtils.java | 28 +- .../{info => uiui}/sn/utils/LaunchTools.java | 4 +- .../com/{info => uiui}/sn/utils/MD5Util.java | 2 +- .../com/{info => uiui}/sn/utils/SPUtils.java | 2 +- .../sn/utils/ServiceAliveUtils.java | 2 +- .../sn/utils/StatusBarUtil.java | 2 +- .../{info => uiui}/sn/utils/StorageUtils.java | 2 +- .../{info => uiui}/sn/utils/SystemUtils.java | 2 +- .../{info => uiui}/sn/utils/TimeUtils.java | 5 +- .../{info => uiui}/sn/utils/ToastUtil.java | 6 +- .../com/{info => uiui}/sn/utils/URLUtils.java | 10 +- .../com/{info => uiui}/sn/utils/Utils.java | 50 +- .../sn/view/FlowRadioGroup.java | 2 +- .../sn/websocket/JWebSocketClient.java | 2 +- .../main/res/drawable-hdpi/applet_qrcode.png | Bin 28017 -> 63856 bytes .../main/res/drawable-hdpi/bind_applet.png | Bin 0 -> 43891 bytes app/src/main/res/drawable-hdpi/bt_return.png | Bin 4162 -> 1875 bytes app/src/main/res/drawable/qrcode_shape.xml | 18 + .../main/res/layout-land/activity_main.xml | 644 ++------------ .../main/res/layout-port/activity_main.xml | 577 ++----------- app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 8461 -> 4464 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 8461 -> 4464 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 8461 -> 4464 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 8461 -> 4464 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 8461 -> 4464 bytes app/src/main/res/values/strings.xml | 5 +- .../{info => uiui}/sn/ExampleUnitTest.java | 2 +- build.gradle | 2 +- settings.gradle | 2 +- 159 files changed, 1671 insertions(+), 3312 deletions(-) delete mode 100644 app/src/androidTest/java/com/info/sn/ExampleInstrumentedTest.java rename app/src/main/aidl/com/{info => uiui}/sn/IGetInfoInterface.aidl (96%) rename app/src/main/aidl/com/{info => uiui}/sn/KeepAliveConnection.aidl (94%) delete mode 100644 app/src/main/java/com/info/sn/activity/selectegrade/SelecteGradePresenter.java delete mode 100644 app/src/main/java/com/info/sn/network/UrlAddress.java delete mode 100644 app/src/main/java/com/info/sn/network/api/gankao/ActiveUserApi.java delete mode 100644 app/src/main/java/com/info/sn/network/api/gankao/CancelUserPowerApi.java delete mode 100644 app/src/main/java/com/info/sn/network/api/gankao/CreateUserApi.java delete mode 100644 app/src/main/java/com/info/sn/network/api/gankao/QueryPowerUserListApi.java delete mode 100644 app/src/main/java/com/info/sn/network/api/gankao/QueryProductApi.java delete mode 100644 app/src/main/java/com/info/sn/network/api/gankao/UpgradeUserPowerApi.java delete mode 100644 app/src/main/java/com/info/sn/network/api/gankao/UserProductsApi.java rename app/src/main/java/com/{info => uiui}/sn/Statistics/AppInformation.java (98%) rename app/src/main/java/com/{info => uiui}/sn/Statistics/StatisticsInfo.java (99%) rename app/src/main/java/com/{info => uiui}/sn/activity/GuideActivity.java (93%) rename app/src/main/java/com/{info => uiui}/sn/activity/PrivacyPolicyActivity.java (96%) rename app/src/main/java/com/{info => uiui}/sn/activity/SNUidActivity.java (88%) rename app/src/main/java/com/{info => uiui}/sn/activity/ScreenLockActivity.java (92%) rename app/src/main/java/com/{info => uiui}/sn/activity/UserAgreementActivity.java (96%) rename app/src/main/java/com/{info => uiui}/sn/activity/main/MainActivity.java (80%) rename app/src/main/java/com/{info => uiui}/sn/activity/main/MainContact.java (91%) rename app/src/main/java/com/{info => uiui}/sn/activity/main/MainPresenter.java (71%) rename app/src/main/java/com/{info => uiui}/sn/activity/selectegrade/SelecteGradeActivity.java (95%) rename app/src/main/java/com/{info => uiui}/sn/activity/selectegrade/SelecteGradeContact.java (75%) create mode 100644 app/src/main/java/com/uiui/sn/activity/selectegrade/SelecteGradePresenter.java rename app/src/main/java/com/{info => uiui}/sn/adapter/SNUidAdapter.java (95%) rename app/src/main/java/com/{info => uiui}/sn/base/BaseActivity.java (90%) rename app/src/main/java/com/{info => uiui}/sn/base/BaseApplication.java (96%) rename app/src/main/java/com/{info => uiui}/sn/base/CheckPermissionsActivity.java (99%) rename app/src/main/java/com/{info => uiui}/sn/bean/gankao/ActiveUser.java (71%) rename app/src/main/java/com/{info => uiui}/sn/bean/gankao/AvailableProduct.java (98%) rename app/src/main/java/com/{info => uiui}/sn/bean/gankao/CancelUserPower.java (94%) rename app/src/main/java/com/{info => uiui}/sn/bean/gankao/CreateUserBean.java (97%) rename app/src/main/java/com/{info => uiui}/sn/bean/gankao/GankaoBaseResponse.java (95%) rename app/src/main/java/com/{info => uiui}/sn/bean/gankao/PowerUser.java (98%) rename app/src/main/java/com/{info => uiui}/sn/bean/gankao/UserProduct.java (98%) rename app/src/main/java/com/{info => uiui}/sn/bean/gankao/UserProductCards.java (90%) rename app/src/main/java/com/{info => uiui}/sn/bean/zuoye/AppInfo.java (99%) rename app/src/main/java/com/{info => uiui}/sn/bean/zuoye/AppJump.java (95%) rename app/src/main/java/com/{info => uiui}/sn/bean/zuoye/AppStart.java (98%) rename app/src/main/java/com/{info => uiui}/sn/bean/zuoye/AppUploadInfo.java (96%) rename app/src/main/java/com/{info => uiui}/sn/bean/zuoye/AppUsed.java (95%) rename app/src/main/java/com/{info => uiui}/sn/bean/zuoye/BaseResponse.java (87%) rename app/src/main/java/com/{info => uiui}/sn/bean/zuoye/Label.java (95%) rename app/src/main/java/com/{info => uiui}/sn/bean/zuoye/LocalAppInfo.java (99%) rename app/src/main/java/com/{info => uiui}/sn/bean/zuoye/Response.java (86%) rename app/src/main/java/com/{info => uiui}/sn/bean/zuoye/SNUidBean.java (97%) rename app/src/main/java/com/{info => uiui}/sn/bean/zuoye/SystemSettings.java (99%) rename app/src/main/java/com/{info => uiui}/sn/bean/zuoye/UserAvatarInfo.java (96%) rename app/src/main/java/com/{info => uiui}/sn/bean/zuoye/UserInfo.java (98%) rename app/src/main/java/com/{info => uiui}/sn/bean/zuoye/browser/BrowserApiData.java (94%) rename app/src/main/java/com/{info => uiui}/sn/bean/zuoye/browser/BrowserBean.java (94%) rename app/src/main/java/com/{info => uiui}/sn/config/CommonData.java (97%) rename app/src/main/java/com/{info => uiui}/sn/config/Configs.java (95%) rename app/src/main/java/com/{info => uiui}/sn/config/Scheme.java (97%) rename app/src/main/java/com/{info => uiui}/sn/dialog/ActivationDialog.java (98%) rename app/src/main/java/com/{info => uiui}/sn/dialog/CustomDialog.java (98%) rename app/src/main/java/com/{info => uiui}/sn/dialog/InfoDialog.java (98%) rename app/src/main/java/com/{info => uiui}/sn/dialog/UserDebugDialog.java (97%) rename app/src/main/java/com/{info => uiui}/sn/fragment/AppletQRCodeFragment.java (88%) rename app/src/main/java/com/{info => uiui}/sn/fragment/BaseFragmentPagerAdapter.java (99%) rename app/src/main/java/com/{info => uiui}/sn/fragment/QRCodeFragment.java (93%) rename app/src/main/java/com/{info => uiui}/sn/jpush/ExampleApplication.java (87%) rename app/src/main/java/com/{info => uiui}/sn/jpush/ExampleUtil.java (98%) rename app/src/main/java/com/{info => uiui}/sn/jpush/LocalBroadcastManager.java (99%) rename app/src/main/java/com/{info => uiui}/sn/jpush/Logger.java (96%) rename app/src/main/java/com/{info => uiui}/sn/jpush/MyJPushMessageReceiver.java (96%) rename app/src/main/java/com/{info => uiui}/sn/jpush/PushService.java (79%) rename app/src/main/java/com/{info => uiui}/sn/jpush/TagAliasOperatorHelper.java (99%) rename app/src/main/java/com/{info => uiui}/sn/jpush/TestActivity.java (97%) rename app/src/main/java/com/{info => uiui}/sn/manager/AmapManager.java (98%) rename app/src/main/java/com/{info => uiui}/sn/manager/ControlManager.java (96%) rename app/src/main/java/com/{info => uiui}/sn/manager/DeviceManager.java (94%) rename app/src/main/java/com/{info => uiui}/sn/manager/MyGlideModule.java (95%) rename app/src/main/java/com/{info => uiui}/sn/manager/NetInterfaceManager.java (80%) rename app/src/main/java/com/{info => uiui}/sn/mvp/BasePresenter.java (81%) rename app/src/main/java/com/{info => uiui}/sn/mvp/BaseView.java (55%) rename app/src/main/java/com/{info => uiui}/sn/network/HTTPInterface.java (84%) create mode 100644 app/src/main/java/com/uiui/sn/network/UrlAddress.java rename app/src/main/java/com/{info => uiui}/sn/network/api/APPJump.java (63%) rename app/src/main/java/com/{info => uiui}/sn/network/api/AddAppInstall.java (75%) rename app/src/main/java/com/{info => uiui}/sn/network/api/AppUsedApi.java (75%) rename app/src/main/java/com/{info => uiui}/sn/network/api/Applog.java (78%) rename app/src/main/java/com/{info => uiui}/sn/network/api/BindDevices.java (73%) rename app/src/main/java/com/{info => uiui}/sn/network/api/Browser.java (60%) rename app/src/main/java/com/{info => uiui}/sn/network/api/BrowserLabel.java (62%) rename app/src/main/java/com/{info => uiui}/sn/network/api/ForceInstall.java (65%) rename app/src/main/java/com/{info => uiui}/sn/network/api/GetBatchApi.java (67%) create mode 100644 app/src/main/java/com/uiui/sn/network/api/GetControlScreenshotApi.java rename app/src/main/java/com/{info => uiui}/sn/network/api/GetGuideApi.java (68%) rename app/src/main/java/com/{info => uiui}/sn/network/api/GetGuideApiTest.java (67%) rename app/src/main/java/com/{info => uiui}/sn/network/api/GetSnUidApi.java (67%) rename app/src/main/java/com/{info => uiui}/sn/network/api/NewestAppUpdate.java (70%) rename app/src/main/java/com/{info => uiui}/sn/network/api/QRCodeApi.java (60%) rename app/src/main/java/com/{info => uiui}/sn/network/api/QueryAllApp.java (64%) rename app/src/main/java/com/{info => uiui}/sn/network/api/QueryAppInside.java (68%) rename app/src/main/java/com/{info => uiui}/sn/network/api/QuerySnAppStart.java (51%) rename app/src/main/java/com/{info => uiui}/sn/network/api/RunningApp.java (74%) rename app/src/main/java/com/{info => uiui}/sn/network/api/SNInfoApi.java (60%) rename app/src/main/java/com/{info => uiui}/sn/network/api/SaveSnUidApi.java (79%) rename app/src/main/java/com/{info => uiui}/sn/network/api/ScreenLock.java (67%) rename app/src/main/java/com/{info => uiui}/sn/network/api/ScreenState.java (76%) rename app/src/main/java/com/{info => uiui}/sn/network/api/Setting.java (67%) rename app/src/main/java/com/{info => uiui}/sn/network/api/TimeControl.java (68%) rename app/src/main/java/com/{info => uiui}/sn/network/api/UpdateAdminSn.java (80%) rename app/src/main/java/com/{info => uiui}/sn/network/api/UploadScreenshot.java (78%) rename app/src/main/java/com/{info => uiui}/sn/network/api/UserInfoApi.java (67%) rename app/src/main/java/com/{info => uiui}/sn/network/api/UserInfoControl.java (67%) rename app/src/main/java/com/{info => uiui}/sn/receiver/APKinstallReceiver.java (83%) rename app/src/main/java/com/{info => uiui}/sn/receiver/BootReceiver.java (87%) rename app/src/main/java/com/{info => uiui}/sn/receiver/InstallResultReceiver.java (97%) rename app/src/main/java/com/{info => uiui}/sn/receiver/MyJPushReceiver.java (64%) rename app/src/main/java/com/{info => uiui}/sn/service/DownloadService.java (91%) rename app/src/main/java/com/{info => uiui}/sn/service/GuardService.java (94%) rename app/src/main/java/com/{info => uiui}/sn/service/MainService.java (94%) rename app/src/main/java/com/{info => uiui}/sn/service/ManagerService.java (96%) rename app/src/main/java/com/{info => uiui}/sn/service/RemoteService.java (88%) rename app/src/main/java/com/{info => uiui}/sn/service/StepService.java (97%) rename app/src/main/java/com/{info => uiui}/sn/utils/AmapUtils.java (99%) rename app/src/main/java/com/{info => uiui}/sn/utils/ApkUtils.java (95%) rename app/src/main/java/com/{info => uiui}/sn/utils/AppUpdateInfo.java (96%) rename app/src/main/java/com/{info => uiui}/sn/utils/AppsManagerUtils.java (98%) rename app/src/main/java/com/{info => uiui}/sn/utils/CXAESUtil.java (99%) rename app/src/main/java/com/{info => uiui}/sn/utils/CacheUtils.java (99%) rename app/src/main/java/com/{info => uiui}/sn/utils/CmdUtil.java (99%) rename app/src/main/java/com/{info => uiui}/sn/utils/FileUtils.java (93%) rename app/src/main/java/com/{info => uiui}/sn/utils/ForegroundAppUtil.java (99%) rename app/src/main/java/com/{info => uiui}/sn/utils/Hash.java (96%) rename app/src/main/java/com/{info => uiui}/sn/utils/JGYUtils.java (97%) rename app/src/main/java/com/{info => uiui}/sn/utils/LaunchTools.java (99%) rename app/src/main/java/com/{info => uiui}/sn/utils/MD5Util.java (99%) rename app/src/main/java/com/{info => uiui}/sn/utils/SPUtils.java (99%) rename app/src/main/java/com/{info => uiui}/sn/utils/ServiceAliveUtils.java (96%) rename app/src/main/java/com/{info => uiui}/sn/utils/StatusBarUtil.java (99%) rename app/src/main/java/com/{info => uiui}/sn/utils/StorageUtils.java (99%) rename app/src/main/java/com/{info => uiui}/sn/utils/SystemUtils.java (96%) rename app/src/main/java/com/{info => uiui}/sn/utils/TimeUtils.java (99%) rename app/src/main/java/com/{info => uiui}/sn/utils/ToastUtil.java (93%) rename app/src/main/java/com/{info => uiui}/sn/utils/URLUtils.java (98%) rename app/src/main/java/com/{info => uiui}/sn/utils/Utils.java (96%) rename app/src/main/java/com/{info => uiui}/sn/view/FlowRadioGroup.java (98%) rename app/src/main/java/com/{info => uiui}/sn/websocket/JWebSocketClient.java (96%) create mode 100644 app/src/main/res/drawable-hdpi/bind_applet.png create mode 100644 app/src/main/res/drawable/qrcode_shape.xml rename app/src/test/java/com/{info => uiui}/sn/ExampleUnitTest.java (94%) diff --git a/app/build.gradle b/app/build.gradle index 5ffd8c6..65abcfb 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,25 +9,25 @@ static def releaseTime() { } android { - gradle.projectsEvaluated { - tasks.withType(JavaCompile) { - Set fileSet = options.bootstrapClasspath.getFiles() - List newFileList = new ArrayList<>(); - //JAVA语法,可连续调用,输入参数建议为相对路径 - newFileList.add(new File("libs/framework.jar")) - //最后将原始参数添加 - newFileList.addAll(fileSet) - options.bootstrapClasspath = files( - newFileList.toArray() - ) - } - } +// gradle.projectsEvaluated { +// tasks.withType(JavaCompile) { +// Set fileSet = options.bootstrapClasspath.getFiles() +// List newFileList = new ArrayList<>(); +// //JAVA语法,可连续调用,输入参数建议为相对路径 +// newFileList.add(new File("libs/framework.jar")) +// //最后将原始参数添加 +// newFileList.addAll(fileSet) +// options.bootstrapClasspath = files( +// newFileList.toArray() +// ) +// } +// } compileSdkVersion 29 buildToolsVersion "29.0.3" defaultConfig { - applicationId "com.info.sn" + applicationId "com.uiui.sn" minSdkVersion 24 targetSdkVersion 29 @@ -60,28 +60,28 @@ android { productFlavors { beta { flavorDimensions "default" - versionCode 85 - versionName "1.8.5" + versionCode 2 + versionName "1.1" manifestPlaceholders = [ - JPUSH_PKGNAME: "com.info.sn", - JPUSH_APPKEY : "edf9cec22731b8b2fed56ee6", //JPush 上注册的包名对应的 Appkey. + JPUSH_PKGNAME: "com.uiui.sn", + JPUSH_APPKEY : "1a1e405ca5a1a5cd50e9f734", //JPush 上注册的包名对应的 Appkey. JPUSH_CHANNEL: "developer-default", //暂时填写默认值即可. ] - buildConfigField "String", "SCREEN_URL", '"https://homework.uiuios.com:3018/wm/is_online"' - buildConfigField "String", "WEBSOCKET_URL", '"wss://homework.uiuios.com:3018"' + buildConfigField "String", "SCREEN_URL", '"https://led.aolelearn.cn:3018/wm/is_online"' + buildConfigField "String", "WEBSOCKET_URL", '"wss://led.aolelearn.cn:3018"' } official { flavorDimensions "default" - versionCode 77 - versionName "1.7.7" + versionCode 1 + versionName "1.0" manifestPlaceholders = [ - JPUSH_PKGNAME: "com.info.sn", - JPUSH_APPKEY : "4a6d2d53673e958fa8beb69d", //JPush 上注册的包名对应的 Appkey. + JPUSH_PKGNAME: "com.uiui.sn", + JPUSH_APPKEY : "1a1e405ca5a1a5cd50e9f734", //JPush 上注册的包名对应的 Appkey. JPUSH_CHANNEL: "developer-default", //暂时填写默认值即可. ] - buildConfigField "String", "SCREEN_URL", '"https://homework.uiuios.com:3018/wm/is_online"' - buildConfigField "String", "WEBSOCKET_URL", '"wss://homework.uiuios.com:3018"' + buildConfigField "String", "SCREEN_URL", '"https://led.aolelearn.cn:3018/wm/is_online"' + buildConfigField "String", "WEBSOCKET_URL", '"wss://led.aolelearn.cn:3018"' } } @@ -121,7 +121,7 @@ android { buildConfigField "String", "platform", '"ZhanRui"' signingConfig signingConfigs.zhanRui manifestPlaceholders = [ - AMAP_KEY: "8c4e1d478cb91e6b5713562bc424efba" + AMAP_KEY: "8d89de548781c72b984c4b45b146bf1e" ] } @@ -132,7 +132,7 @@ android { debuggable true signingConfig signingConfigs.zhanRui manifestPlaceholders = [ - AMAP_KEY: "8c4e1d478cb91e6b5713562bc424efba" + AMAP_KEY: "8d89de548781c72b984c4b45b146bf1e" ] } @@ -152,7 +152,7 @@ android { } } manifestPlaceholders = [ - AMAP_KEY: "83869aed8624eb00615c2b6d3d15d777" + AMAP_KEY: "8d89de548781c72b984c4b45b146bf1e" ] } @@ -177,7 +177,7 @@ android { } } manifestPlaceholders = [ - AMAP_KEY: "83869aed8624eb00615c2b6d3d15d777" + AMAP_KEY: "8d89de548781c72b984c4b45b146bf1e" ] } } @@ -192,13 +192,13 @@ android { dependencies { // implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation 'androidx.legacy:legacy-support-v4:1.0.0' compileOnly files('libs/framework.jar') implementation 'androidx.appcompat:appcompat:1.3.1' //implementation 'com.android.support:multidex:1.0.3' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' implementation 'androidx.recyclerview:recyclerview:1.2.1' + implementation 'androidx.legacy:legacy-support-v4:1.0.0' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' diff --git a/app/src/androidTest/java/com/info/sn/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/info/sn/ExampleInstrumentedTest.java deleted file mode 100644 index f64e2ec..0000000 --- a/app/src/androidTest/java/com/info/sn/ExampleInstrumentedTest.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.info.sn; - -import android.content.Context; - -import androidx.test.platform.app.InstrumentationRegistry; -import androidx.test.ext.junit.runners.AndroidJUnit4; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import static org.junit.Assert.*; - -/** - * Instrumented test, which will execute on an Android device. - * - * @see Testing documentation - */ -@RunWith(AndroidJUnit4.class) -public class ExampleInstrumentedTest { - @Test - public void useAppContext() { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); - - assertEquals("com.info.sn", appContext.getPackageName()); - } -} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 16af5cd..37a5dd9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,8 +1,9 @@ + @@ -22,7 +23,7 @@ @@ -51,7 +52,7 @@ + android:screenOrientation="portrait"> @@ -99,13 +100,13 @@ - - + + @@ -119,7 +120,7 @@ - + @@ -132,11 +133,11 @@ @@ -155,7 +156,7 @@ @@ -168,13 +169,13 @@ - + @@ -213,7 +214,7 @@ @@ -225,12 +226,12 @@ - + - + @@ -264,19 +265,19 @@ - + @@ -285,10 +286,10 @@ - + - + diff --git a/app/src/main/aidl/com/info/sn/IGetInfoInterface.aidl b/app/src/main/aidl/com/uiui/sn/IGetInfoInterface.aidl similarity index 96% rename from app/src/main/aidl/com/info/sn/IGetInfoInterface.aidl rename to app/src/main/aidl/com/uiui/sn/IGetInfoInterface.aidl index 627fdba..afda07a 100644 --- a/app/src/main/aidl/com/info/sn/IGetInfoInterface.aidl +++ b/app/src/main/aidl/com/uiui/sn/IGetInfoInterface.aidl @@ -1,5 +1,5 @@ // IGetInfoInterface.aidl -package com.info.sn; +package com.uiui.sn; // Declare any non-default types here with import statements diff --git a/app/src/main/aidl/com/info/sn/KeepAliveConnection.aidl b/app/src/main/aidl/com/uiui/sn/KeepAliveConnection.aidl similarity index 94% rename from app/src/main/aidl/com/info/sn/KeepAliveConnection.aidl rename to app/src/main/aidl/com/uiui/sn/KeepAliveConnection.aidl index 3cada22..c704231 100644 --- a/app/src/main/aidl/com/info/sn/KeepAliveConnection.aidl +++ b/app/src/main/aidl/com/uiui/sn/KeepAliveConnection.aidl @@ -1,5 +1,5 @@ // KeepAliveConnection.aidl -package com.info.sn; +package com.uiui.sn; // Declare any non-default types here with import statements diff --git a/app/src/main/java/com/info/sn/activity/selectegrade/SelecteGradePresenter.java b/app/src/main/java/com/info/sn/activity/selectegrade/SelecteGradePresenter.java deleted file mode 100644 index 68f8f31..0000000 --- a/app/src/main/java/com/info/sn/activity/selectegrade/SelecteGradePresenter.java +++ /dev/null @@ -1,357 +0,0 @@ -package com.info.sn.activity.selectegrade; - -import android.content.Context; -import android.provider.Settings; -import android.text.TextUtils; -import android.util.Log; - -import com.alibaba.fastjson.JSONObject; -import com.google.gson.Gson; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import com.google.gson.reflect.TypeToken; -import com.info.sn.activity.main.MainActivity; -import com.info.sn.activity.main.MainPresenter; -import com.info.sn.bean.gankao.AvailableProduct; -import com.info.sn.bean.gankao.CreateUserBean; -import com.info.sn.bean.gankao.GankaoBaseResponse; -import com.info.sn.bean.gankao.PowerUser; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.bean.zuoye.Response; -import com.info.sn.bean.zuoye.UserInfo; -import com.info.sn.config.Scheme; -import com.info.sn.manager.NetInterfaceManager; -import com.info.sn.utils.LaunchTools; -import com.info.sn.utils.SPUtils; -import com.info.sn.utils.ToastUtil; -import com.info.sn.utils.Utils; -import com.trello.rxlifecycle2.LifecycleProvider; -import com.trello.rxlifecycle2.android.ActivityEvent; - -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -import io.reactivex.Observer; -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.disposables.Disposable; -import io.reactivex.schedulers.Schedulers; - -public class SelecteGradePresenter implements SelecteGradeContact.Presenter { - private String TAG; - - private SelecteGradeContact.MainView mView; - private Context mContext; - - SelecteGradePresenter(Context context) { - this.mContext = context; - TAG = context.getClass().getSimpleName() + "." + MainPresenter.class.getSimpleName() + ":"; - } - - private LifecycleProvider provider; - - public void setProvider(LifecycleProvider provider) { - this.provider = provider; - } - - public LifecycleProvider getProvider() { - return provider; - } - - @Override - public void attachView(SelecteGradeContact.MainView view) { - this.mView = view; - } - - @Override - public void detachView() { - this.mView = null; - } - - @Override - public void checkSN() { - NetInterfaceManager.getInstance() - .getsnInfoControl() - .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) - .subscribe(new Observer>() { - @Override - public void onSubscribe(Disposable d) { - Log.e(TAG + "checkSN", "onSubscribe: "); - } - - @Override - public void onNext(BaseResponse userInfoBaseResponse) { - Log.e(TAG + "checkSN", "onNext: "); - int code = userInfoBaseResponse.code; - mView.checkSNResult(code); - } - - @Override - public void onError(Throwable e) { - Log.e(TAG + "checkSN", "onError: " + e.getMessage()); - mView.checkSNResult(404); - onComplete(); - } - - @Override - public void onComplete() { - Log.e(TAG + TAG + "checkSN", "onComplete: "); - } - }); - } - - @Override - public void getGankaoUID() { - String appid = Scheme.partner_id; - String timestamp = String.valueOf(System.currentTimeMillis()); - String uid = Utils.getSerial(); - Log.e(TAG + TAG, "getGankaoUID: uid: " + uid); - if (TextUtils.isEmpty(uid) || "0".equals(uid)) { - ToastUtil.show("设备未绑定账号,请绑定后重试"); - return; - } - - HashMap params = new HashMap<>(); - params.put("appid", appid); - params.put("timestamp", timestamp); - params.put("uid", uid); - String token = LaunchTools.getToken(params); - NetInterfaceManager.getInstance() - .getCreateUserControl() - .createUser(appid, timestamp, uid, token) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - Log.e(TAG + "getGankaoUID", "onSubscribe: "); - } - - @Override - public void onNext(GankaoBaseResponse gankaoBaseResponse) { - Log.e(TAG + "getGankaoUID", "onNext: " + JSONObject.toJSONString(gankaoBaseResponse)); - if (gankaoBaseResponse.code == 10002) { - Type type = new TypeToken() { - }.getType(); - Gson gson = new Gson(); - CreateUserBean userBean = gson.fromJson(gson.toJson(gankaoBaseResponse.data), type); - String gankaoPartnerUID = userBean.getGankaoPartnerUID(); - int gankaoUIDint = userBean.getGankaoUID(); - String gankaoUID = String.valueOf(gankaoUIDint); - Log.e(TAG + "getGankaoUID", "onNext: gankaoUID: " + gankaoUID); - SPUtils.put(mContext, "gankaoUID", gankaoUID); - Settings.System.putString(mContext.getContentResolver(), "gankaoUID", gankaoUID); - int isNew = userBean.getIsNew(); - mView.setGankaoUID(gankaoUID); - } else { - mView.setGankaoUID(""); - } - } - - @Override - public void onError(Throwable e) { - mView.setGankaoUID(""); - Log.e(TAG + "getGankaoUID", "onError: " + e.getMessage()); - } - - @Override - public void onComplete() { - Log.e(TAG + "getGankaoUID", "onComplete: "); - } - }); - } - - @Override - public void queryAvailableProduct() { - String appid = Scheme.partner_id; - String timestamp = String.valueOf(System.currentTimeMillis()); - HashMap params = new HashMap<>(); - params.put("appid", appid); - params.put("timestamp", timestamp); - NetInterfaceManager.getInstance() - .getQueryProductControl() - .activeUser(appid, timestamp, LaunchTools.getToken(params)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - Log.e(TAG + "queryAvailableProduct", "onSubscribe: "); - } - - @Override - public void onNext(GankaoBaseResponse gankaoBaseResponse) { - Log.e(TAG + "queryAvailableProduct", "onNext: " + JSONObject.toJSONString(gankaoBaseResponse)); - if (gankaoBaseResponse.code == 10000) { - Type type = new TypeToken>() { - }.getType(); - Gson gson = new Gson(); - List availableProductList = gson.fromJson(gson.toJson(gankaoBaseResponse.data), type); - mView.setAvailableProduct(availableProductList); - } else { - ToastUtil.show("获取激活套餐失败"); - mView.setAvailableProduct(new ArrayList()); - } - } - - @Override - public void onError(Throwable e) { - Log.e(TAG + "queryAvailableProduct", "onError: " + e.getMessage()); - mView.setAvailableProduct(new ArrayList()); - } - - @Override - public void onComplete() { - Log.e(TAG + "queryAvailableProduct", "onComplete: "); - } - }); - } - - @Override - public void activeUser(AvailableProduct product, int grade) { - String specification_id = product.getSpecification_id(); - Log.e(TAG, "activeUser: specification_id: " + specification_id); - String appid = Scheme.partner_id; - String timestamp = String.valueOf(System.currentTimeMillis()); - String uid = Utils.getSerial(); - HashMap params = new HashMap<>(); - params.put("appid", appid); - params.put("timestamp", timestamp); - params.put("uid", uid); - params.put("specification_id", String.valueOf(specification_id)); - - NetInterfaceManager.getInstance() - .getActiveUserControl() - .activeUser(appid, timestamp, LaunchTools.getToken(params), uid, specification_id) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - Log.e(TAG + "activeUser", "onSubscribe: "); - } - - @Override - public void onNext(GankaoBaseResponse gankaoBaseResponse) { - String jsonString = JSONObject.toJSONString(gankaoBaseResponse); - Log.e(TAG + "activeUser", "onNext: " + jsonString); - switch (gankaoBaseResponse.code) { - //第一次激活 - case 10000: - //已经授权过的 - case 50000: - Settings.System.putInt(mContext.getContentResolver(), MainActivity.activation, 1); - break; - default: - Settings.System.putInt(mContext.getContentResolver(), MainActivity.activation, 0); - break; - } - mView.activeUserFinish(gankaoBaseResponse.code, grade); - } - - @Override - public void onError(Throwable e) { - Log.e(TAG + "activeUser", "onError: "); - mView.activeUserFinish(0, grade); - } - - @Override - public void onComplete() { - Log.e(TAG + "activeUser", "onComplete: "); - } - }); - } - - @Override - public void queryPowerUserList(int grade) { - String appid = Scheme.partner_id; - String timestamp = String.valueOf(System.currentTimeMillis()); - HashMap params = new HashMap<>(); - params.put("appid", appid); - params.put("timestamp", timestamp); - - NetInterfaceManager.getInstance() - .getQueryPowerUserListControl() - .queryPowerUserList(appid, timestamp, LaunchTools.getToken(params)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - Log.e("queryPowerUserList", "onSubscribe: "); - } - - @Override - public void onNext(GankaoBaseResponse gankaoBaseResponse) { - Log.e("queryPowerUserList", "onNext: "); -// Log.e("queryPowerUserList", "onNext: " + JSONObject.toJSONString(gankaoBaseResponse)); - int code = gankaoBaseResponse.code; - if (code == 10000) { - Gson gson = new Gson(); - Type type = new TypeToken>() { - }.getType(); - JsonObject jsonObject = JsonParser.parseString(gson.toJson(gankaoBaseResponse.data)).getAsJsonObject(); - JsonArray jsonArray = jsonObject.getAsJsonArray("powerlist"); - List powerUserList = gson.fromJson(gson.toJson(jsonArray), type); - mView.queryPowerUserListFinish(powerUserList, grade); - } - } - - @Override - public void onError(Throwable e) { - Log.e("queryPowerUserList", "onError: " + e.getMessage()); - onComplete(); - } - - @Override - public void onComplete() { - Log.e("queryPowerUserList", "onComplete: "); - } - }); - } - - @Override - public void sendUid(String jsonString, int grade) { - String gankaoUID = Settings.System.getString(mContext.getContentResolver(), "gankaoUID"); - if (TextUtils.isEmpty(gankaoUID)) { - ToastUtil.show("获取设备UID失败,请重新激活"); - } - Log.e(TAG, "sendUid: " + jsonString); - NetInterfaceManager.getInstance() - .getSaveSnUidApiControl() - .saveSnUid(Utils.getSerial(), gankaoUID, grade, jsonString) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - Log.e(TAG + "sendUid", "onSubscribe: "); - } - - @Override - public void onNext(Response response) { - Log.e(TAG + "sendUid", "onNext: " + JSONObject.toJSONString(response)); - mView.sendUidFinish(response.code); - } - - @Override - public void onError(Throwable e) { - Log.e(TAG + "sendUid", "onError: " + e.getMessage()); - mView.sendUidFinish(404); - onComplete(); - } - - @Override - public void onComplete() { - Log.e(TAG + "sendUid", "onComplete: "); - } - }); - } -} diff --git a/app/src/main/java/com/info/sn/network/UrlAddress.java b/app/src/main/java/com/info/sn/network/UrlAddress.java deleted file mode 100644 index 539cdd5..0000000 --- a/app/src/main/java/com/info/sn/network/UrlAddress.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.info.sn.network; - -public class UrlAddress { - //主页接口 - public static final String ROOT_URL = "http://homework.uiuios.com/android/"; - //获取班级ID - public static final String GET_BATCH = ROOT_URL + "sn/getBatch"; - //设备信息接口 - public static final String SNINFO = ROOT_URL + "sn/getSnInfo"; - //发送app信息 - public static final String APPLOG = ROOT_URL + "App/getApplog"; - //获取正在运行的app - public static final String RUN_NEW_APP = "app/runNewApp"; - //根据包名获取更新 - public final static String GET_APP_UPDATE = ROOT_URL + "Update/update"; - //获取当前最顶层应用和电量 - public final static String SEND_RUNINGAPPINFO = ROOT_URL + "Monitoring/getAppNow"; - //在线状态 - public final static String SEND_DRIVE_STATE = ROOT_URL + "Online/online"; - //获取所有应用 - public final static String GET_ALL_PACKAGE = ROOT_URL + "app/queryAllApp"; - //绑定设备消息 - public final static String BIND_DEVICES = ROOT_URL + "sn/bindSn"; - //获取系统设置 - public final static String GET_SETTINGS = ROOT_URL + "control/getSetting"; - //浏览器网址管控 - public final static String SET_BROWSER_URL = ROOT_URL + "control/getBrowser"; - //浏览器书签管控 - public final static String SET_BROWSER_LABEL = ROOT_URL + "control/getLabel"; - //获取强制下载 - public final static String GET_FORCE_INSTALL = ROOT_URL + "app/getForceDownload"; - //获取app管控 - public final static String GET_APP_START = ROOT_URL + "sn/querySnAppStart"; - //发app跳转管控 - public final static String GET_APP_JUMP = ROOT_URL + "sn/querySnJump"; - //发app跳转管控 - public final static String QUERY_APP_INSIDE = ROOT_URL + "control/queryAppInside"; - //发送卸载或者安装信息 - public final static String SEND_INSTALLEDORREMOVED = ROOT_URL + "app/addAppInstall"; - //发送卸载或者安装信息 - public final static String UPDATE_SNINFO = ROOT_URL + "sn/updateAdminSn"; - //根据包名获取更新 - public final static String GET_NEWESTAPPUPDATE = ROOT_URL + "app/newestAppUpdate"; - //上传屏幕截图 - public final static String UPLOAD_SCREEN_SNAPSHOT = ROOT_URL + "sn/uploadScreenshot"; - //获取屏幕管控 - public final static String GET_SCREEN_LOCK = ROOT_URL + "sn/getScreenshot"; - //获取时间管控 - public final static String GET_TIME_CONTROL = ROOT_URL + "sn/getTimeControl"; - //获取用户头像和信息 - public static final String GET_USER_AVATAR_INFO = "sn/getUserAvatarInfo"; - //上传设备赶考的UID - public static final String POST_USER_SAVESNUID = "sn/saveSnUid"; - //获取激活时间和赶考UID - public static final String GET_SN_UID = "sn/getSnUid"; - //获取app使用信息 - public static final String UPLOAD_APP_USE_INFO = "sn/uploadAppUseInfo"; - //获取小程序二维码 - public static final String GET_APPLET_QRCODE = "file/getAppletQrCode"; - //获取操作指南 - public static final String GET_OPERATION_GUIDE = "file/getFiles"; - - - //赶考 - public static final String GANKAN_ROOT_URL = "https://www.gankao.com/api/service/"; - //创建/查询用户 - public static final String CREATE_USER = "createUser"; - //用户授权/激活权限 - public static final String ACTIVE_USER = "activeUser"; - //获得可用的权限产品规格 - public static final String QUERY_AVAILABLE_PRODUCT_SPECIFICATIONS = "queryAvailableProductSpecifications"; - //获取机构的接口授权记录 - public static final String QUERY_POWER_USER_LIST = "queryPowerUserList"; - //获取用户已获得的产品列表(权限、单体课程、套餐等) - public static final String GET_USER_PRODUCTS = "getUserProducts"; - //升级用户会员权限的学段 - public static final String UPGRADE_USER_POWER = "upgradeUserPower"; - //撤销指定的用户授权记录 - public static final String CANCEL_USER_POWER = "cancelUserPower"; - - - /* - * 极光 - * */ - //删除alias - public static final String DELETE_JPUSH_ALIAS = "https://device.jpush.cn/v3/aliases/"; - //删除tags - public static final String DELETE_JPUSH_TAG = "https://device.jpush.cn/v3/tags/"; -} diff --git a/app/src/main/java/com/info/sn/network/api/gankao/ActiveUserApi.java b/app/src/main/java/com/info/sn/network/api/gankao/ActiveUserApi.java deleted file mode 100644 index e7def73..0000000 --- a/app/src/main/java/com/info/sn/network/api/gankao/ActiveUserApi.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.info.sn.network.api.gankao; - -import com.info.sn.bean.gankao.GankaoBaseResponse; -import com.info.sn.network.UrlAddress; - -import io.reactivex.Observable; -import retrofit2.http.GET; -import retrofit2.http.Query; - -public interface ActiveUserApi { - @GET(UrlAddress - .ACTIVE_USER) - Observable activeUser( - @Query("app_id") String app_id, - @Query("timestamp") String timestamp, - @Query("token") String token, - @Query("uid") String uid, - @Query("specification_id") String specification_id - ); -} diff --git a/app/src/main/java/com/info/sn/network/api/gankao/CancelUserPowerApi.java b/app/src/main/java/com/info/sn/network/api/gankao/CancelUserPowerApi.java deleted file mode 100644 index c8e6393..0000000 --- a/app/src/main/java/com/info/sn/network/api/gankao/CancelUserPowerApi.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.info.sn.network.api.gankao; - -import com.info.sn.bean.gankao.GankaoBaseResponse; -import com.info.sn.bean.gankao.CancelUserPower; -import com.info.sn.network.UrlAddress; - -import io.reactivex.Observable; -import retrofit2.http.GET; -import retrofit2.http.Query; - -public interface CancelUserPowerApi { - @GET(UrlAddress.CANCEL_USER_POWER) - Observable> cancelUserPower( - @Query("app_id") String app_id, - @Query("timestamp") String timestamp, - @Query("token") String token, - @Query("user_power_id") String user_power_id, - @Query("specification_id") String specification_id - ); -} diff --git a/app/src/main/java/com/info/sn/network/api/gankao/CreateUserApi.java b/app/src/main/java/com/info/sn/network/api/gankao/CreateUserApi.java deleted file mode 100644 index c03e028..0000000 --- a/app/src/main/java/com/info/sn/network/api/gankao/CreateUserApi.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.info.sn.network.api.gankao; - -import com.info.sn.bean.gankao.GankaoBaseResponse; -import com.info.sn.network.UrlAddress; - -import io.reactivex.Observable; -import retrofit2.http.GET; -import retrofit2.http.Query; - -public interface CreateUserApi { - @GET(UrlAddress.CREATE_USER) - Observable createUser( - @Query("app_id") String app_id, - @Query("timestamp") String timestamp, - @Query("uid") String uid, - @Query("token") String token - ); -} diff --git a/app/src/main/java/com/info/sn/network/api/gankao/QueryPowerUserListApi.java b/app/src/main/java/com/info/sn/network/api/gankao/QueryPowerUserListApi.java deleted file mode 100644 index ebb2381..0000000 --- a/app/src/main/java/com/info/sn/network/api/gankao/QueryPowerUserListApi.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.info.sn.network.api.gankao; - -import com.info.sn.bean.gankao.GankaoBaseResponse; -import com.info.sn.network.UrlAddress; - -import io.reactivex.Observable; -import retrofit2.http.GET; -import retrofit2.http.Query; - -public interface QueryPowerUserListApi { - @GET(UrlAddress.QUERY_POWER_USER_LIST) - Observable queryPowerUserList( - @Query("app_id") String app_id, - @Query("timestamp") String timestamp, - @Query("token") String token - ); -} diff --git a/app/src/main/java/com/info/sn/network/api/gankao/QueryProductApi.java b/app/src/main/java/com/info/sn/network/api/gankao/QueryProductApi.java deleted file mode 100644 index 5eed154..0000000 --- a/app/src/main/java/com/info/sn/network/api/gankao/QueryProductApi.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.info.sn.network.api.gankao; - -import com.info.sn.bean.gankao.GankaoBaseResponse; -import com.info.sn.network.UrlAddress; - -import io.reactivex.Observable; -import retrofit2.http.GET; -import retrofit2.http.Query; - -public interface QueryProductApi { - @GET(UrlAddress.QUERY_AVAILABLE_PRODUCT_SPECIFICATIONS) - Observable activeUser( - @Query("app_id") String app_id, - @Query("timestamp") String timestamp, - @Query("token") String token - ); -} diff --git a/app/src/main/java/com/info/sn/network/api/gankao/UpgradeUserPowerApi.java b/app/src/main/java/com/info/sn/network/api/gankao/UpgradeUserPowerApi.java deleted file mode 100644 index 0874985..0000000 --- a/app/src/main/java/com/info/sn/network/api/gankao/UpgradeUserPowerApi.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.info.sn.network.api.gankao; - -import com.info.sn.bean.gankao.GankaoBaseResponse; -import com.info.sn.network.UrlAddress; - -import io.reactivex.Observable; -import retrofit2.http.GET; -import retrofit2.http.Query; - -public interface UpgradeUserPowerApi { - @GET(UrlAddress.UPGRADE_USER_POWER) - Observable upgradeUserPower( - @Query("app_id") String app_id, - @Query("timestamp") String timestamp, - @Query("token") String token, - @Query("uid") String uid, - @Query("user_power_id") String user_power_id - ); -} diff --git a/app/src/main/java/com/info/sn/network/api/gankao/UserProductsApi.java b/app/src/main/java/com/info/sn/network/api/gankao/UserProductsApi.java deleted file mode 100644 index 92a9b6b..0000000 --- a/app/src/main/java/com/info/sn/network/api/gankao/UserProductsApi.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.info.sn.network.api.gankao; - -import com.info.sn.bean.gankao.GankaoBaseResponse; -import com.info.sn.bean.gankao.UserProduct; -import com.info.sn.bean.gankao.UserProductCards; -import com.info.sn.network.UrlAddress; - -import java.util.List; - -import io.reactivex.Observable; -import retrofit2.http.GET; -import retrofit2.http.Query; - -public interface UserProductsApi { - @GET(UrlAddress.GET_USER_PRODUCTS) - Observable>>> getUserProducts( - @Query("app_id") String app_id, - @Query("timestamp") String timestamp, - @Query("token") String token, - @Query("uid") String uid - ); -} diff --git a/app/src/main/java/com/info/sn/Statistics/AppInformation.java b/app/src/main/java/com/uiui/sn/Statistics/AppInformation.java similarity index 98% rename from app/src/main/java/com/info/sn/Statistics/AppInformation.java rename to app/src/main/java/com/uiui/sn/Statistics/AppInformation.java index 282f1fe..320b514 100644 --- a/app/src/main/java/com/info/sn/Statistics/AppInformation.java +++ b/app/src/main/java/com/uiui/sn/Statistics/AppInformation.java @@ -1,4 +1,4 @@ -package com.info.sn.Statistics; +package com.uiui.sn.Statistics; import android.annotation.TargetApi; import android.app.usage.UsageStats; @@ -9,8 +9,6 @@ import android.graphics.drawable.Drawable; import android.os.Build; import android.os.SystemClock; -import java.io.Serializable; - public class AppInformation { private UsageStats usageStats; diff --git a/app/src/main/java/com/info/sn/Statistics/StatisticsInfo.java b/app/src/main/java/com/uiui/sn/Statistics/StatisticsInfo.java similarity index 99% rename from app/src/main/java/com/info/sn/Statistics/StatisticsInfo.java rename to app/src/main/java/com/uiui/sn/Statistics/StatisticsInfo.java index f389d07..3dfc3ec 100644 --- a/app/src/main/java/com/info/sn/Statistics/StatisticsInfo.java +++ b/app/src/main/java/com/uiui/sn/Statistics/StatisticsInfo.java @@ -1,4 +1,4 @@ -package com.info.sn.Statistics; +package com.uiui.sn.Statistics; import android.annotation.TargetApi; import android.app.usage.UsageEvents; @@ -8,7 +8,7 @@ import android.content.Context; import android.os.Build; -import com.info.sn.utils.ApkUtils; +import com.uiui.sn.utils.ApkUtils; import java.util.ArrayList; import java.util.Calendar; @@ -44,7 +44,7 @@ public class StatisticsInfo { } List packageList = new ArrayList() {{ - this.add("com.info.sn"); + this.add("com.uiui.sn"); this.add("com.android.launcher3"); this.add("com.android.settings"); this.add("com.appstore.uiui"); diff --git a/app/src/main/java/com/info/sn/activity/GuideActivity.java b/app/src/main/java/com/uiui/sn/activity/GuideActivity.java similarity index 93% rename from app/src/main/java/com/info/sn/activity/GuideActivity.java rename to app/src/main/java/com/uiui/sn/activity/GuideActivity.java index e11b0c9..b646552 100644 --- a/app/src/main/java/com/info/sn/activity/GuideActivity.java +++ b/app/src/main/java/com/uiui/sn/activity/GuideActivity.java @@ -1,4 +1,4 @@ -package com.info.sn.activity; +package com.uiui.sn.activity; import android.text.TextUtils; import android.util.Log; @@ -10,10 +10,10 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.bumptech.glide.Glide; import com.github.chrisbanes.photoview.PhotoView; -import com.info.sn.R; -import com.info.sn.base.BaseActivity; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.manager.NetInterfaceManager; +import com.uiui.sn.R; +import com.uiui.sn.base.BaseActivity; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.manager.NetInterfaceManager; import io.reactivex.Observer; import io.reactivex.disposables.Disposable; diff --git a/app/src/main/java/com/info/sn/activity/PrivacyPolicyActivity.java b/app/src/main/java/com/uiui/sn/activity/PrivacyPolicyActivity.java similarity index 96% rename from app/src/main/java/com/info/sn/activity/PrivacyPolicyActivity.java rename to app/src/main/java/com/uiui/sn/activity/PrivacyPolicyActivity.java index b83396d..9c7136d 100644 --- a/app/src/main/java/com/info/sn/activity/PrivacyPolicyActivity.java +++ b/app/src/main/java/com/uiui/sn/activity/PrivacyPolicyActivity.java @@ -1,13 +1,12 @@ -package com.info.sn.activity; +package com.uiui.sn.activity; import android.util.Log; -import android.view.MotionEvent; import android.view.View; import android.webkit.WebSettings; import android.webkit.WebView; -import com.info.sn.R; -import com.info.sn.base.BaseActivity; +import com.uiui.sn.R; +import com.uiui.sn.base.BaseActivity; import java.io.BufferedReader; import java.io.IOException; diff --git a/app/src/main/java/com/info/sn/activity/SNUidActivity.java b/app/src/main/java/com/uiui/sn/activity/SNUidActivity.java similarity index 88% rename from app/src/main/java/com/info/sn/activity/SNUidActivity.java rename to app/src/main/java/com/uiui/sn/activity/SNUidActivity.java index 8d5bd23..2245cb7 100644 --- a/app/src/main/java/com/info/sn/activity/SNUidActivity.java +++ b/app/src/main/java/com/uiui/sn/activity/SNUidActivity.java @@ -1,9 +1,8 @@ -package com.info.sn.activity; +package com.uiui.sn.activity; import android.content.Intent; import android.text.TextUtils; import android.util.Log; -import android.view.View; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.recyclerview.widget.LinearLayoutManager; @@ -12,11 +11,11 @@ import androidx.recyclerview.widget.RecyclerView; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import com.info.sn.R; -import com.info.sn.adapter.SNUidAdapter; -import com.info.sn.base.BaseActivity; -import com.info.sn.bean.zuoye.SNUidBean; -import com.info.sn.utils.ToastUtil; +import com.uiui.sn.R; +import com.uiui.sn.adapter.SNUidAdapter; +import com.uiui.sn.base.BaseActivity; +import com.uiui.sn.bean.zuoye.SNUidBean; +import com.uiui.sn.utils.ToastUtil; import java.util.List; diff --git a/app/src/main/java/com/info/sn/activity/ScreenLockActivity.java b/app/src/main/java/com/uiui/sn/activity/ScreenLockActivity.java similarity index 92% rename from app/src/main/java/com/info/sn/activity/ScreenLockActivity.java rename to app/src/main/java/com/uiui/sn/activity/ScreenLockActivity.java index 575d14b..49b13d1 100644 --- a/app/src/main/java/com/info/sn/activity/ScreenLockActivity.java +++ b/app/src/main/java/com/uiui/sn/activity/ScreenLockActivity.java @@ -1,14 +1,13 @@ -package com.info.sn.activity; +package com.uiui.sn.activity; import android.content.Intent; import android.os.Bundle; import android.view.KeyEvent; -import android.view.MotionEvent; import android.view.WindowManager; import androidx.appcompat.app.AppCompatActivity; -import com.info.sn.R; +import com.uiui.sn.R; public class ScreenLockActivity extends AppCompatActivity { diff --git a/app/src/main/java/com/info/sn/activity/UserAgreementActivity.java b/app/src/main/java/com/uiui/sn/activity/UserAgreementActivity.java similarity index 96% rename from app/src/main/java/com/info/sn/activity/UserAgreementActivity.java rename to app/src/main/java/com/uiui/sn/activity/UserAgreementActivity.java index 7ff8542..82264c0 100644 --- a/app/src/main/java/com/info/sn/activity/UserAgreementActivity.java +++ b/app/src/main/java/com/uiui/sn/activity/UserAgreementActivity.java @@ -1,13 +1,12 @@ -package com.info.sn.activity; +package com.uiui.sn.activity; import android.util.Log; -import android.view.MotionEvent; import android.view.View; import android.webkit.WebSettings; import android.webkit.WebView; -import com.info.sn.R; -import com.info.sn.base.BaseActivity; +import com.uiui.sn.R; +import com.uiui.sn.base.BaseActivity; import java.io.BufferedReader; import java.io.IOException; diff --git a/app/src/main/java/com/info/sn/activity/main/MainActivity.java b/app/src/main/java/com/uiui/sn/activity/main/MainActivity.java similarity index 80% rename from app/src/main/java/com/info/sn/activity/main/MainActivity.java rename to app/src/main/java/com/uiui/sn/activity/main/MainActivity.java index 1d21155..a4257d9 100644 --- a/app/src/main/java/com/info/sn/activity/main/MainActivity.java +++ b/app/src/main/java/com/uiui/sn/activity/main/MainActivity.java @@ -1,4 +1,4 @@ -package com.info.sn.activity.main; +package com.uiui.sn.activity.main; import android.content.BroadcastReceiver; import android.content.ComponentName; @@ -24,45 +24,48 @@ import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.viewpager.widget.ViewPager; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.blankj.utilcode.util.NetworkUtils; +import com.bumptech.glide.Glide; import com.flyco.tablayout.SlidingTabLayout; -import com.info.sn.BuildConfig; -import com.info.sn.R; -import com.info.sn.activity.GuideActivity; -import com.info.sn.activity.PrivacyPolicyActivity; -import com.info.sn.activity.SNUidActivity; -import com.info.sn.activity.UserAgreementActivity; -import com.info.sn.activity.selectegrade.SelecteGradeActivity; -import com.info.sn.base.BaseActivity; -import com.info.sn.bean.gankao.AvailableProduct; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.bean.zuoye.UserInfo; -import com.info.sn.config.Configs; -import com.info.sn.config.Scheme; -import com.info.sn.dialog.ActivationDialog; -import com.info.sn.dialog.UserDebugDialog; -import com.info.sn.fragment.AppletQRCodeFragment; -import com.info.sn.fragment.BaseFragmentPagerAdapter; -import com.info.sn.fragment.QRCodeFragment; -import com.info.sn.jpush.ExampleUtil; -import com.info.sn.jpush.LocalBroadcastManager; -import com.info.sn.jpush.TagAliasOperatorHelper; -import com.info.sn.network.HTTPInterface; -import com.info.sn.receiver.BootReceiver; -import com.info.sn.service.DownloadService; -import com.info.sn.service.GuardService; -import com.info.sn.service.MainService; -import com.info.sn.service.ManagerService; -import com.info.sn.service.StepService; -import com.info.sn.manager.ControlManager; -import com.info.sn.manager.DeviceManager; -import com.info.sn.utils.JGYUtils; -import com.info.sn.utils.LaunchTools; -import com.info.sn.utils.SPUtils; -import com.info.sn.utils.TimeUtils; -import com.info.sn.utils.ToastUtil; -import com.info.sn.utils.Utils; +import com.uiui.sn.BuildConfig; +import com.uiui.sn.R; +import com.uiui.sn.activity.GuideActivity; +import com.uiui.sn.activity.PrivacyPolicyActivity; +import com.uiui.sn.activity.SNUidActivity; +import com.uiui.sn.activity.UserAgreementActivity; +import com.uiui.sn.activity.selectegrade.SelecteGradeActivity; +import com.uiui.sn.base.BaseActivity; +import com.uiui.sn.bean.gankao.AvailableProduct; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.bean.zuoye.UserInfo; +import com.uiui.sn.config.Configs; +import com.uiui.sn.config.Scheme; +import com.uiui.sn.dialog.ActivationDialog; +import com.uiui.sn.dialog.UserDebugDialog; +import com.uiui.sn.fragment.AppletQRCodeFragment; +import com.uiui.sn.fragment.BaseFragmentPagerAdapter; +import com.uiui.sn.fragment.QRCodeFragment; +import com.uiui.sn.jpush.ExampleUtil; +import com.uiui.sn.jpush.LocalBroadcastManager; +import com.uiui.sn.jpush.TagAliasOperatorHelper; +import com.uiui.sn.manager.NetInterfaceManager; +import com.uiui.sn.network.HTTPInterface; +import com.uiui.sn.receiver.BootReceiver; +import com.uiui.sn.service.DownloadService; +import com.uiui.sn.service.GuardService; +import com.uiui.sn.service.MainService; +import com.uiui.sn.service.ManagerService; +import com.uiui.sn.service.StepService; +import com.uiui.sn.manager.ControlManager; +import com.uiui.sn.manager.DeviceManager; +import com.uiui.sn.utils.JGYUtils; +import com.uiui.sn.utils.LaunchTools; +import com.uiui.sn.utils.SPUtils; +import com.uiui.sn.utils.TimeUtils; +import com.uiui.sn.utils.ToastUtil; +import com.uiui.sn.utils.Utils; import org.jetbrains.annotations.NotNull; @@ -75,8 +78,10 @@ import java.util.Set; import butterknife.BindView; import butterknife.ButterKnife; import cn.jpush.android.api.JPushInterface; +import io.reactivex.Observer; +import io.reactivex.disposables.Disposable; -import static com.info.sn.jpush.TagAliasOperatorHelper.ACTION_SET; +import static com.uiui.sn.jpush.TagAliasOperatorHelper.ACTION_SET; public class MainActivity extends BaseActivity implements MainContact.MainView, NetworkUtils.OnNetworkStatusChangedListener { private final String TAG = MainActivity.class.getSimpleName(); @@ -88,72 +93,22 @@ public class MainActivity extends BaseActivity implements MainContact.MainView, private long timeMillis; public static boolean isForeground = false; - @BindView(R.id.cl_update) - ConstraintLayout cl_update; - - @BindView(R.id.cl_vip) - ConstraintLayout cl_vip; - @BindView(R.id.tv_exit) TextView tv_exit; - @BindView(R.id.tv_title) TextView tv_title; - - @BindView(R.id.qr_code) - ImageView qr_code; - - @BindView(R.id.iv_logo) - ImageView iv_logo; - - @BindView(R.id.tv_note) - TextView tv_note; - - @BindView(R.id.tv_devsn) - TextView tv_devsn; - - @BindView(R.id.tv_username) - TextView tv_username; - - @BindView(R.id.tv_school) - TextView tv_school; - - @BindView(R.id.tv_grade) - TextView tv_grade; - - @BindView(R.id.tv_vip) - TextView tv_vip; - - @BindView(R.id.tv_version) - TextView tv_version; - @BindView(R.id.tv_customversion) TextView tv_customversion; - - @BindView(R.id.bt_activation) - TextView bt_activation; - - @BindView(R.id.bt_repurchase) - TextView bt_repurchase; - - @BindView(R.id.tv_guide) - TextView tv_guide; - - @BindView(R.id.tv_pripolicy) - TextView tv_pripolicy; - - @BindView(R.id.tv_useragreement) - TextView tv_useragreement; - - @BindView(R.id.tv_activate) - TextView tv_activate; - - @BindView(R.id.viewPager) - ViewPager viewPager; - - @BindView(R.id.slidingtablayout) - SlidingTabLayout slidingtablayout; - + @BindView(R.id.tv_sn) + TextView tv_sn; + @BindView(R.id.tv_bind) + TextView tv_bind; + @BindView(R.id.tv_version) + TextView tv_version; + @BindView(R.id.qr_code) + ImageView qr_code; + @BindView(R.id.iv_appqrcode) + ImageView iv_appqrcode; @BindView(R.id.iv_exit) ImageView iv_exit; @@ -182,26 +137,25 @@ public class MainActivity extends BaseActivity implements MainContact.MainView, NetworkUtils.registerNetworkStatusChangedListener(this); setOnClickListener(); - tv_devsn.setText(Utils.getSerial()); - tv_version.setText(BuildConfig.VERSION_NAME); String rom = JGYUtils.getCustomVersion(); tv_customversion.setText(rom); - + tv_sn.setText("SN:" + Utils.getSerial()); + tv_version.setText(BuildConfig.VERSION_NAME); initTabLayout(); readOldData(); TimeTask task = new TimeTask(); task.execute("ntp.aliyun.com"); - + getQRCodeURL(); //更新设备信息之后停止停止这两个应用以免获取不到信息 int versionCode = (int) SPUtils.get(this, "versionCode", 0); if (versionCode < BuildConfig.VERSION_CODE) { - JGYUtils.getInstance().killBackgroundProcesses(this, "com.jiaoguanyi.os"); - JGYUtils.getInstance().killBackgroundProcesses(this, "com.gankao.gkwxhd"); +// JGYUtils.getInstance().killBackgroundProcesses(this, "com.jiaoguanyi.os"); +// JGYUtils.getInstance().killBackgroundProcesses(this, "com.gankao.gkwxhd"); SPUtils.put(this, "versionCode", BuildConfig.VERSION_CODE); } //启动应用市场 Intent bootIntent = new Intent(BootReceiver.BOOT_COMPLETED); - bootIntent.setComponent(new ComponentName("com.jgyapp.market", "com.jgyapp.market.receiver.BootReceiver")); + bootIntent.setComponent(new ComponentName("com.uiui.appstore", "com.uiui.appstore.receiver.BootReceiver")); sendBroadcast(bootIntent); } @@ -239,7 +193,7 @@ public class MainActivity extends BaseActivity implements MainContact.MainView, registerReceiver(); setJpush(); HTTPInterface.sendAppUsed(this); - HTTPInterface.sendRunningApp(this); +// HTTPInterface.sendRunningApp(this); HTTPInterface.getAPPinfo(this); time0 = System.currentTimeMillis(); timeMillis = System.currentTimeMillis(); @@ -260,7 +214,6 @@ public class MainActivity extends BaseActivity implements MainContact.MainView, @Override protected void onResume() { super.onResume(); - setClickable(); mPresenter.getUserInfo(); mPresenter.getSnInfo(); isForeground = true; @@ -289,6 +242,48 @@ public class MainActivity extends BaseActivity implements MainContact.MainView, } } + private void getQRCodeURL() { + NetInterfaceManager.getInstance() + .getQRCodeApiControl() + .subscribe(new Observer() { + @Override + public void onSubscribe(Disposable d) { + Log.e("getQRCodeURL", "onSubscribe: "); + } + + @Override + public void onNext(BaseResponse baseResponse) { + Log.e("getQRCodeURL", "onNext: "); + if (baseResponse.code == 200) { + JSONObject jsonObject = (JSONObject) JSON.toJSON(baseResponse.data); + String url = jsonObject.getString("file"); + if (!TextUtils.isEmpty(url)) { + Glide.with(iv_appqrcode) + .load(url) + .dontAnimate() + .placeholder(getDrawable(R.drawable.applet_qrcode)) + .into(iv_appqrcode); + } else { + iv_appqrcode.setImageDrawable(getDrawable(R.drawable.applet_qrcode)); + } + } else { + iv_appqrcode.setImageDrawable(getDrawable(R.drawable.applet_qrcode)); + } + } + + @Override + public void onError(Throwable e) { + Log.e("getQRCodeURL", "onError: " + e.getMessage()); + } + + @Override + public void onComplete() { + Log.e("getQRCodeURL", "onComplete: "); + } + }); + } + + private boolean isDebugMode() { if (DeviceManager.isDebugMode()) { return true; @@ -341,17 +336,12 @@ public class MainActivity extends BaseActivity implements MainContact.MainView, dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); } - private void initTabLayout() { List fragmentList = new ArrayList<>(); FragmentManager fragmentManager = getSupportFragmentManager(); fragmentList.add(new AppletQRCodeFragment()); fragmentList.add(new QRCodeFragment()); BaseFragmentPagerAdapter adapter = new BaseFragmentPagerAdapter(fragmentManager, fragmentList); - viewPager.setAdapter(adapter); - viewPager.setOffscreenPageLimit(3); - String[] titles = new String[]{"第一步 ", " 第二步"}; - slidingtablayout.setViewPager(viewPager, titles); } private void setJpush() { @@ -374,12 +364,6 @@ public class MainActivity extends BaseActivity implements MainContact.MainView, } private void readOldData() { - String sn_name = (String) SPUtils.get(this, Configs.UserName, defaultText); - tv_username.setText(sn_name); - String school = (String) SPUtils.get(this, Configs.UserSchool, defaultText); - tv_school.setText(school); - String grade = (String) SPUtils.get(this, Configs.UserGrade, defaultText); - tv_grade.setText(grade); int statu = (int) SPUtils.get(this, Configs.isLogined, 0); switch (statu) { default: @@ -397,19 +381,7 @@ public class MainActivity extends BaseActivity implements MainContact.MainView, } private void setOnClickListener() { - setClickable(); - cl_update.setOnClickListener(view -> continuousClick(COUNTS, DURATION)); - cl_vip.setOnClickListener(view -> { - Intent intent = new Intent(); - intent.putExtra("json", SnUidJSON); - intent.setClass(MainActivity.this, SNUidActivity.class); - startActivity(intent); - }); - bt_activation.setOnClickListener(view -> { - startActivity(new Intent(MainActivity.this, SelecteGradeActivity.class)); -// showActivationDialog(); - }); - iv_exit.setOnClickListener(view -> finish()); + iv_exit.setOnClickListener(view -> lazyExit()); tv_title.setOnClickListener(view -> { if (isDebugMode()) { enterUserDebug(); @@ -417,15 +389,18 @@ public class MainActivity extends BaseActivity implements MainContact.MainView, } }); - tv_guide.setOnClickListener(view -> startActivity(new Intent(MainActivity.this, GuideActivity.class))); - tv_pripolicy.setOnClickListener(v -> { - startActivity(new Intent(MainActivity.this, PrivacyPolicyActivity.class)); - }); - tv_useragreement.setOnClickListener(v -> { - startActivity(new Intent(MainActivity.this, UserAgreementActivity.class)); - }); } + private long mPreClickTime; + + private void lazyExit() { + if (System.currentTimeMillis() - mPreClickTime > 3000) { + ToastUtil.show("再按一次,退出"); + mPreClickTime = System.currentTimeMillis(); + } else { + finish(); + } + } private void showActivationDialog() { ActivationDialog dialog = new ActivationDialog(this); @@ -660,31 +635,6 @@ public class MainActivity extends BaseActivity implements MainContact.MainView, public static String activation = "gankao_activation"; - private void setClickable() { - int isEnabled = Settings.System.getInt(getContentResolver(), activation, 0); - if (isEnabled == 0) { - bt_activation.setVisibility(View.VISIBLE); - bt_repurchase.setVisibility(View.GONE); - tv_vip.setVisibility(View.GONE); - bt_activation.setEnabled(true); - bt_activation.setText("激活学习系统"); - } else { - bt_activation.setVisibility(View.GONE); - bt_repurchase.setVisibility(View.VISIBLE); - tv_vip.setVisibility(View.VISIBLE); - bt_activation.setEnabled(false); - bt_activation.setText("已激活学习系统"); - } - if (BuildConfig.DEBUG) { - bt_activation.setVisibility(View.VISIBLE); - bt_repurchase.setVisibility(View.GONE); - tv_vip.setVisibility(View.VISIBLE); - bt_activation.setEnabled(true); - bt_activation.setText("激活学习系统"); - } - } - - private void startService() { startService(new Intent(this, MainService.class)); startService(new Intent(this, GuardService.class)); @@ -721,7 +671,7 @@ public class MainActivity extends BaseActivity implements MainContact.MainView, //for receive customer msg from jpush server private MessageReceiver mMessageReceiver = new MessageReceiver(); - private String MESSAGE_RECEIVED_ACTION = "com.info.sn.MESSAGE_RECEIVED_ACTION"; + private String MESSAGE_RECEIVED_ACTION = "com.uiui.sn.MESSAGE_RECEIVED_ACTION"; private String KEY_TITLE = "title"; private String KEY_MESSAGE = "message"; private String KEY_EXTRAS = "extras"; @@ -760,6 +710,7 @@ public class MainActivity extends BaseActivity implements MainContact.MainView, int code = response.code; //设备已经绑定 if (code == 200) { + tv_bind.setText(getString(R.string.bind_succeed)); UserInfo userInfo = response.data; boolean username = Settings.System.putString(getContentResolver(), "UserInfo_username", userInfo.getSn_name()); boolean gread = Settings.System.putString(getContentResolver(), "UserInfo_grade", userInfo.getGrade()); @@ -768,27 +719,23 @@ public class MainActivity extends BaseActivity implements MainContact.MainView, SPUtils.put(this, "sn_id", userInfo.getId()); if (!TextUtils.isEmpty(userInfo.getSn_name())) { SPUtils.put(this, "USERINFO_NAME", userInfo.getSn_name()); - tv_username.setText(userInfo.getSn_name()); } if (!TextUtils.isEmpty(userInfo.getSchool())) { SPUtils.put(this, "USERINFO_SCHOOL", userInfo.getSchool()); - tv_school.setText(userInfo.getSchool()); } if (!TextUtils.isEmpty(userInfo.getGrade())) { SPUtils.put(this, "USERINFO_GRADE", userInfo.getGrade()); - tv_grade.setText(userInfo.getGrade()); } mPresenter.getLocked(); } //设备没有绑定 else if (code == 300) { - tv_username.setText(defaultText); - tv_school.setText(defaultText); - tv_grade.setText(defaultText); + tv_bind.setText(getString(R.string.scan_tips)); ControlManager.getInstance().setDisableSetting(); } //没有授权的设备 else if (code == 400) { + tv_bind.setText("设备未经授权"); ToastUtil.show("设备未经授权"); Log.e(TAG, "setInfo: " + "设备未经授权"); ControlManager.getInstance().setDisableSetting(); @@ -820,7 +767,6 @@ public class MainActivity extends BaseActivity implements MainContact.MainView, } else { mPresenter.registerGankao(); } - setClickable(); } @Override @@ -907,6 +853,4 @@ public class MainActivity extends BaseActivity implements MainContact.MainView, public void setScreenLock() { Log.e(TAG, "SettingFinished: " + (System.currentTimeMillis() - timeMillis) + " ms"); } - - } diff --git a/app/src/main/java/com/info/sn/activity/main/MainContact.java b/app/src/main/java/com/uiui/sn/activity/main/MainContact.java similarity index 91% rename from app/src/main/java/com/info/sn/activity/main/MainContact.java rename to app/src/main/java/com/uiui/sn/activity/main/MainContact.java index 5215181..2172c46 100644 --- a/app/src/main/java/com/info/sn/activity/main/MainContact.java +++ b/app/src/main/java/com/uiui/sn/activity/main/MainContact.java @@ -1,13 +1,13 @@ -package com.info.sn.activity.main; +package com.uiui.sn.activity.main; import android.graphics.Bitmap; import com.alibaba.fastjson.JSONObject; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.bean.zuoye.UserInfo; -import com.info.sn.bean.gankao.AvailableProduct; -import com.info.sn.mvp.BasePresenter; -import com.info.sn.mvp.BaseView; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.bean.zuoye.UserInfo; +import com.uiui.sn.bean.gankao.AvailableProduct; +import com.uiui.sn.mvp.BasePresenter; +import com.uiui.sn.mvp.BaseView; import java.util.List; diff --git a/app/src/main/java/com/info/sn/activity/main/MainPresenter.java b/app/src/main/java/com/uiui/sn/activity/main/MainPresenter.java similarity index 71% rename from app/src/main/java/com/info/sn/activity/main/MainPresenter.java rename to app/src/main/java/com/uiui/sn/activity/main/MainPresenter.java index 578d6ae..90b69de 100644 --- a/app/src/main/java/com/info/sn/activity/main/MainPresenter.java +++ b/app/src/main/java/com/uiui/sn/activity/main/MainPresenter.java @@ -1,4 +1,4 @@ -package com.info.sn.activity.main; +package com.uiui.sn.activity.main; import android.annotation.SuppressLint; import android.content.Context; @@ -19,36 +19,35 @@ import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.reflect.TypeToken; -import com.info.sn.bean.gankao.AvailableProduct; -import com.info.sn.bean.gankao.CreateUserBean; -import com.info.sn.bean.gankao.GankaoBaseResponse; -import com.info.sn.bean.gankao.PowerUser; -import com.info.sn.bean.zuoye.AppInfo; -import com.info.sn.bean.zuoye.AppStart; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.bean.zuoye.Label; -import com.info.sn.bean.zuoye.browser.BrowserApiData; -import com.info.sn.bean.zuoye.browser.BrowserBean; -import com.info.sn.bean.zuoye.UserAvatarInfo; -import com.info.sn.bean.zuoye.UserInfo; -import com.info.sn.config.Configs; -import com.info.sn.config.Scheme; -import com.info.sn.manager.AmapManager; -import com.info.sn.manager.ControlManager; -import com.info.sn.manager.NetInterfaceManager; -import com.info.sn.network.HTTPInterface; -import com.info.sn.network.api.BrowserLabel; -import com.info.sn.service.ManagerService; -import com.info.sn.utils.ApkUtils; -import com.info.sn.utils.CXAESUtil; -import com.info.sn.utils.JGYUtils; -import com.info.sn.utils.LaunchTools; -import com.info.sn.utils.SPUtils; -import com.info.sn.utils.ServiceAliveUtils; -import com.info.sn.utils.TimeUtils; -import com.info.sn.utils.ToastUtil; -import com.info.sn.utils.URLUtils; -import com.info.sn.utils.Utils; +import com.uiui.sn.bean.gankao.AvailableProduct; +import com.uiui.sn.bean.gankao.CreateUserBean; +import com.uiui.sn.bean.gankao.GankaoBaseResponse; +import com.uiui.sn.bean.gankao.PowerUser; +import com.uiui.sn.bean.zuoye.AppInfo; +import com.uiui.sn.bean.zuoye.AppStart; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.bean.zuoye.Label; +import com.uiui.sn.bean.zuoye.browser.BrowserApiData; +import com.uiui.sn.bean.zuoye.browser.BrowserBean; +import com.uiui.sn.bean.zuoye.UserAvatarInfo; +import com.uiui.sn.bean.zuoye.UserInfo; +import com.uiui.sn.config.Configs; +import com.uiui.sn.config.Scheme; +import com.uiui.sn.manager.AmapManager; +import com.uiui.sn.manager.ControlManager; +import com.uiui.sn.manager.NetInterfaceManager; +import com.uiui.sn.network.HTTPInterface; +import com.uiui.sn.service.ManagerService; +import com.uiui.sn.utils.ApkUtils; +import com.uiui.sn.utils.CXAESUtil; +import com.uiui.sn.utils.JGYUtils; +import com.uiui.sn.utils.LaunchTools; +import com.uiui.sn.utils.SPUtils; +import com.uiui.sn.utils.ServiceAliveUtils; +import com.uiui.sn.utils.TimeUtils; +import com.uiui.sn.utils.ToastUtil; +import com.uiui.sn.utils.URLUtils; +import com.uiui.sn.utils.Utils; import com.trello.rxlifecycle2.LifecycleProvider; import com.trello.rxlifecycle2.android.ActivityEvent; @@ -66,6 +65,8 @@ import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; +import static com.uiui.sn.service.ManagerService.LOCK_STATE; + /** * @author jgy02 */ @@ -103,60 +104,6 @@ public class MainPresenter implements MainContact.Presenter { @Override public void queryPowerUserList() { - String appid = Scheme.partner_id; - String timestamp = String.valueOf(System.currentTimeMillis()); - HashMap params = new HashMap<>(); - params.put("appid", appid); - params.put("timestamp", timestamp); - - NetInterfaceManager.getInstance() - .getQueryPowerUserListControl() - .queryPowerUserList(appid, timestamp, LaunchTools.getToken(params)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - Log.e("queryPowerUserList", "onSubscribe: "); - } - - @Override - public void onNext(GankaoBaseResponse gankaoBaseResponse) { - Log.e("queryPowerUserList", "onNext: " + JSONObject.toJSONString(gankaoBaseResponse)); - int code = gankaoBaseResponse.code; - if (code == 10000) { - Gson gson = new Gson(); - Type type = new TypeToken>() { - }.getType(); - JsonObject jsonObject = JsonParser.parseString(gson.toJson(gankaoBaseResponse.data)).getAsJsonObject(); - JsonArray jsonArray = jsonObject.getAsJsonArray("powerlist"); - List powerUserList = gson.fromJson(gson.toJson(jsonArray), type); - HashMap hashMap = new HashMap<>(); - for (PowerUser powerUser : powerUserList) { - hashMap.put(powerUser.getUserID(), powerUser); - } - PowerUser powerUser = hashMap.get(Utils.getSerial()); - if (powerUser != null) { - String date = powerUser.getAuthorizationDate(); - mView.setPowerUserList(date); - } else { - mView.setPowerUserList(""); - } - } - } - - @Override - public void onError(Throwable e) { - Log.e("queryPowerUserList", "onError: " + e.getMessage()); - onComplete(); - } - - @Override - public void onComplete() { - Log.e("queryPowerUserList", "onComplete: "); - } - }); } @@ -198,167 +145,18 @@ public class MainPresenter implements MainContact.Presenter { */ @Override public void getGankaoUID() { - String appid = Scheme.partner_id; - String timestamp = String.valueOf(System.currentTimeMillis()); - String uid = Utils.getSerial(); - Log.e(TAG + TAG, "getGankaoUID: uid: " + uid); - if (TextUtils.isEmpty(uid) || "0".equals(uid)) { - ToastUtil.show("设备未绑定账号,请绑定后重试"); - return; - } - HashMap params = new HashMap<>(); - params.put("appid", appid); - params.put("timestamp", timestamp); - params.put("uid", uid); - String token = LaunchTools.getToken(params); - NetInterfaceManager.getInstance() - .getCreateUserControl() - .createUser(appid, timestamp, uid, token) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - Log.e(TAG + "getGankaoUID", "onSubscribe: "); - } - - @Override - public void onNext(GankaoBaseResponse gankaoBaseResponse) { - Log.e(TAG + "getGankaoUID", "onNext: " + JSONObject.toJSONString(gankaoBaseResponse)); - if (gankaoBaseResponse.code == 10002) { - Type type = new TypeToken() { - }.getType(); - Gson gson = new Gson(); - CreateUserBean userBean = gson.fromJson(gson.toJson(gankaoBaseResponse.data), type); - String gankaoPartnerUID = userBean.getGankaoPartnerUID(); - int gankaoUIDint = userBean.getGankaoUID(); - String gankaoUID = String.valueOf(gankaoUIDint); - Log.e(TAG + "getGankaoUID", "onNext: gankaoUID: " + gankaoUID); - SPUtils.put(mContext, "gankaoUID", gankaoUID); - Settings.System.putString(mContext.getContentResolver(), "gankaoUID", gankaoUID); - int isNew = userBean.getIsNew(); - mView.setGankaoUID(gankaoUID); - } else { - mView.setGankaoUID(""); - } - } - - @Override - public void onError(Throwable e) { - mView.setGankaoUID(""); - Log.e(TAG + "getGankaoUID", "onError: " + e.getMessage()); - } - - @Override - public void onComplete() { - Log.e(TAG + "getGankaoUID", "onComplete: "); - } - }); } @Override public void queryAvailableProduct(String gankaoUID) { - String appid = Scheme.partner_id; - String timestamp = String.valueOf(System.currentTimeMillis()); - HashMap params = new HashMap<>(); - params.put("appid", appid); - params.put("timestamp", timestamp); - NetInterfaceManager.getInstance() - .getQueryProductControl() - .activeUser(appid, timestamp, LaunchTools.getToken(params)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - Log.e(TAG + "queryAvailableProduct", "onSubscribe: "); - } - @Override - public void onNext(GankaoBaseResponse gankaoBaseResponse) { - Log.e(TAG + "queryAvailableProduct", "onNext: " + JSONObject.toJSONString(gankaoBaseResponse)); - if (gankaoBaseResponse.code == 10000) { - Type type = new TypeToken>() { - }.getType(); - Gson gson = new Gson(); - List availableProductList = gson.fromJson(gson.toJson(gankaoBaseResponse.data), type); - mView.setAvailableProduct(availableProductList, gankaoUID); - } else { - ToastUtil.show("获取激活套餐失败"); - mView.setAvailableProduct(new ArrayList(), gankaoUID); - } - } - - @Override - public void onError(Throwable e) { - Log.e(TAG + "queryAvailableProduct", "onError: " + e.getMessage()); - mView.setAvailableProduct(new ArrayList(), gankaoUID); - } - - @Override - public void onComplete() { - Log.e(TAG + "queryAvailableProduct", "onComplete: "); - } - }); } @Override public void activeUser(@NotNull AvailableProduct product, String gankaoUID) { - String specification_id = product.getSpecification_id(); - Log.e(TAG, "activeUser: specification_id: " + specification_id); - String appid = Scheme.partner_id; - String timestamp = String.valueOf(System.currentTimeMillis()); - String uid = Utils.getSerial(); - HashMap params = new HashMap<>(); - params.put("appid", appid); - params.put("timestamp", timestamp); - params.put("uid", uid); - params.put("specification_id", String.valueOf(specification_id)); - NetInterfaceManager.getInstance() - .getActiveUserControl() - .activeUser(appid, timestamp, LaunchTools.getToken(params), uid, specification_id) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - Log.e(TAG + "activeUser", "onSubscribe: "); - } - - @Override - public void onNext(GankaoBaseResponse gankaoBaseResponse) { - Log.e(TAG + "activeUser", "onNext: " + JSONObject.toJSONString(gankaoBaseResponse)); - switch (gankaoBaseResponse.code) { - case 10000: - case 50000: - Settings.System.putInt(mContext.getContentResolver(), MainActivity.activation, 1); -// sendUid(product, gankaoUID); - break; - default: - Settings.System.putInt(mContext.getContentResolver(), MainActivity.activation, 0); - break; - - } - mView.activeUserFinish(gankaoBaseResponse.code); - } - - @Override - public void onError(Throwable e) { - Log.e(TAG + "activeUser", "onError: "); - mView.activeUserFinish(0); - } - - @Override - public void onComplete() { - Log.e(TAG + "activeUser", "onComplete: "); - } - }); } @Override @@ -519,59 +317,7 @@ public class MainPresenter implements MainContact.Presenter { @Override public void registerGankao() { - String appid = Scheme.partner_id; - String timestamp = String.valueOf(System.currentTimeMillis()); - String uid = Utils.getSerial(); - HashMap params = new HashMap<>(); - params.put("appid", appid); - params.put("timestamp", timestamp); - params.put("uid", uid); - - NetInterfaceManager.getInstance() - .getCreateUserControl() - .createUser(appid, timestamp, uid, LaunchTools.getToken(params)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - Log.e(TAG + "getGankaoUID", "onSubscribe: "); - } - - @Override - public void onNext(GankaoBaseResponse gankaoBaseResponse) { - Log.e(TAG + "getGankaoUID", "onNext: " + JSONObject.toJSONString(gankaoBaseResponse)); - if (gankaoBaseResponse.code == 10002) { - Type type = new TypeToken() { - }.getType(); - Gson gson = new Gson(); - CreateUserBean userBean = gson.fromJson(gson.toJson(gankaoBaseResponse.data), type); - String gankaoPartnerUID = userBean.getGankaoPartnerUID(); - int gankaoUIDint = userBean.getGankaoUID(); - String gankaoUID = String.valueOf(gankaoUIDint); - Log.e(TAG + "getGankaoUID", "onNext: gankaoUID: " + gankaoUID); - SPUtils.put(mContext, "gankaoUID", gankaoUID); - Settings.System.putString(mContext.getContentResolver(), "gankaoUID", gankaoUID); - int isNew = userBean.getIsNew(); - mView.setGankao(gankaoUID); - } else { - mView.setGankao(""); - } - } - - @Override - public void onError(Throwable e) { - mView.setGankao(""); - Log.e(TAG + "getGankaoUID", "onError: " + e.getMessage()); - } - - @Override - public void onComplete() { - Log.e(TAG + "getGankaoUID", "onComplete: "); - } - }); } @Override @@ -745,7 +491,7 @@ public class MainPresenter implements MainContact.Presenter { @Override public void onNext(BaseResponse> listBaseResponse) { - Log.e(TAG + "getForceInstall", "onNext: "); + Log.e(TAG + "getForceInstall", "onNext: " + listBaseResponse); int code = listBaseResponse.code; if (code == 200) { List appInfos = listBaseResponse.data; @@ -1065,6 +811,7 @@ public class MainPresenter implements MainContact.Presenter { if (!ServiceAliveUtils.isServiceAlice(mContext, ManagerService.class.getName())) { mContext.startService(new Intent(mContext, ManagerService.class)); } + SPUtils.put(mContext, LOCK_STATE, is_screen_lock); Intent intent = new Intent(); // intent.putExtra("name", name); if (1 == is_screen_lock) { diff --git a/app/src/main/java/com/info/sn/activity/selectegrade/SelecteGradeActivity.java b/app/src/main/java/com/uiui/sn/activity/selectegrade/SelecteGradeActivity.java similarity index 95% rename from app/src/main/java/com/info/sn/activity/selectegrade/SelecteGradeActivity.java rename to app/src/main/java/com/uiui/sn/activity/selectegrade/SelecteGradeActivity.java index d64fcb7..fd6e6c8 100644 --- a/app/src/main/java/com/info/sn/activity/selectegrade/SelecteGradeActivity.java +++ b/app/src/main/java/com/uiui/sn/activity/selectegrade/SelecteGradeActivity.java @@ -1,10 +1,6 @@ -package com.info.sn.activity.selectegrade; - -import androidx.appcompat.app.AppCompatActivity; +package com.uiui.sn.activity.selectegrade; import android.net.Uri; -import android.os.Bundle; -import android.provider.Settings; import android.text.TextUtils; import android.view.View; import android.widget.Button; @@ -13,18 +9,15 @@ import android.widget.RadioGroup; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; -import com.info.sn.R; -import com.info.sn.activity.main.MainActivity; -import com.info.sn.base.BaseActivity; -import com.info.sn.bean.gankao.AvailableProduct; -import com.info.sn.bean.gankao.PowerUser; -import com.info.sn.config.Scheme; -import com.info.sn.utils.LaunchTools; -import com.info.sn.utils.SPUtils; -import com.info.sn.utils.ToastUtil; -import com.info.sn.utils.Utils; +import com.uiui.sn.R; +import com.uiui.sn.base.BaseActivity; +import com.uiui.sn.bean.gankao.AvailableProduct; +import com.uiui.sn.bean.gankao.PowerUser; +import com.uiui.sn.config.Scheme; +import com.uiui.sn.utils.LaunchTools; +import com.uiui.sn.utils.SPUtils; +import com.uiui.sn.utils.ToastUtil; +import com.uiui.sn.utils.Utils; import java.text.ParseException; import java.text.SimpleDateFormat; diff --git a/app/src/main/java/com/info/sn/activity/selectegrade/SelecteGradeContact.java b/app/src/main/java/com/uiui/sn/activity/selectegrade/SelecteGradeContact.java similarity index 75% rename from app/src/main/java/com/info/sn/activity/selectegrade/SelecteGradeContact.java rename to app/src/main/java/com/uiui/sn/activity/selectegrade/SelecteGradeContact.java index 994143e..b98864b 100644 --- a/app/src/main/java/com/info/sn/activity/selectegrade/SelecteGradeContact.java +++ b/app/src/main/java/com/uiui/sn/activity/selectegrade/SelecteGradeContact.java @@ -1,10 +1,9 @@ -package com.info.sn.activity.selectegrade; +package com.uiui.sn.activity.selectegrade; -import com.info.sn.activity.main.MainContact; -import com.info.sn.bean.gankao.AvailableProduct; -import com.info.sn.bean.gankao.PowerUser; -import com.info.sn.mvp.BasePresenter; -import com.info.sn.mvp.BaseView; +import com.uiui.sn.bean.gankao.AvailableProduct; +import com.uiui.sn.bean.gankao.PowerUser; +import com.uiui.sn.mvp.BasePresenter; +import com.uiui.sn.mvp.BaseView; import java.util.List; diff --git a/app/src/main/java/com/uiui/sn/activity/selectegrade/SelecteGradePresenter.java b/app/src/main/java/com/uiui/sn/activity/selectegrade/SelecteGradePresenter.java new file mode 100644 index 0000000..117e403 --- /dev/null +++ b/app/src/main/java/com/uiui/sn/activity/selectegrade/SelecteGradePresenter.java @@ -0,0 +1,163 @@ +package com.uiui.sn.activity.selectegrade; + +import android.content.Context; +import android.provider.Settings; +import android.text.TextUtils; +import android.util.Log; + +import com.alibaba.fastjson.JSONObject; +import com.google.gson.Gson; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.google.gson.reflect.TypeToken; +import com.uiui.sn.activity.main.MainActivity; +import com.uiui.sn.activity.main.MainPresenter; +import com.uiui.sn.bean.gankao.AvailableProduct; +import com.uiui.sn.bean.gankao.CreateUserBean; +import com.uiui.sn.bean.gankao.GankaoBaseResponse; +import com.uiui.sn.bean.gankao.PowerUser; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.bean.zuoye.Response; +import com.uiui.sn.bean.zuoye.UserInfo; +import com.uiui.sn.config.Scheme; +import com.uiui.sn.manager.NetInterfaceManager; +import com.uiui.sn.utils.LaunchTools; +import com.uiui.sn.utils.SPUtils; +import com.uiui.sn.utils.ToastUtil; +import com.uiui.sn.utils.Utils; +import com.trello.rxlifecycle2.LifecycleProvider; +import com.trello.rxlifecycle2.android.ActivityEvent; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import io.reactivex.Observer; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; +import io.reactivex.schedulers.Schedulers; + +public class SelecteGradePresenter implements SelecteGradeContact.Presenter { + private String TAG; + + private SelecteGradeContact.MainView mView; + private Context mContext; + + SelecteGradePresenter(Context context) { + this.mContext = context; + TAG = context.getClass().getSimpleName() + "." + MainPresenter.class.getSimpleName() + ":"; + } + + private LifecycleProvider provider; + + public void setProvider(LifecycleProvider provider) { + this.provider = provider; + } + + public LifecycleProvider getProvider() { + return provider; + } + + @Override + public void attachView(SelecteGradeContact.MainView view) { + this.mView = view; + } + + @Override + public void detachView() { + this.mView = null; + } + + @Override + public void checkSN() { + NetInterfaceManager.getInstance() + .getsnInfoControl() + .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new Observer>() { + @Override + public void onSubscribe(Disposable d) { + Log.e(TAG + "checkSN", "onSubscribe: "); + } + + @Override + public void onNext(BaseResponse userInfoBaseResponse) { + Log.e(TAG + "checkSN", "onNext: "); + int code = userInfoBaseResponse.code; + mView.checkSNResult(code); + } + + @Override + public void onError(Throwable e) { + Log.e(TAG + "checkSN", "onError: " + e.getMessage()); + mView.checkSNResult(404); + onComplete(); + } + + @Override + public void onComplete() { + Log.e(TAG + TAG + "checkSN", "onComplete: "); + } + }); + } + + @Override + public void getGankaoUID() { + + } + + @Override + public void queryAvailableProduct() { + + } + + @Override + public void activeUser(AvailableProduct product, int grade) { + + } + + @Override + public void queryPowerUserList(int grade) { + + } + + @Override + public void sendUid(String jsonString, int grade) { + String gankaoUID = Settings.System.getString(mContext.getContentResolver(), "gankaoUID"); + if (TextUtils.isEmpty(gankaoUID)) { + ToastUtil.show("获取设备UID失败,请重新激活"); + } + Log.e(TAG, "sendUid: " + jsonString); + NetInterfaceManager.getInstance() + .getSaveSnUidApiControl() + .saveSnUid(Utils.getSerial(), gankaoUID, grade, jsonString) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new Observer() { + @Override + public void onSubscribe(Disposable d) { + Log.e(TAG + "sendUid", "onSubscribe: "); + } + + @Override + public void onNext(Response response) { + Log.e(TAG + "sendUid", "onNext: " + JSONObject.toJSONString(response)); + mView.sendUidFinish(response.code); + } + + @Override + public void onError(Throwable e) { + Log.e(TAG + "sendUid", "onError: " + e.getMessage()); + mView.sendUidFinish(404); + onComplete(); + } + + @Override + public void onComplete() { + Log.e(TAG + "sendUid", "onComplete: "); + } + }); + } +} diff --git a/app/src/main/java/com/info/sn/adapter/SNUidAdapter.java b/app/src/main/java/com/uiui/sn/adapter/SNUidAdapter.java similarity index 95% rename from app/src/main/java/com/info/sn/adapter/SNUidAdapter.java rename to app/src/main/java/com/uiui/sn/adapter/SNUidAdapter.java index 0734ec4..58a5d67 100644 --- a/app/src/main/java/com/info/sn/adapter/SNUidAdapter.java +++ b/app/src/main/java/com/uiui/sn/adapter/SNUidAdapter.java @@ -1,4 +1,4 @@ -package com.info.sn.adapter; +package com.uiui.sn.adapter; import android.view.View; import android.view.ViewGroup; @@ -8,8 +8,8 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; -import com.info.sn.R; -import com.info.sn.bean.zuoye.SNUidBean; +import com.uiui.sn.R; +import com.uiui.sn.bean.zuoye.SNUidBean; import java.util.List; diff --git a/app/src/main/java/com/info/sn/base/BaseActivity.java b/app/src/main/java/com/uiui/sn/base/BaseActivity.java similarity index 90% rename from app/src/main/java/com/info/sn/base/BaseActivity.java rename to app/src/main/java/com/uiui/sn/base/BaseActivity.java index e90ca3c..c8e4bf8 100644 --- a/app/src/main/java/com/info/sn/base/BaseActivity.java +++ b/app/src/main/java/com/uiui/sn/base/BaseActivity.java @@ -1,15 +1,13 @@ -package com.info.sn.base; +package com.uiui.sn.base; import android.app.ActivityManager; -import android.graphics.Bitmap; import android.os.Build; import android.os.Bundle; import androidx.annotation.Nullable; -import com.info.sn.BuildConfig; -import com.info.sn.R; -import com.info.sn.utils.StatusBarUtil; +import com.uiui.sn.BuildConfig; +import com.uiui.sn.R; import com.trello.rxlifecycle2.components.support.RxAppCompatActivity; import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX; diff --git a/app/src/main/java/com/info/sn/base/BaseApplication.java b/app/src/main/java/com/uiui/sn/base/BaseApplication.java similarity index 96% rename from app/src/main/java/com/info/sn/base/BaseApplication.java rename to app/src/main/java/com/uiui/sn/base/BaseApplication.java index 099be46..c646efa 100644 --- a/app/src/main/java/com/info/sn/base/BaseApplication.java +++ b/app/src/main/java/com/uiui/sn/base/BaseApplication.java @@ -1,27 +1,24 @@ -package com.info.sn.base; +package com.uiui.sn.base; import android.annotation.SuppressLint; import android.app.Application; import android.content.Context; import android.os.Handler; import android.os.Looper; -import android.os.Process; import android.util.Log; import com.arialyy.aria.core.Aria; -import com.blankj.utilcode.util.ProcessUtils; -import com.info.sn.BuildConfig; -import com.info.sn.jpush.TagAliasOperatorHelper; -import com.info.sn.manager.AmapManager; -import com.info.sn.manager.NetInterfaceManager; -import com.info.sn.manager.ControlManager; -import com.info.sn.manager.DeviceManager; -import com.info.sn.network.HTTPInterface; -import com.info.sn.network.UrlAddress; -import com.info.sn.utils.JGYUtils; -import com.info.sn.utils.SystemUtils; -import com.info.sn.utils.ToastUtil; -import com.info.sn.utils.Utils; +import com.uiui.sn.BuildConfig; +import com.uiui.sn.jpush.TagAliasOperatorHelper; +import com.uiui.sn.manager.AmapManager; +import com.uiui.sn.manager.NetInterfaceManager; +import com.uiui.sn.manager.ControlManager; +import com.uiui.sn.manager.DeviceManager; +import com.uiui.sn.network.HTTPInterface; +import com.uiui.sn.network.UrlAddress; +import com.uiui.sn.utils.JGYUtils; +import com.uiui.sn.utils.ToastUtil; +import com.uiui.sn.utils.Utils; import org.jetbrains.annotations.NotNull; diff --git a/app/src/main/java/com/info/sn/base/CheckPermissionsActivity.java b/app/src/main/java/com/uiui/sn/base/CheckPermissionsActivity.java similarity index 99% rename from app/src/main/java/com/info/sn/base/CheckPermissionsActivity.java rename to app/src/main/java/com/uiui/sn/base/CheckPermissionsActivity.java index 2241441..b25c6ab 100644 --- a/app/src/main/java/com/info/sn/base/CheckPermissionsActivity.java +++ b/app/src/main/java/com/uiui/sn/base/CheckPermissionsActivity.java @@ -1,7 +1,7 @@ /** * */ -package com.info.sn.base; +package com.uiui.sn.base; import android.Manifest; import android.annotation.TargetApi; @@ -17,7 +17,7 @@ import android.provider.Settings; import android.view.KeyEvent; -import com.info.sn.R; +import com.uiui.sn.R; import java.lang.reflect.Method; import java.util.ArrayList; diff --git a/app/src/main/java/com/info/sn/bean/gankao/ActiveUser.java b/app/src/main/java/com/uiui/sn/bean/gankao/ActiveUser.java similarity index 71% rename from app/src/main/java/com/info/sn/bean/gankao/ActiveUser.java rename to app/src/main/java/com/uiui/sn/bean/gankao/ActiveUser.java index d913eae..1327fd8 100644 --- a/app/src/main/java/com/info/sn/bean/gankao/ActiveUser.java +++ b/app/src/main/java/com/uiui/sn/bean/gankao/ActiveUser.java @@ -1,4 +1,4 @@ -package com.info.sn.bean.gankao; +package com.uiui.sn.bean.gankao; import java.io.Serializable; diff --git a/app/src/main/java/com/info/sn/bean/gankao/AvailableProduct.java b/app/src/main/java/com/uiui/sn/bean/gankao/AvailableProduct.java similarity index 98% rename from app/src/main/java/com/info/sn/bean/gankao/AvailableProduct.java rename to app/src/main/java/com/uiui/sn/bean/gankao/AvailableProduct.java index f4cf93f..eeb4e41 100644 --- a/app/src/main/java/com/info/sn/bean/gankao/AvailableProduct.java +++ b/app/src/main/java/com/uiui/sn/bean/gankao/AvailableProduct.java @@ -1,4 +1,4 @@ -package com.info.sn.bean.gankao; +package com.uiui.sn.bean.gankao; import java.io.Serializable; diff --git a/app/src/main/java/com/info/sn/bean/gankao/CancelUserPower.java b/app/src/main/java/com/uiui/sn/bean/gankao/CancelUserPower.java similarity index 94% rename from app/src/main/java/com/info/sn/bean/gankao/CancelUserPower.java rename to app/src/main/java/com/uiui/sn/bean/gankao/CancelUserPower.java index 5d4b7ee..98020c3 100644 --- a/app/src/main/java/com/info/sn/bean/gankao/CancelUserPower.java +++ b/app/src/main/java/com/uiui/sn/bean/gankao/CancelUserPower.java @@ -1,4 +1,4 @@ -package com.info.sn.bean.gankao; +package com.uiui.sn.bean.gankao; import java.io.Serializable; diff --git a/app/src/main/java/com/info/sn/bean/gankao/CreateUserBean.java b/app/src/main/java/com/uiui/sn/bean/gankao/CreateUserBean.java similarity index 97% rename from app/src/main/java/com/info/sn/bean/gankao/CreateUserBean.java rename to app/src/main/java/com/uiui/sn/bean/gankao/CreateUserBean.java index b0d41b7..f777fbf 100644 --- a/app/src/main/java/com/info/sn/bean/gankao/CreateUserBean.java +++ b/app/src/main/java/com/uiui/sn/bean/gankao/CreateUserBean.java @@ -1,4 +1,4 @@ -package com.info.sn.bean.gankao; +package com.uiui.sn.bean.gankao; import java.io.Serializable; diff --git a/app/src/main/java/com/info/sn/bean/gankao/GankaoBaseResponse.java b/app/src/main/java/com/uiui/sn/bean/gankao/GankaoBaseResponse.java similarity index 95% rename from app/src/main/java/com/info/sn/bean/gankao/GankaoBaseResponse.java rename to app/src/main/java/com/uiui/sn/bean/gankao/GankaoBaseResponse.java index 5f3dca6..910135b 100644 --- a/app/src/main/java/com/info/sn/bean/gankao/GankaoBaseResponse.java +++ b/app/src/main/java/com/uiui/sn/bean/gankao/GankaoBaseResponse.java @@ -1,4 +1,4 @@ -package com.info.sn.bean.gankao; +package com.uiui.sn.bean.gankao; import androidx.annotation.NonNull; diff --git a/app/src/main/java/com/info/sn/bean/gankao/PowerUser.java b/app/src/main/java/com/uiui/sn/bean/gankao/PowerUser.java similarity index 98% rename from app/src/main/java/com/info/sn/bean/gankao/PowerUser.java rename to app/src/main/java/com/uiui/sn/bean/gankao/PowerUser.java index 153a687..74ca3e8 100644 --- a/app/src/main/java/com/info/sn/bean/gankao/PowerUser.java +++ b/app/src/main/java/com/uiui/sn/bean/gankao/PowerUser.java @@ -1,4 +1,4 @@ -package com.info.sn.bean.gankao; +package com.uiui.sn.bean.gankao; import com.google.gson.annotations.SerializedName; diff --git a/app/src/main/java/com/info/sn/bean/gankao/UserProduct.java b/app/src/main/java/com/uiui/sn/bean/gankao/UserProduct.java similarity index 98% rename from app/src/main/java/com/info/sn/bean/gankao/UserProduct.java rename to app/src/main/java/com/uiui/sn/bean/gankao/UserProduct.java index 33da823..b050965 100644 --- a/app/src/main/java/com/info/sn/bean/gankao/UserProduct.java +++ b/app/src/main/java/com/uiui/sn/bean/gankao/UserProduct.java @@ -1,4 +1,4 @@ -package com.info.sn.bean.gankao; +package com.uiui.sn.bean.gankao; import androidx.annotation.NonNull; diff --git a/app/src/main/java/com/info/sn/bean/gankao/UserProductCards.java b/app/src/main/java/com/uiui/sn/bean/gankao/UserProductCards.java similarity index 90% rename from app/src/main/java/com/info/sn/bean/gankao/UserProductCards.java rename to app/src/main/java/com/uiui/sn/bean/gankao/UserProductCards.java index 1ed6265..0197376 100644 --- a/app/src/main/java/com/info/sn/bean/gankao/UserProductCards.java +++ b/app/src/main/java/com/uiui/sn/bean/gankao/UserProductCards.java @@ -1,4 +1,4 @@ -package com.info.sn.bean.gankao; +package com.uiui.sn.bean.gankao; import java.io.Serializable; diff --git a/app/src/main/java/com/info/sn/bean/zuoye/AppInfo.java b/app/src/main/java/com/uiui/sn/bean/zuoye/AppInfo.java similarity index 99% rename from app/src/main/java/com/info/sn/bean/zuoye/AppInfo.java rename to app/src/main/java/com/uiui/sn/bean/zuoye/AppInfo.java index a5a3e7d..b3bedf0 100644 --- a/app/src/main/java/com/info/sn/bean/zuoye/AppInfo.java +++ b/app/src/main/java/com/uiui/sn/bean/zuoye/AppInfo.java @@ -1,4 +1,4 @@ -package com.info.sn.bean.zuoye; +package com.uiui.sn.bean.zuoye; import java.io.Serializable; diff --git a/app/src/main/java/com/info/sn/bean/zuoye/AppJump.java b/app/src/main/java/com/uiui/sn/bean/zuoye/AppJump.java similarity index 95% rename from app/src/main/java/com/info/sn/bean/zuoye/AppJump.java rename to app/src/main/java/com/uiui/sn/bean/zuoye/AppJump.java index 9d5da09..b47d98c 100644 --- a/app/src/main/java/com/info/sn/bean/zuoye/AppJump.java +++ b/app/src/main/java/com/uiui/sn/bean/zuoye/AppJump.java @@ -1,4 +1,4 @@ -package com.info.sn.bean.zuoye; +package com.uiui.sn.bean.zuoye; import androidx.annotation.NonNull; diff --git a/app/src/main/java/com/info/sn/bean/zuoye/AppStart.java b/app/src/main/java/com/uiui/sn/bean/zuoye/AppStart.java similarity index 98% rename from app/src/main/java/com/info/sn/bean/zuoye/AppStart.java rename to app/src/main/java/com/uiui/sn/bean/zuoye/AppStart.java index e6baf17..f4ee1bc 100644 --- a/app/src/main/java/com/info/sn/bean/zuoye/AppStart.java +++ b/app/src/main/java/com/uiui/sn/bean/zuoye/AppStart.java @@ -1,4 +1,4 @@ -package com.info.sn.bean.zuoye; +package com.uiui.sn.bean.zuoye; import java.io.Serializable; diff --git a/app/src/main/java/com/info/sn/bean/zuoye/AppUploadInfo.java b/app/src/main/java/com/uiui/sn/bean/zuoye/AppUploadInfo.java similarity index 96% rename from app/src/main/java/com/info/sn/bean/zuoye/AppUploadInfo.java rename to app/src/main/java/com/uiui/sn/bean/zuoye/AppUploadInfo.java index fb4add6..6bd0956 100644 --- a/app/src/main/java/com/info/sn/bean/zuoye/AppUploadInfo.java +++ b/app/src/main/java/com/uiui/sn/bean/zuoye/AppUploadInfo.java @@ -1,4 +1,4 @@ -package com.info.sn.bean.zuoye; +package com.uiui.sn.bean.zuoye; import java.io.Serializable; diff --git a/app/src/main/java/com/info/sn/bean/zuoye/AppUsed.java b/app/src/main/java/com/uiui/sn/bean/zuoye/AppUsed.java similarity index 95% rename from app/src/main/java/com/info/sn/bean/zuoye/AppUsed.java rename to app/src/main/java/com/uiui/sn/bean/zuoye/AppUsed.java index bad251d..3fbddfc 100644 --- a/app/src/main/java/com/info/sn/bean/zuoye/AppUsed.java +++ b/app/src/main/java/com/uiui/sn/bean/zuoye/AppUsed.java @@ -1,4 +1,4 @@ -package com.info.sn.bean.zuoye; +package com.uiui.sn.bean.zuoye; import java.io.Serializable; diff --git a/app/src/main/java/com/info/sn/bean/zuoye/BaseResponse.java b/app/src/main/java/com/uiui/sn/bean/zuoye/BaseResponse.java similarity index 87% rename from app/src/main/java/com/info/sn/bean/zuoye/BaseResponse.java rename to app/src/main/java/com/uiui/sn/bean/zuoye/BaseResponse.java index 37e33fe..3c76817 100644 --- a/app/src/main/java/com/info/sn/bean/zuoye/BaseResponse.java +++ b/app/src/main/java/com/uiui/sn/bean/zuoye/BaseResponse.java @@ -1,9 +1,8 @@ -package com.info.sn.bean.zuoye; +package com.uiui.sn.bean.zuoye; import androidx.annotation.NonNull; import com.google.gson.Gson; -import com.google.gson.JsonObject; import com.google.gson.JsonParser; import java.io.Serializable; diff --git a/app/src/main/java/com/info/sn/bean/zuoye/Label.java b/app/src/main/java/com/uiui/sn/bean/zuoye/Label.java similarity index 95% rename from app/src/main/java/com/info/sn/bean/zuoye/Label.java rename to app/src/main/java/com/uiui/sn/bean/zuoye/Label.java index df30830..d8a002e 100644 --- a/app/src/main/java/com/info/sn/bean/zuoye/Label.java +++ b/app/src/main/java/com/uiui/sn/bean/zuoye/Label.java @@ -1,4 +1,4 @@ -package com.info.sn.bean.zuoye; +package com.uiui.sn.bean.zuoye; import java.io.Serializable; diff --git a/app/src/main/java/com/info/sn/bean/zuoye/LocalAppInfo.java b/app/src/main/java/com/uiui/sn/bean/zuoye/LocalAppInfo.java similarity index 99% rename from app/src/main/java/com/info/sn/bean/zuoye/LocalAppInfo.java rename to app/src/main/java/com/uiui/sn/bean/zuoye/LocalAppInfo.java index b3b7c5e..37a30db 100644 --- a/app/src/main/java/com/info/sn/bean/zuoye/LocalAppInfo.java +++ b/app/src/main/java/com/uiui/sn/bean/zuoye/LocalAppInfo.java @@ -1,4 +1,4 @@ -package com.info.sn.bean.zuoye; +package com.uiui.sn.bean.zuoye; import android.graphics.drawable.Drawable; diff --git a/app/src/main/java/com/info/sn/bean/zuoye/Response.java b/app/src/main/java/com/uiui/sn/bean/zuoye/Response.java similarity index 86% rename from app/src/main/java/com/info/sn/bean/zuoye/Response.java rename to app/src/main/java/com/uiui/sn/bean/zuoye/Response.java index 294d64b..afb8a27 100644 --- a/app/src/main/java/com/info/sn/bean/zuoye/Response.java +++ b/app/src/main/java/com/uiui/sn/bean/zuoye/Response.java @@ -1,4 +1,4 @@ -package com.info.sn.bean.zuoye; +package com.uiui.sn.bean.zuoye; import java.io.Serializable; diff --git a/app/src/main/java/com/info/sn/bean/zuoye/SNUidBean.java b/app/src/main/java/com/uiui/sn/bean/zuoye/SNUidBean.java similarity index 97% rename from app/src/main/java/com/info/sn/bean/zuoye/SNUidBean.java rename to app/src/main/java/com/uiui/sn/bean/zuoye/SNUidBean.java index 32c10bb..cbeaa49 100644 --- a/app/src/main/java/com/info/sn/bean/zuoye/SNUidBean.java +++ b/app/src/main/java/com/uiui/sn/bean/zuoye/SNUidBean.java @@ -1,4 +1,4 @@ -package com.info.sn.bean.zuoye; +package com.uiui.sn.bean.zuoye; import java.io.Serializable; diff --git a/app/src/main/java/com/info/sn/bean/zuoye/SystemSettings.java b/app/src/main/java/com/uiui/sn/bean/zuoye/SystemSettings.java similarity index 99% rename from app/src/main/java/com/info/sn/bean/zuoye/SystemSettings.java rename to app/src/main/java/com/uiui/sn/bean/zuoye/SystemSettings.java index b5b78a2..017649a 100644 --- a/app/src/main/java/com/info/sn/bean/zuoye/SystemSettings.java +++ b/app/src/main/java/com/uiui/sn/bean/zuoye/SystemSettings.java @@ -1,4 +1,4 @@ -package com.info.sn.bean.zuoye; +package com.uiui.sn.bean.zuoye; import java.io.Serializable; diff --git a/app/src/main/java/com/info/sn/bean/zuoye/UserAvatarInfo.java b/app/src/main/java/com/uiui/sn/bean/zuoye/UserAvatarInfo.java similarity index 96% rename from app/src/main/java/com/info/sn/bean/zuoye/UserAvatarInfo.java rename to app/src/main/java/com/uiui/sn/bean/zuoye/UserAvatarInfo.java index 22a447c..9b251b7 100644 --- a/app/src/main/java/com/info/sn/bean/zuoye/UserAvatarInfo.java +++ b/app/src/main/java/com/uiui/sn/bean/zuoye/UserAvatarInfo.java @@ -1,4 +1,4 @@ -package com.info.sn.bean.zuoye; +package com.uiui.sn.bean.zuoye; import java.io.Serializable; diff --git a/app/src/main/java/com/info/sn/bean/zuoye/UserInfo.java b/app/src/main/java/com/uiui/sn/bean/zuoye/UserInfo.java similarity index 98% rename from app/src/main/java/com/info/sn/bean/zuoye/UserInfo.java rename to app/src/main/java/com/uiui/sn/bean/zuoye/UserInfo.java index 7509117..cb7aef2 100644 --- a/app/src/main/java/com/info/sn/bean/zuoye/UserInfo.java +++ b/app/src/main/java/com/uiui/sn/bean/zuoye/UserInfo.java @@ -1,4 +1,4 @@ -package com.info.sn.bean.zuoye; +package com.uiui.sn.bean.zuoye; import java.io.Serializable; diff --git a/app/src/main/java/com/info/sn/bean/zuoye/browser/BrowserApiData.java b/app/src/main/java/com/uiui/sn/bean/zuoye/browser/BrowserApiData.java similarity index 94% rename from app/src/main/java/com/info/sn/bean/zuoye/browser/BrowserApiData.java rename to app/src/main/java/com/uiui/sn/bean/zuoye/browser/BrowserApiData.java index 189da0e..abe8f82 100644 --- a/app/src/main/java/com/info/sn/bean/zuoye/browser/BrowserApiData.java +++ b/app/src/main/java/com/uiui/sn/bean/zuoye/browser/BrowserApiData.java @@ -1,4 +1,4 @@ -package com.info.sn.bean.zuoye.browser; +package com.uiui.sn.bean.zuoye.browser; import com.google.gson.annotations.SerializedName; diff --git a/app/src/main/java/com/info/sn/bean/zuoye/browser/BrowserBean.java b/app/src/main/java/com/uiui/sn/bean/zuoye/browser/BrowserBean.java similarity index 94% rename from app/src/main/java/com/info/sn/bean/zuoye/browser/BrowserBean.java rename to app/src/main/java/com/uiui/sn/bean/zuoye/browser/BrowserBean.java index 9af0995..9eef94d 100644 --- a/app/src/main/java/com/info/sn/bean/zuoye/browser/BrowserBean.java +++ b/app/src/main/java/com/uiui/sn/bean/zuoye/browser/BrowserBean.java @@ -1,4 +1,4 @@ -package com.info.sn.bean.zuoye.browser; +package com.uiui.sn.bean.zuoye.browser; import androidx.annotation.NonNull; diff --git a/app/src/main/java/com/info/sn/config/CommonData.java b/app/src/main/java/com/uiui/sn/config/CommonData.java similarity index 97% rename from app/src/main/java/com/info/sn/config/CommonData.java rename to app/src/main/java/com/uiui/sn/config/CommonData.java index d71ae65..79411db 100644 --- a/app/src/main/java/com/info/sn/config/CommonData.java +++ b/app/src/main/java/com/uiui/sn/config/CommonData.java @@ -1,4 +1,4 @@ -package com.info.sn.config; +package com.uiui.sn.config; diff --git a/app/src/main/java/com/info/sn/config/Configs.java b/app/src/main/java/com/uiui/sn/config/Configs.java similarity index 95% rename from app/src/main/java/com/info/sn/config/Configs.java rename to app/src/main/java/com/uiui/sn/config/Configs.java index 7935101..dcb6633 100644 --- a/app/src/main/java/com/info/sn/config/Configs.java +++ b/app/src/main/java/com/uiui/sn/config/Configs.java @@ -1,4 +1,4 @@ -package com.info.sn.config; +package com.uiui.sn.config; public class Configs { public static String isLogined = "isLogined"; diff --git a/app/src/main/java/com/info/sn/config/Scheme.java b/app/src/main/java/com/uiui/sn/config/Scheme.java similarity index 97% rename from app/src/main/java/com/info/sn/config/Scheme.java rename to app/src/main/java/com/uiui/sn/config/Scheme.java index 9792a1e..b7beff0 100644 --- a/app/src/main/java/com/info/sn/config/Scheme.java +++ b/app/src/main/java/com/uiui/sn/config/Scheme.java @@ -1,4 +1,4 @@ -package com.info.sn.config; +package com.uiui.sn.config; import android.app.Activity; import android.content.Context; @@ -8,9 +8,9 @@ import android.text.TextUtils; import android.util.Log; -import com.info.sn.utils.CXAESUtil; -import com.info.sn.utils.Hash; -import com.info.sn.utils.Utils; +import com.uiui.sn.utils.CXAESUtil; +import com.uiui.sn.utils.Hash; +import com.uiui.sn.utils.Utils; import java.io.UnsupportedEncodingException; diff --git a/app/src/main/java/com/info/sn/dialog/ActivationDialog.java b/app/src/main/java/com/uiui/sn/dialog/ActivationDialog.java similarity index 98% rename from app/src/main/java/com/info/sn/dialog/ActivationDialog.java rename to app/src/main/java/com/uiui/sn/dialog/ActivationDialog.java index 07fc72c..b1c4631 100644 --- a/app/src/main/java/com/info/sn/dialog/ActivationDialog.java +++ b/app/src/main/java/com/uiui/sn/dialog/ActivationDialog.java @@ -1,7 +1,6 @@ -package com.info.sn.dialog; +package com.uiui.sn.dialog; -import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.text.TextUtils; @@ -12,7 +11,7 @@ import android.widget.TextView; import androidx.appcompat.app.AlertDialog; -import com.info.sn.R; +import com.uiui.sn.R; /** diff --git a/app/src/main/java/com/info/sn/dialog/CustomDialog.java b/app/src/main/java/com/uiui/sn/dialog/CustomDialog.java similarity index 98% rename from app/src/main/java/com/info/sn/dialog/CustomDialog.java rename to app/src/main/java/com/uiui/sn/dialog/CustomDialog.java index 05ed70c..065e07a 100644 --- a/app/src/main/java/com/info/sn/dialog/CustomDialog.java +++ b/app/src/main/java/com/uiui/sn/dialog/CustomDialog.java @@ -1,4 +1,4 @@ -package com.info.sn.dialog; +package com.uiui.sn.dialog; import android.content.Context; @@ -12,8 +12,8 @@ import android.widget.TextView; import androidx.appcompat.app.AlertDialog; -import com.info.sn.R; -import com.info.sn.activity.main.MainActivity; +import com.uiui.sn.R; +import com.uiui.sn.activity.main.MainActivity; /** diff --git a/app/src/main/java/com/info/sn/dialog/InfoDialog.java b/app/src/main/java/com/uiui/sn/dialog/InfoDialog.java similarity index 98% rename from app/src/main/java/com/info/sn/dialog/InfoDialog.java rename to app/src/main/java/com/uiui/sn/dialog/InfoDialog.java index 78e0472..7d785a4 100644 --- a/app/src/main/java/com/info/sn/dialog/InfoDialog.java +++ b/app/src/main/java/com/uiui/sn/dialog/InfoDialog.java @@ -1,4 +1,4 @@ -package com.info.sn.dialog; +package com.uiui.sn.dialog; import android.app.Dialog; import android.content.Context; @@ -12,7 +12,7 @@ import android.widget.TextView; import androidx.annotation.NonNull; -import com.info.sn.R; +import com.uiui.sn.R; public class InfoDialog extends Dialog { diff --git a/app/src/main/java/com/info/sn/dialog/UserDebugDialog.java b/app/src/main/java/com/uiui/sn/dialog/UserDebugDialog.java similarity index 97% rename from app/src/main/java/com/info/sn/dialog/UserDebugDialog.java rename to app/src/main/java/com/uiui/sn/dialog/UserDebugDialog.java index 8f5b942..999c1d6 100644 --- a/app/src/main/java/com/info/sn/dialog/UserDebugDialog.java +++ b/app/src/main/java/com/uiui/sn/dialog/UserDebugDialog.java @@ -1,21 +1,17 @@ -package com.info.sn.dialog; +package com.uiui.sn.dialog; import android.app.AlertDialog; -import android.app.Dialog; import android.content.Context; -import android.content.Intent; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.EditText; -import android.widget.ImageView; import android.widget.TextView; -import com.info.sn.R; -import com.info.sn.activity.main.MainActivity; +import com.uiui.sn.R; /** diff --git a/app/src/main/java/com/info/sn/fragment/AppletQRCodeFragment.java b/app/src/main/java/com/uiui/sn/fragment/AppletQRCodeFragment.java similarity index 88% rename from app/src/main/java/com/info/sn/fragment/AppletQRCodeFragment.java rename to app/src/main/java/com/uiui/sn/fragment/AppletQRCodeFragment.java index 92cfdf5..63dea19 100644 --- a/app/src/main/java/com/info/sn/fragment/AppletQRCodeFragment.java +++ b/app/src/main/java/com/uiui/sn/fragment/AppletQRCodeFragment.java @@ -1,8 +1,7 @@ -package com.info.sn.fragment; +package com.uiui.sn.fragment; import android.os.Bundle; -import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import android.text.TextUtils; @@ -15,20 +14,12 @@ import android.widget.ImageView; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.bumptech.glide.Glide; -import com.info.sn.R; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.manager.NetInterfaceManager; -import com.trello.rxlifecycle2.LifecycleProvider; -import com.trello.rxlifecycle2.LifecycleTransformer; -import com.trello.rxlifecycle2.RxLifecycle; -import com.trello.rxlifecycle2.android.ActivityEvent; -import com.trello.rxlifecycle2.android.FragmentEvent; -import com.trello.rxlifecycle2.android.RxLifecycleAndroid; +import com.uiui.sn.R; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.manager.NetInterfaceManager; -import io.reactivex.Observable; import io.reactivex.Observer; import io.reactivex.disposables.Disposable; -import io.reactivex.subjects.BehaviorSubject; /** diff --git a/app/src/main/java/com/info/sn/fragment/BaseFragmentPagerAdapter.java b/app/src/main/java/com/uiui/sn/fragment/BaseFragmentPagerAdapter.java similarity index 99% rename from app/src/main/java/com/info/sn/fragment/BaseFragmentPagerAdapter.java rename to app/src/main/java/com/uiui/sn/fragment/BaseFragmentPagerAdapter.java index 2842c06..41fbb55 100644 --- a/app/src/main/java/com/info/sn/fragment/BaseFragmentPagerAdapter.java +++ b/app/src/main/java/com/uiui/sn/fragment/BaseFragmentPagerAdapter.java @@ -1,4 +1,4 @@ -package com.info.sn.fragment; +package com.uiui.sn.fragment; import android.util.SparseArray; diff --git a/app/src/main/java/com/info/sn/fragment/QRCodeFragment.java b/app/src/main/java/com/uiui/sn/fragment/QRCodeFragment.java similarity index 93% rename from app/src/main/java/com/info/sn/fragment/QRCodeFragment.java rename to app/src/main/java/com/uiui/sn/fragment/QRCodeFragment.java index 67f3138..820a91c 100644 --- a/app/src/main/java/com/info/sn/fragment/QRCodeFragment.java +++ b/app/src/main/java/com/uiui/sn/fragment/QRCodeFragment.java @@ -1,4 +1,4 @@ -package com.info.sn.fragment; +package com.uiui.sn.fragment; import android.graphics.Bitmap; import android.os.Bundle; @@ -11,12 +11,10 @@ import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; -import com.info.sn.R; -import com.info.sn.config.Configs; -import com.info.sn.utils.CXAESUtil; -import com.info.sn.utils.Utils; - -import butterknife.BindView; +import com.uiui.sn.R; +import com.uiui.sn.config.Configs; +import com.uiui.sn.utils.CXAESUtil; +import com.uiui.sn.utils.Utils; /** * A simple {@link Fragment} subclass. diff --git a/app/src/main/java/com/info/sn/jpush/ExampleApplication.java b/app/src/main/java/com/uiui/sn/jpush/ExampleApplication.java similarity index 87% rename from app/src/main/java/com/info/sn/jpush/ExampleApplication.java rename to app/src/main/java/com/uiui/sn/jpush/ExampleApplication.java index 2bbd7fb..512f4f9 100644 --- a/app/src/main/java/com/info/sn/jpush/ExampleApplication.java +++ b/app/src/main/java/com/uiui/sn/jpush/ExampleApplication.java @@ -1,9 +1,8 @@ -package com.info.sn.jpush; +package com.uiui.sn.jpush; import android.app.Application; -import com.info.sn.BuildConfig; -import com.info.sn.utils.Utils; +import com.uiui.sn.BuildConfig; import cn.jpush.android.api.JPushInterface; diff --git a/app/src/main/java/com/info/sn/jpush/ExampleUtil.java b/app/src/main/java/com/uiui/sn/jpush/ExampleUtil.java similarity index 98% rename from app/src/main/java/com/info/sn/jpush/ExampleUtil.java rename to app/src/main/java/com/uiui/sn/jpush/ExampleUtil.java index a89100a..1f227d8 100644 --- a/app/src/main/java/com/info/sn/jpush/ExampleUtil.java +++ b/app/src/main/java/com/uiui/sn/jpush/ExampleUtil.java @@ -1,4 +1,4 @@ -package com.info.sn.jpush; +package com.uiui.sn.jpush; import android.content.Context; import android.content.pm.ApplicationInfo; @@ -8,10 +8,8 @@ import android.content.pm.PackageManager.NameNotFoundException; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Bundle; -import android.os.Looper; import android.telephony.TelephonyManager; import android.text.TextUtils; -import android.widget.Toast; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/app/src/main/java/com/info/sn/jpush/LocalBroadcastManager.java b/app/src/main/java/com/uiui/sn/jpush/LocalBroadcastManager.java similarity index 99% rename from app/src/main/java/com/info/sn/jpush/LocalBroadcastManager.java rename to app/src/main/java/com/uiui/sn/jpush/LocalBroadcastManager.java index 20c7942..ee54886 100644 --- a/app/src/main/java/com/info/sn/jpush/LocalBroadcastManager.java +++ b/app/src/main/java/com/uiui/sn/jpush/LocalBroadcastManager.java @@ -1,4 +1,4 @@ -package com.info.sn.jpush; +package com.uiui.sn.jpush; import android.content.BroadcastReceiver; import android.content.Context; diff --git a/app/src/main/java/com/info/sn/jpush/Logger.java b/app/src/main/java/com/uiui/sn/jpush/Logger.java similarity index 96% rename from app/src/main/java/com/info/sn/jpush/Logger.java rename to app/src/main/java/com/uiui/sn/jpush/Logger.java index e747ddc..b322655 100644 --- a/app/src/main/java/com/info/sn/jpush/Logger.java +++ b/app/src/main/java/com/uiui/sn/jpush/Logger.java @@ -1,4 +1,4 @@ -package com.info.sn.jpush; +package com.uiui.sn.jpush; import android.util.Log; diff --git a/app/src/main/java/com/info/sn/jpush/MyJPushMessageReceiver.java b/app/src/main/java/com/uiui/sn/jpush/MyJPushMessageReceiver.java similarity index 96% rename from app/src/main/java/com/info/sn/jpush/MyJPushMessageReceiver.java rename to app/src/main/java/com/uiui/sn/jpush/MyJPushMessageReceiver.java index a842d23..c8544fa 100644 --- a/app/src/main/java/com/info/sn/jpush/MyJPushMessageReceiver.java +++ b/app/src/main/java/com/uiui/sn/jpush/MyJPushMessageReceiver.java @@ -1,8 +1,8 @@ -package com.info.sn.jpush; +package com.uiui.sn.jpush; import android.content.Context; -import com.info.sn.base.BaseApplication; +import com.uiui.sn.base.BaseApplication; import cn.jpush.android.api.CustomMessage; import cn.jpush.android.api.JPushMessage; diff --git a/app/src/main/java/com/info/sn/jpush/PushService.java b/app/src/main/java/com/uiui/sn/jpush/PushService.java similarity index 79% rename from app/src/main/java/com/info/sn/jpush/PushService.java rename to app/src/main/java/com/uiui/sn/jpush/PushService.java index b3d0d29..ddeaf20 100644 --- a/app/src/main/java/com/info/sn/jpush/PushService.java +++ b/app/src/main/java/com/uiui/sn/jpush/PushService.java @@ -1,4 +1,4 @@ -package com.info.sn.jpush; +package com.uiui.sn.jpush; import cn.jpush.android.service.JCommonService; diff --git a/app/src/main/java/com/info/sn/jpush/TagAliasOperatorHelper.java b/app/src/main/java/com/uiui/sn/jpush/TagAliasOperatorHelper.java similarity index 99% rename from app/src/main/java/com/info/sn/jpush/TagAliasOperatorHelper.java rename to app/src/main/java/com/uiui/sn/jpush/TagAliasOperatorHelper.java index c5f5509..f5ebe20 100644 --- a/app/src/main/java/com/info/sn/jpush/TagAliasOperatorHelper.java +++ b/app/src/main/java/com/uiui/sn/jpush/TagAliasOperatorHelper.java @@ -1,4 +1,4 @@ -package com.info.sn.jpush; +package com.uiui.sn.jpush; import android.content.Context; import android.os.Handler; @@ -6,7 +6,7 @@ import android.os.Message; import android.util.Log; import android.util.SparseArray; -import com.info.sn.utils.ToastUtil; +import com.uiui.sn.utils.ToastUtil; import java.util.Locale; import java.util.Set; diff --git a/app/src/main/java/com/info/sn/jpush/TestActivity.java b/app/src/main/java/com/uiui/sn/jpush/TestActivity.java similarity index 97% rename from app/src/main/java/com/info/sn/jpush/TestActivity.java rename to app/src/main/java/com/uiui/sn/jpush/TestActivity.java index 3908ac3..324412c 100644 --- a/app/src/main/java/com/info/sn/jpush/TestActivity.java +++ b/app/src/main/java/com/uiui/sn/jpush/TestActivity.java @@ -1,4 +1,4 @@ -package com.info.sn.jpush; +package com.uiui.sn.jpush; import android.app.Activity; import android.content.Intent; diff --git a/app/src/main/java/com/info/sn/manager/AmapManager.java b/app/src/main/java/com/uiui/sn/manager/AmapManager.java similarity index 98% rename from app/src/main/java/com/info/sn/manager/AmapManager.java rename to app/src/main/java/com/uiui/sn/manager/AmapManager.java index c20c161..1a42503 100644 --- a/app/src/main/java/com/info/sn/manager/AmapManager.java +++ b/app/src/main/java/com/uiui/sn/manager/AmapManager.java @@ -1,4 +1,4 @@ -package com.info.sn.manager; +package com.uiui.sn.manager; import android.content.Context; import android.util.Log; @@ -7,7 +7,7 @@ import com.amap.api.location.AMapLocation; import com.amap.api.location.AMapLocationClient; import com.amap.api.location.AMapLocationClientOption; import com.amap.api.location.AMapLocationListener; -import com.info.sn.utils.SPUtils; +import com.uiui.sn.utils.SPUtils; public class AmapManager { private static AmapManager sInstance; diff --git a/app/src/main/java/com/info/sn/manager/ControlManager.java b/app/src/main/java/com/uiui/sn/manager/ControlManager.java similarity index 96% rename from app/src/main/java/com/info/sn/manager/ControlManager.java rename to app/src/main/java/com/uiui/sn/manager/ControlManager.java index 55fb826..9bc2771 100644 --- a/app/src/main/java/com/info/sn/manager/ControlManager.java +++ b/app/src/main/java/com/uiui/sn/manager/ControlManager.java @@ -1,4 +1,4 @@ -package com.info.sn.manager; +package com.uiui.sn.manager; import android.annotation.SuppressLint; import android.bluetooth.BluetoothAdapter; @@ -11,11 +11,11 @@ import android.util.Log; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; -import com.info.sn.bean.zuoye.SystemSettings; -import com.info.sn.utils.ApkUtils; -import com.info.sn.utils.JGYUtils; -import com.info.sn.utils.SPUtils; -import com.info.sn.utils.ToastUtil; +import com.uiui.sn.bean.zuoye.SystemSettings; +import com.uiui.sn.utils.ApkUtils; +import com.uiui.sn.utils.JGYUtils; +import com.uiui.sn.utils.SPUtils; +import com.uiui.sn.utils.ToastUtil; import java.util.Arrays; import java.util.HashSet; @@ -402,16 +402,20 @@ public class ControlManager { mContext.sendBroadcast(tfmediaIntent); if (setting_tfmedia == 1) { String qch_tfmedia_filetypes = settings.getSetting_tfmedia_format(); - HashSet types = new HashSet<>(Arrays.asList(qch_tfmedia_filetypes.split(","))); - types.removeIf(new Predicate() { - @Override - public boolean test(String s) { - return TextUtils.isEmpty(s); - } - }); - String typesString = String.join(",", types); - JGYUtils.putString(mContext.getContentResolver(), "qch_tfmedia_filetypes", typesString);//影音管控 - Log.e("SystemSetting", "qch_tfmedia_filetypes :" + typesString); + if (TextUtils.isEmpty(qch_tfmedia_filetypes)) { + JGYUtils.putString(mContext.getContentResolver(), "qch_tfmedia_filetypes", "");//影音管控 + } else { + HashSet types = new HashSet<>(Arrays.asList(qch_tfmedia_filetypes.split(","))); + types.removeIf(new Predicate() { + @Override + public boolean test(String s) { + return TextUtils.isEmpty(s); + } + }); + String typesString = String.join(",", types); + JGYUtils.putString(mContext.getContentResolver(), "qch_tfmedia_filetypes", typesString);//影音管控 + Log.e("SystemSetting", "qch_tfmedia_filetypes :" + typesString); + } } else { JGYUtils.putInt(mContext.getContentResolver(), "qch_tfmedia_forbid", 0); } diff --git a/app/src/main/java/com/info/sn/manager/DeviceManager.java b/app/src/main/java/com/uiui/sn/manager/DeviceManager.java similarity index 94% rename from app/src/main/java/com/info/sn/manager/DeviceManager.java rename to app/src/main/java/com/uiui/sn/manager/DeviceManager.java index d7518cc..9c32506 100644 --- a/app/src/main/java/com/info/sn/manager/DeviceManager.java +++ b/app/src/main/java/com/uiui/sn/manager/DeviceManager.java @@ -1,13 +1,13 @@ -package com.info.sn.manager; +package com.uiui.sn.manager; import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; import android.os.Build; -import com.info.sn.BuildConfig; -import com.info.sn.utils.SPUtils; -import com.info.sn.utils.ToastUtil; +import com.uiui.sn.BuildConfig; +import com.uiui.sn.utils.SPUtils; +import com.uiui.sn.utils.ToastUtil; public class DeviceManager { private static final String TAG = DeviceManager.class.getSimpleName(); diff --git a/app/src/main/java/com/info/sn/manager/MyGlideModule.java b/app/src/main/java/com/uiui/sn/manager/MyGlideModule.java similarity index 95% rename from app/src/main/java/com/info/sn/manager/MyGlideModule.java rename to app/src/main/java/com/uiui/sn/manager/MyGlideModule.java index 6cf43a3..359c702 100644 --- a/app/src/main/java/com/info/sn/manager/MyGlideModule.java +++ b/app/src/main/java/com/uiui/sn/manager/MyGlideModule.java @@ -1,11 +1,11 @@ -package com.info.sn.manager; +package com.uiui.sn.manager; import android.content.Context; import com.bumptech.glide.GlideBuilder; import com.bumptech.glide.load.engine.cache.DiskLruCacheFactory; import com.bumptech.glide.module.AppGlideModule; -import com.info.sn.utils.StorageUtils; +import com.uiui.sn.utils.StorageUtils; /** * Created by Administrator on 2017/2/9. diff --git a/app/src/main/java/com/info/sn/manager/NetInterfaceManager.java b/app/src/main/java/com/uiui/sn/manager/NetInterfaceManager.java similarity index 80% rename from app/src/main/java/com/info/sn/manager/NetInterfaceManager.java rename to app/src/main/java/com/uiui/sn/manager/NetInterfaceManager.java index 474e1ea..8763766 100644 --- a/app/src/main/java/com/info/sn/manager/NetInterfaceManager.java +++ b/app/src/main/java/com/uiui/sn/manager/NetInterfaceManager.java @@ -1,51 +1,45 @@ -package com.info.sn.manager; +package com.uiui.sn.manager; import android.annotation.SuppressLint; import android.content.Context; import android.util.Log; -import com.info.sn.bean.zuoye.AppInfo; -import com.info.sn.bean.zuoye.AppStart; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.bean.zuoye.Label; -import com.info.sn.bean.zuoye.UserAvatarInfo; -import com.info.sn.bean.zuoye.UserInfo; -import com.info.sn.bean.zuoye.browser.BrowserApiData; -import com.info.sn.network.UrlAddress; -import com.info.sn.network.api.APPJump; -import com.info.sn.network.api.AddAppInstall; -import com.info.sn.network.api.AppUsedApi; -import com.info.sn.network.api.BindDevices; -import com.info.sn.network.api.Browser; -import com.info.sn.network.api.BrowserLabel; -import com.info.sn.network.api.ForceInstall; -import com.info.sn.network.api.GetBatchApi; -import com.info.sn.network.api.GetGuideApi; -import com.info.sn.network.api.GetSnUidApi; -import com.info.sn.network.api.NewestAppUpdate; -import com.info.sn.network.api.QRCodeApi; -import com.info.sn.network.api.QueryAllApp; -import com.info.sn.network.api.QueryAppInside; -import com.info.sn.network.api.QuerySnAppStart; -import com.info.sn.network.api.RunningApp; -import com.info.sn.network.api.SNInfoApi; -import com.info.sn.network.api.SaveSnUidApi; -import com.info.sn.network.api.ScreenLock; -import com.info.sn.network.api.ScreenState; -import com.info.sn.network.api.Setting; -import com.info.sn.network.api.TimeControl; -import com.info.sn.network.api.UpdateAdminSn; -import com.info.sn.network.api.UploadScreenshot; -import com.info.sn.network.api.UserInfoControl; -import com.info.sn.network.api.gankao.ActiveUserApi; -import com.info.sn.network.api.gankao.CancelUserPowerApi; -import com.info.sn.network.api.gankao.CreateUserApi; -import com.info.sn.network.api.gankao.QueryPowerUserListApi; -import com.info.sn.network.api.gankao.QueryProductApi; -import com.info.sn.network.api.gankao.UpgradeUserPowerApi; -import com.info.sn.network.api.gankao.UserProductsApi; -import com.info.sn.utils.MD5Util; -import com.info.sn.utils.Utils; +import com.uiui.sn.bean.zuoye.AppInfo; +import com.uiui.sn.bean.zuoye.AppStart; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.bean.zuoye.Label; +import com.uiui.sn.bean.zuoye.UserAvatarInfo; +import com.uiui.sn.bean.zuoye.UserInfo; +import com.uiui.sn.bean.zuoye.browser.BrowserApiData; +import com.uiui.sn.network.UrlAddress; +import com.uiui.sn.network.api.APPJump; +import com.uiui.sn.network.api.AddAppInstall; +import com.uiui.sn.network.api.AppUsedApi; +import com.uiui.sn.network.api.BindDevices; +import com.uiui.sn.network.api.Browser; +import com.uiui.sn.network.api.BrowserLabel; +import com.uiui.sn.network.api.ForceInstall; +import com.uiui.sn.network.api.GetBatchApi; +import com.uiui.sn.network.api.GetControlScreenshotApi; +import com.uiui.sn.network.api.GetGuideApi; +import com.uiui.sn.network.api.GetSnUidApi; +import com.uiui.sn.network.api.NewestAppUpdate; +import com.uiui.sn.network.api.QRCodeApi; +import com.uiui.sn.network.api.QueryAllApp; +import com.uiui.sn.network.api.QueryAppInside; +import com.uiui.sn.network.api.QuerySnAppStart; +import com.uiui.sn.network.api.RunningApp; +import com.uiui.sn.network.api.SNInfoApi; +import com.uiui.sn.network.api.SaveSnUidApi; +import com.uiui.sn.network.api.ScreenLock; +import com.uiui.sn.network.api.ScreenState; +import com.uiui.sn.network.api.Setting; +import com.uiui.sn.network.api.TimeControl; +import com.uiui.sn.network.api.UpdateAdminSn; +import com.uiui.sn.network.api.UploadScreenshot; +import com.uiui.sn.network.api.UserInfoControl; +import com.uiui.sn.utils.MD5Util; +import com.uiui.sn.utils.Utils; import org.jetbrains.annotations.NotNull; @@ -74,7 +68,7 @@ public class NetInterfaceManager { private Context mContext; private Retrofit mRetrofit; private OkHttpClient okHttpClient; - private Retrofit mGankaoRetrofit; +// private Retrofit mGankaoRetrofit; private final ConcurrentHashMap requestIdsMap = new ConcurrentHashMap<>(); //超时时间 @@ -184,14 +178,14 @@ public class NetInterfaceManager { .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .build(); } - if (null == mGankaoRetrofit) { - mGankaoRetrofit = new Retrofit.Builder() - .client(okHttpClient) - .baseUrl(UrlAddress.GANKAN_ROOT_URL) - .addConverterFactory(GsonConverterFactory.create()) - .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) - .build(); - } +// if (null == mGankaoRetrofit) { +// mGankaoRetrofit = new Retrofit.Builder() +// .client(okHttpClient) +// .baseUrl(UrlAddress.GANKAN_ROOT_URL) +// .addConverterFactory(GsonConverterFactory.create()) +// .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) +// .build(); +// } } public static void init(Context context) { @@ -356,33 +350,37 @@ public class NetInterfaceManager { return mRetrofit.create(AppUsedApi.class); } - //赶考 - - public CreateUserApi getCreateUserControl() { - return mGankaoRetrofit.create(CreateUserApi.class); + public GetControlScreenshotApi getControlScreenshotApi() { + return mRetrofit.create(GetControlScreenshotApi.class); } - public ActiveUserApi getActiveUserControl() { - return mGankaoRetrofit.create(ActiveUserApi.class); - } - - public QueryProductApi getQueryProductControl() { - return mGankaoRetrofit.create(QueryProductApi.class); - } - - public QueryPowerUserListApi getQueryPowerUserListControl() { - return mGankaoRetrofit.create(QueryPowerUserListApi.class); - } - - public UserProductsApi getUserProductsControl() { - return mGankaoRetrofit.create(UserProductsApi.class); - } - - public CancelUserPowerApi getCancelUserPowerControl() { - return mGankaoRetrofit.create(CancelUserPowerApi.class); - } - - public UpgradeUserPowerApi getUpgradeUserPowerControl() { - return mGankaoRetrofit.create(UpgradeUserPowerApi.class); - } +// //赶考 +// +// public CreateUserApi getCreateUserControl() { +// return mGankaoRetrofit.create(CreateUserApi.class); +// } +// +// public ActiveUserApi getActiveUserControl() { +// return mGankaoRetrofit.create(ActiveUserApi.class); +// } +// +// public QueryProductApi getQueryProductControl() { +// return mGankaoRetrofit.create(QueryProductApi.class); +// } +// +// public QueryPowerUserListApi getQueryPowerUserListControl() { +// return mGankaoRetrofit.create(QueryPowerUserListApi.class); +// } +// +// public UserProductsApi getUserProductsControl() { +// return mGankaoRetrofit.create(UserProductsApi.class); +// } +// +// public CancelUserPowerApi getCancelUserPowerControl() { +// return mGankaoRetrofit.create(CancelUserPowerApi.class); +// } +// +// public UpgradeUserPowerApi getUpgradeUserPowerControl() { +// return mGankaoRetrofit.create(UpgradeUserPowerApi.class); +// } } diff --git a/app/src/main/java/com/info/sn/mvp/BasePresenter.java b/app/src/main/java/com/uiui/sn/mvp/BasePresenter.java similarity index 81% rename from app/src/main/java/com/info/sn/mvp/BasePresenter.java rename to app/src/main/java/com/uiui/sn/mvp/BasePresenter.java index 965b06a..b9cbddf 100644 --- a/app/src/main/java/com/info/sn/mvp/BasePresenter.java +++ b/app/src/main/java/com/uiui/sn/mvp/BasePresenter.java @@ -1,4 +1,4 @@ -package com.info.sn.mvp; +package com.uiui.sn.mvp; public interface BasePresenter { void attachView(V view); diff --git a/app/src/main/java/com/info/sn/mvp/BaseView.java b/app/src/main/java/com/uiui/sn/mvp/BaseView.java similarity index 55% rename from app/src/main/java/com/info/sn/mvp/BaseView.java rename to app/src/main/java/com/uiui/sn/mvp/BaseView.java index cae9fc5..67ce675 100644 --- a/app/src/main/java/com/info/sn/mvp/BaseView.java +++ b/app/src/main/java/com/uiui/sn/mvp/BaseView.java @@ -1,4 +1,4 @@ -package com.info.sn.mvp; +package com.uiui.sn.mvp; public interface BaseView { } diff --git a/app/src/main/java/com/info/sn/network/HTTPInterface.java b/app/src/main/java/com/uiui/sn/network/HTTPInterface.java similarity index 84% rename from app/src/main/java/com/info/sn/network/HTTPInterface.java rename to app/src/main/java/com/uiui/sn/network/HTTPInterface.java index ecb26e0..10c9c15 100644 --- a/app/src/main/java/com/info/sn/network/HTTPInterface.java +++ b/app/src/main/java/com/uiui/sn/network/HTTPInterface.java @@ -1,4 +1,4 @@ -package com.info.sn.network; +package com.uiui.sn.network; import android.annotation.SuppressLint; import android.content.Context; @@ -6,6 +6,8 @@ import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.os.Build; import android.provider.Settings; import android.text.TextUtils; @@ -14,43 +16,53 @@ import android.util.Log; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.blankj.utilcode.util.ImageUtils; import com.google.gson.Gson; import com.google.gson.JsonObject; import com.google.gson.JsonParser; -import com.info.sn.BuildConfig; -import com.info.sn.Statistics.AppInformation; -import com.info.sn.Statistics.StatisticsInfo; -import com.info.sn.bean.zuoye.AppInfo; -import com.info.sn.bean.zuoye.AppStart; -import com.info.sn.bean.zuoye.AppUploadInfo; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.bean.zuoye.Label; -import com.info.sn.bean.zuoye.browser.BrowserApiData; -import com.info.sn.bean.zuoye.browser.BrowserBean; -import com.info.sn.jpush.TagAliasOperatorHelper; -import com.info.sn.manager.ControlManager; -import com.info.sn.manager.NetInterfaceManager; -import com.info.sn.network.api.NewestAppUpdate; -import com.info.sn.network.api.UpdateAdminSn; -import com.info.sn.service.ManagerService; -import com.info.sn.utils.ApkUtils; -import com.info.sn.utils.FileUtils; -import com.info.sn.utils.JGYUtils; -import com.info.sn.utils.SPUtils; -import com.info.sn.utils.TimeUtils; -import com.info.sn.utils.URLUtils; -import com.info.sn.utils.Utils; +import com.uiui.sn.BuildConfig; +import com.uiui.sn.Statistics.AppInformation; +import com.uiui.sn.Statistics.StatisticsInfo; +import com.uiui.sn.bean.zuoye.AppInfo; +import com.uiui.sn.bean.zuoye.AppStart; +import com.uiui.sn.bean.zuoye.AppUploadInfo; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.bean.zuoye.Label; +import com.uiui.sn.bean.zuoye.browser.BrowserApiData; +import com.uiui.sn.bean.zuoye.browser.BrowserBean; +import com.uiui.sn.jpush.TagAliasOperatorHelper; +import com.uiui.sn.manager.ControlManager; +import com.uiui.sn.manager.NetInterfaceManager; +import com.uiui.sn.network.api.GetControlScreenshotApi; +import com.uiui.sn.network.api.NewestAppUpdate; +import com.uiui.sn.network.api.UpdateAdminSn; +import com.uiui.sn.network.api.UploadScreenshot; +import com.uiui.sn.service.ManagerService; +import com.uiui.sn.utils.ApkUtils; +import com.uiui.sn.utils.CmdUtil; +import com.uiui.sn.utils.FileUtils; +import com.uiui.sn.utils.JGYUtils; +import com.uiui.sn.utils.SPUtils; +import com.uiui.sn.utils.TimeUtils; +import com.uiui.sn.utils.URLUtils; +import com.uiui.sn.utils.Utils; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Set; -import java.util.function.Function; import java.util.stream.Collectors; import cn.jpush.android.api.JPushInterface; import io.reactivex.Observable; +import io.reactivex.ObservableEmitter; import io.reactivex.ObservableOnSubscribe; import io.reactivex.ObservableSource; import io.reactivex.Observer; @@ -58,10 +70,14 @@ import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.annotations.NonNull; import io.reactivex.disposables.Disposable; import io.reactivex.functions.BiFunction; -import io.reactivex.functions.Consumer; +import io.reactivex.functions.Function; import io.reactivex.schedulers.Schedulers; +import kotlin.io.OnErrorAction; +import okhttp3.MediaType; +import okhttp3.MultipartBody; +import okhttp3.RequestBody; -import static com.info.sn.jpush.TagAliasOperatorHelper.ACTION_SET; +import static com.uiui.sn.jpush.TagAliasOperatorHelper.ACTION_SET; public class HTTPInterface { private static String TAG = HTTPInterface.class.getSimpleName(); @@ -325,7 +341,8 @@ public class HTTPInterface { public static void getAppStart(final Context context, List appInfoList) { - NetInterfaceManager.getInstance().getAppStartControl() + NetInterfaceManager.getInstance() + .getAppStartControl() .subscribe(new Observer>>() { @Override public void onSubscribe(@NonNull Disposable d) { @@ -532,6 +549,8 @@ public class HTTPInterface { } } + private static int hide = 1; + //隐藏显示app @SuppressLint("NewApi") private static void setAppHide(Context context, List list) { @@ -542,7 +561,7 @@ public class HTTPInterface { String app_package = app.getApp_package(); int is_lock = app.getIs_lock(); try { - if (is_lock == 1) { + if (is_lock == hide) { pm.setApplicationEnabledSetting(app_package, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0); hideAPPList.add(app_package); } else { @@ -649,25 +668,26 @@ public class HTTPInterface { jsonObject.put("address", address); jsonObject.put("longitude", longitude); jsonObject.put("latitude", latitude); - String a = jsonObject.toString(); - String machine = Utils.getMachine(context); - String hardware = Utils.getHardware(context); - Log.e(TAG, "updateAdminInfo: getHardware = " + hardware); JSONObject softwareJson = new JSONObject(); - softwareJson.put("appstore_version", ApkUtils.getAPPVersionName(context, "com.jgyapp.market")); + softwareJson.put("appstore_version", ApkUtils.getAPPVersionName(context, "com.uiui.appstore")); softwareJson.put("updatetools_version", ApkUtils.getAPPVersionName(context, "com.uiuios.updatetools")); - softwareJson.put("info_version", ApkUtils.getAPPVersionName(context, "com.info.sn")); + softwareJson.put("info_version", ApkUtils.getAPPVersionName(context, "com.uiui.sn")); softwareJson.put("jiaoguanyi_version", ApkUtils.getAPPVersionName(context, "com.jiaoguanyi.os")); softwareJson.put("gankao_version", ApkUtils.getAPPVersionName(context, "com.gankao.gkwxhd")); softwareJson.put("learning_version", ApkUtils.getAPPVersionName(context, "com.info.learning")); softwareJson.put("chat_version", ApkUtils.getAPPVersionName(context, "com.info.chat")); softwareJson.put("jpush_id", JPushInterface.getRegistrationID(context)); + String addr = jsonObject.toString(); + String machine = Utils.getMachine(context); + String hardware = Utils.getHardware(context); + Log.e(TAG, "updateAdminInfo: getHardware = " + hardware); + String software = softwareJson.toJSONString(); UpdateAdminSn updateAdminSn = NetInterfaceManager.getInstance().getUpdateAdminSnControl(); updateAdminSn.sendAdminSn(Utils.getSerial(), - jsonObject.toJSONString(), + addr, machine, hardware, - softwareJson.toJSONString() + software ).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer() { @@ -986,7 +1006,6 @@ public class HTTPInterface { @Override public void onNext(BaseResponse response) { - Log.e("sendAppUsed", "onNext: "); Log.e("sendAppUsed", "onNext: " + JSONObject.toJSONString(response)); } @@ -1078,6 +1097,189 @@ public class HTTPInterface { }); } + 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() + .getControlScreenshotApi() + .getControlScreenshot(Utils.getSerial(), body) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()); + } + + public static void screenshot(Context context) { + String path = context.getExternalFilesDir("db").getAbsolutePath(); + String filePath = path + File.separator + Utils.getSerial() + ".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: "); + } + }); + } + + + public static void doscreenshot(final Context context) { + String path = context.getExternalFilesDir("db").getAbsolutePath(); + String filePath = path + File.separator + Utils.getSerial() + ".png"; + Observable.create(new ObservableOnSubscribe() { + @Override + public void subscribe(ObservableEmitter e) throws Exception { + int n = CmdUtil.execute("screencap -p " + filePath).code; + e.onNext(n); + } + }).subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(Disposable d) { + + } + + @Override + public void onNext(Integer integer) { + if (integer == 0) { + uplaodImage(context, filePath); + } else { + Log.e("doss", "失败"); + } + } + + @Override + public void onError(Throwable e) { + Log.e("doss", "Throwable=" + e.getMessage()); + } + + @Override + public void onComplete() { + + } + }); + } + + private static void uplaodImage(final Context context, String filePath) { + File file = new File(filePath); + if (!file.exists()) { + Log.e("uplaodImage", "File does not exists"); + return; + } + + 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); + + try { + file.createNewFile(); + FileOutputStream fos = new FileOutputStream(file); + InputStream is = new ByteArrayInputStream(baos.toByteArray()); + int x = 0; + byte[] b = new byte[1024 * 100]; + while ((x = is.read(b)) != -1) { + fos.write(b, 0, x); + } + fos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + + + RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file); + MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getName(), requestFile); + NetInterfaceManager.getInstance() + .getControlScreenshotApi() + .getControlScreenshot(Utils.getSerial(), body) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(Disposable d) { + Log.e("uplaod", "onSubscribe: "); + } + + @Override + public void onNext(BaseResponse baseResponse) { + int code = baseResponse.code; + if (code == 200) { + Log.e("uplaod", "onNext: " + baseResponse.msg); + } else { + Log.e("uplaod", code + ": " + baseResponse.msg); + } + } + + @Override + public void onError(Throwable e) { + Log.e("uplaod", "onError: " + e.getMessage()); + onComplete(); + } + + @Override + public void onComplete() { + Log.e("uplaod", "onComplete: "); + } + }); + } + private static List factoryApp = new ArrayList() {{ this.add("com.gankao.gkwxhd"); this.add("com.jiaoguanyi.os"); diff --git a/app/src/main/java/com/uiui/sn/network/UrlAddress.java b/app/src/main/java/com/uiui/sn/network/UrlAddress.java new file mode 100644 index 0000000..e956bbd --- /dev/null +++ b/app/src/main/java/com/uiui/sn/network/UrlAddress.java @@ -0,0 +1,93 @@ +package com.uiui.sn.network; + +public class UrlAddress { + //主页接口 + public static final String ROOT_URL = "https://led.aolelearn.cn/android/"; + //获取班级ID + public static final String GET_BATCH = "sn/getBatch"; + //设备信息接口 + public static final String SNINFO = "sn/getSnInfo"; + //发送app信息 + public static final String APPLOG = "App/getApplog"; + //获取正在运行的app + public static final String RUN_NEW_APP = "app/runNewApp"; + //根据包名获取更新 + public final static String GET_APP_UPDATE = "Update/update"; + //获取当前最顶层应用和电量 + public final static String SEND_RUNINGAPPINFO = "Monitoring/getAppNow"; + //在线状态 + public final static String SEND_DRIVE_STATE = "Online/online"; + //获取所有应用 + public final static String GET_ALL_PACKAGE = "app/queryAllApp"; + //绑定设备消息 + public final static String BIND_DEVICES = "sn/bindSn"; + //获取系统设置 + public final static String GET_SETTINGS = "control/getSetting"; + //浏览器网址管控 + public final static String SET_BROWSER_URL = "control/getBrowser"; + //浏览器书签管控 + public final static String SET_BROWSER_LABEL = "control/getLabel"; + //获取强制下载 + public final static String GET_FORCE_INSTALL = "app/getForceDownload"; + //获取app管控 + public final static String GET_APP_START = "sn/querySnAppStart"; + //发app跳转管控 + public final static String GET_APP_JUMP = "sn/querySnJump"; + //发app跳转管控 + public final static String QUERY_APP_INSIDE = "control/queryAppInside"; + //发送卸载或者安装信息 + public final static String SEND_INSTALLEDORREMOVED = "app/addAppInstall"; + //发送卸载或者安装信息 + public final static String UPDATE_SNINFO = "sn/updateAdminSn"; + //根据包名获取更新 + public final static String GET_NEWESTAPPUPDATE = "app/newestAppUpdate"; + //上传屏幕截图 + public final static String UPLOAD_SCREEN_SNAPSHOT = "sn/uploadScreenshot"; + //获取屏幕管控 + public final static String GET_SCREEN_LOCK = "sn/getScreenshot"; + //获取时间管控 + public final static String GET_TIME_CONTROL = "sn/getTimeControl"; + //获取用户头像和信息 + public static final String GET_USER_AVATAR_INFO = "sn/getUserAvatarInfo"; + //上传设备赶考的UID + public static final String POST_USER_SAVESNUID = "sn/saveSnUid"; + //获取激活时间和赶考UID + public static final String GET_SN_UID = "sn/getSnUid"; + //获取app使用信息 + public static final String UPLOAD_APP_USE_INFO = "sn/uploadAppUseInfo"; + //获取小程序二维码 + public static final String GET_APPLET_QRCODE = "file/getAppletQrCode"; + //获取操作指南 + public static final String GET_OPERATION_GUIDE = "file/getFiles"; + //上传控制面版截图 + public static final String UPLOAD_CONTROL_SCREENSHOT = "sn/uploadControlScreenshot"; + //获取应用白名单 + public static final String GET_APP_AND_WHITE = "getAppAndWhite"; + + +// //赶考 +// public static final String GANKAN_ROOT_URL = "https://www.gankao.com/api/service/"; +// //创建/查询用户 +// public static final String CREATE_USER = "createUser"; +// //用户授权/激活权限 +// public static final String ACTIVE_USER = "activeUser"; +// //获得可用的权限产品规格 +// public static final String QUERY_AVAILABLE_PRODUCT_SPECIFICATIONS = "queryAvailableProductSpecifications"; +// //获取机构的接口授权记录 +// public static final String QUERY_POWER_USER_LIST = "queryPowerUserList"; +// //获取用户已获得的产品列表(权限、单体课程、套餐等) +// public static final String GET_USER_PRODUCTS = "getUserProducts"; +// //升级用户会员权限的学段 +// public static final String UPGRADE_USER_POWER = "upgradeUserPower"; +// //撤销指定的用户授权记录 +// public static final String CANCEL_USER_POWER = "cancelUserPower"; + + + /* + * 极光 + * */ + //删除alias + public static final String DELETE_JPUSH_ALIAS = "https://device.jpush.cn/v3/aliases/"; + //删除tags + public static final String DELETE_JPUSH_TAG = "https://device.jpush.cn/v3/tags/"; +} diff --git a/app/src/main/java/com/info/sn/network/api/APPJump.java b/app/src/main/java/com/uiui/sn/network/api/APPJump.java similarity index 63% rename from app/src/main/java/com/info/sn/network/api/APPJump.java rename to app/src/main/java/com/uiui/sn/network/api/APPJump.java index 5d81b40..3db5170 100644 --- a/app/src/main/java/com/info/sn/network/api/APPJump.java +++ b/app/src/main/java/com/uiui/sn/network/api/APPJump.java @@ -1,8 +1,8 @@ -package com.info.sn.network.api; +package com.uiui.sn.network.api; -import com.info.sn.bean.zuoye.AppJump; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.network.UrlAddress; +import com.uiui.sn.bean.zuoye.AppJump; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.network.UrlAddress; import java.util.List; diff --git a/app/src/main/java/com/info/sn/network/api/AddAppInstall.java b/app/src/main/java/com/uiui/sn/network/api/AddAppInstall.java similarity index 75% rename from app/src/main/java/com/info/sn/network/api/AddAppInstall.java rename to app/src/main/java/com/uiui/sn/network/api/AddAppInstall.java index 1f94337..0da2cc1 100644 --- a/app/src/main/java/com/info/sn/network/api/AddAppInstall.java +++ b/app/src/main/java/com/uiui/sn/network/api/AddAppInstall.java @@ -1,7 +1,7 @@ -package com.info.sn.network.api; +package com.uiui.sn.network.api; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.network.UrlAddress; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.network.UrlAddress; import io.reactivex.Observable; import retrofit2.http.Field; diff --git a/app/src/main/java/com/info/sn/network/api/AppUsedApi.java b/app/src/main/java/com/uiui/sn/network/api/AppUsedApi.java similarity index 75% rename from app/src/main/java/com/info/sn/network/api/AppUsedApi.java rename to app/src/main/java/com/uiui/sn/network/api/AppUsedApi.java index c2c189a..9680515 100644 --- a/app/src/main/java/com/info/sn/network/api/AppUsedApi.java +++ b/app/src/main/java/com/uiui/sn/network/api/AppUsedApi.java @@ -1,7 +1,7 @@ -package com.info.sn.network.api; +package com.uiui.sn.network.api; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.network.UrlAddress; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.network.UrlAddress; import io.reactivex.Observable; import retrofit2.http.Field; diff --git a/app/src/main/java/com/info/sn/network/api/Applog.java b/app/src/main/java/com/uiui/sn/network/api/Applog.java similarity index 78% rename from app/src/main/java/com/info/sn/network/api/Applog.java rename to app/src/main/java/com/uiui/sn/network/api/Applog.java index 1e9c5c0..fadc01b 100644 --- a/app/src/main/java/com/info/sn/network/api/Applog.java +++ b/app/src/main/java/com/uiui/sn/network/api/Applog.java @@ -1,7 +1,7 @@ -package com.info.sn.network.api; +package com.uiui.sn.network.api; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.network.UrlAddress; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.network.UrlAddress; import io.reactivex.Observable; import retrofit2.http.GET; diff --git a/app/src/main/java/com/info/sn/network/api/BindDevices.java b/app/src/main/java/com/uiui/sn/network/api/BindDevices.java similarity index 73% rename from app/src/main/java/com/info/sn/network/api/BindDevices.java rename to app/src/main/java/com/uiui/sn/network/api/BindDevices.java index 0fc1b41..c25c4b2 100644 --- a/app/src/main/java/com/info/sn/network/api/BindDevices.java +++ b/app/src/main/java/com/uiui/sn/network/api/BindDevices.java @@ -1,7 +1,7 @@ -package com.info.sn.network.api; +package com.uiui.sn.network.api; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.network.UrlAddress; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.network.UrlAddress; import io.reactivex.Observable; import retrofit2.http.GET; diff --git a/app/src/main/java/com/info/sn/network/api/Browser.java b/app/src/main/java/com/uiui/sn/network/api/Browser.java similarity index 60% rename from app/src/main/java/com/info/sn/network/api/Browser.java rename to app/src/main/java/com/uiui/sn/network/api/Browser.java index 6278757..5e0a7ab 100644 --- a/app/src/main/java/com/info/sn/network/api/Browser.java +++ b/app/src/main/java/com/uiui/sn/network/api/Browser.java @@ -1,8 +1,8 @@ -package com.info.sn.network.api; +package com.uiui.sn.network.api; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.bean.zuoye.browser.BrowserApiData; -import com.info.sn.network.UrlAddress; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.bean.zuoye.browser.BrowserApiData; +import com.uiui.sn.network.UrlAddress; import io.reactivex.Observable; import retrofit2.http.GET; diff --git a/app/src/main/java/com/info/sn/network/api/BrowserLabel.java b/app/src/main/java/com/uiui/sn/network/api/BrowserLabel.java similarity index 62% rename from app/src/main/java/com/info/sn/network/api/BrowserLabel.java rename to app/src/main/java/com/uiui/sn/network/api/BrowserLabel.java index 188df74..286d817 100644 --- a/app/src/main/java/com/info/sn/network/api/BrowserLabel.java +++ b/app/src/main/java/com/uiui/sn/network/api/BrowserLabel.java @@ -1,8 +1,8 @@ -package com.info.sn.network.api; +package com.uiui.sn.network.api; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.bean.zuoye.Label; -import com.info.sn.network.UrlAddress; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.bean.zuoye.Label; +import com.uiui.sn.network.UrlAddress; import io.reactivex.Observable; import retrofit2.http.GET; diff --git a/app/src/main/java/com/info/sn/network/api/ForceInstall.java b/app/src/main/java/com/uiui/sn/network/api/ForceInstall.java similarity index 65% rename from app/src/main/java/com/info/sn/network/api/ForceInstall.java rename to app/src/main/java/com/uiui/sn/network/api/ForceInstall.java index 781a037..a83d510 100644 --- a/app/src/main/java/com/info/sn/network/api/ForceInstall.java +++ b/app/src/main/java/com/uiui/sn/network/api/ForceInstall.java @@ -1,8 +1,8 @@ -package com.info.sn.network.api; +package com.uiui.sn.network.api; -import com.info.sn.bean.zuoye.AppInfo; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.network.UrlAddress; +import com.uiui.sn.bean.zuoye.AppInfo; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.network.UrlAddress; import java.util.List; diff --git a/app/src/main/java/com/info/sn/network/api/GetBatchApi.java b/app/src/main/java/com/uiui/sn/network/api/GetBatchApi.java similarity index 67% rename from app/src/main/java/com/info/sn/network/api/GetBatchApi.java rename to app/src/main/java/com/uiui/sn/network/api/GetBatchApi.java index 2869f55..e825a10 100644 --- a/app/src/main/java/com/info/sn/network/api/GetBatchApi.java +++ b/app/src/main/java/com/uiui/sn/network/api/GetBatchApi.java @@ -1,7 +1,7 @@ -package com.info.sn.network.api; +package com.uiui.sn.network.api; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.network.UrlAddress; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.network.UrlAddress; import io.reactivex.Observable; import retrofit2.http.GET; diff --git a/app/src/main/java/com/uiui/sn/network/api/GetControlScreenshotApi.java b/app/src/main/java/com/uiui/sn/network/api/GetControlScreenshotApi.java new file mode 100644 index 0000000..6aabf03 --- /dev/null +++ b/app/src/main/java/com/uiui/sn/network/api/GetControlScreenshotApi.java @@ -0,0 +1,20 @@ +package com.uiui.sn.network.api; + +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.network.UrlAddress; + +import io.reactivex.Observable; +import okhttp3.MultipartBody; +import retrofit2.http.Multipart; +import retrofit2.http.POST; +import retrofit2.http.Part; +import retrofit2.http.Query; + +public interface GetControlScreenshotApi { + @Multipart + @POST(UrlAddress.UPLOAD_CONTROL_SCREENSHOT) + Observable getControlScreenshot( + @Query("sn") String sn, + @Part MultipartBody.Part body + ); +} diff --git a/app/src/main/java/com/info/sn/network/api/GetGuideApi.java b/app/src/main/java/com/uiui/sn/network/api/GetGuideApi.java similarity index 68% rename from app/src/main/java/com/info/sn/network/api/GetGuideApi.java rename to app/src/main/java/com/uiui/sn/network/api/GetGuideApi.java index 120027c..87ccac7 100644 --- a/app/src/main/java/com/info/sn/network/api/GetGuideApi.java +++ b/app/src/main/java/com/uiui/sn/network/api/GetGuideApi.java @@ -1,7 +1,7 @@ -package com.info.sn.network.api; +package com.uiui.sn.network.api; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.network.UrlAddress; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.network.UrlAddress; import io.reactivex.Observable; import retrofit2.http.GET; diff --git a/app/src/main/java/com/info/sn/network/api/GetGuideApiTest.java b/app/src/main/java/com/uiui/sn/network/api/GetGuideApiTest.java similarity index 67% rename from app/src/main/java/com/info/sn/network/api/GetGuideApiTest.java rename to app/src/main/java/com/uiui/sn/network/api/GetGuideApiTest.java index 2eb2d19..51c6305 100644 --- a/app/src/main/java/com/info/sn/network/api/GetGuideApiTest.java +++ b/app/src/main/java/com/uiui/sn/network/api/GetGuideApiTest.java @@ -1,7 +1,6 @@ -package com.info.sn.network.api; +package com.uiui.sn.network.api; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.network.UrlAddress; +import com.uiui.sn.network.UrlAddress; import io.reactivex.Observable; import retrofit2.http.GET; diff --git a/app/src/main/java/com/info/sn/network/api/GetSnUidApi.java b/app/src/main/java/com/uiui/sn/network/api/GetSnUidApi.java similarity index 67% rename from app/src/main/java/com/info/sn/network/api/GetSnUidApi.java rename to app/src/main/java/com/uiui/sn/network/api/GetSnUidApi.java index c11c20f..023858f 100644 --- a/app/src/main/java/com/info/sn/network/api/GetSnUidApi.java +++ b/app/src/main/java/com/uiui/sn/network/api/GetSnUidApi.java @@ -1,7 +1,7 @@ -package com.info.sn.network.api; +package com.uiui.sn.network.api; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.network.UrlAddress; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.network.UrlAddress; import io.reactivex.Observable; import retrofit2.http.GET; diff --git a/app/src/main/java/com/info/sn/network/api/NewestAppUpdate.java b/app/src/main/java/com/uiui/sn/network/api/NewestAppUpdate.java similarity index 70% rename from app/src/main/java/com/info/sn/network/api/NewestAppUpdate.java rename to app/src/main/java/com/uiui/sn/network/api/NewestAppUpdate.java index 8bcba69..19b1c82 100644 --- a/app/src/main/java/com/info/sn/network/api/NewestAppUpdate.java +++ b/app/src/main/java/com/uiui/sn/network/api/NewestAppUpdate.java @@ -1,8 +1,8 @@ -package com.info.sn.network.api; +package com.uiui.sn.network.api; -import com.info.sn.bean.zuoye.AppInfo; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.network.UrlAddress; +import com.uiui.sn.bean.zuoye.AppInfo; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.network.UrlAddress; import io.reactivex.Observable; import retrofit2.http.GET; diff --git a/app/src/main/java/com/info/sn/network/api/QRCodeApi.java b/app/src/main/java/com/uiui/sn/network/api/QRCodeApi.java similarity index 60% rename from app/src/main/java/com/info/sn/network/api/QRCodeApi.java rename to app/src/main/java/com/uiui/sn/network/api/QRCodeApi.java index ccf2e9c..6543e4f 100644 --- a/app/src/main/java/com/info/sn/network/api/QRCodeApi.java +++ b/app/src/main/java/com/uiui/sn/network/api/QRCodeApi.java @@ -1,7 +1,7 @@ -package com.info.sn.network.api; +package com.uiui.sn.network.api; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.network.UrlAddress; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.network.UrlAddress; import io.reactivex.Observable; import retrofit2.http.GET; diff --git a/app/src/main/java/com/info/sn/network/api/QueryAllApp.java b/app/src/main/java/com/uiui/sn/network/api/QueryAllApp.java similarity index 64% rename from app/src/main/java/com/info/sn/network/api/QueryAllApp.java rename to app/src/main/java/com/uiui/sn/network/api/QueryAllApp.java index 651c25e..f101874 100644 --- a/app/src/main/java/com/info/sn/network/api/QueryAllApp.java +++ b/app/src/main/java/com/uiui/sn/network/api/QueryAllApp.java @@ -1,8 +1,8 @@ -package com.info.sn.network.api; +package com.uiui.sn.network.api; -import com.info.sn.bean.zuoye.AppInfo; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.network.UrlAddress; +import com.uiui.sn.bean.zuoye.AppInfo; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.network.UrlAddress; import java.util.List; diff --git a/app/src/main/java/com/info/sn/network/api/QueryAppInside.java b/app/src/main/java/com/uiui/sn/network/api/QueryAppInside.java similarity index 68% rename from app/src/main/java/com/info/sn/network/api/QueryAppInside.java rename to app/src/main/java/com/uiui/sn/network/api/QueryAppInside.java index 056df51..7aba2f9 100644 --- a/app/src/main/java/com/info/sn/network/api/QueryAppInside.java +++ b/app/src/main/java/com/uiui/sn/network/api/QueryAppInside.java @@ -1,7 +1,7 @@ -package com.info.sn.network.api; +package com.uiui.sn.network.api; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.network.UrlAddress; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.network.UrlAddress; import io.reactivex.Observable; import retrofit2.http.GET; diff --git a/app/src/main/java/com/info/sn/network/api/QuerySnAppStart.java b/app/src/main/java/com/uiui/sn/network/api/QuerySnAppStart.java similarity index 51% rename from app/src/main/java/com/info/sn/network/api/QuerySnAppStart.java rename to app/src/main/java/com/uiui/sn/network/api/QuerySnAppStart.java index 14f3e12..d34d6ad 100644 --- a/app/src/main/java/com/info/sn/network/api/QuerySnAppStart.java +++ b/app/src/main/java/com/uiui/sn/network/api/QuerySnAppStart.java @@ -1,8 +1,8 @@ -package com.info.sn.network.api; +package com.uiui.sn.network.api; -import com.info.sn.bean.zuoye.AppStart; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.network.UrlAddress; +import com.uiui.sn.bean.zuoye.AppStart; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.network.UrlAddress; import java.util.List; @@ -12,8 +12,7 @@ import retrofit2.http.Query; public interface QuerySnAppStart { @GET(UrlAddress.GET_APP_START) - Observable>> - getAppStatu( + Observable>> getAppStatu( @Query("sn") String sn ); } diff --git a/app/src/main/java/com/info/sn/network/api/RunningApp.java b/app/src/main/java/com/uiui/sn/network/api/RunningApp.java similarity index 74% rename from app/src/main/java/com/info/sn/network/api/RunningApp.java rename to app/src/main/java/com/uiui/sn/network/api/RunningApp.java index f80f62a..5a04fe3 100644 --- a/app/src/main/java/com/info/sn/network/api/RunningApp.java +++ b/app/src/main/java/com/uiui/sn/network/api/RunningApp.java @@ -1,8 +1,8 @@ -package com.info.sn.network.api; +package com.uiui.sn.network.api; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.network.UrlAddress; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.network.UrlAddress; import io.reactivex.Observable; import retrofit2.http.Field; diff --git a/app/src/main/java/com/info/sn/network/api/SNInfoApi.java b/app/src/main/java/com/uiui/sn/network/api/SNInfoApi.java similarity index 60% rename from app/src/main/java/com/info/sn/network/api/SNInfoApi.java rename to app/src/main/java/com/uiui/sn/network/api/SNInfoApi.java index bb7f87d..62e8467 100644 --- a/app/src/main/java/com/info/sn/network/api/SNInfoApi.java +++ b/app/src/main/java/com/uiui/sn/network/api/SNInfoApi.java @@ -1,8 +1,8 @@ -package com.info.sn.network.api; +package com.uiui.sn.network.api; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.bean.zuoye.UserInfo; -import com.info.sn.network.UrlAddress; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.bean.zuoye.UserInfo; +import com.uiui.sn.network.UrlAddress; import io.reactivex.Observable; import retrofit2.http.GET; diff --git a/app/src/main/java/com/info/sn/network/api/SaveSnUidApi.java b/app/src/main/java/com/uiui/sn/network/api/SaveSnUidApi.java similarity index 79% rename from app/src/main/java/com/info/sn/network/api/SaveSnUidApi.java rename to app/src/main/java/com/uiui/sn/network/api/SaveSnUidApi.java index 04b4a5e..d0b64b2 100644 --- a/app/src/main/java/com/info/sn/network/api/SaveSnUidApi.java +++ b/app/src/main/java/com/uiui/sn/network/api/SaveSnUidApi.java @@ -1,7 +1,7 @@ -package com.info.sn.network.api; +package com.uiui.sn.network.api; -import com.info.sn.bean.zuoye.Response; -import com.info.sn.network.UrlAddress; +import com.uiui.sn.bean.zuoye.Response; +import com.uiui.sn.network.UrlAddress; import io.reactivex.Observable; import retrofit2.http.Field; diff --git a/app/src/main/java/com/info/sn/network/api/ScreenLock.java b/app/src/main/java/com/uiui/sn/network/api/ScreenLock.java similarity index 67% rename from app/src/main/java/com/info/sn/network/api/ScreenLock.java rename to app/src/main/java/com/uiui/sn/network/api/ScreenLock.java index 9656520..4a40463 100644 --- a/app/src/main/java/com/info/sn/network/api/ScreenLock.java +++ b/app/src/main/java/com/uiui/sn/network/api/ScreenLock.java @@ -1,7 +1,7 @@ -package com.info.sn.network.api; +package com.uiui.sn.network.api; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.network.UrlAddress; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.network.UrlAddress; import io.reactivex.Observable; import retrofit2.http.GET; diff --git a/app/src/main/java/com/info/sn/network/api/ScreenState.java b/app/src/main/java/com/uiui/sn/network/api/ScreenState.java similarity index 76% rename from app/src/main/java/com/info/sn/network/api/ScreenState.java rename to app/src/main/java/com/uiui/sn/network/api/ScreenState.java index 952d22f..46af373 100644 --- a/app/src/main/java/com/info/sn/network/api/ScreenState.java +++ b/app/src/main/java/com/uiui/sn/network/api/ScreenState.java @@ -1,7 +1,7 @@ -package com.info.sn.network.api; +package com.uiui.sn.network.api; -import com.info.sn.BuildConfig; -import com.info.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.BuildConfig; +import com.uiui.sn.bean.zuoye.BaseResponse; import io.reactivex.Observable; import retrofit2.http.Field; diff --git a/app/src/main/java/com/info/sn/network/api/Setting.java b/app/src/main/java/com/uiui/sn/network/api/Setting.java similarity index 67% rename from app/src/main/java/com/info/sn/network/api/Setting.java rename to app/src/main/java/com/uiui/sn/network/api/Setting.java index 3aa75a1..d45c64f 100644 --- a/app/src/main/java/com/info/sn/network/api/Setting.java +++ b/app/src/main/java/com/uiui/sn/network/api/Setting.java @@ -1,7 +1,7 @@ -package com.info.sn.network.api; +package com.uiui.sn.network.api; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.network.UrlAddress; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.network.UrlAddress; import io.reactivex.Observable; import retrofit2.http.GET; diff --git a/app/src/main/java/com/info/sn/network/api/TimeControl.java b/app/src/main/java/com/uiui/sn/network/api/TimeControl.java similarity index 68% rename from app/src/main/java/com/info/sn/network/api/TimeControl.java rename to app/src/main/java/com/uiui/sn/network/api/TimeControl.java index a6e9b35..ba58bcb 100644 --- a/app/src/main/java/com/info/sn/network/api/TimeControl.java +++ b/app/src/main/java/com/uiui/sn/network/api/TimeControl.java @@ -1,7 +1,7 @@ -package com.info.sn.network.api; +package com.uiui.sn.network.api; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.network.UrlAddress; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.network.UrlAddress; import io.reactivex.Observable; import retrofit2.http.GET; diff --git a/app/src/main/java/com/info/sn/network/api/UpdateAdminSn.java b/app/src/main/java/com/uiui/sn/network/api/UpdateAdminSn.java similarity index 80% rename from app/src/main/java/com/info/sn/network/api/UpdateAdminSn.java rename to app/src/main/java/com/uiui/sn/network/api/UpdateAdminSn.java index c10250e..4f0f163 100644 --- a/app/src/main/java/com/info/sn/network/api/UpdateAdminSn.java +++ b/app/src/main/java/com/uiui/sn/network/api/UpdateAdminSn.java @@ -1,7 +1,7 @@ -package com.info.sn.network.api; +package com.uiui.sn.network.api; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.network.UrlAddress; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.network.UrlAddress; import io.reactivex.Observable; import retrofit2.http.Field; diff --git a/app/src/main/java/com/info/sn/network/api/UploadScreenshot.java b/app/src/main/java/com/uiui/sn/network/api/UploadScreenshot.java similarity index 78% rename from app/src/main/java/com/info/sn/network/api/UploadScreenshot.java rename to app/src/main/java/com/uiui/sn/network/api/UploadScreenshot.java index d372a9e..2b58b43 100644 --- a/app/src/main/java/com/info/sn/network/api/UploadScreenshot.java +++ b/app/src/main/java/com/uiui/sn/network/api/UploadScreenshot.java @@ -1,7 +1,7 @@ -package com.info.sn.network.api; +package com.uiui.sn.network.api; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.network.UrlAddress; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.network.UrlAddress; import io.reactivex.Observable; import okhttp3.MultipartBody; diff --git a/app/src/main/java/com/info/sn/network/api/UserInfoApi.java b/app/src/main/java/com/uiui/sn/network/api/UserInfoApi.java similarity index 67% rename from app/src/main/java/com/info/sn/network/api/UserInfoApi.java rename to app/src/main/java/com/uiui/sn/network/api/UserInfoApi.java index 9f05cac..e0e5928 100644 --- a/app/src/main/java/com/info/sn/network/api/UserInfoApi.java +++ b/app/src/main/java/com/uiui/sn/network/api/UserInfoApi.java @@ -1,8 +1,8 @@ -package com.info.sn.network.api; +package com.uiui.sn.network.api; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.bean.zuoye.UserAvatarInfo; -import com.info.sn.network.UrlAddress; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.bean.zuoye.UserAvatarInfo; +import com.uiui.sn.network.UrlAddress; import io.reactivex.Observable; import retrofit2.http.Field; diff --git a/app/src/main/java/com/info/sn/network/api/UserInfoControl.java b/app/src/main/java/com/uiui/sn/network/api/UserInfoControl.java similarity index 67% rename from app/src/main/java/com/info/sn/network/api/UserInfoControl.java rename to app/src/main/java/com/uiui/sn/network/api/UserInfoControl.java index 59bbcad..f5f41f1 100644 --- a/app/src/main/java/com/info/sn/network/api/UserInfoControl.java +++ b/app/src/main/java/com/uiui/sn/network/api/UserInfoControl.java @@ -1,8 +1,8 @@ -package com.info.sn.network.api; +package com.uiui.sn.network.api; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.bean.zuoye.UserAvatarInfo; -import com.info.sn.network.UrlAddress; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.bean.zuoye.UserAvatarInfo; +import com.uiui.sn.network.UrlAddress; import io.reactivex.Observable; import retrofit2.http.Field; diff --git a/app/src/main/java/com/info/sn/receiver/APKinstallReceiver.java b/app/src/main/java/com/uiui/sn/receiver/APKinstallReceiver.java similarity index 83% rename from app/src/main/java/com/info/sn/receiver/APKinstallReceiver.java rename to app/src/main/java/com/uiui/sn/receiver/APKinstallReceiver.java index 9f45200..37be757 100644 --- a/app/src/main/java/com/info/sn/receiver/APKinstallReceiver.java +++ b/app/src/main/java/com/uiui/sn/receiver/APKinstallReceiver.java @@ -1,36 +1,25 @@ -package com.info.sn.receiver; +package com.uiui.sn.receiver; import android.annotation.SuppressLint; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; import android.content.Intent; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageInfo; -import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; -import android.os.Build; import android.text.TextUtils; import android.util.Log; -import com.alibaba.fastjson.JSONArray; -import com.info.sn.bean.zuoye.AppUploadInfo; -import com.info.sn.network.HTTPInterface; -import com.info.sn.utils.ApkUtils; -import com.info.sn.utils.CacheUtils; -import com.info.sn.utils.JGYUtils; +import com.uiui.sn.network.HTTPInterface; +import com.uiui.sn.service.ManagerService; +import com.uiui.sn.utils.ApkUtils; +import com.uiui.sn.utils.CacheUtils; +import com.uiui.sn.utils.JGYUtils; -import java.util.ArrayList; -import java.util.List; import java.util.concurrent.TimeUnit; import io.reactivex.Observable; import io.reactivex.ObservableEmitter; -import io.reactivex.ObservableOnSubscribe; import io.reactivex.Observer; -import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; -import io.reactivex.schedulers.Schedulers; public class APKinstallReceiver extends BroadcastReceiver { private static String TAG = APKinstallReceiver.class.getSimpleName(); @@ -74,9 +63,9 @@ public class APKinstallReceiver extends BroadcastReceiver { Log.e(TAG, "sendAppInfo: " + state + packageName); newAppListener.setNewAppListener(packageName); //启动应用市场 - if ("com.jgyapp.market".equals(packageName)) { + if ("com.uiui.appstore".equals(packageName)) { Intent bootIntent = new Intent(BootReceiver.BOOT_COMPLETED); - bootIntent.setComponent(new ComponentName("com.jgyapp.market", "com.jgyapp.market.receiver.BootReceiver")); + bootIntent.setComponent(new ComponentName("com.uiui.appstore", "com.uiui.appstore.receiver.BootReceiver")); context.sendBroadcast(bootIntent); } else if ("com.uiuios.updatetools".equals(packageName)) { //启动升级组件 @@ -118,6 +107,8 @@ public class APKinstallReceiver extends BroadcastReceiver { HTTPInterface.getForceInstall(mContext); HTTPInterface.getAllappPackage(mContext); HTTPInterface.getAppInside(mContext); + HTTPInterface.checkUpdate(mContext, "com.uiui.appstore"); + HTTPInterface.checkUpdate(mContext, "com.uiui.browser"); } @Override diff --git a/app/src/main/java/com/info/sn/receiver/BootReceiver.java b/app/src/main/java/com/uiui/sn/receiver/BootReceiver.java similarity index 87% rename from app/src/main/java/com/info/sn/receiver/BootReceiver.java rename to app/src/main/java/com/uiui/sn/receiver/BootReceiver.java index b210785..ee78638 100644 --- a/app/src/main/java/com/info/sn/receiver/BootReceiver.java +++ b/app/src/main/java/com/uiui/sn/receiver/BootReceiver.java @@ -1,15 +1,15 @@ -package com.info.sn.receiver; +package com.uiui.sn.receiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; -import com.info.sn.service.GuardService; -import com.info.sn.service.MainService; -import com.info.sn.service.ManagerService; -import com.info.sn.service.DownloadService; -import com.info.sn.service.StepService; +import com.uiui.sn.service.GuardService; +import com.uiui.sn.service.MainService; +import com.uiui.sn.service.ManagerService; +import com.uiui.sn.service.DownloadService; +import com.uiui.sn.service.StepService; public class BootReceiver extends BroadcastReceiver { diff --git a/app/src/main/java/com/info/sn/receiver/InstallResultReceiver.java b/app/src/main/java/com/uiui/sn/receiver/InstallResultReceiver.java similarity index 97% rename from app/src/main/java/com/info/sn/receiver/InstallResultReceiver.java rename to app/src/main/java/com/uiui/sn/receiver/InstallResultReceiver.java index 8effd02..b13bfb0 100644 --- a/app/src/main/java/com/info/sn/receiver/InstallResultReceiver.java +++ b/app/src/main/java/com/uiui/sn/receiver/InstallResultReceiver.java @@ -1,4 +1,4 @@ -package com.info.sn.receiver; +package com.uiui.sn.receiver; import android.content.BroadcastReceiver; import android.content.Context; @@ -9,8 +9,6 @@ import android.util.Log; import androidx.annotation.RequiresApi; -import com.info.sn.utils.ToastUtil; - public class InstallResultReceiver extends BroadcastReceiver { private static final String TAG = "InstallResultReceiver"; diff --git a/app/src/main/java/com/info/sn/receiver/MyJPushReceiver.java b/app/src/main/java/com/uiui/sn/receiver/MyJPushReceiver.java similarity index 64% rename from app/src/main/java/com/info/sn/receiver/MyJPushReceiver.java rename to app/src/main/java/com/uiui/sn/receiver/MyJPushReceiver.java index bd14a60..8d13b98 100644 --- a/app/src/main/java/com/info/sn/receiver/MyJPushReceiver.java +++ b/app/src/main/java/com/uiui/sn/receiver/MyJPushReceiver.java @@ -1,91 +1,75 @@ -package com.info.sn.receiver; +package com.uiui.sn.receiver; import android.annotation.SuppressLint; import android.bluetooth.BluetoothAdapter; import android.content.BroadcastReceiver; +import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageManager; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.os.Bundle; import android.os.CountDownTimer; import android.os.Environment; import android.os.Handler; -import android.provider.Settings; import android.text.TextUtils; import android.util.Log; import android.view.Gravity; import android.view.WindowManager; import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.arialyy.aria.core.Aria; import com.arialyy.aria.core.download.DownloadEntity; -import com.google.gson.Gson; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import com.google.gson.reflect.TypeToken; -import com.info.sn.bean.gankao.AvailableProduct; -import com.info.sn.bean.gankao.CancelUserPower; -import com.info.sn.bean.gankao.GankaoBaseResponse; -import com.info.sn.bean.gankao.PowerUser; -import com.info.sn.bean.gankao.UserProduct; -import com.info.sn.bean.gankao.UserProductCards; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.bean.zuoye.Response; -import com.info.sn.bean.zuoye.SNUidBean; -import com.info.sn.config.Scheme; -import com.info.sn.jpush.Logger; -import com.info.sn.manager.ControlManager; -import com.info.sn.network.HTTPInterface; -import com.info.sn.manager.NetInterfaceManager; -import com.info.sn.network.api.BindDevices; -import com.info.sn.network.api.UploadScreenshot; -import com.info.sn.service.MainService; -import com.info.sn.service.ManagerService; -import com.info.sn.utils.ApkUtils; -import com.info.sn.utils.CacheUtils; -import com.info.sn.utils.CmdUtil; -import com.info.sn.manager.DeviceManager; -import com.info.sn.utils.ForegroundAppUtil; -import com.info.sn.utils.JGYUtils; -import com.info.sn.utils.LaunchTools; -import com.info.sn.utils.SPUtils; -import com.info.sn.utils.ServiceAliveUtils; -import com.info.sn.utils.ToastUtil; -import com.info.sn.utils.Utils; -import com.info.sn.dialog.CustomDialog; - -import org.jetbrains.annotations.NotNull; +import com.blankj.utilcode.util.ImageUtils; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.dialog.CustomDialog; +import com.uiui.sn.jpush.Logger; +import com.uiui.sn.manager.ControlManager; +import com.uiui.sn.manager.DeviceManager; +import com.uiui.sn.manager.NetInterfaceManager; +import com.uiui.sn.network.HTTPInterface; +import com.uiui.sn.network.api.UploadScreenshot; +import com.uiui.sn.service.MainService; +import com.uiui.sn.service.ManagerService; +import com.uiui.sn.utils.ApkUtils; +import com.uiui.sn.utils.CacheUtils; +import com.uiui.sn.utils.CmdUtil; +import com.uiui.sn.utils.JGYUtils; +import com.uiui.sn.utils.SPUtils; +import com.uiui.sn.utils.ServiceAliveUtils; +import com.uiui.sn.utils.ToastUtil; +import com.uiui.sn.utils.Utils; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.File; -import java.lang.reflect.Type; -import java.text.ParseException; -import java.text.SimpleDateFormat; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; -import java.util.Date; -import java.util.HashMap; import java.util.HashSet; import java.util.List; -import java.util.TimeZone; import cn.jpush.android.api.JPushInterface; import io.reactivex.Observable; import io.reactivex.ObservableEmitter; import io.reactivex.ObservableOnSubscribe; +import io.reactivex.ObservableSource; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.annotations.NonNull; import io.reactivex.disposables.Disposable; +import io.reactivex.functions.Function; import io.reactivex.schedulers.Schedulers; import okhttp3.MediaType; import okhttp3.MultipartBody; import okhttp3.RequestBody; -import static com.info.sn.service.ManagerService.LOCK_STATE; +import static com.uiui.sn.service.ManagerService.LOCK_STATE; /** * 自定义接收器 @@ -178,6 +162,32 @@ public class MyJPushReceiver extends BroadcastReceiver { private static final String JIGUANG_UPGRADE_COMBO = "44"; //设备授权和解除 private static final String JIGUANG_BIND_UNBIND = "45"; + //飞行模式 + private static final String JIGUANG_FLIGHT_MODE = "47"; + //勿扰模式 + private static final String JIGUANG_NOTDISTURB_MODE = "48"; + //定位 + private static final String JIGUANG_LOCATION = "49"; + //充电提醒 + private static final String JIGUANG_CHARGING_REMINDER = "50"; + //音量调节 + private static final String JIGUANG_VOLUME = "52"; + //亮度调节 + private static final String JIGUANG_LUMINANCE = "53"; + //字体大小调节 + private static final String JIGUANG_TYPEFACE = "54"; + //自动旋转 + private static final String JIGUANG_SCREEN_ROTATION = "55"; + //WiFi设置 + private static final String JIGUANG_WIFI_SET = "56"; + //闹钟 + private static final String JIGUANG_ALARM_CLOCK = "57"; + //应用白名单 + private static final String JIGUANG_APP_WHITELIST = "58"; + //隐藏图标 + private static final String JIGUANG_HIDE_APPICON = "59"; + //优化内存 + private static final String JIGUANG_KILL_APP = "60"; @Override @@ -410,15 +420,12 @@ public class MyJPushReceiver extends BroadcastReceiver { break; case JIGUANG_CHANGE_COMBO: ToastUtil.debugShow("更换套餐"); - changeCombo(context, extras); break; case JIGUANG_CANCEL_COMBO: ToastUtil.debugShow("取消套餐"); - cancleCombo(context, extras); break; case JIGUANG_UPGRADE_COMBO: ToastUtil.debugShow("升级套餐"); - upgradeCombo(context, extras); case JIGUANG_APP_BROWSER: ToastUtil.debugShow("收到推送消息: 系统APP管控"); Log.e(TAG, "processCustomMessage: " + extras); @@ -430,7 +437,32 @@ public class MyJPushReceiver extends BroadcastReceiver { MainService.getPresenter().getForceInstall(); DeviceManager.doMasterClear(); break; - + case JIGUANG_FLIGHT_MODE: + break; + case JIGUANG_NOTDISTURB_MODE: + break; + case JIGUANG_LOCATION: + break; + case JIGUANG_CHARGING_REMINDER: + break; + case JIGUANG_VOLUME: + break; + case JIGUANG_LUMINANCE: + break; + case JIGUANG_SCREEN_ROTATION: + break; + case JIGUANG_WIFI_SET: + break; + case JIGUANG_ALARM_CLOCK: + setAlarmCLock(context, extras); + break; + case JIGUANG_APP_WHITELIST: + break; + case JIGUANG_HIDE_APPICON: + break; + case JIGUANG_KILL_APP: + Utils.killBackgroundApp(context); + break; } } @@ -441,8 +473,11 @@ public class MyJPushReceiver extends BroadcastReceiver { synchronized private void sendStartTime(Context context, String jsonString) { HTTPInterface.updateAdminInfo(context); - HTTPInterface.sendRunningApp(context); +// HTTPInterface.sendRunningApp(context); HTTPInterface.sendAppUsed(context); + if (JGYUtils.getInstance().isScreenOn()) { + HTTPInterface.screenshot(context); + } } synchronized private void setUsbState(Context context, String jsonString) { @@ -589,7 +624,7 @@ public class MyJPushReceiver extends BroadcastReceiver { file.mkdirs(); Aria.download(this) .load(url) - .setFilePath(file.getAbsolutePath() + "/" + packages + ".apk") + .setFilePath(JGYUtils.getInstance().getDownLoadPath() + packages + ".apk") .ignoreFilePathOccupy() .setExtendField(packages).create(); Aria.download(this).resumeAllTask(); @@ -659,19 +694,21 @@ public class MyJPushReceiver extends BroadcastReceiver { } synchronized private void bind(final Context context, String id, int type) { - BindDevices bindDevices = NetInterfaceManager.getInstance().getbindDevicesControl(); - bindDevices.getBindDevices(Utils.getSerial(), id, type) + NetInterfaceManager.getInstance() + .getbindDevicesControl() + .getBindDevices(Utils.getSerial(), id, type) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer() { @Override public void onSubscribe(@NonNull Disposable d) { - + Log.e("bind", "onSubscribe: "); } @Override public void onNext(@NonNull BaseResponse baseResponse) { int code = baseResponse.code; + Log.e("bind", "onNext: " + baseResponse); String msg = baseResponse.msg; // Log.e("bind", baseResponse.toString()); if (code == 200) { @@ -683,12 +720,12 @@ public class MyJPushReceiver extends BroadcastReceiver { @Override public void onError(@NonNull Throwable e) { - Log.e("bind", e.getMessage()); + Log.e("bind", "onError: " + e.getMessage()); } @Override public void onComplete() { - + Log.e("bind", "onComplete: "); } }); } @@ -784,35 +821,159 @@ public class MyJPushReceiver extends BroadcastReceiver { context.sendBroadcast(intent); } - public void doscreenshot(final Context context) { - final long time = System.currentTimeMillis(); - Observable.create(new ObservableOnSubscribe() { + private static Observable getScreenshot(Context context, String filePath) { + Observable screenshotObservable = Observable.create(new ObservableOnSubscribe() { @Override - public void subscribe(ObservableEmitter e) throws Exception { - String filepath = context.getExternalFilesDir("db").getAbsolutePath(); - int n = CmdUtil.execute("screencap -p " + filepath + File.separator + time + ".png").code; - e.onNext(n); + 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() + .getUploadScreenshotControl() + .uploadScreenshot(Utils.getSerial(), body) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()); + } + + public static void doscreenshot(Context context) { + String path = context.getExternalFilesDir("db").getAbsolutePath(); + String filePath = path + File.separator + Utils.getSerial() + ".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() { + .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: "); + } + }); + } + +// public void doscreenshot(final Context context) { +// final long time = System.currentTimeMillis(); +// Observable.create(new ObservableOnSubscribe() { +// @Override +// public void subscribe(ObservableEmitter e) throws Exception { +// String filepath = context.getExternalFilesDir("db").getAbsolutePath(); +// int n = CmdUtil.execute("screencap -p " + filepath + File.separator + time + ".png").code; +// e.onNext(n); +// } +// }).subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(new Observer() { +// @Override +// public void onSubscribe(Disposable d) { +// +// } +// +// @Override +// public void onNext(Integer integer) { +// if (integer == 0) { +// uplaodImage(context, time); +// } else { +// Log.e("doss", "失败"); +// } +// } +// +// @Override +// public void onError(Throwable e) { +// Log.e("doss", "Throwable=" + e.getMessage()); +// } +// +// @Override +// public void onComplete() { +// +// } +// }); +// } + + private void uplaodImage(final Context context, long time) { + String filepath = context.getExternalFilesDir("db").getAbsolutePath(); +// String filepath = mContext.getFileStreamPath("screenshot").getAbsolutePath(); + //放在app内部data下面 + File file = new File(filepath + File.separator + time + ".png"); + //不要直接使用常用图片格式 + if (!file.exists()) { + Log.e("uplaodImage", "File does not exists"); + return; + } + RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file); + MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getName(), requestFile); + NetInterfaceManager.getInstance() + .getUploadScreenshotControl() + .uploadScreenshot(Utils.getSerial(), body) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { @Override public void onSubscribe(Disposable d) { } @Override - public void onNext(Integer integer) { - if (integer == 0) { - uplaodImage(context, time); + public void onNext(BaseResponse baseResponse) { + int code = baseResponse.code; + if (code == 200) { + Log.e(TAG, "onNext: " + baseResponse.msg); } else { - Log.e("doss", "失败"); + Log.e(TAG, code + ": " + baseResponse.msg); } } @Override public void onError(Throwable e) { - Log.e("doss", "Throwable=" + e.getMessage()); + Log.e("uplaod", "onError: " + e.getMessage()); } @Override @@ -820,6 +981,7 @@ public class MyJPushReceiver extends BroadcastReceiver { } }); + } /** @@ -863,52 +1025,6 @@ public class MyJPushReceiver extends BroadcastReceiver { } } - - private void uplaodImage(final Context context, long time) { - String filepath = context.getExternalFilesDir("db").getAbsolutePath(); -// String filepath = mContext.getFileStreamPath("screenshot").getAbsolutePath(); - //放在app内部data下面 - File file = new File(filepath + File.separator + time + ".png"); - //不要直接使用常用图片格式 - if (!file.exists()) { - Log.e("uplaodImage", "File does not exists"); - return; - } - UploadScreenshot uploadScreenshot = NetInterfaceManager.getInstance().getUploadScreenshotControl(); - RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file); - MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getName(), requestFile); - uploadScreenshot.uploadScreenshot(Utils.getSerial(), body) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - - } - - @Override - public void onNext(BaseResponse baseResponse) { - int code = baseResponse.code; - if (code == 200) { - Log.e(TAG, "onNext: " + baseResponse.msg); - } else { - Log.e(TAG, code + ": " + baseResponse.msg); - } - } - - @Override - public void onError(Throwable e) { - Log.e("uplaod", "onError: " + e.getMessage()); - } - - @Override - public void onComplete() { - - } - }); - - } - private void timeControl(Context context, String jsonString) { HTTPInterface.getTimeControl(context); } @@ -995,444 +1111,10 @@ public class MyJPushReceiver extends BroadcastReceiver { JGYUtils.getInstance().updateForbidList(); } - - private void changeCombo(Context context, String jsonString) { - Log.e(TAG, "changeCombo: " + jsonString); - JSONObject jsonObject = JSON.parseObject(jsonString); - JSONObject edit_card_info = jsonObject.getJSONObject("edit_card_info"); - String taocan = edit_card_info.getString("taocan"); - if (TextUtils.isEmpty(taocan)) { - ToastUtil.show("要修改的套餐名为空"); - } else { - HashSet infoSet = new HashSet<>(Arrays.asList(taocan.split(","))); - for (String cardInfo : infoSet) { - queryAvailableProduct(context, cardInfo); - } - } + private void setAlarmCLock(Context context, String ex) { + Intent bootIntent = new Intent(BootReceiver.BOOT_COMPLETED); + bootIntent.setComponent(new ComponentName("com.uiui.os", "com.uiui.os.receiver.BootReceiver")); + context.sendBroadcast(bootIntent); } - public void queryAvailableProduct(Context context, String card_info) { - String appid = Scheme.partner_id; - String timestamp = String.valueOf(System.currentTimeMillis()); - HashMap params = new HashMap<>(); - params.put("appid", appid); - params.put("timestamp", timestamp); - NetInterfaceManager.getInstance() - .getQueryProductControl() - .activeUser(appid, timestamp, LaunchTools.getToken(params)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - Log.e(TAG + ":queryAvailableProduct", "onSubscribe: "); - } - - @Override - public void onNext(GankaoBaseResponse gankaoBaseResponse) { - Log.e(TAG + ":queryAvailableProduct", "onNext: " + JSONObject.toJSONString(gankaoBaseResponse)); - if (gankaoBaseResponse.code == 10000) { - Type type = new TypeToken>() { - }.getType(); - Gson gson = new Gson(); - List availableProductList = gson.fromJson(gson.toJson(gankaoBaseResponse.data), type); - AvailableProduct product = null; - for (AvailableProduct availableProduct : availableProductList) { - if (availableProduct.getDuration().contains(card_info)) { - product = availableProduct; - } - } - activeUser(context, product); - } else { - ToastUtil.show("获取激活套餐失败"); - } - } - - @Override - public void onError(Throwable e) { - Log.e(TAG + ":queryAvailableProduct", "onError: " + e.getMessage()); - } - - @Override - public void onComplete() { - Log.e(TAG + ":queryAvailableProduct", "onComplete: "); - } - }); - } - - public void activeUser(Context context, @NotNull AvailableProduct product) { - if (product == null) { - ToastUtil.show("获取套餐失败"); - return; - } - String specification_id = product.getSpecification_id(); - Log.e(TAG, "activeUser: specification_id: " + specification_id); - String appid = Scheme.partner_id; - String timestamp = String.valueOf(System.currentTimeMillis()); - String uid = Utils.getSerial(); - HashMap params = new HashMap<>(); - params.put("appid", appid); - params.put("timestamp", timestamp); - params.put("uid", uid); - params.put("specification_id", String.valueOf(specification_id)); - - NetInterfaceManager.getInstance() - .getActiveUserControl() - .activeUser(appid, timestamp, LaunchTools.getToken(params), uid, specification_id) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - Log.e(TAG + ":activeUser", "onSubscribe: "); - } - - @Override - public void onNext(GankaoBaseResponse gankaoBaseResponse) { - Log.e(TAG + ":activeUser", "onNext: " + JSONObject.toJSONString(gankaoBaseResponse)); - switch (gankaoBaseResponse.code) { - case 10000: - case 50000: - queryAvailableProduct(context); - ToastUtil.show("激活成功:" + product.getDuration()); - break; - default: - break; - - } - } - - @Override - public void onError(Throwable e) { - Log.e(TAG + ":activeUser", "onError: "); - } - - @Override - public void onComplete() { - Log.e(TAG + ":activeUser", "onComplete: "); - } - }); - } - - - interface GetUserProductsCallback { - void activeUserProduct(UserProduct activeUserProduct); - } - - private void getUserProducts(String card_info, GetUserProductsCallback callback) { - String appid = Scheme.partner_id; - String timestamp = String.valueOf(System.currentTimeMillis()); - String uid = Utils.getSerial(); - HashMap params = new HashMap<>(); - params.put("appid", appid); - params.put("timestamp", timestamp); - params.put("uid", uid); - NetInterfaceManager.getInstance() - .getUserProductsControl() - .getUserProducts(appid, timestamp, LaunchTools.getToken(params), uid) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer>>>() { - @Override - public void onSubscribe(Disposable d) { - - } - - @Override - public void onNext(GankaoBaseResponse>> userProductCardsGankaoBaseResponse) { - Log.e("getUserProducts", "onNext: " + userProductCardsGankaoBaseResponse.toString()); - if (userProductCardsGankaoBaseResponse.code == 200) { - UserProduct userProduct = null; - for (UserProduct product : userProductCardsGankaoBaseResponse.data.getCards()) { - if (product.getName().contains("权益套装") && product.getName().contains(card_info)) { - userProduct = product; - } - } - callback.activeUserProduct(userProduct); - } else { - ToastUtil.show("获取用户已激活的套餐失败"); - callback.activeUserProduct(null); - } - } - - @Override - public void onError(Throwable e) { - Log.e("getUserProducts", "onError: " + e.getMessage()); - callback.activeUserProduct(null); - onComplete(); - } - - @Override - public void onComplete() { - Log.e("getUserProducts", "onComplete: "); - } - }); - } - - private void cancleCombo(Context context, String jsonString) { - Log.e(TAG, "cancleCombo: " + jsonString); - JSONObject jsonObject = JSON.parseObject(jsonString); - List snUidBeans = JSON.parseArray(jsonObject.getJSONArray("delete_card_info").toJSONString(), SNUidBean.class); - for (SNUidBean snUidBean : snUidBeans) { - cancelUserPower(context, snUidBean); - try { - wait(1500); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - } - - private void cancelUserPower(Context context, SNUidBean snUidBean) { - String app_id = Scheme.partner_id; - String timestamp = String.valueOf(System.currentTimeMillis()); - String user_power_id = snUidBean.getUser_power_id(); - String specification_id = snUidBean.getSpecification_id(); - - HashMap params = new HashMap<>(); - params.put("app_id", app_id); - params.put("timestamp", timestamp); - params.put("user_power_id", user_power_id); - params.put("specification_id", specification_id); - - NetInterfaceManager.getInstance() - .getCancelUserPowerControl() - .cancelUserPower(app_id, timestamp, LaunchTools.getToken(params), user_power_id, specification_id) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer>() { - @Override - public void onSubscribe(Disposable d) { - Log.e("cancelUserPower", "onSubscribe: "); - } - - @Override - public void onNext(GankaoBaseResponse cancelUserPowerGankaoBaseResponse) { - Log.e("cancelUserPower", "onNext: " + JSONObject.toJSONString(cancelUserPowerGankaoBaseResponse)); - switch (cancelUserPowerGankaoBaseResponse.code) { - default: - break; - case 10000: - - break; - case 50000: - - break; - } - queryAvailableProduct(context); - } - - @Override - public void onError(Throwable e) { - Log.e("cancelUserPower", "onError: " + e.getMessage()); - } - - @Override - public void onComplete() { - Log.e("cancelUserPower", "onComplete: "); - } - }); - } - - public void queryAvailableProduct(Context context) { - String appid = Scheme.partner_id; - String timestamp = String.valueOf(System.currentTimeMillis()); - HashMap params = new HashMap<>(); - params.put("appid", appid); - params.put("timestamp", timestamp); - NetInterfaceManager.getInstance() - .getQueryProductControl() - .activeUser(appid, timestamp, LaunchTools.getToken(params)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - Log.e(TAG + "queryAvailableProduct", "onSubscribe: "); - } - - @Override - public void onNext(GankaoBaseResponse gankaoBaseResponse) { - Log.e(TAG + "queryAvailableProduct", "onNext: " + JSONObject.toJSONString(gankaoBaseResponse)); - if (gankaoBaseResponse.code == 10000) { - Type type = new TypeToken>() { - }.getType(); - Gson gson = new Gson(); - List availableProductList = gson.fromJson(gson.toJson(gankaoBaseResponse.data), type); - for (AvailableProduct product : availableProductList) { - mAvailableProductHashMap.put(product.getDuration(), product.getSpecification_id()); - } - queryPowerUserList(context); - } else { - ToastUtil.show("获取激活套餐失败"); - } - } - - @Override - public void onError(Throwable e) { - Log.e(TAG + "queryAvailableProduct", "onError: " + e.getMessage()); - } - - @Override - public void onComplete() { - Log.e(TAG + "queryAvailableProduct", "onComplete: "); - } - }); - } - - private HashMap mAvailableProductHashMap = new HashMap<>(); - - public void queryPowerUserList(Context context) { - String appid = Scheme.partner_id; - String timestamp = String.valueOf(System.currentTimeMillis()); - HashMap params = new HashMap<>(); - params.put("appid", appid); - params.put("timestamp", timestamp); - - NetInterfaceManager.getInstance() - .getQueryPowerUserListControl() - .queryPowerUserList(appid, timestamp, LaunchTools.getToken(params)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - Log.e("queryPowerUserList", "onSubscribe: "); - } - - @Override - public void onNext(GankaoBaseResponse gankaoBaseResponse) { - Log.e("queryPowerUserList", "onNext: "); -// Log.e("queryPowerUserList", "onNext: " + JSONObject.toJSONString(gankaoBaseResponse)); - int code = gankaoBaseResponse.code; - if (code == 10000) { - Gson gson = new Gson(); - Type type = new TypeToken>() { - }.getType(); - JsonObject data = JsonParser.parseString(gson.toJson(gankaoBaseResponse.data)).getAsJsonObject(); - JsonArray powerlist = data.getAsJsonArray("powerlist"); - List powerUserList = gson.fromJson(gson.toJson(powerlist), type); - Log.e("queryPowerUserList", "onNext: " + JSONObject.toJSONString(powerUserList)); - JSONArray jsonArray = new JSONArray(); - if (powerUserList != null && powerUserList.size() != 0) { - for (PowerUser powerUser : powerUserList) { - if (powerUser.getUserID().equals(Utils.getSerial())) { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("card_info", powerUser.getAuthorityName()); - jsonObject.put("grade", powerUser.getGrade()); - jsonObject.put("activate_time", getTime(powerUser.getAuthorizationDate())); - jsonObject.put("user_power_id", powerUser.getAuthorizationNumber()); - jsonObject.put("specification_id", mAvailableProductHashMap.get(powerUser.getAuthorityName())); - jsonArray.add(jsonObject); - } - } - } - sendUid(context, jsonArray.toJSONString()); - } - } - - @Override - public void onError(Throwable e) { - Log.e("queryPowerUserList", "onError: " + e.getMessage()); - onComplete(); - } - - @Override - public void onComplete() { - Log.e("queryPowerUserList", "onComplete: "); - } - }); - } - - private String getTime(String timestamp) { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.S'Z'"); - sdf.setTimeZone(TimeZone.getTimeZone("GMT+00")); - SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - try { - Date date = sdf.parse(timestamp);//拿到Date对象. - String str = sdf2.format(date); - return str; - } catch (ParseException e) { - e.printStackTrace(); - return timestamp; - } - } - - public void sendUid(Context context, String jsonString) { - int grade = (int) SPUtils.get(context, "int_grade", 0); - - String gankaoUID = Settings.System.getString(context.getContentResolver(), "gankaoUID"); - if (TextUtils.isEmpty(gankaoUID)) { - ToastUtil.show("获取设备UID失败,请重新激活"); - } - Log.e(TAG, "sendUid: " + jsonString); - NetInterfaceManager.getInstance() - .getSaveSnUidApiControl() - .saveSnUid(Utils.getSerial(), gankaoUID, grade, jsonString) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - Log.e(TAG + "sendUid", "onSubscribe: "); - } - - @Override - public void onNext(Response response) { - Log.e(TAG + "sendUid", "onNext: " + JSONObject.toJSONString(response)); - } - - @Override - public void onError(Throwable e) { - Log.e(TAG + "sendUid", "onError: " + e.getMessage()); - onComplete(); - } - - @Override - public void onComplete() { - Log.e(TAG + "sendUid", "onComplete: "); - } - }); - } - - private void upgradeCombo(Context context, String jsonString) { - Log.e(TAG, "upgradeCombo: " + jsonString); - JSONObject jsonObject = JSON.parseObject(jsonString); - String appid = Scheme.partner_id; - String timestamp = String.valueOf(System.currentTimeMillis()); - String uid = Utils.getSerial(); - String user_power_id = jsonObject.getString("user_power_id"); - HashMap params = new HashMap<>(); - params.put("app_id", appid); - params.put("timestamp", timestamp); - params.put("uid", uid); - params.put("user_power_id", user_power_id); - - NetInterfaceManager.getInstance() - .getUpgradeUserPowerControl() - .upgradeUserPower(appid, timestamp, LaunchTools.getToken(params), uid, user_power_id) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - Log.e("upgradeCombo", "onSubscribe: "); - } - - @Override - public void onNext(GankaoBaseResponse gankaoBaseResponse) { - Log.e("upgradeCombo", "onNext: " + JSONObject.toJSONString(gankaoBaseResponse)); - } - - @Override - public void onError(Throwable e) { - Log.e("upgradeCombo", "onError: " + e.getMessage()); - } - - @Override - public void onComplete() { - Log.e("upgradeCombo", "onComplete: "); - } - }); - } } diff --git a/app/src/main/java/com/info/sn/service/DownloadService.java b/app/src/main/java/com/uiui/sn/service/DownloadService.java similarity index 91% rename from app/src/main/java/com/info/sn/service/DownloadService.java rename to app/src/main/java/com/uiui/sn/service/DownloadService.java index e1f7464..aacdeec 100644 --- a/app/src/main/java/com/info/sn/service/DownloadService.java +++ b/app/src/main/java/com/uiui/sn/service/DownloadService.java @@ -1,21 +1,16 @@ -package com.info.sn.service; +package com.uiui.sn.service; import android.app.AlertDialog; import android.app.Service; import android.content.DialogInterface; import android.content.Intent; -import android.content.pm.PackageInfo; -import android.content.pm.PackageManager; import android.os.Bundle; import android.os.Environment; -import android.os.Handler; import android.os.IBinder; -import android.os.Message; import android.text.TextUtils; import android.util.Log; import android.view.WindowManager; -import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.alibaba.fastjson.JSON; @@ -24,10 +19,9 @@ import com.arialyy.annotations.Download; import com.arialyy.aria.core.Aria; import com.arialyy.aria.core.task.DownloadTask; import com.blankj.utilcode.util.ToastUtils; -import com.info.sn.KeepAliveConnection; -import com.info.sn.R; -import com.info.sn.utils.ApkUtils; -import com.info.sn.utils.JGYUtils; +import com.uiui.sn.KeepAliveConnection; +import com.uiui.sn.R; +import com.uiui.sn.utils.ApkUtils; import java.io.File; @@ -126,7 +120,7 @@ public class DownloadService extends Service { //在这里处理任务执行中的状态,如进度进度条的刷新 @Download.onTaskRunning void running(DownloadTask task) { - Log.e("aria running", "正在下载:" + task.getState() + "--" + task.getPercent() + "--" + task.getExtendField()); + Log.e("aria running", "正在下载:" + task.getState() + "-" + task.getPercent() + "--" + task.getExtendField()); String appName = ""; try { String jsonString = task.getExtendField(); @@ -137,7 +131,7 @@ public class DownloadService extends Service { } catch (Exception e) { Log.e("running", "running: " + e.getMessage()); } - ToastUtils.showShort("正在下载:" + appName + "--" + task.getPercent() + "%"); + ToastUtils.showShort("正在下载:" + appName + "-" + task.getPercent() + "%"); } @Download.onTaskComplete diff --git a/app/src/main/java/com/info/sn/service/GuardService.java b/app/src/main/java/com/uiui/sn/service/GuardService.java similarity index 94% rename from app/src/main/java/com/info/sn/service/GuardService.java rename to app/src/main/java/com/uiui/sn/service/GuardService.java index eadf502..b3fc0bb 100644 --- a/app/src/main/java/com/info/sn/service/GuardService.java +++ b/app/src/main/java/com/uiui/sn/service/GuardService.java @@ -1,4 +1,4 @@ -package com.info.sn.service; +package com.uiui.sn.service; /** * 作者 mjsheng @@ -17,8 +17,8 @@ import android.util.Log; import androidx.annotation.Nullable; -import com.info.sn.KeepAliveConnection; -import com.info.sn.utils.ServiceAliveUtils; +import com.uiui.sn.KeepAliveConnection; +import com.uiui.sn.utils.ServiceAliveUtils; /** diff --git a/app/src/main/java/com/info/sn/service/MainService.java b/app/src/main/java/com/uiui/sn/service/MainService.java similarity index 94% rename from app/src/main/java/com/info/sn/service/MainService.java rename to app/src/main/java/com/uiui/sn/service/MainService.java index 59454b0..7c7d4a3 100644 --- a/app/src/main/java/com/info/sn/service/MainService.java +++ b/app/src/main/java/com/uiui/sn/service/MainService.java @@ -1,4 +1,4 @@ -package com.info.sn.service; +package com.uiui.sn.service; import android.app.Service; import android.content.Intent; @@ -12,19 +12,19 @@ import android.util.Log; import com.alibaba.fastjson.JSONObject; import com.blankj.utilcode.util.NetworkUtils; -import com.info.sn.activity.main.MainActivity; -import com.info.sn.activity.main.MainContact; -import com.info.sn.activity.main.MainPresenter; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.bean.zuoye.UserInfo; -import com.info.sn.bean.gankao.AvailableProduct; -import com.info.sn.config.Configs; -import com.info.sn.jpush.TagAliasOperatorHelper; -import com.info.sn.manager.ControlManager; -import com.info.sn.network.HTTPInterface; -import com.info.sn.utils.SPUtils; -import com.info.sn.utils.ToastUtil; -import com.info.sn.utils.Utils; +import com.uiui.sn.activity.main.MainActivity; +import com.uiui.sn.activity.main.MainContact; +import com.uiui.sn.activity.main.MainPresenter; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.bean.zuoye.UserInfo; +import com.uiui.sn.bean.gankao.AvailableProduct; +import com.uiui.sn.config.Configs; +import com.uiui.sn.jpush.TagAliasOperatorHelper; +import com.uiui.sn.manager.ControlManager; +import com.uiui.sn.network.HTTPInterface; +import com.uiui.sn.utils.SPUtils; +import com.uiui.sn.utils.ToastUtil; +import com.uiui.sn.utils.Utils; import com.trello.rxlifecycle2.LifecycleProvider; import com.trello.rxlifecycle2.LifecycleTransformer; import com.trello.rxlifecycle2.RxLifecycle; @@ -46,7 +46,7 @@ import io.reactivex.Observer; import io.reactivex.disposables.Disposable; import io.reactivex.subjects.BehaviorSubject; -import static com.info.sn.jpush.TagAliasOperatorHelper.ACTION_SET; +import static com.uiui.sn.jpush.TagAliasOperatorHelper.ACTION_SET; /** * @author jgy02 @@ -130,7 +130,7 @@ public class MainService extends Service implements MainContact.MainView, Networ mPresenter.initAmap(); mPresenter.getUserInfo(); HTTPInterface.sendAppUsed(MainService.this); - HTTPInterface.sendRunningApp(MainService.this); +// HTTPInterface.sendRunningApp(MainService.this); HTTPInterface.getAPPinfo(MainService.this); startService(); mPresenter.setAlias(); diff --git a/app/src/main/java/com/info/sn/service/ManagerService.java b/app/src/main/java/com/uiui/sn/service/ManagerService.java similarity index 96% rename from app/src/main/java/com/info/sn/service/ManagerService.java rename to app/src/main/java/com/uiui/sn/service/ManagerService.java index cf8f2ad..f3915f3 100644 --- a/app/src/main/java/com/info/sn/service/ManagerService.java +++ b/app/src/main/java/com/uiui/sn/service/ManagerService.java @@ -1,4 +1,4 @@ -package com.info.sn.service; +package com.uiui.sn.service; import android.app.Service; import android.content.BroadcastReceiver; @@ -10,7 +10,6 @@ import android.graphics.PixelFormat; import android.os.Build; import android.os.Handler; import android.os.IBinder; -import android.os.SystemClock; import android.provider.Settings; import android.text.TextUtils; import android.util.DisplayMetrics; @@ -24,16 +23,16 @@ import android.widget.TextView; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.blankj.utilcode.util.NetworkUtils; -import com.info.sn.R; -import com.info.sn.bean.zuoye.BaseResponse; -import com.info.sn.manager.ControlManager; -import com.info.sn.manager.NetInterfaceManager; -import com.info.sn.network.HTTPInterface; -import com.info.sn.receiver.APKinstallReceiver; -import com.info.sn.receiver.BootReceiver; -import com.info.sn.utils.SPUtils; -import com.info.sn.utils.TimeUtils; -import com.info.sn.utils.Utils; +import com.uiui.sn.R; +import com.uiui.sn.bean.zuoye.BaseResponse; +import com.uiui.sn.manager.ControlManager; +import com.uiui.sn.manager.NetInterfaceManager; +import com.uiui.sn.network.HTTPInterface; +import com.uiui.sn.receiver.APKinstallReceiver; +import com.uiui.sn.receiver.BootReceiver; +import com.uiui.sn.utils.SPUtils; +import com.uiui.sn.utils.TimeUtils; +import com.uiui.sn.utils.Utils; import java.util.concurrent.TimeUnit; @@ -99,8 +98,9 @@ public class ManagerService extends Service implements NetworkUtils.OnNetworkSta public void onNext(Long aLong) { Log.e("TimeObserver", "onNext: " + aLong); Handler.getMain().postDelayed(() -> HTTPInterface.checkUpdate(ManagerService.this), 1234); - Handler.getMain().postDelayed(() -> HTTPInterface.checkUpdate(ManagerService.this, "com.jgyapp.market"), 3456); - Handler.getMain().postDelayed(() -> HTTPInterface.checkUpdate(ManagerService.this, "com.uiuios.updatetools"), 5678); + Handler.getMain().postDelayed(() -> HTTPInterface.checkUpdate(ManagerService.this, "com.uiui.appstore"), 3456); + Handler.getMain().postDelayed(() -> HTTPInterface.checkUpdate(ManagerService.this, "com.uiui.browser"), 5678); + Handler.getMain().postDelayed(() -> HTTPInterface.checkUpdate(ManagerService.this, "com.uiui.os"), 6789); } @Override @@ -491,15 +491,10 @@ public class ManagerService extends Service implements NetworkUtils.OnNetworkSta } IntentFilter filter = new IntentFilter(); filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); - filter.addAction(Intent.ACTION_BATTERY_CHANGED); - filter.addAction(Intent.ACTION_BATTERY_LOW); - filter.addAction(Intent.ACTION_BATTERY_OKAY); - filter.addAction(Intent.ACTION_POWER_CONNECTED); filter.addAction(Intent.ACTION_POWER_DISCONNECTED); registerReceiver(batteryReceiver, filter); } - private class BatteryReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { diff --git a/app/src/main/java/com/info/sn/service/RemoteService.java b/app/src/main/java/com/uiui/sn/service/RemoteService.java similarity index 88% rename from app/src/main/java/com/info/sn/service/RemoteService.java rename to app/src/main/java/com/uiui/sn/service/RemoteService.java index a36ec15..8395351 100644 --- a/app/src/main/java/com/info/sn/service/RemoteService.java +++ b/app/src/main/java/com/uiui/sn/service/RemoteService.java @@ -1,23 +1,18 @@ -package com.info.sn.service; +package com.uiui.sn.service; import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.os.RemoteException; import android.provider.Settings; -import android.text.TextUtils; import android.util.Log; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import com.google.gson.JsonObject; -import com.info.sn.IGetInfoInterface; -import com.info.sn.utils.JGYUtils; -import com.info.sn.utils.SPUtils; -import com.info.sn.utils.Utils; +import com.uiui.sn.IGetInfoInterface; +import com.uiui.sn.utils.JGYUtils; +import com.uiui.sn.utils.SPUtils; +import com.uiui.sn.utils.Utils; -import java.util.ArrayList; -import java.util.Arrays; import java.util.List; public class RemoteService extends Service { diff --git a/app/src/main/java/com/info/sn/service/StepService.java b/app/src/main/java/com/uiui/sn/service/StepService.java similarity index 97% rename from app/src/main/java/com/info/sn/service/StepService.java rename to app/src/main/java/com/uiui/sn/service/StepService.java index b7a8fe4..1047627 100644 --- a/app/src/main/java/com/info/sn/service/StepService.java +++ b/app/src/main/java/com/uiui/sn/service/StepService.java @@ -1,4 +1,4 @@ -package com.info.sn.service; +package com.uiui.sn.service; /** * 作者 mjsheng @@ -25,11 +25,11 @@ import androidx.annotation.Nullable; import com.alibaba.fastjson.JSONObject; import com.blankj.utilcode.util.NetworkUtils; -import com.info.sn.BuildConfig; -import com.info.sn.KeepAliveConnection; -import com.info.sn.utils.ServiceAliveUtils; -import com.info.sn.utils.Utils; -import com.info.sn.websocket.JWebSocketClient; +import com.uiui.sn.BuildConfig; +import com.uiui.sn.KeepAliveConnection; +import com.uiui.sn.utils.ServiceAliveUtils; +import com.uiui.sn.utils.Utils; +import com.uiui.sn.websocket.JWebSocketClient; import org.java_websocket.handshake.ServerHandshake; diff --git a/app/src/main/java/com/info/sn/utils/AmapUtils.java b/app/src/main/java/com/uiui/sn/utils/AmapUtils.java similarity index 99% rename from app/src/main/java/com/info/sn/utils/AmapUtils.java rename to app/src/main/java/com/uiui/sn/utils/AmapUtils.java index a370c1a..6157f41 100644 --- a/app/src/main/java/com/info/sn/utils/AmapUtils.java +++ b/app/src/main/java/com/uiui/sn/utils/AmapUtils.java @@ -1,7 +1,7 @@ /** * */ -package com.info.sn.utils; +package com.uiui.sn.utils; import android.content.Context; import android.content.pm.PackageInfo; diff --git a/app/src/main/java/com/info/sn/utils/ApkUtils.java b/app/src/main/java/com/uiui/sn/utils/ApkUtils.java similarity index 95% rename from app/src/main/java/com/info/sn/utils/ApkUtils.java rename to app/src/main/java/com/uiui/sn/utils/ApkUtils.java index d75fcae..8320eab 100644 --- a/app/src/main/java/com/info/sn/utils/ApkUtils.java +++ b/app/src/main/java/com/uiui/sn/utils/ApkUtils.java @@ -1,4 +1,4 @@ -package com.info.sn.utils; +package com.uiui.sn.utils; import android.annotation.SuppressLint; import android.app.Activity; @@ -25,9 +25,9 @@ import androidx.annotation.RequiresApi; import androidx.core.content.FileProvider; -import com.info.sn.BuildConfig; -import com.info.sn.R; -import com.info.sn.receiver.InstallResultReceiver; +import com.uiui.sn.BuildConfig; +import com.uiui.sn.R; +import com.uiui.sn.receiver.InstallResultReceiver; import java.io.BufferedReader; import java.io.DataOutputStream; @@ -54,6 +54,29 @@ import java.util.zip.ZipFile; public class ApkUtils { private static String TAG = ApkUtils.class.getSimpleName(); + /** + * 获取第三方应用 + * @param context + * @return + */ + public static List queryFilterAppList(Context context) { + PackageManager pm = context.getPackageManager(); + // 查询所有已经安装的应用程序 + List appInfos = pm.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);// GET_UNINSTALLED_PACKAGES代表已删除,但还有安装目录的 + List applicationInfos = new ArrayList<>(); + for (ApplicationInfo app : appInfos) { +// Log.e("queryFilterAppInfo", String.valueOf(app.flags)); +// Log.e("queryFilterAppInfo", String.valueOf((app.flags & mask))); + if ((app.flags & ApplicationInfo.FLAG_SYSTEM) == 1) { + //通过flag排除系统应用,会将电话、短信也排除掉 + } else { + applicationInfos.add(app.packageName); + Log.e("queryFilterAppInfo", app.packageName); + } + } + return applicationInfos; + } + public static synchronized boolean getRootAhth() { Process process = null; DataOutputStream os = null; @@ -113,7 +136,7 @@ public class ApkUtils { if (Build.VERSION.SDK_INT >= 24) { //判读版本是否在7.0以上 //参数1 上下文, 参数2 Provider主机地址 和配置文件中保持一致 参数3 共享的文件 Uri apkUri = - FileProvider.getUriForFile(context, "com.info.sn.fileprovider", uriFile); + FileProvider.getUriForFile(context, "com.uiui.sn.fileprovider", uriFile); //添加这一句表示对目标应用临时授权该Uri所代表的文件 intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.setDataAndType(apkUri, "application/vnd.android.package-archive"); @@ -126,6 +149,7 @@ public class ApkUtils { /** * 根据包名卸载应用 + * * @param packageName 包名 */ @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) @@ -352,7 +376,8 @@ public class ApkUtils { /** * 通过路径安装APK,兼容Android 9以上 - * @param context 上下文 + * + * @param context 上下文 * @param filePath apk文件路径 */ public static void installApp(Context context, String filePath) { @@ -583,7 +608,7 @@ public class ApkUtils { String type = "application/vnd.android.package-archive"; Uri uri; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - uri = FileProvider.getUriForFile(activity, "com.info.sn.fileprovider", newApkFile); + uri = FileProvider.getUriForFile(activity, "com.uiui.sn.fileprovider", newApkFile); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); } else { uri = Uri.fromFile(newApkFile); @@ -599,7 +624,7 @@ public class ApkUtils { String type = "application/vnd.android.package-archive"; Uri uri; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - uri = FileProvider.getUriForFile(context, "com.info.sn.fileprovider", newApkFile); + uri = FileProvider.getUriForFile(context, "com.uiui.sn.fileprovider", newApkFile); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); } else { uri = Uri.fromFile(newApkFile); @@ -725,18 +750,21 @@ public class ApkUtils { public static void writeAppPackageList(Context context, String result) { addShortcut(context);//开机之后添加图标到桌面 - List factoryAppList = new ArrayList() {{ + HashSet factoryAppList = new HashSet() {{ this.add("com.jiaoguanyi.appstore"); this.add("com.jiaoguanyi.store"); - this.add("com.info.sn"); + this.add("com.uiui.sn"); this.add("com.appstore.uiui"); - this.add("com.jgyapp.market"); + this.add("com.uiui.appstore"); this.add("com.android.uiuios"); this.add("com.uiuios.jgy1"); this.add("com.uiuios.jgy2"); this.add("com.tt.ttutils"); this.add("com.info.chat"); this.add("com.info.learning"); + this.add("com.uiui.browser"); + this.add("com.uiui.os"); + this.add("com.alarmclock.uiui"); }}; HashSet factoryAppSet = new HashSet<>(factoryAppList); if (!TextUtils.isEmpty(result)) { diff --git a/app/src/main/java/com/info/sn/utils/AppUpdateInfo.java b/app/src/main/java/com/uiui/sn/utils/AppUpdateInfo.java similarity index 96% rename from app/src/main/java/com/info/sn/utils/AppUpdateInfo.java rename to app/src/main/java/com/uiui/sn/utils/AppUpdateInfo.java index a9049e9..12e03fe 100644 --- a/app/src/main/java/com/info/sn/utils/AppUpdateInfo.java +++ b/app/src/main/java/com/uiui/sn/utils/AppUpdateInfo.java @@ -1,4 +1,4 @@ -package com.info.sn.utils; +package com.uiui.sn.utils; /** * Created by Administrator on 2017/1/10. diff --git a/app/src/main/java/com/info/sn/utils/AppsManagerUtils.java b/app/src/main/java/com/uiui/sn/utils/AppsManagerUtils.java similarity index 98% rename from app/src/main/java/com/info/sn/utils/AppsManagerUtils.java rename to app/src/main/java/com/uiui/sn/utils/AppsManagerUtils.java index ba550ae..782a12f 100644 --- a/app/src/main/java/com/info/sn/utils/AppsManagerUtils.java +++ b/app/src/main/java/com/uiui/sn/utils/AppsManagerUtils.java @@ -1,4 +1,4 @@ -package com.info.sn.utils; +package com.uiui.sn.utils; import android.content.Context; import android.content.Intent; @@ -8,7 +8,7 @@ import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; -import com.info.sn.bean.zuoye.LocalAppInfo; +import com.uiui.sn.bean.zuoye.LocalAppInfo; import java.io.File; import java.util.ArrayList; diff --git a/app/src/main/java/com/info/sn/utils/CXAESUtil.java b/app/src/main/java/com/uiui/sn/utils/CXAESUtil.java similarity index 99% rename from app/src/main/java/com/info/sn/utils/CXAESUtil.java rename to app/src/main/java/com/uiui/sn/utils/CXAESUtil.java index fea62d8..745d20a 100644 --- a/app/src/main/java/com/info/sn/utils/CXAESUtil.java +++ b/app/src/main/java/com/uiui/sn/utils/CXAESUtil.java @@ -1,4 +1,4 @@ -package com.info.sn.utils; +package com.uiui.sn.utils; import java.io.File; import java.io.FileInputStream; diff --git a/app/src/main/java/com/info/sn/utils/CacheUtils.java b/app/src/main/java/com/uiui/sn/utils/CacheUtils.java similarity index 99% rename from app/src/main/java/com/info/sn/utils/CacheUtils.java rename to app/src/main/java/com/uiui/sn/utils/CacheUtils.java index 91a4462..ae50cc1 100644 --- a/app/src/main/java/com/info/sn/utils/CacheUtils.java +++ b/app/src/main/java/com/uiui/sn/utils/CacheUtils.java @@ -1,4 +1,4 @@ -package com.info.sn.utils; +package com.uiui.sn.utils; import android.content.Context; diff --git a/app/src/main/java/com/info/sn/utils/CmdUtil.java b/app/src/main/java/com/uiui/sn/utils/CmdUtil.java similarity index 99% rename from app/src/main/java/com/info/sn/utils/CmdUtil.java rename to app/src/main/java/com/uiui/sn/utils/CmdUtil.java index 07e8cdd..d7d95a9 100644 --- a/app/src/main/java/com/info/sn/utils/CmdUtil.java +++ b/app/src/main/java/com/uiui/sn/utils/CmdUtil.java @@ -1,4 +1,4 @@ -package com.info.sn.utils; +package com.uiui.sn.utils; import android.text.TextUtils; import android.util.Log; diff --git a/app/src/main/java/com/info/sn/utils/FileUtils.java b/app/src/main/java/com/uiui/sn/utils/FileUtils.java similarity index 93% rename from app/src/main/java/com/info/sn/utils/FileUtils.java rename to app/src/main/java/com/uiui/sn/utils/FileUtils.java index a75be7c..73b5392 100644 --- a/app/src/main/java/com/info/sn/utils/FileUtils.java +++ b/app/src/main/java/com/uiui/sn/utils/FileUtils.java @@ -1,4 +1,4 @@ -package com.info.sn.utils; +package com.uiui.sn.utils; import android.content.Context; import android.os.Environment; @@ -71,7 +71,7 @@ public class FileUtils { } else { Aria.download(context) .load(url) //读取下载地址 - .setFilePath(PathUtils.getExternalDownloadsPath() + "/jgy/" + fileName) + .setFilePath(JGYUtils.getInstance().getDownLoadPath() + fileName) .ignoreFilePathOccupy() .setExtendField(jsonObject.toJSONString()) .create(); //启动下载} @@ -80,7 +80,7 @@ public class FileUtils { } else { Aria.download(context) .load(url) //读取下载地址 - .setFilePath(PathUtils.getExternalDownloadsPath() + "/jgy/" + fileName) + .setFilePath(JGYUtils.getInstance().getDownLoadPath() + fileName) .ignoreFilePathOccupy() .setExtendField(jsonObject.toJSONString()) .create(); //启动下载} diff --git a/app/src/main/java/com/info/sn/utils/ForegroundAppUtil.java b/app/src/main/java/com/uiui/sn/utils/ForegroundAppUtil.java similarity index 99% rename from app/src/main/java/com/info/sn/utils/ForegroundAppUtil.java rename to app/src/main/java/com/uiui/sn/utils/ForegroundAppUtil.java index 8362586..f79b3de 100644 --- a/app/src/main/java/com/info/sn/utils/ForegroundAppUtil.java +++ b/app/src/main/java/com/uiui/sn/utils/ForegroundAppUtil.java @@ -1,4 +1,4 @@ -package com.info.sn.utils; +package com.uiui.sn.utils; import android.app.ActivityManager; import android.app.usage.UsageStats; diff --git a/app/src/main/java/com/info/sn/utils/Hash.java b/app/src/main/java/com/uiui/sn/utils/Hash.java similarity index 96% rename from app/src/main/java/com/info/sn/utils/Hash.java rename to app/src/main/java/com/uiui/sn/utils/Hash.java index d380fa4..10269bb 100644 --- a/app/src/main/java/com/info/sn/utils/Hash.java +++ b/app/src/main/java/com/uiui/sn/utils/Hash.java @@ -1,4 +1,4 @@ -package com.info.sn.utils; +package com.uiui.sn.utils; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; diff --git a/app/src/main/java/com/info/sn/utils/JGYUtils.java b/app/src/main/java/com/uiui/sn/utils/JGYUtils.java similarity index 97% rename from app/src/main/java/com/info/sn/utils/JGYUtils.java rename to app/src/main/java/com/uiui/sn/utils/JGYUtils.java index 9701f69..08ba586 100644 --- a/app/src/main/java/com/info/sn/utils/JGYUtils.java +++ b/app/src/main/java/com/uiui/sn/utils/JGYUtils.java @@ -1,4 +1,4 @@ -package com.info.sn.utils; +package com.uiui.sn.utils; import android.annotation.SuppressLint; import android.app.ActivityManager; @@ -18,16 +18,19 @@ import android.net.NetworkInfo; import android.net.Uri; import android.os.BatteryManager; import android.os.Build; +import android.os.Environment; import android.os.PowerManager; import android.os.RemoteException; import android.provider.Settings; import android.text.TextUtils; import android.util.Log; -import com.alibaba.fastjson.JSONObject; -import com.info.sn.BuildConfig; -import com.info.sn.service.RemoteService; +import androidx.core.content.ContextCompat; +import com.alibaba.fastjson.JSONObject; +import com.uiui.sn.BuildConfig; + +import java.io.File; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; @@ -38,7 +41,6 @@ import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; -import java.util.function.Predicate; import static android.app.ActivityManager.RECENT_IGNORE_UNAVAILABLE; @@ -152,6 +154,10 @@ public class JGYUtils { } } + public String getDownLoadPath() { + String path = ContextCompat.getExternalFilesDirs(mContext, Environment.DIRECTORY_DOWNLOADS)[0].getAbsolutePath(); + return path + File.separator; + } /** * @param ids 需要管控的ID @@ -576,7 +582,7 @@ public class JGYUtils { return processName; } - public void setDefaultDesktop( String pkg, String className) { + public void setDefaultDesktop(String pkg, String className) { Intent intent = new Intent("setDefaultLauncher"); intent.putExtra("package", pkg); intent.putExtra("className", className); @@ -631,7 +637,7 @@ public class JGYUtils { mContext.sendBroadcast(intent); } - public ArrayList getHideList() { + public ArrayList getHideList() { String appString = (String) SPUtils.get(mContext, "Hide_APP_List", ""); Log.e(TAG, "Hide_APP_List: " + appString); if (TextUtils.isEmpty(appString)) { @@ -643,7 +649,7 @@ public class JGYUtils { private static final String UPDATE_HIDE_APP = "UPDATE_HIDE_APP"; - public void updateHideList() { + public void updateHideList() { Intent intent = new Intent(UPDATE_HIDE_APP); intent.putStringArrayListExtra("hide_app_list", getHideList()); // intent.setComponent(new ComponentName("com.jiaoguanyi.os","com.jiaoguanyi.os.view.MainActivity")); @@ -811,4 +817,10 @@ public class JGYUtils { } Log.e(TAG, "deleteOtherApp: " + "end"); } + + public boolean isScreenOn() { + PowerManager powerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); + //true为打开,false为关闭 + return powerManager.isInteractive(); + } } diff --git a/app/src/main/java/com/info/sn/utils/LaunchTools.java b/app/src/main/java/com/uiui/sn/utils/LaunchTools.java similarity index 99% rename from app/src/main/java/com/info/sn/utils/LaunchTools.java rename to app/src/main/java/com/uiui/sn/utils/LaunchTools.java index 13c5360..1ae159b 100644 --- a/app/src/main/java/com/info/sn/utils/LaunchTools.java +++ b/app/src/main/java/com/uiui/sn/utils/LaunchTools.java @@ -1,4 +1,4 @@ -package com.info.sn.utils; +package com.uiui.sn.utils; import android.annotation.SuppressLint; import android.content.ActivityNotFoundException; @@ -12,7 +12,7 @@ import android.text.TextUtils; import android.util.Log; -import com.info.sn.config.Scheme; +import com.uiui.sn.config.Scheme; import java.net.NetworkInterface; import java.security.MessageDigest; diff --git a/app/src/main/java/com/info/sn/utils/MD5Util.java b/app/src/main/java/com/uiui/sn/utils/MD5Util.java similarity index 99% rename from app/src/main/java/com/info/sn/utils/MD5Util.java rename to app/src/main/java/com/uiui/sn/utils/MD5Util.java index e37520c..734063f 100644 --- a/app/src/main/java/com/info/sn/utils/MD5Util.java +++ b/app/src/main/java/com/uiui/sn/utils/MD5Util.java @@ -1,4 +1,4 @@ -package com.info.sn.utils; +package com.uiui.sn.utils; import android.annotation.SuppressLint; diff --git a/app/src/main/java/com/info/sn/utils/SPUtils.java b/app/src/main/java/com/uiui/sn/utils/SPUtils.java similarity index 99% rename from app/src/main/java/com/info/sn/utils/SPUtils.java rename to app/src/main/java/com/uiui/sn/utils/SPUtils.java index 5a3cc51..d2301c7 100644 --- a/app/src/main/java/com/info/sn/utils/SPUtils.java +++ b/app/src/main/java/com/uiui/sn/utils/SPUtils.java @@ -1,4 +1,4 @@ -package com.info.sn.utils; +package com.uiui.sn.utils; import android.content.Context; import android.content.SharedPreferences; diff --git a/app/src/main/java/com/info/sn/utils/ServiceAliveUtils.java b/app/src/main/java/com/uiui/sn/utils/ServiceAliveUtils.java similarity index 96% rename from app/src/main/java/com/info/sn/utils/ServiceAliveUtils.java rename to app/src/main/java/com/uiui/sn/utils/ServiceAliveUtils.java index cd5f584..263fea5 100644 --- a/app/src/main/java/com/info/sn/utils/ServiceAliveUtils.java +++ b/app/src/main/java/com/uiui/sn/utils/ServiceAliveUtils.java @@ -1,4 +1,4 @@ -package com.info.sn.utils; +package com.uiui.sn.utils; import android.app.ActivityManager; import android.content.Context; diff --git a/app/src/main/java/com/info/sn/utils/StatusBarUtil.java b/app/src/main/java/com/uiui/sn/utils/StatusBarUtil.java similarity index 99% rename from app/src/main/java/com/info/sn/utils/StatusBarUtil.java rename to app/src/main/java/com/uiui/sn/utils/StatusBarUtil.java index c7311ab..b3ffdb0 100644 --- a/app/src/main/java/com/info/sn/utils/StatusBarUtil.java +++ b/app/src/main/java/com/uiui/sn/utils/StatusBarUtil.java @@ -1,4 +1,4 @@ -package com.info.sn.utils; +package com.uiui.sn.utils; import android.app.Activity; import android.content.Context; diff --git a/app/src/main/java/com/info/sn/utils/StorageUtils.java b/app/src/main/java/com/uiui/sn/utils/StorageUtils.java similarity index 99% rename from app/src/main/java/com/info/sn/utils/StorageUtils.java rename to app/src/main/java/com/uiui/sn/utils/StorageUtils.java index 8e91d2a..29f88e8 100644 --- a/app/src/main/java/com/info/sn/utils/StorageUtils.java +++ b/app/src/main/java/com/uiui/sn/utils/StorageUtils.java @@ -1,4 +1,4 @@ -package com.info.sn.utils; +package com.uiui.sn.utils; import android.content.Context; import android.os.Build; diff --git a/app/src/main/java/com/info/sn/utils/SystemUtils.java b/app/src/main/java/com/uiui/sn/utils/SystemUtils.java similarity index 96% rename from app/src/main/java/com/info/sn/utils/SystemUtils.java rename to app/src/main/java/com/uiui/sn/utils/SystemUtils.java index 84b02dc..d6aff0a 100644 --- a/app/src/main/java/com/info/sn/utils/SystemUtils.java +++ b/app/src/main/java/com/uiui/sn/utils/SystemUtils.java @@ -1,4 +1,4 @@ -package com.info.sn.utils; +package com.uiui.sn.utils; import android.app.ActivityManager; import android.content.Context; diff --git a/app/src/main/java/com/info/sn/utils/TimeUtils.java b/app/src/main/java/com/uiui/sn/utils/TimeUtils.java similarity index 99% rename from app/src/main/java/com/info/sn/utils/TimeUtils.java rename to app/src/main/java/com/uiui/sn/utils/TimeUtils.java index 6074159..3c0065b 100644 --- a/app/src/main/java/com/info/sn/utils/TimeUtils.java +++ b/app/src/main/java/com/uiui/sn/utils/TimeUtils.java @@ -1,15 +1,14 @@ -package com.info.sn.utils; +package com.uiui.sn.utils; import android.content.Context; import android.content.Intent; -import android.nfc.Tag; import android.os.SystemClock; import android.text.TextUtils; import android.util.Log; import androidx.annotation.NonNull; -import com.info.sn.service.ManagerService; +import com.uiui.sn.service.ManagerService; import java.net.DatagramPacket; import java.net.DatagramSocket; diff --git a/app/src/main/java/com/info/sn/utils/ToastUtil.java b/app/src/main/java/com/uiui/sn/utils/ToastUtil.java similarity index 93% rename from app/src/main/java/com/info/sn/utils/ToastUtil.java rename to app/src/main/java/com/uiui/sn/utils/ToastUtil.java index 48cd5c9..b83b633 100644 --- a/app/src/main/java/com/info/sn/utils/ToastUtil.java +++ b/app/src/main/java/com/uiui/sn/utils/ToastUtil.java @@ -1,4 +1,4 @@ -package com.info.sn.utils; +package com.uiui.sn.utils; import android.graphics.Color; import android.util.Log; @@ -6,8 +6,8 @@ import android.view.Gravity; import com.blankj.utilcode.util.ColorUtils; import com.blankj.utilcode.util.ToastUtils; -import com.info.sn.R; -import com.info.sn.manager.DeviceManager; +import com.uiui.sn.R; +import com.uiui.sn.manager.DeviceManager; public class ToastUtil { private static String TAG = ToastUtil.class.getSimpleName(); diff --git a/app/src/main/java/com/info/sn/utils/URLUtils.java b/app/src/main/java/com/uiui/sn/utils/URLUtils.java similarity index 98% rename from app/src/main/java/com/info/sn/utils/URLUtils.java rename to app/src/main/java/com/uiui/sn/utils/URLUtils.java index 6105ba5..dde1e9f 100644 --- a/app/src/main/java/com/info/sn/utils/URLUtils.java +++ b/app/src/main/java/com/uiui/sn/utils/URLUtils.java @@ -1,4 +1,4 @@ -package com.info.sn.utils; +package com.uiui.sn.utils; import android.content.Context; import android.os.Build; @@ -11,15 +11,11 @@ import androidx.annotation.RequiresApi; import java.io.IOException; import java.net.URI; -import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.concurrent.TimeUnit; -import java.util.function.Function; -import java.util.function.Predicate; import java.util.regex.Matcher; import java.util.regex.Pattern; -import java.util.stream.Collectors; import io.reactivex.Observable; import io.reactivex.ObservableEmitter; @@ -56,8 +52,8 @@ public class URLUtils { if (!TextUtils.isEmpty(oldwhiteList)) { URLList.addAll(Arrays.asList(oldwhiteList.split(","))); } - URLList.add("https://xdf.gankao.com"); - URLList.add("https://www.gankao.com"); +// URLList.add("https://xdf.gankao.com"); +// URLList.add("https://www.gankao.com"); if (!TextUtils.isEmpty(oldHomePage) && !URLList.contains(oldHomePage)) { URLList.add(oldHomePage); } diff --git a/app/src/main/java/com/info/sn/utils/Utils.java b/app/src/main/java/com/uiui/sn/utils/Utils.java similarity index 96% rename from app/src/main/java/com/info/sn/utils/Utils.java rename to app/src/main/java/com/uiui/sn/utils/Utils.java index 981d4e8..b425fe3 100644 --- a/app/src/main/java/com/info/sn/utils/Utils.java +++ b/app/src/main/java/com/uiui/sn/utils/Utils.java @@ -1,9 +1,8 @@ -package com.info.sn.utils; +package com.uiui.sn.utils; import android.annotation.SuppressLint; import android.app.ActivityManager; import android.app.admin.DevicePolicyManager; -import android.bluetooth.BluetoothAdapter; import android.content.ActivityNotFoundException; import android.content.ComponentName; import android.content.Context; @@ -55,12 +54,11 @@ import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.QRCodeWriter; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; -import com.info.sn.R; -import com.info.sn.Statistics.AppInformation; -import com.info.sn.Statistics.StatisticsInfo; -import com.info.sn.bean.zuoye.AppUsed; -import com.info.sn.bean.zuoye.SystemSettings; -import com.info.sn.manager.DeviceManager; +import com.uiui.sn.BuildConfig; +import com.uiui.sn.R; +import com.uiui.sn.Statistics.AppInformation; +import com.uiui.sn.Statistics.StatisticsInfo; +import com.uiui.sn.bean.zuoye.AppUsed; import java.io.BufferedReader; import java.io.File; @@ -86,7 +84,6 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.function.Predicate; import java.util.regex.Pattern; import static android.content.Context.WIFI_SERVICE; @@ -760,7 +757,7 @@ public class Utils { for (int y = 0; y < heightPix; y++) { for (int x = 0; x < widthPix; x++) { if (bitMatrix.get(x, y)) { - pixels[y * widthPix + x] = 0xff000000; + pixels[y * widthPix + x] = 0xff0480ff; } else { pixels[y * widthPix + x] = 0xffffffff; } @@ -1184,7 +1181,7 @@ public class Utils { Log.e(TAG, "getHardware: storage = " + storage); double use_space = getUse_space(context); Log.e(TAG, "getHardware: use_space = " + use_space); - long wifi_time = (long) com.info.sn.utils.SPUtils.get(context, "wifi_last_connect_time", 0L) / 1000; + long wifi_time = (long) com.uiui.sn.utils.SPUtils.get(context, "wifi_last_connect_time", 0L) / 1000; Log.e(TAG, "getHardware: wifi_time" + wifi_time); int CPU = getNumCores(); JSONObject jsonObject = new JSONObject(); @@ -1232,5 +1229,36 @@ public class Utils { return jsonString; } + public static void killBackgroundApp(Context context) { + List pkgList = ApkUtils.queryFilterAppList(context); + for (String pkg : pkgList) { + if (runningAppWhitelist.contains(pkg)) continue; + killBackgroundProcesses(context, pkg); + } + } + public static List runningAppWhitelist = new ArrayList() {{ + this.add("com.android.launcher3"); + this.add(BuildConfig.APPLICATION_ID); + this.add("com.uiui.appstore"); + this.add("com.uiui.os"); + this.add("com.uiui.browser"); + }}; + + + public static void killBackgroundProcesses(Context context, String packageName) { + ActivityManager activityManager; + try { + activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); + activityManager.killBackgroundProcesses(packageName); + Method forceStopPackage = activityManager.getClass() + .getDeclaredMethod("forceStopPackage", String.class); +// Log.e(TAG, "killBackgroundProcesses: " + packageName); + forceStopPackage.setAccessible(true); + forceStopPackage.invoke(activityManager, packageName); + } catch (Exception e) { + Log.e(TAG, "killBackgroundProcesses: " + e.getMessage()); + e.printStackTrace(); + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/info/sn/view/FlowRadioGroup.java b/app/src/main/java/com/uiui/sn/view/FlowRadioGroup.java similarity index 98% rename from app/src/main/java/com/info/sn/view/FlowRadioGroup.java rename to app/src/main/java/com/uiui/sn/view/FlowRadioGroup.java index f42b357..7c499f7 100644 --- a/app/src/main/java/com/info/sn/view/FlowRadioGroup.java +++ b/app/src/main/java/com/uiui/sn/view/FlowRadioGroup.java @@ -1,4 +1,4 @@ -package com.info.sn.view; +package com.uiui.sn.view; import android.content.Context; import android.util.AttributeSet; diff --git a/app/src/main/java/com/info/sn/websocket/JWebSocketClient.java b/app/src/main/java/com/uiui/sn/websocket/JWebSocketClient.java similarity index 96% rename from app/src/main/java/com/info/sn/websocket/JWebSocketClient.java rename to app/src/main/java/com/uiui/sn/websocket/JWebSocketClient.java index 5b7e72f..cbbc9a9 100644 --- a/app/src/main/java/com/info/sn/websocket/JWebSocketClient.java +++ b/app/src/main/java/com/uiui/sn/websocket/JWebSocketClient.java @@ -1,4 +1,4 @@ -package com.info.sn.websocket; +package com.uiui.sn.websocket; import android.util.Log; diff --git a/app/src/main/res/drawable-hdpi/applet_qrcode.png b/app/src/main/res/drawable-hdpi/applet_qrcode.png index 672ffa528441d0db8b7874bf3ed21f7bbfe8e020..b9cebba3dca8b21edf3e165a0b0adb20cd1f6eff 100644 GIT binary patch literal 63856 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

$Iir-M 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 literal 28017 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 AA^-pY diff --git a/app/src/main/res/drawable-hdpi/bind_applet.png b/app/src/main/res/drawable-hdpi/bind_applet.png new file mode 100644 index 0000000000000000000000000000000000000000..d9c173087610e875c8d5ebe3d8bb35268847dd49 GIT binary patch literal 43891 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 VJYG&e9PR$i$>I{Bow2F5e*tYj*wFw0 literal 4162 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 diff --git a/app/src/main/res/drawable/qrcode_shape.xml b/app/src/main/res/drawable/qrcode_shape.xml new file mode 100644 index 0000000..4368d20 --- /dev/null +++ b/app/src/main/res/drawable/qrcode_shape.xml @@ -0,0 +1,18 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/activity_main.xml b/app/src/main/res/layout-land/activity_main.xml index c1740c8..b8fe08d 100644 --- a/app/src/main/res/layout-land/activity_main.xml +++ b/app/src/main/res/layout-land/activity_main.xml @@ -11,7 +11,7 @@ @@ -46,7 +46,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_horizontal" - android:text="教管壹 云管控·AI学习机" + android:text="我的设备" android:textColor="#4b4b4b" android:textSize="24sp" android:textStyle="bold" @@ -54,564 +54,98 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -