测试开关文档
为方遍后续全局性开关设置和测试方便,统一测试开关开发。
测试开关说明
通过一个开关列表,整合所有测试开关。(特别重要的开关不建议这么做)
- 随便在一个页面中通过
onCreateOptionsMenu
设置菜单中添加右上角透明测试菜单
- 先设置测试点击数组
//利用数组来存储时间,通过修改数组长度来修改点击次数,测试服为3次,正式服为4次
long[] mTestHits;
void onCreate(Bundle savedInstanceState) {
// 后续SettingActivity如果改写成kotlin,可以传入次数函数代替判断
if(Tools.isApkDebugable(context)){
mTestHits = new long[3];
}else{
mTestHits = new long[4];
}
}
- 设置右上角透明菜单
MenuItem test = menu.findItem(R.id.action_test);
test.setActionView(R.layout.action_setting_test_item);
test.getActionView().setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
System.arraycopy(mTestHits, 1, mTestHits, 0, mTestHits.length - 1);
//获取离开机的时间
mTestHits[mTestHits.length - 1] = SystemClock.uptimeMillis();
//单击时间的间隔,以500毫秒为临界值
if (mTestHits[0] >= (SystemClock.uptimeMillis() - 500)) {
//一个三击(双击或多击事件完成)
TestDialogUtils.showTestDialog(context);
//把数组置为空并重写初始化,为下一次三击(双击或多击)做准备
mTestHits = null;
if(Tools.isApkDebugable(context)){
mTestHits = new long[3];
}else{
mTestHits = new long[4];
}
}
}
});
- 在
TestDialogUtils
中showTestDialog()
添加开关项
// 将正式服和测试服的不同开关放在数组最后,弹框点击item不用再调整
private val arrayDebug = arrayOf("手机信息", "探针提示开关","切换正式服测试服URL")
private val arrayRelease = arrayOf("手机信息", "探针提示开关")
private lateinit var arrayTest: Array<String>
/**
* 测试弹框
*
* @param context 上下文
*/
@JvmStatic
fun showTestDialog(context: Context?) {
arrayTest = if (BuildConfig.DEBUG) {
arrayDebug
} else {
arrayRelease
}
val builder = AlertDialog.Builder(context)
builder.setSingleChoiceItems(arrayTest, 0) { dialog, which ->
when (which) {
0 ->EdToast.showToast(deviceInfoString, -1, 10000)
1 -> if (FxConfig.isEventTest) {
FxConfig.isEventTest = false
TestSharePreference.setEventTestToastSwitch(false)
Toast.makeText(VideoEditorApplication.getInstance(), "关闭探针提示", Toast.LENGTH_SHORT).show()
} else {
FxConfig.isEventTest = true
TestSharePreference.setEventTestToastSwitch(true)
Toast.makeText(VideoEditorApplication.getInstance(), "打开探针提示", Toast.LENGTH_SHORT).show()
}
2 -> {
ConfigServer.isConnRelUrl = !ConfigServer.isConnRelUrl
TestSharePreference.setConnectReleaseUrl(ConfigServer.isConnRelUrl)
Toast.makeText(VideoEditorApplication.getInstance(), if (ConfigServer.isConnRelUrl) "Release URL Open!" else "Release URL Close!", Toast.LENGTH_SHORT).show()
}
}
}.setNegativeButton("关闭") { dialog, which -> dialog.dismiss() }.setTitle("测试列表").setCancelable(false).create().show(
- 需要本地化的开关(需要重新打开应用依然保持开关状态),可以通过
TestSharePreference
来保存开关状态
/**
* 设置探针Toast提示开关
*/
public static void setEventTestToastSwitch(Boolean isOpen) {
SharedPreferences.Editor editor = VideoEditorApplication.getInstance().getSharedPreferences(USER_TEST,
Context.MODE_PRIVATE).edit();
editor.putBoolean(EVENT_TEST, isOpen);
editor.apply();
}
并在VideoEditorApplication
中通过初始化测试配置来把本地化探针配置设置到全局开关上
/**
* 初始化测试配置
*/
private void initTestConfig() {
FxConfig.isEventTest = TestSharePreference.getEventTestToastSwitch();
}
特殊情况,如遇到崩溃,需要在崩溃重启位置将本地化测试配置重新赋值给全局开关