Skip to content
Snippets Groups Projects
Commit 88cc4aeb authored by Sukesh Ram's avatar Sukesh Ram Committed by Android (Google) Code Review
Browse files

Merge "Add navigation bar button logs" into main

parents 6235011d 01577dbb
No related branches found
No related tags found
No related merge requests found
......@@ -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);
}
}
/*
* 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 {
}
/*
* 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"
......@@ -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;
......@@ -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
......@@ -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;
......@@ -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);
......@@ -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();
......@@ -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);
......@@ -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);
......@@ -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());
......
......@@ -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;
......@@ -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(
......@@ -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));
}
}
}
}
......@@ -59,6 +59,7 @@ import com.android.internal.logging.UiEventLoggerImpl;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.systemui.Dependency;
import com.android.systemui.assist.AssistManager;
import com.android.systemui.navigationbar.NavBarButtonClickLogger;
import com.android.systemui.recents.OverviewProxyService;
import com.android.systemui.res.R;
import com.android.systemui.shared.navigationbar.KeyButtonRipple;
......@@ -86,6 +87,7 @@ public class KeyButtonView extends ImageView implements ButtonInterface {
private final Paint mOvalBgPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);
private float mDarkIntensity;
private boolean mHasOvalBg = false;
private NavBarButtonClickLogger mNavBarButtonClickLogger;
@VisibleForTesting
public enum NavBarButtonEvent implements UiEventLogger.UiEventEnum {
......@@ -197,6 +199,10 @@ public class KeyButtonView extends ImageView implements ButtonInterface {
mOnClickListener = onClickListener;
}
public void setNavBarButtonClickLogger(NavBarButtonClickLogger navBarButtonClickLogger) {
mNavBarButtonClickLogger = navBarButtonClickLogger;
}
public void loadAsync(Icon icon) {
new AsyncTask<Icon, Void, Drawable>() {
@Override
......@@ -389,11 +395,19 @@ public class KeyButtonView extends ImageView implements ButtonInterface {
uiEvent = longPressSet
? NavBarButtonEvent.NAVBAR_BACK_BUTTON_LONGPRESS
: NavBarButtonEvent.NAVBAR_BACK_BUTTON_TAP;
if (mNavBarButtonClickLogger != null) {
mNavBarButtonClickLogger.logBackButtonClick();
}
break;
case KeyEvent.KEYCODE_HOME:
uiEvent = longPressSet
? NavBarButtonEvent.NAVBAR_HOME_BUTTON_LONGPRESS
: NavBarButtonEvent.NAVBAR_HOME_BUTTON_TAP;
if (mNavBarButtonClickLogger != null) {
mNavBarButtonClickLogger.logHomeButtonClick();
}
break;
case KeyEvent.KEYCODE_APP_SWITCH:
uiEvent = longPressSet
......
......@@ -182,6 +182,8 @@ public class NavigationBarTest extends SysuiTestCase {
@Mock
private UiEventLogger mUiEventLogger;
@Mock
private NavBarButtonClickLogger mNavBarButtonClickLogger;
@Mock
private ViewTreeObserver mViewTreeObserver;
NavBarHelper mNavBarHelper;
@Mock
......@@ -596,7 +598,8 @@ public class NavigationBarTest extends SysuiTestCase {
mUserContextProvider,
mWakefulnessLifecycle,
mTaskStackChangeListeners,
new FakeDisplayTracker(mContext)));
new FakeDisplayTracker(mContext),
mNavBarButtonClickLogger));
}
private void processAllMessages() {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment