瀏覽代碼

1.将部分livedata转为flow方便在activity不可见时调用。

20241218TB223FC(测试jar包)
wangwanlei 11 月之前
父節點
當前提交
972ae4cd6f

+ 24
- 20
app/src/main/java/com/xhly/manageapp/ui/login/activity/LoginActivity.kt 查看文件

12
 import android.widget.EditText
12
 import android.widget.EditText
13
 import android.widget.TextView
13
 import android.widget.TextView
14
 import androidx.activity.addCallback
14
 import androidx.activity.addCallback
15
+import androidx.lifecycle.lifecycleScope
15
 import androidx.work.PeriodicWorkRequest
16
 import androidx.work.PeriodicWorkRequest
16
 import androidx.work.WorkManager
17
 import androidx.work.WorkManager
17
 import com.kongzue.dialogx.DialogX
18
 import com.kongzue.dialogx.DialogX
42
 import com.xhly.manageapp.utils.CurrentAppSharedPreferencesUtils
43
 import com.xhly.manageapp.utils.CurrentAppSharedPreferencesUtils
43
 import com.xhly.manageapp.utils.StrategyUtils
44
 import com.xhly.manageapp.utils.StrategyUtils
44
 import com.xhly.manageapp.workmanager.TimingWorker
45
 import com.xhly.manageapp.workmanager.TimingWorker
46
+import kotlinx.coroutines.launch
45
 import java.util.concurrent.TimeUnit
47
 import java.util.concurrent.TimeUnit
46
 
48
 
47
 class LoginActivity : BaseActivity<LoginViewModel, ActivityLoginBinding>() {
49
 class LoginActivity : BaseActivity<LoginViewModel, ActivityLoginBinding>() {
139
                 showSettingDialog()
141
                 showSettingDialog()
140
             }
142
             }
141
         }
143
         }
