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

Commit c797aac4 authored by Bernardo Rufino's avatar Bernardo Rufino
Browse files

Gate toast block and remove warning

Gate background custom toast block on targetSdk for beta 1, after
having gathered dogfood feedback. So, enabling the change for apps with
targetSdk > Q (>= R). Also removed warning toast.

Added tests in topic CL to cover all the cases.

Bug: 144152069
Test: atest android.widget.cts29.ToastTest android.widget.cts.ToastTest
Change-Id: If368a97a2a8ff56770635615f89c79007bb27075
parent 8ac8b257
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -48,8 +48,6 @@ interface INotificationManager
    void clearData(String pkg, int uid, boolean fromApp);
    void enqueueTextToast(String pkg, IBinder token, CharSequence text, int duration, int displayId, @nullable ITransientNotificationCallback callback);
    void enqueueToast(String pkg, IBinder token, ITransientNotification callback, int duration, int displayId);
    // TODO(b/144152069): Remove this after assessing impact on dogfood.
    void enqueueTextOrCustomToast(String pkg, IBinder token, ITransientNotification callback, int duration, int displayId, boolean isCustom);
    void cancelToast(String pkg, IBinder token);
    void finishToken(String pkg, IBinder token);

+1 −6
Original line number Diff line number Diff line
@@ -144,9 +144,6 @@ public class Toast {
    @Nullable
    private CharSequence mText;

    // TODO(b/144152069): Remove this after assessing impact on dogfood.
    private boolean mIsCustomToast;

    /**
     * Construct an empty Toast object.  You must call {@link #setView} before you
     * can call {@link #show}.
@@ -214,8 +211,7 @@ public class Toast {
                    service.enqueueTextToast(pkg, mToken, mText, mDuration, displayId, callback);
                }
            } else {
                service.enqueueTextOrCustomToast(pkg, mToken, tn, mDuration, displayId,
                        mIsCustomToast);
                service.enqueueToast(pkg, mToken, tn, mDuration, displayId);
            }
        } catch (RemoteException e) {
            // Empty
@@ -253,7 +249,6 @@ public class Toast {
     */
    @Deprecated
    public void setView(View view) {
        mIsCustomToast = true;
        mNextView = view;
    }

+11 −18
Original line number Diff line number Diff line
@@ -139,6 +139,7 @@ import android.app.usage.UsageEvents;
import android.app.usage.UsageStatsManagerInternal;
import android.companion.ICompanionDeviceManager;
import android.compat.annotation.ChangeId;
import android.compat.annotation.EnabledAfter;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.ContentProvider;
@@ -387,10 +388,9 @@ public class NotificationManagerService extends SystemService {
     * still post toasts created with
     * {@link android.widget.Toast#makeText(Context, CharSequence, int)} and its variants while
     * in the background.
     *
     * TODO(b/144152069): Add @EnabledAfter(Q) to target R+ after assessing impact on dogfood
     */
    @ChangeId
    @EnabledAfter(targetSdkVersion = Build.VERSION_CODES.Q)
    private static final long CHANGE_BACKGROUND_CUSTOM_TOAST_BLOCK = 128611929L;

    private IActivityManager mAm;
@@ -2751,24 +2751,18 @@ public class NotificationManagerService extends SystemService {
        @Override
        public void enqueueTextToast(String pkg, IBinder token, CharSequence text, int duration,
                int displayId, @Nullable ITransientNotificationCallback callback) {
            enqueueToast(pkg, token, text, null, duration, displayId, callback, false);
            enqueueToast(pkg, token, text, null, duration, displayId, callback);
        }

        @Override
        public void enqueueToast(String pkg, IBinder token, ITransientNotification callback,
                int duration, int displayId) {
            enqueueToast(pkg, token, null, callback, duration, displayId, null, true);
        }

        @Override
        public void enqueueTextOrCustomToast(String pkg, IBinder token,
                ITransientNotification callback, int duration, int displayId, boolean isCustom) {
            enqueueToast(pkg, token, null, callback, duration, displayId, null, isCustom);
            enqueueToast(pkg, token, null, callback, duration, displayId, null);
        }

        private void enqueueToast(String pkg, IBinder token, @Nullable CharSequence text,
                @Nullable ITransientNotification callback, int duration, int displayId,
                @Nullable ITransientNotificationCallback textCallback, boolean isCustom) {
                @Nullable ITransientNotificationCallback textCallback) {
            if (DBG) {
                Slog.i(TAG, "enqueueToast pkg=" + pkg + " token=" + token
                        + " duration=" + duration + " displayId=" + displayId);
@@ -2807,11 +2801,15 @@ public class NotificationManagerService extends SystemService {
            }

            boolean isAppRenderedToast = (callback != null);
            if (isAppRenderedToast && isCustom && !isSystemToast
                    && !isPackageInForegroundForToast(pkg, callingUid)) {
            if (isAppRenderedToast && !isSystemToast && !isPackageInForegroundForToast(pkg,
                    callingUid)) {
                boolean block;
                long id = Binder.clearCallingIdentity();
                try {
                    // CHANGE_BACKGROUND_CUSTOM_TOAST_BLOCK is gated on targetSdk, so block will be
                    // false for apps with targetSdk < R. For apps with targetSdk R+, text toasts
                    // are not app-rendered, so isAppRenderedToast == true means it's a custom
                    // toast.
                    block = mPlatformCompat.isChangeEnabledByPackageName(
                            CHANGE_BACKGROUND_CUSTOM_TOAST_BLOCK, pkg,
                            callingUser.getIdentifier());
@@ -2824,11 +2822,6 @@ public class NotificationManagerService extends SystemService {
                    Binder.restoreCallingIdentity(id);
                }
                if (block) {
                    // TODO(b/144152069): Remove informative toast
                    mUiHandler.post(() -> Toast.makeText(getContext(),
                            "Background custom toast blocked for package " + pkg + ".\n"
                                    + "See g.co/dev/toast.",
                            Toast.LENGTH_SHORT).show());
                    Slog.w(TAG, "Blocking custom toast from package " + pkg
                            + " due to package not in the foreground");
                    return;