1.base/core/java/android/provider/Settings.java  修改文件

      public static final String POCKET_TOUCH_DISABLE = "pocket_touch_disable";

2.base/core/res/res/layout/pocket_touch_disable.xml  新建一个view

+<?xml version="1.0" encoding="utf-8"?>28 +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"29 +    android:layout_width="match_parent"30 +    android:layout_height="2160px"31 +    android:background="#cc000000"32 +    android:orientation="vertical">33 +34 +    <TextView35 +    android:layout_marginTop="360px"36 +    android:layout_width="wrap_content"37 +    android:layout_height="wrap_content"38 +    android:layout_gravity="center_horizontal"39 +    android:text="@string/oos_ptd_title"40 +    android:textColor="#4cffffff"41 +    android:textSize="48px" />42 +43 +    <ImageView44 +    android:layout_marginTop="119px"45 +    android:layout_gravity="center_horizontal"46 +    android:layout_height="882px"47 +    android:layout_width="420px"48 +    android:src="@drawable/funui_ptd" />49 +50 +    <TextView51 +    android:layout_width="wrap_content"52 +    android:layout_height="wrap_content"53 +    android:paddingTop="80px"54 +    android:text="@string/oos_ptd_exit_mode"55 +    android:textColor="#4cffffff"56 +    android:layout_marginLeft="100px"57 +    android:textSize="36px" />58 +    <TextView59 +    android:layout_width="wrap_content"60 +    android:layout_height="wrap_content"61 +    android:paddingTop="26px"62 +    android:textSize="30px"63 +    android:textColor="#4cffffff"64 +    android:layout_marginLeft="100px"65 +    android:text="@string/oos_ptd_notice1"66 +    />
 67 +    <TextView68 +    android:layout_width="wrap_content"69 +    android:layout_height="wrap_content"70 +    android:paddingTop="26px"71 +    android:textSize="30px"72 +    android:textColor="#4cffffff"73 +    android:layout_marginLeft="100px"74 +    android:text="@string/oos_ptd_notice2"75 +    android:lineSpacingExtra="26px"/>76 +</LinearLayout>

3.base/core/res/res/values-zh-rCN/strings_pocket_mode.xml 新建一个 字符串文件

84 +<?xml version="1.0" encoding="utf-8"?>85 +<resources>86 +    <string name="oos_ptd_title">已激活口袋模式</string>87 +    <string name="oos_ptd_exit_mode">退出方式</string>88 +    <string name="oos_ptd_notice1">1.请勿遮挡红色区域,擦拭掉该区域的灰尘或油污</string>89 +    <string name="oos_ptd_notice2">2.同时按下电源键和音量-键,强制退出口袋模式</string>90 +</resources>

4.base/core/res/res/values/symbols.xml

128 +  <java-symbol type="layout" name="pocket_touch_disable" />

5.base/services/core/java/com/android/server/policy/PhoneWindowManager.java

