Skip to content

Commit dca27e6

Browse files
committed
Added commands to set / get user location.
Test: adb shell dumpsys activity service --user 0 com.afwsamples.testdpc is-location-enabled Test: adb shell dumpsys activity service --user 0 com.afwsamples.testdpc set-location-enabled false Bug: 171350084 Bug: 185523465 Change-Id: I98d770a3fdeb2f9ab0d75cd0f34e0dee090e4ae4 (cherry picked from commit 6d43070c6bca8a3648f91e003c7a62efcaa6a0a7)
1 parent 7f12991 commit dca27e6

File tree

4 files changed

+66
-5
lines changed

4 files changed

+66
-5
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
@@ -327,6 +327,17 @@ void setPermissionGrantState(String packageName, String permission, int grantSta
327327
*/
328328
int getPermissionGrantState(String packageName, String permission);
329329

330+
/**
331+
* See {@link android.app.admin.DevicePolicyManager#setLocationEnabled(ComponentName, boolean)}.
332+
*/
333+
void setLocationEnabled(boolean enabled, @NonNull Consumer<Void> onSuccess,
334+
@NonNull Consumer<Exception> onError);
335+
336+
/**
337+
* See {@link android.location.LocationManager#isLocationEnabled()}.
338+
*/
339+
boolean isLocationEnabled();
340+
330341
/**
331342
* Used on error callbacks to indicate a {@link android.app.admin.DevicePolicyManager} method
332343
* call failed.

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

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import android.content.Context;
2222
import android.content.pm.PackageManager.NameNotFoundException;
2323
import android.graphics.Bitmap;
24+
import android.location.LocationManager;
25+
import android.os.Build;
2426
import android.os.Bundle;
2527
import android.os.PersistableBundle;
2628
import android.os.UserHandle;
@@ -44,17 +46,20 @@ public final class DevicePolicyManagerGatewayImpl implements DevicePolicyManager
4446
private final DevicePolicyManager mDevicePolicyManager;
4547
private final UserManager mUserManager;
4648
private final ComponentName mAdminComponentName;
49+
private final LocationManager mLocationManager;
4750

4851
public DevicePolicyManagerGatewayImpl(@NonNull Context context) {
4952
this(context.getSystemService(DevicePolicyManager.class),
5053
context.getSystemService(UserManager.class),
54+
context.getSystemService(LocationManager.class),
5155
DeviceAdminReceiver.getComponentName(context));
5256
}
5357

5458
public DevicePolicyManagerGatewayImpl(@NonNull DevicePolicyManager dpm, @NonNull UserManager um,
55-
@NonNull ComponentName admin) {
59+
@NonNull LocationManager lm, @NonNull ComponentName admin) {
5660
mDevicePolicyManager = dpm;
5761
mUserManager = um;
62+
mLocationManager = lm;
5863
mAdminComponentName = admin;
5964

6065
Log.d(TAG, "constructor: admin=" + mAdminComponentName + ", dpm=" + dpm);
@@ -65,7 +70,8 @@ public static DevicePolicyManagerGatewayImpl forParentProfile(@NonNull Context c
6570
DevicePolicyManager dpm = context.getSystemService(DevicePolicyManager.class)
6671
.getParentProfileInstance(admin);
6772
UserManager um = context.getSystemService(UserManager.class);
68-
return new DevicePolicyManagerGatewayImpl(dpm, um, admin);
73+
LocationManager lm = context.getSystemService(LocationManager.class);
74+
return new DevicePolicyManagerGatewayImpl(dpm, um, lm, admin);
6975
}
7076

7177
@Override
@@ -598,6 +604,23 @@ public int getPermissionGrantState(String packageName, String permission) {
598604
return grantState;
599605
}
600606

607+
@Override
608+
public void setLocationEnabled(boolean enabled, Consumer<Void> onSuccess,
609+
Consumer<Exception> onError) {
610+
Log.d(TAG, "setLocationEnabled(" + enabled + ")");
611+
try {
612+
mDevicePolicyManager.setLocationEnabled(mAdminComponentName, enabled);
613+
onSuccess.accept(null);
614+
} catch (Exception e) {
615+
onError.accept(e);
616+
}
617+
}
618+
619+
@Override
620+
public boolean isLocationEnabled() {
621+
return mLocationManager.isLocationEnabled();
622+
}
623+
601624
@Override
602625
public String toString() {
603626
return "DevicePolicyManagerGatewayImpl[" + mAdminComponentName + "]";

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

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ final class ShellCommand {
9595
private static final String CMD_GET_APP_RESTRICTIONS = "get-app-restrictions";
9696
private static final String CMD_SET_PERMISSION_GRANT_STATE = "set-permission-grant-state";
9797
private static final String CMD_GET_PERMISSION_GRANT_STATE = "get-permission-grant-state";
98+
private static final String CMD_SET_LOCATION_ENABLED = "set-location-enabled";
99+
private static final String CMD_IS_LOCATION_ENABLED = "is-location-enabled";
98100

99101
private static final String ARG_FLAGS = "--flags";
100102

@@ -249,6 +251,12 @@ public void run() {
249251
case CMD_GET_PERMISSION_GRANT_STATE:
250252
execute(() -> getPermissionGrantState());
251253
break;
254+
case CMD_SET_LOCATION_ENABLED:
255+
execute(() -> setLocationEnabled());
256+
break;
257+
case CMD_IS_LOCATION_ENABLED:
258+
execute(() -> isLocationEnabled());
259+
break;
252260
default:
253261
mWriter.printf("Invalid command: %s\n\n", cmd);
254262
showUsage();
@@ -346,6 +354,10 @@ private void showUsage() {
346354
CMD_SET_PERMISSION_GRANT_STATE);
347355
mWriter.printf("\t%s <PKG> <PERMISSION> - get the grant state for the given permission / "
348356
+ "package\n", CMD_GET_PERMISSION_GRANT_STATE);
357+
mWriter.printf("\t%s <true|false> - set location enabled for the user\n",
358+
CMD_SET_LOCATION_ENABLED);
359+
mWriter.printf("\t%s - get whether location is enabled for the user\n",
360+
CMD_IS_LOCATION_ENABLED);
349361

350362
// Separator for S / pre-S commands - do NOT remove line to avoid cherry-pick conflicts
351363
}
@@ -791,6 +803,20 @@ private void getPermissionGrantState() {
791803
Util.grantStateToString(grantState));
792804
}
793805

806+
private void setLocationEnabled() {
807+
// TODO(b/171350084): check args
808+
boolean enabled = Boolean.parseBoolean(mArgs[1]);
809+
810+
mDevicePolicyManagerGateway.setLocationEnabled(enabled,
811+
(v) -> onSuccess("Set location enabled to %b", enabled),
812+
(e) -> onError(e, "Error setting location enabled to %b", enabled));
813+
}
814+
815+
private void isLocationEnabled() {
816+
boolean enabled = mDevicePolicyManagerGateway.isLocationEnabled();
817+
mWriter.printf("Location enabled: %b\n", enabled);
818+
}
819+
794820
private static String permittedToString(boolean permitted) {
795821
return permitted ? "PERMITTED" : "NOT PERMITTED";
796822
}

app/src/main/java/com/afwsamples/testdpc/policy/PolicyManagementFragment.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -451,6 +451,7 @@ public class PolicyManagementFragment extends BaseSearchablePolicyPreferenceFrag
451451
private UserManager mUserManager;
452452
private TelephonyManager mTelephonyManager;
453453
private AccountManager mAccountManager;
454+
private LocationManager mLocationManager;
454455

455456
private DpcPreference mInstallExistingPackagePreference;
456457

@@ -520,8 +521,9 @@ public void onCreate(Bundle savedInstanceState) {
520521
mDevicePolicyManager = (DevicePolicyManager) getActivity().getSystemService(
521522
Context.DEVICE_POLICY_SERVICE);
522523
mUserManager = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
524+
mLocationManager = getActivity().getSystemService(LocationManager.class);
523525
mDevicePolicyManagerGateway = new DevicePolicyManagerGatewayImpl(mDevicePolicyManager,
524-
mUserManager, mAdminComponentName);
526+
mUserManager, mLocationManager, mAdminComponentName);
525527
mTelephonyManager = (TelephonyManager) getActivity()
526528
.getSystemService(Context.TELEPHONY_SERVICE);
527529
mAccountManager = AccountManager.get(getActivity());
@@ -2440,8 +2442,7 @@ private void reloadLocationModeUi() {
24402442

24412443
@TargetApi(Util.R_VERSION_CODE)
24422444
private void reloadLocationEnabledUi() {
2443-
LocationManager locationManager = getActivity().getSystemService(LocationManager.class);
2444-
mSetLocationEnabledPreference.setChecked(locationManager.isLocationEnabled());
2445+
mSetLocationEnabledPreference.setChecked(mLocationManager.isLocationEnabled());
24452446
}
24462447

24472448
@TargetApi(Util.R_VERSION_CODE)

0 commit comments

Comments
 (0)