diff --git a/res/layout/location_list_no_item.xml b/res/layout/location_list_no_item.xml
new file mode 100644
index 00000000000..864b2e4c307
--- /dev/null
+++ b/res/layout/location_list_no_item.xml
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/values/strings.xml b/res/values/strings.xml
index b49d9292019..71cedef9e75 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -2377,8 +2377,8 @@
Location off
Recent location requests
-
- No recent apps
+
+ No apps have requested location in the last 15 minutes.
Location services
diff --git a/res/xml/location_settings.xml b/res/xml/location_settings.xml
index e646cab3acb..83b80b1baee 100644
--- a/res/xml/location_settings.xml
+++ b/res/xml/location_settings.xml
@@ -16,10 +16,7 @@
-
-
diff --git a/src/com/android/settings/location/LocationSettings.java b/src/com/android/settings/location/LocationSettings.java
index 4970d37fa80..4e541074d43 100644
--- a/src/com/android/settings/location/LocationSettings.java
+++ b/src/com/android/settings/location/LocationSettings.java
@@ -52,9 +52,7 @@ public class LocationSettings extends LocationSettingsBase
private Switch mSwitch;
private boolean mValidListener;
- private PreferenceScreen mLocationMode;
- private PreferenceCategory mRecentLocationRequests;
- private PreferenceCategory mLocationServices;
+ private Preference mLocationMode;
private BatteryStatsHelper mStatsHelper;
@@ -125,7 +123,7 @@ public class LocationSettings extends LocationSettingsBase
addPreferencesFromResource(R.xml.location_settings);
root = getPreferenceScreen();
- mLocationMode = (PreferenceScreen) root.findPreference(KEY_LOCATION_MODE);
+ mLocationMode = root.findPreference(KEY_LOCATION_MODE);
mLocationMode.setOnPreferenceClickListener(
new Preference.OnPreferenceClickListener() {
@Override
@@ -140,25 +138,31 @@ public class LocationSettings extends LocationSettingsBase
final PreferenceManager preferenceManager = getPreferenceManager();
- mRecentLocationRequests =
+ PreferenceCategory categoryRecentLocationRequests =
(PreferenceCategory) root.findPreference(KEY_RECENT_LOCATION_REQUESTS);
RecentLocationApps recentApps = new RecentLocationApps(activity, mStatsHelper);
- List recentLocationRequests = recentApps.getAppList(preferenceManager);
+ List recentLocationRequests = recentApps.getAppList();
if (recentLocationRequests.size() > 0) {
- addPreferencesSorted(recentLocationRequests, mRecentLocationRequests);
+ addPreferencesSorted(recentLocationRequests, categoryRecentLocationRequests);
} else {
// If there's no item to display, add a "No recent apps" item.
- PreferenceScreen screen = preferenceManager.createPreferenceScreen(activity);
- screen.setTitle(R.string.location_no_recent_apps);
- screen.setSelectable(false);
- screen.setEnabled(false);
- mRecentLocationRequests.addPreference(screen);
+ Preference banner = new Preference(activity);
+ banner.setLayoutResource(R.layout.location_list_no_item);
+ banner.setTitle(R.string.location_no_recent_apps);
+ banner.setSelectable(false);
+ banner.setEnabled(false);
+ categoryRecentLocationRequests.addPreference(banner);
}
- mLocationServices = (PreferenceCategory) root.findPreference(KEY_LOCATION_SERVICES);
- List locationServices = SettingsInjector.getInjectedSettings(
- activity, preferenceManager);
- addPreferencesSorted(locationServices, mLocationServices);
+ PreferenceCategory categoryLocationServices =
+ (PreferenceCategory) root.findPreference(KEY_LOCATION_SERVICES);
+ List locationServices = SettingsInjector.getInjectedSettings(activity);
+ if (locationServices.size() > 0) {
+ addPreferencesSorted(locationServices, categoryLocationServices);
+ } else {
+ // If there's no item to display, remove the whole category.
+ root.removePreference(categoryLocationServices);
+ }
// Only show the master switch when we're not in multi-pane mode, and not being used as
// Setup Wizard.
@@ -206,7 +210,6 @@ public class LocationSettings extends LocationSettingsBase
boolean enabled = (mode != Settings.Secure.LOCATION_MODE_OFF);
mLocationMode.setEnabled(enabled);
- mLocationServices.setEnabled(enabled);
if (enabled != mSwitch.isChecked()) {
// set listener to null so that that code below doesn't trigger onCheckedChanged()
diff --git a/src/com/android/settings/location/RecentLocationApps.java b/src/com/android/settings/location/RecentLocationApps.java
index cbf8351dc60..23e6dcffd0d 100644
--- a/src/com/android/settings/location/RecentLocationApps.java
+++ b/src/com/android/settings/location/RecentLocationApps.java
@@ -24,8 +24,6 @@ import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceActivity;
-import android.preference.PreferenceManager;
-import android.preference.PreferenceScreen;
import android.util.Log;
import com.android.settings.R;
@@ -93,22 +91,21 @@ public class RecentLocationApps {
}
}
- private PreferenceScreen createRecentLocationEntry(
- PreferenceManager preferenceManager,
+ private Preference createRecentLocationEntry(
Drawable icon,
CharSequence label,
boolean isHighBattery,
Preference.OnPreferenceClickListener listener) {
- PreferenceScreen screen = preferenceManager.createPreferenceScreen(mActivity);
- screen.setIcon(icon);
- screen.setTitle(label);
+ Preference pref = new Preference(mActivity);
+ pref.setIcon(icon);
+ pref.setTitle(label);
if (isHighBattery) {
- screen.setSummary(R.string.location_high_battery_use);
+ pref.setSummary(R.string.location_high_battery_use);
} else {
- screen.setSummary(R.string.location_low_battery_use);
+ pref.setSummary(R.string.location_low_battery_use);
}
- screen.setOnPreferenceClickListener(listener);
- return screen;
+ pref.setOnPreferenceClickListener(listener);
+ return pref;
}
/**
@@ -140,7 +137,7 @@ public class RecentLocationApps {
* Fills a list of applications which queried location recently within
* specified time.
*/
- public List getAppList(PreferenceManager preferenceManager) {
+ public List getAppList() {
// Retrieve Uid-based battery blaming info and generate a package to BatterySipper HashMap
// for later faster looking up.
mStatsHelper.refreshStats();
@@ -169,9 +166,9 @@ public class RecentLocationApps {
long now = System.currentTimeMillis();
for (AppOpsManager.PackageOps ops : appOps) {
BatterySipperWrapper wrapper = sipperMap.get(ops.getUid());
- PreferenceScreen screen = getScreenFromOps(preferenceManager, now, ops, wrapper);
- if (screen != null) {
- prefs.add(screen);
+ Preference pref = getPreferenceFromOps(now, ops, wrapper);
+ if (pref != null) {
+ prefs.add(pref);
}
}
@@ -179,19 +176,17 @@ public class RecentLocationApps {
}
/**
- * Creates a PreferenceScreen entry for the given PackageOps.
+ * Creates a Preference entry for the given PackageOps.
*
* This method examines the time interval of the PackageOps first. If the PackageOps is older
* than the designated interval, this method ignores the PackageOps object and returns null.
*
* When the PackageOps is fresh enough, if the package has a corresponding battery blaming entry
- * in the Uid-based battery sipper list, this method returns a PreferenceScreen pointing to the
- * Uid battery blaming page. If the package doesn't have a battery sipper entry (typically
- * shouldn't happen), this method returns a PreferenceScreen pointing to the App Info page for
- * that package.
+ * in the Uid-based battery sipper list, this method returns a Preference pointing to the Uid
+ * battery blaming page. If the package doesn't have a battery sipper entry (typically shouldn't
+ * happen), this method returns a Preference pointing to the App Info page for that package.
*/
- private PreferenceScreen getScreenFromOps(
- PreferenceManager preferenceManager,
+ private Preference getPreferenceFromOps(
long now,
AppOpsManager.PackageOps ops,
BatterySipperWrapper wrapper) {
@@ -224,7 +219,7 @@ public class RecentLocationApps {
// The package is fresh enough, continue.
- PreferenceScreen screen = null;
+ Preference pref = null;
if (wrapper != null) {
// Contains sipper. Link to Battery Blaming page.
@@ -233,8 +228,7 @@ public class RecentLocationApps {
if (!wrapper.used()) {
BatterySipper sipper = wrapper.batterySipper();
sipper.loadNameAndIcon();
- screen = createRecentLocationEntry(
- preferenceManager,
+ pref = createRecentLocationEntry(
sipper.getIcon(),
sipper.getLabel(),
highBattery,
@@ -249,8 +243,7 @@ public class RecentLocationApps {
try {
ApplicationInfo appInfo = mPackageManager.getApplicationInfo(
packageName, PackageManager.GET_META_DATA);
- screen = createRecentLocationEntry(
- preferenceManager,
+ pref = createRecentLocationEntry(
mPackageManager.getApplicationIcon(appInfo),
mPackageManager.getApplicationLabel(appInfo),
highBattery,
@@ -260,6 +253,6 @@ public class RecentLocationApps {
}
}
- return screen;
+ return pref;
}
}
diff --git a/src/com/android/settings/location/SettingsInjector.java b/src/com/android/settings/location/SettingsInjector.java
index 0b7c172b299..41cd8694b59 100644
--- a/src/com/android/settings/location/SettingsInjector.java
+++ b/src/com/android/settings/location/SettingsInjector.java
@@ -31,8 +31,6 @@ import android.os.Handler;
import android.os.Message;
import android.os.Messenger;
import android.preference.Preference;
-import android.preference.PreferenceManager;
-import android.preference.PreferenceScreen;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
@@ -240,14 +238,13 @@ class SettingsInjector {
* TODO: extract InjectedLocationSettingGetter that returns an iterable over
* InjectedSetting objects, so that this class can focus on UI
*/
- public static List getInjectedSettings(Context context,
- PreferenceManager preferenceManager) {
+ public static List getInjectedSettings(Context context) {
Iterable settings = getSettings(context);
ArrayList prefs = new ArrayList();
StatusLoader loader = null;
for (InjectedSetting setting : settings) {
- Preference pref = addServiceSetting(context, prefs, setting, preferenceManager);
+ Preference pref = addServiceSetting(context, prefs, setting);
Intent intent = createUpdatingIntent(context, pref, setting, loader);
loader = new StatusLoader(context, intent, loader);
}
@@ -263,22 +260,21 @@ class SettingsInjector {
/**
* Adds an injected setting to the root with status "Loading...".
*/
- private static PreferenceScreen addServiceSetting(Context context,
- List prefs, InjectedSetting info, PreferenceManager preferenceManager) {
-
- PreferenceScreen screen = preferenceManager.createPreferenceScreen(context);
- screen.setTitle(info.title);
- screen.setSummary(R.string.location_loading_injected_setting);
+ private static Preference addServiceSetting(
+ Context context, List prefs, InjectedSetting info) {
+ Preference pref = new Preference(context);
+ pref.setTitle(info.title);
+ pref.setSummary(R.string.location_loading_injected_setting);
PackageManager pm = context.getPackageManager();
Drawable icon = pm.getDrawable(info.packageName, info.iconId, null);
- screen.setIcon(icon);
+ pref.setIcon(icon);
Intent settingIntent = new Intent();
settingIntent.setClassName(info.packageName, info.settingsActivity);
- screen.setIntent(settingIntent);
+ pref.setIntent(settingIntent);
- prefs.add(screen);
- return screen;
+ prefs.add(pref);
+ return pref;
}
/**