From 90a78649f2ec991baf4f29ecabe7b772eb464850 Mon Sep 17 00:00:00 2001 From: Les Lee Date: Tue, 29 Jun 2021 23:46:02 +0800 Subject: [PATCH] wifi: Fix the Security Report for pending intent Bug: 170644642 Test: Manual Test, it work normally. Change-Id: If24e7232f0740c8b43cedd56be7d54fcb3cba5a3 --- .../WifiSoftApConfigChangedNotifier.java | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/packages/SettingsProvider/src/com/android/providers/settings/WifiSoftApConfigChangedNotifier.java b/packages/SettingsProvider/src/com/android/providers/settings/WifiSoftApConfigChangedNotifier.java index c33f02dff5612..dc51c4012021c 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/WifiSoftApConfigChangedNotifier.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/WifiSoftApConfigChangedNotifier.java @@ -15,17 +15,24 @@ */ package com.android.providers.settings; +import android.app.ActivityManager; import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; import android.content.res.Resources; +import android.os.UserHandle; +import android.provider.Settings; import com.android.internal.messages.nano.SystemMessageProto; import com.android.internal.notification.SystemNotificationChannels; +import java.util.List; + /** * Helper class for sending notifications when the user's Soft AP config was changed upon restore. */ @@ -81,8 +88,25 @@ public class WifiSoftApConfigChangedNotifier { private static PendingIntent getPendingActivity(Context context) { Intent intent = new Intent("com.android.settings.WIFI_TETHER_SETTINGS") - .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + .setPackage(getSettingsPackageName(context)); return PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); } + + /** + * @return Get settings package name. + */ + private static String getSettingsPackageName(Context context) { + if (context == null) return null; + + Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS); + List resolveInfos = context.getPackageManager().queryIntentActivitiesAsUser( + intent, PackageManager.MATCH_SYSTEM_ONLY | PackageManager.MATCH_DEFAULT_ONLY, + UserHandle.of(ActivityManager.getCurrentUser())); + if (resolveInfos == null || resolveInfos.isEmpty()) { + return "com.android.settings"; + } + return resolveInfos.get(0).activityInfo.packageName; + } }