Commit 8e1d1d33 by Baoxy

fix: 完成需求

1.新增密保 2.输入密码时需要两次确认
parent 7fee0f44
...@@ -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
...@@ -110,6 +110,11 @@ ...@@ -110,6 +110,11 @@
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
...@@ -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/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,16 +41,16 @@ ...@@ -41,16 +41,16 @@
<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
...@@ -63,6 +63,42 @@ ...@@ -63,6 +63,42 @@
android:checked="true" /> android:checked="true" />
</LinearLayout> </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="40dp"
android:layout_height="25dp"
android:layout_centerVertical="true"
android:layout_marginRight="20dp"
android:button="@drawable/cb_selector"
android:checked="true" />
</LinearLayout>
<Button <Button
android:id="@+id/btn_sure" android:id="@+id/btn_sure"
android:layout_width="match_parent" android:layout_width="match_parent"
......
<?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" />
<EditText
android:id="@+id/et_question1"
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="#FFFFFF"
android:hint="@string/edu_item_input_encryted_question1"
android:maxLength="50"
android:maxLines="1"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:textColor="#363636"
android:textColorHint="#8D8D8D"
android:textSize="16sp" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#DDDFE1" />
<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:paddingLeft="16dp"
android:paddingRight="16dp"
android:textColor="#363636"
android:textColorHint="#8D8D8D"
android:textSize="16sp" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#DDDFE1" />
<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:paddingLeft="16dp"
android:paddingRight="16dp"
android:textColor="#363636"
android:textColorHint="#8D8D8D"
android:textSize="16sp" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#DDDFE1" />
<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:paddingLeft="16dp"
android:paddingRight="16dp"
android:textColor="#363636"
android:textColorHint="#8D8D8D"
android:textSize="16sp" />
<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/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" />
<TextView
android:id="@+id/tv_question1"
android:layout_width="match_parent"
android:layout_height="48dp"
android:drawablePadding="10dp"
android:gravity="center_vertical"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:text="@string/edu_item_input_encryted_question1"
android:textColor="#363636"
android:textSize="16sp" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#DDDFE1" />
<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:paddingLeft="16dp"
android:paddingRight="16dp"
android:textColor="#363636"
android:textColorHint="#8D8D8D"
android:textSize="16sp" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#DDDFE1" />
<TextView
android:id="@+id/tv_question2"
android:layout_width="match_parent"
android:layout_height="48dp"
android:drawablePadding="10dp"
android:gravity="center_vertical"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:text="@string/edu_item_input_encryted_question1"
android:textColor="#363636"
android:textSize="16sp" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#DDDFE1" />
<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:maxLength="50"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:textColor="#363636"
android:textColorHint="#8D8D8D"
android:textSize="16sp" />
<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/ripple_bg"
android:elevation="3dp"
android:gravity="center"
android:text="@string/common_sure"
android:textColor="#fafafa"
android:textSize="16sp" />
</LinearLayout>
...@@ -361,5 +361,23 @@ ...@@ -361,5 +361,23 @@
<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>
</resources> </resources>
...@@ -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,7 @@ import com.secspace.lib.common.event.RefreshWorkSpaceEvent; ...@@ -160,6 +160,7 @@ 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.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 +169,10 @@ import com.secspace.lib.common.utils.FileUtil; ...@@ -168,8 +169,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 +409,8 @@ public class Launcher extends BaseActivity ...@@ -406,6 +409,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,36 +1205,14 @@ public class Launcher extends BaseActivity ...@@ -1200,36 +1205,14 @@ 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() {
DialogManager.INSTANCE.showActivateLoseDialog(Launcher.this, getString(R.string.common_remind)
, getString(R.string.dialog_tip_activate_lose), new DialogManager.MessageListener() {
@Override
public void onPositive() {
IntentUtil.startHomeIntent(Launcher.this);
}
@Override
public void onNegative() {
}
})
;
}
@Override
public void activated() {
WorkManager.INSTANCE.enter(Launcher.this);
}
}, false);
} }
public static void forceReload(){ public static void forceReload() {
LauncherAppState app = LauncherAppState.getInstanceNoCreate(); LauncherAppState app = LauncherAppState.getInstanceNoCreate();
if (app != null) { if (app != null) {
LauncherModel model = app.getModel(); LauncherModel model = app.getModel();
if(model != null){ if (model != null) {
model.forceReload(); model.forceReload();
} }
} }
...@@ -3124,12 +3107,17 @@ public class Launcher extends BaseActivity ...@@ -3124,12 +3107,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("密码错误");
...@@ -3143,6 +3131,51 @@ public class Launcher extends BaseActivity ...@@ -3143,6 +3131,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(R.string.edu_item_input_encryted_title);
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();
......
...@@ -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(R.string.edu_item_input_encryted_title);
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();
} }
}); });
} }
......
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
...@@ -12,16 +13,22 @@ import android.view.inputmethod.InputMethodManager ...@@ -12,16 +13,22 @@ 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.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.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)
...@@ -38,7 +45,7 @@ class ChangePwdActivity : BaseActivity() { ...@@ -38,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 {
DialogUIUtils.showToastCenter(R.string.edu_toast_wait) showEncryptedVerDialog()
} }
} }
...@@ -87,6 +94,46 @@ class ChangePwdActivity : BaseActivity() { ...@@ -87,6 +94,46 @@ class ChangePwdActivity : BaseActivity() {
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
...@@ -44,10 +44,12 @@ public class PwdPinSetPwdActivity extends BaseActivity implements View.OnClickLi ...@@ -44,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) {
...@@ -58,11 +60,14 @@ public class PwdPinSetPwdActivity extends BaseActivity implements View.OnClickLi ...@@ -58,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() {
...@@ -84,19 +89,21 @@ public class PwdPinSetPwdActivity extends BaseActivity implements View.OnClickLi ...@@ -84,19 +89,21 @@ public class PwdPinSetPwdActivity extends BaseActivity implements View.OnClickLi
case R.id.btn_sure: case R.id.btn_sure:
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0); 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());
DialogUIUtils.showToastCenter("密码不能为空"); 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)) {
DialogUIUtils.showToastCenter("密码至少为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位组合");
...@@ -112,11 +119,23 @@ public class PwdPinSetPwdActivity extends BaseActivity implements View.OnClickLi ...@@ -112,11 +119,23 @@ 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
...@@ -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
......
...@@ -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;
...@@ -37,9 +38,17 @@ public class BlankActivity extends BaseActivity { ...@@ -37,9 +38,17 @@ public class BlankActivity extends BaseActivity {
DialogManager.INSTANCE.showPrivacyPolicyDialog(this); DialogManager.INSTANCE.showPrivacyPolicyDialog(this);
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;
} }
......
...@@ -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=2020032402 versionIntCode=2020032601
versionNameMajor=1 versionNameMajor=1
versionNameMinor=1 versionNameMinor=2
versionNamePatch=0 versionNamePatch=0
\ No newline at end of file
...@@ -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线程调用。
*/ */
......
...@@ -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
/** /**
* 安装中间件弹窗 * 安装中间件弹窗
...@@ -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
...@@ -10,6 +10,10 @@ import android.os.SystemClock ...@@ -10,6 +10,10 @@ import android.os.SystemClock
import com.secspace.lib.common.R 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.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
...@@ -56,13 +60,31 @@ object WorkManager { ...@@ -56,13 +60,31 @@ object WorkManager {
LoadingDialog.getInstance(launcher).show("切换中") LoadingDialog.getInstance(launcher).show("切换中")
GlobalScope.launch(Dispatchers.IO) { GlobalScope.launch(Dispatchers.IO) {
SwitchInMdm.onInit(launcher) SwitchInMdm.onInit(launcher)
checkLocalUpdateFile() //检查本地更新文件 activate(launcher)
// checkLocalUpdateFile() //检查本地更新文件
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) }
...@@ -140,7 +162,7 @@ object WorkManager { ...@@ -140,7 +162,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.model
data class Encrypted(var question1: String, var answer1: String, var question2: String, var answer2: String)
\ No newline at end of file
...@@ -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 com.skr.activation.utils.DesUtil
fun decrypt(strMi: String): String{
return DesUtil.decrypt(strMi)
}
fun encrypt(strMi: String): String{
return DesUtil.encrypt(strMi)
}
\ No newline at end of file
...@@ -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
......
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