Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e84cb11d authored by Lorenzo Colitti's avatar Lorenzo Colitti Committed by Automerger Merge Worker
Browse files

Merge "Make PendingIntent immutable and correct Settings package name" into...

Merge "Make PendingIntent immutable and correct Settings package name" into rvc-dev am: 438073fc am: d34fdc53

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11881938

Change-Id: I81f54b3251ded57e4c03693e405bf1916a3fdf34
parents bb8954ee d34fdc53
Loading
Loading
Loading
Loading
+26 −4
Original line number Original line Diff line number Diff line
@@ -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);
    }
    }