142
-        viewModel.logResultData.observe(this){
143
-            if (it.enableFlag){
144
-                when(it.pushType){
145
-                    2->{
146
-                        spUtils.setParam(Const.DISABLEPAD, false)
147
-                        useTimeStrategy()
148
-                    }
149
-                    3->{
150
-                        spUtils.setParam(Const.DISABLEPAD, true)
151
-                        useTimeStrategy()
152
-                    }
153
-                    5->{
154
-                        ManageApplication.rebootDevice()
155
-                    }
156
-                    6->{
157
-                        ManageApplication.launchFactoryReset()
158
-                    }
159
-                    7->{
160
-                        currentSpUtils.setParam(Const.EXIT_CONTROL,true)
161
-                        StrategyUtils.releaseControl(this)
144
+        lifecycleScope.launch {
145
+            viewModel.logResultData.collect{
146
+                if (it.enableFlag){
147
+                    when(it.pushType){
148
+                        2->{
149
+                            spUtils.setParam(Const.DISABLEPAD, false)
150
+                            useTimeStrategy()
151
+                        }
152
+                        3->{
153
+                            spUtils.setParam(Const.DISABLEPAD, true)
154
+                            useTimeStrategy()
155
+                        }
156
+                        5->{
157
+                            ManageApplication.rebootDevice()
158
+                        }
159
+                        6->{
160
+                            ManageApplication.launchFactoryReset()
161
+                        }
162
+                        7->{
163
+                            currentSpUtils.setParam(Const.EXIT_CONTROL,true)
164
+                            StrategyUtils.releaseControl(this@LoginActivity)
165
+                        }
162
                     }
166
                     }
163
                 }
167
                 }
164
             }
168
             }

+ 235
- 184
app/src/main/java/com/xhly/manageapp/ui/main/activity/MainActivity.kt 查看文件

26
 import android.widget.TextView
26
 import android.widget.TextView
27
 import android.widget.Toast
27
 import android.widget.Toast
28
 import androidx.activity.addCallback
28
 import androidx.activity.addCallback
29
+import androidx.lifecycle.Lifecycle
30
+import androidx.lifecycle.LifecycleRegistry
29
 import androidx.lifecycle.lifecycleScope
31
 import androidx.lifecycle.lifecycleScope
32
+import androidx.lifecycle.viewModelScope
30
 import androidx.recyclerview.widget.GridLayoutManager
33
 import androidx.recyclerview.widget.GridLayoutManager
31
 import androidx.work.PeriodicWorkRequest
34
 import androidx.work.PeriodicWorkRequest
32
 import androidx.work.WorkManager
35
 import androidx.work.WorkManager
85
 import com.xhly.manageapp.utils.StrategyUtils
88
 import com.xhly.manageapp.utils.StrategyUtils
86
 import com.xhly.manageapp.workmanager.TimingWorker
89
 import com.xhly.manageapp.workmanager.TimingWorker
87
 import kotlinx.coroutines.Dispatchers
90
 import kotlinx.coroutines.Dispatchers
91
+import kotlinx.coroutines.flow.collect
88
 import kotlinx.coroutines.launch
92
 import kotlinx.coroutines.launch
89
 import kotlinx.coroutines.withContext
93
 import kotlinx.coroutines.withContext
90
 import java.io.File
94
 import java.io.File
177
           startActivity(permissionIntent)*/
181
           startActivity(permissionIntent)*/
178
         // csdkManagerUtils.csdkManager.enableAccessibility("com.xhly.manageapp","com.xhly.manageapp.service.TestService",true)
182
         // csdkManagerUtils.csdkManager.enableAccessibility("com.xhly.manageapp","com.xhly.manageapp.service.TestService",true)
179
 
183
 
180
-        viewModel.listAppData.observe(this) { modelList ->
181
-            //存储商店应用包名到本地,并且存储商店应用列表数据到本地集合
182
-            val appNameList = arrayListOf<String>()
183
-            val whiteList = arrayListOf<String>()
184
-            modelList.forEach {
185
-                appNameList.add(it.appPackage)
186
-                if (it.whited == 1) {
187
-                    whiteList.add(it.appPackage)
188
-                }
189
-            }
190
-            ManageApplication.addAppWhiteRule(whiteList)
191
-            spUtils.saveJson(Const.APPSTOREDATAKEY,modelList)
192
-            //获得应用集合,必装应用和推荐应用,再加上预装应用(预装应用直接隐藏),其余应用需要静默卸载,必装应用需要进行静默下载和安装。安装应用从forceapp接口获取
193
-            val appList = AppUtils.GetAppList(this)
194
-            val firstAppList = arrayListOf<String>()
195
-            try {
196
-                //获得预装应用的包名
197
-                val currentList =
198
-                    currentSpUtils.getFromJson(
199
-                        Const.FIRSTAPPLIST,
200
-                        ArrayList<String>().javaClass
201
-                    ) as ArrayList<String>
202
-                firstAppList.addAll(currentList)
203
-            } catch (e: Exception) {
204
-                LogShow("冻结失败" + e.toString())
205
-            }
206
-            appList.forEach { app ->
207
-                unInstallAppList.clear()
208
-                val filter = modelList.filter { it.appPackage.equals(app.packageName) }
209
-                val appInfos = firstAppList.filter { app.packageName.equals(it) }
210
-                //接口列表以及初始化列表中不存在则将应用冻结或者卸载,目前是卸载
211
-                LogShow("${app.name},被冻结" + (filter.isEmpty() && appInfos.isEmpty()))
212
-                if (filter.isEmpty() && appInfos.isEmpty()) {
213
-                    //ManageApplication.setPackageEnabled(app.packageName, (filter.isNotEmpty()))
214
-                    unInstallAppList.add(app)
215
-                    ManageApplication.uninstallPackage(app.packageName)
216
-                }
217
-            }
218
-        }
219
-        viewModel.forceListAppData.observe(this) { modelList ->
220
-            //获得必装应用,未安装或者版本较低则更新,先删除目录中的文件
221
-            val rxPermissions = RxPermissions(this)
222
-            rxPermissions.request(Manifest.permission.REQUEST_INSTALL_PACKAGES)
223
-                .subscribe { granted ->
224
-                    if (granted || ModelNameUtils.IS_LianxX505f()) {
225
-                        // 权限已授予,执行安装操作
226
-                        val appList = AppUtils.GetAppList(this)
227
-                        getExternalFilesDir(null)?.let {
228
-                            FileUtils.deleteCurrentFlie(it)
229
-                        }
230
-                        val file = getExternalFilesDir(null)
231
-                        modelList.forEach { app ->
232
-                            try {
233
-                                //获得已安装的应用判断版本,未安装的则直接静默安装。
234
-                                val filter =
235
-                                    appList.filter { it.packageName.equals(app.appPackage) }
236
-                                //列表中不存在,或者版本较低则更新
237
-                                val apkPath = app.apkPath
238
-                                val appName = app.appName
239
-                                if (filter.isNotEmpty()) {
240
-                                    val currentApp = filter[0]
241
-                                    if (app.versionNum > currentApp.versionNum) {
242
-                                        //版本低则更新安装。
243
-                                        //AppDownLoadUtils.addToDownloadQueue(apkPath, appName,app.appPackage)
244
-                                        DownLoadUtils.addDownload(apkPath,app.appPackage,File(file.toString(), "$appName.apk").toString(),app.appPackage)
245
-                                    }
246
-                                } else {
247
-                                    //不存在,直接下载安装。
248
-                                    //AppDownLoadUtils.addToDownloadQueue(apkPath, appName,app.appPackage)
249
-                                    DownLoadUtils.addDownload(apkPath,app.appPackage,File(file.toString(), "$appName.apk").toString(),app.appPackage)
250
-                                }
251
-                            } catch (e: Exception) {
252
-                                LogShow("问题" + e.toString())
253
-                            }
254
-                        }
255
-                    } else {
256
-                        // 用户拒绝了安装权限,处理相应逻辑
257
-                        viewModel.getAppList()
258
-                    }
259
-
260
-                }
261
-        }
262
-
263
-        viewModel.strategyData.observe(this) {
264
-            spUtils.saveJson(Const.STRATEGYBEANKEY, it)
265
-            StrategyUtils.setStrategy(it)
266
-            useTimeStrategy()
267
-            updateStrategyFlag = true
268
-            if (updateTimeFlag) {
269
-                showSucessToast()
270
-            }
271
-        }
272
-        viewModel.appStrategyData.observe(this) {
273
-            //存储app时间策略
274
-            spUtils.saveJson(Const.APPSTRATEGYBEANKEY, it)
275
-            updateTimeFlag = true
276
-            if (updateStrategyFlag) {
277
-                showSucessToast()
278
-            }
279
-        }
280
-        viewModel.padInfoData.observe(this) {
281
-            //存储信息上传时间
282
-            if (it) {
283
-                spUtils.setParam(Const.PADINFOTIMEKEY, System.currentTimeMillis())
284
-            }
285
-        }
286
-        viewModel.loginOutData.observe(this) {
184
+        viewModel.pwdResultData.observe(this) {
287
             if (it) {
185
             if (it) {
288
-                loginOut()
186
+                unBindBlock()
289
             } else {
187
             } else {
290
                 Toast(getString(R.string.codeerror))
188
                 Toast(getString(R.string.codeerror))
291
             }
189
             }
292
         }
190
         }
293
-        viewModel.updateInfoData.observe(this) {
294
-            //成功则保存不在提交
295
-            if (it) {
296
-                spUtils.setParam(Const.PADUPDATETIMEKEY, System.currentTimeMillis())
297
-            }
298
-        }
299
-        viewModel.schoolSetData.observe(this) {
300
-            spUtils.saveJson(Const.SCHOOLSETDEVICE, it)
301
-            initSchoolSet(it)
302
-            mBinding.rv.visibility=View.VISIBLE
303
-            updateAppRv()
304
-        }
191
+
305
         viewModel.wallpaperData.observe(this) {
192
         viewModel.wallpaperData.observe(this) {
306
             if (!it.hpath.isNullOrBlank()) {
193
             if (!it.hpath.isNullOrBlank()) {
307
                 Glide.with(this).load(Const.URL1 + it.hpath).placeholder(R.drawable.main_bg)
194
                 Glide.with(this).load(Const.URL1 + it.hpath).placeholder(R.drawable.main_bg)
333
                     })
220
                     })
334
             }
221
             }
