Просмотр исходного кода

1.登录页面添加事件响应和锁定功能。

2.添加事件2007常量。
20241218TB223FC(测试jar包)
wangwanlei 11 месяцев назад
Родитель
Сommit
de9eaeb6d2

+ 1
- 0
README.md Просмотреть файл

@@ -15,3 +15,4 @@
15 15
 *   隐藏图库,相机开启后,该学校的所有设备桌面不再显示图库,相机
16 16
 *   禁用注销开启后,该学校的所有设备一旦登录成功,必须输入管理员密码才能退出登录
17 17
 *   限制使用时长后,客户端使用时间到了设备提醒休息,默认允许使用30分钟,这里你可以自行设置(可设置范围20~120分钟)
18
+解除管控, 去除所有限制,设置系统launcher为默认启动器,移除我们的启动器。

+ 180
- 0
app/src/main/java/com/xhly/manageapp/ui/login/activity/LoginActivity.kt Просмотреть файл

@@ -7,23 +7,36 @@ import android.content.pm.PackageManager
7 7
 import android.graphics.Color
8 8
 import android.os.Build
9 9
 import android.view.View
10
+import android.widget.Button
10 11
 import android.widget.EditText
11 12
 import android.widget.TextView
12 13
 import androidx.activity.addCallback
14
+import androidx.work.PeriodicWorkRequest
15
+import androidx.work.WorkManager
13 16
 import com.kongzue.dialogx.dialogs.CustomDialog
14 17
 import com.kongzue.dialogx.interfaces.OnBindView
15 18
 import com.tbruyelle.rxpermissions2.RxPermissions
16 19
 import com.xhly.corelib.Const
20
+import com.xhly.corelib.eventbus.UIEvent
17 21
 import com.xhly.corelib.utils.GsonUtils
22
+import com.xhly.corelib.utils.LogShow
18 23
 import com.xhly.corelib.utils.SystemUtil
19 24
 import com.xhly.manageapp.ManageApplication
20 25
 import com.xhly.manageapp.R
26
+import com.xhly.manageapp.bean.EventLog
21 27
 import com.xhly.manageapp.bean.LoginBean
28
+import com.xhly.manageapp.bean.SocketMsgBean
29
+import com.xhly.manageapp.bean.log.LogdOperateBean
30
+import com.xhly.manageapp.bean.strategy.StrategyBean
22 31
 import com.xhly.manageapp.bean.user.UserBean
23 32
 import com.xhly.manageapp.contentprovider.ZSpProvider
24 33
 import com.xhly.manageapp.databinding.ActivityLoginBinding
34
+import com.xhly.manageapp.service.websocket.AppSocket
25 35
 import com.xhly.manageapp.ui.login.viewmodel.LoginViewModel
26 36
 import com.xhly.manageapp.ui.main.activity.MainActivity
37
+import com.xhly.manageapp.utils.StrategyUtils
38
+import com.xhly.manageapp.workmanager.TimingWorker
39
+import java.util.concurrent.TimeUnit
27 40
 
28 41
 class LoginActivity : BaseActivity<LoginViewModel, ActivityLoginBinding>() {
29 42
     private var regioncode = ""
@@ -39,6 +52,7 @@ class LoginActivity : BaseActivity<LoginViewModel, ActivityLoginBinding>() {
39 52
                }
40 53
            }
41 54
        }
55
+        startWorkManager()
42 56
     }
43 57
 
44 58
     @SuppressLint("CheckResult")
@@ -120,4 +134,170 @@ class LoginActivity : BaseActivity<LoginViewModel, ActivityLoginBinding>() {
120 134
             }).setCancelable(false).setMaskColor(Color.parseColor("#66000000"))
121 135
             .setAlign(CustomDialog.ALIGN.CENTER).show()
122 136
     }
