android 4.4 java版本_Android4.0-4.4 加入实体按键振动支持的方法(java + smali版本号)

有些手机比方泛泰A820L, 泛泰A890 A900 以及Nubia Z5S 和Z5S mini具有实体按键(这里所说的实体按键是相对于虚拟按键而言, 包括物理按键和触摸屏上多出来的触摸实体按键), 当编译第三方ROM比方CM或者Mokee或者Omni时就会发现假设不做改动的话默认触摸实体按键时是没有振动支持的, 甚至有些patchrom的MIUI或者ColorOS等系统也可能不支持. 不知道是CM代码的问题还是编译的Config没写全然造成的,

后来经过本人改动后是能够支持按键振动, 只是仅仅能作为暂时解决方式參考.

转帖请注明出处和网址来源:

java版本号代码

在本人提交的cm的review上, 没有被通过,由于假设加进来不改动的话,会影响虚拟键的振动,会导致home键振动两次, 只是仅仅是作为支持实体按键振动的话还是能够的:

改动的位置为android.policy.jar的源代码里  frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java

diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java

index f0719e3..ca38166 100644

--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java

+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java

@@ -2333,6 +2333,22 @@ public class PhoneWindowManager implements WindowManagerPolicy {

WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,

WindowManager.LayoutParams.TYPE_SYSTEM_ERROR,

};

+

+ private void setKeyVib(WindowState win) {

+ WindowManager.LayoutParams attrs;

+ Intent service;

+ ContentResolver res;

+

+// If a system window has focus, then it doesn't make sense

+// right now to interact with applications.

+attrs = win != null ? win.getAttrs() : null;

+service = new Intent();

+res = mContext.getContentResolver();

+if(1 == Settings.System.getInt(res, Settings.System.HAPTIC_FEEDBACK_ENABLED,0))//when setting feedback enable

+{

+performHapticFeedbackLw(null, HapticFeedbackConstants.KEYBOARD_TAP, true); //启动震动 by syhost

+}

+ }

/** {@inheritDoc} */

@Override

@@ -2441,7 +2457,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {

ViewConfiguration.getDoubleTapTimeout());

return -1;

}

-

+

+setKeyVib(win);

// Go home!

launchHomeFromHotKey();

return -1;

@@ -2514,6 +2531,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {

}

if (repeatCount == 0) {

mMenuPressed = true;

+ setKeyVib(win);

if (mEnableShiftMenuBugReports && (metaState & chordBug) == chordBug) {

Intent intent = new Intent(Intent.ACTION_BUG_REPORT);

mContext.sendOrderedBroadcast(intent, null);

@@ -2645,9 +2663,13 @@ public class PhoneWindowManager implements WindowManagerPolicy {

}

return -1;

} else if (keyCode == KeyEvent.KEYCODE_BACK) {

+ if (down && repeatCount == 0) {

+ setKeyVib(win);

+ }

if (Settings.Secure.getIntForUser(mContext.getContentResolver(),

Settings.Secure.KILL_APP_LONGPRESS_BACK, 0, UserHandle.USER_CURRENT) == 1) {

if (down && repeatCount == 0) {

+ setKeyVib(win);

mHandler.postDelayed(mBackLongPress, mBackKillTimeout);

}

}

相应的smali版本号,

在本人之前适配的泛泰A820L的cm10版本号的乐蛙ROM里能够找到, 是分几次完毕的:

patch1:

goto :goto_0

.end method

+.method private setKeyVib(Landroid/view/WindowManagerPolicy$WindowState;)V

+ .locals 7

+ .parameter "win"

+

+ .prologue

+ const/4 v3, 0x0

+

+ const/4 v6, 0x1

+

+ .line 2110

+ if-eqz p1, :cond_1

+

+ invoke-interface {p1}, Landroid/view/WindowManagerPolicy$WindowState;->getAttrs()Landroid/view/WindowManager$LayoutParams;

+

+ move-result-object v0

+

+ .line 2111

+ .local v0, attrs:Landroid/view/WindowManager$LayoutParams;

+ :goto_0

+ new-instance v2, Landroid/content/Intent;

+

+ invoke-direct {v2}, Landroid/content/Intent;->()V

+

+ .line 2112

+ .local v2, service:Landroid/content/Intent;

+ iget-object v4, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mContext:Landroid/content/Context;

+

+ invoke-virtual {v4}, Landroid/content/Context;->getContentResolver()Landroid/content/ContentResolver;

+

+ move-result-object v1

+

+ .line 2113

+ .local v1, res:Landroid/content/ContentResolver;

+ const-string v4, "haptic_feedback_enabled"

+

+ const/4 v5, 0x0

+

+ invoke-static {v1, v4, v5}, Landroid/provider/Settings$System;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I

+

+ move-result v4

+

+ if-ne v6, v4, :cond_0

+

+ .line 2115

+ const/4 v4, 0x3

+

+ invoke-virtual {p0, v3, v4, v6}, Lcom/android/internal/policy/impl/PhoneWindowManager;->performHapticFeedbackLw(Landroid/view/WindowManagerPolicy$WindowState;IZ)Z

+

+ .line 2117

+ :cond_0

+ return-void

+

+ .end local v0 #attrs:Landroid/view/WindowManager$LayoutParams;

+ .end local v1 #res:Landroid/content/ContentResolver;

+ .end local v2 #service:Landroid/content/Intent;

+ :cond_1

+ move-object v0, v3

+

+ .line 2110

+ goto :goto_0

+.end method

+

.method private takeScreenshot()V

.locals 8

@@ -8384,6 +8446,7 @@

.line 1799

.end local v11 #ex:Landroid/os/RemoteException;

:cond_6

+ invoke-direct/range {p0 .. p1}, Lcom/android/internal/policy/impl/PhoneWindowManager;->setKeyVib(Landroid/view/WindowManagerPolicy$WindowState;)V

invoke-virtual/range {p0 .. p0}, Lcom/android/internal/policy/impl/PhoneWindowManager;->launchHomeFromHotKey()V

goto :goto_4

@@ -8631,6 +8694,8 @@

if-nez v23, :cond_1c

+ invoke-direct/range {p0 .. p1}, Lcom/android/internal/policy/impl/PhoneWindowManager;->setKeyVib(Landroid/view/WindowManagerPolicy$WindowState;)V

+

.line 1853

move-object/from16 v0, p0

patch2:

move/from16 v1, v32

- if-ne v0, v1, :cond_1c

+ if-ne v0, v1, :cond_34

.line 1894

if-eqz v9, :cond_1a

@@ -8887,7 +8887,25 @@

const-wide/16 v32, -0x1

goto/16 :goto_1

+

+ :cond_34

+ const/16 v32, 0x4

+

+ move/from16 v0, v18

+

+ move/from16 v1, v32

+

+ if-ne v0, v1, :cond_1c

+

+ if-eqz v9, :cond_1c

+ if-nez v23, :cond_1c

+

+ invoke-direct/range {p0 .. p1}, Lcom/android/internal/policy/impl/PhoneWindowManager;->setKeyVib(Landroid/view/WindowManagerPolicy$WindowState;)V

+

+ goto/16 :goto_34

+

+

.line 1897

:cond_19

const/16 v32, 0x1

@@ -8946,6 +8964,7 @@

goto :goto_9

.line 1920

+ :goto_34

:cond_1c

move-object/from16 v0, p0

上面的patch2主要是加了防止长按home键长振, 相应的java部分是:

+ if (down && repeatCount == 0) {

+ setKeyVib(win);

+ }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值