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

Commit 0744deb6 authored by Vineeth Bhende's avatar Vineeth Bhende Committed by Android (Google) Code Review
Browse files

Merge "Optimize memory used for creating saved recording notification" into main

parents c714abee 6467e277
Loading
Loading
Loading
Loading
+2 −4
Original line number Original line Diff line number Diff line
@@ -25,7 +25,6 @@ import android.app.Service;
import android.content.Context;
import android.content.Context;
import android.content.Intent;
import android.content.Intent;
import android.content.res.Resources;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.drawable.Icon;
import android.graphics.drawable.Icon;
import android.media.MediaRecorder;
import android.media.MediaRecorder;
import android.net.Uri;
import android.net.Uri;
@@ -379,10 +378,9 @@ public class RecordingService extends Service implements ScreenMediaRecorderList
                .addExtras(extras);
                .addExtras(extras);


        // Add thumbnail if available
        // Add thumbnail if available
        Bitmap thumbnailBitmap = recording.getThumbnail();
        if (recording.getThumbnail() != null) {
        if (thumbnailBitmap != null) {
            Notification.BigPictureStyle pictureStyle = new Notification.BigPictureStyle()
            Notification.BigPictureStyle pictureStyle = new Notification.BigPictureStyle()
                    .bigPicture(thumbnailBitmap)
                    .bigPicture(recording.getThumbnail())
                    .showBigPictureWhenCollapsed(true);
                    .showBigPictureWhenCollapsed(true);
            builder.setStyle(pictureStyle);
            builder.setStyle(pictureStyle);
        }
        }
+24 −7
Original line number Original line Diff line number Diff line
@@ -23,10 +23,12 @@ import static com.android.systemui.screenrecord.ScreenRecordingAudioSource.MIC;
import static com.android.systemui.screenrecord.ScreenRecordingAudioSource.MIC_AND_INTERNAL;
import static com.android.systemui.screenrecord.ScreenRecordingAudioSource.MIC_AND_INTERNAL;


import android.annotation.Nullable;
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.content.ContentResolver;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.ContentValues;
import android.content.Context;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap;
import android.graphics.drawable.Icon;
import android.hardware.display.DisplayManager;
import android.hardware.display.DisplayManager;
import android.hardware.display.VirtualDisplay;
import android.hardware.display.VirtualDisplay;
import android.media.MediaCodec;
import android.media.MediaCodec;
@@ -51,6 +53,7 @@ import android.util.Size;
import android.view.Surface;
import android.view.Surface;
import android.view.WindowManager;
import android.view.WindowManager;


import com.android.internal.R;
import com.android.systemui.mediaprojection.MediaProjectionCaptureTarget;
import com.android.systemui.mediaprojection.MediaProjectionCaptureTarget;


import java.io.Closeable;
import java.io.Closeable;
@@ -361,13 +364,26 @@ public class ScreenMediaRecorder extends MediaProjection.Callback {
        Files.copy(mTempVideoFile.toPath(), os);
        Files.copy(mTempVideoFile.toPath(), os);
        os.close();
        os.close();
        if (mTempAudioFile != null) mTempAudioFile.delete();
        if (mTempAudioFile != null) mTempAudioFile.delete();
        DisplayMetrics metrics = mContext.getResources().getDisplayMetrics();
        SavedRecording recording = new SavedRecording(
        Size size = new Size(metrics.widthPixels, metrics.heightPixels);
                itemUri, mTempVideoFile, getRequiredThumbnailSize());
        SavedRecording recording = new SavedRecording(itemUri, mTempVideoFile, size);
        mTempVideoFile.delete();
        mTempVideoFile.delete();
        return recording;
        return recording;
    }
    }


    /**
     * Returns the required {@code Size} of the thumbnail.
     */
    private Size getRequiredThumbnailSize() {
        boolean isLowRam = ActivityManager.isLowRamDeviceStatic();
        int thumbnailIconHeight = mContext.getResources().getDimensionPixelSize(isLowRam
                ? R.dimen.notification_big_picture_max_height_low_ram
                : R.dimen.notification_big_picture_max_height);
        int thumbnailIconWidth = mContext.getResources().getDimensionPixelSize(isLowRam
                ? R.dimen.notification_big_picture_max_width_low_ram
                : R.dimen.notification_big_picture_max_width);
        return new Size(thumbnailIconWidth, thumbnailIconHeight);
    }

    /**
    /**
     * Release the resources without saving the data
     * Release the resources without saving the data
     */
     */
@@ -386,13 +402,14 @@ public class ScreenMediaRecorder extends MediaProjection.Callback {
    public class SavedRecording {
    public class SavedRecording {


        private Uri mUri;
        private Uri mUri;
        private Bitmap mThumbnailBitmap;
        private Icon mThumbnailIcon;


        protected SavedRecording(Uri uri, File file, Size thumbnailSize) {
        protected SavedRecording(Uri uri, File file, Size thumbnailSize) {
            mUri = uri;
            mUri = uri;
            try {
            try {
                mThumbnailBitmap = ThumbnailUtils.createVideoThumbnail(
                Bitmap thumbnailBitmap = ThumbnailUtils.createVideoThumbnail(
                        file, thumbnailSize, null);
                        file, thumbnailSize, null);
                mThumbnailIcon = Icon.createWithBitmap(thumbnailBitmap);
            } catch (IOException e) {
            } catch (IOException e) {
                Log.e(TAG, "Error creating thumbnail", e);
                Log.e(TAG, "Error creating thumbnail", e);
            }
            }
@@ -402,8 +419,8 @@ public class ScreenMediaRecorder extends MediaProjection.Callback {
            return mUri;
            return mUri;
        }
        }


        public @Nullable Bitmap getThumbnail() {
        public @Nullable Icon getThumbnail() {
            return mThumbnailBitmap;
            return mThumbnailIcon;
        }
        }
    }
    }