代码路径:
frameworks/base/core/res/res/values/symbols.xml
frameworks/base/services/core/java/com/android/server/power/ShutdownThread.java
在ShutdownThread.java文件中shutdownInner方法中定制我们UI
--- a/services/core/java/com/android/server/power/ShutdownThread.java
+++ b/services/core/java/com/android/server/power/ShutdownThread.java
@@ -17,6 +17,12 @@
package com.android.server.power;
+
+import android.widget.TextView;
+import android.widget.ImageView;
+import android.view.View;
+import android.view.LayoutInflater;
+import android.view.View.OnClickListener;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.IActivityManager;
@@ -228,26 +234,66 @@ public final class ShutdownThread extends Thread {
sInstance.mThemeResId = AlertDialog.THEME_DEVICE_DEFAULT_LIGHT;
}
- sConfirmDialog = new AlertDialog.Builder(context, sInstance.mThemeResId)
- .setTitle(mRebootSafeMode
- ? com.android.internal.R.string.reboot_safemode_title
- :(mReboot
- ? com.android.internal.R.string.reboot_device_title
- : com.android.internal.R.string.power_off))
- .setMessage(resourceId)
- .setPositiveButton(com.android.internal.R.string.yes, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- beginShutdownSequence(context);
- }
- })
- .setNegativeButton(com.android.internal.R.string.no, null)
+ sConfirmDialog = new AlertDialog.Builder(context)
+// sConfirmDialog = new AlertDialog.Builder(context, sInstance.mThemeResId)
+// .setTitle(mRebootSafeMode
+// ? com.android.internal.R.string.reboot_safemode_title
+// :(mReboot
+// ? com.android.internal.R.string.reboot_device_title
+// : com.android.internal.R.string.power_off))
+// .setMessage(resourceId)
+// .setPositiveButton(com.android.internal.R.string.yes, new DialogInterface.OnClickListener() {
+// public void onClick(DialogInterface dialog, int which) {
+// beginShutdownSequence(context);
+// }
+// })
+// .setNegativeButton(com.android.internal.R.string.no, null)
.create();
+
+ LayoutInflater inflater = LayoutInflater.from(context) ;
+ View view = inflater.inflate(com.android.internal.R.layout.shoutdown_thread_dialog, null) ;
+ TextView tvTitle = (TextView) view.findViewById(com.android.internal.R.id.tv_dialog_title);
+ TextView tvContent = (TextView) view.findViewById(com.android.internal.R.id.tv_dialog_content);
+ ImageView ivYes = (ImageView) view.findViewById(com.android.internal.R.id.iv_dialog_yes);
+ ImageView ivNo = (ImageView) view.findViewById(com.android.internal.R.id.iv_dialog_no);
+ tvTitle.setText(mRebootSafeMode
+ ? com.android.internal.R.string.reboot_safemode_title
+ :(mReboot
+ ? com.android.internal.R.string.reboot_device_title
+ : com.android.internal.R.string.power_off));
+ tvContent.setText(resourceId);
+ sConfirmDialog.setView(view);
+ WindowManager.LayoutParams attrs = sConfirmDialog.getWindow().getAttributes();
+ attrs.setTitle("ShutdownDialog");
+ sConfirmDialog.getWindow().setAttributes(attrs);
+ sConfirmDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_DISPLAY_OVERLAY);
+ sConfirmDialog.getWindow().setBackgroundDrawableResource(com.android.internal.R.drawable.ic_shoutdown_thread_dialog_bg);
+
+ ivYes.setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ beginShutdownSequence(context);
+ if (sConfirmDialog != null) {
+ sConfirmDialog.dismiss();
+ }
+ }});
+ ivNo.setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ if (sConfirmDialog != null) {
+ sConfirmDialog.dismiss();
+ }
+ }});
closer.dialog = sConfirmDialog;
sConfirmDialog.setOnDismissListener(closer);
- sConfirmDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
sConfirmDialog.show();
+ sConfirmDialog.getWindow().setLayout(480,276);
} else {
beginShutdownSequence(context);
}
注意事项:
1、在framework下添加资源文件,在xml里面定义的ID以及图片,我们必须在symbols.xml文件中先定义,如果不定义就会报错
2、在framework下添加资源文件,需要先进入项目根目录 cd frameworks/base/core/res/ 执行mm命令, 编译 framework-res.apk
3、编译完后com.android.internal.R中会生成资源的引用。
在目录frameworks/base/ 下执行mm 编译 framework.jar
如果 frameworks/base/services 下有修改,则也要编译
frameworks/base/services/java/ 执行mm 编译 services.jar
4、执行如下命令,重启设备
adb remount
adb push framework-res.apk /system/framework/
adb push framework.jar /system/framework/
adb push services.jar /system/framework/ (如果有修改的话)