/framework/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
import java.util.HashSet;
import java.util.List;
+//xyx:
+import android.os.SystemProperties;
+//xyx
+
/**
* WindowManagerPolicy implementation for the Android phone UI. This
* introduces a new method suffix, Lp, for an internal lock of the
@@ -1129,6 +1133,13 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
private void powerPress(long eventTime, boolean interactive, int count) {
+ //add by xyx to control powerPress
+ boolean enable = SystemProperties.getBoolean("persist.sys.enablepower", true);
+ Log.d("xyx", "powerPress enable = " + enable);
+ if (!enable) {
+ return;
+ }
+ //end xyx
if (mDefaultDisplayPolicy.isScreenOnEarly() && !mDefaultDisplayPolicy.isScreenOnFully()) {
Slog.i(TAG, "Suppressed redundant power key press while "
+ "already in the process of turning the screen on.");
@@ -1277,6 +1288,14 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
private void powerLongPress() {
+ //add by xyx to control powerLongPress
+ boolean enable = SystemProperties.getBoolean("persist.sys.enablepower", true);
+ Log.d("xyx", "powerLongPress enable = " + enable);
+ if (!enable) {
+ mPowerKeyHandled = true; // in order to power key up no sleep
+ return;
+ }
+ //end xyx
final int behavior = getResolvedLongPressOnPowerBehavior();
switch (behavior) {
case LONG_PRESS_POWER_NOTHING:
@@ -4645,6 +4664,13 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
private void wakeUpFromPowerKey(long eventTime) {
+ //add by xyx to control wakeUpFromPowerKey
+ boolean enable = SystemProperties.getBoolean("persist.sys.enablepower", true);
+ Log.d("xyx", "wakeUpFromPowerKey enable = " + enable);
+ if (!enable) {
+ return;
+ }
+ //end xyx
wakeUp(eventTime, mAllowTheaterModeWakeFromPowerKey,
PowerManager.WAKE_REASON_POWER_BUTTON, "android.policy:POWER");
}
powerPress、powerLongPress、wakeUpFromPowerKey分别对应:休眠,长按,唤醒三个场景
在这里直接return就可以达到屏蔽电源键功能的目的。
如果想要将短按和长按的控制逻辑分开,这里将powerLongPress的属性修改一下就可以了,后续广播的控制逻辑做一下改动即可。
按照上面改完PhoneWindowManager.java后,可以编译出来,然后通过adb来测试是否控制电源键成功:
由于SystemUI是系统级应用,且一开机便运行,因此在SystemUI里面添加静态广播。
添加静态广播:
/framework/base/packages/SystemUI/AndroidManifast.xml
diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml
index c8a902e..d597aed 100755
--- a/packages/SystemUI/AndroidManifest.xml
+++ b/packages/SystemUI/AndroidManifest.xml
@@ -346,6 +346,16 @@
<data android:scheme="package" />
</intent-filter>
</receiver>
+
+ <!-- add by xyx to control powerkey -->
+ <receiver android:name=".WiwoodPowerKeyReceiver"
+ android:enabled="true"
+ android:exported="true">
+ <intent-filter>
+ <action android:name="action.wiwood.enable_powerkey" />
+ </intent-filter>
+ </receiver>
+ <!-- end xyx -->
<service android:name=".ImageWallpaper"
android:permission="android.permission.BIND_WALLPAPER"
/framework/base/packages/SystemUI/src/com/android/systemui/WiwoodPowerKeyReceiver.java
diff --git a/packages/SystemUI/src/com/android/systemui/WiwoodPowerKeyReceiver.java b/packages/SystemUI/src/com/android/systemui/WiwoodPowerKeyReceiver.java
new file mode 100755
index 0000000..8e64b0b
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/WiwoodPowerKeyReceiver.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2017 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.systemui;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.util.Log;
+import android.os.SystemProperties;
+
+public class WiwoodPowerKeyReceiver extends BroadcastReceiver {
+
+ private final String TAG = "WiwoodPowerKeyReceiver";
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+
+ String isEnable = intent.getStringExtra("isEnable");
+
+ Log.d(TAG, "Receive BroadCast:-----------------> action.wiwood.enable_powerkey : " + isEnable);
+ if (isEnable.equals("true")) {
+ SystemProperties.set("persist.sys.enablepower", "1");
+ } else if (isEnable.equals("false")) {
+ SystemProperties.set("persist.sys.enablepower", "0");
+ }
+ }
+}
静态广播添加完成之后,可以make SystemUI
将编译出来的SystemUI.apk push到对应路径下,然后reboot;
再通过adb的方式发送广播验证是否添加成功:
powerkey可用:adb shell am broadcast -n com.android.systemui/.WiwoodPowerKeyReceiver -a action.wiwood.enable_powerkey --es isEnable "true"
powerkey不可用:adb shell am broadcast -n com.android.systemui/.WiwoodPowerKeyReceiver -a action.wiwood.enable_powerkey --es isEnable "false"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)