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