summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPhilip P. Moltmann <moltmann@google.com>2019-04-11 22:12:49 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2019-04-11 22:12:49 +0000
commit9d73bc5a6a6bb1db0b8e36434221dc8fcd1226bb (patch)
treef34b8a3b6e816e09e6c54f102e215089bf7c4e4d /src
parent56753937f1a8aa59a31eb0b8c186b94425e5649d (diff)
parentab8159eb74e9e02180a1843d4c15d95e964d6486 (diff)
downloadandroid_packages_apps_PackageInstaller-9d73bc5a6a6bb1db0b8e36434221dc8fcd1226bb.tar.gz
android_packages_apps_PackageInstaller-9d73bc5a6a6bb1db0b8e36434221dc8fcd1226bb.tar.bz2
android_packages_apps_PackageInstaller-9d73bc5a6a6bb1db0b8e36434221dc8fcd1226bb.zip
Merge "Always finish LocationAccessCheck jobs" into qt-dev
Diffstat (limited to 'src')
-rw-r--r--src/com/android/packageinstaller/permission/service/LocationAccessCheck.java28
1 files changed, 11 insertions, 17 deletions
diff --git a/src/com/android/packageinstaller/permission/service/LocationAccessCheck.java b/src/com/android/packageinstaller/permission/service/LocationAccessCheck.java
index 53a0da2c..6bfb2167 100644
--- a/src/com/android/packageinstaller/permission/service/LocationAccessCheck.java
+++ b/src/com/android/packageinstaller/permission/service/LocationAccessCheck.java
@@ -110,6 +110,8 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Random;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.TimeUnit;
import java.util.function.BooleanSupplier;
/**
@@ -130,6 +132,8 @@ public class LocationAccessCheck {
private static final String LOG_TAG = LocationAccessCheck.class.getSimpleName();
private static final boolean DEBUG = false;
+ private static final long GET_HISTORIAL_OPS_TIMEOUT_MILLIS = TimeUnit.SECONDS.toMillis(3);
+
/** Lock required for all methods called {@code ...Locked} */
private static final Object sLock = new Object();
@@ -334,6 +338,7 @@ public class LocationAccessCheck {
private void addLocationNotificationIfNeeded(@NonNull JobParameters params,
@NonNull LocationAccessCheckJobService service) {
if (!isLocationAccessCheckEnabled()) {
+ service.jobFinished(params, false);
return;
}
@@ -355,25 +360,14 @@ public class LocationAccessCheck {
Instant.EPOCH.toEpochMilli(), Long.MAX_VALUE)
.setOpNames(CollectionUtils.singletonOrEmpty(OPSTR_FINE_LOCATION))
.build();
- HistoricalOps[] ops = new HistoricalOps[1];
- mAppOpsManager.getHistoricalOps(request,
- mContext.getMainExecutor(), (h) -> {
- synchronized (ops) {
- ops[0] = h;
- ops.notifyAll();
- }
- }
- );
-
- synchronized (ops) {
- while (ops[0] == null) {
- ops.wait();
- }
- }
+ CompletableFuture<HistoricalOps> ops = new CompletableFuture<>();
+ mAppOpsManager.getHistoricalOps(request, mContext.getMainExecutor(), ops::complete);
- addLocationNotificationIfNeeded(ops[0]);
+ addLocationNotificationIfNeeded(
+ ops.get(GET_HISTORIAL_OPS_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS));
service.jobFinished(params, false);
- } catch (InterruptedException e) {
+ } catch (Exception e) {
+ Log.e(LOG_TAG, "Could not check for location access", e);
service.jobFinished(params, true);
} finally {
synchronized (sLock) {