OSDN Git Service

Use custom drawable for Battery saver condition icon.
authorFan Zhang <zhfan@google.com>
Mon, 26 Mar 2018 22:31:10 +0000 (15:31 -0700)
committerFan Zhang <zhfan@google.com>
Tue, 27 Mar 2018 00:50:27 +0000 (17:50 -0700)
- Updated condition interface to use Drawable instead of Icon for icons.
- Converted all conditions to return drawable instead of Icon.
- Created a BatterySaverDrawable to draw a static battery saver icon.

Change-Id: Ie964f3439009c7658603a8ff352a05e964a0a795
Fixes: 76168403
Test: robotests

15 files changed:
src/com/android/settings/dashboard/DashboardAdapter.java
src/com/android/settings/dashboard/DashboardData.java
src/com/android/settings/dashboard/conditional/AirplaneModeCondition.java
src/com/android/settings/dashboard/conditional/BackgroundDataCondition.java
src/com/android/settings/dashboard/conditional/BatterySaverCondition.java
src/com/android/settings/dashboard/conditional/CellularDataCondition.java
src/com/android/settings/dashboard/conditional/Condition.java
src/com/android/settings/dashboard/conditional/ConditionAdapter.java
src/com/android/settings/dashboard/conditional/DndCondition.java
src/com/android/settings/dashboard/conditional/HotspotCondition.java
src/com/android/settings/dashboard/conditional/NightDisplayCondition.java
src/com/android/settings/dashboard/conditional/WorkModeCondition.java
src/com/android/settings/datausage/DataUsageSummary.java
src/com/android/settings/fuelgauge/BatterySaverDrawable.java [new file with mode: 0644]
tests/robotests/src/com/android/settings/dashboard/conditional/ConditionTest.java

index 879a4b8..937e6db 100644 (file)
@@ -18,7 +18,6 @@ package com.android.settings.dashboard;
 import android.app.Activity;
 import android.content.Context;
 import android.graphics.drawable.Drawable;
-import android.graphics.drawable.Icon;
 import android.os.Bundle;
 import android.service.settings.suggestions.Suggestion;
 import android.support.annotation.VisibleForTesting;
