diff options
author | yoichi kakimoto <youichi.kakimoto.gt@kyocera.jp> | 2017-11-10 18:05:10 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-11-10 18:05:10 +0000 |
commit | 342a1e77e31abcbf0b6bccd8a08c02820330ae49 (patch) | |
tree | 9a5e793df2776b88c41b14d2d1778c3e54844dba /src/com/android/contacts | |
parent | e18600ad6c8bf37e6ff37d6391c560bcd9c5d77e (diff) | |
parent | ec84224dd6b9533a1bc907fb5793bfe5de606b1c (diff) | |
download | packages_apps_Contacts-342a1e77e31abcbf0b6bccd8a08c02820330ae49.tar.gz packages_apps_Contacts-342a1e77e31abcbf0b6bccd8a08c02820330ae49.tar.bz2 packages_apps_Contacts-342a1e77e31abcbf0b6bccd8a08c02820330ae49.zip |
Merge "Fixed to Added the function to add the Phonetic name into Phonetic field automaticaly." am: 420c364900
am: ec84224dd6
Change-Id: Ib80f014d5f54b7e9face9fef8bfb4c466d4f008f
Diffstat (limited to 'src/com/android/contacts')
9 files changed, 184 insertions, 6 deletions
diff --git a/src/com/android/contacts/editor/ContactEditorFragment.java b/src/com/android/contacts/editor/ContactEditorFragment.java index ac07342ae..a250b4ef4 100644 --- a/src/com/android/contacts/editor/ContactEditorFragment.java +++ b/src/com/android/contacts/editor/ContactEditorFragment.java @@ -52,6 +52,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; +import android.widget.EditText; import android.widget.LinearLayout; import android.widget.ListPopupWindow; import android.widget.Toast; @@ -100,6 +101,7 @@ import java.util.Collections; import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.Locale; import java.util.Set; /** @@ -1280,6 +1282,13 @@ public class ContactEditorFragment extends Fragment implements if (uri != null) { editorView.setFullSizePhoto(uri); } + final StructuredNameEditorView nameEditor = editorView.getNameEditorView(); + final TextFieldsEditorView phoneticNameEditor = editorView.getPhoneticEditorView(); + final boolean useJapaneseOrder = + Locale.JAPANESE.getLanguage().equals(Locale.getDefault().getLanguage()); + if (useJapaneseOrder && nameEditor != null && phoneticNameEditor != null) { + nameEditor.setPhoneticView(phoneticNameEditor); + } // The editor is ready now so make it visible editorView.setEnabled(mEnabled); diff --git a/src/com/android/contacts/editor/Editor.java b/src/com/android/contacts/editor/Editor.java index 711fbc057..c02816a40 100644 --- a/src/com/android/contacts/editor/Editor.java +++ b/src/com/android/contacts/editor/Editor.java @@ -81,6 +81,16 @@ public interface Editor { public void onFieldChanged(String column, String value); /** + * Update the phonetic field with the specified character string. + */ + public void updatePhonetic(String column, String value); + + /** + * Returns the phonetic field string of the specified column. + */ + public String getPhonetic(String column); + + /** * Marks the underlying ValuesDelta as deleted, but does not update the view. */ public void markDeleted(); diff --git a/src/com/android/contacts/editor/KindSectionView.java b/src/com/android/contacts/editor/KindSectionView.java index 94f8a3205..5d490643c 100644 --- a/src/com/android/contacts/editor/KindSectionView.java +++ b/src/com/android/contacts/editor/KindSectionView.java @@ -254,6 +254,19 @@ public class KindSectionView extends LinearLayout { return (StructuredNameEditorView) mEditors.getChildAt(0); } + public TextFieldsEditorView getPhoneticEditorView() { + if (!StructuredName.CONTENT_ITEM_TYPE.equals(mKindSectionData.getMimeType())) { + return null; + } + for (int i = 0; i < mEditors.getChildCount(); i++) { + final View view = mEditors.getChildAt(i); + if (!(view instanceof StructuredNameEditorView)) { + return (TextFieldsEditorView) view; + } + } + return null; + } + /** * Binds views for the given {@link KindSectionData}. * diff --git a/src/com/android/contacts/editor/LabeledEditorView.java b/src/com/android/contacts/editor/LabeledEditorView.java index 5712f3971..df4c5f992 100644 --- a/src/com/android/contacts/editor/LabeledEditorView.java +++ b/src/com/android/contacts/editor/LabeledEditorView.java @@ -331,6 +331,17 @@ public abstract class LabeledEditorView extends LinearLayout implements Editor, notifyEditorListener(); } + /** {@inheritDoc} */ + @Override + public void updatePhonetic(String column, String value) { + } + + /** {@inheritDoc} */ + @Override + public String getPhonetic(String column){ + return ""; + } + protected void saveValue(String column, String value) { mEntry.put(column, value); } diff --git a/src/com/android/contacts/editor/RawContactEditorView.java b/src/com/android/contacts/editor/RawContactEditorView.java index 7c61f648f..19da5bc81 100644 --- a/src/com/android/contacts/editor/RawContactEditorView.java +++ b/src/com/android/contacts/editor/RawContactEditorView.java @@ -387,6 +387,13 @@ public class RawContactEditorView extends LinearLayout implements View.OnClickLi ? null : nameKindSectionView.getNameEditorView(); } + public TextFieldsEditorView getPhoneticEditorView() { + final KindSectionView kindSectionView = mKindSectionViewMap + .get(StructuredName.CONTENT_ITEM_TYPE); + return kindSectionView == null + ? null : kindSectionView.getPhoneticEditorView(); + } + public RawContactDelta getCurrentRawContactDelta() { return mCurrentRawContactDelta; } diff --git a/src/com/android/contacts/editor/StructuredNameEditorView.java b/src/com/android/contacts/editor/StructuredNameEditorView.java index 1387bd1ad..922ceec96 100644 --- a/src/com/android/contacts/editor/StructuredNameEditorView.java +++ b/src/com/android/contacts/editor/StructuredNameEditorView.java @@ -21,8 +21,12 @@ import android.content.Context; import android.content.res.Resources; import android.os.Parcel; import android.os.Parcelable; +import android.provider.ContactsContract.CommonDataKinds.StructuredName; +import android.text.Editable; import android.util.AttributeSet; import android.view.View; +import android.view.ViewGroup; +import android.widget.EditText; import com.android.contacts.R; import com.android.contacts.model.RawContactDelta; @@ -40,6 +44,8 @@ public class StructuredNameEditorView extends TextFieldsEditorView { private StructuredNameDataItem mSnapshot; private boolean mChanged; + private TextFieldsEditorView mPhoneticView; + public StructuredNameEditorView(Context context) { super(context); } @@ -93,6 +99,53 @@ public class StructuredNameEditorView extends TextFieldsEditorView { notifyEditorListener(); } + public void updatePhonetic(String column, String value) { + EditText view = null; + + if (mPhoneticView != null) { + ViewGroup fields = (ViewGroup) mPhoneticView.findViewById(R.id.editors); + + if (StructuredName.FAMILY_NAME.equals(column)) { + view = (EditText) fields.getChildAt(0); + } else if (StructuredName.GIVEN_NAME.equals(column)) { + view = (EditText) fields.getChildAt(2); + } else if (StructuredName.MIDDLE_NAME.equals(column)) { + view = (EditText) fields.getChildAt(1); + } + + if (view != null) { + view.setText(value); + } + } + } + + @Override + public String getPhonetic(String column) { + String input = ""; + EditText view = null; + + if (mPhoneticView != null) { + ViewGroup fields = (ViewGroup) mPhoneticView.findViewById(R.id.editors); + + if (StructuredName.FAMILY_NAME.equals(column)) { + view = (EditText) fields.getChildAt(0); + } else if (StructuredName.GIVEN_NAME.equals(column)) { + view = (EditText) fields.getChildAt(2); + } else if (StructuredName.MIDDLE_NAME.equals(column)) { + view = (EditText) fields.getChildAt(1); + } + + if (view != null) { + input = view.getText().toString(); + } + } + return input; + } + + public void setPhoneticView(TextFieldsEditorView phoneticNameEditor) { + mPhoneticView = phoneticNameEditor; + } + /** * Returns the display name currently displayed in the editor. */ diff --git a/src/com/android/contacts/editor/TextFieldsEditorView.java b/src/com/android/contacts/editor/TextFieldsEditorView.java index c3a240a52..28fe87fc6 100644 --- a/src/com/android/contacts/editor/TextFieldsEditorView.java +++ b/src/com/android/contacts/editor/TextFieldsEditorView.java @@ -22,9 +22,11 @@ import android.graphics.drawable.Drawable; import android.os.Parcel; import android.os.Parcelable; import android.provider.ContactsContract; +import android.provider.ContactsContract.CommonDataKinds.StructuredName; import android.text.Editable; import android.text.InputType; import android.text.Spannable; +import android.text.Spanned; import android.text.TextUtils; import android.text.TextWatcher; import android.text.style.TtsSpan; @@ -69,6 +71,10 @@ public class TextFieldsEditorView extends LabeledEditorView { private int mMinFieldHeight; private int mPreviousViewHeight; private int mHintTextColorUnfocused; + private String mFixedPhonetic = ""; + private String mFixedDisplayName = ""; + private boolean needInputInitialize; + public TextFieldsEditorView(Context context) { super(context); @@ -174,6 +180,10 @@ public class TextFieldsEditorView extends LabeledEditorView { } // Rebuild the label spinner using the new colors. rebuildLabel(); + + if (hasFocus) { + needInputInitialize = true; + } } }; @@ -214,6 +224,38 @@ public class TextFieldsEditorView extends LabeledEditorView { mFieldEditTexts[field].setText(value); } + private boolean isUnFixed(Editable input) { + boolean unfixed = false; + Object[] spanned = input.getSpans(0, input.length(), Object.class); + if (spanned != null) { + for (Object obj : spanned) { + if ((input.getSpanFlags(obj) & Spanned.SPAN_COMPOSING) == Spanned.SPAN_COMPOSING) { + unfixed = true; + } + } + } + return unfixed; + } + + private String getNameField(String column) { + + EditText editText = null; + + if (StructuredName.FAMILY_NAME.equals(column)) { + editText = (EditText) mFields.getChildAt(1); + } else if (StructuredName.GIVEN_NAME.equals(column)) { + editText = (EditText) mFields.getChildAt(3); + } else if (StructuredName.MIDDLE_NAME.equals(column)) { + editText = (EditText) mFields.getChildAt(2); + } + + if (editText != null) { + return editText.getText().toString(); + } + + return ""; + } + @Override public void setValues(DataKind kind, ValuesDelta entry, RawContactDelta state, boolean readOnly, ViewIdGenerator vig) { @@ -280,18 +322,45 @@ public class TextFieldsEditorView extends LabeledEditorView { // Prepare listener for writing changes fieldView.addTextChangedListener(new TextWatcher() { + private int mStart = 0; @Override public void afterTextChanged(Editable s) { // Trigger event for newly changed value onFieldChanged(column, s.toString()); + + if (!DataKind.PSEUDO_MIME_TYPE_NAME.equals(getKind().mimeType)){ + return; + } + + String displayNameField = s.toString(); + + int nonFixedLen = displayNameField.length() - mFixedDisplayName.length(); + if (isUnFixed(s) || nonFixedLen == 0) { + String tmpString = mFixedPhonetic + + displayNameField.substring(mStart, displayNameField.length()); + + updatePhonetic(column, tmpString); + } else { + mFixedPhonetic = getPhonetic(column); + mFixedDisplayName = displayNameField; + } } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { + if (!DataKind.PSEUDO_MIME_TYPE_NAME.equals(getKind().mimeType)){ + return; + } + if (needInputInitialize) { + mFixedPhonetic = getPhonetic(column); + mFixedDisplayName = getNameField(column); + needInputInitialize = false; + } } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { + mStart = start; if (!ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE.equals( getKind().mimeType) || !(s instanceof Spannable)) { return; diff --git a/src/com/android/contacts/model/account/AccountType.java b/src/com/android/contacts/model/account/AccountType.java index bddfc0992..c3e0eb5c9 100644 --- a/src/com/android/contacts/model/account/AccountType.java +++ b/src/com/android/contacts/model/account/AccountType.java @@ -444,6 +444,7 @@ public abstract class AccountType { public boolean optional; public boolean shortForm; public boolean longForm; + public String phoneticsColumn; public EditField(String column, int titleRes) { this.column = column; @@ -470,6 +471,11 @@ public abstract class AccountType { return this; } + public EditField setPhoneticsColumn(String phoneticsColumn) { + this.phoneticsColumn = phoneticsColumn; + return this; + } + public EditField setMinLines(int minLines) { this.minLines = minLines; return this; diff --git a/src/com/android/contacts/model/account/BaseAccountType.java b/src/com/android/contacts/model/account/BaseAccountType.java index 50f623ae9..b2429502c 100644 --- a/src/com/android/contacts/model/account/BaseAccountType.java +++ b/src/com/android/contacts/model/account/BaseAccountType.java @@ -191,18 +191,18 @@ public abstract class BaseAccountType extends AccountType { FLAGS_PERSON_NAME).setOptional(true)); if (!displayOrderPrimary) { kind.fieldList.add(new EditField(StructuredName.FAMILY_NAME, R.string.name_family, - FLAGS_PERSON_NAME)); + FLAGS_PERSON_NAME).setPhoneticsColumn(StructuredName.PHONETIC_FAMILY_NAME)); kind.fieldList.add(new EditField(StructuredName.MIDDLE_NAME, R.string.name_middle, - FLAGS_PERSON_NAME).setOptional(true)); + FLAGS_PERSON_NAME).setOptional(true).setPhoneticsColumn(StructuredName.PHONETIC_MIDDLE_NAME)); kind.fieldList.add(new EditField(StructuredName.GIVEN_NAME, R.string.name_given, - FLAGS_PERSON_NAME)); + FLAGS_PERSON_NAME).setPhoneticsColumn(StructuredName.PHONETIC_GIVEN_NAME)); } else { kind.fieldList.add(new EditField(StructuredName.GIVEN_NAME, R.string.name_given, - FLAGS_PERSON_NAME)); + FLAGS_PERSON_NAME).setPhoneticsColumn(StructuredName.PHONETIC_GIVEN_NAME)); kind.fieldList.add(new EditField(StructuredName.MIDDLE_NAME, R.string.name_middle, - FLAGS_PERSON_NAME).setOptional(true)); + FLAGS_PERSON_NAME).setOptional(true).setPhoneticsColumn(StructuredName.PHONETIC_MIDDLE_NAME)); kind.fieldList.add(new EditField(StructuredName.FAMILY_NAME, R.string.name_family, - FLAGS_PERSON_NAME)); + FLAGS_PERSON_NAME).setPhoneticsColumn(StructuredName.PHONETIC_FAMILY_NAME)); } kind.fieldList.add(new EditField(StructuredName.SUFFIX, R.string.name_suffix, FLAGS_PERSON_NAME).setOptional(true)); |