Android 9.0pie에서는 빠른 시작 프로그램에 따라 내비게이션 표시줄의 동작이 달라집니다.
10114 단어 Android
나는 공교롭게도 돈이 없어서 픽셀3를 사지 못했지만, 항간에 떠도는 소문에 의하면
Pixel3 탐색 모음입니다.
그런 것 같습니다.
그리고 설정을 통해 이 일대를 바꿀 수 있을 것 같다.
System UI 이 시스템 응용 프로그램은 가정 응용 프로그램에 따라 행동이 달라집니다?!그게 마음에 걸려서 오랜만에 소스를 불렀어요.
사전에 다 써서 완전히 자기가 쓴 필기다.
설정으로 바꿀 수 있는 곳.
수중에 실제 단말기는 없고 시뮬레이터만 있다
https://android.benigumo.com/20180809/pie-navigation-bar/
보다
이 화면에 미끄러질 때의 행동을 바꾸는 설정이 있는 것 같다.
http://androidxref.com/9.0.0_r3/xref/packages/apps/Settings/res/xml/gestures.xml
화면 설정의 자원을 보면
48 <Preference
49 android:key="gesture_swipe_up_input_summary"
50 android:title="@string/swipe_up_to_switch_apps_title"
51 android:fragment="com.android.settings.gestures.SwipeUpGestureSettings"
52 settings:controller="com.android.settings.gestures.SwipeUpPreferenceController" />
있습니다.설정할 수 있는 단말기와 설정할 수 없는 단말기의 차이는?
44 static boolean isGestureAvailable(Context context) {
45 if (!context.getResources().getBoolean(R.bool.config_swipe_up_gesture_setting_available)) {
46 return false;
47 }
48
49 final ComponentName recentsComponentName = ComponentName.unflattenFromString(
50 context.getString(R.string.config_recentsComponentName));
51 final Intent quickStepIntent = new Intent(ACTION_QUICKSTEP)
52 .setPackage(recentsComponentName.getPackageName());
53 if (context.getPackageManager().resolveService(quickStepIntent,
54 PackageManager.MATCH_SYSTEM_ONLY) == null) {
55 return false;
56 }
57 return true;
58 }
두 가지 조건이 있다.첫째, config_swipe_up_gesture_setting_available는 단말기의 config에서 안 된다고 합니다. 정말 안 됩니다.
http://androidxref.com/9.0.0_r3/xref/frameworks/base/core/res/res/values/config.xml#3448, 기본값은 false일 수 있습니다.
3444 <!-- Whether or not swipe up gesture is enabled by default -->
3445 <bool name="config_swipe_up_gesture_default">false</bool>
3446
3447 <!-- Whether or not swipe up gesture's opt-in setting is available on this device -->
3448 <bool name="config_swipe_up_gesture_setting_available">false</bool>
두 번째는 좀 복잡해요.config_터미널의 config에recentsComponentName이 있습니다. 거기에recentApps를 표시하는 구성 요소가 적혀 있습니다.(AOSP
com.android.launcher3/com.android.quickstep.RecentsActivity
그래서 그 사람과 같은 포장에 속하는 아이Intent.ACTION_QUICKSTEP
가 주운 아이라면 OK.(AOSPpackages/apps/Launcher3/quickstep/src/com/android/quickstep/TouchInteractionService.java프레임워크/res의 config입니다.xml과 Launcher3는 모두 단말기 출하 상태이기 때문에 두 번째 if문구가 없어도 되겠죠?그렇게 생각하지만 터미널 배송 상태부터 Launcher3가 ACTION_을 업데이트했습니다.QUICKSTEP를 주워도 틀리지 않으려고 하는 건가요?
SwipeUp Preference Controller는 무엇을 하는 ON/OFF
응용 프로그램의 열기/닫기
SWIPE_UP_TO_SWITCH_APPS_ENABLED
에 대한 시스템 설정 값만 설정합니다.http://androidxref.com/9.0.0_r3/xref/packages/apps/Settings/src/com/android/settings/gestures/SwipeUpPreferenceController.java
이 변화를 감시하는 것은 AOSP와 Launcher3입니다.
219 @Override
220 public void onChange(boolean selfChange) {
221 super.onChange(selfChange);
222 mHandler.removeMessages(MSG_SET_SWIPE_UP_ENABLED);
223 mHandler.obtainMessage(MSG_SET_SWIPE_UP_ENABLED, getValue() ? 1 : 0, 0).sendToTarget();
224 }
설정 값 전환을 계기로61 public static TouchController[] createTouchControllers(Launcher launcher) {
62 boolean swipeUpEnabled = OverviewInteractionState.getInstance(launcher)
63 .isSwipeUpGestureEnabled();
64 if (!swipeUpEnabled) {
65 return new TouchController[] {
66 launcher.getDragController(),
67 new OverviewToAllAppsTouchController(launcher),
68 new LauncherTaskViewController(launcher)};
69 }
70 if (launcher.getDeviceProfile().isVerticalBarLayout()) {
71 return new TouchController[] {
72 launcher.getDragController(),
73 new OverviewToAllAppsTouchController(launcher),
74 new LandscapeEdgeSwipeController(launcher),
75 new LauncherTaskViewController(launcher)};
76 } else {
77 return new TouchController[] {
78 launcher.getDragController(),
79 new PortraitStatesTouchController(launcher),
80 new LauncherTaskViewController(launcher)};
81 }
82 }
이 근처에서 터치 이벤트 처리 프로그램의 클래스 중 어느 것을 사용해야 합니까재평가를 받다.Quickstep
아까부터 자주 나왔던 퀵스텝이라는 단어.그리고 Overview 같은 거.
자꾸 이 녀석이 징그럽다.
SystemUI의 NavigationBarView 근처에서 이러한 소스가 발견되었습니다.
233 if (mIsVertical) {
234 exceededScrubTouchSlop =
235 yDiff > NavigationBarCompat.getQuickScrubTouchSlopPx() && yDiff > xDiff;
236 exceededSwipeUpTouchSlop =
237 xDiff > NavigationBarCompat.getQuickStepTouchSlopPx() && xDiff > yDiff;
238 pos = y;
239 touchDown = mTouchDownY;
240 offset = pos - mTrackRect.top;
241 trackSize = mTrackRect.height();
242 } else {
243 exceededScrubTouchSlop =
244 xDiff > NavigationBarCompat.getQuickScrubTouchSlopPx() && xDiff > yDiff;
245 exceededSwipeUpTouchSlop =
246 yDiff > NavigationBarCompat.getQuickStepTouchSlopPx() && yDiff > xDiff;
247 pos = x;
248 touchDown = mTouchDownX;
249 offset = pos - mTrackRect.left;
250 trackSize = mTrackRect.width();
251 }
이 부근의 논리로 보면488 private boolean proxyMotionEvents(MotionEvent event) {
489 final IOverviewProxy overviewProxy = mOverviewEventSender.getProxy();
490 event.transform(mTransformGlobalMatrix);
491 try {
492 if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
493 overviewProxy.onPreMotionEvent(mNavigationBarView.getDownHitTarget());
494 }
495 overviewProxy.onMotionEvent(event);
496 if (DEBUG_OVERVIEW_PROXY) {
497 Log.d(TAG_OPS, "Send MotionEvent: " + event.toString());
498 }
499 return true;
500 } catch (RemoteException e) {
501 Log.e(TAG, "Callback failed", e);
502 } finally {
503 event.transform(mTransformLocalMatrix);
504 }
505 return false;
506 }
NavigationBar에서 보내는 터치 이벤트는 누구나 받아들일 수 있나요?
개인적으로'빠른 시작 프로그램에 따라 네비게이션 표시줄의 행동이 달라진다'고 생각하지만 제3자의 빠른 시작 프로그램이 Pixel Launcher처럼 Recent Apps의 화면을 표시하고 Quickstep를 처리할 수 있을지는 그렇지 않은 것 같다.
257 public OverviewProxyService(Context context) {
258 mContext = context;
259 mHandler = new Handler();
260 mConnectionBackoffAttempts = 0;
261 mRecentsComponentName = ComponentName.unflattenFromString(context.getString(
262 com.android.internal.R.string.config_recentsComponentName));
263 mQuickStepIntent = new Intent(ACTION_QUICKSTEP)
264 .setPackage(mRecentsComponentName.getPackageName());
따라서 터미널 공급업체는 xml 파일에서 config_를 사용할 수 있습니다RecentsComponentName을 결정하는 것만 Quickstep을 처리하는 대상이 됩니다.WebView처럼 조만간 제3자 응용 프로그램에서 열릴 수 있지만 Android 9.0에서는 이런 입이 없다.
총결산
https://www.jianshu.com/p/83ce8731fb13
Reference
이 문제에 관하여(Android 9.0pie에서는 빠른 시작 프로그램에 따라 내비게이션 표시줄의 동작이 달라집니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/YusukeIwaki/items/d3b4591819d26b908df9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)