diff options
author | 2025-02-11 08:58:58 -0800 | |
---|---|---|
committer | 2025-02-11 08:58:58 -0800 | |
commit | 333d055e239ec1f00b2267bf60ee86e8e1d56a82 (patch) | |
tree | fb9041c8eb8ed4d4ca81cc12fc52fcac0024d018 | |
parent | c0cf20b44d2de8e6f071780a3c0e7a8b449567e6 (diff) | |
parent | 8764b2c45fe070898b5183cdbf3b5f014fe8d66a (diff) |
Merge "Revert "Removing reliance on system LocationProvider for LocationAccessCheckTests"" into main
2 files changed, 86 insertions, 69 deletions
diff --git a/tests/cts/permission/AppThatAccessesLocationOnCommand/src/android/permission/cts/appthataccesseslocation/AccessLocationOnCommand.java b/tests/cts/permission/AppThatAccessesLocationOnCommand/src/android/permission/cts/appthataccesseslocation/AccessLocationOnCommand.java index fae03d973..75f4a0ce5 100644 --- a/tests/cts/permission/AppThatAccessesLocationOnCommand/src/android/permission/cts/appthataccesseslocation/AccessLocationOnCommand.java +++ b/tests/cts/permission/AppThatAccessesLocationOnCommand/src/android/permission/cts/appthataccesseslocation/AccessLocationOnCommand.java @@ -16,6 +16,8 @@ package android.permission.cts.appthataccesseslocation; +import static android.location.Criteria.ACCURACY_FINE; + import android.app.Service; import android.content.Intent; import android.location.Criteria; @@ -25,83 +27,42 @@ import android.location.LocationManager; import android.os.Bundle; import android.os.IBinder; import android.os.Looper; -import android.os.SystemClock; - -import java.util.Timer; -import java.util.TimerTask; - -public class AccessLocationOnCommand extends Service implements LocationListener { - private static final String TEST_PROVIDER = "test_provider"; - private LocationManager mLocationManager; - private IAccessLocationOnCommand.Stub mBinder; - private final LocationListener mLocationListener = this; - private final Timer mTimer = new Timer(); - - private void updateMockLocation() { - final Location location = new Location(TEST_PROVIDER); - location.setLatitude(35.657f); - location.setLongitude(139.703f); - location.setAccuracy(1.0f); - location.setTime(System.currentTimeMillis()); - location.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos()); - mLocationManager.setTestProviderLocation(TEST_PROVIDER, location); - } +public class AccessLocationOnCommand extends Service { + private IAccessLocationOnCommand.Stub mBinder = new IAccessLocationOnCommand.Stub() { + public void accessLocation() { + Criteria crit = new Criteria(); + crit.setAccuracy(ACCURACY_FINE); + + AccessLocationOnCommand.this.getSystemService(LocationManager.class) + .requestSingleUpdate(crit, new LocationListener() { + @Override + public void onLocationChanged(Location location) { + } + + @Override + public void onStatusChanged(String provider, int status, + Bundle extras) { + } + + @Override + public void onProviderEnabled(String provider) { + } + + @Override + public void onProviderDisabled(String provider) { + } + }, Looper.getMainLooper()); + } + }; @Override public IBinder onBind(Intent intent) { - mLocationManager = getSystemService(LocationManager.class); - - mLocationManager.addTestProvider(TEST_PROVIDER, - /* requiresNetwork= */true, - /* requiresSatellite= */false, - /* requiresCell= */true, - /* hasMonetaryCost= */false, - /* supportsAltitude= */false, - /* supportsSpeed= */false, - /* supportsBearing= */false, - Criteria.POWER_HIGH, - Criteria.ACCURACY_FINE); - mLocationManager.setTestProviderEnabled(TEST_PROVIDER, true); - - mTimer.schedule(new TimerTask() { - @Override - public void run() { - updateMockLocation(); - } - }, 0, 1000); - - mBinder = new IAccessLocationOnCommand.Stub() { - public void accessLocation() { - mLocationManager.requestSingleUpdate( - TEST_PROVIDER, mLocationListener, Looper.getMainLooper()); - } - }; return mBinder; } @Override public boolean onUnbind(Intent intent) { - mTimer.cancel(); - mLocationManager.removeTestProvider(TEST_PROVIDER); return true; } - - @Override - public void onLocationChanged(Location location) { - } - - @Override - public void onStatusChanged(String provider, int status, - Bundle extras) { - } - - @Override - public void onProviderEnabled(String provider) { - } - - @Override - public void onProviderDisabled(String provider) { - } - } diff --git a/tests/cts/permission/src/android/permission/cts/LocationAccessCheckTest.java b/tests/cts/permission/src/android/permission/cts/LocationAccessCheckTest.java index 799a43fe3..024a89f2e 100644 --- a/tests/cts/permission/src/android/permission/cts/LocationAccessCheckTest.java +++ b/tests/cts/permission/src/android/permission/cts/LocationAccessCheckTest.java @@ -22,6 +22,7 @@ import static android.app.AppOpsManager.OPSTR_FINE_LOCATION; import static android.app.AppOpsManager.OP_FLAGS_ALL_TRUSTED; import static android.content.Context.BIND_AUTO_CREATE; import static android.content.Context.BIND_NOT_FOREGROUND; +import static android.location.Criteria.ACCURACY_FINE; import static android.os.Process.myUserHandle; import static android.provider.Settings.Secure.LOCATION_ACCESS_CHECK_DELAY_MILLIS; import static android.provider.Settings.Secure.LOCATION_ACCESS_CHECK_INTERVAL_MILLIS; @@ -37,6 +38,8 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assume.assumeFalse; import static org.junit.Assume.assumeTrue; +import static java.util.concurrent.TimeUnit.MILLISECONDS; + import android.app.ActivityManager; import android.app.ActivityOptions; import android.app.AppOpsManager; @@ -48,9 +51,14 @@ import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.content.pm.PackageManager; +import android.location.Criteria; +import android.location.Location; +import android.location.LocationListener; import android.location.LocationManager; import android.os.Build; +import android.os.Bundle; import android.os.IBinder; +import android.os.Looper; import android.os.Process; import android.permission.cts.appthataccesseslocation.IAccessLocationOnCommand; import android.platform.test.annotations.AppModeFull; @@ -83,6 +91,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import java.util.List; +import java.util.concurrent.CountDownLatch; /** * Tests the {@code LocationAccessCheck} in permission controller. @@ -135,6 +144,13 @@ public class LocationAccessCheckTest { "com.android.permissioncontroller.permission.service" + ".LocationAccessCheck$SetupPeriodicBackgroundLocationAccessCheck"; + + /** + * The result of {@link #assumeCanGetFineLocation()}, so we don't have to run it over and over + * again. + */ + private static Boolean sCanAccessFineLocation = null; + private static ServiceConnection sConnection; private static IAccessLocationOnCommand sLocationAccessor; @@ -395,7 +411,6 @@ public class LocationAccessCheckTest { assertTrue(output.contains("Success")); // Wait for user sensitive to be updated, which is checked by LocationAccessCheck. Thread.sleep(5000); - runShellCommand("cmd appops set " + TEST_APP_PKG + " android:mock_location allow"); } public static void uninstallTestApp() { @@ -464,6 +479,7 @@ public class LocationAccessCheckTest { wakeUpAndDismissKeyguard(); bindService(); resetPermissionControllerBeforeEachTest(); + assumeCanGetFineLocation(); } /** @@ -486,6 +502,46 @@ public class LocationAccessCheckTest { } /** + * Make sure fine location can be accessed at all. + */ + public void assumeCanGetFineLocation() { + if (sCanAccessFineLocation == null) { + Criteria crit = new Criteria(); + crit.setAccuracy(ACCURACY_FINE); + + CountDownLatch locationCounter = new CountDownLatch(1); + sContext.getSystemService(LocationManager.class).requestSingleUpdate(crit, + new LocationListener() { + @Override + public void onLocationChanged(Location location) { + locationCounter.countDown(); + } + + @Override + public void onStatusChanged(String provider, int status, Bundle extras) { + } + + @Override + public void onProviderEnabled(String provider) { + } + + @Override + public void onProviderDisabled(String provider) { + } + }, Looper.getMainLooper()); + + + try { + sCanAccessFineLocation = locationCounter.await(LOCATION_ACCESS_TIMEOUT_MILLIS, + MILLISECONDS); + } catch (InterruptedException ignored) { + } + } + + assumeTrue(sCanAccessFineLocation); + } + + /** * Reset the permission controllers state. */ private static void resetPermissionController() throws Throwable { |