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

Commit 7098721d authored by Wenyi Wang's avatar Wenyi Wang Committed by android-build-merger
Browse files

Merge "Enable Talkback for photo picker" into ub-contactsdialer-a-dev am: 96ed3c6f

am: bfac4927

* commit 'bfac4927':
  Enable Talkback for photo picker
parents 37756f26 bfac4927
Loading
Loading
Loading
Loading
+8 −0
Original line number Original line Diff line number Diff line
@@ -890,4 +890,12 @@
    type. For example: Delete Website, Delete SIP, etc [CHAR LIMIT=30]-->
    type. For example: Delete Website, Delete SIP, etc [CHAR LIMIT=30]-->
    <string name="editor_delete_view_description_short">Delete <xliff:g id="data_kind">%s</xliff:g></string>
    <string name="editor_delete_view_description_short">Delete <xliff:g id="data_kind">%s</xliff:g></string>


    <!-- Content description of photo in photo picker indicating a photo from a specific account is *not* selected.
         For example: Photo from Google abc@gmail.com not checked. [CHAR LIMIT=30]-->
    <string name="photo_view_description_not_checked">Photo from <xliff:g id="account_type">%s </xliff:g><xliff:g id="user_name">%s </xliff:g>not checked</string>

    <!-- Content description of photo in photo picker indicating a photo from a specific account is selected.
         For example: Photo from Google abc@gmail.com checked. [CHAR LIMIT=30]-->
    <string name="photo_view_description_checked">Photo from <xliff:g id="account_type">%s </xliff:g><xliff:g id="user_name">%s </xliff:g>checked</string>

</resources>
</resources>
+36 −4
Original line number Original line Diff line number Diff line
@@ -34,6 +34,7 @@ import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.MenuItem;
import android.view.View;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup;
import android.view.accessibility.AccessibilityEvent;
import android.widget.AdapterView;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.GridView;
@@ -94,6 +95,9 @@ public class CompactPhotoSelectionFragment extends Fragment {
        public int titleRes;
        public int titleRes;
        public int iconRes;
        public int iconRes;
        public String syncAdapterPackageName;
        public String syncAdapterPackageName;
        // Account type and user name of a photo
        public String accountType;
        public String accountName;


        public ValuesDelta valuesDelta;
        public ValuesDelta valuesDelta;


@@ -248,6 +252,12 @@ public class CompactPhotoSelectionFragment extends Fragment {
            final ImageView checkImageView = (ImageView) photoItemView.findViewById(R.id.check);
            final ImageView checkImageView = (ImageView) photoItemView.findViewById(R.id.check);
            checkImageView.setVisibility(photo.primary ? View.VISIBLE : View.GONE);
            checkImageView.setVisibility(photo.primary ? View.VISIBLE : View.GONE);


            final String contentDescription = getString(photo.primary ?
                    R.string.photo_view_description_checked :
                    R.string.photo_view_description_not_checked,
                    photo.accountType, photo.accountName);
            photoItemView.setContentDescription(contentDescription);

            return photoItemView;
            return photoItemView;
        }
        }
    }
    }
