Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1ad4dc59 authored by Anna Bauza's avatar Anna Bauza
Browse files

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

Bug: 269603336
Test: manual
Change-Id: I786af065f76e39fe6f982018e993819ce0627d86
parent 47ac0112
Loading
Loading
Loading
Loading
+30 −11
Original line number Diff line number Diff line
@@ -108,6 +108,12 @@ public class AvatarPickerActivity extends Activity {
                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 @@ public class AvatarPickerActivity extends Activity {
        private final int[] mUserIconColors;
        private int mSelectedPosition = NONE;

        private int mLastSelectedPosition = NONE;

        AvatarAdapter() {
            final boolean canTakePhoto =
                    PhotoCapabilityUtils.canTakePhoto(AvatarPickerActivity.this);
@@ -226,12 +234,10 @@ public class AvatarPickerActivity extends Activity {
            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 @@ public class AvatarPickerActivity extends Activity {
                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 -> {
            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