diff --git a/app/build.gradle b/app/build.gradle
index 01d3dc8..876092a 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -24,6 +24,11 @@
         sourceCompatibility JavaVersion.VERSION_1_8
         targetCompatibility JavaVersion.VERSION_1_8
     }
+    sourceSets {
+        main {
+            aidl.srcDirs = ['src/main/java']
+        }
+    }
 }
 
 dependencies {
diff --git a/app/src/main/Android.bp b/app/src/main/Android.bp
index 21b120b..97ffd26 100644
--- a/app/src/main/Android.bp
+++ b/app/src/main/Android.bp
@@ -3,7 +3,13 @@
 
     resource_dirs: ["res"],
 
-    srcs: ["java/**/*.java"],
+    srcs: [
+        "java/**/*.java",
+        "java/**/I*.aidl",
+    ],
+    aidl: {
+        local_include_dirs: ["java"],
+    },
 
     static_libs: [
         "androidx.annotation_annotation",
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 092ae70..b67b39c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -11,6 +11,7 @@
     <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
     <uses-permission android:name="android.permission.ANSWER_PHONE_CALLS" />
     <uses-permission android:name="android.permission.PROCESS_INCOMING_CALLS" />
+    <uses-permission android:name="com.android.systemui.permission.SCREEN_RECORDING" />
 
     <application
         android:allowBackup="true"
@@ -19,6 +20,10 @@
         android:roundIcon="@mipmap/ic_launcher_round"
         android:supportsRtl="true"
         android:theme="@style/AppTheme">
+        <activity
+            android:name=".ui.ScreenRecordConfDialogActivity"
+            android:theme="@style/dialog" />
+
         <receiver
             android:name=".receiver.GamingBroadcastReceiver"
             android:enabled="true">
diff --git a/app/src/main/java/com/android/systemui/screenrecord/IRecordingCallback.aidl b/app/src/main/java/com/android/systemui/screenrecord/IRecordingCallback.aidl
new file mode 100644
index 0000000..ee4a463
--- /dev/null
+++ b/app/src/main/java/com/android/systemui/screenrecord/IRecordingCallback.aidl
@@ -0,0 +1,6 @@
+package com.android.systemui.screenrecord;
+
+interface IRecordingCallback {
+    void onRecordingStart();
+    void onRecordingEnd();
+}
diff --git a/app/src/main/java/com/android/systemui/screenrecord/IRemoteRecording.aidl b/app/src/main/java/com/android/systemui/screenrecord/IRemoteRecording.aidl
new file mode 100644
index 0000000..8e6c027
--- /dev/null
+++ b/app/src/main/java/com/android/systemui/screenrecord/IRemoteRecording.aidl
@@ -0,0 +1,12 @@
+package com.android.systemui.screenrecord;
+
+import com.android.systemui.screenrecord.IRecordingCallback;
+
+interface IRemoteRecording {
+    void startRecording(int audioSource, boolean showTaps);
+    void stopRecording();
+    boolean isRecording();
+    boolean isStarting();
+    void addRecordingCallback(in IRecordingCallback callback);
+    void removeRecordingCallback(in IRecordingCallback callback);
+}
diff --git a/app/src/main/java/com/android/systemui/screenrecord/ScreenRecordingAdapter.java b/app/src/main/java/com/android/systemui/screenrecord/ScreenRecordingAdapter.java
new file mode 100644
index 0000000..05d7dd4
--- /dev/null
+++ b/app/src/main/java/com/android/systemui/screenrecord/ScreenRecordingAdapter.java
@@ -0,0 +1,118 @@
+/*
+ * Copyright (C) 2020 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.systemui.screenrecord;
+
+import static com.android.systemui.screenrecord.ScreenRecordingAudioSource.INTERNAL;
+import static com.android.systemui.screenrecord.ScreenRecordingAudioSource.MIC;
+import static com.android.systemui.screenrecord.ScreenRecordingAudioSource.MIC_AND_INTERNAL;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import org.exthmui.game.R;
+
+import java.util.List;
+
+/**
+ * Screen recording view adapter
+ */
+public class ScreenRecordingAdapter extends ArrayAdapter<ScreenRecordingAudioSource> {
+    private LinearLayout mSelectedMic;
+    private LinearLayout mSelectedInternal;
+    private LinearLayout mSelectedMicAndInternal;
+    private LinearLayout mMicOption;
+    private LinearLayout mMicAndInternalOption;
+    private LinearLayout mInternalOption;
+
+    public ScreenRecordingAdapter(Context context, int resource,
+            List<ScreenRecordingAudioSource> objects) {
+        super(context, resource, objects);
+        initViews();
+    }
+
+    private void initViews() {
+        mSelectedInternal = getSelected(R.string.screenrecord_device_audio_label);
+        mSelectedMic = getSelected(R.string.screenrecord_mic_label);
+        mSelectedMicAndInternal = getSelected(R.string.screenrecord_device_audio_and_mic_label);
+
+        mMicOption = getOption(R.string.screenrecord_mic_label, Resources.ID_NULL);
+        mMicOption.removeViewAt(1);
+
+        mMicAndInternalOption = getOption(
+                R.string.screenrecord_device_audio_and_mic_label, Resources.ID_NULL);
+        mMicAndInternalOption.removeViewAt(1);
+
+        mInternalOption = getOption(R.string.screenrecord_device_audio_label,
+                R.string.screenrecord_device_audio_description);
+    }
+
+    private LinearLayout getOption(int label, int description) {
+        LayoutInflater inflater = (LayoutInflater) getContext()
+                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+        LinearLayout layout = (LinearLayout) inflater
+                .inflate(R.layout.screen_record_dialog_audio_source, null, false);
+        ((TextView) layout.findViewById(R.id.screen_recording_dialog_source_text))
+                .setText(label);
+        if (description != Resources.ID_NULL)
+            ((TextView) layout.findViewById(R.id.screen_recording_dialog_source_description))
+                    .setText(description);
+        return layout;
+    }
+
+    private LinearLayout getSelected(int label) {
+        LayoutInflater inflater = LayoutInflater.from(getContext());
+        LinearLayout layout = (LinearLayout) inflater
+                .inflate(R.layout.screen_record_dialog_audio_source_selected, null, false);
+        ((TextView) layout.findViewById(R.id.screen_recording_dialog_source_text))
+                .setText(label);
+        return layout;
+    }
+
+    @Override
+    public View getDropDownView(int position, View convertView, ViewGroup parent) {
+        switch (getItem(position)) {
+            case INTERNAL:
+                return mInternalOption;
+            case MIC_AND_INTERNAL:
+                return mMicAndInternalOption;
+            case MIC:
+                return mMicOption;
+            default:
+                return super.getDropDownView(position, convertView, parent);
+        }
+    }
+
+    @Override
+    public View getView(int position, View convertView, ViewGroup parent) {
+        switch (getItem(position)) {
+            case INTERNAL:
+                return mSelectedInternal;
+            case MIC_AND_INTERNAL:
+                return mSelectedMicAndInternal;
+            case MIC:
+                return mSelectedMic;
+            default:
+                return super.getView(position, convertView, parent);
+        }
+    }
+}
diff --git a/app/src/main/java/com/android/systemui/screenrecord/ScreenRecordingAudioSource.java b/app/src/main/java/com/android/systemui/screenrecord/ScreenRecordingAudioSource.java
new file mode 100644
index 0000000..ee11865
--- /dev/null
+++ b/app/src/main/java/com/android/systemui/screenrecord/ScreenRecordingAudioSource.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2020 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.systemui.screenrecord;
+
+/**
+ * Audio sources
+ */
+public enum ScreenRecordingAudioSource {
+    NONE,
+    INTERNAL,
+    MIC,
+    MIC_AND_INTERNAL;
+}
diff --git a/app/src/main/java/org/exthmui/game/misc/Constants.java b/app/src/main/java/org/exthmui/game/misc/Constants.java
index 5136639..b9cc259 100644
--- a/app/src/main/java/org/exthmui/game/misc/Constants.java
+++ b/app/src/main/java/org/exthmui/game/misc/Constants.java
@@ -131,5 +131,13 @@
         public static final String FLOATING_BUTTON_COORDINATE_HORIZONTAL_Y = "floating_button_horizontal_y";
         public static final String FLOATING_BUTTON_COORDINATE_VERTICAL_X = "floating_button_vertical_x";
         public static final String FLOATING_BUTTON_COORDINATE_VERTICAL_Y = "floating_button_vertical_y";
+        // 屏幕录制选项
+        public static final String SCREEN_RECORDING_AUDIO_SOURCE = "screen_recording_audio_source";
+        public static final String SCREEN_RECORDING_SHOW_TAP = "screen_recording_show_tap";
+    }
+
+    public static class LocalConfigDefaultValues {
+        public static final int SCREEN_RECORDING_AUDIO_SOURCE = 3;
+        public static final boolean SCREEN_RECORDING_SHOW_TAP = false;
     }
 }
