* Changed PreferenceScreen to Preference.
* Adjusted the "No recent app" message layout.
* No "Location services" category when empty.
* Removed "Under Construction" finally, hooray!
Change-Id: I83fd1d7a1b0235ad21b3a5c54542e937b60b3940
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!-- text that appears when the recent app list is empty -->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="?android:attr/listPreferredItemHeight"
+ android:gravity="center_vertical"
+ android:paddingEnd="?android:attr/scrollbarSize"
+ android:background="?android:attr/selectableItemBackground" >
+
+ <RelativeLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_marginStart="15dip"
+ android:layout_marginEnd="6dip"
+ android:layout_marginTop="6dip"
+ android:layout_marginBottom="6dip"
+ android:layout_weight="1">
+
+ <TextView android:id="@+android:id/title"
+ android:gravity="center"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:singleLine="true"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:ellipsize="marquee"
+ android:fadingEdge="horizontal" />
+
+ </RelativeLayout>
+
+</LinearLayout>
+
<string name="location_mode_location_off_title">Location off</string>
<!-- [CHAR LIMIT=30] Location settings screen, sub category for recent location requests -->
<string name="location_category_recent_location_requests">Recent location requests</string>
- <!-- [CHAR LIMIT=30] Location settings screen, displayed when there's no recent app accessing location -->
- <string name="location_no_recent_apps">No recent apps</string>
+ <!-- Location settings screen, displayed when there's no recent app accessing location -->
+ <string name="location_no_recent_apps">No apps have requested location in the last 15 minutes.</string>
<!-- [CHAR LIMIT=30] Location settings screen, sub category for location services -->
<string name="location_category_location_services">Location services</string>
<!-- [CHAR LIMIT=30] Location settings screen, recent location requests high battery use-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/location_settings_title">
- <PreferenceScreen
- android:title="Under Construction"
- android:summary="This page is under construction and everything here is expected to be broken for a while. Keep calm and carry on!" />
- <PreferenceScreen
+ <Preference
android:key="location_mode"
android:title="@string/location_mode_title"
android:summary="@string/location_mode_location_off_title" />
private Switch mSwitch;
private boolean mValidListener;
- private PreferenceScreen mLocationMode;
- private PreferenceCategory mRecentLocationRequests;
- private PreferenceCategory mLocationServices;
+ private Preference mLocationMode;
private BatteryStatsHelper mStatsHelper;
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
final PreferenceManager preferenceManager = getPreferenceManager();
- mRecentLocationRequests =
+ PreferenceCategory categoryRecentLocationRequests =
(PreferenceCategory) root.findPreference(KEY_RECENT_LOCATION_REQUESTS);
RecentLocationApps recentApps = new RecentLocationApps(activity, mStatsHelper);
- List<Preference> recentLocationRequests = recentApps.getAppList(preferenceManager);
+ List<Preference> 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<Preference> locationServices = SettingsInjector.getInjectedSettings(
- activity, preferenceManager);
- addPreferencesSorted(locationServices, mLocationServices);
+ PreferenceCategory categoryLocationServices =
+ (PreferenceCategory) root.findPreference(KEY_LOCATION_SERVICES);
+ List<Preference> 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.
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()
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;
}
}
- 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;
}
/**
* Fills a list of applications which queried location recently within
* specified time.
*/
- public List<Preference> getAppList(PreferenceManager preferenceManager) {
+ public List<Preference> getAppList() {
// Retrieve Uid-based battery blaming info and generate a package to BatterySipper HashMap
// for later faster looking up.
mStatsHelper.refreshStats();
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);
}
}
}
/**
- * 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) {
// The package is fresh enough, continue.
- PreferenceScreen screen = null;
+ Preference pref = null;
if (wrapper != null) {
// Contains sipper. Link to Battery Blaming page.
if (!wrapper.used()) {
BatterySipper sipper = wrapper.batterySipper();
sipper.loadNameAndIcon();
- screen = createRecentLocationEntry(
- preferenceManager,
+ pref = createRecentLocationEntry(
sipper.getIcon(),
sipper.getLabel(),
highBattery,
try {
ApplicationInfo appInfo = mPackageManager.getApplicationInfo(
packageName, PackageManager.GET_META_DATA);
- screen = createRecentLocationEntry(
- preferenceManager,
+ pref = createRecentLocationEntry(
mPackageManager.getApplicationIcon(appInfo),
mPackageManager.getApplicationLabel(appInfo),
highBattery,
}
}
- return screen;
+ return pref;
}
}
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;
* TODO: extract InjectedLocationSettingGetter that returns an iterable over
* InjectedSetting objects, so that this class can focus on UI
*/
- public static List<Preference> getInjectedSettings(Context context,
- PreferenceManager preferenceManager) {
+ public static List<Preference> getInjectedSettings(Context context) {
Iterable<InjectedSetting> settings = getSettings(context);
ArrayList<Preference> prefs = new ArrayList<Preference>();
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);
}
/**
* Adds an injected setting to the root with status "Loading...".
*/
- private static PreferenceScreen addServiceSetting(Context context,
- List<Preference> 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<Preference> 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;
}
/**