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

Commit 2820f9d4 authored by jasonwshsu's avatar jasonwshsu
Browse files

Add setPackage() to the intent to improve safety

* Also remove setFlags() which is already handled by ActivityStarter

Bug: 400057323
Test: atest HearingDevicesDialogDelegateTest HearingDevicesDialogDelegateTest
Flag: EXEMPT bugfix
Change-Id: I1819e7284a83ef6d6dff68bd3464226270f4c733
parent f2d2c0a2
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -71,6 +71,7 @@ import com.android.systemui.bluetooth.qsdialog.DeviceItem;
import com.android.systemui.bluetooth.qsdialog.DeviceItemType;
import com.android.systemui.model.SysUiState;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.qs.shared.QSSettingsPackageRepository;
import com.android.systemui.res.R;
import com.android.systemui.statusbar.phone.SystemUIDialog;
import com.android.systemui.statusbar.phone.SystemUIDialogManager;
@@ -108,6 +109,7 @@ public class HearingDevicesDialogDelegateTest extends SysuiTestCase {
    private static final String TEST_LABEL = "label";
    private static final int TEST_PRESET_INDEX = 1;
    private static final String TEST_PRESET_NAME = "test_preset";
    private static final String SETTINGS_PACKAGE_NAME = "com.android.settings";
    private final FakeExecutor mExecutor = new FakeExecutor(new FakeSystemClock());

    @Mock
@@ -137,6 +139,8 @@ public class HearingDevicesDialogDelegateTest extends SysuiTestCase {
    @Mock
    private HearingDevicesUiEventLogger mUiEventLogger;
    @Mock
    private QSSettingsPackageRepository mQSSettingsPackageRepository;
    @Mock
    private CachedBluetoothDevice mCachedDevice;
    @Mock
    private BluetoothDevice mDevice;
@@ -164,6 +168,8 @@ public class HearingDevicesDialogDelegateTest extends SysuiTestCase {
        when(mCachedDeviceManager.getCachedDevicesCopy()).thenReturn(List.of(mCachedDevice));
        when(mLocalBluetoothManager.getEventManager()).thenReturn(mBluetoothEventManager);
        when(mSysUiState.setFlag(anyLong(), anyBoolean())).thenReturn(mSysUiState);
        when(mQSSettingsPackageRepository.getSettingsPackageName())
                .thenReturn(SETTINGS_PACKAGE_NAME);
        when(mDevice.getBondState()).thenReturn(BOND_BONDED);
        when(mDevice.isConnected()).thenReturn(true);
        when(mCachedDevice.getDevice()).thenReturn(mDevice);
@@ -195,6 +201,7 @@ public class HearingDevicesDialogDelegateTest extends SysuiTestCase {
                anyInt(), any());
        assertThat(intentCaptor.getValue().getAction()).isEqualTo(
                Settings.ACTION_HEARING_DEVICE_PAIRING_SETTINGS);
        assertThat(intentCaptor.getValue().getPackage()).isEqualTo(SETTINGS_PACKAGE_NAME);
        verify(mUiEventLogger).log(HearingDevicesUiEvent.HEARING_DEVICES_PAIR,
                TEST_LAUNCH_SOURCE_ID);
    }
@@ -210,6 +217,7 @@ public class HearingDevicesDialogDelegateTest extends SysuiTestCase {
                anyInt(), any());
        assertThat(intentCaptor.getValue().getAction()).isEqualTo(
                HearingDevicesDialogDelegate.ACTION_BLUETOOTH_DEVICE_DETAILS);
        assertThat(intentCaptor.getValue().getPackage()).isEqualTo(SETTINGS_PACKAGE_NAME);
        verify(mUiEventLogger).log(HearingDevicesUiEvent.HEARING_DEVICES_GEAR_CLICK,
                TEST_LAUNCH_SOURCE_ID);
    }
@@ -392,7 +400,8 @@ public class HearingDevicesDialogDelegateTest extends SysuiTestCase {
                mExecutor,
                mExecutor,
                mAudioManager,
                mUiEventLogger
                mUiEventLogger,
                mQSSettingsPackageRepository
        );
        mDialog = mDialogDelegate.createDialog();
    }
