Created
June 14, 2016 16:12
-
-
Save jonfhancock/4651f978ebbaa34e31efe3adeef0f123 to your computer and use it in GitHub Desktop.
This method can be called by your Application class onCreate(), or even your first Activity. After that, for debug builds only, you can manipulate StrictMode settings at any time without inconveniencing your QA team.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* For debug builds, this adds the ability to set up StrictMode on the fly via the command line with a command like | |
* adb shell am broadcast -a com.your.pakcage.action_change_strict_mode --ez enabled true --esa penalties log\,flash\,death | |
*/ | |
private void setupStrictModeReceiver() { | |
if (BuildConfig.DEBUG) { | |
final String tag = "StrictModeReceiver"; | |
IntentFilter intentFilter = new IntentFilter(); | |
intentFilter.addAction("com.your.package.action_change_strict_mode"); | |
registerReceiver(new BroadcastReceiver() { | |
@Override | |
public void onReceive(Context context, Intent intent) { | |
Log.d(tag, "Got a command to change strict mode"); | |
boolean enabled = intent.getBooleanExtra("enabled", false); | |
String[] penalties = intent.getStringArrayExtra("penalties"); | |
if(penalties == null || penalties.length == 0){ | |
penalties = new String[]{"log"}; | |
} | |
Log.d(tag,"Enabling StrictMode with penalties = " + Arrays.toString(penalties)); | |
StrictMode.ThreadPolicy threadPolicy; | |
StrictMode.VmPolicy vmPolicy; | |
if (enabled) { | |
final StrictMode.ThreadPolicy.Builder thredPolicyBuilder = new StrictMode.ThreadPolicy.Builder(); | |
thredPolicyBuilder | |
.detectAll() | |
.permitDiskReads() | |
.permitDiskWrites(); | |
for(int i = 0;i<penalties.length;i++) { | |
switch (penalties[i]) { | |
case "death": | |
thredPolicyBuilder.penaltyLog(); | |
break; | |
case "dialog": | |
thredPolicyBuilder.penaltyDialog(); | |
break; | |
case "flash": | |
thredPolicyBuilder.penaltyFlashScreen(); | |
break; | |
case "deathOnNetwork": | |
thredPolicyBuilder.penaltyDeathOnNetwork(); | |
break; | |
case "dropbox": | |
thredPolicyBuilder.penaltyDropBox(); | |
case "log": | |
default: | |
thredPolicyBuilder.penaltyLog(); | |
} | |
} | |
threadPolicy = thredPolicyBuilder.build(); | |
final StrictMode.VmPolicy.Builder vmPolicyBuilder = new StrictMode.VmPolicy.Builder(); | |
vmPolicyBuilder.detectAll(); | |
for(int i = 0;i<penalties.length;i++) { | |
switch (penalties[i]) { | |
case "death": | |
vmPolicyBuilder.penaltyLog(); | |
break; | |
case "dialog": | |
case "flash": | |
case "deathOnNetwork": | |
// These don't apply to VmPolicy. | |
break; | |
case "dropbox": | |
vmPolicyBuilder.penaltyDropBox(); | |
case "log": | |
default: | |
vmPolicyBuilder.penaltyLog(); | |
} | |
} | |
vmPolicy = vmPolicyBuilder.build(); | |
}else{ | |
Log.d(tag,"Disabling StrictMode"); | |
vmPolicy = StrictMode.VmPolicy.LAX; | |
threadPolicy = StrictMode.ThreadPolicy.LAX; | |
} | |
StrictMode.setVmPolicy(vmPolicy); | |
StrictMode.setThreadPolicy(threadPolicy); | |
} | |
}, intentFilter); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment