summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/cts/permission/AppThatAccessesLocationOnCommand/src/android/permission/cts/appthataccesseslocation/AccessLocationOnCommand.java97
-rw-r--r--tests/cts/permission/src/android/permission/cts/LocationAccessCheckTest.java58
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 {