fix: Avatar picker opens multiple photo picker window when tapped quickly

Bug: 269603336
Test: manual
Change-Id: I786af065f76e39fe6f982018e993819ce0627d86
diff --git a/packages/SettingsLib/src/com/android/settingslib/users/AvatarPickerActivity.java b/packages/SettingsLib/src/com/android/settingslib/users/AvatarPickerActivity.java
index f5dddc3..bcbd1ca 100644
--- a/packages/SettingsLib/src/com/android/settingslib/users/AvatarPickerActivity.java
+++ b/packages/SettingsLib/src/com/android/settingslib/users/AvatarPickerActivity.java
@@ -108,6 +108,12 @@
                 mWaitingForActivityResult);
     }
 
+    @Override
+    protected void onResume() {
+        super.onResume();
+        mAdapter.onAdapterResume();
+    }
+
     private void setUpButtons() {
         GlifLayout glifLayout = findViewById(R.id.glif_layout);
         FooterBarMixin mixin = glifLayout.getMixin(FooterBarMixin.class);
@@ -198,6 +204,8 @@
         private final int[] mUserIconColors;
         private int mSelectedPosition = NONE;
 
+        private int mLastSelectedPosition = NONE;
+
         AvatarAdapter() {
             final boolean canTakePhoto =
                     PhotoCapabilityUtils.canTakePhoto(AvatarPickerActivity.this);
@@ -226,12 +234,10 @@
             if (position == mTakePhotoPosition) {
                 viewHolder.setDrawable(getDrawable(R.drawable.avatar_take_photo_circled));
                 viewHolder.setContentDescription(getString(R.string.user_image_take_photo));
-                viewHolder.setClickListener(view -> mAvatarPhotoController.takePhoto());
 
             } else if (position == mChoosePhotoPosition) {
                 viewHolder.setDrawable(getDrawable(R.drawable.avatar_choose_photo_circled));
                 viewHolder.setContentDescription(getString(R.string.user_image_choose_photo));
-                viewHolder.setClickListener(view -> mAvatarPhotoController.choosePhoto());
 
             } else if (position >= mPreselectedImageStartPosition) {
                 int index = indexFromPosition(position);
@@ -240,17 +246,30 @@
                 if (mImageDescriptions != null) {
                     viewHolder.setContentDescription(mImageDescriptions.get(index));
                 } else {
-                    viewHolder.setContentDescription(
-                            getString(R.string.default_user_icon_description));
+                    viewHolder.setContentDescription(getString(
+                            R.string.default_user_icon_description));
                 }
-                viewHolder.setClickListener(view -> {
-                    if (mSelectedPosition == position) {
-                        deselect(position);
-                    } else {
-                        select(position);
-                    }
-                });
             }
+            viewHolder.setClickListener(view -> onViewHolderSelected(position));
+        }
+
+        private void onViewHolderSelected(int position) {
+            if ((mTakePhotoPosition == position) && (mLastSelectedPosition != position)) {
+                mAvatarPhotoController.takePhoto();
+            } else if ((mChoosePhotoPosition == position) && (mLastSelectedPosition != position)) {
+                mAvatarPhotoController.choosePhoto();
+            } else {
+                if (mSelectedPosition == position) {
+                    deselect(position);
+                } else {
+                    select(position);
+                }
+            }
+            mLastSelectedPosition = position;
+        }
+
+        public void onAdapterResume() {
+            mLastSelectedPosition = NONE;
         }
 
         @Override