MT6763 N1 防误触模式的实现
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 防误触模式的实现相关推荐
- 小米2防误触模式设置和关闭方法
智能手机主要靠触摸屏幕进行操作,当屏幕与口袋或包摩擦时,易出现误挂误拨等误操作.针对以上情况,小米手机MIUI系统利用屏幕上方的距离感应器检测手机是否在口袋中,开发了防误触模式. 防误触模式开启:菜单 ...
- 小米10防误触模式开启教程(方法分享)
当我们把手机放在口袋或包里的时候.不小心给别人打电话很容易.此时,我们可以设置防止错误的触摸模式来解决.那具体该怎么办呢?现在,我将从小的一面开始向大家详细介绍.相信一定能帮助你! 小米10开启防误触 ...
- 【体感手势】口袋模式或者防误触
口袋模式或者防止误触 带有黑屏手势功能的手机,一般都需要进行一个防误触的判断.防止手机放在口袋里或者包包(一些导电介质的东西可能带来辅助效果,比如钥匙)里别误触发点亮屏幕,甚至是打出电话. 原理 接近 ...
- BrightLineFalsingManager防误触问题
google默认的为新功能:BrightLineFalsingManager 描述为:旨在说明触摸被拒绝的原因 google提交说明:为新的falsing管理器和分类器添加基类.这不会添加功能更改.它 ...
- android 防止屏幕误碰,小米11带来硬件防误触解决方案,彻底解决曲面屏误触问题...
小米11带来硬件防误触解决方案,彻底解决曲面屏误触问题 2021-01-20 11:42:11 20点赞 19收藏 48评论 不可否认,相比直屏,曲面屏有更高的误触几率,极大影响手机使用体验.长期以来 ...
- 手写tomcat socket closed_ipad pencil2019防误触电容笔苹果air3触屏控手写笔mini5绘画202010元优惠券券后价65元...
★★★ipad pencil2019防误触电容笔苹果air3触屏控手写笔mini5绘画2020¥65元¥75元已拼5414件点击抢购猜你喜欢晨光铅笔2b一年级铅笔批发三角hb铅笔小学生用幼儿园铅笔套装 ...
- 实验课题——最全手机通信录实现版本(【含注释】848行代码)!!!(包括模糊查询、分类查找、模拟拨号、qsort函数实现排序、文件存储、防误触等功能)
目录 简介: 基本要求: 代码的实现: 1.Contact.h 2.test.c 3.Cantact.c 运行效果图: 部分复杂函数流程图 前两周是本人的实验周,抽到的课题是"手机通信录的实 ...
- Windows10触控板防误触
Windows10触控板防误触 问题描述 解决办法:设置插入鼠标后自动关闭触控板 结果验证 问题描述 使用笔记本电脑键盘打字时,会碰到触控板,导致光标漂移,影响打字效率. 解决办法:设置插入鼠标后自动 ...
- 电容笔一定要防误触吗?苹果平板平替电容笔排行
至于用ipad作为学习工具的学生们,更是将它当成了一种必不可少的工具.但是,由于苹果原装电容笔的价格过高,没有人能负担得起.所以,最好的办法就是使用普通的电容笔.我是IPAD的忠实用户,也是数码爱好者 ...
最新文章
- CTO怒了:“如果中台不省钱,我建个屁中台啊!”
- Linker加载so失败问题分析
- 中国有替代w ndows的产品吗,电信将引入多款Wndows Phone手机 打造年轻品牌“飞Young”...
- pandas把频数统计转换成数据表
- 深度学习(二十三)Maxout网络学习-ICML 2013
- linux邮件自动回复,debian上 postfix+dovecot+squirrelmail 实现 自动回复
- SQL Server Management Studio清除历史登陆记录
- 剑指Offer - 面试题53 - I. 在排序数组中查找数字 I(二分查找的变形版本)
- unity3d双面材质_[转]unity3d中创建双面材质
- My SQL-4 函数
- building for production...Killed
- CF Fox And Two Dots (DFS)
- 基于RTP的H264视频数据打包解包类
- [2018.09.05 T1] Lyk Love painting
- Ubuntu 定时开关机
- 计算机平面和应用,计算机平面设计中软件的相互结合与应用
- js中函数的传递参数
- 统计相关系数(3)——Kendall Rank(肯德尔等级)相关系数及MATLAB实现
- A Survey on Conversational Recommender Systems
- 为什么普遍自学能力不足
热门文章
- 关于面试,我有大技巧
- PAT 1066 图像过滤 python
- 初中生学计算机感悟200字,初中毕业感言200字
- iOS源码学习-导航条加阴影,自定义导航条的背景图片
- 关于 xxxx.exe 中的 0xxxxxxxx 处最可能的异常: 0xC0000005: 读取位置 0xxxxxxxx 时发生访问冲突
- 多语言多语言国际化支持
- 程序设计java报告,java语言程序设计报告模版.doc
- 光速宽带连接服务器无响应,【硬件向】解决登录“网络连接中断”的方法
- 关于前端大管家 package.json,你知道多少?
- android开发 获取相册名称_Android获取手机上各个相册名称和相片的方法