zoukankan      html  css  js  c++  java
  • Android4.0-4.4 加入实体按键振动支持的方法(java + smali版本号)

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


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

    http://blog.csdn.net/syhost/article/details/32067695


    java版本号代码

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

    http://review.cyanogenmod.org/#/c/55274/1/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java


    改动的位置为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:

    https://github.com/syhost/lewa_patchrom_ef65l/commit/18afafa2c7b770bdb593fee086c7cc07f8789e58

        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;-><init>()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:

    https://github.com/syhost/lewa_patchrom_ef65l/commit/0e5ff497456e9428546be24bae36dfcf4544863f

     
          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);
    +        	}






  • 相关阅读:
    获取指定函数的函数名称(用于兼容IE)
    opa gatekeeper笔记:AdmissionReview input.request请求对象结构
    团队内部密码共享方案:KeePassXC+微盘(企业微信)
    一个简单的golang项目,实验 gitlab-ci-cd Pipelines
    调用企业微信API拨打紧急通知电话
    使用PAM模块实现普通用户之间su免密切换
    thin_check命令 man手册
    Nginx server_name翻译
    UDP端口检查告警SHELL脚本(企业微信版机器人版)
    从零搭建vsftpd
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/6759255.html
Copyright © 2011-2022 走看看