Merge "Correctly remove ViewPager views" into ub-launcher3-qt-r1-dev
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);
+            }
         }
     }
 }