@@ -262,7 +261,7 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
 
     @VisibleForTesting
     void onBindConditionHeader(final ConditionHeaderHolder holder, ConditionHeaderData data) {
-        holder.icon.setImageIcon(data.conditionIcons.get(0));
+        holder.icon.setImageDrawable(data.conditionIcons.get(0));
         if (data.conditionCount == 1) {
             holder.title.setText(data.title);
             holder.summary.setText(null);
@@ -338,7 +337,7 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
         outState.putBoolean(STATE_CONDITION_EXPANDED, mDashboardData.isConditionExpanded());
     }
 
-    private void updateConditionIcons(List<Icon> icons, ViewGroup parent) {
+    private void updateConditionIcons(List<Drawable> icons, ViewGroup parent) {
         if (icons == null || icons.size() < 2) {
             parent.setVisibility(View.INVISIBLE);
             return;
@@ -348,7 +347,7 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
         for (int i = 1, size = icons.size(); i < size; i++) {
             ImageView icon = (ImageView) inflater.inflate(
                     R.layout.condition_header_icon, parent, false);
-            icon.setImageIcon(icons.get(i));
+            icon.setImageDrawable(icons.get(i));
             parent.addView(icon);
         }
         parent.setVisibility(View.VISIBLE);
index 113caba..b180dd7 100644 (file)
@@ -16,7 +16,7 @@
 package com.android.settings.dashboard;
 
 import android.annotation.IntDef;
-import android.graphics.drawable.Icon;
+import android.graphics.drawable.Drawable;
 import android.service.settings.suggestions.Suggestion;
 import android.support.annotation.VisibleForTesting;
 import android.support.v7.util.DiffUtil;
@@ -432,7 +432,7 @@ public class DashboardData {
      * also be used to check the diff in DiffUtil.Callback
      */
     public static class ConditionHeaderData {
-        public final List<Icon> conditionIcons;
+        public final List<Drawable> conditionIcons;
         public final CharSequence title;
         public final int conditionCount;
 
index c6002bd..448510f 100644 (file)
@@ -19,6 +19,7 @@ import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.graphics.drawable.Drawable;
 import android.graphics.drawable.Icon;
 import android.net.ConnectivityManager;
 import android.provider.Settings;
@@ -58,8 +59,8 @@ public class AirplaneModeCondition extends Condition {
     }
 
     @Override
-    public Icon getIcon() {
-        return Icon.createWithResource(mManager.getContext(), R.drawable.ic_airplane);
+    public Drawable getIcon() {
+        return mManager.getContext().getDrawable(R.drawable.ic_airplane);
     }
 
     @Override
index 34172c2..a7e160f 100644 (file)
@@ -16,7 +16,7 @@
 package com.android.settings.dashboard.conditional;
 
 import android.content.Intent;
-import android.graphics.drawable.Icon;
+import android.graphics.drawable.Drawable;
 import android.net.NetworkPolicyManager;
 import android.util.FeatureFlagUtils;
 
@@ -37,8 +37,8 @@ public class BackgroundDataCondition extends Condition {
     }
 
     @Override
-    public Icon getIcon() {
-        return Icon.createWithResource(mManager.getContext(), R.drawable.ic_data_saver);
+    public Drawable getIcon() {
+        return mManager.getContext().getDrawable(R.drawable.ic_data_saver);
     }
 
     @Override
@@ -53,7 +53,7 @@ public class BackgroundDataCondition extends Condition {
 
     @Override
     public CharSequence[] getActions() {
-        return new CharSequence[] { mManager.getContext().getString(R.string.condition_turn_off) };
+        return new CharSequence[] {mManager.getContext().getString(R.string.condition_turn_off)};
     }
 
     @Override
index d113578..f1962ef 100644 (file)
 package com.android.settings.dashboard.conditional;
 
 import android.content.Intent;
-import android.graphics.drawable.Icon;
+import android.graphics.drawable.Drawable;
 import android.os.PowerManager;
 
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.core.SubSettingLauncher;
+import com.android.settings.fuelgauge.BatterySaverDrawable;
 import com.android.settings.fuelgauge.batterysaver.BatterySaverSettings;
 import com.android.settingslib.fuelgauge.BatterySaverUtils;
 
@@ -37,8 +38,8 @@ public class BatterySaverCondition extends Condition {
     }
 
     @Override
-    public Icon getIcon() {
-        return Icon.createWithResource(mManager.getContext(), R.drawable.ic_settings_battery);
+    public Drawable getIcon() {
+        return new BatterySaverDrawable(mManager.getContext(), 0);
     }
 
     @Override
@@ -53,7 +54,7 @@ public class BatterySaverCondition extends Condition {
 
     @Override
     public CharSequence[] getActions() {
-        return new CharSequence[] { mManager.getContext().getString(R.string.condition_turn_off) };
+        return new CharSequence[] {mManager.getContext().getString(R.string.condition_turn_off)};
     }
 
     @Override
index 112248c..bc0cbd5 100644 (file)
@@ -14,9 +14,10 @@ import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.graphics.drawable.Icon;
+import android.graphics.drawable.Drawable;
 import android.net.ConnectivityManager;
 import android.telephony.TelephonyManager;
+
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.internal.telephony.TelephonyIntents;
 import com.android.settings.R;
@@ -58,8 +59,8 @@ public class CellularDataCondition extends Condition {
     }
 
     @Override
-    public Icon getIcon() {
-        return Icon.createWithResource(mManager.getContext(), R.drawable.ic_cellular_off);
+    public Drawable getIcon() {
+        return mManager.getContext().getDrawable(R.drawable.ic_cellular_off);
     }
 
     @Override
index d66440e..f2905b9 100644 (file)
@@ -19,10 +19,10 @@ package com.android.settings.dashboard.conditional;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.IntentFilter;
-import android.graphics.drawable.Icon;
+import android.graphics.drawable.Drawable;
 import android.os.PersistableBundle;
-
 import android.support.annotation.VisibleForTesting;
+
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
@@ -151,7 +151,7 @@ public abstract class Condition {
     public abstract int getMetricsConstant();
 
     // UI.
-    public abstract Icon getIcon();
+    public abstract Drawable getIcon();
     public abstract CharSequence getTitle();
     public abstract CharSequence getSummary();
     public abstract CharSequence[] getActions();
index a540b3f..a656cc7 100644 (file)
@@ -50,8 +50,8 @@ public class ConditionAdapter extends RecyclerView.Adapter<DashboardItemHolder>
             //TODO: get rid of setTag/getTag
             Condition condition = (Condition) v.getTag();
             mMetricsFeatureProvider.action(mContext,
-                MetricsEvent.ACTION_SETTINGS_CONDITION_CLICK,
-                condition.getMetricsConstant());
+                    MetricsEvent.ACTION_SETTINGS_CONDITION_CLICK,
+                    condition.getMetricsConstant());
             condition.onPrimaryClick();
         }
     };
@@ -108,7 +108,7 @@ public class ConditionAdapter extends RecyclerView.Adapter<DashboardItemHolder>
     @Override
     public void onBindViewHolder(DashboardItemHolder holder, int position) {
         bindViews(mConditions.get(position), holder,
-            position == mConditions.size() - 1, mConditionClickListener);
+                position == mConditions.size() - 1, mConditionClickListener);
     }
 
     @Override
@@ -145,7 +145,7 @@ public class ConditionAdapter extends RecyclerView.Adapter<DashboardItemHolder>
         View card = view.itemView.findViewById(R.id.content);
         card.setTag(condition);
         card.setOnClickListener(onClickListener);
-        view.icon.setImageIcon(condition.getIcon());
+        view.icon.setImageDrawable(condition.getIcon());
         view.title.setText(condition.getTitle());
 
         CharSequence[] actions = condition.getActions();
index 673dccc..3112d48 100644 (file)
@@ -20,7 +20,7 @@ import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.graphics.drawable.Icon;
+import android.graphics.drawable.Drawable;
 import android.os.PersistableBundle;
 import android.provider.Settings;
 import android.provider.Settings.Global;
@@ -81,8 +81,8 @@ public class DndCondition extends Condition {
     }
 
     @Override
-    public Icon getIcon() {
-        return Icon.createWithResource(mManager.getContext(), R.drawable.ic_zen);
+    public Drawable getIcon() {
+        return mManager.getContext().getDrawable(R.drawable.ic_zen);
     }
 
     @Override
index c62b0a4..53e0c07 100644 (file)
@@ -19,7 +19,7 @@ import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.graphics.drawable.Icon;
+import android.graphics.drawable.Drawable;
 import android.net.ConnectivityManager;
 import android.net.wifi.WifiConfiguration;
 import android.net.wifi.WifiManager;
@@ -64,8 +64,8 @@ public class HotspotCondition extends Condition {
     }
 
     @Override
-    public Icon getIcon() {
-        return Icon.createWithResource(mManager.getContext(), R.drawable.ic_hotspot);
+    public Drawable getIcon() {
+        return mManager.getContext().getDrawable(R.drawable.ic_hotspot);
     }
 
     private String getSsid() {
index 9cb8605..78278b5 100644 (file)
@@ -17,7 +17,7 @@
 package com.android.settings.dashboard.conditional;
 
 import android.content.Intent;
-import android.graphics.drawable.Icon;
+import android.graphics.drawable.Drawable;
 
 import com.android.internal.app.ColorDisplayController;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
@@ -42,8 +42,8 @@ public final class NightDisplayCondition extends Condition
     }
 
     @Override
-    public Icon getIcon() {
-        return Icon.createWithResource(mManager.getContext(), R.drawable.ic_settings_night_display);
+    public Drawable getIcon() {
+        return mManager.getContext().getDrawable(R.drawable.ic_settings_night_display);
     }
 
     @Override
@@ -58,7 +58,7 @@ public final class NightDisplayCondition extends Condition
 
     @Override
     public CharSequence[] getActions() {
-        return new CharSequence[] { mManager.getContext().getString(R.string.condition_turn_off) };
+        return new CharSequence[] {mManager.getContext().getString(R.string.condition_turn_off)};
     }
 
     @Override
index cb1b60a..941d5b0 100644 (file)
@@ -19,7 +19,7 @@ package com.android.settings.dashboard.conditional;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.UserInfo;
-import android.graphics.drawable.Icon;
+import android.graphics.drawable.Drawable;
 import android.os.UserHandle;
 import android.os.UserManager;
 
@@ -60,9 +60,8 @@ public class WorkModeCondition extends Condition {
     }
 
     @Override
-    public Icon getIcon() {
-        return Icon.createWithResource(mManager.getContext(),
-                R.drawable.ic_signal_workmode_enable);
+    public Drawable getIcon() {
+        return mManager.getContext().getDrawable(R.drawable.ic_signal_workmode_enable);
     }
 
     @Override
index 25ab330..ccfcff1 100644 (file)
@@ -20,7 +20,6 @@ import android.content.Context;
 import android.content.Intent;
 import android.net.NetworkTemplate;
 import android.os.Bundle;
-import android.os.UserManager;
 import android.provider.SearchIndexableResource;
 import android.support.annotation.VisibleForTesting;
 import android.support.v7.preference.Preference;
@@ -35,21 +34,16 @@ import android.text.SpannableString;
 import android.text.TextUtils;
 import android.text.format.Formatter;
 import android.text.style.RelativeSizeSpan;
-import android.view.Menu;
-import android.view.MenuInflater;
 import android.view.MenuItem;
 
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
-import com.android.settings.SettingsActivity;
 import com.android.settings.Utils;
 import com.android.settings.dashboard.SummaryLoader;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.search.Indexable;
-import com.android.settings.widget.EntityHeaderController;
 import com.android.settingslib.NetworkPolicyEditor;
 import com.android.settingslib.core.AbstractPreferenceController;
-import com.android.settingslib.core.lifecycle.Lifecycle;
 import com.android.settingslib.net.DataUsageController;
 
 import java.util.ArrayList;
diff --git a/src/com/android/settings/fuelgauge/BatterySaverDrawable.java b/src/com/android/settings/fuelgauge/BatterySaverDrawable.java
new file mode 100644 (file)
index 0000000..0d3008a
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+package com.android.settings.fuelgauge;
+
+import android.content.Context;
+import android.graphics.PorterDuff;
+import android.graphics.PorterDuffColorFilter;
+
+import com.android.settingslib.Utils;
+import com.android.settingslib.graph.BatteryMeterDrawableBase;
+
+/**
+ * Drawable that shows a static battery saver icon - a full battery symbol and a plus sign.
+ */
+public class BatterySaverDrawable extends BatteryMeterDrawableBase {
+
+    private static final int MAX_BATTERY = 100;
+
+    public BatterySaverDrawable(Context context, int frameColor) {
+        super(context, frameColor);
+        // Show as full so it's always uniform color
+        setBatteryLevel(MAX_BATTERY);
+        setPowerSave(true);
+        setCharging(false);
+        setPowerSaveAsColorError(false);
+        final int tintColor = Utils.getColorAttr(context, android.R.attr.colorAccent);
+        setColorFilter(new PorterDuffColorFilter(tintColor, PorterDuff.Mode.SRC_IN));
+    }
+}
\ No newline at end of file
index 0333ae0..6d56731 100644 (file)
@@ -27,7 +27,7 @@ import static org.mockito.Mockito.when;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.IntentFilter;
-import android.graphics.drawable.Icon;
+import android.graphics.drawable.Drawable;
 
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
@@ -120,7 +120,7 @@ public class ConditionTest {
         }
 
         @Override
-        public Icon getIcon() {
+        public Drawable getIcon() {
             return null;
         }