Merge "Developer option to disable legacy greylist."
This commit is contained in:
@@ -103,6 +103,8 @@ public final class Sm {
|
||||
runSetVirtualDisk();
|
||||
} else if ("set-isolated-storage".equals(op)) {
|
||||
runIsolatedStorage();
|
||||
} else if ("set-legacy-greylist".equals(op)) {
|
||||
runLegacyGreylist();
|
||||
} else {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
@@ -282,7 +284,7 @@ public final class Sm {
|
||||
StorageManager.DEBUG_VIRTUAL_DISK);
|
||||
}
|
||||
|
||||
public void runIsolatedStorage() {
|
||||
public void runIsolatedStorage() throws RemoteException {
|
||||
final int value;
|
||||
final int mask = StorageManager.DEBUG_ISOLATED_STORAGE_FORCE_ON
|
||||
| StorageManager.DEBUG_ISOLATED_STORAGE_FORCE_OFF;
|
||||
@@ -301,16 +303,13 @@ public final class Sm {
|
||||
default:
|
||||
return;
|
||||
}
|
||||
mSm.setDebugFlags(value, mask);
|
||||
}
|
||||
|
||||
// Toggling isolated-storage state will result in a device reboot. So to avoid this command
|
||||
// from erroring out (DeadSystemException), call setDebugFlags() in a separate thread.
|
||||
new Thread(() -> {
|
||||
try {
|
||||
mSm.setDebugFlags(value, mask);
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "Encountered an error!", e);
|
||||
}
|
||||
}).start();
|
||||
public void runLegacyGreylist() throws RemoteException {
|
||||
final boolean legacyGreylist = Boolean.parseBoolean(nextArg());
|
||||
mSm.setDebugFlags(legacyGreylist ? StorageManager.DEBUG_LEGACY_GREYLIST : 0,
|
||||
StorageManager.DEBUG_LEGACY_GREYLIST);
|
||||
}
|
||||
|
||||
public void runIdleMaint() throws RemoteException {
|
||||
|
||||
@@ -136,6 +136,8 @@ public class StorageManager {
|
||||
public static final String PROP_ISOLATED_STORAGE = "persist.sys.isolated_storage";
|
||||
/** {@hide} */
|
||||
public static final String PROP_ISOLATED_STORAGE_SNAPSHOT = "sys.isolated_storage_snapshot";
|
||||
/** {@hide} */
|
||||
public static final String PROP_LEGACY_GREYLIST = "persist.sys.legacy_greylist";
|
||||
|
||||
/** {@hide} */
|
||||
public static final String PROP_FORCE_AUDIO = "persist.fw.force_audio";
|
||||
@@ -233,6 +235,8 @@ public class StorageManager {
|
||||
public static final int DEBUG_ISOLATED_STORAGE_FORCE_ON = 1 << 6;
|
||||
/** {@hide} */
|
||||
public static final int DEBUG_ISOLATED_STORAGE_FORCE_OFF = 1 << 7;
|
||||
/** {@hide} */
|
||||
public static final int DEBUG_LEGACY_GREYLIST = 1 << 8;
|
||||
|
||||
/** {@hide} */
|
||||
public static final int FLAG_STORAGE_DE = IInstalld.FLAG_STORAGE_DE;
|
||||
|
||||
@@ -205,6 +205,9 @@ class StorageManagerService extends IStorageManager.Stub
|
||||
|
||||
private static final boolean ENABLE_ISOLATED_STORAGE = StorageManager.hasIsolatedStorage();
|
||||
|
||||
private static final boolean ENABLE_LEGACY_GREYLIST = SystemProperties
|
||||
.getBoolean(StorageManager.PROP_LEGACY_GREYLIST, true);
|
||||
|
||||
public static class Lifecycle extends SystemService {
|
||||
private StorageManagerService mStorageManagerService;
|
||||
|
||||
@@ -2289,7 +2292,26 @@ class StorageManagerService extends IStorageManager.Stub
|
||||
refreshIsolatedStorageSettings();
|
||||
|
||||
// Perform hard reboot to kick policy into place
|
||||
mContext.getSystemService(PowerManager.class).reboot(null);
|
||||
mHandler.post(() -> {
|
||||
mContext.getSystemService(PowerManager.class).reboot(null);
|
||||
});
|
||||
} finally {
|
||||
Binder.restoreCallingIdentity(token);
|
||||
}
|
||||
}
|
||||
|
||||
if ((mask & StorageManager.DEBUG_LEGACY_GREYLIST) != 0) {
|
||||
final boolean enabled = (flags & StorageManager.DEBUG_LEGACY_GREYLIST) != 0;
|
||||
|
||||
final long token = Binder.clearCallingIdentity();
|
||||
try {
|
||||
SystemProperties.set(StorageManager.PROP_LEGACY_GREYLIST,
|
||||
Boolean.toString(enabled));
|
||||
|
||||
// Perform hard reboot to kick policy into place
|
||||
mHandler.post(() -> {
|
||||
mContext.getSystemService(PowerManager.class).reboot(null);
|
||||
});
|
||||
} finally {
|
||||
Binder.restoreCallingIdentity(token);
|
||||
}
|
||||
@@ -3675,16 +3697,17 @@ class StorageManagerService extends IStorageManager.Stub
|
||||
} else if (mPmInternal.isInstantApp(packageName, UserHandle.getUserId(uid))) {
|
||||
return Zygote.MOUNT_EXTERNAL_NONE;
|
||||
} else {
|
||||
// STOPSHIP: remove this temporary workaround once developers
|
||||
// fix bugs where they're opening _data paths in native code
|
||||
switch (packageName) {
|
||||
case "com.facebook.katana": // b/123996076
|
||||
case "jp.naver.line.android": // b/124767356
|
||||
case "com.mxtech.videoplayer.ad": // b/124531483
|
||||
return Zygote.MOUNT_EXTERNAL_LEGACY;
|
||||
default:
|
||||
return Zygote.MOUNT_EXTERNAL_WRITE;
|
||||
if (ENABLE_LEGACY_GREYLIST) {
|
||||
// STOPSHIP: remove this temporary workaround once developers
|
||||
// fix bugs where they're opening _data paths in native code
|
||||
switch (packageName) {
|
||||
case "com.facebook.katana": // b/123996076
|
||||
case "jp.naver.line.android": // b/124767356
|
||||
case "com.mxtech.videoplayer.ad": // b/124531483
|
||||
return Zygote.MOUNT_EXTERNAL_LEGACY;
|
||||
}
|
||||
}
|
||||
return Zygote.MOUNT_EXTERNAL_WRITE;
|
||||
}
|
||||
} catch (RemoteException e) {
|
||||
// Should not happen
|
||||
|
||||
Reference in New Issue
Block a user