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

Commit 01cb772c authored by Jakub Pawlowski's avatar Jakub Pawlowski Committed by Gerrit Code Review
Browse files

Merge "Cache results of isLocationEnabledForUser calls"

parents 77dfa43f a571342e
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -22,6 +22,7 @@ LOCAL_JAVA_LIBRARIES := javax.obex telephony-common services.net
LOCAL_STATIC_JAVA_LIBRARIES := \
LOCAL_STATIC_JAVA_LIBRARIES := \
        com.android.vcard \
        com.android.vcard \
        bluetooth.mapsapi \
        bluetooth.mapsapi \
        guava \
        sap-api-java-static \
        sap-api-java-static \
        services.net \
        services.net \
        libprotobuf-java-lite \
        libprotobuf-java-lite \
+26 −1
Original line number Original line Diff line number Diff line
@@ -34,6 +34,10 @@ import android.os.UserHandle;
import android.os.UserManager;
import android.os.UserManager;
import android.util.Log;
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.IOException;
import java.io.InputStream;
import java.io.InputStream;
import java.io.OutputStream;
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
     * Checks whether location is off and must be on for us to perform some operation
     */
     */
    public static boolean blockedByLocationOff(Context context, UserHandle userHandle) {
    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);
                .isLocationEnabledForUser(userHandle);
             }
             }
           });


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