Minor UI tweakings

* 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
This commit is contained in:
Lifu Tang
2013-08-21 19:31:15 -07:00
parent 25518c3b45
commit 08a4c33a40
6 changed files with 102 additions and 66 deletions

View File

@@ -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<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.
@@ -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()

View File

@@ -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<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();
@@ -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;
}
}

View File

@@ -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<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);
}
@@ -263,22 +260,21 @@ class SettingsInjector {
/**
* 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;
}
/**