137
+
138
+    override fun onUiEvent(uiEvent: UIEvent) {
139
+        super.onUiEvent(uiEvent)
140
+        when (uiEvent.getEvent()) {
141
+
142
+            Const.CODE2001.toString() -> {
143
+                val message = uiEvent.message
144
+                showNoticeDialog(message)
145
+            }
146
+
147
+            Const.CODE2002.toString() -> {
148
+                spUtils.setParam(Const.DISABLEPAD, true)
149
+                useTimeStrategy()
150
+            }
151
+
152
+            Const.CODE2003.toString() -> {
153
+                spUtils.setParam(Const.DISABLEPAD, false)
154
+                useTimeStrategy()
155
+            }
156
+
157
+            Const.CODE2004.toString() -> {
158
+
159
+            }
160
+
161
+            Const.CODE2005.toString() -> {
162
+                ManageApplication.rebootDevice()
163
+            }
164
+
165
+            Const.CODE2006.toString() -> {
166
+                ManageApplication.launchFactoryReset()
167
+            }
168
+
169
+            Const.CODE2007.toString() -> {
170
+
171
+            }
172
+
173
+
174
+            Const.LOGAPPSTART -> {
175
+
176
+            }
177
+
178
+
179
+            Const.SDINSTALL -> {
180
+                val data = LogdOperateBean()
181
+                ManageApplication.getDeviceInfo()?.let {
182
+                    data.sn = it
183
+                }
184
+                data.comm = "SD卡插入"
185
+                data.doEvent = EventLog.SDEMOUNTEDVENT
186
+                viewModel.eventLog(data)
187
+            }
188
+
189
+            Const.SDUNINSTALL -> {
190
+                val data = LogdOperateBean()
191
+                ManageApplication.getDeviceInfo()?.let {
192
+                    data.sn = it
193
+                }
194
+                data.comm = "SD卡拔出"
195
+                data.doEvent = EventLog.SDEJECTEVENT
196
+                viewModel.eventLog(data)
197
+            }
198
+
199
+            Const.SIMINSTALL -> {
200
+                val data = LogdOperateBean()
201
+                ManageApplication.getDeviceInfo()?.let {
202
+                    data.sn = it
203
+                }
204
+                data.comm = "SIM卡安装"
205
+                data.doEvent = EventLog.SIMEVENT
206
+                viewModel.eventLog(data)
207
+            }
208
+
209
+            Const.BLUETOOTHOPEN -> {
210
+                val data = LogdOperateBean()
211
+                ManageApplication.getDeviceInfo()?.let {
212
+                    data.sn = it
213
+                }
214
+                data.comm = "蓝牙打开"
215
+                data.doEvent = EventLog.BLUETOOHEVENT
216
+                viewModel.eventLog(data)
217
+            }
218
+
219
+            Const.USB_CONNECTED -> {
220
+                val data = LogdOperateBean()
221
+                ManageApplication.getDeviceInfo()?.let {
222
+                    data.sn = it
223
+                }
224
+                data.comm = "usb连接"
225
+                data.doEvent = EventLog.USBCONNECTEVENT
226
+                viewModel.eventLog(data)
227
+            }
228
+
229
+            Const.USB_NOCONNECTED -> {
230
+                val data = LogdOperateBean()
231
+                ManageApplication.getDeviceInfo()?.let {
232
+                    data.sn = it
233
+                }
234
+                data.comm = "usb断开"
235
+                data.doEvent = EventLog.USBDISCONNECTEVENT
236
+                viewModel.eventLog(data)
237
+            }
238
+        }
239
+
240
+    }
241
+
242
+    private fun showNoticeDialog(msg: String) {
243
+        CustomDialog.build()
244
+            .setCustomView(object : OnBindView<CustomDialog>(R.layout.layout_notice_dialog) {
245
+                override fun onBind(dialog: CustomDialog, v: View) {
246
+                    val closeBtn = v.findViewById<Button>(R.id.dialog_close_btn)
247
+                    val titleTv = v.findViewById<TextView>(R.id.dialog_title_tv)
248
+                    val contentTv = v.findViewById<TextView>(R.id.dialog_content_tv)
249
+                    try {
250
+                        val msgBean = GsonUtils.parseJsonWithGson(
251
+                            msg, SocketMsgBean().javaClass
252
+                        ) as SocketMsgBean
253
+                        titleTv.text = msgBean.title
254
+                        contentTv.text = msgBean.content
255
+                    } catch (e: Exception) {
256
+                        LogShow("解析失败"+e.toString())
257
+                    }
258
+                    closeBtn.setOnClickListener {
259
+                        dialog.dismiss()
260
+                    }
261
+                }
262
+            }).setCancelable(false).setMaskColor(Color.parseColor("#66000000"))
263
+            .setAlign(CustomDialog.ALIGN.CENTER).show()
264
+    }
265
+
266
+    private fun useTimeStrategy() {
267
+        //获得sputils中的平板锁定策略
268
+        try {
269
+            //如果存储的是锁定则锁定
270
+            val param = spUtils.getParam(Const.DISABLEPAD, false) as Boolean
271
+            if (param) {
272
+                mBinding.loginMainLlayout.visibility = View.GONE
273
+                mBinding.lockLlayout.visibility = View.VISIBLE
274
+            } else {
275
+                mBinding.loginMainLlayout.visibility = View.VISIBLE
276
+                mBinding.lockLlayout.visibility = View.GONE
277
+            }
278
+        } catch (e: Exception) {
279
+            val param = spUtils.getParam(Const.DISABLEPAD, false) as Boolean
280
+            if (param) {
281
+                mBinding.loginMainLlayout.visibility = View.GONE
282
+                mBinding.lockLlayout.visibility = View.VISIBLE
283
+            } else {
284
+                mBinding.loginMainLlayout.visibility = View.VISIBLE
285
+                mBinding.lockLlayout.visibility = View.GONE
286
+            }
287
+        }
288
+    }
289
+
290
+    private fun startWorkManager() {
291
+        WorkManager.getInstance(this).cancelAllWork()
292
+        // 周期性任务时间最少15分钟 所以除以实际周期的时间  看需要加入几个任务
293
+        val taskList = arrayListOf(0, 5, 10)
294
+        for (taskNo in taskList) {
295
+            val request = PeriodicWorkRequest
296
+                // 最少15分钟 PeriodicWorkRequest
297
+                .Builder(TimingWorker::class.java, 15, TimeUnit.MINUTES)
298
+                // WorkRequest 根据实际周期以及任务的编号 延迟初始化 0,5,10 分别周期行执行
299
+                .setInitialDelay(taskNo.toLong(), TimeUnit.MINUTES).build()
300
+            WorkManager.getInstance(this).enqueue(request)
301
+        }
302
+    }
123 303
 }

