Loading res/layout/battery_header.xml +1 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ style="@style/EntityHeader"> <LinearLayout android:id="@+id/battery_info_layout" android:layout_width="170dp" android:layout_height="wrap_content" android:layout_marginStart="72dp" Loading res/values/strings.xml +7 −0 Original line number Diff line number Diff line Loading @@ -5752,6 +5752,11 @@ <!-- Title to display the battery percentage. [CHAR LIMIT=24] --> <string name="battery_header_title_alternate"><xliff:g id="number" example="88">^1</xliff:g><small> <font size="20"><xliff:g id="unit" example="%">%</xliff:g></font></small></string> <!-- Summary for top level battery tile if battery is not present. [CHAR LIMIT=NONE] --> <string name="battery_missing_message">Problem reading your battery meter</string> <!-- Summary to battery page if battery is not present. [CHAR LIMIT=NONE] --> <string name="battery_missing_help_message">Problem reading your battery meter. Tap to <annotation id="url">learn more</annotation></string> <!-- Title for force stop dialog [CHAR LIMIT=30] --> <string name="dialog_stop_title">Stop app?</string> <!-- Message body for force stop dialog [CHAR LIMIT=NONE] --> Loading Loading @@ -7272,6 +7277,8 @@ <string name="help_uri_sim_combination_warning" translatable="false"></string> <!-- url for the NFC and payment settings page --> <string name="help_uri_nfc_and_payment_settings" translatable="false"></string> <!-- url for battery page if battery is not present --> <string name="help_url_battery_missing" translatable="false"></string> <!-- User account title [CHAR LIMIT=30] --> <string name="user_account_title">Account for content</string> src/com/android/settings/Utils.java +9 −0 Original line number Diff line number Diff line Loading @@ -273,6 +273,15 @@ public final class Utils extends com.android.settingslib.Utils { return batteryChangedIntent.getBooleanExtra(BatteryManager.EXTRA_PRESENT, true); } /** * Return true if battery is present. */ public static boolean isBatteryPresent(Context context) { Intent batteryBroadcast = context.registerReceiver(null /* receiver */, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); return isBatteryPresent(batteryBroadcast); } public static String getBatteryPercentage(Intent batteryChangedIntent) { return formatPercentage(getBatteryLevel(batteryChangedIntent)); } Loading src/com/android/settings/display/BatteryPercentagePreferenceController.java +17 −0 Original line number Diff line number Diff line Loading @@ -21,9 +21,11 @@ import android.content.Context; import android.provider.Settings; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import androidx.preference.SwitchPreference; import com.android.internal.R; import com.android.settings.Utils; import com.android.settings.core.BasePreferenceController; import com.android.settings.core.PreferenceControllerMixin; Loading @@ -34,12 +36,27 @@ import com.android.settings.core.PreferenceControllerMixin; public class BatteryPercentagePreferenceController extends BasePreferenceController implements PreferenceControllerMixin, Preference.OnPreferenceChangeListener { private Preference mPreference; public BatteryPercentagePreferenceController(Context context, String preferenceKey) { super(context, preferenceKey); } @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); mPreference = screen.findPreference(getPreferenceKey()); if (!Utils.isBatteryPresent(mContext)) { // Disable battery percentage onPreferenceChange(mPreference, false /* newValue */); } } @Override public int getAvailabilityStatus() { if (!Utils.isBatteryPresent(mContext)) { return CONDITIONALLY_UNAVAILABLE; } return mContext.getResources().getBoolean( R.bool.config_battery_percentage_setting_available) ? AVAILABLE : UNSUPPORTED_ON_DEVICE; Loading src/com/android/settings/fuelgauge/BatteryBroadcastReceiver.java +10 −4 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.PowerManager; import android.util.Log; import androidx.annotation.IntDef; import androidx.annotation.VisibleForTesting; Loading @@ -41,6 +42,7 @@ import java.lang.annotation.RetentionPolicy; */ public class BatteryBroadcastReceiver extends BroadcastReceiver { private static final String TAG = "BatteryBroadcastRcvr"; /** * Callback when the following has been changed: * Loading @@ -56,12 +58,14 @@ public class BatteryBroadcastReceiver extends BroadcastReceiver { @IntDef({BatteryUpdateType.MANUAL, BatteryUpdateType.BATTERY_LEVEL, BatteryUpdateType.BATTERY_SAVER, BatteryUpdateType.BATTERY_STATUS}) BatteryUpdateType.BATTERY_STATUS, BatteryUpdateType.BATTERY_NOT_PRESENT}) public @interface BatteryUpdateType { int MANUAL = 0; int BATTERY_LEVEL = 1; int BATTERY_SAVER = 2; int BATTERY_STATUS = 3; int BATTERY_NOT_PRESENT = 4; } @VisibleForTesting Loading Loading @@ -101,9 +105,11 @@ public class BatteryBroadcastReceiver extends BroadcastReceiver { if (intent != null && mBatteryListener != null) { if (Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())) { final String batteryLevel = Utils.getBatteryPercentage(intent); final String batteryStatus = Utils.getBatteryStatus( mContext, intent); if (forceUpdate) { final String batteryStatus = Utils.getBatteryStatus(mContext, intent); if (!Utils.isBatteryPresent(intent)) { Log.w(TAG, "Problem reading the battery meter."); mBatteryListener.onBatteryChanged(BatteryUpdateType.BATTERY_NOT_PRESENT); } else if (forceUpdate) { mBatteryListener.onBatteryChanged(BatteryUpdateType.MANUAL); } else if(!batteryLevel.equals(mBatteryLevel)) { mBatteryListener.onBatteryChanged(BatteryUpdateType.BATTERY_LEVEL); Loading Loading
res/layout/battery_header.xml +1 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ style="@style/EntityHeader"> <LinearLayout android:id="@+id/battery_info_layout" android:layout_width="170dp" android:layout_height="wrap_content" android:layout_marginStart="72dp" Loading
res/values/strings.xml +7 −0 Original line number Diff line number Diff line Loading @@ -5752,6 +5752,11 @@ <!-- Title to display the battery percentage. [CHAR LIMIT=24] --> <string name="battery_header_title_alternate"><xliff:g id="number" example="88">^1</xliff:g><small> <font size="20"><xliff:g id="unit" example="%">%</xliff:g></font></small></string> <!-- Summary for top level battery tile if battery is not present. [CHAR LIMIT=NONE] --> <string name="battery_missing_message">Problem reading your battery meter</string> <!-- Summary to battery page if battery is not present. [CHAR LIMIT=NONE] --> <string name="battery_missing_help_message">Problem reading your battery meter. Tap to <annotation id="url">learn more</annotation></string> <!-- Title for force stop dialog [CHAR LIMIT=30] --> <string name="dialog_stop_title">Stop app?</string> <!-- Message body for force stop dialog [CHAR LIMIT=NONE] --> Loading Loading @@ -7272,6 +7277,8 @@ <string name="help_uri_sim_combination_warning" translatable="false"></string> <!-- url for the NFC and payment settings page --> <string name="help_uri_nfc_and_payment_settings" translatable="false"></string> <!-- url for battery page if battery is not present --> <string name="help_url_battery_missing" translatable="false"></string> <!-- User account title [CHAR LIMIT=30] --> <string name="user_account_title">Account for content</string>
src/com/android/settings/Utils.java +9 −0 Original line number Diff line number Diff line Loading @@ -273,6 +273,15 @@ public final class Utils extends com.android.settingslib.Utils { return batteryChangedIntent.getBooleanExtra(BatteryManager.EXTRA_PRESENT, true); } /** * Return true if battery is present. */ public static boolean isBatteryPresent(Context context) { Intent batteryBroadcast = context.registerReceiver(null /* receiver */, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); return isBatteryPresent(batteryBroadcast); } public static String getBatteryPercentage(Intent batteryChangedIntent) { return formatPercentage(getBatteryLevel(batteryChangedIntent)); } Loading
src/com/android/settings/display/BatteryPercentagePreferenceController.java +17 −0 Original line number Diff line number Diff line Loading @@ -21,9 +21,11 @@ import android.content.Context; import android.provider.Settings; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import androidx.preference.SwitchPreference; import com.android.internal.R; import com.android.settings.Utils; import com.android.settings.core.BasePreferenceController; import com.android.settings.core.PreferenceControllerMixin; Loading @@ -34,12 +36,27 @@ import com.android.settings.core.PreferenceControllerMixin; public class BatteryPercentagePreferenceController extends BasePreferenceController implements PreferenceControllerMixin, Preference.OnPreferenceChangeListener { private Preference mPreference; public BatteryPercentagePreferenceController(Context context, String preferenceKey) { super(context, preferenceKey); } @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); mPreference = screen.findPreference(getPreferenceKey()); if (!Utils.isBatteryPresent(mContext)) { // Disable battery percentage onPreferenceChange(mPreference, false /* newValue */); } } @Override public int getAvailabilityStatus() { if (!Utils.isBatteryPresent(mContext)) { return CONDITIONALLY_UNAVAILABLE; } return mContext.getResources().getBoolean( R.bool.config_battery_percentage_setting_available) ? AVAILABLE : UNSUPPORTED_ON_DEVICE; Loading
src/com/android/settings/fuelgauge/BatteryBroadcastReceiver.java +10 −4 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.PowerManager; import android.util.Log; import androidx.annotation.IntDef; import androidx.annotation.VisibleForTesting; Loading @@ -41,6 +42,7 @@ import java.lang.annotation.RetentionPolicy; */ public class BatteryBroadcastReceiver extends BroadcastReceiver { private static final String TAG = "BatteryBroadcastRcvr"; /** * Callback when the following has been changed: * Loading @@ -56,12 +58,14 @@ public class BatteryBroadcastReceiver extends BroadcastReceiver { @IntDef({BatteryUpdateType.MANUAL, BatteryUpdateType.BATTERY_LEVEL, BatteryUpdateType.BATTERY_SAVER, BatteryUpdateType.BATTERY_STATUS}) BatteryUpdateType.BATTERY_STATUS, BatteryUpdateType.BATTERY_NOT_PRESENT}) public @interface BatteryUpdateType { int MANUAL = 0; int BATTERY_LEVEL = 1; int BATTERY_SAVER = 2; int BATTERY_STATUS = 3; int BATTERY_NOT_PRESENT = 4; } @VisibleForTesting Loading Loading @@ -101,9 +105,11 @@ public class BatteryBroadcastReceiver extends BroadcastReceiver { if (intent != null && mBatteryListener != null) { if (Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())) { final String batteryLevel = Utils.getBatteryPercentage(intent); final String batteryStatus = Utils.getBatteryStatus( mContext, intent); if (forceUpdate) { final String batteryStatus = Utils.getBatteryStatus(mContext, intent); if (!Utils.isBatteryPresent(intent)) { Log.w(TAG, "Problem reading the battery meter."); mBatteryListener.onBatteryChanged(BatteryUpdateType.BATTERY_NOT_PRESENT); } else if (forceUpdate) { mBatteryListener.onBatteryChanged(BatteryUpdateType.MANUAL); } else if(!batteryLevel.equals(mBatteryLevel)) { mBatteryListener.onBatteryChanged(BatteryUpdateType.BATTERY_LEVEL); Loading