From 5898ac47b2b61c64416bfedaa47afecb5da2a33d Mon Sep 17 00:00:00 2001 From: Beth Thibodeau Date: Fri, 26 Oct 2018 13:00:09 -0400 Subject: Adding screen recording function. Screen recording can be launched via long press on screenshot in the global actions menu if the local feature flag is enabled. Otherwise, long press on screenshot will also trigger a screenshot. Demo videos: https://drive.google.com/open?id=1oJzfzJb8aGXSUqn4CZ_Yn7qWmJ2dvRd5 Test: manual Change-Id: I373d38ad86291ff6f26f7dca3195001bd8f5ee16 Bug: 111395687 Bug: 118826991 --- core/java/android/util/FeatureFlagUtils.java | 2 + .../android/internal/util/ScreenRecordHelper.java | 52 +++ packages/SystemUI/AndroidManifest.xml | 8 + .../SystemUI/res/layout/screen_record_dialog.xml | 41 ++ packages/SystemUI/res/values/strings.xml | 33 ++ packages/SystemUI/res/values/styles.xml | 9 + packages/SystemUI/res/xml/fileprovider.xml | 1 + .../globalactions/GlobalActionsDialog.java | 15 +- .../systemui/screenrecord/RecordingService.java | 451 +++++++++++++++++++++ .../systemui/screenrecord/ScreenRecordDialog.java | 135 ++++++ 10 files changed, 746 insertions(+), 1 deletion(-) create mode 100644 core/java/com/android/internal/util/ScreenRecordHelper.java create mode 100644 packages/SystemUI/res/layout/screen_record_dialog.xml create mode 100644 packages/SystemUI/src/com/android/systemui/screenrecord/RecordingService.java create mode 100644 packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordDialog.java diff --git a/core/java/android/util/FeatureFlagUtils.java b/core/java/android/util/FeatureFlagUtils.java index fb44eda5bc73..2d67d79062b9 100644 --- a/core/java/android/util/FeatureFlagUtils.java +++ b/core/java/android/util/FeatureFlagUtils.java @@ -36,6 +36,7 @@ public class FeatureFlagUtils { public static final String PERSIST_PREFIX = "persist." + FFLAG_OVERRIDE_PREFIX; public static final String HEARING_AID_SETTINGS = "settings_bluetooth_hearing_aid"; public static final String EMERGENCY_DIAL_SHORTCUTS = "settings_emergency_dial_shortcuts"; + public static final String SCREENRECORD_LONG_PRESS = "settings_screenrecord_long_press"; private static final Map DEFAULT_FLAGS; static { @@ -50,6 +51,7 @@ public class FeatureFlagUtils { DEFAULT_FLAGS.put(HEARING_AID_SETTINGS, "false"); DEFAULT_FLAGS.put(EMERGENCY_DIAL_SHORTCUTS, "true"); DEFAULT_FLAGS.put("settings_network_and_internet_v2", "false"); + DEFAULT_FLAGS.put(SCREENRECORD_LONG_PRESS, "false"); } /** diff --git a/core/java/com/android/internal/util/ScreenRecordHelper.java b/core/java/com/android/internal/util/ScreenRecordHelper.java new file mode 100644 index 000000000000..64d089848b7d --- /dev/null +++ b/core/java/com/android/internal/util/ScreenRecordHelper.java @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.internal.util; + +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; + +/** + * Helper class to initiate a screen recording + */ +public class ScreenRecordHelper { + private static final String SYSUI_PACKAGE = "com.android.systemui"; + private static final String SYSUI_SCREENRECORD_LAUNCHER = + "com.android.systemui.screenrecord.ScreenRecordDialog"; + + private final Context mContext; + + /** + * Create a new ScreenRecordHelper for the given context + * @param context + */ + public ScreenRecordHelper(Context context) { + mContext = context; + } + + /** + * Show dialog of screen recording options to user. + */ + public void launchRecordPrompt() { + final ComponentName launcherComponent = new ComponentName(SYSUI_PACKAGE, + SYSUI_SCREENRECORD_LAUNCHER); + final Intent intent = new Intent(); + intent.setComponent(launcherComponent); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + mContext.startActivity(intent); + } +} diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml index 44bc3f212654..d9b20637e6b4 100644 --- a/packages/SystemUI/AndroidManifest.xml +++ b/packages/SystemUI/AndroidManifest.xml @@ -136,6 +136,10 @@ + + + + @@ -267,6 +271,10 @@ + + + diff --git a/packages/SystemUI/res/layout/screen_record_dialog.xml b/packages/SystemUI/res/layout/screen_record_dialog.xml new file mode 100644 index 000000000000..6c5c7fac3ed6 --- /dev/null +++ b/packages/SystemUI/res/layout/screen_record_dialog.xml @@ -0,0 +1,41 @@ + + + + + + + + +