Skip to content

Commit b420f1d

Browse files
committed
Added Shell commands to manage hidden apps
Test: adb shell dumpsys activity service com.afwsamples.testdpc is-hidden-package com.android.gallery3d Test: adb shell dumpsys activity service com.afwsamples.testdpc set-hidden-package com.android.gallery3d true Bug: 171350084 Bug: 181154143 Change-Id: Id1cf8c208a1bf82e3b501790e80d0ec01b43dee2 (cherry picked from commit eb82ac297b010a46944b755805cf2e1f7cee28ce)
1 parent 69bc3b6 commit b420f1d

File tree

3 files changed

+75
-7
lines changed

3 files changed

+75
-7
lines changed

app/src/main/java/com/afwsamples/testdpc/DevicePolicyManagerGateway.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,17 @@ void setPackagesSuspended(String[] packageNames, boolean suspended, @NonNull Con
244244
*/
245245
boolean isPackageSuspended(String packageName) throws NameNotFoundException;
246246

247+
/**
248+
* See {@link android.app.admin.DevicePolicyManager#setApplicationHidden(ComponentName, String, boolean)}.
249+
*/
250+
void setApplicationHidden(String packageName, boolean suspended, @NonNull Consumer<Void> onSuccess,
251+
@NonNull Consumer<Exception> onError);
252+
253+
/**
254+
* See {@link android.app.admin.DevicePolicyManager#isApplicationHidden(ComponentName, String)}.
255+
*/
256+
boolean isApplicationHidden(String packageName) throws NameNotFoundException;
257+
247258
// TODO(b/171350084): use in other places
248259
/**
249260
* See {@link android.app.admin.DevicePolicyManager#setLockTaskPackages(ComponentName, String[])}.

app/src/main/java/com/afwsamples/testdpc/DevicePolicyManagerGatewayImpl.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -480,6 +480,24 @@ public void setLockTaskPackages(String[] packages, Consumer<Void> onSuccess,
480480
}
481481
}
482482

483+
@Override
484+
public void setApplicationHidden(String packageName, boolean hidden,
485+
Consumer<Void> onSuccess, Consumer<Exception> onError) {
486+
Log.d(TAG, "setApplicationHidden(" + packageName + ", " + hidden + ")");
487+
488+
try {
489+
mDevicePolicyManager.setApplicationHidden(mAdminComponentName, packageName, hidden);
490+
onSuccess.accept(null);
491+
} catch (Exception e) {
492+
onError.accept(e);
493+
}
494+
}
495+
496+
@Override
497+
public boolean isApplicationHidden(String packageName) throws NameNotFoundException {
498+
return mDevicePolicyManager.isApplicationHidden(mAdminComponentName, packageName);
499+
}
500+
483501
@Override
484502
public String[] getLockTaskPackages() {
485503
return mDevicePolicyManager.getLockTaskPackages(mAdminComponentName);

app/src/main/java/com/afwsamples/testdpc/ShellCommand.java

Lines changed: 46 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,9 @@ final class ShellCommand {
7878
private static final String CMD_GET_PASSWORD_QUALITY = "get-password-quality";
7979
private static final String CMD_TRANSFER_OWNERSHIP = "transfer-ownership";
8080
private static final String CMD_SET_SUSPENDED_PACKAGES = "set-suspended-packages";
81-
private static final String CMD_IS_PACKAGE_SUSPENDED = "is-package-suspended";
81+
private static final String CMD_LIST_PACKAGE_SUSPENDED = "list-suspended-packages";
82+
private static final String CMD_SET_HIDDEN_PACKAGE = "set-hidden-package";
83+
private static final String CMD_IS_HIDDEN_PACKAGE = "is-hidden-package";
8284
private static final String CMD_SET_LOCK_TASK_PACKAGES = "set-lock-task-packages";
8385
private static final String CMD_GET_LOCK_TASK_PACKAGES = "get-lock-task-packages";
8486
private static final String CMD_IS_LOCK_TASK_PERMITTED = "is-lock-task-permitted";
@@ -194,10 +196,16 @@ public void run() {
194196
execute(() -> transferOwnership());
195197
break;
196198
case CMD_SET_SUSPENDED_PACKAGES:
197-
execute(() -> setPackagesSuspended());
199+
execute(() -> setSuspendedPackages());
198200
break;
199-
case CMD_IS_PACKAGE_SUSPENDED:
200-
execute(() -> isPackageSuspended());
201+
case CMD_LIST_PACKAGE_SUSPENDED:
202+
execute(() -> listSuspendedPackages());
203+
break;
204+
case CMD_SET_HIDDEN_PACKAGE:
205+
execute(() -> setHiddenPackage());
206+
break;
207+
case CMD_IS_HIDDEN_PACKAGE:
208+
execute(() -> isHiddenPackage());
201209
break;
202210
case CMD_SET_LOCK_TASK_PACKAGES:
203211
execute(() -> setLockTaskPackages());
@@ -281,7 +289,11 @@ private void showUsage() {
281289
mWriter.printf("\t%s <SUSPENDED> <PKG1> [PKG2] [PGKN] - suspend / unsuspend the given "
282290
+ "packages\n", CMD_SET_SUSPENDED_PACKAGES);
283291
mWriter.printf("\t%s <PKG1> [PKG2] [PKGN] - checks if the given packages are suspended\n",
284-
CMD_IS_PACKAGE_SUSPENDED);
292+
CMD_LIST_PACKAGE_SUSPENDED);
293+
mWriter.printf("\t%s <PKG> <HIDDEN> - hide / unhide the given package\n",
294+
CMD_SET_HIDDEN_PACKAGE);
295+
mWriter.printf("\t%s <PKG> - checks if the given package is hidden\n",
296+
CMD_IS_HIDDEN_PACKAGE);
285297
mWriter.printf("\t%s <PKG1> [PKG2] [PGKN] - set the packages allowed to have tasks locked"
286298
+ "\n", CMD_SET_LOCK_TASK_PACKAGES);
287299
mWriter.printf("\t%s - get the packages allowed to have tasks locked\n",
@@ -560,7 +572,7 @@ private static String suspendedToString(boolean suspended) {
560572
return suspended ? "SUSPENDED" : "NOT SUSPENDED";
561573
}
562574

563-
private void setPackagesSuspended() {
575+
private void setSuspendedPackages() {
564576
boolean suspended = Boolean.parseBoolean(mArgs[1]);
565577
String[] packageNames = getArrayFromArgs(/* index= */ 2);
566578

