[Safer intents] Applications
To avoid implicit intents, make intents launch explicitly. Test: build, robotest Bug: 323061508 Change-Id: I9bf4eb102550f4afd8d14a6799940d37fc0ab9a7
This commit is contained in:
@@ -72,7 +72,9 @@
|
||||
<extra
|
||||
android:name="classname"
|
||||
android:value="com.android.settings.Settings$ClonedAppsListActivity"/>
|
||||
<intent android:action="android.settings.MANAGE_CLONED_APPS_SETTINGS"/>
|
||||
<intent
|
||||
android:action="android.settings.MANAGE_CLONED_APPS_SETTINGS"
|
||||
android:targetPackage="${applicationId}"/>
|
||||
</Preference>
|
||||
|
||||
<PreferenceCategory
|
||||
|
@@ -512,6 +512,7 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp
|
||||
} else {
|
||||
Intent intent = new Intent(Intent.ACTION_QUERY_PACKAGE_RESTART,
|
||||
Uri.fromParts("package", mAppEntry.info.packageName, null));
|
||||
intent.setPackage("android");
|
||||
intent.putExtra(Intent.EXTRA_PACKAGES, new String[]{mAppEntry.info.packageName});
|
||||
intent.putExtra(Intent.EXTRA_UID, mAppEntry.info.uid);
|
||||
intent.putExtra(Intent.EXTRA_USER_HANDLE, UserHandle.getUserId(mAppEntry.info.uid));
|
||||
@@ -538,6 +539,8 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp
|
||||
// Create new intent to launch Uninstaller activity
|
||||
Uri packageUri = Uri.parse("package:" + packageName);
|
||||
Intent uninstallIntent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE, packageUri);
|
||||
uninstallIntent.setPackage(mContext.getString(
|
||||
R.string.config_package_installer_package_name));
|
||||
uninstallIntent.putExtra(Intent.EXTRA_UNINSTALL_ALL_USERS, allUsers);
|
||||
|
||||
mMetricsFeatureProvider.action(mActivity, SettingsEnums.ACTION_SETTINGS_UNINSTALL_APP);
|
||||
|
@@ -642,6 +642,7 @@ public class AppInfoDashboardFragment extends DashboardFragment
|
||||
// Create new intent to launch Uninstaller activity
|
||||
final Uri packageURI = Uri.parse("package:" + packageName);
|
||||
final Intent uninstallIntent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE, packageURI);
|
||||
uninstallIntent.setPackage(getString(R.string.config_package_installer_package_name));
|
||||
uninstallIntent.putExtra(Intent.EXTRA_UNINSTALL_ALL_USERS, allUsers);
|
||||
mMetricsFeatureProvider.action(
|
||||
getContext(), SettingsEnums.ACTION_SETTINGS_UNINSTALL_APP);
|
||||
|
@@ -60,6 +60,7 @@ public class TimeSpentInAppPreferenceController extends LiveDataController {
|
||||
public void setPackageName(String packageName) {
|
||||
mPackageName = packageName;
|
||||
mIntent = new Intent(SEE_TIME_IN_APP_TEMPLATE)
|
||||
.setPackage(mPackageManager.getWellbeingPackageName())
|
||||
.putExtra(Intent.EXTRA_PACKAGE_NAME, mPackageName);
|
||||
}
|
||||
|
||||
|
@@ -34,6 +34,7 @@ import android.util.Log;
|
||||
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.Utils;
|
||||
|
||||
import java.util.HashSet;
|
||||
@@ -78,6 +79,8 @@ public class CloneBackend {
|
||||
// Create new intent to launch Uninstaller activity.
|
||||
Uri packageUri = Uri.parse("package:" + packageName);
|
||||
Intent uninstallIntent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE, packageUri);
|
||||
uninstallIntent.setPackage(mContext.getString(
|
||||
R.string.config_package_installer_package_name));
|
||||
uninstallIntent.putExtra(Intent.EXTRA_UNINSTALL_ALL_USERS, allUsers);
|
||||
uninstallIntent.putExtra(Intent.EXTRA_USER, UserHandle.of(mCloneUserId));
|
||||
// Trigger uninstall as clone user.
|
||||
|
@@ -20,6 +20,7 @@ import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.UserHandle
|
||||
import com.android.settings.R
|
||||
|
||||
/**
|
||||
* Based on PackageManagerService design, and it looks like the suggested replacement in the
|
||||
@@ -36,6 +37,7 @@ fun Context.startUninstallActivity(
|
||||
val packageUri = Uri.parse("package:$packageName")
|
||||
|
||||
val intent = Intent(Intent.ACTION_UNINSTALL_PACKAGE, packageUri).apply {
|
||||
setPackage(getString(R.string.config_package_installer_package_name))
|
||||
putExtra(Intent.EXTRA_UNINSTALL_ALL_USERS, forAllUsers)
|
||||
}
|
||||
startActivityAsUser(intent, userHandle)
|
||||
|
@@ -22,7 +22,9 @@ import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.nullable;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@@ -30,6 +32,7 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.ActivityInfo;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ResolveInfo;
|
||||
|
||||
import androidx.preference.Preference;
|
||||
@@ -55,6 +58,7 @@ public class TimeSpentInAppPreferenceControllerTest {
|
||||
private static final String TEST_KEY = "test_tey";
|
||||
private static final Intent TEST_INTENT = new Intent(
|
||||
TimeSpentInAppPreferenceController.SEE_TIME_IN_APP_TEMPLATE)
|
||||
.setPackage("com.wellbeing")
|
||||
.putExtra(EXTRA_PACKAGE_NAME, "com.android.settings");
|
||||
|
||||
@Mock
|
||||
@@ -70,8 +74,11 @@ public class TimeSpentInAppPreferenceControllerTest {
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||
mContext = RuntimeEnvironment.application;
|
||||
mPackageManager = Shadows.shadowOf(mContext.getPackageManager());
|
||||
mContext = spy(RuntimeEnvironment.application);
|
||||
PackageManager pm = spy(mContext.getPackageManager());
|
||||
doReturn(pm).when(mContext).getPackageManager();
|
||||
doReturn(TEST_INTENT.getPackage()).when(pm).getWellbeingPackageName();
|
||||
mPackageManager = Shadows.shadowOf(pm);
|
||||
mController = new TimeSpentInAppPreferenceController(mContext, TEST_KEY);
|
||||
mPreference = new Preference(mContext);
|
||||
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
|
||||
|
Reference in New Issue
Block a user