Commit 74e2efc4 by Baoxy

Merge remote-tracking branch 'remotes/origin/education_space' into education_space_26

# Conflicts: # Launcher3/AndroidManifest.xml # Launcher3/res/values/strings.xml # Launcher3/src/com/android/launcher3/Launcher.java # Launcher3/src/com/android/launcher3/function/pwd/PwdPinSetPwdActivity.java # Launcher3/src/com/android/launcher3/function/setting/SettingAdminActivity.kt # Launcher3/src/com/android/launcher3/settings/BlankActivity.java # lib_common/src/main/java/com/secspace/lib/common/function/SwitchOutMdm.kt
parents ebe8cd6c c62c41ac
...@@ -69,7 +69,7 @@ ...@@ -69,7 +69,7 @@
android:exported="true" /> android:exported="true" />
<activity <activity
android:name=".function.setting.ChangePwdActivity" android:name=".function.pwd.ChangePwdActivity"
android:excludeFromRecents="true" android:excludeFromRecents="true"
android:theme="@style/SettingTheme" /> android:theme="@style/SettingTheme" />
...@@ -98,7 +98,7 @@ ...@@ -98,7 +98,7 @@
android:excludeFromRecents="true" android:excludeFromRecents="true"
android:theme="@style/SettingTheme" /> android:theme="@style/SettingTheme" />
<activity <activity
android:name=".function.setting.SettingPwdActivity" android:name=".function.pwd.SettingPwdActivity"
android:excludeFromRecents="true" android:excludeFromRecents="true"
android:theme="@style/SettingTheme" /> android:theme="@style/SettingTheme" />
<activity <activity
...@@ -106,10 +106,20 @@ ...@@ -106,10 +106,20 @@
android:excludeFromRecents="true" android:excludeFromRecents="true"
android:theme="@style/SettingTheme"></activity> android:theme="@style/SettingTheme"></activity>
<activity <activity
android:name=".function.setting.AppUseActivity"
android:excludeFromRecents="true"
android:theme="@style/SettingTheme"></activity>
<activity
android:name=".ManagerAuthActivity" android:name=".ManagerAuthActivity"
android:excludeFromRecents="true" android:excludeFromRecents="true"
android:theme="@style/Theme.AppCompat.Light.NoActionBar" /> android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
<activity <activity
android:name=".function.pwd.EncryptedActivity"
android:excludeFromRecents="true"
android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
<activity
android:name=".function.setting.AppChooseActivity" android:name=".function.setting.AppChooseActivity"
android:excludeFromRecents="true" android:excludeFromRecents="true"
android:resizeableActivity="false" android:resizeableActivity="false"
......
...@@ -147,6 +147,7 @@ dependencies { ...@@ -147,6 +147,7 @@ dependencies {
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.1.1' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.1.1'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation "com.qmuiteam:qmui:1.3.0" implementation "com.qmuiteam:qmui:1.3.0"
implementation "org.jetbrains.kotlin:kotlin-reflect:1.3.61"
// implementation 'com.dou361.dialogui:jjdxm-dialogui:1.0.2' // implementation 'com.dou361.dialogui:jjdxm-dialogui:1.0.2'
} }
......
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!--按下点击-->
<item android:state_enabled="true" android:state_pressed="true">
<shape>
<stroke
android:width="1px"
android:color="#B22d80df" />
<solid android:color="#B22d80df" />
</shape>
</item>
<!--正常状态-->
<item android:state_enabled="false" android:state_pressed="false">
<shape>
<stroke
android:width="1px"
android:color="#B22d80df" />
<solid android:color="#662d80df" />
</shape>
</item>
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" <item android:state_checked="true"
android:drawable="@drawable/small_eyes" /><!--选中时效果--> android:drawable="@drawable/ic_visibility_off_gray_24dp" /><!--选中时效果-->
<item android:state_checked="false" <item android:state_checked="false"
android:drawable="@drawable/show_pwd" /><!--未选中时效果--> android:drawable="@drawable/ic_visibility_gray_24dp" /><!--未选中时效果-->
</selector> </selector>
\ No newline at end of file
<vector android:height="24dp" android:tint="#ABABAB"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M10,6L8.59,7.41 13.17,12l-4.58,4.59L10,18l6,-6z"/>
</vector>
<vector android:height="24dp" android:tint="#ABABAB"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M12,4.5C7,4.5 2.73,7.61 1,12c1.73,4.39 6,7.5 11,7.5s9.27,-3.11 11,-7.5c-1.73,-4.39 -6,-7.5 -11,-7.5zM12,17c-2.76,0 -5,-2.24 -5,-5s2.24,-5 5,-5 5,2.24 5,5 -2.24,5 -5,5zM12,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3 3,-1.34 3,-3 -1.34,-3 -3,-3z"/>
</vector>
<vector android:height="24dp" android:tint="#ABABAB"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M12,7c2.76,0 5,2.24 5,5 0,0.65 -0.13,1.26 -0.36,1.83l2.92,2.92c1.51,-1.26 2.7,-2.89 3.43,-4.75 -1.73,-4.39 -6,-7.5 -11,-7.5 -1.4,0 -2.74,0.25 -3.98,0.7l2.16,2.16C10.74,7.13 11.35,7 12,7zM2,4.27l2.28,2.28 0.46,0.46C3.08,8.3 1.78,10.02 1,12c1.73,4.39 6,7.5 11,7.5 1.55,0 3.03,-0.3 4.38,-0.84l0.42,0.42L19.73,22 21,20.73 3.27,3 2,4.27zM7.53,9.8l1.55,1.55c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.66 1.34,3 3,3 0.22,0 0.44,-0.03 0.65,-0.08l1.55,1.55c-0.67,0.33 -1.41,0.53 -2.2,0.53 -2.76,0 -5,-2.24 -5,-5 0,-0.79 0.2,-1.53 0.53,-2.2zM11.84,9.02l3.15,3.15 0.02,-0.16c0,-1.66 -1.34,-3 -3,-3l-0.17,0.01z"/>
</vector>
...@@ -92,6 +92,7 @@ ...@@ -92,6 +92,7 @@
android:layout_margin="10dp" android:layout_margin="10dp"
android:elevation="3dp" android:elevation="3dp"
android:layout_weight="1" android:layout_weight="1"
android:enabled="false"
android:background="#fafafa" android:background="#fafafa"
android:onClick="btnClick" android:onClick="btnClick"
android:text="确定" /> android:text="确定" />
...@@ -101,6 +102,7 @@ ...@@ -101,6 +102,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="48dp" android:layout_height="48dp"
style="@style/Widget.AppCompat.Button.Borderless" style="@style/Widget.AppCompat.Button.Borderless"
android:enabled="false"
android:layout_weight="1" android:layout_weight="1"
android:background="#fafafa" android:background="#fafafa"
android:layout_margin="10dp" android:layout_margin="10dp"
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:fitsSystemWindows="true" android:fitsSystemWindows="true"
android:orientation="vertical" android:orientation="vertical"
tools:context="com.android.launcher3.function.setting.ChangePwdActivity"> tools:context="com.android.launcher3.function.pwd.ChangePwdActivity">
<TextView <TextView
android:id="@+id/tv_setting_title" android:id="@+id/tv_setting_title"
...@@ -28,6 +28,8 @@ ...@@ -28,6 +28,8 @@
android:background="#FFFFFF" android:background="#FFFFFF"
android:hint="@string/edu_item_input_oldpwd" android:hint="@string/edu_item_input_oldpwd"
android:paddingLeft="16dp" android:paddingLeft="16dp"
android:maxLines="1"
android:maxLength="20"
android:paddingRight="16dp" android:paddingRight="16dp"
android:textColor="#363636" android:textColor="#363636"
android:inputType="textPassword" android:inputType="textPassword"
...@@ -45,6 +47,8 @@ ...@@ -45,6 +47,8 @@
android:layout_height="48dp" android:layout_height="48dp"
android:background="#FFFFFF" android:background="#FFFFFF"
android:hint="@string/edu_item_input_newpwd" android:hint="@string/edu_item_input_newpwd"
android:maxLines="1"
android:maxLength="20"
android:paddingLeft="16dp" android:paddingLeft="16dp"
android:inputType="textPassword" android:inputType="textPassword"
android:paddingRight="16dp" android:paddingRight="16dp"
...@@ -64,6 +68,8 @@ ...@@ -64,6 +68,8 @@
android:background="#FFFFFF" android:background="#FFFFFF"
android:inputType="textPassword" android:inputType="textPassword"
android:hint="@string/edu_item_input_newpwd_again" android:hint="@string/edu_item_input_newpwd_again"
android:maxLines="1"
android:maxLength="20"
android:paddingLeft="16dp" android:paddingLeft="16dp"
android:paddingRight="16dp" android:paddingRight="16dp"
android:textColor="#363636" android:textColor="#363636"
...@@ -93,7 +99,7 @@ ...@@ -93,7 +99,7 @@
android:layout_height="48dp" android:layout_height="48dp"
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
android:layout_marginBottom="10dp" android:layout_marginBottom="10dp"
android:background="@drawable/btn_select" android:background="@drawable/btn_ripple_bg"
android:elevation="3dp" android:elevation="3dp"
android:onClick="btnClick" android:onClick="btnClick"
android:gravity="center" android:gravity="center"
......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:orientation="vertical"
tools:context="com.android.launcher3.function.pwd.ChangePwdActivity">
<FrameLayout
android:id="@+id/ll_encrypted_parent"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
\ No newline at end of file
...@@ -41,24 +41,60 @@ ...@@ -41,24 +41,60 @@
<EditText <EditText
android:id="@+id/edit_pwd" android:id="@+id/edit_pwd"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@null" android:background="@null"
android:hint="请输入密码" android:hint="请输入密码"
android:inputType="textPassword" android:inputType="textPassword"
android:maxLength="16" android:maxLength="16"
android:maxLines="1" android:maxLines="1"
android:padding="12dp" android:padding="12dp"
android:textColorHint="#c2c2c2"
android:textColor="#c2c2c2" android:textColor="#c2c2c2"
android:textColorHint="#c2c2c2"
android:textSize="16dp" /> android:textSize="16dp" />
<CheckBox <CheckBox
android:id="@+id/cb_show_pwd" android:id="@+id/cb_show_pwd"
android:layout_width="40dp" android:layout_width="wrap_content"
android:layout_height="25dp" android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginRight="10dp"
android:button="@drawable/cb_selector"
android:checked="true" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#c2c2c2"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ffffff"
android:orientation="horizontal">
<EditText
android:id="@+id/edit_pwd_again"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@null"
android:hint="请再次输入密码"
android:inputType="textPassword"
android:maxLength="16"
android:maxLines="1"
android:padding="12dp"
android:textColor="#c2c2c2"
android:textColorHint="#c2c2c2"
android:textSize="16dp" />
<CheckBox
android:id="@+id/cb_show_pwd_again"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_marginRight="20dp" android:layout_marginRight="10dp"
android:button="@drawable/cb_selector" android:button="@drawable/cb_selector"
android:checked="true" /> android:checked="true" />
</LinearLayout> </LinearLayout>
......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:orientation="vertical"
tools:context="com.android.launcher3.function.setting.AppUseActivity">
<TextView
android:id="@+id/tv_setting_title"
android:layout_width="match_parent"
android:layout_height="48dp"
android:drawableStart="@mipmap/ic_back"
android:drawablePadding="10dp"
android:gravity="center_vertical"
android:onClick="close"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:text="@string/edu_item_about"
android:textColor="#363636"
android:textSize="16sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="@color/bg_white"
android:gravity="center_vertical"
android:onClick="more"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_app_use_time"
android:layout_width="wrap_content"
android:layout_height="48dp"
android:gravity="center_vertical"
android:onClick="close"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:text="@string/edu_item_app_use_last_day"
android:textColor="#363636"
android:textSize="16sp" />
<com.qmuiteam.qmui.widget.QMUIEmptyView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
<TextView
android:layout_width="wrap_content"
android:layout_height="48dp"
android:drawableEnd="@drawable/ic_chevron_right_gray_24dp"
android:gravity="center_vertical"
android:text="@string/edu_item_app_use_more"
android:textColor="#ABABAB"
android:textSize="15sp" />
</LinearLayout>
<com.secspace.lib.common.function.view.TimeProgress
android:id="@+id/time_progress"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/bg_white"
android:padding="10dp" />
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:orientation="vertical">
<TextView
android:id="@+id/tv_setting_title"
android:layout_width="match_parent"
android:layout_height="48dp"
android:drawableStart="@mipmap/ic_back"
android:drawablePadding="10dp"
android:gravity="center_vertical"
android:onClick="close"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:text="@string/edu_item_about"
android:textColor="#363636"
android:textSize="16sp" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#DDDFE1" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="#FFFFFF"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:paddingLeft="16dp"
android:text="问题一:"
android:textColor="#363636"
android:textSize="16sp"
android:textStyle="bold" />
<EditText
android:id="@+id/et_question1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF"
android:hint="@string/edu_item_input_encryted_question1"
android:maxLength="50"
android:maxLines="1"
android:inputType="text"
android:paddingRight="16dp"
android:textColor="#363636"
android:textColorHint="#8D8D8D"
android:textSize="16sp" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#DDDFE1" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="#FFFFFF"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:paddingLeft="16dp"
android:text="答案一:"
android:textColor="#363636"
android:textSize="16sp"
android:textStyle="bold" />
<EditText
android:id="@+id/et_answer1"
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="#FFFFFF"
android:hint="@string/edu_item_input_encryted_answer1"
android:maxLength="50"
android:maxLines="1"
android:inputType="text"
android:paddingRight="16dp"
android:textColor="#363636"
android:textColorHint="#8D8D8D"
android:textSize="16sp" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginBottom="5dp"
android:background="#DDDFE1" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="5dp"
android:background="#DDDFE1" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="#FFFFFF"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:paddingLeft="16dp"
android:text="问题二:"
android:textColor="#363636"
android:textSize="16sp"
android:textStyle="bold" />
<EditText
android:id="@+id/et_question2"
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="#FFFFFF"
android:hint="@string/edu_item_input_encryted_question2"
android:maxLength="50"
android:maxLines="1"
android:inputType="text"
android:paddingRight="16dp"
android:textColor="#363636"
android:textColorHint="#8D8D8D"
android:textSize="16sp" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#DDDFE1" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="#FFFFFF"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:paddingLeft="16dp"
android:text="答案二:"
android:textColor="#363636"
android:textSize="16sp"
android:textStyle="bold" />
<EditText
android:id="@+id/et_answer2"
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="#FFFFFF"
android:hint="@string/edu_item_input_encryted_answer2"
android:maxLength="50"
android:maxLines="1"
android:inputType="text"
android:paddingRight="16dp"
android:textColor="#363636"
android:textColorHint="#8D8D8D"
android:textSize="16sp" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#DDDFE1" />
<Button
android:id="@+id/btn_encrypted_set"
style="@style/Widget.AppCompat.Button.Borderless"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:background="@drawable/btn_ripple_bg"
android:elevation="3dp"
android:gravity="center"
android:text="@string/common_sure"
android:textColor="#fafafa"
android:textSize="16sp" />
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:orientation="vertical">
<TextView
android:id="@+id/tv_setting_title"
android:layout_width="match_parent"
android:layout_height="48dp"
android:drawableStart="@mipmap/ic_back"
android:drawablePadding="10dp"
android:gravity="center_vertical"
android:onClick="close"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:text="@string/edu_item_about"
android:textColor="#363636"
android:textSize="16sp" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#DDDFE1" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="#FFFFFF"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:paddingLeft="16dp"
android:text="问题一:"
android:textColor="#363636"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_question1"
android:layout_width="match_parent"
android:layout_height="48dp"
android:drawablePadding="10dp"
android:gravity="center_vertical"
android:paddingRight="16dp"
android:text="@string/edu_item_input_encryted_question1"
android:textColor="#363636"
android:textSize="16sp" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#DDDFE1" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="#FFFFFF"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:paddingLeft="16dp"
android:text="答案一:"
android:textColor="#363636"
android:textSize="16sp"
android:textStyle="bold" />
<EditText
android:id="@+id/et_answer1"
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="#FFFFFF"
android:hint="@string/edu_item_input_encryted_answer1"
android:maxLines="1"
android:maxLength="50"
android:inputType="text"
android:paddingRight="16dp"
android:textColor="#363636"
android:textColorHint="#8D8D8D"
android:textSize="16sp" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginBottom="5dp"
android:background="#DDDFE1" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="5dp"
android:background="#DDDFE1" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="#FFFFFF"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:paddingLeft="16dp"
android:text="问题二:"
android:textColor="#363636"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_question2"
android:layout_width="match_parent"
android:layout_height="48dp"
android:drawablePadding="10dp"
android:gravity="center_vertical"
android:paddingRight="16dp"
android:text="@string/edu_item_input_encryted_question1"
android:textColor="#363636"
android:textSize="16sp" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#DDDFE1" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="#FFFFFF"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:paddingLeft="16dp"
android:text="答案二:"
android:textColor="#363636"
android:textSize="16sp"
android:textStyle="bold" />
<EditText
android:id="@+id/et_answer2"
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="#FFFFFF"
android:hint="@string/edu_item_input_encryted_answer2"
android:maxLines="1"
android:inputType="text"
android:maxLength="50"
android:paddingRight="16dp"
android:textColor="#363636"
android:textColorHint="#8D8D8D"
android:textSize="16sp" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#DDDFE1" />
<Button
android:id="@+id/btn_encrypted_set"
style="@style/Widget.AppCompat.Button.Borderless"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:background="@drawable/btn_ripple_bg"
android:elevation="3dp"
android:gravity="center"
android:text="@string/common_sure"
android:textColor="#fafafa"
android:textSize="16sp" />
</LinearLayout>
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android" <resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="649227358658669779">"学习"</string> <string name="app_name" msgid="649227358658669779">"学习空间"</string>
<string name="folder_name" msgid="7371454440695724752"></string> <string name="folder_name" msgid="7371454440695724752"></string>
<string name="work_folder_name" msgid="3753320833950115786">"Work"</string> <string name="work_folder_name" msgid="3753320833950115786">"Work"</string>
<string name="activity_not_found" msgid="8071924732094499514">"未安装该应用。"</string> <string name="activity_not_found" msgid="8071924732094499514">"未安装该应用。"</string>
......
...@@ -305,25 +305,22 @@ ...@@ -305,25 +305,22 @@
<string name="work_open">open</string> <string name="work_open">open</string>
<string name="work_back">back</string> <string name="work_back">back</string>
<string name="open_start_tip">开启后[学习帮]固定在前台不可退出,关闭可长按home退出到普通桌面,配置完成后请退出返回到移动终端管控软件主页</string> <string name="open_new_app_tip">打开开关后,新安装的应用将自动添加到学习空间桌面</string>
<string name="open_new_app_tip">打开开关后,新安装的应用将自动添加到学习帮桌面</string>
<string name="open">打开</string> <string name="open">打开</string>
<string name="close">关闭</string> <string name="close">关闭</string>
<string name="developing">开发中</string> <string name="developing">开发中</string>
<string name="tip">提示</string> <string name="tip">提示</string>
<string name="launcher_setting_tip">安装完成,可长按桌面进行桌面配置</string> <string name="launcher_setting_tip">安装完成,可长按桌面进行桌面配置</string>
<string name="ok">好的</string> <string name="ok">好的</string>
<string name="delete_account_tip">请先去“设置--账户” 中的所有账户和华为账户先删除,在启动学习帮</string>
<string name="go_delete">去删除</string> <string name="go_delete">去删除</string>
<string name="set_auto_start_tip">是否将学习帮设为自启状态</string>
<string name="not_user_prmission">当前设备无权限使用,请联系管理员</string> <string name="not_user_prmission">当前设备无权限使用,请联系管理员</string>
<string name="work_sure">sure</string> <string name="work_sure">sure</string>
<string name="edu_version">%1$s</string> <string name="edu_version">%1$s</string>
<string name="edu_check_update">正在检测更新,请稍后</string> <string name="edu_check_update">正在检测更新,请稍后</string>
<string name="edu_uninstall">卸载中,请稍后</string> <string name="edu_uninstall">卸载中,请稍后</string>
<string name="edu_reinforce">因部分系统版本自身原因,从学习内设置回到空间主页时,可能会出现提示设置默认桌面的问题,可在此处确认进行加固处理</string> <string name="edu_reinforce">因部分系统版本自身原因,从学习空间内设置回到空间主页时,可能会出现提示设置默认桌面的问题,可在此处确认进行加固处理</string>
<string name="edu_uninstall_tip">继续操作将卸载学习,请确认是否继续</string> <string name="edu_uninstall_tip">继续操作将卸载学习空间,请确认是否继续</string>
<string name="edu_title_setting">设置</string> <string name="edu_title_setting">设置</string>
<string name="edu_item_version">版本号</string> <string name="edu_item_version">版本号</string>
...@@ -364,5 +361,26 @@ ...@@ -364,5 +361,26 @@
<string name="edu_item_input_pwd_different">两次输入密码不一致,请重新输入</string> <string name="edu_item_input_pwd_different">两次输入密码不一致,请重新输入</string>
<string name="edu_item_input_pwd_change_success">密码修改成功</string> <string name="edu_item_input_pwd_change_success">密码修改成功</string>
<string name="edu_item_input_encryted_set">设置密保</string>
<string name="edu_item_input_encryted_verfiy">验证密保</string>
<string name="edu_item_input_encryted_question1">请输入第一个问题</string>
<string name="edu_item_input_encryted_question2">请输入第二个问题</string>
<string name="edu_item_input_encryted_answer1">请输入第一个答案</string>
<string name="edu_item_input_encryted_answer2">请输入第二个答案</string>
<string name="edu_item_input_question_null">问题为空</string>
<string name="edu_item_input_answer_null">答案为空</string>
<string name="edu_item_input_encryted_set_success">密保设置成功</string>
<string name="edu_item_input_encryted_ver_success">密保验证成功</string>
<string name="edu_item_input_encryted_error">未获取到密保答案</string>
<string name="edu_item_input_answer1_error">问题一答案错误</string>
<string name="edu_item_input_answer2_error">问题二答案错误</string>
<string name="edu_item_input_encryted_title">请输入密保答案用于修改密码</string>
<string name="edu_item_app_use_title">应用使用情况</string>
<string name="edu_item_app_use_last_day">最近一天使用时长: %1$s分钟</string>
<string name="edu_item_app_use_more">更多</string>
</resources> </resources>
...@@ -5,6 +5,7 @@ import android.content.Context; ...@@ -5,6 +5,7 @@ import android.content.Context;
import com.secspace.lib.common.dialog.other.DialogUIUtils; import com.secspace.lib.common.dialog.other.DialogUIUtils;
import com.secspace.lib.common.function.ActivationHelper; import com.secspace.lib.common.function.ActivationHelper;
import com.secspace.lib.common.function.database.DatabaseManager;
import com.secspace.lib.common.update.CheckUpdateCore; import com.secspace.lib.common.update.CheckUpdateCore;
import com.secspace.lib.common.utils.DpmHelper; import com.secspace.lib.common.utils.DpmHelper;
...@@ -20,5 +21,6 @@ public class App extends Application { ...@@ -20,5 +21,6 @@ public class App extends Application {
dpmHelper.initMiddleWare(); dpmHelper.initMiddleWare();
} }
DialogUIUtils.init(mApp); DialogUIUtils.init(mApp);
DatabaseManager.Companion.getInstance(mApp).init();
} }
} }
...@@ -61,7 +61,7 @@ import android.os.SystemClock; ...@@ -61,7 +61,7 @@ import android.os.SystemClock;
import android.os.Trace; import android.os.Trace;
import android.os.UserHandle; import android.os.UserHandle;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.text.InputType; import android.text.Editable;
import android.text.Selection; import android.text.Selection;
import android.text.SpannableStringBuilder; import android.text.SpannableStringBuilder;
import android.text.TextUtils; import android.text.TextUtils;
...@@ -160,6 +160,8 @@ import com.secspace.lib.common.event.RefreshWorkSpaceEvent; ...@@ -160,6 +160,8 @@ import com.secspace.lib.common.event.RefreshWorkSpaceEvent;
import com.secspace.lib.common.function.ActivationHelper; import com.secspace.lib.common.function.ActivationHelper;
import com.secspace.lib.common.function.DialogManager; import com.secspace.lib.common.function.DialogManager;
import com.secspace.lib.common.function.WorkManager; import com.secspace.lib.common.function.WorkManager;
import com.secspace.lib.common.function.model.Encrypted;
import com.secspace.lib.common.update.CheckUpdateCore;
import com.secspace.lib.common.update.CheckUpdateCore; import com.secspace.lib.common.update.CheckUpdateCore;
import com.secspace.lib.common.utils.ActivityHelper; import com.secspace.lib.common.utils.ActivityHelper;
import com.secspace.lib.common.utils.DeviceUtil; import com.secspace.lib.common.utils.DeviceUtil;
...@@ -168,8 +170,10 @@ import com.secspace.lib.common.utils.FileUtil; ...@@ -168,8 +170,10 @@ import com.secspace.lib.common.utils.FileUtil;
import com.secspace.lib.common.utils.ImeiCheckUtils; import com.secspace.lib.common.utils.ImeiCheckUtils;
import com.secspace.lib.common.utils.InputUtil; import com.secspace.lib.common.utils.InputUtil;
import com.secspace.lib.common.utils.IntentUtil; import com.secspace.lib.common.utils.IntentUtil;
import com.secspace.lib.common.utils.JsonUtil;
import com.secspace.lib.common.utils.Prefs; import com.secspace.lib.common.utils.Prefs;
import com.secspace.lib.common.utils.ToastUtil; import com.secspace.lib.common.utils.ToastUtil;
import com.secspace.lib.common.utils.UtilsKt;
import com.secspace.mdmengine.api.manager.MdmFactoryManager; import com.secspace.mdmengine.api.manager.MdmFactoryManager;
import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.EventBus;
...@@ -406,6 +410,8 @@ public class Launcher extends BaseActivity ...@@ -406,6 +410,8 @@ public class Launcher extends BaseActivity
private RotationPrefChangeHandler mRotationPrefChangeHandler; private RotationPrefChangeHandler mRotationPrefChangeHandler;
private String mWallpaperPath; private String mWallpaperPath;
private String question;
private String answer1;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
...@@ -1200,25 +1206,17 @@ public class Launcher extends BaseActivity ...@@ -1200,25 +1206,17 @@ public class Launcher extends BaseActivity
if (mLauncherCallbacks != null) { if (mLauncherCallbacks != null) {
mLauncherCallbacks.onResume(); mLauncherCallbacks.onResume();
} }
ActivationHelper.INSTANCE.active(this, new ActivationHelper.ActivationListener() { WorkManager.INSTANCE.enter(Launcher.this);
@Override
public void activationFailed() {
}
@Override
public void activated() {
activationNext();
}
}, false);
} }
private void activationNext() { public static void forceReload() {
LauncherAppState app = LauncherAppState.getInstanceNoCreate(); LauncherAppState app = LauncherAppState.getInstanceNoCreate();
if (app != null) { if (app != null) {
app.getModel().forceReload(); LauncherModel model = app.getModel();
if (model != null) {
model.forceReload();
}
} }
WorkManager.INSTANCE.enter(this);
} }
...@@ -3110,12 +3108,17 @@ public class Launcher extends BaseActivity ...@@ -3110,12 +3108,17 @@ public class Launcher extends BaseActivity
} }
private void showPwdDialog() { private void showPwdDialog() {
DialogManager.INSTANCE.showPwdDialog(this, "请输入密码" ,new DialogManager.PwdListener(){ DialogManager.INSTANCE.showPwdDialog(this, "请输入密码", new DialogManager.PwdCanVerListener() {
@Override
public void onNeutral() {
showEncryptedVerDialog();
}
@Override @Override
public void onPositive(View view) { public void onPositive(View view) {
InputUtil.closeSoftInput(getApplicationContext(), view); InputUtil.closeSoftInput(getApplicationContext(), view);
if (TextUtils.equals(((EditText)view).getText().toString(), Prefs.getLoginPwd(mAppContext))) { if (TextUtils.equals(((EditText) view).getText().toString(), Prefs.getLoginPwd(mAppContext))) {
IntentUtil.startExitService(mAppContext); IntentUtil.startExitService(mAppContext);
} else { } else {
DialogUIUtils.showToastCenter("密码错误"); DialogUIUtils.showToastCenter("密码错误");
...@@ -3129,6 +3132,51 @@ public class Launcher extends BaseActivity ...@@ -3129,6 +3132,51 @@ public class Launcher extends BaseActivity
}); });
} }
private void showEncryptedVerDialog() {
String encryptedStr = Prefs.getEncrypted(mAppContext);
if (TextUtils.isEmpty(encryptedStr)) {
DialogUIUtils.showToastCenter("请先设置密保");
return;
}
Encrypted encrypted = JsonUtil.fromJson(encryptedStr, Encrypted.class);
if (TextUtils.equals(encrypted.getQuestion1(), question)) {
question = encrypted.getQuestion2();
answer1 = encrypted.getAnswer2();
} else {
question = encrypted.getQuestion1();
answer1 = encrypted.getAnswer1();
}
DialogManager.INSTANCE.showEncryptedVerDialog(this, getString(R.string.edu_item_input_encryted_title), question, new DialogManager.PwdListener() {
@Override
public void onPositive(View view) {
InputUtil.closeSoftInput(getApplicationContext(), view);
EditText editText = (EditText) view;
Editable editable = editText.getText();
if (editable == null || TextUtils.isEmpty(editable.toString())) {
DialogUIUtils.showToastCenter("密保答案为空");
return;
}
String answer = editable.toString();
answer = UtilsKt.encrypt(answer);
if (TextUtils.equals(answer1, answer)) {
Intent intent = new Intent(mAppContext, PwdPinSetPwdActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
return;
}
DialogUIUtils.showToastCenter("密保答案错误");
}
@Override
public void onNegative() {
showEncryptedVerDialog();
}
});
}
@Override @Override
public boolean dispatchTouchEvent(MotionEvent ev) { public boolean dispatchTouchEvent(MotionEvent ev) {
mLastDispatchTouchEventX = ev.getX(); mLastDispatchTouchEventX = ev.getX();
......
...@@ -80,7 +80,6 @@ import com.android.launcher3.util.Preconditions; ...@@ -80,7 +80,6 @@ import com.android.launcher3.util.Preconditions;
import com.android.launcher3.util.Provider; import com.android.launcher3.util.Provider;
import com.android.launcher3.util.Thunk; import com.android.launcher3.util.Thunk;
import com.android.launcher3.util.ViewOnDrawExecutor; import com.android.launcher3.util.ViewOnDrawExecutor;
import com.secspace.lib.common.env.Packages;
import java.io.FileDescriptor; import java.io.FileDescriptor;
import java.io.PrintWriter; import java.io.PrintWriter;
......
...@@ -5,21 +5,29 @@ import android.content.Context; ...@@ -5,21 +5,29 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.text.Editable;
import android.text.TextUtils; import android.text.TextUtils;
import android.view.View; import android.view.View;
import android.widget.EditText; import android.widget.EditText;
import com.android.launcher3.function.pwd.PwdPinSetPwdActivity;
import com.android.launcher3.function.setting.SettingAdminActivity; import com.android.launcher3.function.setting.SettingAdminActivity;
import com.android.launcher3.settings.ErrorTimeHelper; import com.android.launcher3.settings.ErrorTimeHelper;
import com.secspace.lib.common.dialog.other.DialogUIUtils; import com.secspace.lib.common.dialog.other.DialogUIUtils;
import com.secspace.lib.common.function.DialogManager; import com.secspace.lib.common.function.DialogManager;
import com.secspace.lib.common.function.model.Encrypted;
import com.secspace.lib.common.utils.InputUtil; import com.secspace.lib.common.utils.InputUtil;
import com.secspace.lib.common.utils.JsonUtil;
import com.secspace.lib.common.utils.Prefs; import com.secspace.lib.common.utils.Prefs;
import com.secspace.lib.common.utils.ToastUtil; import com.secspace.lib.common.utils.ToastUtil;
import com.secspace.lib.common.utils.UtilsKt;
public class ManagerAuthActivity extends BaseActivity { public class ManagerAuthActivity extends BaseActivity {
protected Context mAppContext; protected Context mAppContext;
private String question;
private String answer1;
@Override @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
...@@ -29,14 +37,19 @@ public class ManagerAuthActivity extends BaseActivity { ...@@ -29,14 +37,19 @@ public class ManagerAuthActivity extends BaseActivity {
} }
private void showPwdDialog() { private void showPwdDialog() {
DialogManager.INSTANCE.showPwdDialog(this, "请输入密码" ,new DialogManager.PwdListener(){ DialogManager.INSTANCE.showPwdDialog(this, "请输入密码", new DialogManager.PwdCanVerListener() {
@Override
public void onNeutral() {
showEncryptedVerDialog();
}
@Override @Override
public void onPositive(View view) { public void onPositive(View view) {
EditText editText = (EditText) view; EditText editText = (EditText) view;
InputUtil.closeSoftInput(getApplicationContext(), editText); InputUtil.closeSoftInput(getApplicationContext(), editText);
boolean canInputPwd = ErrorTimeHelper.getInstance(mAppContext).canInputPwd(); boolean canInputPwd = ErrorTimeHelper.getInstance(mAppContext).canInputPwd();
if (canInputPwd){ if (canInputPwd) {
if (TextUtils.equals(editText.getText().toString(), Prefs.getLoginPwd(mAppContext))) { if (TextUtils.equals(editText.getText().toString(), Prefs.getLoginPwd(mAppContext))) {
finish(); finish();
ErrorTimeHelper.getInstance(mAppContext).resetLockTimeAndCount(); ErrorTimeHelper.getInstance(mAppContext).resetLockTimeAndCount();
...@@ -48,14 +61,63 @@ public class ManagerAuthActivity extends BaseActivity { ...@@ -48,14 +61,63 @@ public class ManagerAuthActivity extends BaseActivity {
ErrorTimeHelper.getInstance(mAppContext).addErrorCount(); ErrorTimeHelper.getInstance(mAppContext).addErrorCount();
finish(); finish();
} }
}else { } else {
ToastUtil.showShort(mAppContext,"请在"+ ErrorTimeHelper.getInstance(mAppContext).getCountDownTime()+"秒后重试"); ToastUtil.showShort(mAppContext, "请在" + ErrorTimeHelper.getInstance(mAppContext).getCountDownTime() + "秒后重试");
finish();
}
}
@Override
public void onNegative() {
finish();
}
});
}
private void showEncryptedVerDialog() {
String encryptedStr = Prefs.getEncrypted(mAppContext);
if (TextUtils.isEmpty(encryptedStr)) {
DialogUIUtils.showToastCenter("请先设置密保");
finish();
return;
}
Encrypted encrypted = JsonUtil.fromJson(encryptedStr, Encrypted.class);
if (TextUtils.equals(encrypted.getQuestion1(), question)) {
question = encrypted.getQuestion2();
answer1 = encrypted.getAnswer2();
} else {
question = encrypted.getQuestion1();
answer1 = encrypted.getAnswer1();
}
DialogManager.INSTANCE.showEncryptedVerDialog(this, getString(R.string.edu_item_input_encryted_title), question, new DialogManager.PwdListener() {
@Override
public void onPositive(View view) {
EditText editText = (EditText) view;
InputUtil.closeSoftInput(getApplicationContext(), editText);
Editable editable = editText.getText();
if (editable == null || TextUtils.isEmpty(editable.toString())) {
DialogUIUtils.showToastCenter("密保答案为空");
finish();
return;
}
String answer = editable.toString();
answer = UtilsKt.encrypt(answer);
if (TextUtils.equals(answer1, answer)) {
Intent intent = new Intent(mAppContext, PwdPinSetPwdActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish(); finish();
return;
} }
DialogUIUtils.showToastCenter("密保答案错误");
finish();
} }
@Override @Override
public void onNegative() { public void onNegative() {
showEncryptedVerDialog();
} }
}); });
} }
......
...@@ -370,13 +370,17 @@ public class DragController implements DragDriver.EventListener, TouchController ...@@ -370,13 +370,17 @@ public class DragController implements DragDriver.EventListener, TouchController
@Override @Override
public void onDriverDragEnd(float x, float y) { public void onDriverDragEnd(float x, float y) {
DropTarget dropTarget; DropTarget dropTarget;
Runnable flingAnimation = mFlingToDeleteHelper.getFlingAnimation(mDragObject); Runnable flingAnimation = null;
if (flingAnimation != null) { // 取消快速滑动删除
dropTarget = mFlingToDeleteHelper.getDropTarget(); // Runnable flingAnimation = mFlingToDeleteHelper.getFlingAnimation(mDragObject);
} else { // if (flingAnimation != null) {
dropTarget = findDropTarget((int) x, (int) y, mCoordinatesTemp); // Log.e("TAG1", "onDriverDragEnd: ifififif" );
} // dropTarget = mFlingToDeleteHelper.getDropTarget();
// } else {
// Log.e("TAG1", "onDriverDragEnd: elseelse" );
// dropTarget = findDropTarget((int) x, (int) y, mCoordinatesTemp);
// }
dropTarget = findDropTarget((int) x, (int) y, mCoordinatesTemp);
drop(dropTarget, flingAnimation); drop(dropTarget, flingAnimation);
endDrag(); endDrag();
......
package com.android.launcher3.function.setting package com.android.launcher3.function.pwd
import android.content.Context import android.content.Context
import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.text.SpannableString import android.text.SpannableString
import android.text.Spanned import android.text.Spanned
...@@ -8,18 +9,26 @@ import android.text.SpannedString ...@@ -8,18 +9,26 @@ import android.text.SpannedString
import android.text.TextUtils import android.text.TextUtils
import android.text.style.AbsoluteSizeSpan import android.text.style.AbsoluteSizeSpan
import android.view.View import android.view.View
import android.view.inputmethod.InputMethodManager
import android.widget.EditText import android.widget.EditText
import com.android.launcher3.BaseActivity import com.android.launcher3.BaseActivity
import com.android.launcher3.R import com.android.launcher3.R
import com.android.launcher3.function.pwd.PwdPinSetPwdActivity
import com.android.launcher3.settings.ErrorTimeHelper import com.android.launcher3.settings.ErrorTimeHelper
import com.secspace.lib.common.dialog.other.DialogUIUtils
import com.secspace.lib.common.function.DialogManager
import com.secspace.lib.common.function.model.Encrypted
import com.secspace.lib.common.utils.InputUtil
import com.secspace.lib.common.utils.JsonUtil
import com.secspace.lib.common.utils.Prefs import com.secspace.lib.common.utils.Prefs
import com.secspace.lib.common.utils.ToastUtil import com.secspace.lib.common.utils.encrypt
import kotlinx.android.synthetic.main.activity_change_pwd.* import kotlinx.android.synthetic.main.activity_change_pwd.*
import kotlinx.android.synthetic.main.activity_setting.tv_setting_title import kotlinx.android.synthetic.main.activity_setting.tv_setting_title
class ChangePwdActivity : BaseActivity() { class ChangePwdActivity : BaseActivity() {
private var mContext: Context? = null private var mContext: Context? = null
private var question: String? = null
private var answer1: String? = null
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
...@@ -36,7 +45,7 @@ class ChangePwdActivity : BaseActivity() { ...@@ -36,7 +45,7 @@ class ChangePwdActivity : BaseActivity() {
setHintSize(et_new_pwd_again, getString(R.string.edu_item_input_newpwd_again)) setHintSize(et_new_pwd_again, getString(R.string.edu_item_input_newpwd_again))
tv_confir_pwd_protection.setOnClickListener { tv_confir_pwd_protection.setOnClickListener {
ToastUtil.showShort(this@ChangePwdActivity, R.string.edu_toast_wait) showEncryptedVerDialog()
} }
} }
...@@ -48,41 +57,83 @@ class ChangePwdActivity : BaseActivity() { ...@@ -48,41 +57,83 @@ class ChangePwdActivity : BaseActivity() {
} }
fun btnClick(v: View) { fun btnClick(v: View) {
val imm: InputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(window.decorView.windowToken, 0)
val originalPwd = et_old_pwd.text.toString() val originalPwd = et_old_pwd.text.toString()
val newPwd = et_new_pwd.text.toString() val newPwd = et_new_pwd.text.toString()
val confirmNewPwd = et_new_pwd_again.text.toString() val confirmNewPwd = et_new_pwd_again.text.toString()
if (!ErrorTimeHelper.getInstance(this).canShowDialog()) { if (!ErrorTimeHelper.getInstance(this).canShowDialog()) {
ToastUtil.showShort(this, String.format(getString(R.string.edu_item_input_lock), ErrorTimeHelper.getInstance(this).countDownTime)) DialogUIUtils.showToastCenter(String.format(getString(R.string.edu_item_input_lock), ErrorTimeHelper.getInstance(this).countDownTime))
return return
} }
if (newPwd.isEmpty()|| newPwd.length < PwdPinSetPwdActivity.PWD_TINY_LENGTH) { if (newPwd.isEmpty()|| newPwd.length < PwdPinSetPwdActivity.PWD_TINY_LENGTH) {
ToastUtil.showShort(this, R.string.edu_item_input_newpwd_null) DialogUIUtils.showToastCenter(R.string.edu_item_input_newpwd_null)
return return
} }
if (confirmNewPwd.isEmpty() || confirmNewPwd.length < PwdPinSetPwdActivity.PWD_TINY_LENGTH) { if (confirmNewPwd.isEmpty() || confirmNewPwd.length < PwdPinSetPwdActivity.PWD_TINY_LENGTH) {
ToastUtil.showShort(this, R.string.edu_item_input_newpwd_again_null) DialogUIUtils.showToastCenter(R.string.edu_item_input_newpwd_again_null)
return return
} }
if (originalPwd.isEmpty()) { if (originalPwd.isEmpty()) {
ToastUtil.showShort(this, R.string.edu_item_input_oldpwd_null) DialogUIUtils.showToastCenter(R.string.edu_item_input_oldpwd_null)
return return
} }
if (!TextUtils.equals(originalPwd, Prefs.getLoginPwd(this))) { if (!TextUtils.equals(originalPwd, Prefs.getLoginPwd(this))) {
ToastUtil.showShort(this, R.string.edu_item_input_pwd_error) DialogUIUtils.showToastCenter(R.string.edu_item_input_pwd_error)
ErrorTimeHelper.getInstance(this).addErrorCount() ErrorTimeHelper.getInstance(this).addErrorCount()
return return
} }
if (!TextUtils.equals(newPwd, confirmNewPwd)) { if (!TextUtils.equals(newPwd, confirmNewPwd)) {
ToastUtil.showShort(this, R.string.edu_item_input_pwd_different) DialogUIUtils.showToastCenter(R.string.edu_item_input_pwd_different)
return return
} }
ToastUtil.showShort(this, R.string.edu_item_input_pwd_change_success) DialogUIUtils.showToastCenter(R.string.edu_item_input_pwd_change_success)
Prefs.setLoginPwd(this, newPwd) Prefs.setLoginPwd(this, newPwd)
//如果存在输错密码多次的情况下重置密码 //如果存在输错密码多次的情况下重置密码
ErrorTimeHelper.getInstance(this).resetLockTimeAndCount() ErrorTimeHelper.getInstance(this).resetLockTimeAndCount()
finish() finish()
} }
private fun showEncryptedVerDialog() {
val encryptedStr = Prefs.getEncrypted(mAppContext)
if (TextUtils.isEmpty(encryptedStr)) {
DialogUIUtils.showToastCenter("请先设置密保")
return
}
val (question1, answer11, question2, answer2) = JsonUtil.fromJson(encryptedStr, Encrypted::class.java)
if (TextUtils.equals(question1, question)) {
question = question2
answer1 = answer2
} else {
question = question1
answer1 = answer11
}
DialogManager.showEncryptedVerDialog(this, getString(R.string.edu_item_input_encryted_title), question, object : DialogManager.PwdListener {
override fun onPositive(view: View?) {
val editText = view as EditText?
InputUtil.closeSoftInput(applicationContext, editText)
val editable = editText!!.text
if (editable == null || TextUtils.isEmpty(editable.toString())) {
DialogUIUtils.showToastCenter(R.string.edu_item_input_encryted_title)
return
}
var answer = editable.toString()
answer = encrypt(answer)
if (TextUtils.equals(answer1, answer)) {
val intent = Intent(mAppContext, PwdPinSetPwdActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)
return
}
DialogUIUtils.showToastCenter("密保答案错误")
}
override fun onNegative() {
showEncryptedVerDialog()
}
})
}
fun close(view: View?) { fun close(view: View?) {
finish() finish()
} }
......
package com.android.launcher3.function.pwd
import android.content.Context
import android.os.Bundle
import android.support.v4.app.Fragment
import android.support.v4.app.FragmentManager
import android.support.v4.app.FragmentTransaction
import android.view.View
import com.android.launcher3.BaseActivity
import com.android.launcher3.R
import com.android.launcher3.function.pwd.fragment.EncryptedSetFragment
import com.android.launcher3.function.pwd.fragment.EncryptedVerifyFragment
import com.secspace.lib.common.utils.Prefs
class EncryptedActivity : BaseActivity() {
private var mContext: Context? = null
private val encryptedSet = EncryptedSetFragment()
private val encryptedVer = EncryptedVerifyFragment()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setAndroidNativeLightStatusBar(true)
setContentView(R.layout.activity_encrypted)
mContext = this
val from = intent.getStringExtra("from")
if(from == null){
val encrypted = Prefs.getEncrypted(mContext)
if (encrypted == "") {
replaceFragment(encryptedSet)
} else {
replaceFragment(encryptedVer)
}
return
}
replaceFragment(encryptedSet)
}
private fun replaceFragment(fragment: Fragment) {
val fragmentManager: FragmentManager = supportFragmentManager
val fragmentTransaction: FragmentTransaction = fragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.ll_encrypted_parent, fragment, "")
fragmentTransaction.addToBackStack(null)
fragmentTransaction.commit()
}
fun close(view: View?) {
finish()
}
override fun onBackPressed() {
super.onBackPressed()
finish()
}
}
\ No newline at end of file
package com.android.launcher3.function.pwd; package com.android.launcher3.function.pwd;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.text.InputType; import android.text.InputType;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import android.view.View; import android.view.View;
import android.view.Window; import android.view.inputmethod.InputMethodManager;
import android.view.WindowManager;
import android.widget.Button; import android.widget.Button;
import android.widget.CheckBox; import android.widget.CheckBox;
import android.widget.CompoundButton; import android.widget.CompoundButton;
...@@ -22,9 +18,8 @@ import android.widget.TextView; ...@@ -22,9 +18,8 @@ import android.widget.TextView;
import com.android.launcher3.BaseActivity; import com.android.launcher3.BaseActivity;
import com.android.launcher3.R; import com.android.launcher3.R;
import com.android.launcher3.settings.BlankActivity; import com.android.launcher3.settings.BlankActivity;
import com.secspace.lib.common.dialog.other.DialogUIUtils;
import com.secspace.lib.common.utils.Prefs; import com.secspace.lib.common.utils.Prefs;
import com.secspace.lib.common.utils.ToastUtil;
import java.util.regex.Pattern; import java.util.regex.Pattern;
...@@ -49,10 +44,12 @@ public class PwdPinSetPwdActivity extends BaseActivity implements View.OnClickLi ...@@ -49,10 +44,12 @@ public class PwdPinSetPwdActivity extends BaseActivity implements View.OnClickLi
* 密码短程度 * 密码短程度
*/ */
public static final int PWD_TINY_LENGTH = 6; public static final int PWD_TINY_LENGTH = 6;
EditText mEditPwd; private EditText mEditPwd;
CheckBox mCbShowPwd; private CheckBox mCbShowPwd;
Button mBtSure; private EditText mEditPwdAgain;
TextView mTvtip; private CheckBox mCbShowPwdAgain;
private Button mBtSure;
private TextView mTvtip;
@Override @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
...@@ -63,11 +60,14 @@ public class PwdPinSetPwdActivity extends BaseActivity implements View.OnClickLi ...@@ -63,11 +60,14 @@ public class PwdPinSetPwdActivity extends BaseActivity implements View.OnClickLi
private void initView() { private void initView() {
mEditPwd = findViewById(R.id.edit_pwd); mEditPwd = findViewById(R.id.edit_pwd);
mEditPwdAgain = findViewById(R.id.edit_pwd_again);
mCbShowPwd = findViewById(R.id.cb_show_pwd); mCbShowPwd = findViewById(R.id.cb_show_pwd);
mCbShowPwdAgain = findViewById(R.id.cb_show_pwd_again);
mBtSure = findViewById(R.id.btn_sure); mBtSure = findViewById(R.id.btn_sure);
mTvtip = findViewById(R.id.tv_tip); mTvtip = findViewById(R.id.tv_tip);
mBtSure.setOnClickListener(this); mBtSure.setOnClickListener(this);
mCbShowPwd.setOnCheckedChangeListener(this); mCbShowPwd.setOnCheckedChangeListener(this);
mCbShowPwdAgain.setOnCheckedChangeListener(this);
} }
private void startLauncher() { private void startLauncher() {
...@@ -87,19 +87,23 @@ public class PwdPinSetPwdActivity extends BaseActivity implements View.OnClickLi ...@@ -87,19 +87,23 @@ public class PwdPinSetPwdActivity extends BaseActivity implements View.OnClickLi
public void onClick(View v) { public void onClick(View v) {
switch (v.getId()) { switch (v.getId()) {
case R.id.btn_sure: case R.id.btn_sure:
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0);
String pwd = String.valueOf(mEditPwd.getText()); String pwd = String.valueOf(mEditPwd.getText());
if (TextUtils.isEmpty(pwd)) { String pwdAgain = String.valueOf(mEditPwdAgain.getText());
ToastUtil.showShort(this, "密码不能为空"); if (TextUtils.isEmpty(pwd) || (pwd.length() < PWD_TINY_LENGTH)) {
DialogUIUtils.showToastCenter("密码为空或长度小于6位");
return; return;
} }
if (pwd.length() < PWD_TINY_LENGTH) { if (TextUtils.isEmpty(pwdAgain) || (pwdAgain.length() < PWD_TINY_LENGTH)) {
ToastUtil.showShort(this, "密码至少为6位"); DialogUIUtils.showToastCenter("确认密码为空或长度小于6位");
return;
}
if (!TextUtils.equals(pwd, pwdAgain)) {
DialogUIUtils.showToastCenter("两次输入密码不同");
return; return;
} }
// if (pwd.length() > PWD_MAX_LENGTH) {
// ToastUtil.showShort(this, "密码不能超过16位");
// return;
// }
Log.i(TAG, "matches: " + datePatt.matcher(pwd).matches()); Log.i(TAG, "matches: " + datePatt.matcher(pwd).matches());
// if (!datePatt.matcher(pwd).matches()) { // if (!datePatt.matcher(pwd).matches()) {
// ToastUtil.showShort(this, "新密码必须为数字、字母或常用符号的8-16位组合"); // ToastUtil.showShort(this, "新密码必须为数字、字母或常用符号的8-16位组合");
...@@ -115,11 +119,22 @@ public class PwdPinSetPwdActivity extends BaseActivity implements View.OnClickLi ...@@ -115,11 +119,22 @@ public class PwdPinSetPwdActivity extends BaseActivity implements View.OnClickLi
@Override @Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) { switch (buttonView.getId()) {
Log.i(TAG, "onCheckedChanged: TYPE_TEXT_VARIATION_PASSWORD"); case R.id.cb_show_pwd:
mEditPwd.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); if (isChecked) {
} else { mEditPwd.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
mEditPwd.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); } else {
mEditPwd.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
}
break;
case R.id.cb_show_pwd_again:
if (isChecked) {
mEditPwdAgain.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
} else {
mEditPwdAgain.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
}
break;
} }
} }
} }
package com.android.launcher3.function.setting package com.android.launcher3.function.pwd
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.text.TextUtils
import android.view.View import android.view.View
import android.widget.EditText
import android.widget.GridLayout import android.widget.GridLayout
import com.android.launcher3.BaseActivity import com.android.launcher3.BaseActivity
import com.android.launcher3.R import com.android.launcher3.R
import com.android.launcher3.mdm.DisableCompat import com.android.launcher3.mdm.DisableCompat
import com.android.launcher3.settings.Contants
import com.qmuiteam.qmui.widget.grouplist.QMUICommonListItemView import com.qmuiteam.qmui.widget.grouplist.QMUICommonListItemView
import com.qmuiteam.qmui.widget.grouplist.QMUIGroupListView import com.qmuiteam.qmui.widget.grouplist.QMUIGroupListView
import com.secspace.lib.common.utils.PkgManager import com.secspace.lib.common.dialog.other.DialogUIUtils
import com.secspace.lib.common.utils.Prefs import com.secspace.lib.common.function.DialogManager.PwdListener
import com.secspace.lib.common.utils.ToastUtil import com.secspace.lib.common.function.DialogManager.showEncryptedVerDialog
import com.secspace.lib.common.utils.dp2px import com.secspace.lib.common.function.model.Encrypted
import com.secspace.lib.common.utils.*
import kotlinx.android.synthetic.main.activity_setting.* import kotlinx.android.synthetic.main.activity_setting.*
class SettingPwdActivity : BaseActivity(){ class SettingPwdActivity : BaseActivity(){
...@@ -46,12 +48,10 @@ class SettingPwdActivity : BaseActivity(){ ...@@ -46,12 +48,10 @@ class SettingPwdActivity : BaseActivity(){
dp2px(48f)) dp2px(48f))
QMUIGroupListView.newSection(this) QMUIGroupListView.newSection(this)
.addItemView(pwd) { .addItemView(pwd) {
val intent1 = Intent(this, ChangePwdActivity::class.java) startActivity(Intent(this, ChangePwdActivity::class.java))
intent1.putExtra(Contants.IS_SHOW_ORIGINAL_PWD, true)
startActivity(intent1)
} }
.addItemView(pwdCar) { .addItemView(pwdCar) {
ToastUtil.showShort(mContext, R.string.edu_toast_wait) startActivity(Intent(this, EncryptedActivity::class.java))
} }
.addTo(grouplistview) .addTo(grouplistview)
} }
......
package com.android.launcher3.function.pwd.fragment
import android.content.Context
import android.os.Bundle
import android.support.v4.app.Fragment
import android.text.SpannableString
import android.text.Spanned
import android.text.SpannedString
import android.text.style.AbsoluteSizeSpan
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.inputmethod.InputMethodManager
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import com.android.launcher3.R
import com.secspace.lib.common.function.model.Encrypted
import com.android.launcher3.settings.ErrorTimeHelper
import com.google.gson.Gson
import com.secspace.lib.common.dialog.other.DialogUIUtils
import com.secspace.lib.common.utils.Prefs
import com.secspace.lib.common.utils.encrypt
class EncryptedSetFragment : Fragment() {
private lateinit var questionEt1: EditText
private lateinit var questionEt2: EditText
private lateinit var answerEt1: EditText
private lateinit var answerEt2: EditText
private lateinit var sureBtn: Button
private lateinit var titleTv: TextView
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view: View = inflater.inflate(R.layout.fragment_encrypted_set, container, false)
initView(view)
return view
}
private fun initView(view: View) {
titleTv = view.findViewById(R.id.tv_setting_title)
sureBtn = view.findViewById(R.id.btn_encrypted_set)
questionEt1 = view.findViewById(R.id.et_question1)
questionEt2 = view.findViewById(R.id.et_question2)
answerEt1 = view.findViewById(R.id.et_answer1)
answerEt2 = view.findViewById(R.id.et_answer2)
titleTv.setText(R.string.edu_item_input_encryted_set)
setHintSize(questionEt1, getString(R.string.edu_item_input_encryted_question1))
setHintSize(answerEt1, getString(R.string.edu_item_input_encryted_answer1))
setHintSize(questionEt2, getString(R.string.edu_item_input_encryted_question2))
setHintSize(answerEt2, getString(R.string.edu_item_input_encryted_answer2))
sureBtn.setOnClickListener {
btnClick()
}
titleTv.setOnClickListener {
activity?.finish()
}
}
private fun setHintSize(editText: EditText, text: String) {
val ss = SpannableString(text)
val ass = AbsoluteSizeSpan(15, true)
ss.setSpan(ass, 0, ss.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
editText.hint = SpannedString(ss)
}
private fun btnClick() {
val imm: InputMethodManager = activity?.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(activity?.window?.decorView?.windowToken, 0)
val question1 = questionEt1.text.toString()
var answer1 = answerEt1.text.toString()
val question2 = questionEt2.text.toString()
var answer2 = answerEt2.text.toString()
if (question1.isEmpty() || question2.isEmpty()) {
DialogUIUtils.showToastCenter(R.string.edu_item_input_question_null)
return
}
if (answer1.isEmpty() || answer2.isEmpty()) {
DialogUIUtils.showToastCenter(R.string.edu_item_input_answer_null)
return
}
DialogUIUtils.showToastCenter(R.string.edu_item_input_encryted_set_success)
answer1 = encrypt(answer1)
answer2 = encrypt(answer2)
val encrypted = Encrypted(question1, answer1, question2, answer2)
Prefs.setEncrypted(activity, Gson().toJson(encrypted))
//如果存在输错密码多次的情况下重置密码
ErrorTimeHelper.getInstance(activity).resetLockTimeAndCount()
activity?.finish()
}
}
\ No newline at end of file
package com.android.launcher3.function.pwd.fragment
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.support.v4.app.Fragment
import android.text.SpannableString
import android.text.Spanned
import android.text.SpannedString
import android.text.style.AbsoluteSizeSpan
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.inputmethod.InputMethodManager
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import com.android.launcher3.R
import com.secspace.lib.common.function.model.Encrypted
import com.android.launcher3.function.pwd.EncryptedActivity
import com.secspace.lib.common.dialog.other.DialogUIUtils
import com.secspace.lib.common.utils.JsonUtil
import com.secspace.lib.common.utils.Prefs
import com.secspace.lib.common.utils.encrypt
class EncryptedVerifyFragment : Fragment() {
private lateinit var questionTv1: TextView
private lateinit var questionTv2: TextView
private lateinit var answerEt1: EditText
private lateinit var answerEt2: EditText
private lateinit var sureBtn: Button
private lateinit var titleTv: TextView
private lateinit var encrypted: Encrypted
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view: View = inflater.inflate(R.layout.fragment_encrypted_ver, container, false)
val encryptedStr = Prefs.getEncrypted(activity)
if (encryptedStr.isEmpty()) {
DialogUIUtils.showToastCenter(R.string.edu_item_input_encryted_error)
}
encrypted = JsonUtil.fromJson(encryptedStr, Encrypted::class.java)
initView(view)
return view
}
private fun initView(view: View) {
titleTv = view.findViewById(R.id.tv_setting_title)
sureBtn = view.findViewById(R.id.btn_encrypted_set)
questionTv1 = view.findViewById(R.id.tv_question1)
questionTv2 = view.findViewById(R.id.tv_question2)
answerEt1 = view.findViewById(R.id.et_answer1)
answerEt2 = view.findViewById(R.id.et_answer2)
titleTv.setText(R.string.edu_item_input_encryted_verfiy)
setHintSize(answerEt1, getString(R.string.edu_item_input_encryted_answer1))
setHintSize(answerEt2, getString(R.string.edu_item_input_encryted_answer2))
questionTv1.text = encrypted.question1
questionTv2.text = encrypted.question2
sureBtn.setOnClickListener {
btnClick()
}
titleTv.setOnClickListener {
activity?.finish()
}
}
private fun setHintSize(editText: EditText, text: String) {
val ss = SpannableString(text)
val ass = AbsoluteSizeSpan(15, true)
ss.setSpan(ass, 0, ss.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
editText.hint = SpannedString(ss)
}
private fun btnClick() {
val imm: InputMethodManager = activity?.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(activity?.window?.decorView?.windowToken, 0)
var answer1 = answerEt1.text.toString()
var answer2 = answerEt2.text.toString()
if (answer1.isEmpty() || answer2.isEmpty()) {
DialogUIUtils.showToastCenter(R.string.edu_item_input_answer_null)
return
}
answer1 = encrypt(answer1)
answer2 = encrypt(answer2)
if (answer1 != encrypted.answer1) {
DialogUIUtils.showToastCenter(R.string.edu_item_input_answer1_error)
return
}
if (answer2 != encrypted.answer2) {
DialogUIUtils.showToastCenter(R.string.edu_item_input_answer2_error)
return
}
DialogUIUtils.showToastCenter(R.string.edu_item_input_encryted_ver_success)
val intent = Intent(activity, EncryptedActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
intent.putExtra("from", EncryptedVerifyFragment::class.java.simpleName)
startActivity(intent)
activity?.finish()
}
}
\ No newline at end of file
...@@ -5,15 +5,12 @@ import android.content.Intent ...@@ -5,15 +5,12 @@ import android.content.Intent
import android.content.pm.ApplicationInfo import android.content.pm.ApplicationInfo
import android.content.pm.ResolveInfo import android.content.pm.ResolveInfo
import android.os.Bundle import android.os.Bundle
import android.os.Handler
import android.support.v7.widget.DefaultItemAnimator
import android.support.v7.widget.DividerItemDecoration import android.support.v7.widget.DividerItemDecoration
import android.support.v7.widget.LinearLayoutManager import android.support.v7.widget.LinearLayoutManager
import android.support.v7.widget.LinearLayoutManager.HORIZONTAL
import android.support.v7.widget.LinearLayoutManager.VERTICAL import android.support.v7.widget.LinearLayoutManager.VERTICAL
import android.util.Log
import android.view.View import android.view.View
import com.android.launcher3.BaseActivity import com.android.launcher3.BaseActivity
import com.android.launcher3.Launcher
import com.android.launcher3.R import com.android.launcher3.R
import com.android.launcher3.settings.AppChooseListAdapter import com.android.launcher3.settings.AppChooseListAdapter
import com.android.launcher3.settings.AppChooseListAdapter.SYSTEM_APP_FLAG import com.android.launcher3.settings.AppChooseListAdapter.SYSTEM_APP_FLAG
...@@ -36,6 +33,7 @@ class AppChooseActivity : BaseActivity() { ...@@ -36,6 +33,7 @@ class AppChooseActivity : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_app_manager) setContentView(R.layout.activity_app_manager)
LoadingDialog.getInstance(this).show("加载中")
mContext = this mContext = this
setAndroidNativeLightStatusBar(true) setAndroidNativeLightStatusBar(true)
initView() initView()
...@@ -44,7 +42,6 @@ class AppChooseActivity : BaseActivity() { ...@@ -44,7 +42,6 @@ class AppChooseActivity : BaseActivity() {
fun initView() { fun initView() {
tv_setting_title.setText(R.string.edu_item_icon) tv_setting_title.setText(R.string.edu_item_icon)
LoadingDialog.getInstance(this).show("加载中")
mAppInfoAdapterSystemApp = AppChooseListAdapter(SYSTEM_APP_FLAG) mAppInfoAdapterSystemApp = AppChooseListAdapter(SYSTEM_APP_FLAG)
mAppInfoAdapterSystemApp?.setItemViewId(R.layout.item_app_choose_list) mAppInfoAdapterSystemApp?.setItemViewId(R.layout.item_app_choose_list)
val linearLayoutManager = LinearLayoutManager(this, VERTICAL, false) val linearLayoutManager = LinearLayoutManager(this, VERTICAL, false)
...@@ -80,6 +77,7 @@ class AppChooseActivity : BaseActivity() { ...@@ -80,6 +77,7 @@ class AppChooseActivity : BaseActivity() {
private suspend fun loadFinished(appModels: List<AppModel>) { private suspend fun loadFinished(appModels: List<AppModel>) {
mSystemApps.clear() mSystemApps.clear()
mUserApps.clear() mUserApps.clear()
appModels.forEach { appModels.forEach {
if (it.appInfo.flags and ApplicationInfo.FLAG_SYSTEM != 0) { if (it.appInfo.flags and ApplicationInfo.FLAG_SYSTEM != 0) {
mSystemApps.add(it) mSystemApps.add(it)
...@@ -90,6 +88,8 @@ class AppChooseActivity : BaseActivity() { ...@@ -90,6 +88,8 @@ class AppChooseActivity : BaseActivity() {
} }
} }
withContext(Dispatchers.Main) { withContext(Dispatchers.Main) {
btn_sure.isEnabled = true
btn_cancel.isEnabled = true
LoadingDialog.getInstance(mContext).dismiss() LoadingDialog.getInstance(mContext).dismiss()
mAppInfoAdapterUserApp?.readResult(mAppContext) mAppInfoAdapterUserApp?.readResult(mAppContext)
mAppInfoAdapterSystemApp?.readResult(mAppContext) mAppInfoAdapterSystemApp?.readResult(mAppContext)
...@@ -106,11 +106,16 @@ class AppChooseActivity : BaseActivity() { ...@@ -106,11 +106,16 @@ class AppChooseActivity : BaseActivity() {
fun btnClick(view: View?) { fun btnClick(view: View?) {
when (view?.id) { when (view?.id) {
R.id.btn_sure -> { R.id.btn_sure -> {
mAppInfoAdapterSystemApp?.saveResult(mAppContext) GlobalScope.launch (Dispatchers.Main){
mAppInfoAdapterUserApp?.saveResult(mAppContext) LoadingDialog.getInstance(mAppContext).show("请稍后")
SwitchInMdm.addDisallowedRunningApp(this) mAppInfoAdapterSystemApp?.saveResult(mAppContext)
IntentUtil.startEduLauncher(this) mAppInfoAdapterUserApp?.saveResult(mAppContext)
finish() SwitchInMdm.addDisallowedRunningApp(mContext)
Launcher.forceReload()
IntentUtil.startEduLauncher(mContext)
LoadingDialog.getInstance(mAppContext).dismiss()
finish()
}
} }
R.id.btn_cancel -> { R.id.btn_cancel -> {
job?.cancel() job?.cancel()
......
package com.android.launcher3.function.setting
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.view.View
import android.widget.GridLayout
import android.widget.LinearLayout
import com.android.launcher3.BaseActivity
import com.android.launcher3.R
import com.qmuiteam.qmui.widget.grouplist.QMUICommonListItemView
import com.qmuiteam.qmui.widget.grouplist.QMUIGroupListView
import com.secspace.lib.common.utils.*
import kotlinx.android.synthetic.main.activity_setting.*
import kotlinx.android.synthetic.main.activity_setting.tv_setting_title
import kotlinx.android.synthetic.main.activity_use_app.*
class AppUseActivity : BaseActivity() {
private var mContext: Context? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setAndroidNativeLightStatusBar(true)
setContentView(R.layout.activity_use_app)
mContext = this
initView()
}
private fun initView() {
tv_setting_title.setText(R.string.edu_item_app_use_title)
tv_app_use_time.text = String.format(getString(R.string.edu_item_app_use_last_day), "50")
time_progress.initAnimation()
}
fun close(view: View?) {
finish()
}
fun more(view: View) {
}
}
\ No newline at end of file
...@@ -56,7 +56,7 @@ class SettingActivity : BaseActivity() { ...@@ -56,7 +56,7 @@ class SettingActivity : BaseActivity() {
dp2px(48f)) dp2px(48f))
QMUIGroupListView.newSection(mContext) QMUIGroupListView.newSection(mContext)
.addItemView(wlan) { IntentUtil.startWifiSetting(mContext) } .addItemView(wlan) { IntentUtil.startWifiSetting(mContext) }
.addItemView(appUse) { ToastUtil.showShort(mContext, R.string.edu_toast_wait) } .addItemView(appUse) { startActivity(Intent(mContext, AppUseActivity::class.java)) }
.addItemView(buy) { startActivity(Intent(mContext, SettingBuyActivity::class.java)) } .addItemView(buy) { startActivity(Intent(mContext, SettingBuyActivity::class.java)) }
.addItemView(about) { startActivity(Intent(mContext, SettingAboutActivity::class.java)) } .addItemView(about) { startActivity(Intent(mContext, SettingAboutActivity::class.java)) }
.addTo(grouplistview) .addTo(grouplistview)
......
...@@ -8,11 +8,11 @@ import android.view.View ...@@ -8,11 +8,11 @@ import android.view.View
import android.widget.GridLayout import android.widget.GridLayout
import com.android.launcher3.BaseActivity import com.android.launcher3.BaseActivity
import com.android.launcher3.R import com.android.launcher3.R
import com.android.launcher3.function.pwd.SettingPwdActivity
import com.android.launcher3.mdm.DisableCompat import com.android.launcher3.mdm.DisableCompat
import com.qmuiteam.qmui.widget.grouplist.QMUICommonListItemView import com.qmuiteam.qmui.widget.grouplist.QMUICommonListItemView
import com.qmuiteam.qmui.widget.grouplist.QMUIGroupListView import com.qmuiteam.qmui.widget.grouplist.QMUIGroupListView
import com.secspace.lib.common.dialog.LoadingDialog import com.secspace.lib.common.dialog.LoadingDialog
import com.secspace.lib.common.dialog.SwitcherDialog
import com.secspace.lib.common.event.ChangeWallPaperEvent import com.secspace.lib.common.event.ChangeWallPaperEvent
import com.secspace.lib.common.function.DialogManager import com.secspace.lib.common.function.DialogManager
import com.secspace.lib.common.utils.PkgManager import com.secspace.lib.common.utils.PkgManager
......
...@@ -96,7 +96,6 @@ public class LauncherIcons { ...@@ -96,7 +96,6 @@ public class LauncherIcons {
*/ */
public static Bitmap createBadgedIconBitmap( public static Bitmap createBadgedIconBitmap(
Drawable icon, UserHandle user, Context context, int iconAppTargetSdk) { Drawable icon, UserHandle user, Context context, int iconAppTargetSdk) {
IconNormalizer normalizer; IconNormalizer normalizer;
float scale = 1f; float scale = 1f;
if (!FeatureFlags.LAUNCHER3_DISABLE_ICON_NORMALIZATION) { if (!FeatureFlags.LAUNCHER3_DISABLE_ICON_NORMALIZATION) {
...@@ -155,23 +154,23 @@ public class LauncherIcons { ...@@ -155,23 +154,23 @@ public class LauncherIcons {
float scale = 1f; float scale = 1f;
if (!FeatureFlags.LAUNCHER3_DISABLE_ICON_NORMALIZATION) { if (!FeatureFlags.LAUNCHER3_DISABLE_ICON_NORMALIZATION) {
normalizer = IconNormalizer.getInstance(context); normalizer = IconNormalizer.getInstance(context);
if (Utilities.isAtLeastO() && iconAppTargetSdk >= Build.VERSION_CODES.O) { // if (Utilities.isAtLeastO() && iconAppTargetSdk >= Build.VERSION_CODES.O) {
boolean[] outShape = new boolean[1]; // boolean[] outShape = new boolean[1];
AdaptiveIconDrawable dr = (AdaptiveIconDrawable) // AdaptiveIconDrawable dr = (AdaptiveIconDrawable)
context.getDrawable(R.drawable.adaptive_icon_drawable_wrapper).mutate(); // context.getDrawable(R.drawable.adaptive_icon_drawable_wrapper).mutate();
dr.setBounds(0, 0, 1, 1); // dr.setBounds(0, 0, 1, 1);
scale = normalizer.getScale(icon, iconBounds, dr.getIconMask(), outShape); // scale = normalizer.getScale(icon, iconBounds, dr.getIconMask(), outShape);
if (Utilities.isAtLeastO() && FeatureFlags.LEGACY_ICON_TREATMENT && // if (Utilities.isAtLeastO() && FeatureFlags.LEGACY_ICON_TREATMENT &&
!outShape[0]) { // !outShape[0]) {
Drawable wrappedIcon = wrapToAdaptiveIconDrawable(context, icon, scale); // Drawable wrappedIcon = wrapToAdaptiveIconDrawable(context, icon, scale);
if (wrappedIcon != icon) { // if (wrappedIcon != icon) {
icon = wrappedIcon; // icon = wrappedIcon;
scale = normalizer.getScale(icon, iconBounds, null, null); // scale = normalizer.getScale(icon, iconBounds, null, null);
} // }
} // }
} else { // } else {
scale = normalizer.getScale(icon, iconBounds, null, null); scale = normalizer.getScale(icon, iconBounds, null, null);
} // }
} }
scale = Math.min(scale, ShadowGenerator.getScaleForBounds(iconBounds)); scale = Math.min(scale, ShadowGenerator.getScaleForBounds(iconBounds));
......
...@@ -265,10 +265,10 @@ public class LoaderCursor extends CursorWrapper { ...@@ -265,10 +265,10 @@ public class LoaderCursor extends CursorWrapper {
info.intent = newIntent; info.intent = newIntent;
mIconCache.getTitleAndIcon(info, lai, useLowResIcon); mIconCache.getTitleAndIcon(info, lai, useLowResIcon);
if (mIconCache.isDefaultIcon(info.iconBitmap, user)) { // if (mIconCache.isDefaultIcon(info.iconBitmap, user)) {
Bitmap icon = loadIcon(info); // Bitmap icon = loadIcon(info);
info.iconBitmap = icon != null ? icon : info.iconBitmap; // info.iconBitmap = icon != null ? icon : info.iconBitmap;
} // }
if (lai != null && PackageManagerHelper.isAppSuspended(lai.getApplicationInfo())) { if (lai != null && PackageManagerHelper.isAppSuspended(lai.getApplicationInfo())) {
info.isDisabled = ShortcutInfo.FLAG_DISABLED_SUSPENDED; info.isDisabled = ShortcutInfo.FLAG_DISABLED_SUSPENDED;
......
package com.android.launcher3.settings;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.text.TextUtils;
import android.util.Log;
import com.secspace.lib.common.event.RefreshWorkSpaceEvent;
import com.secspace.lib.common.function.SwitchInMdm;
import com.secspace.lib.common.utils.Prefs;
import org.greenrobot.eventbus.EventBus;
import java.util.List;
public class AppInstallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_PACKAGE_ADDED)) {
String packageName = intent.getData().getSchemeSpecificPart();
if (!TextUtils.isEmpty(packageName)) {
if (!TextUtils.isEmpty(packageName) && !TextUtils.equals(packageName, context.getPackageName())) {
if (Prefs.isAllowNewApp(context)) {
List<String> pkgs = Prefs.getUserShowAppPkgs(context);
pkgs.add(packageName);
Prefs.setUserShowAppPkgs(context, pkgs);
SwitchInMdm.INSTANCE.addDisallowedRunningApp(context);
EventBus.getDefault().post(new RefreshWorkSpaceEvent());
}
EventBus.getDefault().post(new RefreshWorkSpaceEvent());
}
}
}
}
}
package com.android.launcher3.settings
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.text.TextUtils
import com.android.launcher3.Launcher
import com.secspace.lib.common.event.RefreshWorkSpaceEvent
import com.secspace.lib.common.function.SwitchInMdm.addDisallowedRunningApp
import com.secspace.lib.common.utils.Prefs
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import org.greenrobot.eventbus.EventBus
class AppInstallReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (intent.action == Intent.ACTION_PACKAGE_ADDED) {
val packageName = intent.data?.schemeSpecificPart
if (!TextUtils.isEmpty(packageName)) {
if (!TextUtils.isEmpty(packageName) && !TextUtils.equals(packageName, context.packageName)) {
if (Prefs.isAllowNewApp(context)) {
val pkgs = Prefs.getUserShowAppPkgs(context)
pkgs.add(packageName)
Prefs.setUserShowAppPkgs(context, pkgs)
GlobalScope.launch(Dispatchers.IO) {
addDisallowedRunningApp(context)
}
Launcher.forceReload()
EventBus.getDefault().post(RefreshWorkSpaceEvent())
}
EventBus.getDefault().post(RefreshWorkSpaceEvent())
}
}
}
}
}
\ No newline at end of file
...@@ -5,6 +5,8 @@ import android.content.pm.ApplicationInfo; ...@@ -5,6 +5,8 @@ import android.content.pm.ApplicationInfo;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.text.TextUtils; import android.text.TextUtils;
import com.secspace.lib.common.utils.UtilsKt;
public class AppModel { public class AppModel {
...@@ -54,16 +56,10 @@ public class AppModel { ...@@ -54,16 +56,10 @@ public class AppModel {
} }
private void loadIcon() { private void loadIcon() {
mIcon = mContext.getPackageManager().getApplicationIcon(mInfo); mIcon = UtilsKt.getApplicationIcon(mContext, mInfo.packageName);
if (mIcon == null) {
mIcon = mInfo.loadIcon(mContext.getPackageManager());
}
} }
private void loadLabel() { private void loadLabel() {
mAppLabel = mInfo.loadLabel(mContext.getPackageManager()).toString(); mAppLabel = UtilsKt.getApplicationName(mContext, mInfo.packageName);
if (TextUtils.isEmpty(mAppLabel)) {
mAppLabel = mInfo.name;
}
} }
} }
...@@ -6,6 +6,7 @@ import android.support.annotation.Nullable; ...@@ -6,6 +6,7 @@ import android.support.annotation.Nullable;
import android.text.TextUtils; import android.text.TextUtils;
import android.view.WindowManager; import android.view.WindowManager;
import com.android.launcher3.function.pwd.EncryptedActivity;
import com.android.launcher3.function.pwd.PwdPinSetPwdActivity; import com.android.launcher3.function.pwd.PwdPinSetPwdActivity;
import com.secspace.lib.common.base.BaseActivity; import com.secspace.lib.common.base.BaseActivity;
import com.secspace.lib.common.function.DialogManager; import com.secspace.lib.common.function.DialogManager;
...@@ -40,9 +41,17 @@ public class BlankActivity extends BaseActivity { ...@@ -40,9 +41,17 @@ public class BlankActivity extends BaseActivity {
if(!checkPermissions()){ if(!checkPermissions()){
return; return;
} }
String encrypted = Prefs.getEncrypted(this);
if(TextUtils.isEmpty(encrypted)){
Intent intent = new Intent(this, EncryptedActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
return;
}
String pwd = Prefs.getLoginPwd(this); String pwd = Prefs.getLoginPwd(this);
if (TextUtils.isEmpty(pwd)) { if (TextUtils.isEmpty(pwd)) {
Intent intent = new Intent(this, PwdPinSetPwdActivity.class); Intent intent = new Intent(this, PwdPinSetPwdActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent); startActivity(intent);
return; return;
} }
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
<Button <Button
android:onClick="uninstall_mobile_steward" android:onClick="uninstall_mobile_steward"
android:text="卸载学习" android:text="卸载学习空间"
android:layout_marginLeft="10dp" android:layout_marginLeft="10dp"
android:layout_marginRight="10dp" android:layout_marginRight="10dp"
android:layout_width="match_parent" android:layout_width="match_parent"
......
...@@ -6,9 +6,9 @@ ...@@ -6,9 +6,9 @@
</head> </head>
<body> <body>
<font size="2"> <font size="2">
<p>欢迎使用学习</p> <p>欢迎使用学习空间</p>
<p>本《免责声明与软件许可协议》(以下简称《协议》或协议)是您(以下也称为“用户”)与本公司之间关学习于用户下载、安装、使用的权利与义务的约定。</p> <p>本《免责声明与软件许可协议》(以下简称《协议》或协议)是您(以下也称为“用户”)与本公司之间关学习空间于用户下载、安装、使用的权利与义务的约定。</p>
<p>当您安装学习时,将会被提示是否同意接受本《协议》,请务必认真阅读和理解本《协议》中规定的所有权利和限制。除非您接受本《协议》所有条款,否则您无权激活及使用本产品。您一旦激活及使用本产品,将视为对本《协议》的接受,即表示您同意接受本《协议》各项条款的约束。</p> <p>当您安装学习空间时,将会被提示是否同意接受本《协议》,请务必认真阅读和理解本《协议》中规定的所有权利和限制。除非您接受本《协议》所有条款,否则您无权激活及使用本产品。您一旦激活及使用本产品,将视为对本《协议》的接受,即表示您同意接受本《协议》各项条款的约束。</p>
<h3>一、软件许可协议</h3> <h3>一、软件许可协议</h3>
<h4>a) 产品安装及使用</h4> <h4>a) 产品安装及使用</h4>
<p>本产品仅可安装于安卓系统的终端上,暂不支持其他平台的安装及使用;</p> <p>本产品仅可安装于安卓系统的终端上,暂不支持其他平台的安装及使用;</p>
......
...@@ -26,8 +26,8 @@ MAVEN_URL=http://192.168.0.170:13000/nexus/content/repositories/releases/ ...@@ -26,8 +26,8 @@ MAVEN_URL=http://192.168.0.170:13000/nexus/content/repositories/releases/
MAVEN_URL_SNAPSHOT=http://192.168.0.170:13000/nexus/content/repositories/releases/ MAVEN_URL_SNAPSHOT=http://192.168.0.170:13000/nexus/content/repositories/releases/
#32位有符号数2147483647(10) #32位有符号数2147483647(10)
versionIntCode=2020032301 versionIntCode=2020032601
versionNameMajor=1 versionNameMajor=1
versionNameMinor=0 versionNameMinor=2
versionNamePatch=3 versionNamePatch=0
\ No newline at end of file \ No newline at end of file
...@@ -117,14 +117,15 @@ dependencies { ...@@ -117,14 +117,15 @@ dependencies {
implementation 'com.secspace:provider_mdm_engine:1.1.0.60' implementation 'com.secspace:provider_mdm_engine:1.1.0.60'
implementation files('libs/jxl.jar') implementation files('libs/jxl.jar')
implementation files('libs/activation.aar') implementation files('libs/activation.aar')
implementation files('libs/update.aar')
implementation files('libs/downloader.aar')
// Room // Room
implementation 'com.tk.lib:room:1.0.2' implementation 'com.tk.lib:room:1.0.2'
// Downloader // Downloader
implementation 'com.tk.lib:downloader:1.0.9'
implementation 'com.tk.lib:dialog:1.0.2' implementation 'com.tk.lib:dialog:1.0.2'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.1' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.1'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.1.1' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.1.1'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.61" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.61"
implementation "com.qmuiteam:qmui:1.3.0" implementation "com.qmuiteam:qmui:1.3.0"
implementation 'com.tk.lib:update-excludePush:1.1.0' implementation "org.reactivestreams:reactive-streams:1.0.2"
} }
\ No newline at end of file
...@@ -31,6 +31,15 @@ ...@@ -31,6 +31,15 @@
<activity android:name=".AddDeviceAdminActivity" <activity android:name=".AddDeviceAdminActivity"
android:excludeFromRecents="true"/> android:excludeFromRecents="true"/>
<service android:name=".function.ExitService"/> <service android:name=".function.ExitService"/>
<service
android:name=".function.service.EduAccessibilityService"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/work_accessibility" />
</service>
</application> </application>
</manifest> </manifest>
...@@ -36,6 +36,7 @@ import com.secspace.lib.common.R; ...@@ -36,6 +36,7 @@ import com.secspace.lib.common.R;
public class AlertDialogHolder extends SuperHolder { public class AlertDialogHolder extends SuperHolder {
protected TextView tvTitle; protected TextView tvTitle;
public TextView tvMsg; public TextView tvMsg;
public TextView tvThird;
public EditText et1; public EditText et1;
public EditText et2; public EditText et2;
protected View line; protected View line;
...@@ -58,23 +59,24 @@ public class AlertDialogHolder extends SuperHolder { ...@@ -58,23 +59,24 @@ public class AlertDialogHolder extends SuperHolder {
@Override @Override
protected void findViews() { protected void findViews() {
tvTitle = (TextView) rootView.findViewById(R.id.dialogui_tv_title); tvTitle = rootView.findViewById(R.id.dialogui_tv_title);
tvMsg = (TextView) rootView.findViewById(R.id.dialogui_tv_msg); tvMsg = rootView.findViewById(R.id.dialogui_tv_msg);
et1 = (EditText) rootView.findViewById(R.id.et_1); et1 = rootView.findViewById(R.id.et_1);
et2 = (EditText) rootView.findViewById(R.id.et_2); et2 = rootView.findViewById(R.id.et_2);
line = (View) rootView.findViewById(R.id.line); line = rootView.findViewById(R.id.line);
btn1 = (Button) rootView.findViewById(R.id.btn_1); btn1 = rootView.findViewById(R.id.btn_1);
lineBtn2 = (View) rootView.findViewById(R.id.line_btn2); lineBtn2 = rootView.findViewById(R.id.line_btn2);
btn2 = (Button) rootView.findViewById(R.id.btn_2); btn2 = rootView.findViewById(R.id.btn_2);
lineBtn3 = (View) rootView.findViewById(R.id.line_btn3); lineBtn3 = rootView.findViewById(R.id.line_btn3);
btn3 = (Button) rootView.findViewById(R.id.btn_3); btn3 = rootView.findViewById(R.id.btn_3);
llContainerHorizontal = (LinearLayout) rootView.findViewById(R.id.ll_container_horizontal); llContainerHorizontal = rootView.findViewById(R.id.ll_container_horizontal);
btn1Vertical = (Button) rootView.findViewById(R.id.btn_1_vertical); btn1Vertical = rootView.findViewById(R.id.btn_1_vertical);
lineBtn2Vertical = (View) rootView.findViewById(R.id.line_btn2_vertical); lineBtn2Vertical = rootView.findViewById(R.id.line_btn2_vertical);
btn2Vertical = (Button) rootView.findViewById(R.id.btn_2_vertical); btn2Vertical = rootView.findViewById(R.id.btn_2_vertical);
lineBtn3Vertical = (View) rootView.findViewById(R.id.line_btn3_vertical); lineBtn3Vertical = rootView.findViewById(R.id.line_btn3_vertical);
btn3Vertical = (Button) rootView.findViewById(R.id.btn_3_vertical); btn3Vertical = rootView.findViewById(R.id.btn_3_vertical);
llContainerVertical = (LinearLayout) rootView.findViewById(R.id.ll_container_vertical); llContainerVertical = rootView.findViewById(R.id.ll_container_vertical);
tvThird = rootView.findViewById(R.id.tv_third);
} }
...@@ -93,6 +95,9 @@ public class AlertDialogHolder extends SuperHolder { ...@@ -93,6 +95,9 @@ public class AlertDialogHolder extends SuperHolder {
tvTitle.setTextColor(ToolUtils.getColor(tvTitle.getContext(), bean.titleTxtColor)); tvTitle.setTextColor(ToolUtils.getColor(tvTitle.getContext(), bean.titleTxtColor));
tvTitle.setTextSize(bean.titleTxtSize); tvTitle.setTextSize(bean.titleTxtSize);
tvThird.setTextColor(ToolUtils.getColor(tvThird.getContext(), bean.inputTxtColor));
tvThird.setTextSize(bean.thirdTxtSize);
btn3Vertical.setTextSize(bean.btnTxtSize); btn3Vertical.setTextSize(bean.btnTxtSize);
btn2Vertical.setTextSize(bean.btnTxtSize); btn2Vertical.setTextSize(bean.btnTxtSize);
btn1Vertical.setTextSize(bean.btnTxtSize); btn1Vertical.setTextSize(bean.btnTxtSize);
...@@ -134,6 +139,13 @@ public class AlertDialogHolder extends SuperHolder { ...@@ -134,6 +139,13 @@ public class AlertDialogHolder extends SuperHolder {
tvMsg.setTextSize(bean.msgTxtSize); tvMsg.setTextSize(bean.msgTxtSize);
} }
if (TextUtils.isEmpty(bean.thirdTxt)) {
tvThird.setVisibility(View.GONE);
} else {
tvThird.setVisibility(View.VISIBLE);
tvThird.setText(bean.thirdTxt);
}
if (bean.isPassword) { if (bean.isPassword) {
et1.setVisibility(View.VISIBLE); et1.setVisibility(View.VISIBLE);
et2.setVisibility(View.GONE); et2.setVisibility(View.GONE);
...@@ -221,7 +233,13 @@ public class AlertDialogHolder extends SuperHolder { ...@@ -221,7 +233,13 @@ public class AlertDialogHolder extends SuperHolder {
} }
} }
tvThird.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DialogUIUtils.dismiss(bean.dialog, bean.alertDialog);
bean.listener.onNeutral();
}
});
//事件 //事件
if (bean.isVertical) { if (bean.isVertical) {
btn1Vertical.setOnClickListener(new View.OnClickListener() { btn1Vertical.setOnClickListener(new View.OnClickListener() {
......
...@@ -62,6 +62,8 @@ public interface Assignable { ...@@ -62,6 +62,8 @@ public interface Assignable {
BuildBean assignAlertPassword(Context activity, CharSequence title, CharSequence msg, CharSequence hint1, CharSequence hint2, BuildBean assignAlertPassword(Context activity, CharSequence title, CharSequence msg, CharSequence hint1, CharSequence hint2,
CharSequence firstTxt, CharSequence secondTxt, boolean isVertical, boolean cancleable, boolean outsideTouchable, final DialogUIListener listener); CharSequence firstTxt, CharSequence secondTxt, boolean isVertical, boolean cancleable, boolean outsideTouchable, final DialogUIListener listener);
BuildBean assignAlertPasswordCanVer(Context activity, CharSequence title, CharSequence msg, CharSequence thirdTxt, CharSequence hint1, CharSequence hint2,
CharSequence firstTxt, CharSequence secondTxt, boolean isVertical, boolean cancleable, boolean outsideTouchable, final DialogUIListener listener);
/** /**
* 自定义弹出框 * 自定义弹出框
*/ */
......
...@@ -57,6 +57,7 @@ public class BuildBean extends Buildable implements Styleable { ...@@ -57,6 +57,7 @@ public class BuildBean extends Buildable implements Styleable {
public CharSequence text1 = DialogConfig.dialogui_btnTxt1; public CharSequence text1 = DialogConfig.dialogui_btnTxt1;
public CharSequence text2 = DialogConfig.dialogui_btnTxt2; public CharSequence text2 = DialogConfig.dialogui_btnTxt2;
public CharSequence text3; public CharSequence text3;
public CharSequence thirdTxt;
public CharSequence bottomTxt = DialogConfig.dialogui_bottomTxt; public CharSequence bottomTxt = DialogConfig.dialogui_bottomTxt;
public CharSequence hint1; public CharSequence hint1;
...@@ -113,10 +114,11 @@ public class BuildBean extends Buildable implements Styleable { ...@@ -113,10 +114,11 @@ public class BuildBean extends Buildable implements Styleable {
//字体大小 //字体大小
public int btnTxtSize = 17;// in sp public int btnTxtSize = 17;// in sp
public int titleTxtSize = 14; public int titleTxtSize = 17;
public int msgTxtSize = 14; public int msgTxtSize = 14;
public int itemTxtSize = 14; public int itemTxtSize = 14;
public int inputTxtSize = 14; public int inputTxtSize = 14;
public int thirdTxtSize = 14;
@SuppressLint("ResourceType") @SuppressLint("ResourceType")
......
...@@ -25,7 +25,7 @@ public class DialogAssigner implements Assignable { ...@@ -25,7 +25,7 @@ public class DialogAssigner implements Assignable {
@Override @Override
public BuildBean assignLoading(Context context, CharSequence msg,boolean isVertical, boolean cancleable, boolean outsideTouchable, boolean isWhiteBg) { public BuildBean assignLoading(Context context, CharSequence msg, boolean isVertical, boolean cancleable, boolean outsideTouchable, boolean isWhiteBg) {
BuildBean bean = new BuildBean(); BuildBean bean = new BuildBean();
bean.mContext = context; bean.mContext = context;
bean.msg = msg; bean.msg = msg;
...@@ -39,7 +39,7 @@ public class DialogAssigner implements Assignable { ...@@ -39,7 +39,7 @@ public class DialogAssigner implements Assignable {
} }
@Override @Override
public BuildBean assignMdLoading(Context context, CharSequence msg,boolean isVertical, boolean cancleable, boolean outsideTouchable, boolean isWhiteBg) { public BuildBean assignMdLoading(Context context, CharSequence msg, boolean isVertical, boolean cancleable, boolean outsideTouchable, boolean isWhiteBg) {
BuildBean bean = new BuildBean(); BuildBean bean = new BuildBean();
bean.mContext = context; bean.mContext = context;
bean.msg = msg; bean.msg = msg;
...@@ -108,7 +108,27 @@ public class DialogAssigner implements Assignable { ...@@ -108,7 +108,27 @@ public class DialogAssigner implements Assignable {
@Override @Override
public BuildBean assignAlertPassword(Context activity, CharSequence title, CharSequence msg, CharSequence hint1, CharSequence hint2, public BuildBean assignAlertPassword(Context activity, CharSequence title, CharSequence msg, CharSequence hint1, CharSequence hint2,
CharSequence firstTxt, CharSequence secondTxt, boolean isVertical, boolean cancleable, boolean outsideTouchable, DialogUIListener listener) { CharSequence firstTxt, CharSequence secondTxt, boolean isVertical, boolean cancleable, boolean outsideTouchable, DialogUIListener listener) {
BuildBean bean = new BuildBean();
bean.mContext = activity;
bean.msg = msg;
bean.title = title;
bean.hint1 = hint1;
bean.hint2 = hint2;
bean.text1 = firstTxt;
bean.text2 = secondTxt;
bean.isVertical = isVertical;
bean.gravity = Gravity.CENTER;
bean.cancelable = cancleable;
bean.outsideTouchable = outsideTouchable;
bean.listener = listener;
bean.type = DialogConfig.TYPE_ALERT;
bean.isPassword = true;
return bean;
}
@Override
public BuildBean assignAlertPasswordCanVer(Context activity, CharSequence title, CharSequence msg, CharSequence thirdTxt, CharSequence hint1, CharSequence hint2, CharSequence firstTxt, CharSequence secondTxt, boolean isVertical, boolean cancleable, boolean outsideTouchable, DialogUIListener listener) {
BuildBean bean = new BuildBean(); BuildBean bean = new BuildBean();
bean.mContext = activity; bean.mContext = activity;
bean.msg = msg; bean.msg = msg;
...@@ -124,6 +144,7 @@ public class DialogAssigner implements Assignable { ...@@ -124,6 +144,7 @@ public class DialogAssigner implements Assignable {
bean.listener = listener; bean.listener = listener;
bean.type = DialogConfig.TYPE_ALERT; bean.type = DialogConfig.TYPE_ALERT;
bean.isPassword = true; bean.isPassword = true;
bean.thirdTxt = thirdTxt;
return bean; return bean;
} }
......
...@@ -27,7 +27,7 @@ import com.secspace.lib.common.R; ...@@ -27,7 +27,7 @@ import com.secspace.lib.common.R;
public class DialogConfig { public class DialogConfig {
@ColorRes @ColorRes
public static int iosBtnColor = R.color.ios_btntext_blue; public static int iosBtnColor = R.color.text_title_11;
@ColorRes @ColorRes
public static int lvItemTxtColor = R.color.text_item_33; public static int lvItemTxtColor = R.color.text_item_33;
@ColorRes @ColorRes
......
...@@ -221,10 +221,14 @@ public class DialogUIUtils { ...@@ -221,10 +221,14 @@ public class DialogUIUtils {
} }
public static BuildBean showAlertPassword(Activity activity, CharSequence title, CharSequence msg, CharSequence hint1, CharSequence hint2, public static BuildBean showAlertPassword(Activity activity, CharSequence title, CharSequence msg, CharSequence hint1, CharSequence hint2,
CharSequence firstTxt, CharSequence secondTxt, boolean isVertical, boolean cancleable, boolean outsideTouchable, DialogUIListener listener) { CharSequence sure, CharSequence cancel, boolean isVertical, boolean cancleable, boolean outsideTouchable, DialogUIListener listener) {
return DialogAssigner.getInstance().assignAlertPassword(activity, title, msg, hint1, hint2, firstTxt, secondTxt, isVertical, cancleable, outsideTouchable, listener); return DialogAssigner.getInstance().assignAlertPassword(activity, title, msg, hint1, hint2, sure, cancel, isVertical, cancleable, outsideTouchable, listener);
} }
public static BuildBean showAlertPasswordCanVer(Activity activity, CharSequence title, CharSequence msg, CharSequence thirdTx, CharSequence hint1, CharSequence hint2,
CharSequence sure, CharSequence cancel, boolean isVertical, boolean cancleable, boolean outsideTouchable, DialogUIListener listener) {
return DialogAssigner.getInstance().assignAlertPasswordCanVer(activity, title, msg, thirdTx, hint1, hint2, sure, cancel, isVertical, cancleable, outsideTouchable, listener);
}
/** /**
* 短时间中下位置显示。线程安全,可以在非UI线程调用。 * 短时间中下位置显示。线程安全,可以在非UI线程调用。
*/ */
......
...@@ -129,33 +129,35 @@ object ActivationHelper { ...@@ -129,33 +129,35 @@ object ActivationHelper {
} }
} }
private suspend fun probation(context: Context): Boolean { private suspend fun probation(context: Context): Boolean{
val map: MutableMap<String?, String?> = HashMap() return withContext(Dispatchers.IO){
val currentTime = getCurrentTimeByNet() val map: MutableMap<String?, String?> = HashMap()
if (currentTime == -1L) { val currentTime = getCurrentTimeByNet()
return false if (currentTime == -1L) {
} return@withContext false
val endTime = currentTime + PROBATION_TIME
map[SP_IS_ACTIVE] = DesUtil.encrypt(PROBATION)
map[SP_TRIAL_ACTIVE_END_TIME] = DesUtil.encrypt(endTime.toString())
map[SP_ACTIVE_CODE] = DesUtil.encrypt("无")
map[SP_TRIAL_ACTIVE_START_TIME] = DesUtil.encrypt(currentTime.toString())
try {
val fileDir = File(FILE_PATH + context.packageName)
if (!fileDir.exists()) {
fileDir.mkdirs()
} }
val file = File(fileDir, PROBATION_FILE_NAME) val endTime = currentTime + PROBATION_TIME
if (!file.exists()) { map[SP_IS_ACTIVE] = DesUtil.encrypt(PROBATION)
file.createNewFile() map[SP_TRIAL_ACTIVE_END_TIME] = DesUtil.encrypt(endTime.toString())
map[SP_ACTIVE_CODE] = DesUtil.encrypt("无")
map[SP_TRIAL_ACTIVE_START_TIME] = DesUtil.encrypt(currentTime.toString())
try {
val fileDir = File(FILE_PATH + context.packageName)
if (!fileDir.exists()) {
fileDir.mkdirs()
}
val file = File(fileDir, PROBATION_FILE_NAME)
if (!file.exists()) {
file.createNewFile()
}
XmlUtils.writeMapXml(map, FileOutputStream(file))
} catch (e: XmlPullParserException) {
return@withContext false
} catch (e: IOException) {
return@withContext false
} }
XmlUtils.writeMapXml(map, FileOutputStream(file)) return@withContext true
} catch (e: XmlPullParserException) {
return false
} catch (e: IOException) {
return false
} }
return true
} }
private fun getValueByXmlKey(context: Context, key: String, fileName: String): String { private fun getValueByXmlKey(context: Context, key: String, fileName: String): String {
......
...@@ -21,7 +21,7 @@ import org.greenrobot.eventbus.EventBus ...@@ -21,7 +21,7 @@ import org.greenrobot.eventbus.EventBus
* Created by cyw_m on 2018/4/6. * Created by cyw_m on 2018/4/6.
*/ */
@SuppressLint("StaticFieldLeak") @SuppressLint("StaticFieldLeak")
object DialogManager{ object DialogManager {
private var mSimpleDialog: SimpleDialog? = null private var mSimpleDialog: SimpleDialog? = null
/** /**
* 安装中间件弹窗 * 安装中间件弹窗
...@@ -69,7 +69,7 @@ object DialogManager{ ...@@ -69,7 +69,7 @@ object DialogManager{
} }
fun showActivateLoseDialog(activity: Activity?, title: String?, content: String?, listener: MessageListener) { fun showActivateLoseDialog(activity: Activity?, title: String?, content: String?, listener: MessageListener) {
DialogUIUtils.showAlert(activity, title, content, "", "", "确定", "输入激活码", false, false, false, object : DialogUIListener() { DialogUIUtils.showAlert(activity, title, content, "", "", "确定", "", false, false, false, object : DialogUIListener() {
override fun onPositive() { override fun onPositive() {
listener.onPositive() listener.onPositive()
} }
...@@ -80,8 +80,26 @@ object DialogManager{ ...@@ -80,8 +80,26 @@ object DialogManager{
}).show() }).show()
} }
fun showPwdDialog(activity: Activity?, title: String?, listener: PwdListener) { fun showPwdDialog(activity: Activity?, title: String?, listener: PwdCanVerListener) {
val buildBean = DialogUIUtils.showAlertPassword(activity, title, "", "", "", "确定", "取消", false, false, false, object : DialogUIListener() { val buildBean = DialogUIUtils.showAlertPasswordCanVer(activity, title, "", "忘记密码", "", "", "确定", "取消", false, false, false, object : DialogUIListener() {
override fun onPositive(view: View) {
listener.onPositive(view)
}
override fun onPositive() {}
override fun onNegative() {
listener.onNegative()
}
override fun onNeutral() {
listener.onNeutral()
}
})
buildBean.show()
}
fun showEncryptedVerDialog(activity: Activity?, title: String?, question: String?, listener: PwdListener) {
val buildBean = DialogUIUtils.showAlert(activity, title, question, "答案", "", "确定", "切换问题", false, false, false, object : DialogUIListener() {
override fun onPositive(view: View) { override fun onPositive(view: View) {
listener.onPositive(view) listener.onPositive(view)
} }
...@@ -103,4 +121,10 @@ object DialogManager{ ...@@ -103,4 +121,10 @@ object DialogManager{
fun onPositive(view: View?) fun onPositive(view: View?)
fun onNegative() fun onNegative()
} }
interface PwdCanVerListener {
fun onPositive(view: View?)
fun onNegative()
fun onNeutral()
}
} }
\ No newline at end of file
...@@ -9,6 +9,7 @@ import com.secspace.lib.common.dialog.LoadingDialog ...@@ -9,6 +9,7 @@ import com.secspace.lib.common.dialog.LoadingDialog
import com.secspace.lib.common.dialog.SwitcherDialog import com.secspace.lib.common.dialog.SwitcherDialog
import com.secspace.lib.common.utils.IntentUtil import com.secspace.lib.common.utils.IntentUtil
import com.secspace.lib.common.utils.Prefs import com.secspace.lib.common.utils.Prefs
import com.secspace.lib.common.utils.closeAccessibility
import kotlinx.coroutines.* import kotlinx.coroutines.*
class ExitService : Service() { class ExitService : Service() {
...@@ -30,6 +31,7 @@ class ExitService : Service() { ...@@ -30,6 +31,7 @@ class ExitService : Service() {
LoadingDialog.getInstance(mAppContext).show("切换中") LoadingDialog.getInstance(mAppContext).show("切换中")
GlobalScope.launch(Dispatchers.IO) { GlobalScope.launch(Dispatchers.IO) {
closeAccessibility(mAppContext as ExitService)
Prefs.setMdmInitializedWhenEnter(mAppContext, false) Prefs.setMdmInitializedWhenEnter(mAppContext, false)
WorkManager.exit(mAppContext) WorkManager.exit(mAppContext)
delay(1500) delay(1500)
......
...@@ -8,15 +8,12 @@ import android.content.pm.PackageManager ...@@ -8,15 +8,12 @@ import android.content.pm.PackageManager
import android.content.pm.ResolveInfo import android.content.pm.ResolveInfo
import android.os.Build.VERSION_CODES import android.os.Build.VERSION_CODES
import android.util.Log import android.util.Log
import com.secspace.lib.common.dialog.LoadingDialog
import com.secspace.lib.common.env.Packages.PkgSecSpace import com.secspace.lib.common.env.Packages.PkgSecSpace
import com.secspace.lib.common.utils.* import com.secspace.lib.common.utils.*
import com.secspace.lib.common.utils.Package.ComponentNames.COMPONENT_UPDATE_SYSTEM import com.secspace.lib.common.utils.Package.ComponentNames.COMPONENT_UPDATE_SYSTEM
import com.secspace.lib.common.utils.Package.ComponentNames.EnterprisePrivacySettingsActivity import com.secspace.lib.common.utils.Package.ComponentNames.EnterprisePrivacySettingsActivity
import com.secspace.mdmengine.api.manager.MdmFactoryManager import com.secspace.mdmengine.api.manager.MdmFactoryManager
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import java.util.* import java.util.*
...@@ -25,6 +22,10 @@ object SwitchInMdm: ISwitch() { ...@@ -25,6 +22,10 @@ object SwitchInMdm: ISwitch() {
private val TAG = "SwitchInMdm" private val TAG = "SwitchInMdm"
override suspend fun init(context: Context) { override suspend fun init(context: Context) {
this.context = context this.context = context
if(MdmFactoryManager.getInstance().deviceApplicationManager == null){
return
}
Prefs.setInSpace(context, true)
MdmUtils.setDefaultLauncher(context) MdmUtils.setDefaultLauncher(context)
val mdmFactoryManager = DpmHelper.getInstance(context).getmMdmFactoryManager() val mdmFactoryManager = DpmHelper.getInstance(context).getmMdmFactoryManager()
...@@ -74,8 +75,8 @@ object SwitchInMdm: ISwitch() { ...@@ -74,8 +75,8 @@ object SwitchInMdm: ISwitch() {
} }
} }
fun addDisallowedRunningApp(context: Context) { suspend fun addDisallowedRunningApp(context: Context) {
GlobalScope.launch(Dispatchers.IO) { withContext(Dispatchers.IO) {
val mdmFactoryManager = DpmHelper.getInstance(context).getmMdmFactoryManager() val mdmFactoryManager = DpmHelper.getInstance(context).getmMdmFactoryManager()
val pkgsList = Prefs.getUserShowAppPkgs(context) val pkgsList = Prefs.getUserShowAppPkgs(context)
val resolveInfos: List<ResolveInfo> = context.packageManager.queryIntentActivities(Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER), 0) val resolveInfos: List<ResolveInfo> = context.packageManager.queryIntentActivities(Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER), 0)
...@@ -89,6 +90,8 @@ object SwitchInMdm: ISwitch() { ...@@ -89,6 +90,8 @@ object SwitchInMdm: ISwitch() {
items.add(it.activityInfo.packageName) items.add(it.activityInfo.packageName)
} }
Log.e(TAG, "ALL:${items}") Log.e(TAG, "ALL:${items}")
val oldApps = mdmFactoryManager.deviceApplicationManager.disallowedRunningApp
mdmFactoryManager.deviceApplicationManager.removeDisallowedRunningApp(oldApps)
items.filter { items.filter {
!pkgsList.contains(it) !pkgsList.contains(it)
}.let { }.let {
......
...@@ -123,6 +123,7 @@ object SwitchOutMdm: ISwitch() { ...@@ -123,6 +123,7 @@ object SwitchOutMdm: ISwitch() {
override suspend fun init(context: Context) { override suspend fun init(context: Context) {
this.context = context this.context = context
Prefs.setInSpace(context, false)
recover(context) recover(context)
MdmUtils.clearDefaultLauncher(context) MdmUtils.clearDefaultLauncher(context)
removeDisallowedRunningApp() removeDisallowedRunningApp()
......
...@@ -7,15 +7,21 @@ import android.os.Build ...@@ -7,15 +7,21 @@ import android.os.Build
import android.os.Handler import android.os.Handler
import android.os.Looper import android.os.Looper
import android.os.SystemClock import android.os.SystemClock
import com.secspace.lib.common.R
import com.secspace.lib.common.dialog.LoadingDialog import com.secspace.lib.common.dialog.LoadingDialog
import com.secspace.lib.common.env.Packages.PkgSecSpace import com.secspace.lib.common.env.Packages.PkgSecSpace
import com.secspace.lib.common.env.SEnvironment import com.secspace.lib.common.env.SEnvironment
import com.secspace.lib.common.function.ActivationHelper.ActivationListener
import com.secspace.lib.common.function.ActivationHelper.active
import com.secspace.lib.common.function.DialogManager.MessageListener
import com.secspace.lib.common.function.DialogManager.showActivateLoseDialog
import com.secspace.lib.common.utils.* import com.secspace.lib.common.utils.*
import com.secspace.log.Log import com.secspace.log.Log
import com.secspace.mdmengine.api.manager.MdmFactoryManager import com.secspace.mdmengine.api.manager.MdmFactoryManager
import com.skr.activation.network.linstener.CheckActiveStatusListener import com.skr.activation.network.linstener.CheckActiveStatusListener
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import java.io.File import java.io.File
...@@ -67,14 +73,34 @@ object WorkManager { ...@@ -67,14 +73,34 @@ object WorkManager {
} }
LoadingDialog.getInstance(launcher).show("切换中") LoadingDialog.getInstance(launcher).show("切换中")
GlobalScope.launch(Dispatchers.IO) { GlobalScope.launch(Dispatchers.IO) {
openAccessibility(launcher)
SwitchInMdm.onInit(launcher) SwitchInMdm.onInit(launcher)
checkLocalUpdateFile() //检查本地更新文件 activate(launcher)
// checkLocalUpdateFile() //检查本地更新文件
delay(5000)
ActivationHelper.checkActivate(launcher, EduCheckActiveStatusListener(launcher)) ActivationHelper.checkActivate(launcher, EduCheckActiveStatusListener(launcher))
} }
isChecksCompleted = true isChecksCompleted = true
Prefs.setMdmInitializedWhenEnter(mContext, true) Prefs.setMdmInitializedWhenEnter(mContext, true)
} }
fun activate(activity: Activity) {
active(activity, object : ActivationListener {
override fun activationFailed() {
showActivateLoseDialog(activity, activity.getString(R.string.common_remind)
, activity.getString(R.string.dialog_tip_activate_lose), object : MessageListener {
override fun onPositive() {
IntentUtil.startExitService(activity)
}
override fun onNegative() {}
})
}
override fun activated() {}
}, false)
}
fun exit(context: Context?) { fun exit(context: Context?) {
GlobalScope.launch(Dispatchers.IO) { GlobalScope.launch(Dispatchers.IO) {
context?.let { SwitchOutMdm.onExit(it) } context?.let { SwitchOutMdm.onExit(it) }
...@@ -152,7 +178,7 @@ object WorkManager { ...@@ -152,7 +178,7 @@ object WorkManager {
install(path) install(path)
} }
fun removeForbidden(context: Context){ fun removeForbidden(context: Context) {
Prefs.setMdmInitializedWhenEnter(context, false) Prefs.setMdmInitializedWhenEnter(context, false)
GlobalScope.launch(Dispatchers.IO) { GlobalScope.launch(Dispatchers.IO) {
SwitchOutMdm.onExit(context) SwitchOutMdm.onExit(context)
......
package com.secspace.lib.common.function.database
import android.arch.persistence.db.SupportSQLiteDatabase
import android.arch.persistence.room.Room
import android.arch.persistence.room.migration.Migration
import android.content.Context
import com.secspace.lib.common.function.database.dao.UseAppDao
import com.secspace.lib.common.function.database.dao.UseTimeDao
import com.secspace.lib.common.function.database.db.EduDatabase
class DatabaseManager private constructor(val context: Context) {
private var mEduDatabase: EduDatabase? = null
private var mUseAppDao: UseAppDao? = null
private var mUseTimeDao: UseTimeDao? = null
fun init() {
// mEduDatabase = RoomCipher.databaseBuilder(context, EduDatabase::class.java, "edu_space.db", "skr123")
// .fallbackToDestructiveMigration()
// .allowMainThreadQueries()
// .build()
mEduDatabase = Room.databaseBuilder(context, EduDatabase::class.java, "edu_space.db")
.fallbackToDestructiveMigration()
.allowMainThreadQueries()
.build()
mUseAppDao = mEduDatabase?.useAppDao()
mUseTimeDao = mEduDatabase?.useTimeDao()
}
fun getEduDatabase(): EduDatabase? {
return mEduDatabase
}
fun getUseAppDao(): UseAppDao? {
return mUseAppDao
}
fun getUseTimeDao(): UseTimeDao? {
return mUseTimeDao
}
/**
* 数据库版本 1->2 user表格新增了age列
*/
private val MIGRATION_1_2: Migration = object : Migration(1, 2) {
override fun migrate(database: SupportSQLiteDatabase) {
// database.execSQL("ALTER TABLE target_app ADD COLUMN age integer")
}
}
/**
* 数据库版本 2->3 新增book表格
*/
private val MIGRATION_2_3: Migration = object : Migration(2, 3) {
override fun migrate(database: SupportSQLiteDatabase) {
// database.execSQL(
// "CREATE TABLE IF NOT EXISTS `book` (`uid` INTEGER PRIMARY KEY autoincrement, `name` TEXT , `userId` INTEGER, 'time' INTEGER)")
}
}
companion object {
@Volatile
private var instance: DatabaseManager? = null
fun getInstance(context: Context): DatabaseManager {
if (instance == null) {
synchronized(DatabaseManager::class) {
if (instance == null) {
instance = DatabaseManager(context.applicationContext)
}
}
}
return instance!!
}
}
}
\ No newline at end of file
package com.secspace.lib.common.function.database.dao;
import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.Query;
import android.arch.persistence.room.Update;
import com.secspace.lib.common.function.model.UseApp;
import java.util.List;
@Dao
public interface UseAppDao {
@Query("select * from use_app")
List<UseApp> queryAll();
@Query("select * from use_app where upload_time = 0")
List<UseApp> queryNoupload();
@Query("select * from use_app where app_package = :packageName")
UseApp queryByPkg(String packageName);
@Insert
long insertTargetApp(UseApp targetApp);
@Insert
List<Long> insertTargetApps(List<UseApp> targetApps);
@Update
void updateTargetApp(UseApp targetApp);
@Update
void updateTargetApps(List<UseApp> targetApps);
}
package com.secspace.lib.common.function.database.dao;
import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.Query;
import android.arch.persistence.room.Update;
import com.secspace.lib.common.function.model.UseTime;
import java.util.List;
@Dao
public interface UseTimeDao {
@Query("select * from use_time")
List<UseTime> queryAll();
@Query("select * from use_time where (start_time >= :startTime AND start_time <= :endTime AND end_time >= :endTime)" +
" OR (end_time >= :startTime AND end_time <= :endTime AND start_time >= :startTime)" +
" OR (start_time <= :startTime AND end_time >= :endTime)" +
" OR (start_time >= :startTime AND end_time <= :endTime)")
List<UseTime> queryByTime(long startTime, long endTime);
@Query("select * from use_time where (app_package = :pkg) and ((start_time >= :startTime AND start_time <= :endTime AND end_time >= :endTime)" +
" OR (end_time >= :startTime AND end_time <= :endTime AND start_time >= :startTime)" +
" OR (start_time <= :startTime AND end_time >= :endTime)" +
" OR (start_time >= :startTime AND end_time <= :endTime))")
List<UseTime> queryByTimePkg(long startTime, long endTime, String pkg);
@Query("select * from use_time where upload_time = 0")
List<UseTime> queryNoupload();
@Insert
long insertUseTime(UseTime useTime);
@Insert
List<Long> insertUseTimes(List<UseTime> useTimes);
@Update
void updateUseTime(UseTime useTime);
@Update
void updateUseTimes(List<UseTime> useTimes);
}
package com.secspace.lib.common.function.database.db;
import android.arch.persistence.room.Database;
import android.arch.persistence.room.RoomDatabase;
import com.secspace.lib.common.function.database.dao.UseAppDao;
import com.secspace.lib.common.function.database.dao.UseTimeDao;
import com.secspace.lib.common.function.model.UseApp;
import com.secspace.lib.common.function.model.UseTime;
@Database(entities = {UseApp.class, UseTime.class}, exportSchema = false, version = 1)
public abstract class EduDatabase extends RoomDatabase {
public abstract UseAppDao useAppDao();
public abstract UseTimeDao useTimeDao();
}
package com.secspace.lib.common.function.model
data class Encrypted(var question1: String, var answer1: String, var question2: String, var answer2: String)
\ No newline at end of file
package com.secspace.lib.common.function.model;
import android.arch.persistence.room.ColumnInfo;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.Index;
import android.support.annotation.NonNull;
import java.io.Serializable;
@Entity(tableName = "use_app", primaryKeys = {"app_package"}, indices = {@Index("app_package")})
public class UseApp implements Serializable {
@ColumnInfo(name = "app_package")
private @NonNull String appPackage;
@ColumnInfo(name = "app_name")
private String appName;
@ColumnInfo(name = "icon")
private String icon;
@ColumnInfo(name = "upload_time")
private Long uploadTime;
public String getAppPackage() {
return appPackage;
}
public void setAppPackage(String appPackage) {
this.appPackage = appPackage;
}
public String getAppName() {
return appName;
}
public void setAppName(String appName) {
this.appName = appName;
}
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public Long getUploadTime() {
return uploadTime;
}
public void setUploadTime(Long uploadTime) {
this.uploadTime = uploadTime;
}
}
package com.secspace.lib.common.function.model;
import android.arch.persistence.room.ColumnInfo;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.PrimaryKey;
import org.jetbrains.annotations.NotNull;
import java.io.Serializable;
@Entity(tableName = "use_time")
public class UseTime implements Serializable {
@PrimaryKey(autoGenerate = true)
private Integer id;
@ColumnInfo(name = "start_time")
private Long useStartTime;
@ColumnInfo(name = "end_time")
private Long useEndTime;
@ColumnInfo(name = "upload_time")
private Long uploadTime;
@ColumnInfo(name = "app_package")
private @NotNull
String appPackage;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Long getUseStartTime() {
return useStartTime;
}
public void setUseStartTime(Long useStartTime) {
this.useStartTime = useStartTime;
}
public Long getUseEndTime() {
return useEndTime;
}
public void setUseEndTime(Long useEndTime) {
this.useEndTime = useEndTime;
}
public Long getUploadTime() {
return uploadTime;
}
public void setUploadTime(Long uploadTime) {
this.uploadTime = uploadTime;
}
@NotNull
public String getAppPackage() {
return appPackage;
}
public void setAppPackage(@NotNull String appPackage) {
this.appPackage = appPackage;
}
}
package com.secspace.lib.common.function.service
import android.accessibilityservice.AccessibilityService
import android.annotation.SuppressLint
import android.content.Context
import android.view.accessibility.AccessibilityEvent
import com.secspace.lib.common.utils.Prefs
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
/**
* Created by bxy on 2020-04-01
*/
class EduAccessibilityService : AccessibilityService() {
private var pkgCache = arrayListOf("EduAccessibilityService")
private var isWait = false
private lateinit var context:Context
@SuppressLint("StringFormatInvalid")
override fun onAccessibilityEvent(event: AccessibilityEvent) {
context = this.applicationContext
val pkg = event.packageName as String
// 过滤不需要关注的包名
pkgCache[0] = pkg
if (isWait) {
return
}
GlobalScope.launch(Dispatchers.IO) {
while (Prefs.isInSpace(context)) {
isWait = true
UseAppManager.getInstance(context).disposePackageName(pkgCache[0])
delay(60 * 1000)
isWait = false
}
}
}
override fun onInterrupt() {}
override fun onServiceConnected() {
super.onServiceConnected()
}
override fun onDestroy() {
super.onDestroy()
}
companion object {
private const val TAG = "EduAccessibilityService"
}
}
\ No newline at end of file
package com.secspace.lib.common.function.service
import android.content.Context
import android.util.Log
import com.secspace.lib.common.function.database.DatabaseManager
import com.secspace.lib.common.function.model.UseApp
import com.secspace.lib.common.function.model.UseTime
import com.secspace.lib.common.utils.getApplicationIcon
import com.secspace.lib.common.utils.getApplicationName
class UseAppManager private constructor(val context: Context) {
private val TAG = "UseAppManager"
private val pkgQueue: ArrayList<UseTime> = arrayListOf()
private var ignorePkg = arrayListOf("android", "com.eduspace.mobilemanager", "com.vmall.client", "com.android.systemui")
suspend fun disposePackageName(packageName: String) {
val useTime = UseTime()
useTime.appPackage = packageName
useTime.useStartTime = System.currentTimeMillis()
useTime.uploadTime = 0
// 是否是应该被忽略的应用
if(ignorePkg.contains(packageName)){
if (pkgQueue.isEmpty()) {
return
}
if(pkgQueue.size == 1){
val existPkg = pkgQueue[0]
// 本次应用与上次应用一样,清空缓存
if (existPkg.appPackage == useTime.appPackage){
pkgQueue.clear()
return
}
// 本次应用与上次不一样,计算时间,如果大于65s,则将赋予上次应用结束时间,存入数据库,并将上次应用移除
Log.i(TAG, "上次时间 ${existPkg.useStartTime}, 本次时间 ${useTime.useStartTime} 差: ${useTime.useStartTime - existPkg.useStartTime}")
if (useTime.useStartTime - existPkg.useStartTime >= 65 * 1000){
// 给应用赋予结束时间
existPkg.useEndTime = System.currentTimeMillis()
Log.i(TAG, "insertUseTime:${DatabaseManager.getInstance(context).getUseTimeDao()}")
// 存入数据库
val result = DatabaseManager.getInstance(context).getUseTimeDao()?.insertUseTime(existPkg)
Log.i(TAG, "insertUseTime result:$result")
pkgQueue.clear()
}
}
return
}
// 第一次打开某应用,将其放到第一位
if (pkgQueue.isEmpty()) {
Log.i(TAG, "pkgQueue is Empty")
pkgQueue.add(0, useTime)
return
}
if(pkgQueue.size == 1){
// 取出上一轮存储的应用
val existPkg = pkgQueue[0]
// 本次应用与上次应用一样,什么也不做
Log.i(TAG, "上次应用 ${existPkg.appPackage}, 本次应用 ${useTime.appPackage}")
if (existPkg.appPackage == useTime.appPackage){
return
}
// 本次应用与上次不一样,计算时间,如果大于65s,则将赋予上次应用结束时间,存入数据库,并将上次应用移除
Log.i(TAG, "上次时间 ${existPkg.useStartTime}, 本次时间 ${useTime.useStartTime} 差: ${useTime.useStartTime - existPkg.useStartTime}")
if (useTime.useStartTime - existPkg.useStartTime >= 65 * 1000){
// 给应用赋予结束时间
existPkg.useEndTime = System.currentTimeMillis()
// 存入数据库
DatabaseManager.getInstance(context).getUseTimeDao()?.insertUseTime(existPkg)
}
// 无论是否存数据库,都要替换掉
pkgQueue[0] = useTime
return
}
}
private fun disposeApp(packageName: String){
val appName = getApplicationName(context, packageName)
val icon = getApplicationIcon(context, packageName)
val useApp = UseApp()
}
companion object {
@Volatile
private var instance: UseAppManager? = null
fun getInstance(context: Context): UseAppManager {
if (instance == null) {
synchronized(UseAppManager::class) {
if (instance == null) {
instance = UseAppManager(context.applicationContext)
}
}
}
return instance!!
}
}
}
\ No newline at end of file
package com.secspace.lib.common.function.view;
import android.animation.ValueAnimator;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.View;
import android.view.animation.AccelerateDecelerateInterpolator;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
* 应用使用时间进度条
*/
public class TimeProgress extends View {
private Paint bgPaint;
private Paint textPaint;
private int mWidth;
private int mHeight;
private List<Integer> times = new ArrayList<>();
private List<Integer> paintColors = new ArrayList<>();
private float allTime = 0F;
private float animationValue;
private float cylindricalStartLeft;
private float indicatorMargin;
/**
* 进度动画
*/
private ValueAnimator progressAnimator;
/**
* 动画执行时间
*/
private int duration = 1000;
/**
* 动画延时启动时间
*/
private int startDelay = 500;
/**
* 进度条画笔的宽度
*/
private int progressPaintWidth;
private int progressHeight;
private int textHeight;
/**
* 柱状图距提示文字的高度
*/
private int tipsMargin;
private int textSize;
/**
* 进度条背景颜色
*/
private int bgColor = 0xFFf66b12;
/**
* 进度条颜色
*/
private int progressColor = 0xFFf66b12;
private RectF bgRectF = new RectF();
/**
* 圆角矩形的圆角半径
*/
private int roundRectRadius;
private int paddingLeft;
private int paddingTop;
private int paddingRight;
private int paddingBottom;
public TimeProgress(Context context) {
this(context, null);
}
public TimeProgress(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public TimeProgress(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
initPaint();
initTextPaint();
times.add(10);
times.add(20);
times.add(80);
times.add(50);
Comparator<Integer> reverseComparator = Collections.reverseOrder();
Collections.sort(times, reverseComparator);
paintColors.add(0xFF13A6FA);
paintColors.add(0xFF9BFA13);
paintColors.add(0xFFFAB613);
paintColors.add(0xFFE5E5E5);
allTime = 160;
}
/**
* 初始化画笔宽度及view大小
*/
private void init() {
progressPaintWidth = dp2px(5);
progressHeight = dp2px(15);
roundRectRadius = dp2px(3);
indicatorMargin = dp2px(1);
tipsMargin = progressHeight;
textSize = dp2px(12);
}
private void initPaint() {
bgPaint = getPaint(progressPaintWidth, bgColor, Paint.Style.FILL);
}
/**
* 初始化文字画笔
*/
private void initTextPaint() {
textPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
textPaint.setColor(progressColor);
textPaint.setTextSize(textSize);
textPaint.setTextAlign(Paint.Align.CENTER);
textPaint.setAntiAlias(true);
}
private int getTextHeight(String text, Paint paint) {
Rect rect = new Rect();
paint.getTextBounds(text, 0, text.length(), rect);
return rect.height();
}
private int getTextWidth(String text, Paint paint) {
Rect rect = new Rect();
paint.getTextBounds(text, 0, text.length(), rect);
return rect.width();
}
/**
* 统一处理paint
*
* @param strokeWidth 画笔宽度
* @param color 颜色
* @param style 风格
* @return paint
*/
private Paint getPaint(int strokeWidth, int color, Paint.Style style) {
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setStrokeWidth(strokeWidth);
paint.setColor(color);
paint.setAntiAlias(true);
paint.setStyle(style);
return paint;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int width = MeasureSpec.getSize(widthMeasureSpec);
int heightMode = MeasureSpec.getMode(heightMeasureSpec);
int height = MeasureSpec.getSize(heightMeasureSpec);
parameterAssignment();
setMeasuredDimension(measureWidth(widthMode, width), measureHeight(heightMode, height));
}
/**
* 测量宽度
*
* @param mode
* @param width
* @return
*/
private int measureWidth(int mode, int width) {
switch (mode) {
case MeasureSpec.UNSPECIFIED:
case MeasureSpec.AT_MOST:
break;
case MeasureSpec.EXACTLY:
mWidth = width;
break;
}
return mWidth;
}
public void setWidth(int width) {
mWidth = width;
}
/**
* 测量高度
*
* @param mode
* @param height
* @return
*/
private int measureHeight(int mode, int height) {
switch (mode) {
case MeasureSpec.UNSPECIFIED:
case MeasureSpec.AT_MOST:
textHeight = getTextHeight("measureHeight", textPaint);
mHeight = progressPaintWidth + progressHeight + tipsMargin + textHeight * 2 + paddingTop + paddingBottom;
break;
case MeasureSpec.EXACTLY:
mHeight = height;
break;
}
return mHeight;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 初始化width,padding等参数
parameterAssignment();
// 绘制横向柱状图
drawHorizontalCylindrical(canvas);
drawIndicator(canvas);
}
private void drawIndicator(Canvas canvas) {
// 平分后每份的长度
float share = mWidth / times.size();
float x, y;
for (int i = 0; i < times.size(); i++) {
int time = times.get(i);
String text = time + "分钟";
textPaint.setColor(0xff000000);
bgPaint.setColor(paintColors.get(i));
float textHeight = getTextHeight(text, textPaint);
float textWidth = getTextWidth(text, textPaint);
x = share * i + share / 2;
if (i == 0) {
x = x + paddingLeft;
}
y = textHeight + tipsMargin + progressHeight + paddingLeft;
canvas.drawRect(x - textWidth, y - textHeight + indicatorMargin, x - textWidth + textHeight, y + indicatorMargin, bgPaint);
canvas.drawText(text, x, y, textPaint);
canvas.drawText(text, x, y + textHeight + tipsMargin / 3, textPaint);
}
}
private void drawHorizontalCylindrical(Canvas canvas) {
for (int i = 0; i < times.size(); i++) {
int time = times.get(i);
float rate = time / allTime;
if (i == 0) {
bgRectF.left = cylindricalStartLeft + paddingLeft;
} else {
bgRectF.left = cylindricalStartLeft + 10;
}
bgPaint.setColor(paintColors.get(i));
bgRectF.top = paddingTop;
bgRectF.right = mWidth * rate * animationValue / 100 + cylindricalStartLeft;
bgRectF.bottom = bgRectF.top + progressHeight;
if (i == times.size() - 1) {
bgRectF.right = mWidth * rate * animationValue / 100 - paddingRight + cylindricalStartLeft;
}
cylindricalStartLeft = bgRectF.right;
canvas.drawRoundRect(bgRectF, roundRectRadius, roundRectRadius, bgPaint);
}
cylindricalStartLeft = 0;
}
public void initAnimation() {
progressAnimator = ValueAnimator.ofFloat(0, 100);
progressAnimator.setDuration(duration);
progressAnimator.setStartDelay(startDelay);
progressAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
progressAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
animationValue = (float) valueAnimator.getAnimatedValue();
invalidate();
}
});
if (!progressAnimator.isStarted()) {
progressAnimator.start();
}
}
private void parameterAssignment() {
mWidth = getMeasuredWidth();
paddingLeft = getPaddingLeft();
paddingTop = getPaddingTop();
paddingRight = getPaddingRight();
paddingBottom = getPaddingBottom();
}
/**
* 格式化数字(保留一位小数)
*
* @param money
* @return
*/
public static String formatNum(int money) {
DecimalFormat format = new DecimalFormat("0");
return format.format(money);
}
/**
* dp 2 px
*
* @param dpVal
*/
protected int dp2px(int dpVal) {
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
dpVal, getResources().getDisplayMetrics());
}
/**
* sp 2 px
*
* @param spVal
* @return
*/
protected int sp2px(int spVal) {
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,
spVal, getResources().getDisplayMetrics());
}
}
...@@ -147,7 +147,7 @@ public class CheckUpdateCore { ...@@ -147,7 +147,7 @@ public class CheckUpdateCore {
.server(BuildConfig.UPDATE_SERVER) .server(BuildConfig.UPDATE_SERVER)
.name(BuildConfig.UPDATE_FLAG) .name(BuildConfig.UPDATE_FLAG)
.companyId(BuildConfig.COMPANY_ID) .companyId(BuildConfig.COMPANY_ID)
.showDownloadDialog(true) .showDownloadDialog(false)
.showDownloadNotification(false) .showDownloadNotification(false)
.appInstallPolicy(AppInstallPolicy.SILENT_INSTALL) .appInstallPolicy(AppInstallPolicy.SILENT_INSTALL)
.build(); .build();
......
...@@ -6,6 +6,8 @@ import android.util.ArrayMap; ...@@ -6,6 +6,8 @@ import android.util.ArrayMap;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken; import com.google.gson.reflect.TypeToken;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -45,4 +47,22 @@ public class JsonUtil { ...@@ -45,4 +47,22 @@ public class JsonUtil {
return gson.fromJson(json, new TypeToken<ArrayMap>() { return gson.fromJson(json, new TypeToken<ArrayMap>() {
}.getType()); }.getType());
} }
// public static <T>T json2Class(String json) {
// if (TextUtils.isEmpty(json)) {
// return null;
// }
// Gson gson = new Gson();
// Type type = ((ParameterizedType) T.class.getGenericSuperclass()).getActualTypeArguments()[0];
// return gson.fromJson(json, new TypeToken<T>() {
// }.getType());
// }
public static <T> T fromJson(String result, Class<T> classOfT) {
if (result == null) {
return null;
}
Gson gson = new Gson();
return gson.fromJson(result, classOfT);
}
} }
package com.secspace.lib.common.utils
import android.content.Context
import android.content.pm.PackageManager
import android.graphics.drawable.Drawable
import android.provider.Settings
import com.secspace.lib.common.function.service.EduAccessibilityService
import com.skr.activation.utils.DesUtil
fun decrypt(strMi: String): String {
return DesUtil.decrypt(strMi)
}
fun encrypt(strMi: String): String {
return DesUtil.encrypt(strMi)
}
fun openAccessibility(ctx: Context) {
try {
Settings.Secure.putString(ctx.contentResolver,
Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES, ctx.packageName + "/" + EduAccessibilityService::class.java.name)
Settings.Secure.putString(ctx.contentResolver,
Settings.Secure.ACCESSIBILITY_ENABLED, "1")
} catch (e: Exception) {
e.printStackTrace()
}
}
fun closeAccessibility(ctx: Context) {
try {
Settings.Secure.putString(ctx.contentResolver,
Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES, "")
} catch (e: Exception) {
e.printStackTrace()
}
}
fun getApplicationName(context: Context?, packageName: String): String {
val pm = context?.packageManager
return try {
pm?.getApplicationLabel(pm.getApplicationInfo(packageName, PackageManager.GET_META_DATA)).toString()
} catch (e: java.lang.Exception) {
pm?.getApplicationInfo(packageName, PackageManager.GET_META_DATA)?.loadLabel(pm).toString()
}
}
fun getApplicationIcon(context: Context?, packageName: String): Drawable? {
val pm = context?.packageManager
return try {
pm?.getApplicationIcon(pm.getApplicationInfo(packageName, PackageManager.GET_META_DATA))
} catch (e: java.lang.Exception) {
pm?.getApplicationInfo(packageName, PackageManager.GET_META_DATA)?.loadIcon(pm)
}
}
...@@ -18,8 +18,7 @@ ...@@ -18,8 +18,7 @@
android:paddingTop="12dp" android:paddingTop="12dp"
android:text="" android:text=""
android:textColor="@color/text_title_11" android:textColor="@color/text_title_11"
android:textSize="@dimen/dialogui_title_txt_size" android:textSize="@dimen/dialogui_title_txt_size"/>
android:textStyle="bold"/>
<LinearLayout <LinearLayout
...@@ -75,7 +74,21 @@ ...@@ -75,7 +74,21 @@
android:textCursorDrawable="@drawable/dialogui_shape_et_cursor" android:textCursorDrawable="@drawable/dialogui_shape_et_cursor"
android:textSize="@dimen/dialogui_input_txt_size"/> android:textSize="@dimen/dialogui_input_txt_size"/>
<TextView
android:id="@+id/tv_third"
android:layout_width="wrap_content"
android:layout_height="35dp"
android:layout_marginTop="-15dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="30dp"
android:visibility="gone"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:text="忘记密码"
android:layout_gravity="center_vertical|right"
android:gravity="center"
android:textColor="@color/ios_btntext_blue"
android:textSize="@dimen/dialogui_input_txt_size"/>
</LinearLayout> </LinearLayout>
<View <View
......
...@@ -8,9 +8,8 @@ ...@@ -8,9 +8,8 @@
android:id="@+id/title" android:id="@+id/title"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="48dp" android:layout_height="48dp"
android:layout_gravity="center_horizontal" android:layout_gravity="center"
android:layout_marginTop="5dp" android:gravity="center"
android:layout_marginBottom="10dp"
android:text="@string/title_permissions" android:text="@string/title_permissions"
android:textColor="@color/btn_exit" android:textColor="@color/btn_exit"
android:textSize="16sp" /> android:textSize="16sp" />
......
...@@ -39,5 +39,6 @@ ...@@ -39,5 +39,6 @@
<string name="close_btn">关闭</string> <string name="close_btn">关闭</string>
<string name="btn_input_code">输入激活码</string> <string name="btn_input_code">输入激活码</string>
<string name="dialog_tip_activate_lose">您的激活已失效,如有疑问请致电4008265936</string> <string name="dialog_tip_activate_lose">网络异常,请确认网络后重新进入</string>
<string name="accessibility_tips">为了确保此应用正常运行,需要开启辅助功能</string>
</resources> </resources>
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFeedbackType="feedbackGeneric"
android:accessibilityFlags=""
android:canRetrieveWindowContent="true"
android:description="@string/accessibility_tips"
android:notificationTimeout="100" />
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment