From 421a53900dbdfabb5ab7b6cf6da798ac64bbaa87 Mon Sep 17 00:00:00 2001 From: Amit Mahajan Date: Thu, 20 Nov 2014 11:42:19 -0800 Subject: [PATCH] Adding helper functions to retrieve settings that are stored per subId. Bug: 18392680 Change-Id: I360bc19c4501020afd9dfa1cfb7e66ce2fad9536 --- .../server/location/GpsLocationProvider.java | 5 +- .../android/telephony/TelephonyManager.java | 47 +++++++++++++++++++ 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/location/GpsLocationProvider.java b/services/core/java/com/android/server/location/GpsLocationProvider.java index 8c3c102144113..c753c4536eb84 100644 --- a/services/core/java/com/android/server/location/GpsLocationProvider.java +++ b/services/core/java/com/android/server/location/GpsLocationProvider.java @@ -787,8 +787,9 @@ public class GpsLocationProvider implements LocationProviderInterface { } if (info != null) { - boolean dataEnabled = Settings.Global.getInt(mContext.getContentResolver(), - Settings.Global.MOBILE_DATA, 1) == 1; + boolean dataEnabled = TelephonyManager.getIntWithSubId(mContext.getContentResolver(), + Settings.Global.MOBILE_DATA, SubscriptionManager.getDefaultSubId(), + 1) == 1; boolean networkAvailable = info.isAvailable() && dataEnabled; String defaultApn = getSelectedApn(); if (defaultApn == null) { diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index 7c03d42553f60..4585958c482de 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -19,8 +19,11 @@ package android.telephony; import android.annotation.SystemApi; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; +import android.content.ContentResolver; import android.content.Context; import android.content.Intent; +import android.provider.Settings; +import android.provider.Settings.SettingNotFoundException; import android.os.Bundle; import android.os.RemoteException; import android.os.ServiceManager; @@ -3521,4 +3524,48 @@ public class TelephonyManager { } return false; } + + /** + * This function retrieves value for setting "name+subId", and if that is not found + * retrieves value for setting "name", and if that is not found uses def as default + * + * @hide */ + public static int getIntWithSubId(ContentResolver cr, String name, int subId, int def) { + return Settings.Global.getInt(cr, name + subId, Settings.Global.getInt(cr, name, def)); + } + + /** + * This function retrieves value for setting "name+subId", and if that is not found + * retrieves value for setting "name", and if that is not found throws + * SettingNotFoundException + * + * @hide */ + public static int getIntWithSubId(ContentResolver cr, String name, int subId) + throws SettingNotFoundException { + try { + return Settings.Global.getInt(cr, name + subId); + } catch (SettingNotFoundException e) { + try { + int val = Settings.Global.getInt(cr, name); + /* We are now moving from 'setting' to 'setting+subId', and using the value stored + * for 'setting' as default. Reset the default (since it may have a user set + * value). */ + int default_val = val; + if (name.equals(Settings.Global.MOBILE_DATA)) { + default_val = "true".equalsIgnoreCase( + SystemProperties.get("ro.com.android.mobiledata", "true")) ? 1 : 0; + } + + if (default_val != val) { + Settings.Global.putInt(cr, name, default_val); + } + + return val; + } catch (SettingNotFoundException exc) { + throw new SettingNotFoundException(name); + } + } + } } + +