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:
47
res/layout/location_list_no_item.xml
Normal file
47
res/layout/location_list_no_item.xml
Normal file
@@ -0,0 +1,47 @@
|
||||
<?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>
|
||||
|
@@ -2377,8 +2377,8 @@
|
||||
<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-->
|
||||
|
@@ -16,10 +16,7 @@
|
||||
|
||||
<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" />
|
||||
|
@@ -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()
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user