+ 9
- 0
app/src/main/java/com/xhly/manageapp/ui/login/viewmodel/LoginViewModel.kt Просмотреть файл

@@ -6,10 +6,13 @@ import com.xhly.corelib.base.viewmodel.CommonBaseViewModel
6 6
 import com.xhly.corelib.network.RetrofitService
7 7
 import com.xhly.corelib.utils.LogShow
8 8
 import com.xhly.manageapp.bean.LoginBean
9
+import com.xhly.manageapp.bean.log.LogdOperateBean
9 10
 import com.xhly.manageapp.bean.user.UserBean
11
+import com.xhly.manageapp.network.log.LogService
10 12
 import com.xhly.manageapp.ui.login.netservice.LoginService
11 13
 
12 14
 class LoginViewModel: CommonBaseViewModel() {
15
+    private var logService = RetrofitService.create<LogService>()
13 16
     private var service=RetrofitService.create<LoginService>()
14 17
     private val loginResult=MutableLiveData<UserBean>()
15 18
     val loginData:LiveData<UserBean> =loginResult
@@ -37,4 +40,10 @@ class LoginViewModel: CommonBaseViewModel() {
37 40
             }
38 41
         }
39 42
     }
43
+
44
+    fun eventLog(operateBean: LogdOperateBean) {
45
+        launchUI {
46
+            logService.postLogdoperateAdd(operateBean)
47
+        }
48
+    }
40 49
 }

+ 4
- 0
app/src/main/java/com/xhly/manageapp/ui/main/activity/MainActivity.kt Просмотреть файл

@@ -424,6 +424,10 @@ class MainActivity : BaseActivity<MainViewModel, ActivityMainBinding>() {
424 424
                 ManageApplication.launchFactoryReset()
425 425
             }
426 426
 
