Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -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);
    }

}
+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 {
}
+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"
+12 −5
Original line number Diff line number Diff line
@@ -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());
+36 −0
Original line number Diff line number Diff line
@@ -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));
            }
        }
    }
}
Loading