335
         }
222
         }
336
-        viewModel.netWhiteListData.observe(this) {
337
-            StrategyUtils.setNetWhiteList(it)
338
-        }
339
-        viewModel.pwdResultData.observe(this) {
340
-            if (it) {
341
-                unBindBlock()
342
-            } else {
343
-                Toast(getString(R.string.codeerror))
344
-            }
345
-        }
223
+
224
+
346
         viewModel.lockResultData.observe(this) {
225
         viewModel.lockResultData.observe(this) {
347
             if (it) {
226
             if (it) {
348
                 spUtils.setParam(Const.DISABLEPAD, true)
227
                 spUtils.setParam(Const.DISABLEPAD, true)
356
                 ManageApplication.launchFactoryReset()
235
                 ManageApplication.launchFactoryReset()
357
             }
236
             }
358
         }
237
         }
359
-        viewModel.logResultData.observe(this) {
360
-            if (it.enableFlag) {
361
-                when (it.pushType) {
362
-                    2 -> {
363
-                        spUtils.setParam(Const.DISABLEPAD, false)
364
-                        useTimeStrategy()
365
-                    }
366
 
238
 
367
-                    3 -> {
368
-                        val appList = AppUtils.GetAppList(this)
369
-                        StrategyUtils.clearMemory(this, appList)
370
-                        spUtils.setParam(Const.DISABLEPAD, true)
371
-                        startIntentActivity(MainActivity().javaClass)
239
+        viewModel.viewModelScope.launch {
240
+            //在这里执行获得策略的操作,用来处理在后台时的数据处理。
241
+            viewModel.listAppData.collect{ modelList ->
242
+                //存储商店应用包名到本地,并且存储商店应用列表数据到本地集合
243
+                val appNameList = arrayListOf<String>()
244
+                val whiteList = arrayListOf<String>()
245
+                modelList.forEach {
246
+                    appNameList.add(it.appPackage)
247
+                    if (it.whited == 1) {
248
+                        whiteList.add(it.appPackage)
372
                     }
249
                     }
373
-
374
-                    4 -> {
375
-                        //请求接口更新策略
376
-                        updateAllStrategy()
250
+                }
251
+                ManageApplication.addAppWhiteRule(whiteList)
252
+                spUtils.saveJson(Const.APPSTOREDATAKEY,modelList)
253
+                //获得应用集合,必装应用和推荐应用,再加上预装应用(预装应用直接隐藏),其余应用需要静默卸载,必装应用需要进行静默下载和安装。安装应用从forceapp接口获取
254
+                val appList = AppUtils.GetAppList(this@MainActivity)
255
+                val firstAppList = arrayListOf<String>()
256
+                try {
257
+                    //获得预装应用的包名
258
+                    val currentList =
259
+                        currentSpUtils.getFromJson(
260
+                            Const.FIRSTAPPLIST,
261
+                            ArrayList<String>().javaClass
262
+                        ) as ArrayList<String>
263
+                    firstAppList.addAll(currentList)
264
+                } catch (e: Exception) {
265
+                    LogShow("冻结失败" + e.toString())
266
+                }
267
+                appList.forEach { app ->
268
+                    unInstallAppList.clear()
269
+                    val filter = modelList.filter { it.appPackage.equals(app.packageName) }
270
+                    val appInfos = firstAppList.filter { app.packageName.equals(it) }
271
+                    //接口列表以及初始化列表中不存在则将应用冻结或者卸载,目前是卸载
272
+                    LogShow("${app.name},被冻结" + (filter.isEmpty() && appInfos.isEmpty()))
273
+                    if (filter.isEmpty() && appInfos.isEmpty()) {
274
+                        //ManageApplication.setPackageEnabled(app.packageName, (filter.isNotEmpty()))
275
+                        unInstallAppList.add(app)
276
+                        ManageApplication.uninstallPackage(app.packageName)
377
                     }
277
                     }
278
+                }
279
+            }
280
+        }
378
 
281
 
379
-                    5 -> {
380
-                        ManageApplication.rebootDevice()
381
-                    }
282
+        viewModel.viewModelScope.launch {
283
+            viewModel.forceListAppData.collect { modelList ->
284
+                //获得必装应用,未安装或者版本较低则更新,先删除目录中的文件
285
+                val rxPermissions = RxPermissions(this@MainActivity)
286
+                rxPermissions.request(Manifest.permission.REQUEST_INSTALL_PACKAGES)
287
+                    .subscribe { granted ->
288
+                        if (granted || ModelNameUtils.IS_LianxX505f()) {
289
+                            // 权限已授予,执行安装操作
290
+                            val appList = AppUtils.GetAppList(this@MainActivity)
291
+                            getExternalFilesDir(null)?.let {
292
+                                FileUtils.deleteCurrentFlie(it)
293
+                            }
294
+                            val file = getExternalFilesDir(null)
295
+                            modelList.forEach { app ->
296
+                                try {
297
+                                    //获得已安装的应用判断版本,未安装的则直接静默安装。
298
+                                    val filter =
299
+                                        appList.filter { it.packageName.equals(app.appPackage) }
300
+                                    //列表中不存在,或者版本较低则更新
301
+                                    val apkPath = app.apkPath
302
+                                    val appName = app.appName
303
+                                    if (filter.isNotEmpty()) {
304
+                                        val currentApp = filter[0]
305
+                                        if (app.versionNum > currentApp.versionNum) {
306
+                                            //版本低则更新安装。
307
+                                            //AppDownLoadUtils.addToDownloadQueue(apkPath, appName,app.appPackage)
308
+                                            DownLoadUtils.addDownload(apkPath,app.appPackage,File(file.toString(), "$appName.apk").toString(),app.appPackage)
309
+                                        }
310
+                                    } else {
311
+                                        //不存在,直接下载安装。
312
+                                        //AppDownLoadUtils.addToDownloadQueue(apkPath, appName,app.appPackage)
313
+                                        DownLoadUtils.addDownload(apkPath,app.appPackage,File(file.toString(), "$appName.apk").toString(),app.appPackage)
314
+                                    }
315
+                                } catch (e: Exception) {
316
+                                    LogShow("问题" + e.toString())
317
+                                }
318
+                            }
319
+                        } else {
320
+                            // 用户拒绝了安装权限,处理相应逻辑
321
+                            viewModel.getAppList()
322
+                        }
382
 
323
 
383
-                    6 -> {
384
-                        loginOutSucess()
385
-                        ManageApplication.launchFactoryReset()
386
                     }
324
                     }
325
+            }
387
 
326
 
388
-                    7 -> {
389
-                        currentSpUtils.setParam(Const.EXIT_CONTROL, true)
390
-                        StrategyUtils.releaseControl(this)
391
-                    }
327
+        }
328
+
329
+        viewModel.viewModelScope.launch {
330
+            viewModel.strategyData.collect {
331
+                spUtils.saveJson(Const.STRATEGYBEANKEY, it)
332
+                StrategyUtils.setStrategy(it)
333
+                useTimeStrategy()
334
+                updateStrategyFlag = true
335
+                if (updateTimeFlag) {
336
+                    showSucessToast()
337
+                }
338
+            }
339
+        }
340
+
341
+        viewModel.viewModelScope.launch {
342
+            viewModel.appStrategyData.collect {
343
+                //存储app时间策略
344
+                spUtils.saveJson(Const.APPSTRATEGYBEANKEY, it)
345
+                updateTimeFlag = true
346
+                if (updateStrategyFlag) {
347
+                    showSucessToast()
348
+                }
349
+            }
350
+        }
351
+
352
+        viewModel.viewModelScope.launch {
353
+            viewModel.padInfoData.collect {
354
+                //存储信息上传时间
355
+                if (it) {
356
+                    spUtils.setParam(Const.PADINFOTIMEKEY, System.currentTimeMillis())
357
+                }
358
+            }
359
+        }
360
+
361
+        viewModel.viewModelScope.launch {
362
+            viewModel.loginOutData.collect {
363
+                if (it) {
364
+                    loginOut()
365
+                } else {
366
+                    Toast(getString(R.string.codeerror))
367
+                }
368
+            }
369
+        }
370
+
371
+        viewModel.viewModelScope.launch {
372
+            viewModel.updateInfoData.collect {
373
+                //成功则保存不在提交
374
+                if (it) {
375
+                    spUtils.setParam(Const.PADUPDATETIMEKEY, System.currentTimeMillis())
376
+                }
377
+            }
378
+        }
379
+
380
+        viewModel.viewModelScope.launch {
381
+
382
+            viewModel.schoolSetData.collect {
383
+                spUtils.saveJson(Const.SCHOOLSETDEVICE, it)
384
+                initSchoolSet(it)
385
+                mBinding.rv.visibility=View.VISIBLE
386
+                updateAppRv()
387
+            }
388
+        }
392
 
389
 
393
-                    8 -> {
394
-                        loginOut()
390
+        viewModel.viewModelScope.launch {
391
+
392
+            viewModel.netWhiteListData.collect {
393
+                StrategyUtils.setNetWhiteList(it)
394
+            }
395
+
396
+        }
397
+
398
+
399
+        viewModel.viewModelScope.launch {
400
+
401
+            viewModel.logResultData.collect {
402
+                if (it.enableFlag) {
403
+                    when (it.pushType) {
404
+                        2 -> {
405
+                            spUtils.setParam(Const.DISABLEPAD, false)
406
+                            useTimeStrategy()
407
+                        }
408
+
409
+                        3 -> {
410
+                            val appList = AppUtils.GetAppList(this@MainActivity)
411
+                            StrategyUtils.clearMemory(this@MainActivity, appList)
412
+                            spUtils.setParam(Const.DISABLEPAD, true)
413
+                            startIntentActivity(MainActivity().javaClass)
414
+                        }
415
+
416
+                        4 -> {
417
+                            //请求接口更新策略
418
+                            updateAllStrategy()
419
+                        }
420
+
421
+                        5 -> {
422
+                            ManageApplication.rebootDevice()
423
+                        }
424
+
425
+                        6 -> {
426
+                            loginOutSucess()
427
+                            ManageApplication.launchFactoryReset()
428
+                        }
429
+
430
+                        7 -> {
431
+                            currentSpUtils.setParam(Const.EXIT_CONTROL, true)
432
+                            StrategyUtils.releaseControl(this@MainActivity)
433
+                        }
434
+
435
+                        8 -> {
436
+                            loginOut()
437
+                        }
395
                     }
438
                     }
396
                 }
439
                 }
397
             }
440
             }
398
         }
441
         }
