diff options
| author | 2017-11-10 15:07:04 +0000 | |
|---|---|---|
| committer | 2017-11-10 15:07:04 +0000 | |
| commit | a524e7d87db9ff37871984d60f30cf2649e439be (patch) | |
| tree | 89a98d7ae90c73074eb5d264f9b848f841e8610a | |
| parent | 41f1ef8c02f1545d287203b9e59554d05f57dfdd (diff) | |
| parent | 72f049e6efe2d6ebe7e2d30cb40a1ce60ad82fd4 (diff) | |
Merge "Send broadcast when location mode is about to change DO NOT MERGE"
| -rw-r--r-- | packages/SettingsLib/src/com/android/settingslib/Utils.java | 19 | ||||
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationControllerImpl.java | 7 | 
2 files changed, 24 insertions, 2 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/Utils.java b/packages/SettingsLib/src/com/android/settingslib/Utils.java index dee5a93d8eea..e8c48840466a 100644 --- a/packages/SettingsLib/src/com/android/settingslib/Utils.java +++ b/packages/SettingsLib/src/com/android/settingslib/Utils.java @@ -19,6 +19,7 @@ import android.graphics.drawable.LayerDrawable;  import android.net.ConnectivityManager;  import android.net.NetworkBadging;  import android.os.BatteryManager; +import android.os.UserHandle;  import android.os.UserManager;  import android.print.PrintManager;  import android.provider.Settings; @@ -30,6 +31,12 @@ import com.android.settingslib.drawable.UserIconDrawable;  import java.text.NumberFormat;  public class Utils { +    /** Broadcast intent action when the location mode is about to change. */ +    private static final String MODE_CHANGING_ACTION = +            "com.android.settings.location.MODE_CHANGING"; +    private static final String CURRENT_MODE_KEY = "CURRENT_MODE"; +    private static final String NEW_MODE_KEY = "NEW_MODE"; +      private static Signature[] sSystemSignature;      private static String sPermissionControllerPackageName;      private static String sServicesSystemSharedLibPackageName; @@ -43,6 +50,18 @@ public class Utils {            com.android.internal.R.drawable.ic_signal_wifi_badged_4_bars      }; +    public static boolean updateLocationMode(Context context, int oldMode, int newMode, +            int userId) { +        Intent intent = new Intent(MODE_CHANGING_ACTION); +        intent.putExtra(CURRENT_MODE_KEY, oldMode); +        intent.putExtra(NEW_MODE_KEY, newMode); +        intent.addFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND); +        context.sendBroadcastAsUser(intent, UserHandle.of(userId), +                android.Manifest.permission.WRITE_SECURE_SETTINGS); +        return Settings.Secure.putIntForUser(context.getContentResolver(), +                Settings.Secure.LOCATION_MODE, newMode, userId); +    } +      /**       * Return string resource that best describes combination of tethering       * options available on this device. diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationControllerImpl.java index 874f0d9d5b5f..6d6aa529c8e4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationControllerImpl.java @@ -39,6 +39,8 @@ import com.android.systemui.util.Utils;  import java.util.ArrayList;  import java.util.List; +import static com.android.settingslib.Utils.updateLocationMode; +  /**   * A controller to manage changes of location related states and update the views accordingly.   */ @@ -106,12 +108,13 @@ public class LocationControllerImpl extends BroadcastReceiver implements Locatio          final ContentResolver cr = mContext.getContentResolver();          // When enabling location, a user consent dialog will pop up, and the          // setting won't be fully enabled until the user accepts the agreement. +        int currentMode = Settings.Secure.getIntForUser(cr, Settings.Secure.LOCATION_MODE, +                Settings.Secure.LOCATION_MODE_OFF, currentUserId);          int mode = enabled                  ? Settings.Secure.LOCATION_MODE_PREVIOUS : Settings.Secure.LOCATION_MODE_OFF;          // QuickSettings always runs as the owner, so specifically set the settings          // for the current foreground user. -        return Settings.Secure -                .putIntForUser(cr, Settings.Secure.LOCATION_MODE, mode, currentUserId); +        return updateLocationMode(mContext, currentMode, mode, currentUserId);      }      /**  |