package com.nodka.zysjtest; import android.app.ZysjSystemManager; import android.content.Context; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class WhiteListActivity extends BaseTestActivity { private static final String SERVICE_NOT_FOUND_MESSAGE = "未获取到 ZysjSystemManager 系统服务"; private ZysjSystemManager zysjSystemManager; @Override protected String getPageTitle() { return "白名单接口测试"; } @Override protected List getTestItems() { return Arrays.asList( new TestItem( "应用白名单开关(限制安装)", "whiteListSwitch", "enable:true 表示开启限制安装白名单,false 表示关闭。", true, "enabled", true, this::whiteListSwitch), new TestItem( "获取白名单开关状态(限制安装)", "whiteListSwitchState", "获取限制安装白名单开关状态。", this::whiteListSwitchState), new TestItem( "添加应用白名单(限制安装)", "addWhiteList", "list:应用包名列表,支持逗号、换行或空白分隔。", this::addWhiteList, TestItem.InputField.text( "请输入 packageList", "com.android.test0,com.android.test1", "packageList")), new TestItem( "删除应用白名单(限制安装)", "deleteWhiteList", "list:需要删除的应用包名列表,支持逗号、换行或空白分隔。", this::deleteWhiteList, TestItem.InputField.text( "请输入 packageList", "com.android.test0", "packageList")), new TestItem( "查询应用白名单(限制安装)", "queryWhiteList", "查询限制安装白名单列表。", this::queryWhiteList), new TestItem( "应用白名单开关(限制卸载)", "whiteListSwitchUn", "enable:true 表示开启限制卸载白名单,false 表示关闭。", true, "enabled", true, this::whiteListSwitchUn), new TestItem( "获取白名单开关状态(限制卸载)", "whiteListSwitchStateUn", "获取限制卸载白名单开关状态。", this::whiteListSwitchStateUn), new TestItem( "添加应用白名单(限制卸载)", "addWhiteListUn", "list:应用包名列表,支持逗号、换行或空白分隔。", this::addWhiteListUn, TestItem.InputField.text( "请输入 packageList", "com.android.test0,com.android.test1", "packageList")), new TestItem( "删除应用白名单(限制卸载)", "deleteWhiteListUn", "list:需要删除的应用包名列表,支持逗号、换行或空白分隔。", this::deleteWhiteListUn, TestItem.InputField.text( "请输入 packageList", "com.android.test0", "packageList")), new TestItem( "查询应用白名单(限制卸载)", "queryWhiteListUn", "查询限制卸载白名单列表。", this::queryWhiteListUn) ); } private ZysjSystemManager zysjSystemManager() { if (zysjSystemManager != null) { return zysjSystemManager; } for (String serviceName : getServiceNameCandidates()) { Object service = getSystemService(serviceName); if (service instanceof ZysjSystemManager) { zysjSystemManager = (ZysjSystemManager) service; return zysjSystemManager; } } throw new IllegalStateException(SERVICE_NOT_FOUND_MESSAGE); } private List getServiceNameCandidates() { List candidates = new ArrayList<>(); addContextFieldCandidate(candidates, "ZYSJ_SYSTEM_SERVICE"); addContextFieldCandidate(candidates, "ZYSJ_SERVICE"); candidates.add("zysj_system"); candidates.add("zysj"); candidates.add("zysj_system_service"); return candidates; } private void addContextFieldCandidate(List candidates, String fieldName) { try { Field field = Context.class.getField(fieldName); Object value = field.get(null); if (value instanceof String && !candidates.contains(value)) { candidates.add((String) value); } } catch (NoSuchFieldException ignored) { } catch (IllegalAccessException e) { throw new IllegalStateException("读取 Context." + fieldName + " 失败", e); } } private String whiteListSwitch(TestItem item, String[] inputs) { try { zysjSystemManager().whiteListSwitch(item.switchChecked); return "whiteListSwitch 调用完成,enabled=" + item.switchChecked; } catch (Throwable e) { return formatError("whiteListSwitch", e); } } private String whiteListSwitchState(TestItem item, String[] inputs) { try { boolean ret = zysjSystemManager().whiteListSwitchState(); return "whiteListSwitchState ret=" + ret; } catch (Throwable e) { return formatError("whiteListSwitchState", e); } } private String addWhiteList(TestItem item, String[] inputs) { try { List list = parsePackageList(readInput(inputs, 0)); if (list.isEmpty()) { return "参数错误:包名列表为空"; } zysjSystemManager().addWhiteList(list); return "addWhiteList 调用完成,list=" + list; } catch (Throwable e) { return formatError("addWhiteList", e); } } private String deleteWhiteList(TestItem item, String[] inputs) { try { List list = parsePackageList(readInput(inputs, 0)); if (list.isEmpty()) { return "参数错误:包名列表为空"; } zysjSystemManager().deleteWhiteList(list); return "deleteWhiteList 调用完成,list=" + list; } catch (Throwable e) { return formatError("deleteWhiteList", e); } } private String queryWhiteList(TestItem item, String[] inputs) { try { List list = zysjSystemManager().queryWhiteList(); return "queryWhiteList ret=" + String.valueOf(list); } catch (Throwable e) { return formatError("queryWhiteList", e); } } private String whiteListSwitchUn(TestItem item, String[] inputs) { try { zysjSystemManager().whiteListSwitchUn(item.switchChecked); return "whiteListSwitchUn 调用完成,enabled=" + item.switchChecked; } catch (Throwable e) { return formatError("whiteListSwitchUn", e); } } private String whiteListSwitchStateUn(TestItem item, String[] inputs) { try { boolean ret = zysjSystemManager().whiteListSwitchStateUn(); return "whiteListSwitchStateUn ret=" + ret; } catch (Throwable e) { return formatError("whiteListSwitchStateUn", e); } } private String addWhiteListUn(TestItem item, String[] inputs) { try { List list = parsePackageList(readInput(inputs, 0)); if (list.isEmpty()) { return "参数错误:包名列表为空"; } zysjSystemManager().addWhiteListUn(list); return "addWhiteListUn 调用完成,list=" + list; } catch (Throwable e) { return formatError("addWhiteListUn", e); } } private String deleteWhiteListUn(TestItem item, String[] inputs) { try { List list = parsePackageList(readInput(inputs, 0)); if (list.isEmpty()) { return "参数错误:包名列表为空"; } zysjSystemManager().deleteWhiteListUn(list); return "deleteWhiteListUn 调用完成,list=" + list; } catch (Throwable e) { return formatError("deleteWhiteListUn", e); } } private String queryWhiteListUn(TestItem item, String[] inputs) { try { List list = zysjSystemManager().queryWhiteListUn(); return "queryWhiteListUn ret=" + String.valueOf(list); } catch (Throwable e) { return formatError("queryWhiteListUn", e); } } private List parsePackageList(String input) { List list = new ArrayList<>(); if (input == null) { return list; } String[] parts = input.split("[,,\\n\\r\\s]+"); for (String part : parts) { if (part == null) { continue; } String pkg = part.trim(); if (!pkg.isEmpty()) { list.add(pkg); } } return list; } private String readInput(String[] inputs, int index) { if (index >= inputs.length) { return ""; } return inputs[index]; } private String formatError(String methodName, Throwable e) { return methodName + " 调用失败:" + e.getClass().getName() + ": " + e.getMessage(); } }