From f22059f21fb441f11cd66e030ac48d006174bb6d Mon Sep 17 00:00:00 2001 From: Jeffrey Carlyle Date: Wed, 27 May 2020 09:28:17 -0700 Subject: [PATCH] Add BatteryStatusFeatureProvider This allows the battery header status line to be overridden. Bug: 150239363 Test: implemented provider and changed status line text Signed-off-by: Jeffrey Carlyle Change-Id: I05bedbee641f087de5ee1b25a00724ce2de51f87 Merged-In: I05bedbee641f087de5ee1b25a00724ce2de51f87 --- .../BatteryHeaderPreferenceController.java | 22 +++++++++-- .../BatteryStatusFeatureProvider.java | 29 +++++++++++++++ .../BatteryStatusFeatureProviderImpl.java | 37 +++++++++++++++++++ .../settings/overlay/FeatureFactory.java | 7 ++++ .../settings/overlay/FeatureFactoryImpl.java | 12 ++++++ .../testutils/FakeFeatureFactory.java | 8 ++++ 6 files changed, 111 insertions(+), 4 deletions(-) create mode 100644 src/com/android/settings/fuelgauge/BatteryStatusFeatureProvider.java create mode 100644 src/com/android/settings/fuelgauge/BatteryStatusFeatureProviderImpl.java diff --git a/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceController.java index bfa43d1d3dd..468d8c52a4d 100644 --- a/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceController.java +++ b/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceController.java @@ -34,6 +34,7 @@ import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.core.BasePreferenceController; import com.android.settings.core.PreferenceControllerMixin; +import com.android.settings.overlay.FeatureFactory; import com.android.settings.widget.EntityHeaderController; import com.android.settingslib.Utils; import com.android.settingslib.core.lifecycle.Lifecycle; @@ -49,6 +50,8 @@ public class BatteryHeaderPreferenceController extends BasePreferenceController @VisibleForTesting static final String KEY_BATTERY_HEADER = "battery_header"; + @VisibleForTesting + BatteryStatusFeatureProvider mBatteryStatusFeatureProvider; @VisibleForTesting BatteryMeterView mBatteryMeterView; @VisibleForTesting @@ -66,6 +69,8 @@ public class BatteryHeaderPreferenceController extends BasePreferenceController public BatteryHeaderPreferenceController(Context context, String key) { super(context, key); mPowerManager = context.getSystemService(PowerManager.class); + mBatteryStatusFeatureProvider = FeatureFactory.getFactory(context) + .getBatteryStatusFeatureProvider(context); } public void setActivity(Activity activity) { @@ -107,10 +112,12 @@ public class BatteryHeaderPreferenceController extends BasePreferenceController public void updateHeaderPreference(BatteryInfo info) { mBatteryPercentText.setText(formatBatteryPercentageText(info.batteryLevel)); - if (info.remainingLabel == null) { - mSummary1.setText(info.statusLabel); - } else { - mSummary1.setText(info.remainingLabel); + if (!mBatteryStatusFeatureProvider.triggerBatteryStatusUpdate(this, info)) { + if (info.remainingLabel == null) { + mSummary1.setText(info.statusLabel); + } else { + mSummary1.setText(info.remainingLabel); + } } mBatteryMeterView.setBatteryLevel(info.batteryLevel); @@ -118,6 +125,13 @@ public class BatteryHeaderPreferenceController extends BasePreferenceController mBatteryMeterView.setPowerSave(mPowerManager.isPowerSaveMode()); } + /** + * Callback which receives text for the summary line. + */ + public void updateBatteryStatus(String statusLabel) { + mSummary1.setText(statusLabel); + } + public void quickUpdateHeaderPreference() { Intent batteryBroadcast = mContext.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); diff --git a/src/com/android/settings/fuelgauge/BatteryStatusFeatureProvider.java b/src/com/android/settings/fuelgauge/BatteryStatusFeatureProvider.java new file mode 100644 index 00000000000..c3fc24756fe --- /dev/null +++ b/src/com/android/settings/fuelgauge/BatteryStatusFeatureProvider.java @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2020 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; + +/** + * Feature Provider used to retrieve battery status + */ +public interface BatteryStatusFeatureProvider { + + /** + * Trigger a battery status update; return false if built-in status should be used. + */ + boolean triggerBatteryStatusUpdate( + BatteryHeaderPreferenceController batteryHeaderPreferenceController, BatteryInfo info); +} diff --git a/src/com/android/settings/fuelgauge/BatteryStatusFeatureProviderImpl.java b/src/com/android/settings/fuelgauge/BatteryStatusFeatureProviderImpl.java new file mode 100644 index 00000000000..47d376dd9d7 --- /dev/null +++ b/src/com/android/settings/fuelgauge/BatteryStatusFeatureProviderImpl.java @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2020 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; + +/** + * Used to override battery status string in Battery Header. + */ +public class BatteryStatusFeatureProviderImpl implements BatteryStatusFeatureProvider { + + protected Context mContext; + + public BatteryStatusFeatureProviderImpl(Context context) { + mContext = context.getApplicationContext(); + } + + @Override + public boolean triggerBatteryStatusUpdate( + BatteryHeaderPreferenceController batteryHeaderPreferenceController, BatteryInfo info) { + return false; + } +} diff --git a/src/com/android/settings/overlay/FeatureFactory.java b/src/com/android/settings/overlay/FeatureFactory.java index afbce098f7d..b9aa68a55d7 100644 --- a/src/com/android/settings/overlay/FeatureFactory.java +++ b/src/com/android/settings/overlay/FeatureFactory.java @@ -31,6 +31,7 @@ import com.android.settings.bluetooth.BluetoothFeatureProvider; import com.android.settings.dashboard.DashboardFeatureProvider; import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider; import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider; +import com.android.settings.fuelgauge.BatteryStatusFeatureProvider; import com.android.settings.fuelgauge.PowerUsageFeatureProvider; import com.android.settings.gestures.AssistGestureFeatureProvider; import com.android.settings.homepage.contextualcards.ContextualCardFeatureProvider; @@ -103,6 +104,12 @@ public abstract class FeatureFactory { public abstract PowerUsageFeatureProvider getPowerUsageFeatureProvider(Context context); + /** + * Retrieve implementation for Battery Status feature. + */ + public abstract BatteryStatusFeatureProvider getBatteryStatusFeatureProvider( + Context context); + public abstract DashboardFeatureProvider getDashboardFeatureProvider(Context context); public abstract DockUpdaterFeatureProvider getDockUpdaterFeatureProvider(); diff --git a/src/com/android/settings/overlay/FeatureFactoryImpl.java b/src/com/android/settings/overlay/FeatureFactoryImpl.java index 29beb5b2160..d4d396f80b9 100644 --- a/src/com/android/settings/overlay/FeatureFactoryImpl.java +++ b/src/com/android/settings/overlay/FeatureFactoryImpl.java @@ -42,6 +42,8 @@ import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider; import com.android.settings.dashboard.suggestions.SuggestionFeatureProviderImpl; import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider; import com.android.settings.enterprise.EnterprisePrivacyFeatureProviderImpl; +import com.android.settings.fuelgauge.BatteryStatusFeatureProvider; +import com.android.settings.fuelgauge.BatteryStatusFeatureProviderImpl; import com.android.settings.fuelgauge.PowerUsageFeatureProvider; import com.android.settings.fuelgauge.PowerUsageFeatureProviderImpl; import com.android.settings.gestures.AssistGestureFeatureProvider; @@ -78,6 +80,7 @@ public class FeatureFactoryImpl extends FeatureFactory { private SecurityFeatureProvider mSecurityFeatureProvider; private SuggestionFeatureProvider mSuggestionFeatureProvider; private PowerUsageFeatureProvider mPowerUsageFeatureProvider; + private BatteryStatusFeatureProvider mBatteryStatusFeatureProvider; private AssistGestureFeatureProvider mAssistGestureFeatureProvider; private UserFeatureProvider mUserFeatureProvider; private SlicesFeatureProvider mSlicesFeatureProvider; @@ -110,6 +113,15 @@ public class FeatureFactoryImpl extends FeatureFactory { return mPowerUsageFeatureProvider; } + @Override + public BatteryStatusFeatureProvider getBatteryStatusFeatureProvider(Context context) { + if (mBatteryStatusFeatureProvider == null) { + mBatteryStatusFeatureProvider = new BatteryStatusFeatureProviderImpl( + context.getApplicationContext()); + } + return mBatteryStatusFeatureProvider; + } + @Override public DashboardFeatureProvider getDashboardFeatureProvider(Context context) { if (mDashboardFeatureProvider == null) { diff --git a/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java b/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java index b6c4fb7de60..2c68269b9ca 100644 --- a/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java +++ b/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java @@ -29,6 +29,7 @@ import com.android.settings.bluetooth.BluetoothFeatureProvider; import com.android.settings.dashboard.DashboardFeatureProvider; import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider; import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider; +import com.android.settings.fuelgauge.BatteryStatusFeatureProvider; import com.android.settings.fuelgauge.PowerUsageFeatureProvider; import com.android.settings.gestures.AssistGestureFeatureProvider; import com.android.settings.homepage.contextualcards.ContextualCardFeatureProvider; @@ -54,6 +55,7 @@ public class FakeFeatureFactory extends FeatureFactory { public final SupportFeatureProvider supportFeatureProvider; public final MetricsFeatureProvider metricsFeatureProvider; + public final BatteryStatusFeatureProvider batteryStatusFeatureProvider; public final PowerUsageFeatureProvider powerUsageFeatureProvider; public final DashboardFeatureProvider dashboardFeatureProvider; public final DockUpdaterFeatureProvider dockUpdaterFeatureProvider; @@ -98,6 +100,7 @@ public class FakeFeatureFactory extends FeatureFactory { public FakeFeatureFactory() { supportFeatureProvider = mock(SupportFeatureProvider.class); metricsFeatureProvider = mock(MetricsFeatureProvider.class); + batteryStatusFeatureProvider = mock(BatteryStatusFeatureProvider.class); powerUsageFeatureProvider = mock(PowerUsageFeatureProvider.class); dashboardFeatureProvider = mock(DashboardFeatureProvider.class); dockUpdaterFeatureProvider = mock(DockUpdaterFeatureProvider.class); @@ -134,6 +137,11 @@ public class FakeFeatureFactory extends FeatureFactory { return metricsFeatureProvider; } + @Override + public BatteryStatusFeatureProvider getBatteryStatusFeatureProvider(Context context) { + return batteryStatusFeatureProvider; + } + @Override public PowerUsageFeatureProvider getPowerUsageFeatureProvider(Context context) { return powerUsageFeatureProvider;