@@ -255,6 +265,7 @@ public class CompactPhotoSelectionFragment extends Fragment {
    private ArrayList<Photo> mPhotos;
    private ArrayList<Photo> mPhotos;
    private int mPhotoMode;
    private int mPhotoMode;
    private Listener mListener;
    private Listener mListener;
    private GridView mGridView;


    public void setListener(Listener listener) {
    public void setListener(Listener listener) {
        mListener = listener;
        mListener = listener;
@@ -263,6 +274,7 @@ public class CompactPhotoSelectionFragment extends Fragment {
    public void setPhotos(ArrayList<Photo> photos, int photoMode) {
    public void setPhotos(ArrayList<Photo> photos, int photoMode) {
        mPhotos = photos;
        mPhotos = photos;
        mPhotoMode = photoMode;
        mPhotoMode = photoMode;
        mGridView.setAccessibilityDelegate(new View.AccessibilityDelegate() {});
    }
    }


    @Override
    @Override
@@ -282,9 +294,9 @@ public class CompactPhotoSelectionFragment extends Fragment {


        final View view = inflater.inflate(R.layout.compact_photo_selection_fragment,
        final View view = inflater.inflate(R.layout.compact_photo_selection_fragment,
                container, false);
                container, false);
        final GridView gridView = (GridView) view.findViewById(R.id.grid_view);
        mGridView = (GridView) view.findViewById(R.id.grid_view);
        gridView.setAdapter(photoAdapter);
        mGridView.setAdapter(photoAdapter);
        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                final PhotoSourceDialogFragment.Listener listener = (PhotoSourceDialogFragment.Listener)
                final PhotoSourceDialogFragment.Listener listener = (PhotoSourceDialogFragment.Listener)
                        getActivity();
                        getActivity();
@@ -298,6 +310,7 @@ public class CompactPhotoSelectionFragment extends Fragment {
                    if (mListener != null) {
                    if (mListener != null) {
                        mListener.onPhotoSelected(photo);
                        mListener.onPhotoSelected(photo);
                    }
                    }
                    handleAccessibility(photo, position);
                }
                }
            }
            }
        });
        });
@@ -314,11 +327,30 @@ public class CompactPhotoSelectionFragment extends Fragment {
        float density  = getResources().getDisplayMetrics().density;
        float density  = getResources().getDisplayMetrics().density;
        float dpColumnWidth  = (outMetrics.widthPixels - paddingWidth * (mNumberOfColumns - 1) *
        float dpColumnWidth  = (outMetrics.widthPixels - paddingWidth * (mNumberOfColumns - 1) *
                density) / mNumberOfColumns;
                density) / mNumberOfColumns;
        gridView.setColumnWidth((int) dpColumnWidth);
        mGridView.setColumnWidth((int) dpColumnWidth);


        return view;
        return view;
    }
    }


    private void handleAccessibility(Photo photo, int position) {
        // Use custom AccessibilityDelegate when closing this fragment to suppress event.
        mGridView.setAccessibilityDelegate(new View.AccessibilityDelegate() {
            @Override
            public boolean onRequestSendAccessibilityEvent(
                    ViewGroup host, View child,AccessibilityEvent event) {
                if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED) {
                    return false;
                }
                return super.onRequestSendAccessibilityEvent(host, child, event);
            }
        });
        final ViewGroup clickedView = (ViewGroup) mGridView.getChildAt(position);
        final String contentDescription = getString(
                R.string.photo_view_description_checked,
                photo.accountType, photo.accountName);
        clickedView.announceForAccessibility(contentDescription);
    }

    @Override
    @Override
    public void onSaveInstanceState(Bundle outState) {
    public void onSaveInstanceState(Bundle outState) {
        outState.putParcelableArrayList(STATE_PHOTOS, mPhotos);
        outState.putParcelableArrayList(STATE_PHOTOS, mPhotos);
+2 −0
Original line number Original line Diff line number Diff line
@@ -548,6 +548,8 @@ public class CompactRawContactsEditorView extends LinearLayout implements View.O
                photo.primary = valuesDelta.isSuperPrimary();
                photo.primary = valuesDelta.isSuperPrimary();
                photo.kindSectionDataListIndex = i;
                photo.kindSectionDataListIndex = i;
                photo.valuesDeltaListIndex = j;
                photo.valuesDeltaListIndex = j;
                photo.accountType = accountType.getDisplayLabel(getContext()).toString();
                photo.accountName = kindSectionData.getRawContactDelta().getAccountName();


                if (updatedPhotos != null) {
                if (updatedPhotos != null) {
                    photo.updatedPhotoUri = (Uri) updatedPhotos.get(String.valueOf(
                    photo.updatedPhotoUri = (Uri) updatedPhotos.get(String.valueOf(