diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java
index 97cf1e5..12ac805 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java
@@ -52,6 +52,7 @@
 import com.android.systemui.tuner.TunerService;
 import com.android.systemui.util.wakelock.KeepAwakeAnimationListener;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.function.Consumer;
@@ -156,7 +157,15 @@
 
         ListContent lc = new ListContent(getContext(), mSlice);
         mHasHeader = lc.hasHeader();
-        List<SliceItem> subItems = lc.getRowItems();
+        List<SliceItem> subItems = new ArrayList<SliceItem>();
+        for (int i = 0; i < lc.getRowItems().size(); i++) {
+            SliceItem subItem = lc.getRowItems().get(i);
+            String itemUri = subItem.getSlice().getUri().toString();
+            // Filter out the action row
+            if (!KeyguardSliceProvider.KEYGUARD_ACTION_URI.equals(itemUri)) {
+                subItems.add(subItem);
+            }
+        }
         if (!mHasHeader) {
             mTitle.setVisibility(GONE);
         } else {
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java
index 8b9bf77..fe8ea34 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java
@@ -19,6 +19,7 @@
 import android.app.ActivityManager;
 import android.app.AlarmManager;
 import android.app.NotificationManager;
+import android.app.PendingIntent;
 import android.content.BroadcastReceiver;
 import android.content.ContentResolver;
 import android.content.Context;
@@ -48,6 +49,7 @@
 import androidx.slice.SliceProvider;
 import androidx.slice.builders.ListBuilder;
 import androidx.slice.builders.ListBuilder.RowBuilder;
+import androidx.slice.builders.SliceAction;
 
 /**
  * Simple Slice provider that shows the current date.
@@ -60,6 +62,8 @@
     public static final String KEYGUARD_NEXT_ALARM_URI =
             "content://com.android.systemui.keyguard/alarm";
     public static final String KEYGUARD_DND_URI = "content://com.android.systemui.keyguard/dnd";
+    public static final String KEYGUARD_ACTION_URI =
+            "content://com.android.systemui.keyguard/action";
 
     /**
      * Only show alarms that will ring within N hours.
@@ -127,9 +131,22 @@
         builder.addRow(new RowBuilder(builder, mDateUri).setTitle(mLastText));
         addNextAlarm(builder);
         addZenMode(builder);
+        addPrimaryAction(builder);
         return builder.build();
     }
 
+    protected void addPrimaryAction(ListBuilder builder) {
+        // Add simple action because API requires it; Keyguard handles presenting
+        // its own slices so this action + icon are actually never used.
+        PendingIntent pi = PendingIntent.getActivity(getContext(), 0, new Intent(), 0);
+        Icon icon = Icon.createWithResource(getContext(), R.drawable.ic_access_alarms_big);
+        SliceAction action = new SliceAction(pi, icon, mLastText);
+
+        RowBuilder primaryActionRow = new RowBuilder(builder, Uri.parse(KEYGUARD_ACTION_URI))
+            .setPrimaryAction(action);
+        builder.addRow(primaryActionRow);
+    }
+
     protected void addNextAlarm(ListBuilder builder) {
         if (TextUtils.isEmpty(mNextAlarm)) {
             return;
