Loading packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java +9 −0 Original line number Diff line number Diff line Loading @@ -628,4 +628,13 @@ public class LogModule { public static LogBuffer providePackageChangeRepoLogBuffer(LogBufferFactory factory) { return factory.create("PackageChangeRepo", 50); } /** Provides a {@link LogBuffer} for NavBarButtonClicks. */ @Provides @SysUISingleton @NavBarButtonClickLog public static LogBuffer provideNavBarButtonClickLogBuffer(LogBufferFactory factory) { return factory.create("NavBarButtonClick", 50); } } packages/SystemUI/src/com/android/systemui/log/dagger/NavBarButtonClickLog.java 0 → 100644 +34 −0 Original line number Diff line number Diff line /* * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.systemui.log.dagger; import static java.lang.annotation.RetentionPolicy.RUNTIME; import com.android.systemui.log.LogBuffer; import java.lang.annotation.Documented; import java.lang.annotation.Retention; import javax.inject.Qualifier; /** A {@link LogBuffer} for {@link com.android.systemui.navigationbar.NavigationBar}. */ @Qualifier @Documented @Retention(RUNTIME) public @interface NavBarButtonClickLog { } packages/SystemUI/src/com/android/systemui/navigationbar/NavBarButtonClickLogger.kt 0 → 100644 +48 −0 Original line number Diff line number Diff line /* * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.systemui.navigationbar import com.android.systemui.log.LogBuffer import com.android.systemui.log.core.LogLevel import com.android.systemui.log.dagger.NavBarButtonClickLog import javax.inject.Inject class NavBarButtonClickLogger @Inject constructor(@NavBarButtonClickLog private val buffer: LogBuffer) { fun logHomeButtonClick() { buffer.log(TAG, LogLevel.DEBUG, {}, { "Home Button Triggered" }) } fun logBackButtonClick() { buffer.log(TAG, LogLevel.DEBUG, {}, { "Back Button Triggered" }) } fun logRecentsButtonClick() { buffer.log(TAG, LogLevel.DEBUG, {}, { "Recents Button Triggered" }) } fun logImeSwitcherClick() { buffer.log(TAG, LogLevel.DEBUG, {}, { "Ime Switcher Triggered" }) } fun logAccessibilityButtonClick() { buffer.log(TAG, LogLevel.DEBUG, {}, { "Accessibility Button Triggered" }) } } private const val TAG = "NavBarButtonClick" packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java +12 −5 Original line number Diff line number Diff line Loading @@ -84,11 +84,7 @@ import android.view.InsetsFrameProvider; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.Surface; import android.view.SurfaceControl; import android.view.SurfaceControl.Transaction; import android.view.View; import android.view.ViewRootImpl; import android.view.ViewRootImpl.SurfaceChangedCallback; import android.view.ViewTreeObserver; import android.view.ViewTreeObserver.InternalInsetsInfo; import android.view.ViewTreeObserver.OnComputeInternalInsetsListener; Loading Loading @@ -285,6 +281,7 @@ public class NavigationBar extends ViewController<NavigationBarView> implements private boolean mImeVisible; private final Rect mSamplingBounds = new Rect(); private final Binder mInsetsSourceOwner = new Binder(); private final NavBarButtonClickLogger mNavBarButtonClickLogger; /** * When quickswitching between apps of different orientations, we draw a secondary home handle Loading Loading @@ -559,7 +556,8 @@ public class NavigationBar extends ViewController<NavigationBarView> implements UserContextProvider userContextProvider, WakefulnessLifecycle wakefulnessLifecycle, TaskStackChangeListeners taskStackChangeListeners, DisplayTracker displayTracker) { DisplayTracker displayTracker, NavBarButtonClickLogger navBarButtonClickLogger) { super(navigationBarView); mFrame = navigationBarFrame; mContext = context; Loading Loading @@ -601,6 +599,7 @@ public class NavigationBar extends ViewController<NavigationBarView> implements mTaskStackChangeListeners = taskStackChangeListeners; mDisplayTracker = displayTracker; mEdgeBackGestureHandler = navBarHelper.getEdgeBackGestureHandler(); mNavBarButtonClickLogger = navBarButtonClickLogger; mNavColorSampleMargin = getResources() .getDimensionPixelSize(R.dimen.navigation_handle_sample_horizontal_margin); Loading Loading @@ -1276,6 +1275,10 @@ public class NavigationBar extends ViewController<NavigationBarView> implements ButtonDispatcher homeButton = mView.getHomeButton(); homeButton.setOnTouchListener(this::onHomeTouch); homeButton.setNavBarButtonClickLogger(mNavBarButtonClickLogger); ButtonDispatcher backButton = mView.getBackButton(); backButton.setNavBarButtonClickLogger(mNavBarButtonClickLogger); reconfigureHomeLongClick(); Loading Loading @@ -1388,6 +1391,8 @@ public class NavigationBar extends ViewController<NavigationBarView> implements } private void onRecentsClick(View v) { mNavBarButtonClickLogger.logRecentsButtonClick(); if (LatencyTracker.isEnabled(mContext)) { LatencyTracker.getInstance(mContext).onActionStart( LatencyTracker.ACTION_TOGGLE_RECENTS); Loading @@ -1397,6 +1402,7 @@ public class NavigationBar extends ViewController<NavigationBarView> implements } private void onImeSwitcherClick(View v) { mNavBarButtonClickLogger.logImeSwitcherClick(); mInputMethodManager.showInputMethodPickerFromSystem( true /* showAuxiliarySubtypes */, mDisplayId); mUiEventLogger.log(KeyButtonView.NavBarButtonEvent.NAVBAR_IME_SWITCHER_BUTTON_TAP); Loading Loading @@ -1486,6 +1492,7 @@ public class NavigationBar extends ViewController<NavigationBarView> implements } private void onAccessibilityClick(View v) { mNavBarButtonClickLogger.logAccessibilityButtonClick(); final Display display = v.getDisplay(); mAccessibilityManager.notifyAccessibilityButtonClicked( display != null ? display.getDisplayId() : mDisplayTracker.getDefaultDisplayId()); Loading packages/SystemUI/src/com/android/systemui/navigationbar/buttons/ButtonDispatcher.java +36 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,9 @@ import android.animation.AnimatorListenerAdapter; import android.animation.ValueAnimator; import android.view.View; import android.view.View.AccessibilityDelegate; import android.view.ViewGroup; import com.android.systemui.navigationbar.NavBarButtonClickLogger; import java.util.ArrayList; Loading Loading @@ -52,6 +55,7 @@ public class ButtonDispatcher { private boolean mVertical; private ValueAnimator mFadeAnimator; private AccessibilityDelegate mAccessibilityDelegate; private NavBarButtonClickLogger mNavBarButtonClickLogger; private final ValueAnimator.AnimatorUpdateListener mAlphaListener = animation -> setAlpha( Loading Loading @@ -341,4 +345,36 @@ public class ButtonDispatcher { */ public void onDestroy() { } /** * Sets the NavBarButtonClickLogger for all the KeyButtonViews respectively. */ public void setNavBarButtonClickLogger(NavBarButtonClickLogger navBarButtonClickLogger) { if (navBarButtonClickLogger != null) { mNavBarButtonClickLogger = navBarButtonClickLogger; final int size = mViews.size(); for (int i = 0; i < size; i++) { final View v = mViews.get(i); setNavBarButtonClickLoggerForViewChildren(v); } } } /** * Recursively explores view hierarchy until the children of provided view are of type * KeyButtonView, so the NavBarButtonClickLogger can be set on them. */ private void setNavBarButtonClickLoggerForViewChildren(View v) { if (v instanceof KeyButtonView) { ((KeyButtonView) v).setNavBarButtonClickLogger(mNavBarButtonClickLogger); return; } if (v instanceof ViewGroup viewGroup) { final int childrenCount = viewGroup.getChildCount(); for (int i = 0; i < childrenCount; i++) { setNavBarButtonClickLoggerForViewChildren(viewGroup.getChildAt(i)); } } } } Loading
packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java +9 −0 Original line number Diff line number Diff line Loading @@ -628,4 +628,13 @@ public class LogModule { public static LogBuffer providePackageChangeRepoLogBuffer(LogBufferFactory factory) { return factory.create("PackageChangeRepo", 50); } /** Provides a {@link LogBuffer} for NavBarButtonClicks. */ @Provides @SysUISingleton @NavBarButtonClickLog public static LogBuffer provideNavBarButtonClickLogBuffer(LogBufferFactory factory) { return factory.create("NavBarButtonClick", 50); } }
packages/SystemUI/src/com/android/systemui/log/dagger/NavBarButtonClickLog.java 0 → 100644 +34 −0 Original line number Diff line number Diff line /* * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.systemui.log.dagger; import static java.lang.annotation.RetentionPolicy.RUNTIME; import com.android.systemui.log.LogBuffer; import java.lang.annotation.Documented; import java.lang.annotation.Retention; import javax.inject.Qualifier; /** A {@link LogBuffer} for {@link com.android.systemui.navigationbar.NavigationBar}. */ @Qualifier @Documented @Retention(RUNTIME) public @interface NavBarButtonClickLog { }
packages/SystemUI/src/com/android/systemui/navigationbar/NavBarButtonClickLogger.kt 0 → 100644 +48 −0 Original line number Diff line number Diff line /* * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.systemui.navigationbar import com.android.systemui.log.LogBuffer import com.android.systemui.log.core.LogLevel import com.android.systemui.log.dagger.NavBarButtonClickLog import javax.inject.Inject class NavBarButtonClickLogger @Inject constructor(@NavBarButtonClickLog private val buffer: LogBuffer) { fun logHomeButtonClick() { buffer.log(TAG, LogLevel.DEBUG, {}, { "Home Button Triggered" }) } fun logBackButtonClick() { buffer.log(TAG, LogLevel.DEBUG, {}, { "Back Button Triggered" }) } fun logRecentsButtonClick() { buffer.log(TAG, LogLevel.DEBUG, {}, { "Recents Button Triggered" }) } fun logImeSwitcherClick() { buffer.log(TAG, LogLevel.DEBUG, {}, { "Ime Switcher Triggered" }) } fun logAccessibilityButtonClick() { buffer.log(TAG, LogLevel.DEBUG, {}, { "Accessibility Button Triggered" }) } } private const val TAG = "NavBarButtonClick"
packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java +12 −5 Original line number Diff line number Diff line Loading @@ -84,11 +84,7 @@ import android.view.InsetsFrameProvider; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.Surface; import android.view.SurfaceControl; import android.view.SurfaceControl.Transaction; import android.view.View; import android.view.ViewRootImpl; import android.view.ViewRootImpl.SurfaceChangedCallback; import android.view.ViewTreeObserver; import android.view.ViewTreeObserver.InternalInsetsInfo; import android.view.ViewTreeObserver.OnComputeInternalInsetsListener; Loading Loading @@ -285,6 +281,7 @@ public class NavigationBar extends ViewController<NavigationBarView> implements private boolean mImeVisible; private final Rect mSamplingBounds = new Rect(); private final Binder mInsetsSourceOwner = new Binder(); private final NavBarButtonClickLogger mNavBarButtonClickLogger; /** * When quickswitching between apps of different orientations, we draw a secondary home handle Loading Loading @@ -559,7 +556,8 @@ public class NavigationBar extends ViewController<NavigationBarView> implements UserContextProvider userContextProvider, WakefulnessLifecycle wakefulnessLifecycle, TaskStackChangeListeners taskStackChangeListeners, DisplayTracker displayTracker) { DisplayTracker displayTracker, NavBarButtonClickLogger navBarButtonClickLogger) { super(navigationBarView); mFrame = navigationBarFrame; mContext = context; Loading Loading @@ -601,6 +599,7 @@ public class NavigationBar extends ViewController<NavigationBarView> implements mTaskStackChangeListeners = taskStackChangeListeners; mDisplayTracker = displayTracker; mEdgeBackGestureHandler = navBarHelper.getEdgeBackGestureHandler(); mNavBarButtonClickLogger = navBarButtonClickLogger; mNavColorSampleMargin = getResources() .getDimensionPixelSize(R.dimen.navigation_handle_sample_horizontal_margin); Loading Loading @@ -1276,6 +1275,10 @@ public class NavigationBar extends ViewController<NavigationBarView> implements ButtonDispatcher homeButton = mView.getHomeButton(); homeButton.setOnTouchListener(this::onHomeTouch); homeButton.setNavBarButtonClickLogger(mNavBarButtonClickLogger); ButtonDispatcher backButton = mView.getBackButton(); backButton.setNavBarButtonClickLogger(mNavBarButtonClickLogger); reconfigureHomeLongClick(); Loading Loading @@ -1388,6 +1391,8 @@ public class NavigationBar extends ViewController<NavigationBarView> implements } private void onRecentsClick(View v) { mNavBarButtonClickLogger.logRecentsButtonClick(); if (LatencyTracker.isEnabled(mContext)) { LatencyTracker.getInstance(mContext).onActionStart( LatencyTracker.ACTION_TOGGLE_RECENTS); Loading @@ -1397,6 +1402,7 @@ public class NavigationBar extends ViewController<NavigationBarView> implements } private void onImeSwitcherClick(View v) { mNavBarButtonClickLogger.logImeSwitcherClick(); mInputMethodManager.showInputMethodPickerFromSystem( true /* showAuxiliarySubtypes */, mDisplayId); mUiEventLogger.log(KeyButtonView.NavBarButtonEvent.NAVBAR_IME_SWITCHER_BUTTON_TAP); Loading Loading @@ -1486,6 +1492,7 @@ public class NavigationBar extends ViewController<NavigationBarView> implements } private void onAccessibilityClick(View v) { mNavBarButtonClickLogger.logAccessibilityButtonClick(); final Display display = v.getDisplay(); mAccessibilityManager.notifyAccessibilityButtonClicked( display != null ? display.getDisplayId() : mDisplayTracker.getDefaultDisplayId()); Loading
packages/SystemUI/src/com/android/systemui/navigationbar/buttons/ButtonDispatcher.java +36 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,9 @@ import android.animation.AnimatorListenerAdapter; import android.animation.ValueAnimator; import android.view.View; import android.view.View.AccessibilityDelegate; import android.view.ViewGroup; import com.android.systemui.navigationbar.NavBarButtonClickLogger; import java.util.ArrayList; Loading Loading @@ -52,6 +55,7 @@ public class ButtonDispatcher { private boolean mVertical; private ValueAnimator mFadeAnimator; private AccessibilityDelegate mAccessibilityDelegate; private NavBarButtonClickLogger mNavBarButtonClickLogger; private final ValueAnimator.AnimatorUpdateListener mAlphaListener = animation -> setAlpha( Loading Loading @@ -341,4 +345,36 @@ public class ButtonDispatcher { */ public void onDestroy() { } /** * Sets the NavBarButtonClickLogger for all the KeyButtonViews respectively. */ public void setNavBarButtonClickLogger(NavBarButtonClickLogger navBarButtonClickLogger) { if (navBarButtonClickLogger != null) { mNavBarButtonClickLogger = navBarButtonClickLogger; final int size = mViews.size(); for (int i = 0; i < size; i++) { final View v = mViews.get(i); setNavBarButtonClickLoggerForViewChildren(v); } } } /** * Recursively explores view hierarchy until the children of provided view are of type * KeyButtonView, so the NavBarButtonClickLogger can be set on them. */ private void setNavBarButtonClickLoggerForViewChildren(View v) { if (v instanceof KeyButtonView) { ((KeyButtonView) v).setNavBarButtonClickLogger(mNavBarButtonClickLogger); return; } if (v instanceof ViewGroup viewGroup) { final int childrenCount = viewGroup.getChildCount(); for (int i = 0; i < childrenCount; i++) { setNavBarButtonClickLoggerForViewChildren(viewGroup.getChildAt(i)); } } } }