summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jason Chiu <chiujason@google.com> 2024-03-25 12:15:56 +0800
committer Jason Chiu <chiujason@google.com> 2024-03-29 04:22:45 +0000
commit0bd014c4977c3c4d35daf3df390cfcdc61d18b3e (patch)
treef2bd9495232047676aac5c382ac5ed8ad16e76a1
parent9507bdb3ac5d99e156d31a65c8d772a45ccc606e (diff)
[Safer intents] Settings misc
To avoid implicit intents, make intents launch explicitly. Test: build Bug: 323061508 Change-Id: Ie19cbceb89842a75a180898abcce81b63c18d46c
-rw-r--r--res/xml/more_security_privacy_settings.xml3
-rw-r--r--res/xml/shortcuts.xml18
-rw-r--r--src/com/android/settings/BrightnessPreference.java3
-rw-r--r--src/com/android/settings/RingtonePreference.java3
-rw-r--r--src/com/android/settings/accessibility/LiveCaptionPreferenceController.java1
-rw-r--r--src/com/android/settings/accounts/AccountPreferenceController.java1
-rw-r--r--src/com/android/settings/accounts/EnterpriseDisclosurePreferenceController.java3
-rw-r--r--src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java5
-rw-r--r--src/com/android/settings/datetime/LocationToggleDisabledDialogFragment.java3
-rw-r--r--src/com/android/settings/display/AdaptiveSleepPermissionPreferenceController.java1
-rw-r--r--src/com/android/settings/display/BrightnessLevelPreferenceController.java2
-rw-r--r--src/com/android/settings/display/SmartAutoRotatePermissionController.java1
-rw-r--r--src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java22
-rw-r--r--src/com/android/settings/flashlight/FlashlightHandleActivity.java2
-rw-r--r--src/com/android/settings/homepage/SettingsHomepageActivity.java2
-rw-r--r--src/com/android/settings/homepage/contextualcards/FaceReEnrollDialog.java4
-rw-r--r--src/com/android/settings/homepage/contextualcards/conditional/AbnormalRingerConditionController.java3
-rw-r--r--src/com/android/settings/panel/VolumePanel.java4
-rw-r--r--src/com/android/settings/security/ScreenPinningSettings.java1
-rw-r--r--src/com/android/settings/slices/SliceDeepLinkSpringBoard.java2
-rw-r--r--src/com/android/settings/theme/ContrastPreferenceController.kt2
-rw-r--r--src/com/android/settings/users/UserSettings.java3
-rw-r--r--tests/robotests/src/com/android/settings/accessibility/LiveCaptionPreferenceControllerTest.java9
23 files changed, 54 insertions, 44 deletions
diff --git a/res/xml/more_security_privacy_settings.xml b/res/xml/more_security_privacy_settings.xml
index 3e11db206b5..d5ce3804b87 100644
--- a/res/xml/more_security_privacy_settings.xml
+++ b/res/xml/more_security_privacy_settings.xml
@@ -175,7 +175,8 @@
android:title="@string/financed_device_info"
android:summary="@string/summary_placeholder"
settings:controller="com.android.settings.devicelock.DeviceLockPreferenceController">
- <intent android:action="com.android.devicelockcontroller.action.DEVICE_INFO_SETTINGS"/>
+ <intent android:action="com.android.devicelockcontroller.action.DEVICE_INFO_SETTINGS"
+ android:targetPackage="@string/config_device_lock_controller_package_name"/>
</Preference>
</PreferenceCategory>
diff --git a/res/xml/shortcuts.xml b/res/xml/shortcuts.xml
index 058d22e9edf..9c9368811a8 100644
--- a/res/xml/shortcuts.xml
+++ b/res/xml/shortcuts.xml
@@ -14,12 +14,14 @@
~ See the License for the specific language governing permissions and
~ limitations under the License
-->
-<shortcuts xmlns:android="http://schemas.android.com/apk/res/android" >
+<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
<shortcut
android:shortcutId="manifest-shortcut-wifi"
android:icon="@drawable/ic_shortcut_wireless"
- android:shortcutShortLabel="@string/wifi_settings" >
- <intent android:action="android.settings.WIFI_SETTINGS" />
+ android:shortcutShortLabel="@string/wifi_settings">
+ <intent
+ android:action="android.settings.WIFI_SETTINGS"
+ android:targetPackage="${applicationId}"/>
</shortcut>
<shortcut
android:shortcutId="manifest-shortcut-data-usage"
@@ -28,13 +30,15 @@
android:shortcutShortLabel="@string/data_usage_summary_title">
<intent
android:action="android.intent.action.MAIN"
- android:targetPackage="com.android.settings"
- android:targetClass="com.android.settings.Settings$DataUsageSummaryActivity" />
+ android:targetPackage="${applicationId}"
+ android:targetClass="com.android.settings.Settings$DataUsageSummaryActivity"/>
</shortcut>
<shortcut
android:shortcutId="manifest-shortcut-battery"
android:icon="@drawable/ic_shortcut_battery"
- android:shortcutShortLabel="@string/power_usage_summary_title" >
- <intent android:action="android.intent.action.POWER_USAGE_SUMMARY" />
+ android:shortcutShortLabel="@string/power_usage_summary_title">
+ <intent
+ android:action="android.intent.action.POWER_USAGE_SUMMARY"
+ android:targetPackage="${applicationId}"/>
</shortcut>
</shortcuts> \ No newline at end of file
diff --git a/src/com/android/settings/BrightnessPreference.java b/src/com/android/settings/BrightnessPreference.java
index b3cf4335789..8c8f3f6d66e 100644
--- a/src/com/android/settings/BrightnessPreference.java
+++ b/src/com/android/settings/BrightnessPreference.java
@@ -31,7 +31,8 @@ public class BrightnessPreference extends Preference {
@Override
protected void onClick() {
- getContext().startActivityAsUser(new Intent(Intent.ACTION_SHOW_BRIGHTNESS_DIALOG),
+ getContext().startActivityAsUser(new Intent(Intent.ACTION_SHOW_BRIGHTNESS_DIALOG)
+ .setPackage(Utils.SYSTEMUI_PACKAGE_NAME),
UserHandle.CURRENT_OR_SELF);
}
}
diff --git a/src/com/android/settings/RingtonePreference.java b/src/com/android/settings/RingtonePreference.java
index de5b7c39f76..6b9dad7ffbf 100644
--- a/src/com/android/settings/RingtonePreference.java
+++ b/src/com/android/settings/RingtonePreference.java
@@ -74,7 +74,8 @@ public class RingtonePreference extends Preference {
true);
mShowSilent = a.getBoolean(com.android.internal.R.styleable.RingtonePreference_showSilent,
true);
- setIntent(new Intent(RingtoneManager.ACTION_RINGTONE_PICKER));
+ setIntent(new Intent(RingtoneManager.ACTION_RINGTONE_PICKER)
+ .setPackage(context.getString(R.string.config_sound_picker_package_name)));
setUserId(UserHandle.myUserId());
a.recycle();
}
diff --git a/src/com/android/settings/accessibility/LiveCaptionPreferenceController.java b/src/com/android/settings/accessibility/LiveCaptionPreferenceController.java
index 2d12f67fd78..f5157328ee3 100644
--- a/src/com/android/settings/accessibility/LiveCaptionPreferenceController.java
+++ b/src/com/android/settings/accessibility/LiveCaptionPreferenceController.java
@@ -39,6 +39,7 @@ public class LiveCaptionPreferenceController extends BasePreferenceController {
public LiveCaptionPreferenceController(Context context, String preferenceKey) {
super(context, preferenceKey);
mPackageManager = context.getPackageManager();
+ LIVE_CAPTION_INTENT.setPackage(mPackageManager.getSystemCaptionsServicePackageName());
}
@Override
diff --git a/src/com/android/settings/accounts/AccountPreferenceController.java b/src/com/android/settings/accounts/AccountPreferenceController.java
index 4f03303c372..b120f38e9b1 100644
--- a/src/com/android/settings/accounts/AccountPreferenceController.java
+++ b/src/com/android/settings/accounts/AccountPreferenceController.java
@@ -256,6 +256,7 @@ public class AccountPreferenceController extends AbstractPreferenceController
if (preference == profileData.addAccountPreference) {
mMetricsFeatureProvider.logClickedPreference(preference, metricsCategory);
Intent intent = new Intent(ACTION_ADD_ACCOUNT);
+ intent.setClass(mContext, AddAccountSettings.class);
intent.putExtra(EXTRA_USER, profileData.userInfo.getUserHandle());
intent.putExtra(EXTRA_AUTHORITIES, mAuthorities);
mContext.startActivity(intent);
diff --git a/src/com/android/settings/accounts/EnterpriseDisclosurePreferenceController.java b/src/com/android/settings/accounts/EnterpriseDisclosurePreferenceController.java
index f7816bb3fd6..33c494be635 100644
--- a/src/com/android/settings/accounts/EnterpriseDisclosurePreferenceController.java
+++ b/src/com/android/settings/accounts/EnterpriseDisclosurePreferenceController.java
@@ -66,7 +66,8 @@ public class EnterpriseDisclosurePreferenceController extends BasePreferenceCont
final FooterPreference footerPreference = screen.findPreference(getPreferenceKey());
footerPreference.setTitle(disclosure);
footerPreference.setLearnMoreAction(view -> {
- mContext.startActivity(new Intent(Settings.ACTION_ENTERPRISE_PRIVACY_SETTINGS));
+ mContext.startActivity(new Intent(Settings.ACTION_ENTERPRISE_PRIVACY_SETTINGS)
+ .setPackage(mContext.getPackageName()));
});
final String learnMoreText = mContext.getString(
R.string.footer_learn_more_content_description, getLabelName());
diff --git a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
index 8214d0b06be..b95d927414a 100644
--- a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
+++ b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
@@ -223,8 +223,9 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
@Override
public void openTileIntent(FragmentActivity activity, Tile tile) {
if (tile == null) {
- Intent intent = new Intent(Settings.ACTION_SETTINGS).addFlags(
- Intent.FLAG_ACTIVITY_CLEAR_TASK);
+ Intent intent = new Intent(Settings.ACTION_SETTINGS)
+ .setPackage(mContext.getPackageName())
+ .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
mContext.startActivity(intent);
return;
}
diff --git a/src/com/android/settings/datetime/LocationToggleDisabledDialogFragment.java b/src/com/android/settings/datetime/LocationToggleDisabledDialogFragment.java
index 046a659d64c..c9362c029ad 100644
--- a/src/com/android/settings/datetime/LocationToggleDisabledDialogFragment.java
+++ b/src/com/android/settings/datetime/LocationToggleDisabledDialogFragment.java
@@ -42,7 +42,8 @@ public class LocationToggleDisabledDialogFragment extends InstrumentedDialogFrag
.setPositiveButton(
R.string.location_time_zone_detection_location_is_off_dialog_ok_button,
(dialog, which) -> {
- Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
+ Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)
+ .setPackage(getContext().getPackageName());
getContext().startActivity(intent);
})
.setNegativeButton(
diff --git a/src/com/android/settings/display/AdaptiveSleepPermissionPreferenceController.java b/src/com/android/settings/display/AdaptiveSleepPermissionPreferenceController.java
index c3db6f7e3aa..03b9d096a37 100644
--- a/src/com/android/settings/display/AdaptiveSleepPermissionPreferenceController.java
+++ b/src/com/android/settings/display/AdaptiveSleepPermissionPreferenceController.java
@@ -68,6 +68,7 @@ public class AdaptiveSleepPermissionPreferenceController {
mContext.getPackageManager().getAttentionServicePackageName();
final Intent intent = new Intent(
android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
+ intent.setPackage(mContext.getPackageName());
intent.setData(Uri.parse("package:" + packageName));
mPreference = new BannerMessagePreference(mContext);
mPreference.setTitle(R.string.adaptive_sleep_title_no_permission);
diff --git a/src/com/android/settings/display/BrightnessLevelPreferenceController.java b/src/com/android/settings/display/BrightnessLevelPreferenceController.java
index 468a1d8dd7f..49b8da3d2e3 100644
--- a/src/com/android/settings/display/BrightnessLevelPreferenceController.java
+++ b/src/com/android/settings/display/BrightnessLevelPreferenceController.java
@@ -39,6 +39,7 @@ import android.text.TextUtils;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
+import com.android.settings.Utils;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.core.SettingsBaseActivity;
import com.android.settingslib.core.AbstractPreferenceController;
@@ -145,6 +146,7 @@ public class BrightnessLevelPreferenceController extends AbstractPreferenceContr
return false;
}
final Intent intent = new Intent(ACTION_SHOW_BRIGHTNESS_DIALOG);
+ intent.setPackage(Utils.SYSTEMUI_PACKAGE_NAME);
intent.putExtra(SettingsBaseActivity.EXTRA_PAGE_TRANSITION_TYPE,
SettingsTransitionHelper.TransitionType.TRANSITION_NONE);
intent.putExtra(EXTRA_BRIGHTNESS_DIALOG_IS_FULL_WIDTH, true);
diff --git a/src/com/android/settings/display/SmartAutoRotatePermissionController.java b/src/com/android/settings/display/SmartAutoRotatePermissionController.java
index aa6a96d55da..c45ab11ae0d 100644
--- a/src/com/android/settings/display/SmartAutoRotatePermissionController.java
+++ b/src/com/android/settings/display/SmartAutoRotatePermissionController.java
@@ -47,6 +47,7 @@ public class SmartAutoRotatePermissionController extends BasePreferenceControlle
final String packageName = context.getPackageManager().getRotationResolverPackageName();
mIntent = new Intent(
android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
+ mIntent.setPackage(context.getPackageName());
mIntent.setData(Uri.parse("package:" + packageName));
}
diff --git a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java
index ef542a3590f..0c8f4089628 100644
--- a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java
+++ b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java
@@ -34,8 +34,6 @@ import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
import android.text.SpannableStringBuilder;
-import android.text.style.ClickableSpan;
-import android.view.View;
import com.android.settings.R;
import com.android.settings.vpn2.VpnUtils;
@@ -303,24 +301,4 @@ public class EnterprisePrivacyFeatureProviderImpl implements EnterprisePrivacyFe
}
return UserHandle.USER_NULL;
}
-
- protected static class EnterprisePrivacySpan extends ClickableSpan {
- private final Context mContext;
-
- public EnterprisePrivacySpan(Context context) {
- mContext = context;
- }
-
- @Override
- public void onClick(View widget) {
- mContext.startActivity(new Intent(Settings.ACTION_ENTERPRISE_PRIVACY_SETTINGS)
- .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
- }
-
- @Override
- public boolean equals(Object object) {
- return object instanceof EnterprisePrivacySpan
- && ((EnterprisePrivacySpan) object).mContext == mContext;
- }
- }
}
diff --git a/src/com/android/settings/flashlight/FlashlightHandleActivity.java b/src/com/android/settings/flashlight/FlashlightHandleActivity.java
index 6740da438cf..6ae07cdcea4 100644
--- a/src/com/android/settings/flashlight/FlashlightHandleActivity.java
+++ b/src/com/android/settings/flashlight/FlashlightHandleActivity.java
@@ -52,7 +52,7 @@ public class FlashlightHandleActivity extends Activity implements Indexable {
// Caller's choice: fallback to homepage, or just exit?
if (getIntent().getBooleanExtra(EXTRA_FALLBACK_TO_HOMEPAGE, false)) {
- startActivity(new Intent(Settings.ACTION_SETTINGS));
+ startActivity(new Intent(Settings.ACTION_SETTINGS).setPackage(getPackageName()));
}
finish();
}
diff --git a/src/com/android/settings/homepage/SettingsHomepageActivity.java b/src/com/android/settings/homepage/SettingsHomepageActivity.java
index 5f091d99e61..801679992a6 100644
--- a/src/com/android/settings/homepage/SettingsHomepageActivity.java
+++ b/src/com/android/settings/homepage/SettingsHomepageActivity.java
@@ -208,6 +208,8 @@ public class SettingsHomepageActivity extends FragmentActivity implements
if (TextUtils.equals(intent.getAction(), ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY)
&& this instanceof DeepLinkHomepageActivity) {
intent.setClass(this, DeepLinkHomepageActivityInternal.class);
+ } else {
+ intent.setPackage(getPackageName());
}
intent.removeFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivityAsUser(intent, um.getProfileParent(userInfo.id).getUserHandle());
diff --git a/src/com/android/settings/homepage/contextualcards/FaceReEnrollDialog.java b/src/com/android/settings/homepage/contextualcards/FaceReEnrollDialog.java
index a8239241bf5..e2eb6ec0070 100644
--- a/src/com/android/settings/homepage/contextualcards/FaceReEnrollDialog.java
+++ b/src/com/android/settings/homepage/contextualcards/FaceReEnrollDialog.java
@@ -113,8 +113,8 @@ public class FaceReEnrollDialog extends AlertActivity implements
return;
}
// Send user to the enroll flow.
- final Intent reEnroll = new Intent(BIOMETRIC_ENROLL_ACTION);
- final Context context = getApplicationContext();
+ final Intent reEnroll = new Intent(BIOMETRIC_ENROLL_ACTION)
+ .setPackage(getPackageName());
try {
startActivity(reEnroll);
diff --git a/src/com/android/settings/homepage/contextualcards/conditional/AbnormalRingerConditionController.java b/src/com/android/settings/homepage/contextualcards/conditional/AbnormalRingerConditionController.java
index 6a66d2f9556..f8cfbea657e 100644
--- a/src/com/android/settings/homepage/contextualcards/conditional/AbnormalRingerConditionController.java
+++ b/src/com/android/settings/homepage/contextualcards/conditional/AbnormalRingerConditionController.java
@@ -42,7 +42,8 @@ public abstract class AbnormalRingerConditionController implements ConditionalCa
@Override
public void onPrimaryClick(Context context) {
- context.startActivity(new Intent(Settings.ACTION_SOUND_SETTINGS));
+ context.startActivity(new Intent(Settings.ACTION_SOUND_SETTINGS)
+ .setPackage(context.getPackageName()));
}
@Override
diff --git a/src/com/android/settings/panel/VolumePanel.java b/src/com/android/settings/panel/VolumePanel.java
index 1a53de098e0..4f38504d5e6 100644
--- a/src/com/android/settings/panel/VolumePanel.java
+++ b/src/com/android/settings/panel/VolumePanel.java
@@ -151,7 +151,9 @@ public class VolumePanel implements PanelContent, LifecycleObserver {
@Override
public Intent getSeeMoreIntent() {
- return new Intent(Settings.ACTION_SOUND_SETTINGS).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ return new Intent(Settings.ACTION_SOUND_SETTINGS)
+ .setPackage(mContext.getPackageName())
+ .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
@Override
diff --git a/src/com/android/settings/security/ScreenPinningSettings.java b/src/com/android/settings/security/ScreenPinningSettings.java
index 8690847b4d0..4d3743c4ed0 100644
--- a/src/com/android/settings/security/ScreenPinningSettings.java
+++ b/src/com/android/settings/security/ScreenPinningSettings.java
@@ -142,6 +142,7 @@ public class ScreenPinningSettings extends SettingsPreferenceFragment
if (isEnabled) {
if (passwordQuality == DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) {
Intent chooseLockIntent = new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD);
+ chooseLockIntent.setPackage(getContext().getPackageName());
chooseLockIntent.putExtra(
ChooseLockGeneric.ChooseLockGenericFragment.HIDE_INSECURE_OPTIONS,
true);
diff --git a/src/com/android/settings/slices/SliceDeepLinkSpringBoard.java b/src/com/android/settings/slices/SliceDeepLinkSpringBoard.java
index 852f2861860..e89f2c9f7e7 100644
--- a/src/com/android/settings/slices/SliceDeepLinkSpringBoard.java
+++ b/src/com/android/settings/slices/SliceDeepLinkSpringBoard.java
@@ -67,7 +67,7 @@ public class SliceDeepLinkSpringBoard extends Activity {
finish();
} catch (Exception e) {
Log.w(TAG, "Couldn't launch Slice intent", e);
- startActivity(new Intent(Settings.ACTION_SETTINGS));
+ startActivity(new Intent(Settings.ACTION_SETTINGS).setPackage(getPackageName()));
finish();
}
}
diff --git a/src/com/android/settings/theme/ContrastPreferenceController.kt b/src/com/android/settings/theme/ContrastPreferenceController.kt
index 7f3844a9dd4..7478ab63327 100644
--- a/src/com/android/settings/theme/ContrastPreferenceController.kt
+++ b/src/com/android/settings/theme/ContrastPreferenceController.kt
@@ -26,6 +26,7 @@ import android.text.TextUtils
import androidx.preference.Preference
import com.android.internal.annotations.VisibleForTesting
import com.android.settings.R
+import com.android.settings.Utils
import com.android.settings.core.BasePreferenceController
/**
@@ -47,6 +48,7 @@ class ContrastPreferenceController(
override fun handlePreferenceTreeClick(preference: Preference): Boolean {
if (TextUtils.equals(preference.key, preferenceKey)) {
val intent = Intent(Intent.ACTION_SHOW_CONTRAST_DIALOG)
+ intent.setPackage(Utils.SYSTEMUI_PACKAGE_NAME)
context.startActivityAsUser(intent, UserHandle(UserHandle.USER_CURRENT))
return true
}
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index 70d8ed371ef..83dc1274c06 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -555,7 +555,8 @@ public class UserSettings extends SettingsPreferenceFragment
}
private void launchChooseLockscreen() {
- Intent chooseLockIntent = new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD);
+ Intent chooseLockIntent = new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD)
+ .setPackage(getContext().getPackageName());
chooseLockIntent.putExtra(ChooseLockGeneric.ChooseLockGenericFragment.HIDE_INSECURE_OPTIONS,
true);
startActivityForResult(chooseLockIntent, REQUEST_CHOOSE_LOCK);
diff --git a/tests/robotests/src/com/android/settings/accessibility/LiveCaptionPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/LiveCaptionPreferenceControllerTest.java
index a7a7f8f0cbe..314aeff5e9c 100644
--- a/tests/robotests/src/com/android/settings/accessibility/LiveCaptionPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/LiveCaptionPreferenceControllerTest.java
@@ -21,7 +21,11 @@ import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+
import android.content.Context;
+import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.provider.Settings;
@@ -48,7 +52,10 @@ public class LiveCaptionPreferenceControllerTest {
@Before
public void setUp() {
- mContext = ApplicationProvider.getApplicationContext();
+ mContext = spy(ApplicationProvider.getApplicationContext());
+ PackageManager pm = spy(mContext.getPackageManager());
+ doReturn(pm).when(mContext).getPackageManager();
+ doReturn("com.caption").when(pm).getSystemCaptionsServicePackageName();
mController = new LiveCaptionPreferenceController(mContext, "test_key");
mLiveCaptionPreference = new Preference(mContext);
mLiveCaptionPreference.setSummary(R.string.live_caption_summary);