399
-        viewModel.logEventData.observe(this) {
400
-            when (it.logEventType) {
401
-                EventLog.ACCOUNTQUITEVENT -> {
402
-                    loginOutSucess()
442
+
443
+        viewModel.viewModelScope.launch {
444
+            viewModel.logEventData.collect {
445
+                when (it.logEventType) {
446
+                    EventLog.ACCOUNTQUITEVENT -> {
447
+                        loginOutSucess()
448
+                    }
403
                 }
449
                 }
404
             }
450
             }
405
         }
451
         }
406
-        viewModel.autoAppData.observe(this){
407
-            //连接不为空,并且应用已安装则跳转应用
408
-            it.authUrl="com.xhkjedu.xh_control_browser.MainActivity"
409
-            it.appPackage="com.xhkjedu.xh_control_browser"
410
-            LogShow("锁定了吧"+mainLockFlag)
411
-            if (!mainLockFlag){
412
-                if (it.authUrl!=null&&AppUtils.isAppInstalled(this,it.appPackage)){
413
-                    spUtils.saveJson(Const.AUTOAPPKEY,it)
414
-                    startAutoApp(it)
415
-                }else{
416
-                    try {
417
-                        val autoAppBean = spUtils.getFromJson(Const.AUTOAPPKEY, AutoAppBean().javaClass) as AutoAppBean
418
-                        if (autoAppBean.authUrl!=null&&AppUtils.isAppInstalled(this,autoAppBean.appPackage)&&!it.netSucessFlag){
419
-                            startAutoApp(autoAppBean)
420
-                        }else{
452
+
453
+        viewModel.viewModelScope.launch {
454
+            viewModel.autoAppData.collect{
455
+                //连接不为空,并且应用已安装则跳转应用
456
+                /*  it.authUrl="com.xhkjedu.xh_control_browser.MainActivity"
457
+                  it.appPackage="com.xhkjedu.xh_control_browser"*/
458
+                LogShow("锁定了吧"+mainLockFlag)
459
+                if (!mainLockFlag){
460
+                    if (it.authUrl!=null&&AppUtils.isAppInstalled(this@MainActivity,it.appPackage)){
461
+                        spUtils.saveJson(Const.AUTOAPPKEY,it)
462
+                        startAutoApp(it)
463
+                    }else{
464
+                        try {
465
+                            val autoAppBean = spUtils.getFromJson(Const.AUTOAPPKEY, AutoAppBean().javaClass) as AutoAppBean
466
+                            if (autoAppBean.authUrl!=null&&AppUtils.isAppInstalled(this@MainActivity,autoAppBean.appPackage)&&!it.netSucessFlag){
467
+                                startAutoApp(autoAppBean)
468
+                            }else{
469
+                                canClickFlag=true
470
+                            }
471
+                        }catch (e:Exception){
421
                             canClickFlag=true
472
                             canClickFlag=true
422
                         }
473
                         }
423
-                    }catch (e:Exception){
424
-                        canClickFlag=true
425
                     }
474
                     }
475
+                }else{
476
+                    autoAppFlag=false
477
+                    startIntentActivity(MainActivity().javaClass)
426
                 }
478
                 }
427
-            }else{
428
-                autoAppFlag=false
429
-                startIntentActivity(MainActivity().javaClass)
430
             }
479
             }
431
         }
480
         }
