客户觉得低电时,通知栏会通知低电,太low了
改好看点,就做了个低电弹框的UI
packages/SystemUI/res/values/styles.xml
packages/SystemUI/res/anim/batterylow_blink.xml
packages/SystemUI/res/drawable/ic_lowbatterydialog.png
packages/SystemUI/res/layout/battery_low_dialog.xml
packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java
styles.xml 增加透明弹框效果
batterylow_blink.xml 是个动画效果,弹框将会闪三下进行低电警告
ic_lowbatterydialog.png 弹框图片,低电界面将会应用这张图片
battery_low_dialog.xml 低电界面
PowerNotificationWarnings.java 里边要注意的时 一般dialog都要"长"在activity上,不然的话要加上
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY);
这样就可以了
commit 224261aea088bb96d759e86053678246d0b1ddb7
Author: liubc <lbc@chiptrip.com.cn>
Date: Fri Jul 26 10:05:03 2024 +0800
低于15%的电量时,低电通知修改为低电弹框
--- a/packages/SystemUI/res/values/styles.xml
+++ b/packages/SystemUI/res/values/styles.xml
@@ -76,7 +76,13 @@
<item name="android:textStyle">normal</item>
<item name="android:textColor">#FFFFFFFF</item>
</style>
-
+
+ <style name="TransparentDialogTheme" parent="android:Theme.Dialog">
+ <item name="android:windowBackground">@android:color/transparent</item>
+ <item name="android:windowIsFloating">true</item>
+ <item name="android:windowNoTitle">true</item>
+ </style>
+
diff --git a/packages/SystemUI/res/anim/batterylow_blink.xml b/packages/SystemUI/res/anim/batterylow_blink.xml
new file mode 100755
index 0000000..dd8efff
--- /dev/null
+++ b/packages/SystemUI/res/anim/batterylow_blink.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<alpha xmlns:android="http://schemas.android.com/apk/res/android"
+ android:duration="200"
+ android:fromAlpha="0.0"
+ android:toAlpha="1.0"
+ android:repeatMode="reverse"
+ android:repeatCount="4"
+ />
diff --git a/packages/SystemUI/res/drawable/ic_lowbatterydialog.png b/packages/SystemUI/res/drawable/ic_lowbatterydialog.png
new file mode 100755
index 0000000..858ed20
Binary files /dev/null and b/packages/SystemUI/res/drawable/ic_lowbatterydialog.png differ
diff --git a/packages/SystemUI/res/layout/battery_low_dialog.xml b/packages/SystemUI/res/layout/battery_low_dialog.xml
new file mode 100755
index 0000000..c9ef5d2
--- /dev/null
+++ b/packages/SystemUI/res/layout/battery_low_dialog.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:padding="20dp"
+ android:background="@android:color/transparent">
+
+ <!-- 添加你的布局内容 -->
+ <ImageView
+ android:id="@+id/logoImageView"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:src="@drawable/ic_lowbatterydialog" />
+</LinearLayout>
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java
index 2bb7804..4552411 100755
--- a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java
+++ b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java
@@ -37,6 +37,15 @@ import android.os.UserHandle;
import android.provider.Settings;
import android.util.Slog;
import android.view.View;
+import android.app.Dialog;
+import android.view.LayoutInflater;
+import android.view.Window;
+import android.view.animation.Animation;
+import android.view.animation.AnimationUtils;
+import android.widget.ImageView;
+import android.view.WindowManager;
+
+
import com.android.systemui.R;
import com.android.systemui.statusbar.phone.PhoneStatusBar;
@@ -138,7 +147,8 @@ public class PowerNotificationWarnings implements PowerUI.WarningsUI {
showInvalidChargerNotification();
mShowing = SHOWING_INVALID_CHARGER;
} else if (mWarning && mBatteryLevel <= 15) {
- showWarningNotification();
+ //showWarningNotification();
+ showLowBatteryDialog();
mShowing = SHOWING_WARNING;
} else if (mSaver) {
showSaverNotification();
@@ -168,6 +178,36 @@ public class PowerNotificationWarnings implements PowerUI.WarningsUI {
mNoMan.notifyAsUser(TAG_NOTIFICATION, R.id.notification_power, n, UserHandle.ALL);
}
+ private void showLowBatteryDialog(){
+ final Dialog dialog = new Dialog(mContext, R.style.TransparentDialogTheme);
+ dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY);
+ View view = LayoutInflater.from(mContext).inflate(R.layout.battery_low_dialog, null);
+ dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
+ dialog.setContentView(view);
+ ImageView logoImageView = (ImageView)view.findViewById(R.id.logoImageView);
+ Animation blinkAnimation = AnimationUtils.loadAnimation(mContext, R.anim.batterylow_blink);
+ blinkAnimation.setAnimationListener(new Animation.AnimationListener() {
+ @Override
+ public void onAnimationStart(Animation animation) {
+ // 动画开始时的逻辑
+ }
+
+ @Override
+ public void onAnimationEnd(Animation animation) {
+ // 动画结束时的逻辑
+ dialog.dismiss();
+ }
+
+ @Override
+ public void onAnimationRepeat(Animation animation) {
+ // 动画重复时的逻辑
+ }
+ });
+ logoImageView.startAnimation(blinkAnimation);
+ dialog.show();
+
+ }
+
private void showWarningNotification() {
final int textRes = mSaver ? R.string.battery_low_percent_format_saver_started
: R.string.battery_low_percent_format;