+11 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import com.android.systemui.accessibility.hearingaid.HearingDevicesDialogManager
import com.android.systemui.accessibility.hearingaid.HearingDevicesUiEventLogger.Companion.LAUNCH_SOURCE_QS_TILE
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.testScope
import com.android.systemui.qs.shared.QSSettingsPackageRepository
import com.android.systemui.qs.tiles.base.actions.FakeQSTileIntentUserInputHandler
import com.android.systemui.qs.tiles.base.actions.QSTileIntentUserInputHandlerSubject
import com.android.systemui.qs.tiles.base.interactor.QSTileInputTestKtx
@@ -40,6 +41,7 @@ import org.mockito.junit.MockitoJUnit
import org.mockito.junit.MockitoRule
import org.mockito.kotlin.anyOrNull
import org.mockito.kotlin.verify
import org.mockito.kotlin.whenever

@SmallTest
@EnabledOnRavenwood
@@ -53,14 +55,18 @@ class HearingDevicesTileUserActionInteractorTest : SysuiTestCase() {

    @Rule @JvmField val mockitoRule: MockitoRule = MockitoJUnit.rule()
    @Mock private lateinit var dialogManager: HearingDevicesDialogManager
    @Mock private lateinit var settingsPackageRepository: QSSettingsPackageRepository

    @Before
    fun setUp() {
        whenever(settingsPackageRepository.getSettingsPackageName())
            .thenReturn(SETTINGS_PACKAGE_NAME)
        underTest =
            HearingDevicesTileUserActionInteractor(
                testScope.coroutineContext,
                inputHandler,
                dialogManager,
                settingsPackageRepository,
            )
    }

@@ -91,6 +97,11 @@ class HearingDevicesTileUserActionInteractorTest : SysuiTestCase() {

            QSTileIntentUserInputHandlerSubject.assertThat(inputHandler).handledOneIntentInput {
                assertThat(it.intent.action).isEqualTo(Settings.ACTION_HEARING_DEVICES_SETTINGS)
                assertThat(it.intent.`package`).isEqualTo(SETTINGS_PACKAGE_NAME)
            }
        }

    companion object {
        private const val SETTINGS_PACKAGE_NAME = "com.android.settings"
    }
}
+13 −8
Original line number Diff line number Diff line
@@ -71,6 +71,7 @@ import com.android.systemui.bluetooth.qsdialog.SavedHearingDeviceItemFactory;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.qs.shared.QSSettingsPackageRepository;
import com.android.systemui.res.R;
import com.android.systemui.statusbar.phone.SystemUIDialog;

@@ -111,6 +112,7 @@ public class HearingDevicesDialogDelegate implements SystemUIDialog.Delegate,
    private final HearingDevicesUiEventLogger mUiEventLogger;
    private final boolean mShowPairNewDevice;
    private final int mLaunchSourceId;
    private final QSSettingsPackageRepository mQSSettingsPackageRepository;

    private SystemUIDialog mDialog;
    private HearingDevicesListAdapter mDeviceListAdapter;
@@ -171,7 +173,8 @@ public class HearingDevicesDialogDelegate implements SystemUIDialog.Delegate,
            @Main Executor mainExecutor,
            @Background Executor bgExecutor,
            AudioManager audioManager,
            HearingDevicesUiEventLogger uiEventLogger) {
            HearingDevicesUiEventLogger uiEventLogger,
            QSSettingsPackageRepository qsSettingsPackageRepository) {
        mShowPairNewDevice = showPairNewDevice;
        mSystemUIDialogFactory = systemUIDialogFactory;
        mActivityStarter = activityStarter;
@@ -183,6 +186,7 @@ public class HearingDevicesDialogDelegate implements SystemUIDialog.Delegate,
        mProfileManager = localBluetoothManager.getProfileManager();
        mUiEventLogger = uiEventLogger;
        mLaunchSourceId = launchSourceId;
        mQSSettingsPackageRepository = qsSettingsPackageRepository;
    }

    @Override