432
-
433
         getLocation()
481
         getLocation()
434
         startWorkManager()
482
         startWorkManager()
435
         lastTimeLong=System.currentTimeMillis()
483
         lastTimeLong=System.currentTimeMillis()
1195
             pushBean.sn =it
1243
             pushBean.sn =it
1196
         }
1244
         }
1197
         viewModel.postLogPushAdd(pushBean)
1245
         viewModel.postLogPushAdd(pushBean)
1198
-        startIntentActivity(MainActivity().javaClass)
1246
+        if (pushBean.pushType!=4){
1247
+            //更新策略不调回activity因为可能在其他应用中。
1248
+            startIntentActivity(MainActivity().javaClass)
1249
+        }
1199
     }
1250
     }
1200
 
1251
 
1201
     private fun updateAppRv() {
1252
     private fun updateAppRv() {

+ 41
- 4
app/src/main/java/com/xhly/manageapp/ui/main/viewmodel/MainViewModel.kt 查看文件

2
 
2
 
3
 import androidx.lifecycle.LiveData
3
 import androidx.lifecycle.LiveData
4
 import androidx.lifecycle.MutableLiveData
4
 import androidx.lifecycle.MutableLiveData
5
+import androidx.lifecycle.asFlow
5
 import com.xhly.corelib.Const
6
 import com.xhly.corelib.Const
6
 import com.xhly.corelib.eventbus.UIEvent
7
 import com.xhly.corelib.eventbus.UIEvent
7
 import com.xhly.corelib.network.RetrofitService
8
 import com.xhly.corelib.network.RetrofitService
20
 import com.xhly.manageapp.network.log.LogService
21
 import com.xhly.manageapp.network.log.LogService
21
 import com.xhly.manageapp.network.strategy.StrategyService
22
 import com.xhly.manageapp.network.strategy.StrategyService
22
 import com.xhly.manageapp.viewmodel.BaseViewModel
23
 import com.xhly.manageapp.viewmodel.BaseViewModel
24
+import kotlinx.coroutines.flow.Flow
25
+import kotlinx.coroutines.flow.MutableStateFlow
26
+import kotlinx.coroutines.flow.asStateFlow
23
 
27
 
24
 class MainViewModel : BaseViewModel() {
28
 class MainViewModel : BaseViewModel() {
25
     private val appService by lazy { RetrofitService.create<AppService>() }
29
     private val appService by lazy { RetrofitService.create<AppService>() }
26
     private val strategyService by lazy { RetrofitService.create<StrategyService>() }
30
     private val strategyService by lazy { RetrofitService.create<StrategyService>() }
27
     private var logService = RetrofitService.create<LogService>()
31
     private var logService = RetrofitService.create<LogService>()
28
-    private val listData = MutableLiveData<ArrayList<AppModel>>()
32
+
33
+/*    private val listData = MutableLiveData<ArrayList<AppModel>>()
29
     val listAppData: LiveData<ArrayList<AppModel>> = listData
34
     val listAppData: LiveData<ArrayList<AppModel>> = listData
30
     private val forceData = MutableLiveData<ArrayList<AppModel>>()
35
     private val forceData = MutableLiveData<ArrayList<AppModel>>()
31
     val forceListAppData: LiveData<ArrayList<AppModel>> = forceData
36
     val forceListAppData: LiveData<ArrayList<AppModel>> = forceData
32
-
33
     private val strategy = MutableLiveData<StrategyBean>()
37
     private val strategy = MutableLiveData<StrategyBean>()
34
     val strategyData: LiveData<StrategyBean> = strategy
38
     val strategyData: LiveData<StrategyBean> = strategy
35
     private val appStrategy = MutableLiveData<ArrayList<AppTimeManageBean>>()
39
     private val appStrategy = MutableLiveData<ArrayList<AppTimeManageBean>>()
42
     val loginOutData: LiveData<Boolean> = loginOut
46
     val loginOutData: LiveData<Boolean> = loginOut
43
     private val schoolSet = MutableLiveData<SchoolDeviceSetBean>()
47
     private val schoolSet = MutableLiveData<SchoolDeviceSetBean>()
44
     val schoolSetData: LiveData<SchoolDeviceSetBean> = schoolSet
48
     val schoolSetData: LiveData<SchoolDeviceSetBean> = schoolSet
49
+
50
+    private val netWhiteList = MutableLiveData<ArrayList<String>>()
51
+    val netWhiteListData: LiveData<ArrayList<String>> = netWhiteList*/
52
+
45
     private val wallpaper = MutableLiveData<WallpaperBean>()
53
     private val wallpaper = MutableLiveData<WallpaperBean>()
46
     val wallpaperData: LiveData<WallpaperBean> = wallpaper
54
     val wallpaperData: LiveData<WallpaperBean> = wallpaper
47
-    private val netWhiteList = MutableLiveData<ArrayList<String>>()
48
-    val netWhiteListData: LiveData<ArrayList<String>> = netWhiteList
55
+
56
+
57
+    private val listData =MutableStateFlow(ArrayList<AppModel>())
58
+    val listAppData: Flow<ArrayList<AppModel>> = listData.asStateFlow()
59
+
60
+    private val forceData =MutableStateFlow(ArrayList<AppModel>())
61
+    val forceListAppData: Flow<ArrayList<AppModel>> = forceData.asStateFlow()
62
+
63
+    private val strategy = MutableStateFlow(StrategyBean())
64
+    val strategyData: Flow<StrategyBean> = strategy.asStateFlow()
65
+
66
+    private val appStrategy = MutableStateFlow(ArrayList<AppTimeManageBean>())
67
+    val appStrategyData: Flow<ArrayList<AppTimeManageBean>> = appStrategy.asStateFlow()
68
+
69
+    private val padInfo = MutableStateFlow(false)
70
+    val padInfoData: Flow<Boolean> = padInfo.asStateFlow()
71
+
72
+    private val updateInfo =MutableStateFlow(false)
73
+    val updateInfoData: Flow<Boolean> = updateInfo.asStateFlow()
74
+
75
+    private val loginOut =MutableStateFlow(false)
76
+    val loginOutData:  Flow<Boolean> = loginOut.asStateFlow()
77
+
78
+    private val schoolSet = MutableStateFlow(SchoolDeviceSetBean())
79
+    val schoolSetData: Flow<SchoolDeviceSetBean> = schoolSet.asStateFlow()
80
+
81
+
82
+    private val netWhiteList = MutableStateFlow(ArrayList<String>())
83
+    val netWhiteListData: Flow<ArrayList<String>> = netWhiteList.asStateFlow()
84
+
85
+
49
 
86
 
50
     fun getAppList() {
87
     fun getAppList() {
51
         launchUI {
88
         launchUI {

+ 80
- 65
app/src/main/java/com/xhly/manageapp/viewmodel/BaseViewModel.kt 查看文件

13
 import com.xhly.manageapp.bean.scheme.AutoAppBean
13
 import com.xhly.manageapp.bean.scheme.AutoAppBean
14
 import com.xhly.manageapp.network.log.LogService
14
 import com.xhly.manageapp.network.log.LogService
15
 import com.xhly.manageapp.ui.login.netservice.LoginService
15
 import com.xhly.manageapp.ui.login.netservice.LoginService
16
+import kotlinx.coroutines.flow.Flow
17
+import kotlinx.coroutines.flow.MutableStateFlow
18
+import kotlinx.coroutines.flow.asStateFlow
16
 
19
 
17
 open class BaseViewModel : CommonBaseViewModel() {
20
 open class BaseViewModel : CommonBaseViewModel() {
18
     protected val loginService: LoginService by lazy { RetrofitService.create<LoginService>() }
21
     protected val loginService: LoginService by lazy { RetrofitService.create<LoginService>() }
27
     val lockResultData: LiveData<Boolean> = lockResult
30
     val lockResultData: LiveData<Boolean> = lockResult
28
     private val resetResult = MutableLiveData<Boolean>()
31
     private val resetResult = MutableLiveData<Boolean>()
29
     val resetlResultData: LiveData<Boolean> = resetResult
32
     val resetlResultData: LiveData<Boolean> = resetResult
30
-    private val logResult=MutableLiveData<LogPushResultBean>()
31
-    val logResultData:LiveData<LogPushResultBean> =logResult
32
-    private val logEventResult=MutableLiveData<LogEventBean>()
33
-    val logEventData:LiveData<LogEventBean> =logEventResult
34
-    private val autoAppResult=MutableLiveData<AutoAppBean>()
35
-    val autoAppData:LiveData<AutoAppBean> =autoAppResult
33
+
34
+    /*    private val logResult=MutableLiveData<LogPushResultBean>()
35
+        val logResultData:LiveData<LogPushResultBean> =logResult
36
+
37
+    private val logEventResult = MutableLiveData<LogEventBean>()
38
+    val logEventData: LiveData<LogEventBean> = logEventResult
39
+        */
40
+    private val logResult = MutableStateFlow(LogPushResultBean())
41
+    val logResultData: Flow<LogPushResultBean> = logResult.asStateFlow()
42
+
43
+    private val logEventResult =MutableStateFlow(LogEventBean())
44
+    val logEventData: Flow<LogEventBean> = logEventResult.asStateFlow()
45
+
46
+
47
+    private val autoAppResult = MutableStateFlow(AutoAppBean())
48
+    val autoAppData: Flow<AutoAppBean> = autoAppResult.asStateFlow()
49
+
36
     /**
50
     /**
37
      * 解除当前锁屏
51
      * 解除当前锁屏
38
      */
52
      */
39
     fun postPwdDetail(code: String, sn: String) {
53
     fun postPwdDetail(code: String, sn: String) {
40
         launchUI {
54
         launchUI {
41
             //先对比本地密码,一致则直接解锁,不然传给服务器
55
             //先对比本地密码,一致则直接解锁,不然传给服务器
42
-            if (code == MD5Utils.getDynamicPassword(sn)){
43
-                pwdResult.value =true
56
+            if (code == MD5Utils.getDynamicPassword(sn)) {
57
+                pwdResult.value = true
44
                 postEditUnlock(sn)
58
                 postEditUnlock(sn)
45
-            }else{
59
+            } else {
46
                 val map = HashMap<String, Any>()
60
                 val map = HashMap<String, Any>()
47
                 map["password"] = code
61
                 map["password"] = code
48
-                val result=loginService.postExitControl(map)
62
+                val result = loginService.postExitControl(map)
49
                 pwdResult.value = result.code == 0
63
                 pwdResult.value = result.code == 0
50
             }
64
             }
51
         }
65
         }
54
     /**
68
     /**
55
      * 手动进入管理页面
69
      * 手动进入管理页面
56
      */
70
      */
57
-    fun postExitControl(code:String,sn: String){
71
+    fun postExitControl(code: String, sn: String) {
58
         launchUI {
72
         launchUI {
59
             //先对比本地密码,一致则可以进入本地管理页面
73
             //先对比本地密码,一致则可以进入本地管理页面
60
             controlResult.value = code == MD5Utils.getDynamicPassword(sn)
74
             controlResult.value = code == MD5Utils.getDynamicPassword(sn)
73
     fun eventLog(operateBean: LogdOperateBean) {
87
     fun eventLog(operateBean: LogdOperateBean) {
74
         launchUI {
88
         launchUI {
75
             var result = logService.postLogdoperateAdd(operateBean)
89
             var result = logService.postLogdoperateAdd(operateBean)
76
-            if (result.code==0){
77
-                val logEventBean=LogEventBean()
78
-                logEventBean.enableFlag=true
79
-                logEventBean.logEventType=operateBean.doEvent
80
-                logEventResult.value=logEventBean
90
+            if (result.code == 0) {
91
+                val logEventBean = LogEventBean()
92
+                logEventBean.enableFlag = true
93
+                logEventBean.logEventType = operateBean.doEvent
94
+                logEventResult.value = logEventBean
81
             }
95
             }
82
         }
96
         }
83
     }
97
     }
88
     fun postLogPushAdd(logPushBean: LogPushBean) {
102
     fun postLogPushAdd(logPushBean: LogPushBean) {
89
         launchUI {
103
         launchUI {
90
             val postLogPushAdd = logService.postLogPushAdd(logPushBean)
104
             val postLogPushAdd = logService.postLogPushAdd(logPushBean)
91
-            if (postLogPushAdd.code==0){
105
+            if (postLogPushAdd.code == 0) {
92
                 //为true则后续执行
106
                 //为true则后续执行
93
-                val logPushResultBean=LogPushResultBean()
94
-                logPushResultBean.pushType=logPushBean.pushType
95
-                logPushResultBean.enableFlag=true
96
-                logResult.value=logPushResultBean
107
+                val logPushResultBean = LogPushResultBean()
108
+                logPushResultBean.pushType = logPushBean.pushType
109
+                logPushResultBean.enableFlag = true
110
+                logResult.value = logPushResultBean
97
             }
111
             }
98
         }
112
         }
99
     }
113
     }
114
+
100
     /**
115
     /**
101
      * 同步服务器的时间
116
      * 同步服务器的时间
102
      */
117
      */
103
-    fun postSyncTime(){
118
+    fun postSyncTime() {
104
         launchUI {
119
         launchUI {
105
             val startTime = System.currentTimeMillis()
120
             val startTime = System.currentTimeMillis()
106
             val postSyncTime = loginService.postSyncTime()
121
             val postSyncTime = loginService.postSyncTime()
107
-            if (postSyncTime.code==0){
122
+            if (postSyncTime.code == 0) {
108
                 val endTime = System.currentTimeMillis()
123
                 val endTime = System.currentTimeMillis()
109
                 val obj = postSyncTime.obj
124
                 val obj = postSyncTime.obj
110
-                timeResult.value=obj+(endTime-startTime)/2
111
-            }else{
112
-                if (!postSyncTime.msg.isNullOrEmpty()){
113
-                   netMessage.value=postSyncTime.msg
125
+                timeResult.value = obj + (endTime - startTime) / 2
126
+            } else {
127
+                if (!postSyncTime.msg.isNullOrEmpty()) {
128
+                    netMessage.value = postSyncTime.msg
114
                 }
129
                 }
115
             }
130
             }
116
         }
131
         }
122
      * sn 设备号
137
      * sn 设备号
123
      *  pushType  3锁定
138
      *  pushType  3锁定
124
      */
139
      */
125
-    fun postExitLocked(sn:String,pushType:Int=3){
140
+    fun postExitLocked(sn: String, pushType: Int = 3) {
126
         launchUI {
141
         launchUI {
127
-            val map=HashMap<String,Any>()
128
-            map["sn"]=sn
129
-            map["pushType"]=pushType
142
+            val map = HashMap<String, Any>()
143
+            map["sn"] = sn
144
+            map["pushType"] = pushType
130
             val result = loginService.postExitLocked(map)
145
             val result = loginService.postExitLocked(map)
131
-            if (result.code==0){
132
-                lockResult.value=true
133
-            }else{
134
-                if (!result.msg.isNullOrEmpty()){
135
-                    netMessage.value=result.msg
146
+            if (result.code == 0) {
147
+                lockResult.value = true
148
+            } else {
149
+                if (!result.msg.isNullOrEmpty()) {
150
+                    netMessage.value = result.msg
136
                 }
151
                 }
137
             }
152
             }
138
         }
153
         }
143
      * sn 设备号
158
      * sn 设备号
144
      * pushType  6恢复出厂设置
159
      * pushType  6恢复出厂设置
145
      */
160
      */
146
-    fun postExitReseted(sn:String,pushType:Int=6){
161
+    fun postExitReseted(sn: String, pushType: Int = 6) {
147
         launchUI {
162
         launchUI {
148
-            val map=HashMap<String,Any>()
149
-            map["sn"]=sn
150
-            map["pushType"]=pushType
163
+            val map = HashMap<String, Any>()
164
+            map["sn"] = sn
165
+            map["pushType"] = pushType
151
             val result = loginService.postExitReseted(map)
166
             val result = loginService.postExitReseted(map)
152
-            if (result.code==0){
153
-                resetResult.value=true
154
-            }else{
155
-                if (!result.msg.isNullOrEmpty()){
156
-                    netMessage.value=result.msg
167
+            if (result.code == 0) {
168
+                resetResult.value = true
169
+            } else {
170
+                if (!result.msg.isNullOrEmpty()) {
171
+                    netMessage.value = result.msg
157
                 }
172
                 }
158
             }
173
             }
159
         }
174
         }
162
     /**
177
     /**
163
      * 设备--解除锁定(锁定后,本地输入密码校验通过后调用) 参数sn
178
      * 设备--解除锁定(锁定后,本地输入密码校验通过后调用) 参数sn
164
      */
179
      */
165
-    fun postEditUnlock(sn:String){
180
+    fun postEditUnlock(sn: String) {
166
         launchUI {
181
         launchUI {
167
-            val map=HashMap<String,Any>()
168
-            map["sn"]=sn
182
+            val map = HashMap<String, Any>()
183
+            map["sn"] = sn
169
             var postExitLocked = loginService.postEditUnlock(map)
184
             var postExitLocked = loginService.postEditUnlock(map)
170
         }
185
         }
171
     }
186
     }
174
      * 开机设置-启动应用-平板用户(根据这个接口启动指定应用)
189
      * 开机设置-启动应用-平板用户(根据这个接口启动指定应用)
175
      */
190
      */
176
 
191
 
177
-    fun postAutoAppDetail(regionid:Long){
192
+    fun postAutoAppDetail(regionid: Long) {
178
         launchUI {
193
         launchUI {
179
-           try {
180
-               val map=HashMap<String,Any>()
181
-               map["regionid"]=regionid
182
-               val result= loginService.postAutoAppDetail(map)
183
-               if (result.code==0){
184
-                   result.obj.netSucessFlag=true
185
-                   autoAppResult.value=result.obj
186
-               }else{
187
-                   val autoAppBean = AutoAppBean()
188
-                   autoAppBean.netSucessFlag=true
189
-                   autoAppResult.value=AutoAppBean()
190
-               }
191
-           }catch (e:Exception){
192
-               autoAppResult.value= AutoAppBean()
193
-               LogShow(e.toString())
194
-           }
194
+            try {
195
+                val map = HashMap<String, Any>()
196
+                map["regionid"] = regionid
197
+                val result = loginService.postAutoAppDetail(map)
198
+                if (result.code == 0) {
199
+                    result.obj.netSucessFlag = true
200
+                    autoAppResult.value = result.obj
201
+                } else {
202
+                    val autoAppBean = AutoAppBean()
203
+                    autoAppBean.netSucessFlag = true
204
+                    autoAppResult.value = AutoAppBean()
205
+                }
206
+            } catch (e: Exception) {
207
+                autoAppResult.value = AutoAppBean()
208
+                LogShow(e.toString())
209
+            }
195
         }
210
         }
196
     }
211
     }
197
 }
212
 }

Loading…
取消
儲存