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

Commit d82c2792 authored by Vaibhav Devmurari's avatar Vaibhav Devmurari
Browse files

Allow Meta+Ctrl+Backspace for bug report for user builds

AL provides the Bug handler for user builds so need a shortcut
to fire it on user builds. For AOSP, we don't provide a bug
handler app in user build, and will do nothing. OEMs already have
config to enable/disable bug handling and it will respected for
the shortcut.

Bug: 431248889
Test: Presubmit
Flag: EXEMPT bugfix
Change-Id: I2099da8e285f6280ea7f7e15211a7e00372e14ad
parent ff09c42b
Loading
Loading
Loading
Loading
+7 −10
Original line number Diff line number Diff line
@@ -33,7 +33,6 @@ import android.content.Context;
import android.hardware.input.InputGestureData;
import android.hardware.input.InputManager;
import android.hardware.input.KeyGestureEvent;
import android.os.SystemProperties;
import android.util.IndentingPrintWriter;
import android.util.SparseArray;
import android.view.KeyEvent;
@@ -195,7 +194,6 @@ final class InputGestureManager {
                        /* allowCaptureByFocusedWindow = */true
                )
        ));
        if ("1".equals(SystemProperties.get("ro.debuggable"))) {
        systemShortcuts.add(
                createKeyGesture(
                        KeyEvent.KEYCODE_DEL,
@@ -203,7 +201,6 @@ final class InputGestureManager {
                        KeyGestureEvent.KEY_GESTURE_TYPE_TRIGGER_BUG_REPORT,
                        /* allowCaptureByFocusedWindow = */true
                ));
        }
        if (DesktopExperienceFlags.ENABLE_MOVE_TO_NEXT_DISPLAY_SHORTCUT.isTrue()) {
            systemShortcuts.add(
                    createKeyGesture(
+8 −6
Original line number Diff line number Diff line
@@ -492,9 +492,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    // Assigned on main thread, accessed on UI thread
    volatile VrManagerInternal mVrManagerInternal;

    /** If true, can use a keyboard shortcut to trigger a bugreport. */
    boolean mEnableBugReportKeyboardShortcut = false;

    private TalkbackShortcutController mTalkbackShortcutController;

    private WindowWakeUpPolicy mWindowWakeUpPolicy;
@@ -2360,7 +2357,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                "PhoneWindowManager.mBroadcastWakeLock");
        mPowerKeyWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
                "PhoneWindowManager.mPowerKeyWakeLock");
        mEnableBugReportKeyboardShortcut = "1".equals(SystemProperties.get("ro.debuggable"));
        mLidKeyboardAccessibility = mContext.getResources().getInteger(
                com.android.internal.R.integer.config_lidKeyboardAccessibility);
        mLidNavigationAccessibility = mContext.getResources().getInteger(
@@ -3551,11 +3547,17 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                }
                break;
            case KeyGestureEvent.KEY_GESTURE_TYPE_TRIGGER_BUG_REPORT:
                if (complete && mEnableBugReportKeyboardShortcut) {
                if (complete) {
                    try {
                        if (!mActivityManagerService.launchBugReportHandlerApp()) {
                        if (mActivityManagerService.launchBugReportHandlerApp()) {
                            return;
                        }
                        // Take bug report only for debuggable builds as a fallback when there is
                        // no bug handler or feedback app on the system image.
                        if ("1".equals(SystemProperties.get("ro.debuggable"))) {
                            mActivityManagerService.requestInteractiveBugReport();
                        }
                        return;
                    } catch (RemoteException e) {
                        Slog.d(TAG, "Error taking bugreport", e);
                    }
+14 −3
Original line number Diff line number Diff line
@@ -159,7 +159,6 @@ public class KeyGestureEventTests extends ShortcutKeyTestBase {
    public void setUp() {
        setUpPhoneWindowManager(/*supportSettingsUpdate*/ true, /* supportFeature */ "");
        mPhoneWindowManager.overrideLaunchHome();
        mPhoneWindowManager.overrideEnableBugReportTrigger(true);
        mPhoneWindowManager.overrideStatusBarManagerInternal();
        mPhoneWindowManager.overrideStartActivity();
        mPhoneWindowManager.overrideSendBroadcast();
@@ -269,9 +268,21 @@ public class KeyGestureEventTests extends ShortcutKeyTestBase {
    }

    @Test
    public void testKeyGestureTriggerBugReport() throws RemoteException {
    public void testKeyGestureTriggerBugReport_opensBugHandler() throws RemoteException {
        mPhoneWindowManager.overrideBugHandler(true);

        sendKeyGestureEventComplete(KeyGestureEvent.KEY_GESTURE_TYPE_TRIGGER_BUG_REPORT);
        mPhoneWindowManager.assertOpenBugHandler();
    }

    @Test
    public void testKeyGestureTriggerBugReport_takeBugReportIfHandlerNotPresent()
            throws RemoteException {
        mPhoneWindowManager.overrideDebuggable(true);
        mPhoneWindowManager.overrideBugHandler(false);

        sendKeyGestureEventComplete(KeyGestureEvent.KEY_GESTURE_TYPE_TRIGGER_BUG_REPORT);
        mPhoneWindowManager.assertTakeBugreport(true);
        mPhoneWindowManager.assertTakeBugReport();
    }

    @Test
+14 −8
Original line number Diff line number Diff line
@@ -84,6 +84,7 @@ import android.os.Looper;
import android.os.PowerManager;
import android.os.PowerManagerInternal;
import android.os.RemoteException;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.Vibrator;
import android.os.VibratorInfo;
@@ -279,6 +280,7 @@ class TestPhoneWindowManager {
                .mockStatic(LocalServices.class, spyStubOnly)
                .mockStatic(KeyCharacterMap.class)
                .mockStatic(GestureLauncherService.class)
                .mockStatic(SystemProperties.class)
                .strictness(Strictness.LENIENT)
                .startMocking();

@@ -634,8 +636,12 @@ class TestPhoneWindowManager {
        verify(mInputManager, never()).injectInputEvent(any(), anyInt());
    }

    void overrideEnableBugReportTrigger(boolean enable) {
        mPhoneWindowManager.mEnableBugReportKeyboardShortcut = enable;
    void overrideBugHandler(boolean bugHandlerExist) throws RemoteException {
        doReturn(bugHandlerExist).when(mActivityManagerService).launchBugReportHandlerApp();
    }

    void overrideDebuggable(boolean debuggable) {
        doReturn(debuggable ? "1" : "0").when(() -> SystemProperties.get(eq("ro.debuggable")));
    }

    void overrideStartActivity() {
@@ -847,14 +853,14 @@ class TestPhoneWindowManager {
                eq(displayId), eq(mImeTargetWindowToken));
    }

    void assertTakeBugreport(boolean wasCalled) throws RemoteException {
    void assertOpenBugHandler() throws RemoteException {
        mTestLooper.dispatchAll();
        if (wasCalled) {
        verify(mActivityManagerService).launchBugReportHandlerApp();
        } else {
            verify(mActivityManagerService, never()).launchBugReportHandlerApp();
    }

    void assertTakeBugReport() throws RemoteException {
        mTestLooper.dispatchAll();
        verify(mActivityManagerService).requestInteractiveBugReport();
    }

    void assertBugReportTakenForTv() {
+0 −3
Original line number Diff line number Diff line
@@ -32,7 +32,6 @@ import android.os.Handler
import android.os.IBinder
import android.os.Process
import android.os.SystemClock
import android.os.SystemProperties
import android.os.test.TestLooper
import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
@@ -163,7 +162,6 @@ class KeyGestureControllerTests {
    val extendedMockitoRule =
        ExtendedMockitoRule.Builder(this)
            .mockStatic(FrameworkStatsLog::class.java)
            .mockStatic(SystemProperties::class.java)
            .mockStatic(KeyCharacterMap::class.java)
            .mockStatic(DeviceConfig::class.java)
            .mockStatic(LocalServices::class.java)
@@ -234,7 +232,6 @@ class KeyGestureControllerTests {
    }

    private fun setupBehaviors() {
        Mockito.`when`(SystemProperties.get("ro.debuggable")).thenReturn("1")
        testableResources.addOverride(R.bool.config_enableScreenshotChord, true)
        ExtendedMockito.`when`(
                DeviceConfig.getLong(