试一下,在setting 切换的时候做一个延迟(这个时间可以酌情增加减少),让他在不停切换的时候,只执行最后一次。
我试了一下是能延迟的,那可以减小出现疯狂切换的情况。
//例子延迟的是1s,延迟1s之后再切换 手势/三键
yjr@fae173:~/ANDROID14.0/packages/apps/Settings$ git diff src/com/android/settings/gestures/SystemNavigationGestureSettings.java
diff --git a/src/com/android/settings/gestures/SystemNavigationGestureSettings.java b/src/com/android/settings/gestures/SystemNavigationGestureSettings.java
index 0d25190cc4..5b13ad3457 100644
--- a/src/com/android/settings/gestures/SystemNavigationGestureSettings.java
+++ b/src/com/android/settings/gestures/SystemNavigationGestureSettings.java
@@ -16,6 +16,10 @@
package com.android.settings.gestures;
+import android.util.Log;
+import android.os.Handler;
+import android.os.Debug;
+
import static android.os.UserHandle.USER_CURRENT;
import static android.provider.Settings.Secure.ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
@@ -296,6 +300,21 @@ public class SystemNavigationGestureSettings extends RadioButtonPickerFragment i
}
}
+ private static Handler mHandler = new Handler();
+ private static IOverlayManager mOverlayManagerRunnable = null;
+ private static String mOverlayPackageRunnable = null;
+ private static Runnable mRunnable = new Runnable() {
+ @Override
+ public void run() {
+ Log.e("SystemNavigationGestureSettings","1216 mRunnable ----");
+ try {
+ mOverlayManagerRunnable.setEnabledExclusiveInCategory(mOverlayPackageRunnable, USER_CURRENT);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+ };
+
@VisibleForTesting
static void setCurrentSystemNavigationMode(IOverlayManager overlayManager, String key) {
String overlayPackage = NAV_BAR_MODE_GESTURAL_OVERLAY;
@@ -311,11 +330,17 @@ public class SystemNavigationGestureSettings extends RadioButtonPickerFragment i
break;
}
- try {
+ mOverlayManagerRunnable = overlayManager;
+ mOverlayPackageRunnable = overlayPackage;
+ Log.w("SystemNavigationGestureSettings", "1216 setCurrentSystemNavigationMode ");
+ mHandler.removeCallbacks(mRunnable);
+ mHandler.postDelayed(mRunnable,1000);
+
+ /*try {
overlayManager.setEnabledExclusiveInCategory(overlayPackage, USER_CURRENT);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
- }
+ }*/
}
private void setIllustrationVideo(IllustrationPreference videoPref,