Merge "Make PendingIntent immutable and correct Settings package name" into rvc-dev am: 1b7f9ca7d0
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11881938 Change-Id: I0ce82679bf81e3c58fed12943b7c9ca9d449fb7f
This commit is contained in:
@@ -67,6 +67,7 @@ import android.app.BroadcastOptions;
|
|||||||
import android.app.NotificationManager;
|
import android.app.NotificationManager;
|
||||||
import android.app.PendingIntent;
|
import android.app.PendingIntent;
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
|
import android.content.ComponentName;
|
||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
@@ -3078,7 +3079,11 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
// Only the system server can register notifications with package "android"
|
// Only the system server can register notifications with package "android"
|
||||||
final long token = Binder.clearCallingIdentity();
|
final long token = Binder.clearCallingIdentity();
|
||||||
try {
|
try {
|
||||||
pendingIntent = PendingIntent.getBroadcast(mContext, 0, intent, 0);
|
pendingIntent = PendingIntent.getBroadcast(
|
||||||
|
mContext,
|
||||||
|
0 /* requestCode */,
|
||||||
|
intent,
|
||||||
|
PendingIntent.FLAG_IMMUTABLE);
|
||||||
} finally {
|
} finally {
|
||||||
Binder.restoreCallingIdentity(token);
|
Binder.restoreCallingIdentity(token);
|
||||||
}
|
}
|
||||||
@@ -3934,6 +3939,15 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
pw.decreaseIndent();
|
pw.decreaseIndent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: This method is copied from TetheringNotificationUpdater. Should have a utility class to
|
||||||
|
// unify the method.
|
||||||
|
private static @NonNull String getSettingsPackageName(@NonNull final PackageManager pm) {
|
||||||
|
final Intent settingsIntent = new Intent(Settings.ACTION_SETTINGS);
|
||||||
|
final ComponentName settingsComponent = settingsIntent.resolveActivity(pm);
|
||||||
|
return settingsComponent != null
|
||||||
|
? settingsComponent.getPackageName() : "com.android.settings";
|
||||||
|
}
|
||||||
|
|
||||||
private void showNetworkNotification(NetworkAgentInfo nai, NotificationType type) {
|
private void showNetworkNotification(NetworkAgentInfo nai, NotificationType type) {
|
||||||
final String action;
|
final String action;
|
||||||
final boolean highPriority;
|
final boolean highPriority;
|
||||||
@@ -3968,12 +3982,20 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
if (type != NotificationType.PRIVATE_DNS_BROKEN) {
|
if (type != NotificationType.PRIVATE_DNS_BROKEN) {
|
||||||
intent.setData(Uri.fromParts("netId", Integer.toString(nai.network.netId), null));
|
intent.setData(Uri.fromParts("netId", Integer.toString(nai.network.netId), null));
|
||||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
intent.setClassName("com.android.settings",
|
// Some OEMs have their own Settings package. Thus, need to get the current using
|
||||||
"com.android.settings.wifi.WifiNoInternetDialog");
|
// Settings package name instead of just use default name "com.android.settings".
|
||||||
|
final String settingsPkgName = getSettingsPackageName(mContext.getPackageManager());
|
||||||
|
intent.setClassName(settingsPkgName,
|
||||||
|
settingsPkgName + ".wifi.WifiNoInternetDialog");
|
||||||
}
|
}
|
||||||
|
|
||||||
PendingIntent pendingIntent = PendingIntent.getActivityAsUser(
|
PendingIntent pendingIntent = PendingIntent.getActivityAsUser(
|
||||||
mContext, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT, null, UserHandle.CURRENT);
|
mContext,
|
||||||
|
0 /* requestCode */,
|
||||||
|
intent,
|
||||||
|
PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE,
|
||||||
|
null /* options */,
|
||||||
|
UserHandle.CURRENT);
|
||||||
|
|
||||||
mNotifier.showNotification(nai.network.netId, type, nai, null, pendingIntent, highPriority);
|
mNotifier.showNotification(nai.network.netId, type, nai, null, pendingIntent, highPriority);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user