Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 07c98be8 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Add adaptive charging to the top level settings menu" into rvc-qpr-dev am: 4046f5c1

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/13287641

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: Ie23c4efbf1923e89c4f077decb397251f6c70f28
parents 834bce20 4046f5c1
Loading
Loading
Loading
Loading
+15 −10
Original line number Diff line number Diff line
@@ -52,7 +52,8 @@ import com.android.settingslib.widget.LayoutPreference;
 * Controller that update the battery header view
 */
public class BatteryHeaderPreferenceController extends BasePreferenceController
        implements PreferenceControllerMixin, LifecycleObserver, OnStart {
        implements PreferenceControllerMixin, LifecycleObserver, OnStart,
        BatteryPreferenceController {
    @VisibleForTesting
    static final String KEY_BATTERY_HEADER = "battery_header";
    private static final String ANNOTATION_URL = "url";
@@ -121,16 +122,20 @@ public class BatteryHeaderPreferenceController extends BasePreferenceController
                .styleActionBar(mActivity);
    }

    public void updateHeaderPreference(BatteryInfo info) {
        mBatteryPercentText.setText(formatBatteryPercentageText(info.batteryLevel));
        if (!mBatteryStatusFeatureProvider.triggerBatteryStatusUpdate(this, info)) {
    private CharSequence generateLabel(BatteryInfo info) {
        if (BatteryUtils.isBatteryDefenderOn(info)) {
                mSummary1.setText(null);
            return null;
        } else if (info.remainingLabel == null) {
                mSummary1.setText(info.statusLabel);
            return info.statusLabel;
        } else {
                mSummary1.setText(info.remainingLabel);
            return info.remainingLabel;
        }
    }

    public void updateHeaderPreference(BatteryInfo info) {
        mBatteryPercentText.setText(formatBatteryPercentageText(info.batteryLevel));
        if (!mBatteryStatusFeatureProvider.triggerBatteryStatusUpdate(this, info)) {
            mSummary1.setText(generateLabel(info));
        }

        mBatteryMeterView.setBatteryLevel(info.batteryLevel);
@@ -141,8 +146,8 @@ public class BatteryHeaderPreferenceController extends BasePreferenceController
    /**
     * Callback which receives text for the summary line.
     */
    public void updateBatteryStatus(String statusLabel) {
        mSummary1.setText(statusLabel);
    public void updateBatteryStatus(String label, BatteryInfo info) {
        mSummary1.setText(label != null ? label : generateLabel(info));
    }

    public void quickUpdateHeaderPreference() {
+30 −0
Original line number Diff line number Diff line
/*
 * 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;

/**
 * Common interface for a preference controller that updates battery status
 */
public interface BatteryPreferenceController {

    /**
     * Updates the label for the preference controller. If the label is null, the
     * implementation should revert back to the original label based on the
     * battery info.
     */
    void updateBatteryStatus(String label, BatteryInfo info);
}
+1 −1
Original line number Diff line number Diff line
@@ -25,5 +25,5 @@ public interface BatteryStatusFeatureProvider {
     * Trigger a battery status update; return false if built-in status should be used.
     */
    boolean triggerBatteryStatusUpdate(
            BatteryHeaderPreferenceController batteryHeaderPreferenceController, BatteryInfo info);
            BatteryPreferenceController controller, BatteryInfo info);
}
+1 −1
Original line number Diff line number Diff line
@@ -31,7 +31,7 @@ public class BatteryStatusFeatureProviderImpl implements BatteryStatusFeaturePro

    @Override
    public boolean triggerBatteryStatusUpdate(
            BatteryHeaderPreferenceController batteryHeaderPreferenceController, BatteryInfo info) {
            BatteryPreferenceController controller, BatteryInfo info) {
        return false;
    }
}
+44 −9
Original line number Diff line number Diff line
@@ -24,18 +24,21 @@ import androidx.preference.PreferenceScreen;

import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop;

public class TopLevelBatteryPreferenceController extends BasePreferenceController implements
        LifecycleObserver, OnStart, OnStop {
        LifecycleObserver, OnStart, OnStop, BatteryPreferenceController {

    @VisibleForTesting
    boolean mIsBatteryPresent = true;
    protected boolean mIsBatteryPresent = true;
    private final BatteryBroadcastReceiver mBatteryBroadcastReceiver;
    private Preference mPreference;
    private BatteryInfo mBatteryInfo;
    private BatteryStatusFeatureProvider mBatteryStatusFeatureProvider;
    private String mBatteryStatusLabel;

    public TopLevelBatteryPreferenceController(Context context, String preferenceKey) {
        super(context, preferenceKey);
@@ -49,6 +52,9 @@ public class TopLevelBatteryPreferenceController extends BasePreferenceControlle
                updateState(mPreference);
            }, true /* shortString */);
        });

        mBatteryStatusFeatureProvider = FeatureFactory.getFactory(context)
                .getBatteryStatusFeatureProvider(context);
    }

    @Override
@@ -75,27 +81,56 @@ public class TopLevelBatteryPreferenceController extends BasePreferenceControlle

    @Override
    public CharSequence getSummary() {
        return getSummary(true /* batteryStatusUpdate */);
    }

    private CharSequence getSummary(boolean batteryStatusUpdate) {
        // Display help message if battery is not present.
        if (!mIsBatteryPresent) {
            return mContext.getText(R.string.battery_missing_message);
        }
        return getDashboardLabel(mContext, mBatteryInfo);
        return getDashboardLabel(mContext, mBatteryInfo, batteryStatusUpdate);
    }

    static CharSequence getDashboardLabel(Context context, BatteryInfo info) {
    protected CharSequence getDashboardLabel(Context context, BatteryInfo info,
            boolean batteryStatusUpdate) {
        if (info == null || context == null) {
            return null;
        }
        CharSequence label;

        if (batteryStatusUpdate) {
            if (!mBatteryStatusFeatureProvider.triggerBatteryStatusUpdate(this, info)) {
                mBatteryStatusLabel = null; // will generateLabel()
            }
        }

        return (mBatteryStatusLabel == null) ? generateLabel(info) : mBatteryStatusLabel;
    }

    private CharSequence generateLabel(BatteryInfo info) {
        if (!info.discharging && info.chargeLabel != null) {
            label = info.chargeLabel;
            return info.chargeLabel;
        } else if (info.remainingLabel == null) {
            label = info.batteryPercentString;
            return info.batteryPercentString;
        } else {
            label = context.getString(R.string.power_remaining_settings_home_page,
            return mContext.getString(R.string.power_remaining_settings_home_page,
                    info.batteryPercentString,
                    info.remainingLabel);
        }
        return label;
    }

    /**
     * Callback which receives text for the label.
     */
    public void updateBatteryStatus(String label, BatteryInfo info) {
        mBatteryStatusLabel = label; // Null if adaptive charging is not active

        if (mPreference != null) {
            // Do not triggerBatteryStatusUpdate(), otherwise there will be an infinite loop
            final CharSequence summary = getSummary(false /* batteryStatusUpdate */);
            if (summary != null) {
                mPreference.setSummary(summary);
            }
        }
    }
}
Loading