OSDN Git Service

Minor UI tweakings
authorLifu Tang <lifu@google.com>
Thu, 22 Aug 2013 02:31:15 +0000 (19:31 -0700)
committerLifu Tang <lifu@google.com>
Thu, 22 Aug 2013 19:36:20 +0000 (12:36 -0700)
* 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

res/layout/location_list_no_item.xml [new file with mode: 0644]
res/values/strings.xml
res/xml/location_settings.xml
src/com/android/settings/location/LocationSettings.java
src/com/android/settings/location/RecentLocationApps.java
src/com/android/settings/location/SettingsInjector.java

diff --git a/res/layout/location_list_no_item.xml b/res/layout/location_list_no_item.xml
new file mode 100644 (file)
index 0000000..864b2e4
--- /dev/null
@@ -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>
+
index b49d929..71cedef 100644 (file)
     <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-->
index e646cab..83b80b1 100644 (file)
 
 <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" />
index 4970d37..4e54107 100644 (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()
index cbf8351..23e6dcf 100644 (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;
     }
 }
index 0b7c172..41cd869 100644 (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;
     }
 
     /**