diff options
author | Philip P. Moltmann <moltmann@google.com> | 2019-04-11 22:12:49 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2019-04-11 22:12:49 +0000 |
commit | 9d73bc5a6a6bb1db0b8e36434221dc8fcd1226bb (patch) | |
tree | f34b8a3b6e816e09e6c54f102e215089bf7c4e4d /src | |
parent | 56753937f1a8aa59a31eb0b8c186b94425e5649d (diff) | |
parent | ab8159eb74e9e02180a1843d4c15d95e964d6486 (diff) | |
download | android_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.java | 28 |
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) { |