diff --git a/res/layout/night_display_activation_button.xml b/res/layout/night_display_activation_button.xml
index 8765ff7..df160ec 100644
--- a/res/layout/night_display_activation_button.xml
+++ b/res/layout/night_display_activation_button.xml
@@ -24,7 +24,6 @@
     <Button
         android:id="@+id/night_display_turn_on_button"
         style="@style/ActionPrimaryButton"
-        android:focusableInTouchMode="true"
         android:layout_marginStart="@dimen/screen_margin_sides"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
@@ -33,7 +32,6 @@
     <Button
         android:id="@+id/night_display_turn_off_button"
         style="@style/ActionSecondaryButton"
-        android:focusableInTouchMode="true"
         android:layout_marginStart="@dimen/screen_margin_sides"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
diff --git a/res/layout/zen_mode_settings_button.xml b/res/layout/zen_mode_settings_button.xml
index f234a89..db889ff 100644
--- a/res/layout/zen_mode_settings_button.xml
+++ b/res/layout/zen_mode_settings_button.xml
@@ -38,7 +38,6 @@
         android:layout_marginTop="@dimen/zen_mode_settings_button_margin_vertical"
         android:layout_marginBottom="@dimen/zen_mode_settings_button_margin_vertical"
         android:text="@string/zen_mode_button_turn_on"
-        android:focusableInTouchMode="true"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"/>
 
@@ -50,7 +49,6 @@
         android:layout_marginTop="@dimen/zen_mode_settings_button_margin_vertical"
         android:layout_marginBottom="@dimen/zen_mode_settings_button_margin_vertical"
         android:text="@string/zen_mode_button_turn_off"
-        android:focusableInTouchMode="true"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"/>
 
diff --git a/src/com/android/settings/display/NightDisplayActivationPreferenceController.java b/src/com/android/settings/display/NightDisplayActivationPreferenceController.java
index 4b1e295..cf9332b 100644
--- a/src/com/android/settings/display/NightDisplayActivationPreferenceController.java
+++ b/src/com/android/settings/display/NightDisplayActivationPreferenceController.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.display;
 
+import static android.view.accessibility.AccessibilityEvent.TYPE_VIEW_FOCUSED;
+
 import android.content.Context;
 import android.hardware.display.ColorDisplayManager;
 import android.text.TextUtils;
@@ -39,20 +41,16 @@
     private NightDisplayTimeFormatter mTimeFormatter;
     private LayoutPreference mPreference;
 
-    // Night light can also be toggled from QS. If night light wasn't toggled by this preference,
-    // don't requestFocus
-    private boolean mButtonTriggered = false;
     private Button mTurnOffButton;
     private Button mTurnOnButton;
 
     private final OnClickListener mListener = new OnClickListener() {
         @Override
         public void onClick(View v) {
-            mButtonTriggered = true;
             mMetricsFeatureProvider.logClickedPreference(mPreference, getMetricsCategory());
             mColorDisplayManager.setNightDisplayActivated(
                     !mColorDisplayManager.isNightDisplayActivated());
-            updateStateInternal();
+            updateStateInternal(true);
         }
     };
 
@@ -93,7 +91,7 @@
 
     @Override
     public final void updateState(Preference preference) {
-        updateStateInternal();
+        updateStateInternal(false);
     }
 
     /** FOR SLICES */
@@ -113,7 +111,7 @@
         return mTimeFormatter.getAutoModeSummary(mContext, mColorDisplayManager);
     }
 
-    private void updateStateInternal() {
+    private void updateStateInternal(boolean selfChanged) {
         if (mTurnOnButton == null || mTurnOffButton == null) {
             return;
         }
@@ -143,17 +141,15 @@
             mTurnOnButton.setVisibility(View.GONE);
             mTurnOffButton.setVisibility(View.VISIBLE);
             mTurnOffButton.setText(buttonText);
-            if (mButtonTriggered) {
-                mButtonTriggered = false;
-                mTurnOffButton.requestFocus();
+            if (selfChanged) {
+                mTurnOffButton.sendAccessibilityEvent(TYPE_VIEW_FOCUSED);
             }
         } else {
             mTurnOnButton.setVisibility(View.VISIBLE);
             mTurnOffButton.setVisibility(View.GONE);
             mTurnOnButton.setText(buttonText);
-            if (mButtonTriggered) {
-                mButtonTriggered = false;
-                mTurnOnButton.requestFocus();
+            if (selfChanged) {
+                mTurnOnButton.sendAccessibilityEvent(TYPE_VIEW_FOCUSED);
             }
         }
     }
diff --git a/src/com/android/settings/notification/zen/ZenModeButtonPreferenceController.java b/src/com/android/settings/notification/zen/ZenModeButtonPreferenceController.java
index e97cbba..dc338bd 100644
--- a/src/com/android/settings/notification/zen/ZenModeButtonPreferenceController.java
+++ b/src/com/android/settings/notification/zen/ZenModeButtonPreferenceController.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.notification.zen;
 
+import static android.view.accessibility.AccessibilityEvent.TYPE_VIEW_FOCUSED;
+
 import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.provider.Settings;
@@ -40,8 +42,9 @@
     private static final String TAG = "EnableZenModeButton";
     private final FragmentManager mFragment;
 
-    // DND can also be toggled from QS. If DND wasn't toggled by this preference, don't requestFocus
-    private boolean mButtonTriggered = false;
+    // DND can also be toggled from QS. If DND wasn't toggled by this preference, don't
+    // reroute focus.
+    private boolean mRefocusButton = false;
     private Button mZenButtonOn;
     private Button mZenButtonOff;
 
@@ -75,7 +78,7 @@
             mZenButtonOff = ((LayoutPreference) preference)
                     .findViewById(R.id.zen_mode_settings_turn_off_button);
             mZenButtonOff.setOnClickListener(v -> {
-                mButtonTriggered = true;
+                mRefocusButton = true;
                 writeMetrics(preference, false);
                 mBackend.setZenMode(Settings.Global.ZEN_MODE_OFF);
             });
@@ -91,9 +94,9 @@
             case Settings.Global.ZEN_MODE_NO_INTERRUPTIONS:
                 mZenButtonOff.setVisibility(View.VISIBLE);
                 mZenButtonOn.setVisibility(View.GONE);
-                if (mButtonTriggered) {
-                    mButtonTriggered = false;
-                    mZenButtonOff.requestFocus();
+                if (mRefocusButton) {
+                    mRefocusButton = false;
+                    mZenButtonOff.sendAccessibilityEvent(TYPE_VIEW_FOCUSED);
                 }
                 break;
             case Settings.Global.ZEN_MODE_OFF:
@@ -101,16 +104,16 @@
                 mZenButtonOff.setVisibility(View.GONE);
                 updateZenButtonOnClickListener(preference);
                 mZenButtonOn.setVisibility(View.VISIBLE);
-                if (mButtonTriggered) {
-                    mButtonTriggered = false;
-                    mZenButtonOn.requestFocus();
+                if (mRefocusButton) {
+                    mRefocusButton = false;
+                    mZenButtonOn.sendAccessibilityEvent(TYPE_VIEW_FOCUSED);
                 }
         }
     }
 
     private void updateZenButtonOnClickListener(Preference preference) {
         mZenButtonOn.setOnClickListener(v -> {
-            mButtonTriggered = true;
+            mRefocusButton = true;
             writeMetrics(preference, true);
             int zenDuration = getZenDuration();
             switch (zenDuration) {