diff --git a/app/src/main/java/org/exthmui/game/qs/ScreenRecordTile.java b/app/src/main/java/org/exthmui/game/qs/ScreenRecordTile.java
new file mode 100644
index 0000000..ca6e14f
--- /dev/null
+++ b/app/src/main/java/org/exthmui/game/qs/ScreenRecordTile.java
@@ -0,0 +1,156 @@
+/*
+ * Copyright (C) 2020 The exTHmUI 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 org.exthmui.game.qs;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.Message;
+import android.os.RemoteException;
+import android.preference.PreferenceManager;
+import android.view.View;
+
+
+import androidx.annotation.NonNull;
+import androidx.localbroadcastmanager.content.LocalBroadcastManager;
+
+import com.android.systemui.screenrecord.IRemoteRecording;
+import com.android.systemui.screenrecord.IRecordingCallback;
+import org.exthmui.game.R;
+import org.exthmui.game.misc.Constants;
+import org.exthmui.game.ui.ScreenRecordConfDialogActivity;
+
+public class ScreenRecordTile extends TileBase implements View.OnLongClickListener {
+
+    private static final String TAG = "ScreenRecordTile";
+    private static final Intent hideMenuIntent = new Intent(Constants.Broadcasts.BROADCAST_GAMING_MENU_CONTROL).putExtra("cmd", "hide");
+
+    private boolean mIsRecording;
+    private IRemoteRecording mBinder;
+    private Intent mRemoteRecordingServiceIntent;
+    private RecordingCallback mCallback = new RecordingCallback();
+    private Context mContext;
+    SharedPreferences mPreferences;
+    private Handler mHandler = new Handler(Looper.getMainLooper()) {
+        @Override
+        public void handleMessage(@NonNull Message msg) {
+            super.handleMessage(msg);
+            if (msg.what == 1) {
+                qsIcon.setSelected(mIsRecording);
+            }
+        }
+    };
+
+    private ServiceConnection mServiceConnection = new ServiceConnection() {
+        @Override
+        public void onServiceConnected(ComponentName componentName,IBinder iBinder) {
+            mBinder = IRemoteRecording.Stub.asInterface(iBinder);
+            try {
+                mBinder.addRecordingCallback(mCallback);
+                setIsRecording(mBinder.isRecording());
+            } catch (RemoteException e) {
+                e.printStackTrace();
+            }
+        } 
+        
+        @Override
+        public void onServiceDisconnected(ComponentName componentName) {
+            mBinder = null;
+        }
+    }; 
+
+    public ScreenRecordTile(Context context) {
+        super(context, context.getString(R.string.qs_screen_record), "", R.drawable.ic_qs_screenrecord);
+        this.setOnLongClickListener(this);
+        mContext = context.getApplicationContext();
+        mRemoteRecordingServiceIntent = new Intent();
+        mRemoteRecordingServiceIntent.setAction("com.android.systemui.screenrecord.RecordingService");
+        mRemoteRecordingServiceIntent.setPackage("com.android.systemui");
+        mContext.bindService(mRemoteRecordingServiceIntent, mServiceConnection, Context.BIND_AUTO_CREATE);
+    }
+
+    @Override
+    public void setConfig(Bundle bundle) {
+
+    }
+
+    @Override
+    public void onClick(View v) {
+        LocalBroadcastManager.getInstance(mContext).sendBroadcastSync(hideMenuIntent);
+        if (mBinder == null) {
+            return;
+        }
+        try {
+            if (mIsRecording) {
+                mBinder.stopRecording();
+            } else {
+                mPreferences = PreferenceManager.getDefaultSharedPreferences(mContext);
+                boolean showTap = mPreferences.getBoolean(Constants.LocalConfigKeys.SCREEN_RECORDING_SHOW_TAP, Constants.LocalConfigDefaultValues.SCREEN_RECORDING_SHOW_TAP);
+                int audioSource = mPreferences.getInt(Constants.LocalConfigKeys.SCREEN_RECORDING_AUDIO_SOURCE, Constants.LocalConfigDefaultValues.SCREEN_RECORDING_AUDIO_SOURCE);
+                mBinder.startRecording(audioSource, showTap);
+            }
+        } catch (RemoteException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    public boolean onLongClick(View v) {
+        if (!mIsRecording) {
+            LocalBroadcastManager.getInstance(mContext).sendBroadcastSync(hideMenuIntent);
+            Intent intent = new Intent(mContext, ScreenRecordConfDialogActivity.class);
+            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+            mContext.startActivity(intent);
+        }
+        return true;
+    }
+
+    void setIsRecording(boolean val) {
+        mIsRecording = val;
+        mHandler.sendEmptyMessage(1);
+    }
+
+    @Override
+    public void onDestroy() {
+        if (mBinder != null) {
+            try {
+                mBinder.removeRecordingCallback(mCallback);
+            } catch (RemoteException e) {
+                e.printStackTrace();
+            }
+        }
+        mContext.unbindService(mServiceConnection);
+    }
+
+    private class RecordingCallback extends IRecordingCallback.Stub {
+        @Override
+        public void onRecordingStart() {
+            setIsRecording(true);
+        }
+
+        @Override
+        public void onRecordingEnd() {
+            setIsRecording(false);
+        }
+    }
+}
diff --git a/app/src/main/java/org/exthmui/game/ui/QuickSettingsView.java b/app/src/main/java/org/exthmui/game/ui/QuickSettingsView.java
index ea3b1ff..8655bda 100644
--- a/app/src/main/java/org/exthmui/game/ui/QuickSettingsView.java
+++ b/app/src/main/java/org/exthmui/game/ui/QuickSettingsView.java
@@ -30,6 +30,7 @@
 import org.exthmui.game.qs.LockGestureTile;
 import org.exthmui.game.qs.LockHwKeysTile;
 import org.exthmui.game.qs.ScreenCaptureTile;
+import org.exthmui.game.qs.ScreenRecordTile;
 import org.exthmui.game.qs.TileBase;
 
 public class QuickSettingsView extends LinearLayout {
@@ -57,6 +58,7 @@
 
         qsTiles = new TileBase[]{
                 new ScreenCaptureTile(context),
+                new ScreenRecordTile(context),
                 new DanmakuTile(context),
                 new DNDTile(context),
                 new LockHwKeysTile(context),
diff --git a/app/src/main/java/org/exthmui/game/ui/ScreenRecordConfDialogActivity.java b/app/src/main/java/org/exthmui/game/ui/ScreenRecordConfDialogActivity.java
new file mode 100644
index 0000000..a2dc97e
--- /dev/null
+++ b/app/src/main/java/org/exthmui/game/ui/ScreenRecordConfDialogActivity.java
@@ -0,0 +1,75 @@
+package org.exthmui.game.ui;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.DialogInterface;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.preference.PreferenceManager;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
+import android.widget.Spinner;
+import android.widget.Switch;
+
+import com.android.systemui.screenrecord.ScreenRecordingAdapter;
+import com.android.systemui.screenrecord.ScreenRecordingAudioSource;
+
+import org.exthmui.game.R;
+import org.exthmui.game.misc.Constants;
+
+import java.util.ArrayList;
+
+import static com.android.systemui.screenrecord.ScreenRecordingAudioSource.INTERNAL;
+import static com.android.systemui.screenrecord.ScreenRecordingAudioSource.MIC;
+import static com.android.systemui.screenrecord.ScreenRecordingAudioSource.MIC_AND_INTERNAL;
+
+public class ScreenRecordConfDialogActivity extends Activity {
+
+    static ArrayList<ScreenRecordingAudioSource> sModes = new ArrayList<>();
+    static {
+        sModes.add(INTERNAL);
+        sModes.add(MIC);
+        sModes.add(MIC_AND_INTERNAL);
+    }
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        AlertDialog.Builder builder = new AlertDialog.Builder(this);
+        View dialogView = LayoutInflater.from(this).inflate(R.layout.screenrecord_config_dialog, null);
+        SharedPreferences mPreferences = PreferenceManager.getDefaultSharedPreferences(this);
+        boolean showTap = mPreferences.getBoolean(Constants.LocalConfigKeys.SCREEN_RECORDING_SHOW_TAP, Constants.LocalConfigDefaultValues.SCREEN_RECORDING_SHOW_TAP);
+        int audioSource = mPreferences.getInt(Constants.LocalConfigKeys.SCREEN_RECORDING_AUDIO_SOURCE, Constants.LocalConfigDefaultValues.SCREEN_RECORDING_AUDIO_SOURCE);
+
+        Switch mAudioSwitch = dialogView.findViewById(R.id.screenrecord_audio_switch);
+        Switch mTapsSwitch = dialogView.findViewById(R.id.screenrecord_taps_switch);
+        Spinner mOptions = dialogView.findViewById(R.id.screen_recording_options);
+        ArrayAdapter a = new ScreenRecordingAdapter(this,
+                android.R.layout.simple_spinner_dropdown_item,
+                sModes);
+        a.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+        mOptions.setAdapter(a);
+
+        mTapsSwitch.setChecked(showTap);
+        if (audioSource != 0) {
+            mAudioSwitch.setChecked(true);
+            mOptions.setSelection(audioSource - 1);
+        } else {
+            mAudioSwitch.setChecked(false);
+            mOptions.setSelection(Constants.LocalConfigDefaultValues.SCREEN_RECORDING_AUDIO_SOURCE - 1);
+        }
+        mOptions.setOnItemClickListenerInt((parent, view, position, id) -> mAudioSwitch.setChecked(true));
+        builder.setView(dialogView);
+        builder.setPositiveButton(android.R.string.ok, (dialog, which) -> {
+            mPreferences.edit()
+                    .putBoolean(Constants.LocalConfigKeys.SCREEN_RECORDING_SHOW_TAP, mTapsSwitch.isChecked())
+                    .putInt(Constants.LocalConfigKeys.SCREEN_RECORDING_AUDIO_SOURCE, mAudioSwitch.isChecked() ? mOptions.getSelectedItemPosition() + 1 : 0)
+                    .apply();
+        });
+        builder.setOnDismissListener(dialog -> finish());
+        builder.create().show();
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_mic_26dp.xml b/app/src/main/res/drawable/ic_mic_26dp.xml
new file mode 100644
index 0000000..ec5aaf5
--- /dev/null
+++ b/app/src/main/res/drawable/ic_mic_26dp.xml
@@ -0,0 +1,28 @@
+<!--
+Copyright (C) 2017 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="26.0dp"
+    android:height="26.0dp"
+    android:viewportWidth="24.0"
+    android:viewportHeight="24.0"
+    android:tint="?android:attr/colorControlNormal">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M12,14c1.66,0 3,-1.34 3,-3V5c0,-1.66 -1.34,-3 -3,-3S9,3.34 9,5v6C9,12.66 10.34,14 12,14zM11,5c0,-0.55 0.45,-1 1,-1s1,0.45 1,1v6c0,0.55 -0.45,1 -1,1s-1,-0.45 -1,-1V5z"/>
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M17,11c0,2.76 -2.24,5 -5,5s-5,-2.24 -5,-5H5c0,3.53 2.61,6.43 6,6.92V21h2v-3.08c3.39,-0.49 6,-3.39 6,-6.92H17z"/>
+</vector>
diff --git a/app/src/main/res/drawable/ic_qs_screenrecord.xml b/app/src/main/res/drawable/ic_qs_screenrecord.xml
new file mode 100644
index 0000000..d4f807a
--- /dev/null
+++ b/app/src/main/res/drawable/ic_qs_screenrecord.xml
@@ -0,0 +1,25 @@
+<!--
+Copyright (C) 2020 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?android:attr/colorControlNormal">
+    <path
+        android:fillColor="#FFFFFFFF"
+        android:pathData="M12,16c-2.21,0 -4,-1.79 -4,-4c0,-2.21 1.79,-4 4,-4c2.21,0 4,1.79 4,4C16,14.21 14.21,16 12,16zM11.99,1.99c-2.22,0 -4.26,0.73 -5.92,1.96l1.44,1.44c1.28,-0.87 2.82,-1.39 4.49,-1.39c1.67,0 3.21,0.52 4.5,1.4l1.44,-1.44C16.26,2.72 14.22,1.99 11.99,1.99zM16.48,18.6c-1.28,0.87 -2.82,1.39 -4.49,1.39c-1.66,0 -3.2,-0.52 -4.47,-1.39l-1.44,1.44c1.66,1.22 3.7,1.95 5.91,1.95c2.22,0 4.26,-0.73 5.92,-1.95L16.48,18.6zM5.39,16.49c-0.88,-1.28 -1.4,-2.83 -1.4,-4.5c0,-1.66 0.52,-3.21 1.39,-4.49L3.95,6.07c-1.22,1.66 -1.95,3.7 -1.95,5.92c0,2.22 0.73,4.27 1.96,5.93L5.39,16.49zM20.04,6.08l-1.44,1.44c0.87,1.28 1.39,2.82 1.39,4.47c0,1.66 -0.52,3.2 -1.39,4.49l1.44,1.44c1.22,-1.66 1.96,-3.7 1.96,-5.92C21.99,9.78 21.26,7.73 20.04,6.08z"/>
+</vector>
diff --git a/app/src/main/res/drawable/ic_touch.xml b/app/src/main/res/drawable/ic_touch.xml
new file mode 100644
index 0000000..381f48b
--- /dev/null
+++ b/app/src/main/res/drawable/ic_touch.xml
@@ -0,0 +1,27 @@
+<!--
+Copyright (C) 2020 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.
+-->
+<!-- maybe need android:fillType="evenOdd" -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24.0"
+    android:viewportHeight="24.0"
+    android:tint="?android:attr/colorControlNormal">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M9,7.5V11.24C7.79,10.43 7,9.06 7,7.5C7,5.01 9.01,3 11.5,3C13.99,3 16,5.01 16,7.5C16,9.06 15.21,10.43 14,11.24V7.5C14,6.12 12.88,5 11.5,5C10.12,5 9,6.12 9,7.5ZM14.3,13.61L18.84,15.87C19.37,16.09 19.75,16.63 19.75,17.25C19.75,17.31 19.74,17.38 19.73,17.45L18.98,22.72C18.87,23.45 18.29,24 17.54,24H10.75C10.34,24 9.96,23.83 9.69,23.56L4.75,18.62L5.54,17.82C5.74,17.62 6.02,17.49 6.33,17.49C6.39,17.49 6.4411,17.4989 6.4922,17.5078C6.5178,17.5122 6.5433,17.5167 6.57,17.52L10,18.24V7.5C10,6.67 10.67,6 11.5,6C12.33,6 13,6.67 13,7.5V13.5H13.76C13.95,13.5 14.13,13.54 14.3,13.61Z"
+        />
+</vector>
diff --git a/app/src/main/res/layout/activity_dialog.xml b/app/src/main/res/layout/activity_dialog.xml
new file mode 100644
index 0000000..07134ef
--- /dev/null
+++ b/app/src/main/res/layout/activity_dialog.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context=".ui.ScreenRecordConfDialogActivity">
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/screen_record_dialog_audio_source.xml b/app/src/main/res/layout/screen_record_dialog_audio_source.xml
new file mode 100644
index 0000000..0c4d5a2
--- /dev/null
+++ b/app/src/main/res/layout/screen_record_dialog_audio_source.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2020 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.
+  -->
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="250dp"
+    android:layout_height="48dp"
+    android:orientation="vertical"
+    android:padding="13dp">
+    <TextView
+        android:id="@+id/screen_recording_dialog_source_text"
+        android:layout_width="250dp"
+        android:layout_height="match_parent"
+        android:layout_gravity="center_vertical"
+        android:textAppearance="?android:attr/textAppearanceSmall"
+        android:textColor="?android:attr/textColorPrimary"/>
+    <TextView
+        android:id="@+id/screen_recording_dialog_source_description"
+        android:layout_width="250dp"
+        android:layout_height="wrap_content"
+        android:textAppearance="?android:attr/textAppearanceSmall"
+        android:textColor="?android:attr/textColorSecondary"/>
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/screen_record_dialog_audio_source_selected.xml b/app/src/main/res/layout/screen_record_dialog_audio_source_selected.xml
new file mode 100644
index 0000000..fabe9e2
--- /dev/null
+++ b/app/src/main/res/layout/screen_record_dialog_audio_source_selected.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2020 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.
+  -->
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="48dp"
+    android:orientation="vertical"
+    android:layout_weight="1">
+    <TextView
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:text="@string/screenrecord_audio_label"
+        android:textAppearance="?android:attr/textAppearanceSmall"
+        android:textColor="?android:attr/textColorPrimary"/>
+    <TextView
+        android:id="@+id/screen_recording_dialog_source_text"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:textColor="?android:attr/textColorSecondary"
+        android:textAppearance="?android:attr/textAppearanceSmall"/>
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/screenrecord_config_dialog.xml b/app/src/main/res/layout/screenrecord_config_dialog.xml
new file mode 100644
index 0000000..fcc8217
--- /dev/null
+++ b/app/src/main/res/layout/screenrecord_config_dialog.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:padding="12dp"
+    android:orientation="vertical">
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal">
+        <ImageView
+            android:layout_width="@dimen/screenrecord_logo_size"
+            android:layout_height="@dimen/screenrecord_logo_size"
+            android:src="@drawable/ic_mic_26dp"
+            android:layout_gravity="center"
+            android:layout_weight="0"
+            android:layout_marginRight="@dimen/screenrecord_dialog_padding"/>
+        <Spinner
+            android:id="@+id/screen_recording_options"
+            android:layout_width="0dp"
+            android:layout_height="48dp"
+            android:layout_weight="1"
+            android:prompt="@string/screenrecord_audio_label"/>
+        <Switch
+            android:layout_width="wrap_content"
+            android:minWidth="48dp"
+            android:layout_height="48dp"
+            android:layout_weight="0"
+            android:layout_gravity="end"
+            android:contentDescription="@string/screenrecord_audio_label"
+            android:id="@+id/screenrecord_audio_switch"/>
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal">
+        <ImageView
+            android:layout_width="@dimen/screenrecord_logo_size"
+            android:layout_height="@dimen/screenrecord_logo_size"
+            android:src="@drawable/ic_touch"
+            android:layout_gravity="center"
+            android:layout_marginRight="@dimen/screenrecord_dialog_padding"/>
+        <Switch
+            android:layout_width="match_parent"
+            android:layout_height="48dp"
+            android:id="@+id/screenrecord_taps_switch"
+            android:text="@string/screenrecord_taps_label"
+            android:textColor="?android:attr/textColorPrimary"
+            android:textAppearance="?android:attr/textAppearanceSmall"/>
+
+    </LinearLayout>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 5308a32..2c998ce 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -24,4 +24,11 @@
     <string name="qs_lock_gesture">屏蔽手势</string>
     <string name="qs_lock_hw_keys">屏蔽按键</string>
     <string name="qs_screen_capture">屏幕截图</string>
+    <string name="qs_screen_record">录制屏幕</string>
+    <string name="screenrecord_device_audio_label">"设备音频"</string>
+    <string name="screenrecord_audio_label">"录制音频"</string>
+    <string name="screenrecord_taps_label">"显示触屏位置"</string>
+    <string name="screenrecord_device_audio_description">"设备发出的声音，例如音乐、通话和铃声"</string>
+    <string name="screenrecord_mic_label">"麦克风"</string>
+    <string name="screenrecord_device_audio_and_mic_label">"设备音频和麦克风"</string>
 </resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 6599688..1beb1a4 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -4,4 +4,5 @@
     <color name="colorPrimaryDark">#3700B3</color>
     <color name="colorAccent">#03DAC5</color>
     <color name="gamingMenuBackground">#66000000</color>
+    <color name="GM2_grey_700">#5F6368</color>
 </resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index 156c92b..57791d6 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -7,4 +7,6 @@
     <dimen name="music_info_margin_horizontal">6dp</dimen>
     <dimen name="time_battery_margin_horizontal">6dp</dimen>
     <dimen name="gaming_menu_padding">12dp</dimen>
+    <dimen name="screenrecord_dialog_padding">18dp</dimen>
+    <dimen name="screenrecord_logo_size">24dp</dimen>
 </resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index f57a46c..00515a9 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -24,4 +24,15 @@
     <string name="qs_lock_gesture">Lock gesture</string>
     <string name="qs_lock_hw_keys">Lock hardware keys</string>
     <string name="qs_screen_capture">Screen capture</string>
+    <string name="qs_screen_record">Screen record</string>
+    <string name="screenrecord_audio_label">Record audio</string>
+    <string name="screenrecord_taps_label">Show touches on screen</string>
+    <!-- Label for the option to record audio from the device [CHAR LIMIT=NONE]-->
+    <string name="screenrecord_device_audio_label">Device audio</string>
+    <!-- Description of what audio may be captured from the device [CHAR LIMIT=NONE]-->
+    <string name="screenrecord_device_audio_description">Sound from your device, like music, calls, and ringtones</string>
+    <!-- Label for the option to enable microphone input during screen recording [CHAR LIMIT=NONE]-->
+    <string name="screenrecord_mic_label">Microphone</string>
+    <!-- Label for an option to record audio from both device and microphone [CHAR LIMIT=NONE]-->
+    <string name="screenrecord_device_audio_and_mic_label">Device audio and microphone</string>
 </resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 8e3341b..0ccf3ea 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -8,4 +8,12 @@
         <item name="android:textColor">#ffffffff</item>
         <item name="android:textColorSecondary">#ffe0e0e0</item>
     </style>
+
+    <style name="dialog" parent="@*android:style/Theme.DeviceDefault.Dialog.Alert.DayNight">
+        <item name="android:windowFrame">@null</item>
+        <item name="android:windowIsFloating">true</item>
+        <item name="android:windowIsTranslucent">true</item>
+        <item name="android:windowNoTitle">true</item>
+        <item name="android:windowBackground">@android:color/transparent</item>
+    </style>
 </resources>
\ No newline at end of file
