Browse Source

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

20241218TB223FC(测试jar包)
wangwanlei 11 months ago
parent
commit
972ae4cd6f

+ 24
- 20
app/src/main/java/com/xhly/manageapp/ui/login/activity/LoginActivity.kt View File

@@ -12,6 +12,7 @@ import android.widget.Button
12 12
 import android.widget.EditText
13 13
 import android.widget.TextView
14 14
 import androidx.activity.addCallback
15
+import androidx.lifecycle.lifecycleScope
15 16
 import androidx.work.PeriodicWorkRequest
16 17
 import androidx.work.WorkManager
17 18
 import com.kongzue.dialogx.DialogX
@@ -42,6 +43,7 @@ import com.xhly.manageapp.ui.main.activity.MainActivity
42 43
 import com.xhly.manageapp.utils.CurrentAppSharedPreferencesUtils
43 44
 import com.xhly.manageapp.utils.StrategyUtils
44 45
 import com.xhly.manageapp.workmanager.TimingWorker
46
+import kotlinx.coroutines.launch
45 47
 import java.util.concurrent.TimeUnit
46 48
 
47 49
 class LoginActivity : BaseActivity<LoginViewModel, ActivityLoginBinding>() {
@@ -139,26 +141,28 @@ class LoginActivity : BaseActivity<LoginViewModel, ActivityLoginBinding>() {
139 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 View File

@@ -26,7 +26,10 @@ import android.widget.LinearLayout
26 26
 import android.widget.TextView
27 27
 import android.widget.Toast
28 28
 import androidx.activity.addCallback
29
+import androidx.lifecycle.Lifecycle
30
+import androidx.lifecycle.LifecycleRegistry
29 31
 import androidx.lifecycle.lifecycleScope
32
+import androidx.lifecycle.viewModelScope
30 33
 import androidx.recyclerview.widget.GridLayoutManager
31 34
 import androidx.work.PeriodicWorkRequest
32 35
 import androidx.work.WorkManager
@@ -85,6 +88,7 @@ import com.xhly.manageapp.utils.PadInfoUtils
85 88
 import com.xhly.manageapp.utils.StrategyUtils
86 89
 import com.xhly.manageapp.workmanager.TimingWorker
87 90
 import kotlinx.coroutines.Dispatchers
91
+import kotlinx.coroutines.flow.collect
88 92
 import kotlinx.coroutines.launch
89 93
 import kotlinx.coroutines.withContext
90 94
 import java.io.File
@@ -177,131 +181,14 @@ class MainActivity : BaseActivity<MainViewModel, ActivityMainBinding>(),Download
177 181
           startActivity(permissionIntent)*/
178 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 185
             if (it) {
288
-                loginOut()
186
+                unBindBlock()
289 187
             } else {
290 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 192
         viewModel.wallpaperData.observe(this) {
306 193
             if (!it.hpath.isNullOrBlank()) {
307 194
                 Glide.with(this).load(Const.URL1 + it.hpath).placeholder(R.drawable.main_bg)
@@ -333,16 +220,8 @@ class MainActivity : BaseActivity<MainViewModel, ActivityMainBinding>(),Download
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 225
         viewModel.lockResultData.observe(this) {
347 226
             if (it) {
348 227
                 spUtils.setParam(Const.DISABLEPAD, true)
@@ -356,80 +235,249 @@ class MainActivity : BaseActivity<MainViewModel, ActivityMainBinding>(),Download
356 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 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 481
         getLocation()
434 482
         startWorkManager()
435 483
         lastTimeLong=System.currentTimeMillis()
@@ -1195,7 +1243,10 @@ class MainActivity : BaseActivity<MainViewModel, ActivityMainBinding>(),Download
1195 1243
             pushBean.sn =it
1196 1244
         }
1197 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 1252
     private fun updateAppRv() {

+ 41
- 4
app/src/main/java/com/xhly/manageapp/ui/main/viewmodel/MainViewModel.kt View File

@@ -2,6 +2,7 @@ package com.xhly.manageapp.ui.main.viewmodel
2 2
 
3 3
 import androidx.lifecycle.LiveData
4 4
 import androidx.lifecycle.MutableLiveData
5
+import androidx.lifecycle.asFlow
5 6
 import com.xhly.corelib.Const
6 7
 import com.xhly.corelib.eventbus.UIEvent
7 8
 import com.xhly.corelib.network.RetrofitService
@@ -20,16 +21,19 @@ import com.xhly.manageapp.network.app.AppService
20 21
 import com.xhly.manageapp.network.log.LogService
21 22
 import com.xhly.manageapp.network.strategy.StrategyService
22 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 28
 class MainViewModel : BaseViewModel() {
25 29
     private val appService by lazy { RetrofitService.create<AppService>() }
26 30
     private val strategyService by lazy { RetrofitService.create<StrategyService>() }
27 31
     private var logService = RetrofitService.create<LogService>()
28
-    private val listData = MutableLiveData<ArrayList<AppModel>>()
32
+
33
+/*    private val listData = MutableLiveData<ArrayList<AppModel>>()
29 34
     val listAppData: LiveData<ArrayList<AppModel>> = listData
30 35
     private val forceData = MutableLiveData<ArrayList<AppModel>>()
31 36
     val forceListAppData: LiveData<ArrayList<AppModel>> = forceData
32
-
33 37
     private val strategy = MutableLiveData<StrategyBean>()
34 38
     val strategyData: LiveData<StrategyBean> = strategy
35 39
     private val appStrategy = MutableLiveData<ArrayList<AppTimeManageBean>>()
@@ -42,10 +46,43 @@ class MainViewModel : BaseViewModel() {
42 46
     val loginOutData: LiveData<Boolean> = loginOut
43 47
     private val schoolSet = MutableLiveData<SchoolDeviceSetBean>()
44 48
     val schoolSetData: LiveData<SchoolDeviceSetBean> = schoolSet
49
+
50
+    private val netWhiteList = MutableLiveData<ArrayList<String>>()
51
+    val netWhiteListData: LiveData<ArrayList<String>> = netWhiteList*/
52
+
45 53
     private val wallpaper = MutableLiveData<WallpaperBean>()
46 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 87
     fun getAppList() {
51 88
         launchUI {

+ 80
- 65
app/src/main/java/com/xhly/manageapp/viewmodel/BaseViewModel.kt View File

@@ -13,6 +13,9 @@ import com.xhly.manageapp.bean.log.LogdOperateBean
13 13
 import com.xhly.manageapp.bean.scheme.AutoAppBean
14 14
 import com.xhly.manageapp.network.log.LogService
15 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 20
 open class BaseViewModel : CommonBaseViewModel() {
18 21
     protected val loginService: LoginService by lazy { RetrofitService.create<LoginService>() }
@@ -27,25 +30,36 @@ open class BaseViewModel : CommonBaseViewModel() {
27 30
     val lockResultData: LiveData<Boolean> = lockResult
28 31
     private val resetResult = MutableLiveData<Boolean>()
29 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 53
     fun postPwdDetail(code: String, sn: String) {
40 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 58
                 postEditUnlock(sn)
45
-            }else{
59
+            } else {
46 60
                 val map = HashMap<String, Any>()
47 61
                 map["password"] = code
48
-                val result=loginService.postExitControl(map)
62
+                val result = loginService.postExitControl(map)
49 63
                 pwdResult.value = result.code == 0
50 64
             }
51 65
         }
@@ -54,7 +68,7 @@ open class BaseViewModel : CommonBaseViewModel() {
54 68
     /**
55 69
      * 手动进入管理页面
56 70
      */
57
-    fun postExitControl(code:String,sn: String){
71
+    fun postExitControl(code: String, sn: String) {
58 72
         launchUI {
59 73
             //先对比本地密码,一致则可以进入本地管理页面
60 74
             controlResult.value = code == MD5Utils.getDynamicPassword(sn)
@@ -73,11 +87,11 @@ open class BaseViewModel : CommonBaseViewModel() {
73 87
     fun eventLog(operateBean: LogdOperateBean) {
74 88
         launchUI {
75 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,29 +102,30 @@ open class BaseViewModel : CommonBaseViewModel() {
88 102
     fun postLogPushAdd(logPushBean: LogPushBean) {
89 103
         launchUI {
90 104
             val postLogPushAdd = logService.postLogPushAdd(logPushBean)
91
-            if (postLogPushAdd.code==0){
105
+            if (postLogPushAdd.code == 0) {
92 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 119
         launchUI {
105 120
             val startTime = System.currentTimeMillis()
106 121
             val postSyncTime = loginService.postSyncTime()
107
-            if (postSyncTime.code==0){
122
+            if (postSyncTime.code == 0) {
108 123
                 val endTime = System.currentTimeMillis()
109 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,17 +137,17 @@ open class BaseViewModel : CommonBaseViewModel() {
122 137
      * sn 设备号
123 138
      *  pushType  3锁定
124 139
      */
125
-    fun postExitLocked(sn:String,pushType:Int=3){
140
+    fun postExitLocked(sn: String, pushType: Int = 3) {
126 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 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,17 +158,17 @@ open class BaseViewModel : CommonBaseViewModel() {
143 158
      * sn 设备号
144 159
      * pushType  6恢复出厂设置
145 160
      */
146
-    fun postExitReseted(sn:String,pushType:Int=6){
161
+    fun postExitReseted(sn: String, pushType: Int = 6) {
147 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 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,10 +177,10 @@ open class BaseViewModel : CommonBaseViewModel() {
162 177
     /**
163 178
      * 设备--解除锁定(锁定后,本地输入密码校验通过后调用) 参数sn
164 179
      */
165
-    fun postEditUnlock(sn:String){
180
+    fun postEditUnlock(sn: String) {
166 181
         launchUI {
167
-            val map=HashMap<String,Any>()
168
-            map["sn"]=sn
182
+            val map = HashMap<String, Any>()
183
+            map["sn"] = sn
169 184
             var postExitLocked = loginService.postEditUnlock(map)
170 185
         }
171 186
     }
@@ -174,24 +189,24 @@ open class BaseViewModel : CommonBaseViewModel() {
174 189
      * 开机设置-启动应用-平板用户(根据这个接口启动指定应用)
175 190
      */
176 191
 
177
-    fun postAutoAppDetail(regionid:Long){
192
+    fun postAutoAppDetail(regionid: Long) {
178 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…
Cancel
Save