Commit 7808bffa by Baoxy

fix: 优化弹窗/增加激活失效提醒

parent 5c0a770c
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<codeStyleSettings language="XML">
<indentOptions>
<option name="CONTINUATION_INDENT_SIZE" value="4" />
</indentOptions>
<arrangement>
<rules>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:android</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:id</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:name</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>name</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>style</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
<order>ANDROID_ATTRIBUTE_ORDER</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>.*</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
</rules>
</arrangement>
</codeStyleSettings>
</code_scheme>
</component>
\ No newline at end of file
...@@ -132,6 +132,7 @@ dependencies { ...@@ -132,6 +132,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 'com.dou361.dialogui:jjdxm-dialogui:1.0.2'
} }
......
...@@ -3,6 +3,7 @@ package com.android.launcher3; ...@@ -3,6 +3,7 @@ package com.android.launcher3;
import android.app.Application; import android.app.Application;
import android.content.Context; import android.content.Context;
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.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 {
} }
ActivationHelper.INSTANCE.init(mApp); ActivationHelper.INSTANCE.init(mApp);
CheckUpdateCore.get().init(this); CheckUpdateCore.get().init(this);
DialogUIUtils.init(mApp);
} }
} }
...@@ -157,6 +157,7 @@ import com.secspace.lib.common.event.ChangeWallPaperEvent; ...@@ -157,6 +157,7 @@ import com.secspace.lib.common.event.ChangeWallPaperEvent;
import com.secspace.lib.common.event.InitEvent; import com.secspace.lib.common.event.InitEvent;
import com.secspace.lib.common.event.RefreshWorkSpaceEvent; 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.WorkManager; import com.secspace.lib.common.function.WorkManager;
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;
...@@ -3111,45 +3112,24 @@ public class Launcher extends BaseActivity ...@@ -3111,45 +3112,24 @@ public class Launcher extends BaseActivity
return false; return false;
} }
AlertDialog mPwdDialog;
private void showPwdDialog() { private void showPwdDialog() {
if (mPwdDialog == null) { DialogManager.INSTANCE.showPwdDialog(this, "请输入密码" ,new DialogManager.PwdListener(){
final EditText editText = new EditText(this);
editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); @Override
View view = LayoutInflater.from(this).inflate(R.layout.item_ll, null); public void onPositive(View view) {
LinearLayout ll = view.findViewById(R.id.item_ll); InputUtil.closeSoftInput(getApplicationContext(), view);
ll.addView(editText); if (TextUtils.equals(((EditText)view).getText().toString(), Prefs.getLoginPwd(mAppContext))) {
mPwdDialog = new AlertDialog.Builder(this) IntentUtil.startExitService(mAppContext);
.setTitle("请输入密码") } else {
.setCancelable(false) ToastUtil.showLong(mAppContext, "密码错误!");
.setView(view) ErrorTimeHelper.getInstance(mAppContext).addErrorCount();
.setNegativeButton(R.string.work_cancel, new DialogInterface.OnClickListener() { }
@Override }
public void onClick(DialogInterface dialog, int which) {
editText.setText(""); @Override
dialog.dismiss(); public void onNegative() {
} }
}) });
.setPositiveButton(R.string.work_sure, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
InputUtil.closeSoftInput(getApplicationContext(), editText);
if (TextUtils.equals(editText.getText().toString(), Prefs.getLoginPwd(mAppContext))) {
IntentUtil.startExitService(mAppContext);
} else {
ToastUtil.showLong(mAppContext, "密码错误!");
ErrorTimeHelper.getInstance(mAppContext).addErrorCount();
}
editText.setText("");
dialog.dismiss();
}
})
.create();
}
if (!mPwdDialog.isShowing()) {
mPwdDialog.show();
}
} }
@Override @Override
......
package com.android.launcher3; package com.android.launcher3;
import android.app.AlertDialog;
import android.content.Context; import android.content.Context;
import android.os.Bundle;
import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.text.InputType;
import android.text.TextUtils; import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.widget.EditText; import android.widget.EditText;
import android.widget.LinearLayout;
import com.android.launcher3.function.setting.AdminSettingActivity; import com.android.launcher3.function.setting.AdminSettingActivity;
import com.android.launcher3.settings.ErrorTimeHelper; import com.android.launcher3.settings.ErrorTimeHelper;
import com.secspace.lib.common.function.DialogManager;
import com.secspace.lib.common.utils.InputUtil; import com.secspace.lib.common.utils.InputUtil;
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;
...@@ -24,7 +19,6 @@ import com.secspace.lib.common.utils.ToastUtil; ...@@ -24,7 +19,6 @@ import com.secspace.lib.common.utils.ToastUtil;
public class ManagerAuthActivity extends BaseActivity { public class ManagerAuthActivity extends BaseActivity {
protected Context mAppContext; protected Context mAppContext;
AlertDialog mPwdDialog;
@Override @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
...@@ -34,72 +28,35 @@ public class ManagerAuthActivity extends BaseActivity { ...@@ -34,72 +28,35 @@ public class ManagerAuthActivity extends BaseActivity {
} }
private void showPwdDialog() { private void showPwdDialog() {
if (mPwdDialog == null) { DialogManager.INSTANCE.showPwdDialog(this, "请输入密码" ,new DialogManager.PwdListener(){
final EditText editText = new EditText(this);
editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); @Override
// TextView textView = new TextView(this); public void onPositive(View view) {
// textView.setText("验证密保"); EditText editText = (EditText) view;
// textView.setTextColor(getColor(R.color.activation_black)); InputUtil.closeSoftInput(getApplicationContext(), editText);
// textView.setGravity(Gravity.RIGHT | Gravity.CENTER_VERTICAL); boolean canInputPwd = ErrorTimeHelper.getInstance(mAppContext).canInputPwd();
// textView.setWidth(LinearLayout.LayoutParams.MATCH_PARENT); if (canInputPwd){
// textView.setWidth(LinearLayout.LayoutParams.WRAP_CONTENT); if (TextUtils.equals(editText.getText().toString(), Prefs.getLoginPwd(mAppContext))) {
// textView.setPadding(15, 15, 15, 15); ToastUtil.showLong(mAppContext, "密码正确!");
View view = LayoutInflater.from(mAppContext).inflate(R.layout.item_ll, null); finish();
LinearLayout ll = view.findViewById(R.id.item_ll); ErrorTimeHelper.getInstance(mAppContext).resetLockTimeAndCount();
ll.addView(editText); Intent intent = new Intent();
// ll.addView(textView); intent.setClass(mAppContext, AdminSettingActivity.class);
// textView.setOnClickListener(new View.OnClickListener() { startActivity(intent);
// @Override } else {
// public void onClick(View v) { ToastUtil.showLong(mAppContext, "密码错误!");
// Intent intent = new Intent(ManagerAuthActivity.this, VerifyPwdProtectionActivity.class); ErrorTimeHelper.getInstance(mAppContext).addErrorCount();
// intent.putExtra(FROM_WHERE, ManagerAuthActivity.class.getSimpleName()); finish();
// startActivity(intent); }
// if (mPwdDialog != null && mPwdDialog.isShowing()) { }else {
// InputUtil.closeSoftInput(getApplicationContext(), editText); ToastUtil.showShort(mAppContext,"请在"+ ErrorTimeHelper.getInstance(mAppContext).getCountDownTime()+"秒后重试");
// mPwdDialog.dismiss(); finish();
// finish(); }
// } }
// }
// }); @Override
mPwdDialog = new AlertDialog.Builder(this) public void onNegative() {
.setTitle("请输入密码") }
.setCancelable(false) });
.setView(view)
.setNegativeButton(R.string.work_cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
finish();
}
})
.setPositiveButton(R.string.work_sure, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
InputUtil.closeSoftInput(getApplicationContext(), editText);
boolean canInputPwd = ErrorTimeHelper.getInstance(mAppContext).canInputPwd();
if (canInputPwd){
if (TextUtils.equals(editText.getText().toString(), Prefs.getLoginPwd(mAppContext))) {
ToastUtil.showLong(mAppContext, "密码正确!");
finish();
ErrorTimeHelper.getInstance(mAppContext).resetLockTimeAndCount();
Intent intent = new Intent();
intent.setClass(mAppContext, AdminSettingActivity.class);
startActivity(intent);
} else {
ToastUtil.showLong(mAppContext, "密码错误!");
ErrorTimeHelper.getInstance(mAppContext).addErrorCount();
finish();
}
}else {
ToastUtil.showShort(mAppContext,"请在"+ ErrorTimeHelper.getInstance(mAppContext).getCountDownTime()+"秒后重试");
finish();
}
}
})
.create();
}
if (!mPwdDialog.isShowing()) {
mPwdDialog.show();
}
} }
} }
package com.android.launcher3.function.setting package com.android.launcher3.function.setting
import android.app.Activity import android.app.Activity
import android.app.AlertDialog
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.view.LayoutInflater
import android.view.View import android.view.View
import android.widget.GridLayout import android.widget.GridLayout
import android.widget.LinearLayout
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.mdm.DisableCompat import com.android.launcher3.mdm.DisableCompat
...@@ -17,6 +13,7 @@ import com.qmuiteam.qmui.widget.grouplist.QMUICommonListItemView ...@@ -17,6 +13,7 @@ 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.SwitcherDialog 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.utils.PkgManager import com.secspace.lib.common.utils.PkgManager
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
...@@ -87,8 +84,8 @@ class AdminSettingActivity : BaseActivity() { ...@@ -87,8 +84,8 @@ class AdminSettingActivity : BaseActivity() {
if (isChecked) showTipDialog({ }, { allowApp?.switch?.isChecked = false }, getString(R.string.open_new_app_tip)) if (isChecked) showTipDialog({ }, { allowApp?.switch?.isChecked = false }, getString(R.string.open_new_app_tip))
} }
QMUIGroupListView.newSection(this) QMUIGroupListView.newSection(this)
.addItemView(icon) {startActivity(Intent(mContext, AppChooseActivity::class.java))} .addItemView(icon) { startActivity(Intent(mContext, AppChooseActivity::class.java)) }
.addItemView(reinforce) {ToastUtil.showShort(mContext, R.string.edu_toast_wait)} .addItemView(reinforce) { ToastUtil.showShort(mContext, R.string.edu_toast_wait) }
.addItemView(allowApp) {} .addItemView(allowApp) {}
.addItemView(pwdManager) { startActivity(Intent(mContext, SettingPwdActivity::class.java)) } .addItemView(pwdManager) { startActivity(Intent(mContext, SettingPwdActivity::class.java)) }
.addItemView(uninstall) { showTipDialog({ uninstall() }, { }, getString(R.string.edu_uninstall_tip)) } .addItemView(uninstall) { showTipDialog({ uninstall() }, { }, getString(R.string.edu_uninstall_tip)) }
...@@ -133,30 +130,15 @@ class AdminSettingActivity : BaseActivity() { ...@@ -133,30 +130,15 @@ class AdminSettingActivity : BaseActivity() {
} }
private inline fun showTipDialog(crossinline sure: () -> Unit, crossinline cancel: () -> Unit, text: String) { private inline fun showTipDialog(crossinline sure: () -> Unit, crossinline cancel: () -> Unit, text: String) {
val alertDialog: AlertDialog DialogManager.showMessageDialog(this, getString(R.string.tip), text, object : DialogManager.MessageListener {
val textView = TextView(this) override fun onPositive() {
val view = LayoutInflater.from(this).inflate(R.layout.item_ll, null) sure()
textView.text = text }
val ll = view.findViewById<LinearLayout>(R.id.item_ll)
ll.addView(textView) override fun onNegative() {
alertDialog = AlertDialog.Builder(this) cancel()
.setTitle(getString(R.string.tip)) }
.setCancelable(false) })
.setView(view)
.setNegativeButton(R.string.work_cancel) { dialog, _ ->
dialog.dismiss()
cancel()
}
.setPositiveButton(R.string.work_sure) { dialog, _ ->
run {
dialog.dismiss()
sure()
}
}
.create()
if (!alertDialog.isShowing) {
alertDialog.show()
}
} }
companion object { companion object {
......
...@@ -19,21 +19,16 @@ import com.android.launcher3.settings.AppChooseListAdapter ...@@ -19,21 +19,16 @@ import com.android.launcher3.settings.AppChooseListAdapter
import com.android.launcher3.settings.AppChooseListAdapter.SYSTEM_APP_FLAG import com.android.launcher3.settings.AppChooseListAdapter.SYSTEM_APP_FLAG
import com.android.launcher3.settings.AppChooseListAdapter.USER_APP_FLAG import com.android.launcher3.settings.AppChooseListAdapter.USER_APP_FLAG
import com.android.launcher3.settings.AppModel import com.android.launcher3.settings.AppModel
import com.android.launcher3.settings.BaseRecyclerViewAdapter import com.secspace.lib.common.dialog.LoadingDialog
import com.secspace.lib.common.dialog.SwitcherDialog
import com.secspace.lib.common.function.SwitchInMdm import com.secspace.lib.common.function.SwitchInMdm
import com.secspace.lib.common.utils.IntentUtil import com.secspace.lib.common.utils.IntentUtil
import com.secspace.lib.common.utils.Prefs
import kotlinx.android.synthetic.main.activity_app_manager.* import kotlinx.android.synthetic.main.activity_app_manager.*
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.*
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
class AppChooseActivity : BaseActivity() { class AppChooseActivity : BaseActivity() {
var mAppInfoAdapterSystemApp: AppChooseListAdapter? = null var mAppInfoAdapterSystemApp: AppChooseListAdapter? = null
var mAppInfoAdapterUserApp: AppChooseListAdapter? = null var mAppInfoAdapterUserApp: AppChooseListAdapter? = null
var job: Job? = null
private val mSystemApps: MutableList<AppModel> = ArrayList() private val mSystemApps: MutableList<AppModel> = ArrayList()
private val mUserApps: MutableList<AppModel> = ArrayList() private val mUserApps: MutableList<AppModel> = ArrayList()
private lateinit var mContext: Context private lateinit var mContext: Context
...@@ -49,7 +44,7 @@ class AppChooseActivity : BaseActivity() { ...@@ -49,7 +44,7 @@ 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)
SwitcherDialog.getInstance(this).show("加载应用中", "Loading") 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)
...@@ -67,7 +62,7 @@ class AppChooseActivity : BaseActivity() { ...@@ -67,7 +62,7 @@ class AppChooseActivity : BaseActivity() {
} }
private fun loadData() { private fun loadData() {
GlobalScope.launch(Dispatchers.IO) { job = GlobalScope.launch(Dispatchers.IO) {
val resolveInfos: List<ResolveInfo> = packageManager.queryIntentActivities(Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER), 0) val resolveInfos: List<ResolveInfo> = packageManager.queryIntentActivities(Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER), 0)
val apps: MutableList<ApplicationInfo> = ArrayList() val apps: MutableList<ApplicationInfo> = ArrayList()
resolveInfos.forEach { resolveInfos.forEach {
...@@ -95,16 +90,16 @@ class AppChooseActivity : BaseActivity() { ...@@ -95,16 +90,16 @@ class AppChooseActivity : BaseActivity() {
} }
} }
withContext(Dispatchers.Main) { withContext(Dispatchers.Main) {
SwitcherDialog.getInstance(mContext).dismiss("Loading") LoadingDialog.getInstance(mContext).dismiss()
mAppInfoAdapterUserApp?.readResult(mAppContext) mAppInfoAdapterUserApp?.readResult(mAppContext)
mAppInfoAdapterSystemApp?.readResult(mAppContext) mAppInfoAdapterSystemApp?.readResult(mAppContext)
mAppInfoAdapterSystemApp?.notifyDataSetChanged() mAppInfoAdapterSystemApp?.notifyDataSetChanged()
mAppInfoAdapterUserApp?.notifyDataSetChanged() mAppInfoAdapterUserApp?.notifyDataSetChanged()
} }
} }
fun close(view: View?) { fun close(view: View?) {
job?.cancel()
finish() finish()
} }
...@@ -118,8 +113,15 @@ class AppChooseActivity : BaseActivity() { ...@@ -118,8 +113,15 @@ class AppChooseActivity : BaseActivity() {
finish() finish()
} }
R.id.btn_cancel -> { R.id.btn_cancel -> {
job?.cancel()
finish() finish()
} }
} }
} }
override fun onBackPressed() {
super.onBackPressed()
job?.cancel()
finish()
}
} }
\ No newline at end of file
...@@ -23,7 +23,7 @@ public class BlankActivity extends BaseActivity { ...@@ -23,7 +23,7 @@ public class BlankActivity extends BaseActivity {
protected void onResume() { protected void onResume() {
super.onResume(); super.onResume();
if (!Prefs.isPrivacyPolicyAccept(this)) { if (!Prefs.isPrivacyPolicyAccept(this)) {
DialogManager.getInstance().showPrivacyPolicyDialog(this); DialogManager.INSTANCE.showPrivacyPolicyDialog(this);
return; return;
} }
IntentUtil.startEduLauncher(this); IntentUtil.startEduLauncher(this);
......
package com.secspace.lib.common.dialog;
import android.annotation.SuppressLint;
import android.app.Dialog;
import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import com.secspace.lib.common.dialog.other.DialogUIUtils;
import com.secspace.log.Log;
/**
* Created by SKR-CYW on 2017/11/22.
*/
public class LoadingDialog {
private static final String TAG = "SwitcherDialog";
@SuppressLint("StaticFieldLeak")
private static LoadingDialog INST;
public static LoadingDialog getInstance(Context context) {
if (INST == null) {
synchronized (LoadingDialog.class) {
if (INST == null) {
INST = new LoadingDialog(context.getApplicationContext());
}
}
}
return INST;
}
private Context mContext;
private Dialog mDialog;
private Handler mHandler;
private static final int TIMEOUT = 1;
private LoadingDialog(Context context) {
mContext = context.getApplicationContext();
mHandler = new Handler(Looper.getMainLooper(), new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
switch (msg.what) {
case TIMEOUT:
Log.d(TAG, "switch dialog timeout");
dismiss();
return true;
default:
return false;
}
}
});
}
public void show(String text) {
if (mDialog == null) {
mDialog = DialogUIUtils.showLoading(mContext, text, true, false, false, true).show();
}
if (!mDialog.isShowing()) {
try {
mDialog.show();
} catch (Exception e) {
e.printStackTrace();
}
}
mHandler.removeMessages(TIMEOUT);
mHandler.sendEmptyMessageDelayed(TIMEOUT, 10000);
}
public void dismiss() {
mHandler.removeMessages(TIMEOUT);
if (mDialog != null && mDialog.isShowing()) {
try {
DialogUIUtils.dismiss(mDialog);
} catch (Exception e) {
e.printStackTrace();
}
}
if (mDialog != null) {
mDialog = null;
}
}
}
\ No newline at end of file
package com.secspace.lib.common.dialog.other;
import android.app.Activity;
import android.content.Context;
import android.view.View;
/**
* ========================================
* <p/>
* 版 权:dou361.com 版权所有 (C) 2015
* <p/>
* 作 者:陈冠明
* <p/>
* 个人网站:http://www.dou361.com
* <p/>
* 版 本:1.0
* <p/>
* 创建日期:2016/11/1 15:08
* <p/>
* 描 述:构建弹出框样式方法
* <p/>
* <p/>
* 修订历史:
* <p/>
* ========================================
*/
public interface Assignable {
/**
* 加载框
*/
BuildBean assignLoading(Context context, CharSequence msg, boolean isVertical, boolean cancleable, boolean outsideTouchable, boolean isWhiteBg);
/**
* Md加载框
*/
BuildBean assignMdLoading(Context context, CharSequence msg, boolean isVertical, boolean cancleable, boolean outsideTouchable, boolean isWhiteBg);
/**
* md风格弹出框
*/
BuildBean assignMdAlert(Activity activity, CharSequence title, CharSequence msg, boolean cancleable, boolean outsideTouchable, final DialogUIListener listener);
/**
* md风格多选框
*/
BuildBean assignMdMultiChoose(Activity context, CharSequence title, final CharSequence[] words, final boolean[] checkedItems, boolean cancleable, boolean outsideTouchable,
final DialogUIListener btnListener);
/**
* 单选框
*/
BuildBean assignSingleChoose(Activity context, CharSequence title, final int defaultChosen, final CharSequence[] words, boolean cancleable, boolean outsideTouchable,
final DialogUIItemListener listener);
/**
* 提示弹出框
*/
BuildBean assignAlert(Context activity, CharSequence title, CharSequence msg, CharSequence hint1, CharSequence hint2,
CharSequence firstTxt, CharSequence secondTxt, boolean isVertical, boolean cancleable, boolean outsideTouchable, final DialogUIListener listener);
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);
/**
* 自定义弹出框
*/
BuildBean assignCustomAlert(Context context, View contentView, int gravity, boolean cancleable, boolean outsideTouchable);
/**
* 自定义底部弹出框
*/
BuildBean assignCustomBottomAlert(Context context, View contentView, boolean cancleable, boolean outsideTouchable);
}
package com.secspace.lib.common.dialog.other;
import android.annotation.SuppressLint;
import android.app.Dialog;
import android.content.Context;
import android.support.annotation.ColorRes;
import android.support.annotation.Nullable;
import android.support.v7.app.AlertDialog;
import android.view.View;
import java.util.Map;
/**
* ========================================
* <p/>
* 版 权:dou361.com 版权所有 (C) 2015
* <p/>
* 作 者:陈冠明
* <p/>
* 个人网站:http://www.dou361.com
* <p/>
* 版 本:1.0
* <p/>
* 创建日期:2016/11/1 15:31
* <p/>
* 描 述:弹出框实体类
* <p/>
* <p/>
* 修订历史:
* <p/>
* ========================================
*/
public class BuildBean extends Buildable implements Styleable {
/**
* 上下文
*/
public Context mContext;
/**
* 构建dialog的类型
*/
public int type;
public boolean isPassword = false;
public boolean isVertical;
public View customView;
public int gravity;
public int dateType;
public long date;
public String dateTitle;
public int tag;
public CharSequence title;
public CharSequence msg;
public CharSequence text1 = DialogConfig.dialogui_btnTxt1;
public CharSequence text2 = DialogConfig.dialogui_btnTxt2;
public CharSequence text3;
public CharSequence bottomTxt = DialogConfig.dialogui_bottomTxt;
public CharSequence hint1;
public CharSequence hint2;
public DialogUIListener listener;
public DialogUIItemListener itemListener;
/**
* 是否是白色背景
*/
public boolean isWhiteBg = true;
/**
* 是否可以取消
*/
public boolean cancelable = true;
/**
* 面板外是否可以点击
*/
public boolean outsideTouchable = true;
public Dialog dialog;
public AlertDialog alertDialog;
public int viewHeight;
//各类对话框特有的参数
public CharSequence[] wordsMd;
public int defaultChosen;//
public boolean[] checkedItems;
//三个以下按钮,颜色按此顺序
@ColorRes
public int btn1Color = DialogConfig.iosBtnColor;
@ColorRes
public int btn2Color = DialogConfig.iosBtnColor;
@ColorRes
public int btn3Color = DialogConfig.iosBtnColor;
@ColorRes
public int titleTxtColor = DialogConfig.titleTxtColor;
@ColorRes
public int msgTxtColor = DialogConfig.msgTxtColor;
@ColorRes
public int lvItemTxtColor = DialogConfig.lvItemTxtColor;
@ColorRes
public int inputTxtColor = DialogConfig.inputTxtColor;
public Map<Integer, Integer> colorOfPosition;//listview 的item的特殊颜色:ColorRes
//字体大小
public int btnTxtSize = 17;// in sp
public int titleTxtSize = 14;
public int msgTxtSize = 14;
public int itemTxtSize = 14;
public int inputTxtSize = 14;
@SuppressLint("ResourceType")
@Override
public BuildBean setBtnColor(@ColorRes int btn1Color, @ColorRes int btn2Color, @ColorRes int btn3Color) {
if (btn1Color > 0)
this.btn1Color = btn1Color;
if (btn2Color > 0)
this.btn2Color = btn2Color;
if (btn3Color > 0)
this.btn3Color = btn3Color;
return this;
}
@SuppressLint("ResourceType")
@Override
public BuildBean setListItemColor(@ColorRes int lvItemTxtColor, Map<Integer, Integer> colorOfPosition) {
if (lvItemTxtColor > 0)
this.lvItemTxtColor = lvItemTxtColor;
if (colorOfPosition != null && colorOfPosition.size() > 0) {
this.colorOfPosition = colorOfPosition;
}
return this;
}
@SuppressLint("ResourceType")
@Override
public BuildBean setTitleColor(@ColorRes int colorRes) {
if (colorRes > 0) {
this.titleTxtColor = colorRes;
}
return this;
}
@SuppressLint("ResourceType")
@Override
public BuildBean setMsgColor(@ColorRes int colorRes) {
if (colorRes > 0) {
this.msgTxtColor = colorRes;
}
return this;
}
@SuppressLint("ResourceType")
@Override
public BuildBean seInputColor(@ColorRes int colorRes) {
if (colorRes > 0) {
this.inputTxtColor = colorRes;
}
return this;
}
@Override
public BuildBean setTitleSize(int sizeInSp) {
if (sizeInSp > 0 && sizeInSp < 30) {
this.titleTxtSize = sizeInSp;
}
return this;
}
@Override
public BuildBean setMsgSize(int sizeInSp) {
if (sizeInSp > 0 && sizeInSp < 30) {
this.msgTxtSize = sizeInSp;
}
return this;
}
@Override
public BuildBean setBtnSize(int sizeInSp) {
if (sizeInSp > 0 && sizeInSp < 30) {
this.btnTxtSize = sizeInSp;
}
return this;
}
@Override
public BuildBean setLvItemSize(int sizeInSp) {
if (sizeInSp > 0 && sizeInSp < 30) {
this.itemTxtSize = sizeInSp;
}
return this;
}
@Override
public BuildBean setInputSize(int sizeInSp) {
if (sizeInSp > 0 && sizeInSp < 30) {
this.inputTxtSize = sizeInSp;
}
return this;
}
@Override
public Dialog show() {
buildByType(this);
if (dialog != null && !dialog.isShowing()) {
ToolUtils.showDialog(dialog);
return dialog;
} else if (alertDialog != null && !alertDialog.isShowing()) {
ToolUtils.showDialog(alertDialog);
return alertDialog;
}
return null;
}
@Override
public BuildBean setBtnText(CharSequence btn1Text, @Nullable CharSequence btn2Text, @Nullable CharSequence btn3Text) {
this.text1 = btn1Text;
this.text2 = btn2Text;
this.text3 = btn3Text;
return this;
}
@Override
public BuildBean setBtnText(CharSequence positiveTxt, @Nullable CharSequence negtiveText) {
return setBtnText(positiveTxt, negtiveText, "");
}
@Override
public BuildBean setListener(DialogUIListener listener) {
if (listener != null) {
this.listener = listener;
}
return this;
}
@Override
public BuildBean setCancelable(boolean cancelable, boolean outsideCancelable) {
this.cancelable = cancelable;
this.outsideTouchable = outsideCancelable;
return this;
}
}
package com.secspace.lib.common.dialog.other;
import android.app.Dialog;
import android.content.DialogInterface;
import android.graphics.Color;
import android.support.design.widget.BottomSheetDialog;
import android.support.v7.app.AlertDialog;
import android.view.View;
import android.view.Window;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.secspace.lib.common.R;
/**
* ========================================
* <p/>
* 版 权:dou361.com 版权所有 (C) 2015
* <p/>
* 作 者:陈冠明
* <p/>
* 个人网站:http://www.dou361.com
* <p/>
* 版 本:1.0
* <p/>
* 创建日期:2016/11/1 16:15
* <p/>
* 描 述:
* <p/>
* <p/>
* 修订历史:
* <p/>
* ========================================
*/
public class Buildable {
protected static int singleChosen;
protected BuildBean buildByType(BuildBean bean) {
ToolUtils.fixContext(bean);
switch (bean.type) {
case DialogConfig.TYPE_LOADING:
buildLoading(bean);
break;
case DialogConfig.TYPE_MD_LOADING:
buildMdLoading(bean);
break;
case DialogConfig.TYPE_SINGLE_CHOOSE:
buildSingleChoose(bean);
break;
case DialogConfig.TYPE_MD_MULTI_CHOOSE:
buildMdMultiChoose(bean);
break;
case DialogConfig.TYPE_ALERT:
buildAlert(bean);
break;
case DialogConfig.TYPE_CUSTOM_ALERT:
buildCustomAlert(bean);
break;
case DialogConfig.TYPE_CUSTOM_BOTTOM_ALERT:
buildCustomBottomAlert(bean);
break;
default:
break;
}
ToolUtils.setDialogStyle(bean);
ToolUtils.setCancelable(bean);
return bean;
}
protected BuildBean buildMdLoading(BuildBean bean) {
AlertDialog.Builder builder = new AlertDialog.Builder(bean.mContext);
View root;
if (bean.isVertical) {
root = View.inflate(bean.mContext, R.layout.dialogui_loading_vertical, null);
} else {
root = View.inflate(bean.mContext, R.layout.dialogui_loading_horizontal, null);
}
View llBg = (View) root.findViewById(R.id.dialogui_ll_bg);
ProgressBar pbBg = (ProgressBar) root.findViewById(R.id.pb_bg);
TextView tvMsg = (TextView) root.findViewById(R.id.dialogui_tv_msg);
tvMsg.setText(bean.msg);
if (bean.isWhiteBg) {
llBg.setBackgroundResource(R.drawable.dialogui_shape_wihte_round_corner);
pbBg.setIndeterminateDrawable(bean.mContext.getResources().getDrawable(R.drawable.dialogui_rotate_mum));
tvMsg.setTextColor(bean.mContext.getResources().getColor(R.color.text_black));
} else {
llBg.setBackgroundResource(R.drawable.dialogui_shape_gray_round_corner);
pbBg.setIndeterminateDrawable(bean.mContext.getResources().getDrawable(R.drawable.dialogui_rotate_mum_light));
tvMsg.setTextColor(Color.WHITE);
}
builder.setView(root);
AlertDialog dialog = builder.create();
bean.alertDialog = dialog;
return bean;
}
protected BuildBean buildLoading(BuildBean bean) {
Dialog dialog = new Dialog(bean.mContext);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
bean.dialog = dialog;
View root;
if (bean.isVertical) {
root = View.inflate(bean.mContext, R.layout.dialogui_loading_vertical, null);
} else {
root = View.inflate(bean.mContext, R.layout.dialogui_loading_horizontal, null);
}
View llBg = (View) root.findViewById(R.id.dialogui_ll_bg);
ProgressBar pbBg = (ProgressBar) root.findViewById(R.id.pb_bg);
TextView tvMsg = (TextView) root.findViewById(R.id.dialogui_tv_msg);
tvMsg.setText(bean.msg);
if (bean.isWhiteBg) {
llBg.setBackgroundResource(R.drawable.dialogui_shape_wihte_round_corner);
pbBg.setIndeterminateDrawable(bean.mContext.getResources().getDrawable(R.drawable.dialogui_rotate_mum));
tvMsg.setTextColor(bean.mContext.getResources().getColor(R.color.text_black));
} else {
llBg.setBackgroundResource(R.drawable.dialogui_shape_gray_round_corner);
pbBg.setIndeterminateDrawable(bean.mContext.getResources().getDrawable(R.drawable.dialogui_rotate_mum_light));
tvMsg.setTextColor(Color.WHITE);
}
bean.dialog.setContentView(root);
return bean;
}
protected BuildBean buildSingleChoose(final BuildBean bean) {
AlertDialog.Builder builder = new AlertDialog.Builder(bean.mContext);
singleChosen = bean.defaultChosen;
builder.setTitle(bean.title)
.setSingleChoiceItems(bean.wordsMd, bean.defaultChosen, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
singleChosen = i;
if (bean.itemListener != null) {
bean.itemListener.onItemClick(bean.wordsMd[i], i);
}
if (bean.listener == null) {
DialogUIUtils.dismiss(dialogInterface);
}
}
});
AlertDialog dialog = builder.create();
bean.alertDialog = dialog;
return bean;
}
protected BuildBean buildMdMultiChoose(final BuildBean bean) {
AlertDialog.Builder builder = new AlertDialog.Builder(bean.mContext);
builder.setTitle(bean.title)
.setCancelable(true)
.setPositiveButton(bean.text1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
if (bean.listener != null) {
DialogUIUtils.dismiss(dialogInterface);
bean.listener.onPositive();
bean.listener.onGetChoose(bean.checkedItems);
}
}
})
.setNegativeButton(bean.text2, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
if (bean.listener != null) {
DialogUIUtils.dismiss(dialogInterface);
bean.listener.onNegative();
}
}
})
.setMultiChoiceItems(bean.wordsMd, bean.checkedItems, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i, boolean b) {
}
})
;
AlertDialog dialog = builder.create();
bean.alertDialog = dialog;
return bean;
}
protected BuildBean buildAlert(BuildBean bean) {
AlertDialog.Builder builder = new AlertDialog.Builder(bean.mContext);
AlertDialogHolder holder = new AlertDialogHolder(bean.mContext);
builder.setView(holder.rootView);
AlertDialog dialog = builder.create();
bean.alertDialog = dialog;
holder.assingDatasAndEvents(bean.mContext, bean);
return bean;
}
private void buildCustomAlert(BuildBean bean) {
AlertDialog.Builder builder = new AlertDialog.Builder(bean.mContext);
builder.setView(bean.customView);
AlertDialog dialog = builder.create();
bean.alertDialog = dialog;
dialog.getWindow().getDecorView().setPadding(0, 0, 0, 0);
}
private void buildCustomBottomAlert(BuildBean bean) {
BottomSheetDialog dialog = new BottomSheetDialog(bean.mContext);
dialog.setContentView(bean.customView);
bean.dialog = dialog;
}
}
package com.secspace.lib.common.dialog.other;
import android.app.Activity;
import android.content.Context;
import android.view.Gravity;
import android.view.View;
/**
* Created by Administrator on 2016/10/9 0009.
*/
public class DialogAssigner implements Assignable {
private static DialogAssigner instance;
private DialogAssigner() {
}
public static DialogAssigner getInstance() {
if (instance == null) {
instance = new DialogAssigner();
}
return instance;
}
@Override
public BuildBean assignLoading(Context context, CharSequence msg,boolean isVertical, boolean cancleable, boolean outsideTouchable, boolean isWhiteBg) {
BuildBean bean = new BuildBean();
bean.mContext = context;
bean.msg = msg;
bean.isVertical = isVertical;
bean.isWhiteBg = isWhiteBg;
bean.gravity = Gravity.CENTER;
bean.cancelable = cancleable;
bean.outsideTouchable = outsideTouchable;
bean.type = DialogConfig.TYPE_LOADING;
return bean;
}
@Override
public BuildBean assignMdLoading(Context context, CharSequence msg,boolean isVertical, boolean cancleable, boolean outsideTouchable, boolean isWhiteBg) {
BuildBean bean = new BuildBean();
bean.mContext = context;
bean.msg = msg;
bean.isVertical = isVertical;
bean.isWhiteBg = isWhiteBg;
bean.gravity = Gravity.CENTER;
bean.cancelable = cancleable;
bean.outsideTouchable = outsideTouchable;
bean.type = DialogConfig.TYPE_MD_LOADING;
return bean;
}
@Override
public BuildBean assignMdAlert(Activity activity, CharSequence title, CharSequence msg, boolean cancleable, boolean outsideTouchable, DialogUIListener listener) {
BuildBean bean = new BuildBean();
bean.mContext = activity;
bean.msg = msg;
bean.title = title;
bean.gravity = Gravity.CENTER;
bean.cancelable = cancleable;
bean.outsideTouchable = outsideTouchable;
bean.listener = listener;
bean.type = DialogConfig.TYPE_MD_ALERT;
bean.btn1Color = DialogConfig.mdBtnColor;
bean.btn2Color = DialogConfig.mdBtnColor;
bean.btn3Color = DialogConfig.mdBtnColor;
return bean;
}
@Override
public BuildBean assignSingleChoose(Activity context, CharSequence title, int defaultChosen, CharSequence[] words, boolean cancleable, boolean outsideTouchable, DialogUIItemListener listener) {
BuildBean bean = new BuildBean();
bean.mContext = context;
bean.title = title;
bean.gravity = Gravity.CENTER;
bean.cancelable = cancleable;
bean.outsideTouchable = outsideTouchable;
bean.itemListener = listener;
bean.wordsMd = words;
bean.type = DialogConfig.TYPE_SINGLE_CHOOSE;
bean.defaultChosen = defaultChosen;
bean.btn1Color = DialogConfig.mdBtnColor;
bean.btn2Color = DialogConfig.mdBtnColor;
bean.btn3Color = DialogConfig.mdBtnColor;
return bean;
}
@Override
public BuildBean assignMdMultiChoose(Activity context, CharSequence title, CharSequence[] words, boolean[] checkedItems, boolean cancleable, boolean outsideTouchable, DialogUIListener btnListener) {
BuildBean bean = new BuildBean();
bean.mContext = context;
bean.msg = title;
bean.title = title;
bean.gravity = Gravity.CENTER;
bean.cancelable = cancleable;
bean.outsideTouchable = outsideTouchable;
bean.listener = btnListener;
bean.wordsMd = words;
bean.checkedItems = checkedItems;
bean.type = DialogConfig.TYPE_MD_MULTI_CHOOSE;
bean.btn1Color = DialogConfig.mdBtnColor;
bean.btn2Color = DialogConfig.mdBtnColor;
bean.btn3Color = DialogConfig.mdBtnColor;
return bean;
}
@Override
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) {
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 assignAlert(Context activity, CharSequence title, CharSequence msg, CharSequence hint1, CharSequence hint2,
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;
return bean;
}
@Override
public BuildBean assignCustomAlert(Context context, View contentView, int gravity, boolean cancleable, boolean outsideTouchable) {
BuildBean bean = new BuildBean();
bean.mContext = context;
bean.customView = contentView;
bean.gravity = gravity;
bean.cancelable = cancleable;
bean.outsideTouchable = outsideTouchable;
bean.type = DialogConfig.TYPE_CUSTOM_ALERT;
return bean;
}
@Override
public BuildBean assignCustomBottomAlert(Context context, View contentView, boolean cancleable, boolean outsideTouchable) {
BuildBean bean = new BuildBean();
bean.mContext = context;
bean.customView = contentView;
bean.gravity = Gravity.BOTTOM;
bean.cancelable = cancleable;
bean.outsideTouchable = outsideTouchable;
bean.type = DialogConfig.TYPE_CUSTOM_BOTTOM_ALERT;
return bean;
}
}
package com.secspace.lib.common.dialog.other;
import android.support.annotation.ColorRes;
import com.secspace.lib.common.R;
/**
* ========================================
* <p/>
* 版 权:dou361.com 版权所有 (C) 2015
* <p/>
* 作 者:陈冠明
* <p/>
* 个人网站:http://www.dou361.com
* <p/>
* 版 本:1.0
* <p/>
* 创建日期:2016/11/1 15:13
* <p/>
* 描 述:公共配置
* <p/>
* <p/>
* 修订历史:
* <p/>
* ========================================
*/
public class DialogConfig {
@ColorRes
public static int iosBtnColor = R.color.ios_btntext_blue;
@ColorRes
public static int lvItemTxtColor = R.color.text_item_33;
@ColorRes
public static int mdBtnColor = R.color.btn_alert;
@ColorRes
public static int titleTxtColor = R.color.text_title_11;
@ColorRes
public static int msgTxtColor = R.color.text_title_11;
@ColorRes
public static int inputTxtColor = R.color.text_input_44;
public static CharSequence dialogui_btnTxt1 = "确定";
public static CharSequence dialogui_btnTxt2 = "取消";
public static CharSequence dialogui_bottomTxt = "取消";
public static final int TYPE_LOADING = 1;
public static final int TYPE_MD_LOADING = 2;
public static final int TYPE_MD_ALERT = 3;
public static final int TYPE_MD_MULTI_CHOOSE = 4;
public static final int TYPE_SINGLE_CHOOSE = 5;
public static final int TYPE_ALERT = 6;
public static final int TYPE_SHEET = 10;
public static final int TYPE_BOTTOM_SHEET = 14;
public static final int TYPE_CUSTOM_ALERT = 15;
public static final int TYPE_CUSTOM_BOTTOM_ALERT = 16;
public static final int TYPE_DATEPICK = 19;
}
package com.secspace.lib.common.dialog.other;
/**
* Created by Administrator on 2016/7/24.
*/
public abstract class DialogUIItemListener {
/**
* item点击事件
*/
public abstract void onItemClick(CharSequence text, int position);
/**
* 底部点击事件
*/
public void onBottomBtnClick() {
}
}
package com.secspace.lib.common.dialog.other;
import android.view.View;
/**
* Created by Administrator on 2016/5/4 0004.
*/
public abstract class DialogUIListener {
/**
* 确定
*/
public abstract void onPositive();
/**
* 否定
*/
public abstract void onNegative();
public void onPositive(View view){
onPositive();
}
/**
* 中立
*/
public void onNeutral() {
}
/**
* 取消
*/
public void onCancle() {
}
/**
* 获取输入内容
*/
public void onGetInput(CharSequence input1, CharSequence input2) {
}
/**
* 获取选择集合
*/
public void onGetChoose(boolean[] states) {
}
}
package com.secspace.lib.common.dialog.other;
import android.app.Dialog;
import android.support.annotation.ColorRes;
import android.support.annotation.Nullable;
import java.util.Map;
/**
* Created by Administrator on 2016/10/10.
*/
public interface Styleable {
BuildBean setBtnColor(@ColorRes int btn1Color, @ColorRes int btn2Color, @ColorRes int btn3Color);
BuildBean setListItemColor(@ColorRes int lvItemTxtColor, Map<Integer, Integer> colorOfPosition);
BuildBean setTitleColor(@ColorRes int colorRes);
BuildBean setMsgColor(@ColorRes int colorRes);
BuildBean seInputColor(@ColorRes int colorRes);
BuildBean setTitleSize(int sizeInSp);
BuildBean setMsgSize(int sizeInSp);
BuildBean setBtnSize(int sizeInSp);
BuildBean setLvItemSize(int sizeInSp);
BuildBean setInputSize(int sizeInSp);
Dialog show();
//内容设置
BuildBean setBtnText(CharSequence btn1Text, @Nullable CharSequence btn2Text, @Nullable CharSequence btn3Text);
BuildBean setBtnText(CharSequence positiveTxt, @Nullable CharSequence negtiveText);
BuildBean setListener(DialogUIListener listener);
BuildBean setCancelable(boolean cancelable, boolean outsideCancelable);
}
package com.secspace.lib.common.dialog.other;
import android.content.Context;
import android.support.annotation.LayoutRes;
import android.view.View;
/**
* ========================================
* <p/>
* 版 权:dou361.com 版权所有 (C) 2015
* <p/>
* 作 者:陈冠明
* <p/>
* 个人网站:http://www.dou361.com
* <p/>
* 版 本:1.0
* <p/>
* 创建日期:2016/11/28 11:54
* <p/>
* 描 述:holder
* <p/>
* <p/>
* 修订历史:
* <p/>
* ========================================
*/
public abstract class SuperHolder {
public View rootView;
public SuperHolder(Context context) {
rootView = View.inflate(context, setLayoutRes(), null);
findViews();
}
protected abstract void findViews();
protected abstract
@LayoutRes
int setLayoutRes();
/**
* 一般情况下,实现这个方法就足够了
*
* @param context
* @param bean
*/
public abstract void assingDatasAndEvents(Context context, BuildBean bean);
}
package com.secspace.lib.common.dialog.other;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Build;
import android.support.v7.app.AlertDialog;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
/**
* Created by Administrator on 2016/10/9 0009.
*/
public class ToolUtils {
/**
* 统一显示
* 解决badtoken问题,一劳永逸
*
* @param dialog
*/
public static void showDialog(Dialog dialog) {
try {
if (dialog != null) {
dialog.show();
}
} catch (Exception e) {
}
}
/**
* 混合上下文
*/
public static BuildBean fixContext(BuildBean bean) {
if (bean.mContext == null) {
bean.mContext = DialogUIUtils.appContext;
} else if (bean.mContext instanceof Activity) {
Activity activity = (Activity) bean.mContext;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
if (activity.isDestroyed()) {
bean.mContext = DialogUIUtils.appContext;
}
}
}
return bean;
}
public static BuildBean setCancelable(BuildBean bean) {
if (bean.alertDialog != null) {
bean.alertDialog.setCancelable(bean.cancelable);
bean.alertDialog.setCanceledOnTouchOutside(bean.outsideTouchable);
} else if (bean.dialog != null) {
bean.dialog.setCancelable(bean.cancelable);
bean.dialog.setCanceledOnTouchOutside(bean.outsideTouchable);
}
return bean;
}
public static void setDialogStyle(BuildBean bean) {
if (bean.alertDialog != null) {
setMdBtnStytle(bean);
} else {
setDialogStyle(bean.mContext, bean.dialog, bean.viewHeight, bean);
}
}
/**
* 设置MD风格样式
*/
public static void setMdBtnStytle(BuildBean bean) {
Button btnPositive =
bean.alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
Button btnNegative =
bean.alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE);
Button btnNatural =
bean.alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL);
if (btnPositive != null && btnNegative != null) {
btnPositive.setTextSize(bean.btnTxtSize);
btnNegative.setTextSize(bean.btnTxtSize);
btnNatural.setTextSize(bean.btnTxtSize);
if (bean.btn1Color != 0)
btnPositive.setTextColor(getColor(null, bean.btn1Color));
if (bean.btn2Color != 0)
btnNegative.setTextColor(getColor(null, bean.btn2Color));
if (bean.btn3Color != 0)
btnNatural.setTextColor(getColor(null, bean.btn3Color));
}
Window window = bean.alertDialog.getWindow();
window.setGravity(bean.gravity);
}
public static void setDialogStyle(Context context, Dialog dialog, int measuredHeight, BuildBean bean) {
if (dialog == null) {
return;
}
Window window = dialog.getWindow();
window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
window.setGravity(bean.gravity);
WindowManager.LayoutParams wl = window.getAttributes();
// 以下这两句是为了保证按钮可以水平满屏
int width = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getWidth();
int height = (int) (((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getHeight() * 0.9);
if (bean.type != DialogConfig.TYPE_MD_LOADING) {
wl.width = (int) (width * 0.94); // todo keycode to keep gap
} else {
wl.width = ViewGroup.LayoutParams.WRAP_CONTENT;
}
wl.height = ViewGroup.LayoutParams.WRAP_CONTENT; //TODO 一般情况下为wrapcontent,最大值为height*0.9
if (measuredHeight > height) {
wl.height = height;
}
if (context instanceof Activity) {
Activity activity1 = (Activity) context;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
if (activity1.isDestroyed()) {
context = DialogUIUtils.appContext;
}
}
} else {
wl.type = WindowManager.LayoutParams.TYPE_TOAST;
//todo keycode to improve window level,同时要让它的后面半透明背景也拦截事件,不要传递到下面去
//todo 单例化,不然连续弹出两次,只能关掉第二次的
}
dialog.onWindowAttributesChanged(wl);
}
/**
* 测量View
*/
public static void measureView(View child) {
ViewGroup.LayoutParams p = child.getLayoutParams();
if (p == null) {
p = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT
,
ViewGroup.LayoutParams.WRAP_CONTENT);
}
int lpHeight = p.height;
int lpWidth = p.width;
int childHeightSpec;
int childWidthSpec;
if (lpHeight > 0) { //如果Height是一个定值,那么我们测量的时候就使用这个定值
childHeightSpec = View.MeasureSpec.makeMeasureSpec(lpHeight,
View.MeasureSpec.EXACTLY);
} else { // 否则,我们将mode设置为不指定,size设置为0
childHeightSpec = View.MeasureSpec.makeMeasureSpec(0,
View.MeasureSpec.UNSPECIFIED);
}
if (lpWidth > 0) {
childWidthSpec = View.MeasureSpec.makeMeasureSpec(lpHeight,
View.MeasureSpec.EXACTLY);
} else {
childWidthSpec = View.MeasureSpec.makeMeasureSpec(0,
View.MeasureSpec.UNSPECIFIED);
}
child.measure(childWidthSpec, childHeightSpec);
}
/**
* 测量高度
*
* @param root
* @param id height为0,weight为1的scrollview包裹的view的id,如果没有,传0或负数即可
* @return
*/
public static int mesureHeight(View root, int id) {
measureView(root);
int height = root.getMeasuredHeight();
int heightExtra = 0;
if (id > 0) {
View view = root.findViewById(id);
if (view != null) {
measureView(view);
heightExtra = view.getMeasuredHeight();
}
}
return height + heightExtra;
}
/**
* 测量高度
*/
public static int mesureHeight(View root, View... subViews) {
measureView(root);
int height = root.getMeasuredHeight();
int heightExtra = 0;
if (subViews != null && subViews.length > 0) {
for (View view : subViews) {
measureView(view);
heightExtra += view.getMeasuredHeight();
}
}
return height + heightExtra;
}
/**
* 获取资源颜色
*/
public static int getColor(Context context, int colorRes) {
if (context == null) {
context = DialogUIUtils.appContext;
}
return context.getResources().getColor(colorRes);
}
/**
* 获取文字
*/
public static String getString(Context context, int resId) {
return context.getResources().getString(resId);
}
/**
* dip转换px
*/
public static int dip2px(Context context, int dip) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dip * scale + 0.5f);
}
/**
* 获取屏幕宽度(像素)
*/
public static int getScreenWidth(Context context) {
WindowManager windowManager = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
return windowManager.getDefaultDisplay().getWidth();
}
}
...@@ -8,6 +8,7 @@ import android.util.Log ...@@ -8,6 +8,7 @@ import android.util.Log
import com.secspace.lib.common.utils.ImeiUtil.uniqueId import com.secspace.lib.common.utils.ImeiUtil.uniqueId
import com.skr.activation.api.ActivationApi import com.skr.activation.api.ActivationApi
import com.skr.activation.constant.Constant.* import com.skr.activation.constant.Constant.*
import com.skr.activation.network.linstener.CheckActiveStatusListener
import com.skr.activation.network.linstener.CheckLocalActiveStatusListener import com.skr.activation.network.linstener.CheckLocalActiveStatusListener
import com.skr.activation.network.linstener.GetSystemTimeListener import com.skr.activation.network.linstener.GetSystemTimeListener
import com.skr.activation.utils.DesUtil import com.skr.activation.utils.DesUtil
...@@ -58,7 +59,7 @@ object ActivationHelper { ...@@ -58,7 +59,7 @@ object ActivationHelper {
if (isProbation) { if (isProbation) {
listener.activated() listener.activated()
} else { } else {
DialogManager.getInstance().showBuyCodeDialog(context) DialogManager.showBuyCodeDialog(context)
} }
} else { } else {
if (probation(context)) { if (probation(context)) {
...@@ -75,6 +76,10 @@ object ActivationHelper { ...@@ -75,6 +76,10 @@ object ActivationHelper {
}) })
} }
fun checkActivate(context: Context, listener: CheckActiveStatusListener?) {
ActivationApi.getInstance().checkActivateCodeStatus(context.packageName, listener)
}
private suspend fun getCurrentTimeByNet(): Long = suspendCoroutine { cont -> private suspend fun getCurrentTimeByNet(): Long = suspendCoroutine { cont ->
ActivationApi.getInstance().getSystemTime(object : GetSystemTimeListener { ActivationApi.getInstance().getSystemTime(object : GetSystemTimeListener {
override fun onTime(p0: Long) { override fun onTime(p0: Long) {
......
package com.secspace.lib.common.function;
import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.text.Html;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.text.style.ClickableSpan;
import android.text.style.URLSpan;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.TextView;
import com.secspace.lib.common.R;
import com.secspace.lib.common.utils.IntentUtil;
import com.secspace.lib.common.utils.Prefs;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class BuyCodeDialog implements DialogInterface.OnDismissListener, View.OnClickListener {
private static final String TAG = "BuyCodeDialog";
private Activity mActivity;
private Context mContext;
private android.app.AlertDialog mDialog;
private Button btnAccept;
private View layout;
public BuyCodeDialog(Activity activity) {
this.mActivity = activity;
mContext = activity.getApplicationContext();
}
public BuyCodeDialog show() {
if (mDialog == null) {
initView();
android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(mActivity);
mDialog = builder.create();
mDialog.setCancelable(false);
Window window = mDialog.getWindow();
window.setBackgroundDrawableResource(R.drawable.dialog_corner_bg);
mDialog.setView(layout);
mDialog.show();
}
if (!mDialog.isShowing()) {
mDialog.show();
}
return this;
}
private void initView() {
LayoutInflater inflater = LayoutInflater.from(mActivity);
layout = inflater.inflate(R.layout.buycode_layout, null);
btnAccept = layout.findViewById(R.id.btn_accept);
btnAccept.setOnClickListener(this);
}
public void dismiss() {
if (mDialog != null && mDialog.isShowing())
mDialog.dismiss();
}
@Override
public void onDismiss(DialogInterface dialog) {
mActivity = null;
mDialog = null;
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.btn_accept) {
ActivationHelper.INSTANCE.active(mActivity, new ActivationHelper.ActivationListener() {
@Override
public void activationFailed() {
}
@Override
public void activated() {
IntentUtil.startEduLauncher(mContext);
}
}, true);
Prefs.setMdmInitializedWhenEnter(mContext, false);
SwitchOutMdm.INSTANCE.exit(mContext);
dismiss();
}
}
}
package com.secspace.lib.common.function
import android.app.Activity
import android.app.AlertDialog
import android.content.Context
import android.content.DialogInterface
import android.view.LayoutInflater
import android.view.View
import android.widget.Button
import com.secspace.lib.common.R
import com.secspace.lib.common.function.ActivationHelper.ActivationListener
import com.secspace.lib.common.function.ActivationHelper.active
import com.secspace.lib.common.utils.IntentUtil
import com.secspace.lib.common.utils.Prefs
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
class BuyCodeDialog(activity: Activity) : DialogInterface.OnDismissListener, View.OnClickListener {
private var mActivity: Activity?
private val mContext: Context
private var mDialog: AlertDialog? = null
private var btnAccept: Button? = null
private var layout: View? = null
fun show(): BuyCodeDialog {
if (mDialog == null) {
initView()
val builder = AlertDialog.Builder(mActivity)
mDialog = builder.create()
mDialog?.setCancelable(false)
val window = mDialog?.window
window?.setBackgroundDrawableResource(R.drawable.dialog_corner_bg)
mDialog?.setView(layout)
mDialog?.show()
}
if (!mDialog?.isShowing!!) {
mDialog?.show()
}
return this
}
private fun initView() {
val inflater =LayoutInflater.from(mActivity)
layout = inflater.inflate(R.layout.buycode_layout, null)
btnAccept = layout?.findViewById(R.id.btn_accept)
btnAccept?.setOnClickListener(this)
}
fun dismiss() {
if (mDialog != null && mDialog!!.isShowing) mDialog!!.dismiss()
}
override fun onDismiss(dialog: DialogInterface) {
mActivity = null
mDialog = null
}
override fun onClick(v: View) {
if (v.id == R.id.btn_accept) {
active(mActivity!!, object : ActivationListener {
override fun activationFailed() {}
override fun activated() {
IntentUtil.startEduLauncher(mContext)
}
}, true)
dismiss()
Prefs.setMdmInitializedWhenEnter(mContext, false)
GlobalScope.launch(Dispatchers.IO) {
SwitchOutMdm.onInit(mContext)
}
}
}
companion object {
private const val TAG = "BuyCodeDialog"
}
init {
mActivity = activity
mContext = activity.applicationContext
}
}
\ No newline at end of file
package com.secspace.lib.common.function;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.res.Resources;
import com.secspace.lib.common.R;
import com.secspace.lib.common.dialog.DotRotateDialog;
import com.secspace.lib.common.dialog.OptimizeDialog;
import com.secspace.lib.common.dialog.SecSpaceUpdateDialog;
import com.secspace.lib.common.dialog.SimpleDialog;
import com.secspace.lib.common.dialog.SwitcherDialog;
import com.secspace.lib.common.env.BlackandWhiteList;
import com.secspace.lib.common.event.ExitEvent;
import com.secspace.lib.common.event.ResetPwdEvent;
import com.secspace.lib.common.utils.DpmHelper;
import com.secspace.lib.common.utils.PkgManager;
import com.secspace.lib.common.utils.Prefs;
import com.secspace.lib.common.utils.ToastUtil;
import com.secspace.mdmengine.api.manager.MdmFactoryManager;
import org.greenrobot.eventbus.EventBus;
import static com.secspace.lib.common.env.Packages.CompSecSpace.CLASSNAME_DPM_ADMIN;
import static com.secspace.lib.common.env.Packages.PkgSecSpace.PACKAGENAME_MIDDLEWARE;
/**
* Created by cyw_m on 2018/4/6.
*/
@SuppressLint("StaticFieldLeak")
public class DialogManager {
private static DialogManager mInstance = null;
private SimpleDialog mSimpleDialog;
private DotRotateDialog mDotRotateDialog;
private OptimizeDialog mOptimizeDialog;
private SecSpaceUpdateDialog mPresetAppUpdateDialog;
private DialogManager() {
}
public static DialogManager getInstance() {
if (mInstance == null) {
synchronized (DialogManager.class) {
if (mInstance == null) {
mInstance = new DialogManager();
}
}
}
return mInstance;
}
/**
* 安装中间件弹窗
*/
public void showInstallMiddleWare(Activity activity) {
final Context context = activity.getApplication();
mSimpleDialog = new SimpleDialog(activity).show(context.getResources().getString(R.string.common_remind)
, context.getResources().getString(R.string.common_need_install_middleware)
, false
, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
WorkManager.INSTANCE.installMiddleWare(context);
dialog.dismiss();
}
}
, null
);
}
public void showMiddleWareDeviceOwnerConfirmDialog(Activity activity) {
if (DpmOwnerHelper.INSTANCE.isSettingDeviceOwner()) {
return;
}
final Context context = activity.getApplicationContext();
dismissSimpleDialog();
mSimpleDialog = new SimpleDialog(activity).show(activity.getResources().getString(R.string.common_remind)
, activity.getResources().getString(R.string.work_confirm_device_owner)
, false
, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
DpmOwnerHelper.INSTANCE.disableAccountsAndRemoveProfileUsers(context);
SwitcherDialog.getInstance(context).show(context.getString(R.string.work_del_account), "Clear Account");
dialog.dismiss();
}
}
, null
);
}
public void showRemoveUserConfirmDialog(Activity activity) {
mSimpleDialog = new SimpleDialog(activity).show(activity.getResources().getString(R.string.common_remind)
, activity.getResources().getString(R.string.work_remove_user_confirm_device_owner)
, false
, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
DpmOwnerHelper.INSTANCE.removeOtherUsers();
}
}
, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
EventBus.getDefault().post(new ExitEvent());
}
}
);
}
/**
* 关闭普通dialog
*/
public void dismissSimpleDialog() {
if (mSimpleDialog != null) {
mSimpleDialog.dismiss();
}
}
public void showPrivacyPolicyDialog(Activity activity) {
new PrivacyPolicyDialog(activity).show();
}
public void showBuyCodeDialog(Activity activity) {
new BuyCodeDialog(activity).show();
}
}
package com.secspace.lib.common.function
import android.annotation.SuppressLint
import android.app.Activity
import android.content.Context
import android.content.DialogInterface
import android.view.View
import com.secspace.lib.common.R
import com.secspace.lib.common.dialog.SimpleDialog
import com.secspace.lib.common.dialog.SwitcherDialog
import com.secspace.lib.common.dialog.other.DialogUIListener
import com.secspace.lib.common.dialog.other.DialogUIUtils
import com.secspace.lib.common.event.ExitEvent
import com.secspace.lib.common.function.DpmOwnerHelper.disableAccountsAndRemoveProfileUsers
import com.secspace.lib.common.function.DpmOwnerHelper.isSettingDeviceOwner
import com.secspace.lib.common.function.DpmOwnerHelper.removeOtherUsers
import com.secspace.lib.common.function.WorkManager.installMiddleWare
import org.greenrobot.eventbus.EventBus
/**
* Created by cyw_m on 2018/4/6.
*/
@SuppressLint("StaticFieldLeak")
object DialogManager{
private var mSimpleDialog: SimpleDialog? = null
/**
* 安装中间件弹窗
*/
fun showInstallMiddleWare(activity: Activity) {
val context: Context = activity.application
mSimpleDialog = SimpleDialog(activity).show(context.resources.getString(R.string.common_remind)
, context.resources.getString(R.string.common_need_install_middleware)
, false
, DialogInterface.OnClickListener { dialog, which ->
installMiddleWare(context)
dialog.dismiss()
}
, null
)
}
fun showMiddleWareDeviceOwnerConfirmDialog(activity: Activity) {
if (isSettingDeviceOwner) {
return
}
val context = activity.applicationContext
dismissSimpleDialog()
mSimpleDialog = SimpleDialog(activity).show(activity.resources.getString(R.string.common_remind)
, activity.resources.getString(R.string.work_confirm_device_owner)
, false
, DialogInterface.OnClickListener { dialog, which ->
disableAccountsAndRemoveProfileUsers(context)
SwitcherDialog.getInstance(context).show(context.getString(R.string.work_del_account), "Clear Account")
dialog.dismiss()
}
, null
)
}
fun showRemoveUserConfirmDialog(activity: Activity) {
mSimpleDialog = SimpleDialog(activity).show(activity.resources.getString(R.string.common_remind)
, activity.resources.getString(R.string.work_remove_user_confirm_device_owner)
, false
, { dialog, which -> removeOtherUsers() }
) { dialog, which -> EventBus.getDefault().post(ExitEvent()) }
}
/**
* 关闭普通dialog
*/
fun dismissSimpleDialog() {
if (mSimpleDialog != null) {
mSimpleDialog!!.dismiss()
}
}
fun showPrivacyPolicyDialog(activity: Activity?) {
PrivacyPolicyDialog(activity).show()
}
fun showBuyCodeDialog(activity: Activity?) {
BuyCodeDialog(activity!!).show()
}
fun showMessageDialog(activity: Activity?, title: String?, content: String?, listener: MessageListener) {
DialogUIUtils.showAlert(activity, title, content, "", "", "确定", "取消", false, false, false, object : DialogUIListener() {
override fun onPositive() {
listener.onPositive()
}
override fun onNegative() {
listener.onNegative()
}
}).show()
}
fun showMessageDialogBySure(activity: Activity?, title: String?, content: String?, listener: MessageListener) {
DialogUIUtils.showAlert(activity, title, content, "", "", "确定", "", false, false, false, object : DialogUIListener() {
override fun onPositive() {
listener.onPositive()
}
override fun onNegative() {
listener.onNegative()
}
}).show()
}
fun showPwdDialog(activity: Activity?, title: String?, listener: PwdListener) {
val buildBean = DialogUIUtils.showAlertPassword(activity, title, "", "", "", "确定", "取消", false, false, false, object : DialogUIListener() {
override fun onPositive(view: View) {
listener.onPositive(view)
}
override fun onPositive() {}
override fun onNegative() {
listener.onNegative()
}
})
buildBean.show()
}
interface MessageListener {
fun onPositive()
fun onNegative()
}
interface PwdListener {
fun onPositive(view: View?)
fun onNegative()
}
}
\ No newline at end of file
...@@ -5,6 +5,7 @@ import android.content.Context ...@@ -5,6 +5,7 @@ import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.IBinder import android.os.IBinder
import android.util.Log import android.util.Log
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
...@@ -26,7 +27,7 @@ class ExitService : Service() { ...@@ -26,7 +27,7 @@ class ExitService : Service() {
if (outing) if (outing)
return super.onStartCommand(intent, flags, startId) return super.onStartCommand(intent, flags, startId)
outing = true outing = true
SwitcherDialog.getInstance(mAppContext).show(null, "Exit") LoadingDialog.getInstance(mAppContext).show("切换中")
GlobalScope.launch(Dispatchers.IO) { GlobalScope.launch(Dispatchers.IO) {
Prefs.setMdmInitializedWhenEnter(mAppContext, false) Prefs.setMdmInitializedWhenEnter(mAppContext, false)
...@@ -34,7 +35,7 @@ class ExitService : Service() { ...@@ -34,7 +35,7 @@ class ExitService : Service() {
delay(1500) delay(1500)
withContext(Dispatchers.Main) { withContext(Dispatchers.Main) {
IntentUtil.startSystemLauncher(mAppContext) IntentUtil.startSystemLauncher(mAppContext)
SwitcherDialog.getInstance(mAppContext).dismiss("Exit") LoadingDialog.getInstance(mAppContext).dismiss()
outing = false outing = false
Log.d(TAG, "exit end") Log.d(TAG, "exit end")
} }
......
package com.secspace.lib.common.function
import android.content.Context
import com.secspace.lib.common.dialog.LoadingDialog
import com.secspace.lib.common.env.Packages
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import java.util.ArrayList
abstract class ISwitch {
private suspend fun initStart(context: Context) = withContext(Dispatchers.Main) {
LoadingDialog.getInstance(context).show("切换中")
}
private suspend fun initEnd(context: Context) = withContext(Dispatchers.Main) {
LoadingDialog.getInstance(context).dismiss()
}
suspend fun onInit(context: Context) {
initStart(context)
init(context)
initEnd(context)
}
suspend fun onExit(context: Context){
init(context)
}
protected abstract suspend fun init(context: Context)
protected fun getPersistentList(context: Context): List<String?>? {
var list: MutableList<String?>? = null
if (list == null) {
list = ArrayList()
}
if (list.size > 0) {
list.clear()
}
list.add(context.packageName)
list.add(Packages.PkgSecSpace.PACKAGENAME_MIDDLEWARE)
return list
}
}
\ No newline at end of file
...@@ -8,6 +8,7 @@ import android.content.pm.PackageManager ...@@ -8,6 +8,7 @@ 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
...@@ -16,12 +17,13 @@ import com.secspace.mdmengine.api.manager.MdmFactoryManager ...@@ -16,12 +17,13 @@ import com.secspace.mdmengine.api.manager.MdmFactoryManager
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import java.util.* import java.util.*
object SwitchInMdm { object SwitchInMdm: ISwitch() {
private var context: Context? = null private var context: Context? = null
private val TAG = "SwitchInMdm" private val TAG = "SwitchInMdm"
fun init(context: Context) { override suspend fun init(context: Context) {
this.context = context this.context = context
MdmUtils.setDefaultLauncher(context) MdmUtils.setDefaultLauncher(context)
...@@ -110,18 +112,7 @@ object SwitchInMdm { ...@@ -110,18 +112,7 @@ object SwitchInMdm {
DisableCompat.enableComponent(context, EnterprisePrivacySettingsActivity) DisableCompat.enableComponent(context, EnterprisePrivacySettingsActivity)
} }
private fun getPersistentList(context: Context): List<String?>? {
var list: MutableList<String?>? = null
if (list == null) {
list = ArrayList()
}
if (list.size > 0) {
list.clear()
}
list.add(context.packageName)
list.add(PkgSecSpace.PACKAGENAME_MIDDLEWARE)
return list
}
private fun clearProcesses() { private fun clearProcesses() {
val dam = MdmFactoryManager.getInstance().deviceApplicationManager val dam = MdmFactoryManager.getInstance().deviceApplicationManager
......
...@@ -7,6 +7,7 @@ import android.content.pm.PackageInfo ...@@ -7,6 +7,7 @@ import android.content.pm.PackageInfo
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.content.pm.ResolveInfo import android.content.pm.ResolveInfo
import android.util.Log import android.util.Log
import com.secspace.lib.common.arouter.libwork.IWorkApi
import com.secspace.lib.common.env.Packages.PkgSecSpace import com.secspace.lib.common.env.Packages.PkgSecSpace
import com.secspace.lib.common.utils.DisableCompat import com.secspace.lib.common.utils.DisableCompat
import com.secspace.lib.common.utils.DpmHelper import com.secspace.lib.common.utils.DpmHelper
...@@ -20,21 +21,16 @@ import kotlinx.coroutines.GlobalScope ...@@ -20,21 +21,16 @@ import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import java.util.* import java.util.*
object SwitchOutMdm { object SwitchOutMdm: ISwitch() {
private var context: Context? = null private var context: Context? = null
private val TAG = "SwitchOutMdm" private val TAG = "SwitchOutMdm"
fun exit(context: Context) { fun exit(context: Context) {
this.context = context
MdmUtils.clearDefaultLauncher(context)
recover()
removeDisallowedRunningApp(context)
clearProcesses()
killBackgroundApplication()
} }
private fun removeDisallowedRunningApp(context: Context){ private fun removeDisallowedRunningApp(){
val mdmFactoryManager = DpmHelper.getInstance(context).getmMdmFactoryManager() val mdmFactoryManager = MdmFactoryManager.getInstance()
val list = mdmFactoryManager.deviceApplicationManager.disallowedRunningApp val list = mdmFactoryManager.deviceApplicationManager.disallowedRunningApp
mdmFactoryManager.deviceApplicationManager.removeDisallowedRunningApp(list) mdmFactoryManager.deviceApplicationManager.removeDisallowedRunningApp(list)
Log.e(TAG, "remove:${list}") Log.e(TAG, "remove:${list}")
...@@ -57,19 +53,6 @@ object SwitchOutMdm { ...@@ -57,19 +53,6 @@ object SwitchOutMdm {
DisableCompat.enableComponent(context, EnterprisePrivacySettingsActivity) DisableCompat.enableComponent(context, EnterprisePrivacySettingsActivity)
} }
private fun getPersistentList(context: Context): List<String?>? {
var list: MutableList<String?>? = null
if (list == null) {
list = ArrayList()
}
if (list.size > 0) {
list.clear()
}
list.add(context.packageName)
list.add(PkgSecSpace.PACKAGENAME_MIDDLEWARE)
return list
}
private fun clearProcesses() { private fun clearProcesses() {
val dam = MdmFactoryManager.getInstance().deviceApplicationManager val dam = MdmFactoryManager.getInstance().deviceApplicationManager
//clear task //clear task
...@@ -131,4 +114,14 @@ object SwitchOutMdm { ...@@ -131,4 +114,14 @@ object SwitchOutMdm {
MdmFactoryManager.getInstance().deviceApplicationManager.forceStopPackage(name) MdmFactoryManager.getInstance().deviceApplicationManager.forceStopPackage(name)
} }
} }
override suspend fun init(context: Context) {
this.context = context
MdmFactoryManager.getInstance().deviceApplicationManager.removePersistentApp(getPersistentList(context))
recover()
MdmUtils.clearDefaultLauncher(context)
removeDisallowedRunningApp()
clearProcesses()
killBackgroundApplication()
}
} }
\ No newline at end of file
package com.secspace.lib.common.function package com.secspace.lib.common.function
import android.annotation.TargetApi
import android.app.Activity import android.app.Activity
import android.content.Context import android.content.Context
import android.content.pm.PackageManager import android.content.pm.PackageManager
...@@ -8,12 +7,13 @@ import android.os.Build ...@@ -8,12 +7,13 @@ 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.env.Packages import com.secspace.lib.common.R
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.SwitchInMdm.init
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 kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
...@@ -36,7 +36,7 @@ object WorkManager{ ...@@ -36,7 +36,7 @@ object WorkManager{
mEnterTime = SystemClock.uptimeMillis() mEnterTime = SystemClock.uptimeMillis()
//检查中间件是否是最新的 //检查中间件是否是最新的
if (!DpmHelper.getInstance(mContext).isMiddlewareLatest) { if (!DpmHelper.getInstance(mContext).isMiddlewareLatest) {
DialogManager.getInstance().showInstallMiddleWare(launcher) DialogManager.showInstallMiddleWare(launcher)
return return
} }
...@@ -53,9 +53,11 @@ object WorkManager{ ...@@ -53,9 +53,11 @@ object WorkManager{
mHandler.postDelayed( { enter(launcher) }, 2000) mHandler.postDelayed( { enter(launcher) }, 2000)
return return
} }
LoadingDialog.getInstance(launcher).show("切换中")
GlobalScope.launch(Dispatchers.IO) { GlobalScope.launch(Dispatchers.IO) {
init(launcher) SwitchInMdm.onInit(launcher)
checkLocalUpdateFile() //检查本地更新文件 checkLocalUpdateFile() //检查本地更新文件
ActivationHelper.checkActivate(launcher, EduCheckActiveStatusListener(launcher))
} }
isChecksCompleted = true isChecksCompleted = true
Prefs.setMdmInitializedWhenEnter(mContext, true) Prefs.setMdmInitializedWhenEnter(mContext, true)
...@@ -63,7 +65,7 @@ object WorkManager{ ...@@ -63,7 +65,7 @@ object WorkManager{
fun exit(context: Context?){ fun exit(context: Context?){
GlobalScope.launch(Dispatchers.IO) { GlobalScope.launch(Dispatchers.IO) {
context?.let { SwitchOutMdm.exit(it) } context?.let { SwitchOutMdm.onExit(it) }
} }
} }
...@@ -138,13 +140,35 @@ object WorkManager{ ...@@ -138,13 +140,35 @@ object WorkManager{
install(path) install(path)
} }
/** internal class EduCheckActiveStatusListener(var activity: Activity) : CheckActiveStatusListener {
* 安装增强件 override fun needActivate() {
*/ Log.i(TAG, "activedFailed: ")
fun installMdmEnhance(silent: Boolean) { DialogManager.showMessageDialogBySure(activity, activity.getString(R.string.common_remind), activity.getString(R.string.dialog_tip_activate_lose), object: DialogManager.MessageListener{
val path = pathFromAssets(SEnvironment.getMdmEnhanceNameForAssets()) override fun onPositive() {
FileUtil.copyFileFromAssets(mContext, (SEnvironment.getOuterDirForAssets() IntentUtil.startExitService(activity)
+ File.separator + SEnvironment.getMdmEnhanceNameForAssets()), path) }
install(path)
override fun onNegative() {
}
})
}
override fun trialCodeWillPastDue() {
Log.i(TAG, "trialCodeWillPastDue: ")
}
override fun hasActived() {
Log.i(TAG, "hasActived: ")
}
override fun serverError() {
Log.i(TAG, "serverError: ")
}
override fun onError(throwable: Throwable) {
Log.i(TAG, "onError: ")
}
} }
} }
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromYDelta="100%p"
android:duration="400"
/>
</set>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:fromAlpha="1"
android:toAlpha="0"
android:duration="600"
/>
</set>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:toYDelta="100%p"
android:duration="400"
/>
</set>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:fromAlpha="0"
android:toAlpha="1"
android:duration="600"
/>
</set>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<size
android:width="1dp"
android:height="1dp"/>
<solid android:color="#eaeaea"/>
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:pivotX="50%"
android:pivotY="50%"
android:fromDegrees="0"
android:toDegrees="360"
android:interpolator="@android:anim/accelerate_decelerate_interpolator" >
<bitmap
android:antialias="true"
android:filter="true"
android:src="@drawable/dialogui_spinner_mum"/>
</rotate>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:pivotX="50%"
android:pivotY="50%"
android:fromDegrees="0"
android:toDegrees="360"
android:interpolator="@android:anim/accelerate_decelerate_interpolator" >
<bitmap
android:antialias="true"
android:filter="true"
android:src="@drawable/dialogui_spinner_mum_light"/>
</rotate>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="@dimen/dialogui_round_corner_radius"/>
<solid android:color="@color/dialogui_btn_pressed"/>
</shape>
</item>
<item>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="@dimen/dialogui_round_corner_radius"/>
<solid android:color="@android:color/white"/>
</shape>
</item>
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:bottomLeftRadius="@dimen/dialogui_round_corner_radius"
android:bottomRightRadius="@dimen/dialogui_round_corner_radius"/>
<solid android:color="@color/dialogui_btn_pressed"/>
</shape>
</item>
<item>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:bottomLeftRadius="@dimen/dialogui_round_corner_radius"
android:bottomRightRadius="@dimen/dialogui_round_corner_radius"/>
<solid android:color="@android:color/white"/>
</shape>
</item>
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/dialogui_btn_pressed" android:state_pressed="true"/>
<item android:drawable="@android:color/white"/>
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:topLeftRadius="@dimen/dialogui_round_corner_radius"
android:topRightRadius="@dimen/dialogui_round_corner_radius"/>
<solid android:color="@color/dialogui_btn_pressed"/>
</shape>
</item>
<item>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:topLeftRadius="@dimen/dialogui_round_corner_radius"
android:topRightRadius="@dimen/dialogui_round_corner_radius"/>
<solid android:color="@android:color/white"/>
</shape>
</item>
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:bottomLeftRadius="@dimen/dialogui_round_corner_radius"/>
<solid android:color="@color/dialogui_btn_pressed"/>
</shape>
</item>
<item>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:bottomLeftRadius="@dimen/dialogui_round_corner_radius"/>
<solid android:color="@android:color/white"/>
</shape>
</item>
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:bottomRightRadius="@dimen/dialogui_round_corner_radius"/>
<solid android:color="@color/dialogui_btn_pressed"/>
</shape>
</item>
<item>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:bottomRightRadius="@dimen/dialogui_round_corner_radius"/>
<solid android:color="@android:color/white"/>
</shape>
</item>
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#ffffff"/>
<corners android:radius="2dp"/>
<stroke
android:width="1dp"
android:color="@color/line_dd"
/>
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<size android:width="1dp"/>
<solid android:color="@color/ios_btntext_blue"/>
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="@dimen/dialogui_round_corner_radius"/>
<solid android:color="#66000000"/>
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="@dimen/dialogui_l_round_corner_radius"/>
<solid android:color="#99000000"/>
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="360">
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:innerRadiusRatio="4"
android:shape="ring"
android:thicknessRatio="15"
android:useLevel="false">
<gradient
android:endColor="#BFBFBF"
android:startColor="#FFFFFF"
android:type="sweep">
</gradient>
</shape>
</rotate>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="360">
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:innerRadiusRatio="4"
android:shape="ring"
android:thicknessRatio="15"
android:useLevel="false">
<gradient
android:endColor="#414042"
android:startColor="#a3a3a3"
android:type="sweep">
</gradient>
</shape>
</rotate>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="@dimen/dialogui_round_corner_radius"/>
<solid android:color="@android:color/white"/>
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:angle="270"
android:endColor="#7066CCFF"
android:startColor="#7066CCFF" />
<corners android:topLeftRadius="0dip"
android:topRightRadius="0dip"
android:bottomLeftRadius="0dip"
android:bottomRightRadius="0dip"/>
</shape>
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/tv_message_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="15dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="15dp"
android:layout_marginBottom="10dp"
android:gravity="center"
android:lineSpacingExtra="4dp"
android:textColor="#333333"
android:textSize="14sp"
tools:text="内容" />
\ No newline at end of file
<?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="wrap_content"
android:background="@drawable/dialogui_shape_wihte_round_corner"
android:gravity="center_horizontal"
android:orientation="vertical">
<TextView
android:id="@+id/dialogui_tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:gravity="center"
android:maxLines="3"
android:paddingLeft="40dp"
android:paddingRight="40dp"
android:paddingTop="12dp"
android:text=""
android:textColor="@color/text_title_11"
android:textSize="@dimen/dialogui_title_txt_size"
android:textStyle="bold"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingTop="12dp">
<TextView
android:id="@+id/dialogui_tv_msg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:minHeight="60dp"
android:paddingBottom="15dp"
android:paddingLeft="30dp"
android:paddingRight="30dp"
android:paddingTop="5dp"
android:text=""
android:textColor="@color/text_msg_33"
android:textSize="@dimen/dialogui_msg_txt_size"/>
<EditText
android:id="@+id/et_1"
android:layout_width="match_parent"
android:layout_height="35dp"
android:layout_marginBottom="15dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="5dp"
android:background="@drawable/dialogui_shape_et_bg"
android:cursorVisible="true"
android:maxLines="1"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:textColor="@color/text_input_44"
android:textCursorDrawable="@drawable/dialogui_shape_et_cursor"
android:textSize="@dimen/dialogui_input_txt_size"/>
<EditText
android:id="@+id/et_2"
android:layout_width="match_parent"
android:layout_height="35dp"
android:layout_marginBottom="15dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:background="@drawable/dialogui_shape_et_bg"
android:cursorVisible="true"
android:maxLines="1"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:textColor="@color/text_input_44"
android:textCursorDrawable="@drawable/dialogui_shape_et_cursor"
android:textSize="@dimen/dialogui_input_txt_size"/>
</LinearLayout>
<View
android:id="@+id/line"
android:layout_width="match_parent"
android:layout_height="1px"
android:background="@color/line_dd"/>
<LinearLayout
android:id="@+id/ll_container_horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="48dp"
android:orientation="horizontal">
<Button
android:id="@+id/btn_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:background="@drawable/dialogui_selector_left_bottom"
android:gravity="center"
android:padding="5dp"
android:text="1"
android:textColor="@color/ios_btntext_blue"
android:textSize="@dimen/dialogui_btn_txt_size"/>
<View
android:id="@+id/line_btn2"
android:layout_width="1px"
android:layout_height="match_parent"
android:background="@color/line_dd"/>
<Button
android:id="@+id/btn_2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:background="@drawable/dialogui_selector_all_no"
android:gravity="center"
android:minHeight="48dp"
android:padding="5dp"
android:text="2"
android:textColor="@color/ios_btntext_blue"
android:textSize="@dimen/dialogui_btn_txt_size"/>
<View
android:id="@+id/line_btn3"
android:layout_width="1px"
android:layout_height="match_parent"
android:background="@color/line_dd"/>
<Button
android:id="@+id/btn_3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:background="@drawable/dialogui_selector_right_bottom"
android:gravity="center"
android:minHeight="48dp"
android:padding="5dp"
android:text="3"
android:textColor="@color/ios_btntext_blue"
android:textSize="@dimen/dialogui_btn_txt_size"/>
</LinearLayout>
<LinearLayout
android:id="@+id/ll_container_vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="48dp"
android:orientation="vertical"
android:visibility="gone">
<Button
android:id="@+id/btn_1_vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@drawable/dialogui_selector_all_no"
android:gravity="center"
android:minHeight="48dp"
android:padding="5dp"
android:text="1"
android:textColor="@color/ios_btntext_blue"
android:textSize="@dimen/dialogui_btn_txt_size"/>
<View
android:id="@+id/line_btn2_vertical"
android:layout_width="match_parent"
android:layout_height="1px"
android:background="@color/line_dd"/>
<Button
android:id="@+id/btn_2_vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@drawable/dialogui_selector_all_no"
android:gravity="center"
android:minHeight="48dp"
android:padding="5dp"
android:text="2"
android:textColor="@color/ios_btntext_blue"
android:textSize="@dimen/dialogui_btn_txt_size"/>
<View
android:id="@+id/line_btn3_vertical"
android:layout_width="match_parent"
android:layout_height="1px"
android:background="@color/line_dd"/>
<Button
android:id="@+id/btn_3_vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@drawable/dialogui_selector_all_bottom"
android:gravity="center"
android:minHeight="48dp"
android:padding="5dp"
android:text="3"
android:textColor="@color/ios_btntext_blue"
android:textSize="@dimen/dialogui_btn_txt_size"/>
</LinearLayout>
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/dialogui_ll_bg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@drawable/dialogui_shape_wihte_round_corner"
android:baselineAligned="false"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingBottom="14dip"
android:paddingLeft="8dip"
android:paddingRight="8dip"
android:paddingTop="14dip">
<ProgressBar
android:id="@+id/pb_bg"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginRight="8dp"
android:indeterminate="true"
android:indeterminateDrawable="@drawable/dialogui_shape_progress"
android:indeterminateDuration="1200"
android:max="10000"/>
<TextView
android:id="@+id/dialogui_tv_msg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:ellipsize="end"
android:maxLines="1"
android:maxWidth="@dimen/dialogui_max_with"
android:text=""
android:textColor="#222222"
android:textSize="@dimen/dialogui_msg_txt_size"/>
</LinearLayout>
</FrameLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:id="@+id/dialogui_ll_bg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:background="@drawable/dialogui_shape_wihte_round_corner"
android:gravity="center"
android:minHeight="120dp"
android:minWidth="120dp"
android:orientation="vertical">
<ProgressBar
android:id="@+id/pb_bg"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_gravity="center_horizontal"
android:indeterminateDrawable="@drawable/dialogui_rotate_mum_light"
android:indeterminateDuration="1200"/>
<TextView
android:id="@+id/dialogui_tv_msg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_gravity="center_horizontal"
android:layout_marginTop="10dp"
android:ellipsize="end"
android:maxLines="1"
android:maxWidth="300dp"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:text="加载中..."
android:textColor="@color/text_black"/>
</LinearLayout>
</RelativeLayout>
\ No newline at end of file
<?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:background="@drawable/dialogui_shape_gray_round_l_corner"
android:orientation="vertical">
<TextView
android:id="@android:id/message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_weight="1"
android:layout_margin="@dimen/dialogui_margin_smid"
android:fontFamily="sans-serif-condensed"
android:shadowColor="#BB000000"
android:shadowRadius="2.75"
android:textColor="#ffffffff"
android:textSize="13sp"
android:textStyle="normal"
/>
</LinearLayout>
\ No newline at end of file
...@@ -38,4 +38,5 @@ ...@@ -38,4 +38,5 @@
<string name="exit_btn">退出</string> <string name="exit_btn">退出</string>
<string name="btn_input_code">输入激活码</string> <string name="btn_input_code">输入激活码</string>
<string name="dialog_tip_activate_lose">您的激活已失效,如有疑问请致电4008265936</string>
</resources> </resources>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="bg_white">#ffffff</color>
<color name="btn_alert">#222222</color>
<color name="color_text_black">#4c4c4c</color>
<color name="color_tie_bg">#efeff4</color>
<color name="color_tie_normal">#ffffff</color>
<color name="color_tie_select">#efeff4</color>
<color name="datepick_surance_blue">#3598da</color>
<color name="dialogui_btn_normal">#ffffff</color>
<color name="dialogui_btn_pressed">#eeeeee</color>
<color name="ios_btntext_blue">#007aff</color>
<color name="line_dd">#dddddd</color>
<color name="text_black">#333333</color>
<color name="text_black_light">#666666</color>
<color name="text_gray">#999999</color>
<color name="text_gray_light">#B3B3B3</color>
<color name="text_input_44">#444444</color>
<color name="text_item_33">#333333</color>
<color name="text_msg_33">#333333</color>
<color name="text_title_11">#111111</color>
<dimen name="dialogui_btn_txt_size">14sp</dimen>
<dimen name="dialogui_height_mid">48dp</dimen>
<dimen name="dialogui_input_txt_size">14sp</dimen>
<dimen name="dialogui_item_txt_size">14sp</dimen>
<dimen name="dialogui_l_round_corner_radius">10dp</dimen>
<dimen name="dialogui_line_with">1dp</dimen>
<dimen name="dialogui_margin_mid">16dp</dimen>
<dimen name="dialogui_margin_small">8dp</dimen>
<dimen name="dialogui_margin_smid">14dp</dimen>
<dimen name="dialogui_max_with">360dp</dimen>
<dimen name="dialogui_msg_txt_size">14sp</dimen>
<dimen name="dialogui_round_corner_radius">5dp</dimen>
<dimen name="dialogui_title_txt_size">17sp</dimen>
<dimen name="dialogui_toast_margin">64dp</dimen>
<style name="dialogui_bottom_style" parent="android:Animation">
<item name="@android:windowEnterAnimation">@anim/dialogui_enter</item>
//进入时的动画
<item name="@android:windowExitAnimation">@anim/dialogui_exit</item>
//退出时的动画
</style>
<style name="dialogui_center_style" parent="android:Animation">
<item name="@android:windowEnterAnimation">@anim/dialogui_enter_center</item>
</style>
<style name="dialogui_datepick_FontStyleNormalLightBlackMiddle" parent="@android:style/TextAppearance">
<item name="android:textStyle">normal</item>
<item name="android:textColor">#ff333333</item>
<item name="android:textSize">16sp</item>
</style>
<style name="dialogui_datepick_dialog_untran" parent="dialogui_datepick_tran">
<item name="android:backgroundDimEnabled">true</item>
</style>
<style name="dialogui_datepick_fontstyle_normal_blackmiddle" parent="@android:style/TextAppearance">
<item name="android:textStyle">normal</item>
<item name="android:textColor">#000000</item>
<item name="android:textSize">14sp</item>
</style>
<style name="dialogui_datepick_fontstyle_normal_bluemiddle" parent="@android:style/TextAppearance">
<item name="android:textStyle">normal</item>
<item name="android:textColor">@color/datepick_surance_blue</item>
<item name="android:textSize">14sp</item>
</style>
<style name="dialogui_datepick_tran" parent="android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:backgroundDimEnabled">false</item>
<item name="android:backgroundDimAmount">0.4</item>
</style>
</resources>
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