@@ -575,7 +587,7 @@ private void setPackagesSuspended() {
575587
(e) -> onError(e, "Error settings %s to %s", printableNames, printableStatus));
576588
}
577589

578-
private void isPackageSuspended() {
590+
private void listSuspendedPackages() {
579591
getListFromAllArgs().forEach((packageName) -> {
580592
try {
581593
boolean suspended = mDevicePolicyManagerGateway.isPackageSuspended(packageName);
@@ -586,6 +598,33 @@ private void isPackageSuspended() {
586598
});
587599
}
588600

601+
private static String hiddenToString(boolean hidden) {
602+
return hidden ? "HIDDEN" : "VISIBLE";
603+
}
604+
605+
private void setHiddenPackage() {
606+
// TODO(b/171350084): check args
607+
String packageName = mArgs[1];
608+
boolean hidden = Boolean.parseBoolean(mArgs[2]);
609+
String printableStatus = hiddenToString(hidden);
610+
611+
Log.i(TAG, "setHiddenPackages(" + packageName + "): " + printableStatus);
612+
mDevicePolicyManagerGateway.setApplicationHidden(packageName, hidden,
613+
(v) -> onSuccess("Set %s as %s", packageName, printableStatus),
614+
(e) -> onError(e, "Error settings %s as %s", packageName, printableStatus));
615+
}
616+
617+
private void isHiddenPackage() {
618+
// TODO(b/171350084): check args
619+
String packageName = mArgs[1];
620+
try {
621+
boolean hidden = mDevicePolicyManagerGateway.isApplicationHidden(packageName);
622+
mWriter.printf("%s: %s\n", packageName, hiddenToString(hidden));
623+
} catch (NameNotFoundException e) {
624+
mWriter.printf("Invalid package name: %s\n", packageName);
625+
}
626+
}
627+
589628
private void setLockTaskPackages() {
590629
String[] packages = getArrayFromArgs(/* index= */ 1);
591630

0 commit comments

Comments
 (0)