427
+            Const.CODE2007.toString() -> {
428
+
429
+            }
430
+
427 431
             Const.LOGAPPSTART -> {
428 432
                 val message = uiEvent.message
429 433
                 if (AppSocket.lastPkgName == message) {

+ 61
- 3
app/src/main/res/layout/activity_login.xml Просмотреть файл

@@ -1,10 +1,11 @@
1 1
 <?xml version="1.0" encoding="utf-8"?>
2
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 3
     xmlns:app="http://schemas.android.com/apk/res-auto"
4 4
     android:layout_width="match_parent"
5 5
     android:layout_height="match_parent">
6 6
 
7 7
     <androidx.constraintlayout.widget.ConstraintLayout
8
+        android:id="@+id/login_main_llayout"
8 9
         android:layout_width="match_parent"
9 10
         android:layout_height="match_parent"
10 11
         android:background="@color/white"
@@ -95,9 +96,9 @@
95 96
                     android:layout_marginTop="165dp"
96 97
                     android:background="@null"
97 98
                     android:digits="@string/psw_style"
98
-                    android:inputType="numberPassword"
99 99
                     android:gravity="center_vertical"
100 100
                     android:hint="@string/inputcode"
101
+                    android:inputType="numberPassword"
101 102
                     android:singleLine="true"
102 103
                     android:textColor="@color/black"
103 104
                     android:textColorHint="#FFB8C2D9"
@@ -130,4 +131,61 @@
130 131
             </androidx.constraintlayout.widget.ConstraintLayout>
131 132
         </androidx.core.widget.NestedScrollView>
132 133
     </androidx.constraintlayout.widget.ConstraintLayout>
133
-</LinearLayout>
134
+
135
+    <LinearLayout
136
+        android:id="@+id/lock_llayout"
137
+        android:layout_width="match_parent"
138
+        android:layout_height="match_parent"
139
+        android:background="@drawable/main_bg"
140
+        android:gravity="center_horizontal"
141
+        android:orientation="vertical">
142
+
143
+        <ImageView
144
+            android:layout_width="157dp"
145
+            android:layout_height="151dp"
146
+            android:layout_marginTop="104dp"
147
+            android:src="@drawable/icon_lock" />
148
+
149
+        <FrameLayout
150
+            android:layout_width="wrap_content"
151
+            android:layout_height="53dp"
152
+            android:layout_marginTop="26dp">
153
+
154
+            <EditText
155
+                android:id="@+id/lock_et"
156
+                android:layout_width="357dp"
157
+                android:layout_height="53dp"
158
+                android:background="@drawable/shape_shadow_bg"
159
+                android:hint="@string/passcode"
160
+                android:paddingLeft="28dp"
161
+                android:paddingRight="28dp"
162
+                android:singleLine="true"
163
+                android:textColor="@color/codetipscolor"
164
+                android:textColorHint="@color/codehintcolor"
165
+                android:textSize="16sp" />
166
+
167
+            <androidx.cardview.widget.CardView
168
+                android:id="@+id/codeenter_cv"
169
+                android:layout_width="24dp"
170
+                android:layout_height="24dp"
171
+                android:layout_gravity="center_vertical|right"
172
+                android:layout_marginRight="18dp"
173
+                app:cardBackgroundColor="@color/white">
174
+
175
+                <ImageView
176
+                    android:layout_width="wrap_content"
177
+                    android:layout_height="11dp"
178
+                    android:layout_gravity="center"
179
+                    android:src="@drawable/icon_etenter" />
180
+            </androidx.cardview.widget.CardView>
181
+        </FrameLayout>
182
+
183
+        <TextView
184
+            android:layout_width="wrap_content"
185
+            android:layout_height="wrap_content"
186
+            android:layout_marginTop="18dp"
187
+            android:text="@string/locktips"
188
+            android:textColor="@color/codetipscolor"
189
+            android:textSize="17sp" />
190
+    </LinearLayout>
191
+</FrameLayout>

+ 3
- 0
corelib/src/main/java/com/xhly/corelib/Const.kt Просмотреть файл

@@ -46,6 +46,9 @@ object Const {
46 46
     //恢复出厂
47 47
     const val CODE2006 = 2006
48 48
 
49
+    //解除管控
50
+    const val CODE2007 = 2007
51
+
49 52
     //消息确认回发
50 53
     const val CODE666 = 666
51 54
 

+ 5
- 0
websocket/src/main/java/com/xhly/websocket/utils/SocketPushUtils.kt Просмотреть файл

@@ -63,6 +63,11 @@ object SocketPushUtils {
63 63
                         UIEvent(Const.CODE2006.toString()).post()
64 64
                     }
65 65
 
66
+                    Const.CODE2007 -> {
67
+                        //恢复出厂
68
+                        UIEvent(Const.CODE2007.toString()).post()
69
+                    }
70
+
66 71
                     666 -> {
67 72
                         //消息确认回发mid 消息id
68 73
 

Загрузка…
Отмена
Сохранить