+import android.hardware.Sensor;
145 +import android.hardware.SensorEvent;
146 +import android.hardware.SensorEventListener;
147 +import com.android.featureoption.FeatureOption;
148 +import android.hardware.SensorManager;
 @@ -1368,7 +1377,17 @@ public class PhoneWindowManager implements WindowManagerPolicy {
154                  mScreenshotChordVolumeDownKeyConsumed = true;
155                  cancelPendingPowerKeyAction();
156                  mScreenshotRunnable.setScreenshotType(TAKE_SCREENSHOT_FULLSCREEN);
157
158 + * add_pocket_mode
159                  mHandler.postDelayed(mScreenshotRunnable, getScreenshotChordLongPressDelay());
160 + */
161 +                if (mProximityScreenShown) {
162 +                    setProximitySensorEnabled(false);
163 +                } else {
164 +                    takeScreenshot(TAKE_SCREENSHOT_FULLSCREEN);
165 +// End of Vanzo:liuhuan
166 +                }
167 +
168              }
169          }
170      }
 @@ -1703,6 +1722,13 @@ public class PhoneWindowManager implements WindowManagerPolicy {
172          mAccessibilityManager = (AccessibilityManager) context.getSystemService(
173                  Context.ACCESSIBILITY_SERVICE);
174 176 + * add_pocket_mode
177 + */
178 +        mSensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);//读取距离传感器的值
179 +        mProximitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
180 +//
181 +
182          // register for dock events
183          IntentFilter filter = new IntentFilter();
184          filter.addAction(UiModeManager.ACTION_ENTER_CAR_MODE);
185 @@ -1746,6 +1772,14 @@ public class PhoneWindowManager implements WindowManagerPolicy {
186          // register for multiuser-relevant broadcasts
187          filter = new IntentFilter(Intent.ACTION_USER_SWITCHED);
188          context.registerReceiver(mMultiuserReceiver, filter);
18
190 + * modify settings fun
191 + */
192 +        IntentFilter turningOnScreenfilter = new IntentFilter();屏幕亮或者灭发送广播
193 +        turningOnScreenfilter.addAction(Intent.ACTION_SCREEN_OFF);
194 +        turningOnScreenfilter.addAction(Intent.ACTION_SCREEN_ON);
195 +        context.registerReceiver(mBatInfoReceiver, turningOnScreenfilter);
196 +//
197
198          // monitor for system gestures
199          mSystemGestures = new SystemGesturesPointerEventListener(context,
 @@ -6673,6 +6707,11 @@ public class PhoneWindowManager implements WindowManagerPolicy {
201              if (mKeyguardDelegate != null) {
202                  mKeyguardDelegate.onScreenTurnedOff();
203              }
204
205 + */
206 +            //if (isProximityScreenEnabled()) setProximitySensorEnabled(false);208 +
209          }
210      }
211
212 @@ -6688,6 +6727,14 @@ public class PhoneWindowManager implements WindowManagerPolicy {
213              mKeyguardDrawComplete = false;
214              mWindowManagerDrawComplete = false;
215              mScreenOnListener = screenOnListener;
216
217 + */
218 +            //if (isProximityScreenEnabled()) {
219 +            //    setProximitySensorEnabled(true);
220 +            //    mHandler.postDelayed(mPsRunnable, ALS_PS_DELAY);
221 +            //}223 +
224
225              if (mKeyguardDelegate != null) {
226                  mHandler.removeMessages(MSG_KEYGUARD_DRAWN_TIMEOUT);
227 @@ -6700,6 +6747,138 @@ public class PhoneWindowManager implements WindowManagerPolicy {
228              }
229          }
230      }
231
232 + * modify settings fun
233 + */
234 +    BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver() {
235 +        @Override
236 +            public void onReceive(final Context context, final Intent intent) {
237 +                final String action = intent.getAction();
238 +                if(Intent.ACTION_SCREEN_ON.equals(action)){
239 +                    if (isProximityScreenEnabled()) {
240 +                        setProximitySensorEnabled(true);
241 +                        mHandler.postDelayed(mPsRunnable, ALS_PS_DELAY);
242 +                    }
243 +                }else if(Intent.ACTION_SCREEN_OFF.equals(action)){
244 +                    if (isProximityScreenEnabled()) setProximitySensorEnabled(false);
245 +
246 +                }
247 +            }
248 +
249 +    };
250
251 +
252 +/*
253 + */
254 +    private static final long ALS_PS_DELAY = 1000;
255 +
256 +    private boolean mProximitySensorEnabled;
257 +    private boolean mProximityScreenShown;
258 +    private long mScreenOnTime;
259 +
260 +    private SensorManager mSensorManager;
261 +    private Sensor mProximitySensor;
262 +    private View mProximityView;
263 +    private WindowManager.LayoutParams mProximityParams;
264 +
265 +    boolean isProximityScreenEnabled() {
266 +        return Settings.System.getInt(mContext.getContentResolver(),
267 +                Settings.System.POCKET_TOUCH_DISABLE,
268 +                FeatureOption.VANZO_FEATURE_OOS_POCKET_TOUCH_SUPPORT) == 1;
269 +    }
271 +    private void setProximitySensorEnabled(boolean enable) {
272 +        if (enable) {
273 +            if (!mProximitySensorEnabled) {
274 +                mProximitySensorEnabled = true;
275 +                mSensorManager.registerListener(mProximitySensorListener, mProximitySensor,
276 +                        SensorManager.SENSOR_DELAY_UI, mHandler);
277 +                mScreenOnTime = SystemClock.uptimeMillis();
278 +            }
279 +        } else {
280 +            if (mProximitySensorEnabled) {
281 +                mProximitySensorEnabled = false;
282 +                hideProximityScreen();
283 +                mSensorManager.unregisterListener(mProximitySensorListener);
284 +            }
285 +        }
286 +    }
287 +
288 +    private void showProximityScreen() {
289 +        if (!mProximityScreenShown) {
290 +            if (mProximityView == null) {
291 +                mProximityView = View.inflate(mContext,
292 +                        com.android.internal.R.layout.pocket_touch_disable, null);
293 +                mProximityView.setSystemUiVisibility(View.STATUS_BAR_DISABLE_EXPAND);
294 +                mProximityView.setFocusable(true);
295 +                mProximityView.setFocusableInTouchMode(true);
296 +                View.OnKeyListener listener = new View.OnKeyListener() {
297 +                    public boolean onKey(View v, int keyCode, KeyEvent event) {
298 +                        // capture all key event
299 +                        return true;
300 +                    }
301 +                };
302 +                mProximityView.setOnKeyListener(listener);
303 +
304 +                mProximityParams = new WindowManager.LayoutParams(
305 +                        WindowManager.LayoutParams.MATCH_PARENT,
306 +                        WindowManager.LayoutParams.MATCH_PARENT);
307 +                mProximityParams.type = WindowManager.LayoutParams.TYPE_BOOT_PROGRESS;
308 +                mProximityParams.flags = WindowManager.LayoutParams.FLAG_FULLSCREEN
309 +                    | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS | WindowManager.LayoutPa    rams.FLAG_NOT_FOCUSABLE;
310 +                mProximityParams.format = PixelFormat.TRANSLUCENT;
311 +                mProximityParams.gravity = Gravity.END | Gravity.TOP;
312 +                mProximityParams.setTitle("PTD view");
313 +                //mProximityParams.x = getResources().getDisplayMetrics().widthPixels/2;
314 +                //mProximityParams.y = 100;
315 +            }
316 +            WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
317 +            wm.addView(mProximityView, mProximityParams);
318 +
319 +            mProximityScreenShown = true;
320 +            mHandler.removeCallbacks(mPsRunnable);
321 +        }
322 +    }
323 +
324 +    private void hideProximityScreen() {
325 +        if (mProximityScreenShown) {
326 +            WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
327 +            wm.removeView(mProximityView);
328 +            mProximityView = null;
329 +            mProximityParams = null;
330 +            mProximityScreenShown = false;
331 +        }
332 +    }
333 +
334 +    public Runnable mPsRunnable = new Runnable() {
335 +        @Override
336 +            public void run() {
337 +                setProximitySensorEnabled(false);
338 +            }
339 +    };
340 +
 +    private final SensorEventListener mProximitySensorListener = new SensorEventListener() {
342 +        @Override
343 +            public void onSensorChanged(SensorEvent event) {
344 +                boolean isNear = event.values[0] == 0.0f;
345 +                long time = SystemClock.uptimeMillis();
346 +                if (!mProximityScreenShown) {
347 +                    if (isNear) {
348 +                        showProximityScreen();
349 +                    }
350 +                } else {
351 +                    if (!isNear) {
352 +                        setProximitySensorEnabled(false);
353 +                    }
354 +                }
355 +            }
356 +
357 +        @Override
358 +            public void onAccuracyChanged(Sensor sensor, int accuracy) {
359 +                // Not used.
360 +            }
361 +    };
36
363
364      // Called on the DisplayManager's DisplayPowerController thread.
365      @Override365,14        Bot

MT6763 N1 防误触模式的实现相关推荐

  1. 小米2防误触模式设置和关闭方法

    智能手机主要靠触摸屏幕进行操作,当屏幕与口袋或包摩擦时,易出现误挂误拨等误操作.针对以上情况,小米手机MIUI系统利用屏幕上方的距离感应器检测手机是否在口袋中,开发了防误触模式. 防误触模式开启:菜单 ...

  2. 小米10防误触模式开启教程(方法分享)

    当我们把手机放在口袋或包里的时候.不小心给别人打电话很容易.此时,我们可以设置防止错误的触摸模式来解决.那具体该怎么办呢?现在,我将从小的一面开始向大家详细介绍.相信一定能帮助你! 小米10开启防误触 ...

  3. 【体感手势】口袋模式或者防误触

    口袋模式或者防止误触 带有黑屏手势功能的手机,一般都需要进行一个防误触的判断.防止手机放在口袋里或者包包(一些导电介质的东西可能带来辅助效果,比如钥匙)里别误触发点亮屏幕,甚至是打出电话. 原理 接近 ...

  4. BrightLineFalsingManager防误触问题

    google默认的为新功能:BrightLineFalsingManager 描述为:旨在说明触摸被拒绝的原因 google提交说明:为新的falsing管理器和分类器添加基类.这不会添加功能更改.它 ...

  5. android 防止屏幕误碰,小米11带来硬件防误触解决方案,彻底解决曲面屏误触问题...

    小米11带来硬件防误触解决方案,彻底解决曲面屏误触问题 2021-01-20 11:42:11 20点赞 19收藏 48评论 不可否认,相比直屏,曲面屏有更高的误触几率,极大影响手机使用体验.长期以来 ...

  6. 手写tomcat socket closed_ipad pencil2019防误触电容笔苹果air3触屏控手写笔mini5绘画202010元优惠券券后价65元...

    ★★★ipad pencil2019防误触电容笔苹果air3触屏控手写笔mini5绘画2020¥65元¥75元已拼5414件点击抢购猜你喜欢晨光铅笔2b一年级铅笔批发三角hb铅笔小学生用幼儿园铅笔套装 ...

  7. 实验课题——最全手机通信录实现版本(【含注释】848行代码)!!!(包括模糊查询、分类查找、模拟拨号、qsort函数实现排序、文件存储、防误触等功能)

    目录 简介: 基本要求: 代码的实现: 1.Contact.h 2.test.c 3.Cantact.c 运行效果图: 部分复杂函数流程图 前两周是本人的实验周,抽到的课题是"手机通信录的实 ...

  8. Windows10触控板防误触

    Windows10触控板防误触 问题描述 解决办法:设置插入鼠标后自动关闭触控板 结果验证 问题描述 使用笔记本电脑键盘打字时,会碰到触控板,导致光标漂移,影响打字效率. 解决办法:设置插入鼠标后自动 ...

  9. 电容笔一定要防误触吗?苹果平板平替电容笔排行

    至于用ipad作为学习工具的学生们,更是将它当成了一种必不可少的工具.但是,由于苹果原装电容笔的价格过高,没有人能负担得起.所以,最好的办法就是使用普通的电容笔.我是IPAD的忠实用户,也是数码爱好者 ...

最新文章

  1. CTO怒了:“如果中台不省钱,我建个屁中台啊!”
  2. Linker加载so失败问题分析
  3. 中国有替代w ndows的产品吗,电信将引入多款Wndows Phone手机 打造年轻品牌“飞Young”...
  4. pandas把频数统计转换成数据表
  5. 深度学习(二十三)Maxout网络学习-ICML 2013
  6. linux邮件自动回复,debian上 postfix+dovecot+squirrelmail 实现 自动回复
  7. SQL Server Management Studio清除历史登陆记录
  8. 剑指Offer - 面试题53 - I. 在排序数组中查找数字 I(二分查找的变形版本)
  9. unity3d双面材质_[转]unity3d中创建双面材质
  10. My SQL-4 函数
  11. building for production...Killed
  12. CF Fox And Two Dots (DFS)
  13. 基于RTP的H264视频数据打包解包类
  14. [2018.09.05 T1] Lyk Love painting
  15. Ubuntu 定时开关机
  16. 计算机平面和应用,计算机平面设计中软件的相互结合与应用
  17. js中函数的传递参数
  18. 统计相关系数(3)——Kendall Rank(肯德尔等级)相关系数及MATLAB实现
  19. A Survey on Conversational Recommender Systems
  20. 为什么普遍自学能力不足

热门文章

  1. 关于面试,我有大技巧
  2. PAT 1066 图像过滤 python
  3. 初中生学计算机感悟200字,初中毕业感言200字
  4. iOS源码学习-导航条加阴影,自定义导航条的背景图片
  5. 关于 xxxx.exe 中的 0xxxxxxxx 处最可能的异常: 0xC0000005: 读取位置 0xxxxxxxx 时发生访问冲突
  6. 多语言多语言国际化支持
  7. 程序设计java报告,java语言程序设计报告模版.doc
  8. 光速宽带连接服务器无响应,【硬件向】解决登录“网络连接中断”的方法
  9. 关于前端大管家 package.json,你知道多少?
  10. android开发 获取相册名称_Android获取手机上各个相册名称和相片的方法