Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit efa8f581 authored by Jakub Pawlowski's avatar Jakub Pawlowski Committed by android-build-merger
Browse files

Merge "Cache results of isLocationEnabledForUser calls" am: 01cb772c am: c52ea719

am: 9633a877

Change-Id: Iab5cb0568074304f8d26b005d0d6209be839e2dd
parents a7cabb39 9633a877
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ LOCAL_JAVA_LIBRARIES := javax.obex telephony-common services.net
LOCAL_STATIC_JAVA_LIBRARIES := \
        com.android.vcard \
        bluetooth.mapsapi \
        guava \
        sap-api-java-static \
        services.net \
        libprotobuf-java-lite \
+26 −1
Original line number Diff line number Diff line
@@ -34,6 +34,10 @@ import android.os.UserHandle;
import android.os.UserManager;
import android.util.Log;

import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@@ -301,9 +305,30 @@ public final class Utils {
     * Checks whether location is off and must be on for us to perform some operation
     */
    public static boolean blockedByLocationOff(Context context, UserHandle userHandle) {
        return !context.getSystemService(LocationManager.class)
        if (mBlockedByLocationOffContext == null)
            mBlockedByLocationOffContext = context;

        try {
            return mBlockedByLocationOffCache.get(userHandle);
        } catch (java.util.concurrent.ExecutionException e) {
            Log.e(TAG, "blockedByLocationOff: " + e);
            return context.getSystemService(LocationManager.class)
                .isLocationEnabledForUser(userHandle);
        }
    }

   static Context mBlockedByLocationOffContext = null;
   // Cache location off for 10 users, cache is valid for 2 seconds.
   static LoadingCache<UserHandle, Boolean> mBlockedByLocationOffCache = CacheBuilder.newBuilder()
       .maximumSize(10)
       .expireAfterWrite(2, TimeUnit.SECONDS)
       .build(
           new CacheLoader<UserHandle, Boolean>() {
             public Boolean load(UserHandle userHandle) {
               return !mBlockedByLocationOffContext.getSystemService(LocationManager.class)
                .isLocationEnabledForUser(userHandle);
             }
           });

    /**
     * Checks that calling process has android.Manifest.permission.ACCESS_COARSE_LOCATION and