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

Commit 00861daf authored by Sergey Nikolaienkov's avatar Sergey Nikolaienkov
Browse files

App title in PiP notification

Show application title in PiP notication, in case there is no ongoing
MediaSession.

Bug: 154494916
Test: manually, run on TV, enter PiP
Change-Id: I5d906d6880b0240994f06daee66ed84446f490f4
parent cf9ab7aa
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -708,7 +708,7 @@ public class PipManager implements BasePipManager, PipTaskOrganizer.PipTransitio
                    mActiveMediaSessionListener, null);
            updateMediaController(mMediaSessionManager.getActiveSessions(null));
            for (int i = mListeners.size() - 1; i >= 0; i--) {
                mListeners.get(i).onPipEntered();
                mListeners.get(i).onPipEntered(packageName);
            }
            updatePipVisibility(true);
        }
@@ -758,7 +758,7 @@ public class PipManager implements BasePipManager, PipTaskOrganizer.PipTransitio
         * because there's no guarantee for the PIP manager be return relavent information
         * correctly. (e.g. {@link isPipShown}).
         */
        void onPipEntered();
        void onPipEntered(String packageName);
        /** Invoked when a PIPed activity is closed. */
        void onPipActivityClosed();
        /** Invoked when the PIP menu gets shown. */
+2 −2
Original line number Diff line number Diff line
@@ -137,8 +137,8 @@ public class PipMenuActivity extends Activity implements PipManager.Listener {
    }

    @Override
    public void onPipEntered() {
        if (DEBUG) Log.d(TAG, "onPipEntered()");
    public void onPipEntered(String packageName) {
        if (DEBUG) Log.d(TAG, "onPipEntered(), packageName=" + packageName);
    }

    @Override
+38 −5
Original line number Diff line number Diff line
@@ -23,6 +23,8 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.ParceledListSlice;
import android.content.res.Resources;
import android.graphics.Bitmap;
@@ -50,6 +52,8 @@ public class PipNotification {
    private static final String ACTION_MENU = "PipNotification.menu";
    private static final String ACTION_CLOSE = "PipNotification.close";

    private final PackageManager mPackageManager;

    private final PipManager mPipManager;

    private final NotificationManager mNotificationManager;
@@ -59,13 +63,16 @@ public class PipNotification {
    private String mDefaultTitle;
    private int mDefaultIconResId;

    /** Package name for the application that owns PiP window. */
    private String mPackageName;
    private boolean mNotified;
    private String mTitle;
    private String mMediaTitle;
    private Bitmap mArt;

    private PipManager.Listener mPipListener = new PipManager.Listener() {
        @Override
        public void onPipEntered() {
        public void onPipEntered(String packageName) {
            mPackageName = packageName;
            updateMediaControllerMetadata();
            notifyPipNotification();
        }
@@ -73,6 +80,7 @@ public class PipNotification {
        @Override
        public void onPipActivityClosed() {
            dismissPipNotification();
            mPackageName = null;
        }

        @Override
@@ -88,6 +96,7 @@ public class PipNotification {
        @Override
        public void onMoveToFullscreen() {
            dismissPipNotification();
            mPackageName = null;
        }

        @Override
@@ -146,6 +155,8 @@ public class PipNotification {

    public PipNotification(Context context, BroadcastDispatcher broadcastDispatcher,
            PipManager pipManager) {
        mPackageManager = context.getPackageManager();

        mNotificationManager = (NotificationManager) context.getSystemService(
                Context.NOTIFICATION_SERVICE);

@@ -188,7 +199,7 @@ public class PipNotification {
                .setShowWhen(true)
                .setWhen(System.currentTimeMillis())
                .setSmallIcon(mDefaultIconResId)
                .setContentTitle(!TextUtils.isEmpty(mTitle) ? mTitle : mDefaultTitle);
                .setContentTitle(getNotificationTitle());
        if (mArt != null) {
            mNotificationBuilder.setStyle(new Notification.BigPictureStyle()
                    .bigPicture(mArt));
@@ -220,14 +231,36 @@ public class PipNotification {
                }
            }
        }
        if (!TextUtils.equals(title, mTitle) || art != mArt) {
            mTitle = title;
        if (!TextUtils.equals(title, mMediaTitle) || art != mArt) {
            mMediaTitle = title;
            mArt = art;
            return true;
        }
        return false;
    }

    private String getNotificationTitle() {
        if (!TextUtils.isEmpty(mMediaTitle)) {
            return mMediaTitle;
        }

        final String applicationTitle = getApplicationLabel(mPackageName);
        if (!TextUtils.isEmpty(applicationTitle)) {
            return applicationTitle;
        }

        return mDefaultTitle;
    }

    private String getApplicationLabel(String packageName) {
        try {
            final ApplicationInfo appInfo = mPackageManager.getApplicationInfo(packageName, 0);
            return mPackageManager.getApplicationLabel(appInfo).toString();
        } catch (PackageManager.NameNotFoundException e) {
            return null;
        }
    }

    private static PendingIntent createPendingIntent(Context context, String action) {
        return PendingIntent.getBroadcast(context, 0,
                new Intent(action), PendingIntent.FLAG_CANCEL_CURRENT);