@@ -198,11 +202,11 @@ public class HearingDevicesDialogDelegate implements SystemUIDialog.Delegate,
    public void onDeviceItemGearClicked(@NonNull DeviceItem deviceItem, @NonNull View view) {
        mUiEventLogger.log(HearingDevicesUiEvent.HEARING_DEVICES_GEAR_CLICK, mLaunchSourceId);
        dismissDialogIfExists();
        Intent intent = new Intent(ACTION_BLUETOOTH_DEVICE_DETAILS);
        Bundle bundle = new Bundle();
        bundle.putString(KEY_BLUETOOTH_ADDRESS, deviceItem.getCachedBluetoothDevice().getAddress());
        intent.putExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS, bundle);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        Intent intent = new Intent(ACTION_BLUETOOTH_DEVICE_DETAILS)
                .setPackage(mQSSettingsPackageRepository.getSettingsPackageName())
                .putExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS, bundle);
        mActivityStarter.postStartActivityDismissingKeyguard(intent, /* delay= */ 0,
                mDialogTransitionAnimator.createActivityTransitionController(view));
    }
@@ -401,8 +405,8 @@ public class HearingDevicesDialogDelegate implements SystemUIDialog.Delegate,
            pairButton.setOnClickListener(v -> {
                mUiEventLogger.log(HearingDevicesUiEvent.HEARING_DEVICES_PAIR, mLaunchSourceId);
                dismissDialogIfExists();
                final Intent intent = new Intent(Settings.ACTION_HEARING_DEVICE_PAIRING_SETTINGS);
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                final Intent intent = new Intent(Settings.ACTION_HEARING_DEVICE_PAIRING_SETTINGS)
                        .setPackage(mQSSettingsPackageRepository.getSettingsPackageName());
                mActivityStarter.postStartActivityDismissingKeyguard(intent, /* delay= */ 0,
                        mDialogTransitionAnimator.createActivityTransitionController(dialog));
            });
@@ -523,8 +527,9 @@ public class HearingDevicesDialogDelegate implements SystemUIDialog.Delegate,
                    com.android.internal.R.color.materialColorOnPrimaryContainer));
        }
        text.setText(item.getToolName());
        Intent intent = item.getToolIntent();
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        Intent intent = item.getToolIntent()
                .setPackage(mQSSettingsPackageRepository.getSettingsPackageName());

        view.setOnClickListener(v -> {
            final String name = intent.getComponent() != null
                    ? intent.getComponent().flattenToString()
+4 −1
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.provider.Settings
import com.android.systemui.accessibility.hearingaid.HearingDevicesDialogManager
import com.android.systemui.accessibility.hearingaid.HearingDevicesUiEventLogger.Companion.LAUNCH_SOURCE_QS_TILE
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.qs.shared.QSSettingsPackageRepository
import com.android.systemui.qs.tiles.base.actions.QSTileIntentUserInputHandler
import com.android.systemui.qs.tiles.base.interactor.QSTileInput
import com.android.systemui.qs.tiles.base.interactor.QSTileUserActionInteractor
@@ -37,6 +38,7 @@ constructor(
    @Main private val mainContext: CoroutineContext,
    private val qsTileIntentUserActionHandler: QSTileIntentUserInputHandler,
    private val hearingDevicesDialogManager: HearingDevicesDialogManager,
    private val settingsPackageRepository: QSSettingsPackageRepository,
) : QSTileUserActionInteractor<HearingDevicesTileModel> {

    override suspend fun handleInput(input: QSTileInput<HearingDevicesTileModel>) =
@@ -53,7 +55,8 @@ constructor(
                is QSTileUserAction.LongClick -> {
                    qsTileIntentUserActionHandler.handle(
                        action.expandable,
                        Intent(Settings.ACTION_HEARING_DEVICES_SETTINGS),
                        Intent(Settings.ACTION_HEARING_DEVICES_SETTINGS)
                            .setPackage(settingsPackageRepository.getSettingsPackageName()),
                    )
                }
                is QSTileUserAction.ToggleClick -> {}