Loading packages/SystemUI/src/com/android/systemui/screenrecord/RecordingService.java +3 −13 Original line number Diff line number Diff line Loading @@ -33,9 +33,7 @@ import android.os.Bundle; import android.os.IBinder; import android.os.RemoteException; import android.provider.Settings; import android.util.DisplayMetrics; import android.util.Log; import android.util.Size; import android.widget.Toast; import com.android.systemui.R; Loading Loading @@ -247,7 +245,8 @@ public class RecordingService extends Service implements MediaRecorder.OnInfoLis startForeground(NOTIFICATION_RECORDING_ID, notification); } private Notification createSaveNotification(Uri uri) { private Notification createSaveNotification(ScreenMediaRecorder.SavedRecording recording) { Uri uri = recording.getUri(); Intent viewIntent = new Intent(Intent.ACTION_VIEW) .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_GRANT_READ_URI_PERMISSION) .setDataAndType(uri, "video/mp4"); Loading Loading @@ -290,16 +289,7 @@ public class RecordingService extends Service implements MediaRecorder.OnInfoLis .addExtras(extras); // Add thumbnail if available Bitmap thumbnailBitmap = null; try { ContentResolver resolver = getContentResolver(); DisplayMetrics metrics = getResources().getDisplayMetrics(); Size size = new Size(metrics.widthPixels, metrics.heightPixels / 2); thumbnailBitmap = resolver.loadThumbnail(uri, size, null); } catch (IOException e) { Log.e(TAG, "Error creating thumbnail: " + e.getMessage()); e.printStackTrace(); } Bitmap thumbnailBitmap = recording.getThumbnail(); if (thumbnailBitmap != null) { Notification.BigPictureStyle pictureStyle = new Notification.BigPictureStyle() .bigPicture(thumbnailBitmap) Loading packages/SystemUI/src/com/android/systemui/screenrecord/ScreenMediaRecorder.java +41 −3 Original line number Diff line number Diff line Loading @@ -22,13 +22,17 @@ import static com.android.systemui.screenrecord.ScreenRecordingAudioSource.INTER import static com.android.systemui.screenrecord.ScreenRecordingAudioSource.MIC; import static com.android.systemui.screenrecord.ScreenRecordingAudioSource.MIC_AND_INTERNAL; import android.annotation.Nullable; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context; import android.graphics.Bitmap; import android.hardware.display.DisplayManager; import android.hardware.display.VirtualDisplay; import android.media.MediaCodecInfo; import android.media.MediaMuxer; import android.media.MediaRecorder; import android.media.ThumbnailUtils; import android.media.projection.IMediaProjection; import android.media.projection.IMediaProjectionManager; import android.media.projection.MediaProjection; Loading @@ -40,6 +44,7 @@ import android.os.ServiceManager; import android.provider.MediaStore; import android.util.DisplayMetrics; import android.util.Log; import android.util.Size; import android.view.Surface; import android.view.WindowManager; Loading Loading @@ -125,6 +130,9 @@ public class ScreenMediaRecorder { int vidBitRate = screenHeight * screenWidth * refereshRate / VIDEO_FRAME_RATE * VIDEO_FRAME_RATE_TO_RESOLUTION_RATIO; mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); mMediaRecorder.setVideoEncodingProfileLevel( MediaCodecInfo.CodecProfileLevel.AVCProfileHigh, MediaCodecInfo.CodecProfileLevel.AVCLevel42); mMediaRecorder.setVideoSize(screenWidth, screenHeight); mMediaRecorder.setVideoFrameRate(refereshRate); mMediaRecorder.setVideoEncodingBitRate(vidBitRate); Loading Loading @@ -206,7 +214,7 @@ public class ScreenMediaRecorder { /** * Store recorded video */ Uri save() throws IOException { protected SavedRecording save() throws IOException { String fileName = new SimpleDateFormat("'screen-'yyyyMMdd-HHmmss'.mp4'") .format(new Date()); Loading Loading @@ -244,8 +252,38 @@ public class ScreenMediaRecorder { OutputStream os = resolver.openOutputStream(itemUri, "w"); Files.copy(mTempVideoFile.toPath(), os); os.close(); mTempVideoFile.delete(); if (mTempAudioFile != null) mTempAudioFile.delete(); return itemUri; DisplayMetrics metrics = mContext.getResources().getDisplayMetrics(); Size size = new Size(metrics.widthPixels, metrics.heightPixels); SavedRecording recording = new SavedRecording(itemUri, mTempVideoFile, size); mTempVideoFile.delete(); return recording; } /** * Object representing the recording */ public class SavedRecording { private Uri mUri; private Bitmap mThumbnailBitmap; protected SavedRecording(Uri uri, File file, Size thumbnailSize) { mUri = uri; try { mThumbnailBitmap = ThumbnailUtils.createVideoThumbnail( file, thumbnailSize, null); } catch (IOException e) { Log.e(TAG, "Error creating thumbnail", e); } } public Uri getUri() { return mUri; } public @Nullable Bitmap getThumbnail() { return mThumbnailBitmap; } } } Loading
packages/SystemUI/src/com/android/systemui/screenrecord/RecordingService.java +3 −13 Original line number Diff line number Diff line Loading @@ -33,9 +33,7 @@ import android.os.Bundle; import android.os.IBinder; import android.os.RemoteException; import android.provider.Settings; import android.util.DisplayMetrics; import android.util.Log; import android.util.Size; import android.widget.Toast; import com.android.systemui.R; Loading Loading @@ -247,7 +245,8 @@ public class RecordingService extends Service implements MediaRecorder.OnInfoLis startForeground(NOTIFICATION_RECORDING_ID, notification); } private Notification createSaveNotification(Uri uri) { private Notification createSaveNotification(ScreenMediaRecorder.SavedRecording recording) { Uri uri = recording.getUri(); Intent viewIntent = new Intent(Intent.ACTION_VIEW) .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_GRANT_READ_URI_PERMISSION) .setDataAndType(uri, "video/mp4"); Loading Loading @@ -290,16 +289,7 @@ public class RecordingService extends Service implements MediaRecorder.OnInfoLis .addExtras(extras); // Add thumbnail if available Bitmap thumbnailBitmap = null; try { ContentResolver resolver = getContentResolver(); DisplayMetrics metrics = getResources().getDisplayMetrics(); Size size = new Size(metrics.widthPixels, metrics.heightPixels / 2); thumbnailBitmap = resolver.loadThumbnail(uri, size, null); } catch (IOException e) { Log.e(TAG, "Error creating thumbnail: " + e.getMessage()); e.printStackTrace(); } Bitmap thumbnailBitmap = recording.getThumbnail(); if (thumbnailBitmap != null) { Notification.BigPictureStyle pictureStyle = new Notification.BigPictureStyle() .bigPicture(thumbnailBitmap) Loading
packages/SystemUI/src/com/android/systemui/screenrecord/ScreenMediaRecorder.java +41 −3 Original line number Diff line number Diff line Loading @@ -22,13 +22,17 @@ import static com.android.systemui.screenrecord.ScreenRecordingAudioSource.INTER import static com.android.systemui.screenrecord.ScreenRecordingAudioSource.MIC; import static com.android.systemui.screenrecord.ScreenRecordingAudioSource.MIC_AND_INTERNAL; import android.annotation.Nullable; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context; import android.graphics.Bitmap; import android.hardware.display.DisplayManager; import android.hardware.display.VirtualDisplay; import android.media.MediaCodecInfo; import android.media.MediaMuxer; import android.media.MediaRecorder; import android.media.ThumbnailUtils; import android.media.projection.IMediaProjection; import android.media.projection.IMediaProjectionManager; import android.media.projection.MediaProjection; Loading @@ -40,6 +44,7 @@ import android.os.ServiceManager; import android.provider.MediaStore; import android.util.DisplayMetrics; import android.util.Log; import android.util.Size; import android.view.Surface; import android.view.WindowManager; Loading Loading @@ -125,6 +130,9 @@ public class ScreenMediaRecorder { int vidBitRate = screenHeight * screenWidth * refereshRate / VIDEO_FRAME_RATE * VIDEO_FRAME_RATE_TO_RESOLUTION_RATIO; mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); mMediaRecorder.setVideoEncodingProfileLevel( MediaCodecInfo.CodecProfileLevel.AVCProfileHigh, MediaCodecInfo.CodecProfileLevel.AVCLevel42); mMediaRecorder.setVideoSize(screenWidth, screenHeight); mMediaRecorder.setVideoFrameRate(refereshRate); mMediaRecorder.setVideoEncodingBitRate(vidBitRate); Loading Loading @@ -206,7 +214,7 @@ public class ScreenMediaRecorder { /** * Store recorded video */ Uri save() throws IOException { protected SavedRecording save() throws IOException { String fileName = new SimpleDateFormat("'screen-'yyyyMMdd-HHmmss'.mp4'") .format(new Date()); Loading Loading @@ -244,8 +252,38 @@ public class ScreenMediaRecorder { OutputStream os = resolver.openOutputStream(itemUri, "w"); Files.copy(mTempVideoFile.toPath(), os); os.close(); mTempVideoFile.delete(); if (mTempAudioFile != null) mTempAudioFile.delete(); return itemUri; DisplayMetrics metrics = mContext.getResources().getDisplayMetrics(); Size size = new Size(metrics.widthPixels, metrics.heightPixels); SavedRecording recording = new SavedRecording(itemUri, mTempVideoFile, size); mTempVideoFile.delete(); return recording; } /** * Object representing the recording */ public class SavedRecording { private Uri mUri; private Bitmap mThumbnailBitmap; protected SavedRecording(Uri uri, File file, Size thumbnailSize) { mUri = uri; try { mThumbnailBitmap = ThumbnailUtils.createVideoThumbnail( file, thumbnailSize, null); } catch (IOException e) { Log.e(TAG, "Error creating thumbnail", e); } } public Uri getUri() { return mUri; } public @Nullable Bitmap getThumbnail() { return mThumbnailBitmap; } } }