Loading res/values/strings.xml +8 −0 Original line number Original line Diff line number Diff line Loading @@ -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> src/com/android/contacts/editor/CompactPhotoSelectionFragment.java +36 −4 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; } } } } Loading @@ -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; Loading @@ -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 Loading @@ -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(); Loading @@ -298,6 +310,7 @@ public class CompactPhotoSelectionFragment extends Fragment { if (mListener != null) { if (mListener != null) { mListener.onPhotoSelected(photo); mListener.onPhotoSelected(photo); } } handleAccessibility(photo, position); } } } } }); }); Loading @@ -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); Loading src/com/android/contacts/editor/CompactRawContactsEditorView.java +2 −0 Original line number Original line Diff line number Diff line Loading @@ -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( Loading Loading
res/values/strings.xml +8 −0 Original line number Original line Diff line number Diff line Loading @@ -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>
src/com/android/contacts/editor/CompactPhotoSelectionFragment.java +36 −4 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; } } } } Loading @@ -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; Loading @@ -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 Loading @@ -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(); Loading @@ -298,6 +310,7 @@ public class CompactPhotoSelectionFragment extends Fragment { if (mListener != null) { if (mListener != null) { mListener.onPhotoSelected(photo); mListener.onPhotoSelected(photo); } } handleAccessibility(photo, position); } } } } }); }); Loading @@ -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); Loading
src/com/android/contacts/editor/CompactRawContactsEditorView.java +2 −0 Original line number Original line Diff line number Diff line Loading @@ -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( Loading