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

Commit 83341929 authored by Craig Mautner's avatar Craig Mautner
Browse files

Save and restore media metadata.

Do not lose media information when configuration changes. Also, do not
wipe out that saved information when the RemoteController is
reconstructed.

Fixes bug 11293859.

Change-Id: Id9e539367bfda2cc6833dc61c922c57ae45dd7b7
parent 66b753b0
Loading
Loading
Loading
Loading
+49 −5
Original line number Diff line number Diff line
@@ -101,8 +101,10 @@ public class KeyguardTransportControlView extends FrameLayout {
            new RemoteController.OnClientUpdateListener() {
        @Override
        public void onClientChange(boolean clearing) {
            if (clearing) {
                clearMetadata();
            }
        }

        @Override
        public void onClientPlaybackStateUpdate(int state) {
@@ -203,10 +205,10 @@ public class KeyguardTransportControlView extends FrameLayout {
            = new KeyguardUpdateMonitorCallback() {
        public void onScreenTurnedOff(int why) {
            setEnableMarquee(false);
        };
        }
        public void onScreenTurnedOn() {
            setEnableMarquee(true);
        };
        }
    };

    public KeyguardTransportControlView(Context context, AttributeSet attrs) {
@@ -325,6 +327,33 @@ public class KeyguardTransportControlView extends FrameLayout {
        removeCallbacks(mUpdateSeekBars);
    }

    @Override
    protected Parcelable onSaveInstanceState() {
        SavedState ss = new SavedState(super.onSaveInstanceState());
        ss.artist = mMetadata.artist;
        ss.trackTitle = mMetadata.trackTitle;
        ss.albumTitle = mMetadata.albumTitle;
        ss.duration = mMetadata.duration;
        ss.bitmap = mMetadata.bitmap;
        return ss;
    }

    @Override
    protected void onRestoreInstanceState(Parcelable state) {
        if (!(state instanceof SavedState)) {
            super.onRestoreInstanceState(state);
            return;
        }
        SavedState ss = (SavedState) state;
        super.onRestoreInstanceState(ss.getSuperState());
        mMetadata.artist = ss.artist;
        mMetadata.trackTitle = ss.trackTitle;
        mMetadata.albumTitle = ss.albumTitle;
        mMetadata.duration = ss.duration;
        mMetadata.bitmap = ss.bitmap;
        populateMetadata();
    }

    void setBadgeIcon(Drawable bmp) {
        mBadge.setImageDrawable(bmp);

@@ -580,6 +609,11 @@ public class KeyguardTransportControlView extends FrameLayout {

    static class SavedState extends BaseSavedState {
        boolean clientPresent;
        String artist;
        String trackTitle;
        String albumTitle;
        long duration;
        Bitmap bitmap;

        SavedState(Parcelable superState) {
            super(superState);
@@ -587,13 +621,23 @@ public class KeyguardTransportControlView extends FrameLayout {

        private SavedState(Parcel in) {
            super(in);
            this.clientPresent = in.readInt() != 0;
            clientPresent = in.readInt() != 0;
            artist = in.readString();
            trackTitle = in.readString();
            albumTitle = in.readString();
            duration = in.readLong();
            bitmap = Bitmap.CREATOR.createFromParcel(in);
        }

        @Override
        public void writeToParcel(Parcel out, int flags) {
            super.writeToParcel(out, flags);
            out.writeInt(this.clientPresent ? 1 : 0);
            out.writeInt(clientPresent ? 1 : 0);
            out.writeString(artist);
            out.writeString(trackTitle);
            out.writeString(albumTitle);
            out.writeLong(duration);
            bitmap.writeToParcel(out, flags);
        }

        public static final Parcelable.Creator<SavedState> CREATOR