diff --git a/src/com/android/customization/widget/OptionSelectorController.java b/src/com/android/customization/widget/OptionSelectorController.java
index efd73ea..5e3a423 100644
--- a/src/com/android/customization/widget/OptionSelectorController.java
+++ b/src/com/android/customization/widget/OptionSelectorController.java
@@ -15,17 +15,17 @@
  */
 package com.android.customization.widget;
 
+import android.content.Context;
 import android.content.res.Resources;
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.LayerDrawable;
+import android.text.TextUtils;
 import android.util.DisplayMetrics;
 import android.view.Gravity;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.view.ViewGroup.MarginLayoutParams;
 import android.view.WindowManager;
-import android.widget.LinearLayout;
 import android.widget.TextView;
 
 import androidx.annotation.NonNull;
@@ -35,7 +35,6 @@
 
 import com.android.customization.model.CustomizationManager;
 import com.android.customization.model.CustomizationOption;
-import com.android.customization.model.theme.custom.ThemeComponentOption;
 import com.android.wallpaper.R;
 
 import java.util.HashSet;
@@ -130,26 +129,19 @@
 
             if (holder instanceof TileViewHolder) {
                 TileViewHolder tileHolder = (TileViewHolder) holder;
-                if (tileHolder.labelView != null) {
-                    if (isActivated) {
-                        if (option == mAppliedOption) {
-                            CharSequence cd = mContainer.getContext().getString(
-                                    R.string.option_applied_previewed_description,
-                                    option.getTitle());
-                            tileHolder.labelView.setContentDescription(cd);
-                        } else {
-                            CharSequence cd = mContainer.getContext().getString(
-                                    R.string.option_previewed_description, option.getTitle());
-                            tileHolder.labelView.setContentDescription(cd);
-                        }
-                    } else if (option == mAppliedOption) {
-                        CharSequence cd = mContainer.getContext().getString(
-                                R.string.option_applied_description, option.getTitle());
-                        tileHolder.labelView.setContentDescription(cd);
+                if (isActivated) {
+                    if (option == mAppliedOption && mShowCheckmark) {
+                        tileHolder.setContentDescription(mContainer.getContext(), option,
+                            R.string.option_applied_previewed_description);
                     } else {
-                        // Remove content description
-                        tileHolder.labelView.setContentDescription(null);
+                        tileHolder.setContentDescription(mContainer.getContext(), option,
+                            R.string.option_previewed_description);
                     }
+                } else if (option == mAppliedOption && mShowCheckmark) {
+                    tileHolder.setContentDescription(mContainer.getContext(), option,
+                        R.string.option_applied_description);
+                } else {
+                    tileHolder.resetContentDescription();
                 }
             }
         } else {
@@ -213,9 +205,12 @@
                     holder.tileView.setForeground(checkedFrame);
 
                     // Initialize the currently applied option
-                    CharSequence cd = mContainer.getContext().getString(
-                            R.string.option_applied_previewed_description, option.getTitle());
-                    holder.labelView.setContentDescription(cd);
+                    holder.setContentDescription(mContainer.getContext(), option,
+                        R.string.option_applied_previewed_description);
+                } else if (option.equals(mAppliedOption)) {
+                    // Initialize with "previewed" description if we don't show checkmark
+                    holder.setContentDescription(mContainer.getContext(), option,
+                        R.string.option_previewed_description);
                 } else if (mShowCheckmark) {
                     holder.tileView.setForeground(null);
                 }
@@ -290,11 +285,42 @@
     private static class TileViewHolder extends RecyclerView.ViewHolder {
         TextView labelView;
         View tileView;
+        CharSequence title;
 
         TileViewHolder(@NonNull View itemView) {
             super(itemView);
             labelView = itemView.findViewById(R.id.option_label);
             tileView = itemView.findViewById(R.id.option_tile);
+            title = null;
+        }
+
+        /**
+         * Set the content description for this holder using the given string id.
+         * If the option does not have a label, the description will be set on the tile view.
+         * @param context The view's context
+         * @param option The customization option
+         * @param id Resource ID of the string to use for the content description
+         */
+        public void setContentDescription(Context context, CustomizationOption option, int id) {
+            title = option.getTitle();
+            if (TextUtils.isEmpty(title) && tileView != null) {
+                title = tileView.getContentDescription();
+            }
+
+            CharSequence cd = context.getString(id, title);
+            if (labelView != null && !TextUtils.isEmpty(labelView.getText())) {
+                labelView.setContentDescription(cd);
+            } else if (tileView != null) {
+                tileView.setContentDescription(cd);
+            }
+        }
+
+        public void resetContentDescription() {
+            if (labelView != null && !TextUtils.isEmpty(labelView.getText())) {
+                labelView.setContentDescription(title);
+            } else if (tileView != null) {
+                tileView.setContentDescription(title);
+            }
         }
     }
 }
