diff options
author | Rohit Yengisetty <rohit@cyngn.com> | 2015-04-01 11:35:55 -0700 |
---|---|---|
committer | emancebo <emancebo@cyngn.com> | 2015-04-08 10:49:33 -0700 |
commit | 7ebf0fe3fd485a331f455e662c39cbcc7df2e1f4 (patch) | |
tree | 5b632c293687beeef1d38d7dc2e7990dfea12d35 | |
parent | 4d28adff76cfac12cddad4480a0043b50c038d0c (diff) | |
download | packages_apps_Contacts-7ebf0fe3fd485a331f455e662c39cbcc7df2e1f4.tar.gz packages_apps_Contacts-7ebf0fe3fd485a331f455e662c39cbcc7df2e1f4.tar.bz2 packages_apps_Contacts-7ebf0fe3fd485a331f455e662c39cbcc7df2e1f4.zip |
Contacts : Add ability to customize Contact Editor Views
Change-Id: I3661d9911f9b7524edcf3c1adf8ec96359d961ba
15 files changed, 125 insertions, 34 deletions
diff --git a/res/layout/raw_contact_editor_view.xml b/res/layout/raw_contact_editor_view.xml index 981160264..018467303 100644 --- a/res/layout/raw_contact_editor_view.xml +++ b/res/layout/raw_contact_editor_view.xml @@ -24,6 +24,15 @@ <include layout="@layout/editor_account_header_with_dropdown" /> + <TextView + android:id="@+id/attribution_space" + android:layout_height="match_parent" + android:layout_width="match_parent" + android:textSize="12sp" + android:layout_marginTop="5dp" + android:layout_marginLeft="3dp" + android:visibility="gone" /> + <LinearLayout android:id="@+id/body" android:layout_width="match_parent" diff --git a/src/com/android/contacts/activities/ConfirmAddDetailActivity.java b/src/com/android/contacts/activities/ConfirmAddDetailActivity.java index 442565db7..559763df2 100644 --- a/src/com/android/contacts/activities/ConfirmAddDetailActivity.java +++ b/src/com/android/contacts/activities/ConfirmAddDetailActivity.java @@ -719,7 +719,8 @@ public class ConfirmAddDetailActivity extends Activity implements Editor editor = (Editor) view; // Don't allow deletion of the field because there is only 1 detail in this editor. editor.setDeletable(false); - editor.setValues(dataKind, valuesDelta, state, false, new ViewIdGenerator()); + // TODO : null the right choice ? + editor.setValues(dataKind, valuesDelta, state, false, new ViewIdGenerator(), null); } mEditorContainerView.addView(view); diff --git a/src/com/android/contacts/editor/BaseRawContactEditorView.java b/src/com/android/contacts/editor/BaseRawContactEditorView.java index 7e74cfbd3..66afa037f 100644 --- a/src/com/android/contacts/editor/BaseRawContactEditorView.java +++ b/src/com/android/contacts/editor/BaseRawContactEditorView.java @@ -115,10 +115,11 @@ public abstract class BaseRawContactEditorView extends LinearLayout { /** * Set the internal state for this view, given a current * {@link RawContactDelta} state and the {@link AccountType} that - * apply to that state. + * apply to that state. Also takes in an additional {@link DrawingOptions} + * parameter to customize the final look of the UI. */ public abstract void setState(RawContactDelta state, AccountType source, ViewIdGenerator vig, - boolean isProfile); + boolean isProfile, DrawingOptions drawingOptions); /* package */ void setExpanded(boolean value) { // only allow collapsing if we are one of several children diff --git a/src/com/android/contacts/editor/ContactEditorFragment.java b/src/com/android/contacts/editor/ContactEditorFragment.java index 6ef766b5e..6735d233a 100755 --- a/src/com/android/contacts/editor/ContactEditorFragment.java +++ b/src/com/android/contacts/editor/ContactEditorFragment.java @@ -35,6 +35,7 @@ import android.content.Loader; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.graphics.Color; import android.graphics.Rect; import android.media.RingtoneManager; import android.net.Uri; @@ -65,6 +66,7 @@ import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.LinearLayout; import android.widget.ListPopupWindow; +import android.widget.TextView; import android.widget.Toast; import com.android.contacts.ContactSaveService; @@ -97,12 +99,15 @@ import com.android.contacts.util.PhoneCapabilityTester; import com.android.contacts.util.UiClosables; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; +import org.w3c.dom.Text; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; +import java.util.Iterator; import java.util.List; +import java.util.Set; public class ContactEditorFragment extends Fragment implements SplitContactConfirmationDialogFragment.Listener, @@ -152,6 +157,10 @@ public class ContactEditorFragment extends Fragment implements public static final String INTENT_EXTRA_DISABLE_DELETE_MENU_OPTION = "disableDeleteMenuOption"; + public static final String INTENT_EXTRA_SUGGESTED_TEXT_COLOR = "suggestedTextColor"; + public static final String INTENT_EXTRA_CONTACT_INFO_SOURCE = "contactInfoSource"; + public static final String INTENT_EXTRA_TEXT_COLOR_TRANSIENT = "textColorTransient"; + /** * Modes that specify what the AsyncTask has to perform after saving */ @@ -286,6 +295,9 @@ public class ContactEditorFragment extends Fragment implements private ListPopupWindow mAggregationSuggestionPopup; + private String mContactInfoAttribution; + private DrawingOptions mDrawingOptions; + private static final class AggregationSuggestionAdapter extends BaseAdapter { private final Activity mActivity; private final boolean mSetNewContact; @@ -483,12 +495,25 @@ public class ContactEditorFragment extends Fragment implements mAction = action; mLookupUri = lookupUri; mIntentExtras = intentExtras; - mAutoAddToDefaultGroup = mIntentExtras != null - && mIntentExtras.containsKey(INTENT_EXTRA_ADD_TO_DEFAULT_DIRECTORY); - mNewLocalProfile = mIntentExtras != null - && mIntentExtras.getBoolean(INTENT_EXTRA_NEW_LOCAL_PROFILE); - mDisableDeleteMenuOption = mIntentExtras != null - && mIntentExtras.getBoolean(INTENT_EXTRA_DISABLE_DELETE_MENU_OPTION); + + if (mIntentExtras != null) { + mAutoAddToDefaultGroup = mIntentExtras + .containsKey(INTENT_EXTRA_ADD_TO_DEFAULT_DIRECTORY); + mNewLocalProfile = mIntentExtras.getBoolean(INTENT_EXTRA_NEW_LOCAL_PROFILE); + mDisableDeleteMenuOption = mIntentExtras + .getBoolean(INTENT_EXTRA_DISABLE_DELETE_MENU_OPTION); + + mDrawingOptions = new DrawingOptions(); + if (mIntentExtras.containsKey(INTENT_EXTRA_SUGGESTED_TEXT_COLOR)) { + mDrawingOptions.setTextColor(intentExtras.getInt(INTENT_EXTRA_SUGGESTED_TEXT_COLOR)); + } + if (mIntentExtras.containsKey(INTENT_EXTRA_TEXT_COLOR_TRANSIENT)) { + mDrawingOptions.setIsTextColorTransient( + intentExtras.getBoolean(INTENT_EXTRA_TEXT_COLOR_TRANSIENT)); + } + + mContactInfoAttribution = mIntentExtras.getString(INTENT_EXTRA_CONTACT_INFO_SOURCE); + } } public void setListener(Listener value) { @@ -875,9 +900,20 @@ public class ContactEditorFragment extends Fragment implements editor.setEnabled(mEnabled); + // add attribution + if (!TextUtils.isEmpty(mContactInfoAttribution)) { + TextView attributionView = (TextView) editor.findViewById(R.id.attribution_space); + attributionView.setText(mContactInfoAttribution); + if (mDrawingOptions.getTextColor() != null) { + attributionView.setTextColor(mDrawingOptions.getTextColor()); + } + attributionView.setVisibility(View.VISIBLE); + } + mContent.addView(editor); - editor.setState(rawContactDelta, type, mViewIdGenerator, isEditingUserProfile()); + editor.setState(rawContactDelta, type, mViewIdGenerator, isEditingUserProfile(), + mDrawingOptions); // Set up the photo handler. bindPhotoHandler(editor, type, mState); diff --git a/src/com/android/contacts/editor/DrawingOptions.java b/src/com/android/contacts/editor/DrawingOptions.java new file mode 100644 index 000000000..e44867222 --- /dev/null +++ b/src/com/android/contacts/editor/DrawingOptions.java @@ -0,0 +1,27 @@ +package com.android.contacts.editor; + +/** + * Holds configuration options that dictate the look and feel of the editor views + */ +public class DrawingOptions { + + private Integer mTextColor; + private Boolean mIsTextColorTransient; + + public void setTextColor(int color) { + mTextColor = color; + } + + public Integer getTextColor() { + return mTextColor; + } + + public void setIsTextColorTransient(Boolean isTransient) { + mIsTextColorTransient = isTransient; + } + + public Boolean getIsTextColorTransient() { + return mIsTextColorTransient; + } + +} diff --git a/src/com/android/contacts/editor/Editor.java b/src/com/android/contacts/editor/Editor.java index 799030936..ab0ff0306 100644 --- a/src/com/android/contacts/editor/Editor.java +++ b/src/com/android/contacts/editor/Editor.java @@ -61,7 +61,7 @@ public interface Editor { * written back to that same object. */ public void setValues(DataKind kind, ValuesDelta values, RawContactDelta state, boolean readOnly, - ViewIdGenerator vig); + ViewIdGenerator vig, DrawingOptions drawingOptions); public void setDeletable(boolean deletable); diff --git a/src/com/android/contacts/editor/EventFieldEditorView.java b/src/com/android/contacts/editor/EventFieldEditorView.java index 4d9411f58..7dd81a5fc 100644 --- a/src/com/android/contacts/editor/EventFieldEditorView.java +++ b/src/com/android/contacts/editor/EventFieldEditorView.java @@ -106,9 +106,9 @@ public class EventFieldEditorView extends LabeledEditorView { @Override public void setValues(DataKind kind, ValuesDelta entry, RawContactDelta state, boolean readOnly, - ViewIdGenerator vig) { + ViewIdGenerator vig, DrawingOptions drawingOptions) { if (kind.fieldList.size() != 1) throw new IllegalStateException("kind must have 1 field"); - super.setValues(kind, entry, state, readOnly, vig); + super.setValues(kind, entry, state, readOnly, vig, drawingOptions); mDateView.setEnabled(isEnabled() && !readOnly); diff --git a/src/com/android/contacts/editor/KindSectionView.java b/src/com/android/contacts/editor/KindSectionView.java index 261286e47..6af32e4ec 100644 --- a/src/com/android/contacts/editor/KindSectionView.java +++ b/src/com/android/contacts/editor/KindSectionView.java @@ -53,6 +53,8 @@ public class KindSectionView extends LinearLayout implements EditorListener { private RawContactDelta mState; private boolean mReadOnly; + private DrawingOptions mDrawingOptions; + private ViewIdGenerator mViewIdGenerator; private LayoutInflater mInflater; @@ -130,11 +132,13 @@ public class KindSectionView extends LinearLayout implements EditorListener { } } - public void setState(DataKind kind, RawContactDelta state, boolean readOnly, ViewIdGenerator vig) { + public void setState(DataKind kind, RawContactDelta state, boolean readOnly, + ViewIdGenerator vig, DrawingOptions drawingOptions) { mKind = kind; mState = state; mReadOnly = readOnly; mViewIdGenerator = vig; + mDrawingOptions = drawingOptions; setId(mViewIdGenerator.getId(state, kind, null, ViewIdGenerator.NO_VIEW_INDEX)); @@ -201,7 +205,7 @@ public class KindSectionView extends LinearLayout implements EditorListener { if (view instanceof Editor) { Editor editor = (Editor) view; editor.setDeletable(true); - editor.setValues(mKind, entry, mState, mReadOnly, mViewIdGenerator); + editor.setValues(mKind, entry, mState, mReadOnly, mViewIdGenerator, mDrawingOptions); editor.setEditorListener(this); } mEditors.addView(view); diff --git a/src/com/android/contacts/editor/LabeledEditorView.java b/src/com/android/contacts/editor/LabeledEditorView.java index 0a33b6def..7592e830b 100644 --- a/src/com/android/contacts/editor/LabeledEditorView.java +++ b/src/com/android/contacts/editor/LabeledEditorView.java @@ -87,6 +87,7 @@ public abstract class LabeledEditorView extends LinearLayout implements Editor, private DialogManager mDialogManager = null; private EditorListener mListener; protected int mMinLineItemHeight; + private DrawingOptions mDrawingOptions; /** * A marker in the spinner adapter of the currently selected custom type. @@ -333,7 +334,7 @@ public abstract class LabeledEditorView extends LinearLayout implements Editor, } protected void rebuildValues() { - setValues(mKind, mEntry, mState, mReadOnly, mViewIdGenerator); + setValues(mKind, mEntry, mState, mReadOnly, mViewIdGenerator, mDrawingOptions); } /** @@ -342,7 +343,7 @@ public abstract class LabeledEditorView extends LinearLayout implements Editor, */ @Override public void setValues(DataKind kind, ValuesDelta entry, RawContactDelta state, boolean readOnly, - ViewIdGenerator vig) { + ViewIdGenerator vig, DrawingOptions drawingOptions) { mKind = kind; mEntry = entry; mState = state; diff --git a/src/com/android/contacts/editor/PhoneticNameEditorView.java b/src/com/android/contacts/editor/PhoneticNameEditorView.java index 69e0719f3..5dbfa9b4a 100644 --- a/src/com/android/contacts/editor/PhoneticNameEditorView.java +++ b/src/com/android/contacts/editor/PhoneticNameEditorView.java @@ -103,11 +103,11 @@ public class PhoneticNameEditorView extends TextFieldsEditorView { @Override public void setValues(DataKind kind, ValuesDelta entry, RawContactDelta state, boolean readOnly, - ViewIdGenerator vig) { + ViewIdGenerator vig, DrawingOptions drawingOptions) { if (!(entry instanceof PhoneticValuesDelta)) { entry = new PhoneticValuesDelta(entry); } - super.setValues(kind, entry, state, readOnly, vig); + super.setValues(kind, entry, state, readOnly, vig, drawingOptions); } @Override diff --git a/src/com/android/contacts/editor/PhotoEditorView.java b/src/com/android/contacts/editor/PhotoEditorView.java index a199f46ee..96ed08004 100644 --- a/src/com/android/contacts/editor/PhotoEditorView.java +++ b/src/com/android/contacts/editor/PhotoEditorView.java @@ -94,7 +94,7 @@ public class PhotoEditorView extends LinearLayout implements Editor { /** {@inheritDoc} */ @Override public void setValues(DataKind kind, ValuesDelta values, RawContactDelta state, boolean readOnly, - ViewIdGenerator vig) { + ViewIdGenerator vig, DrawingOptions drawingOptions) { mEntry = values; mReadOnly = readOnly; diff --git a/src/com/android/contacts/editor/RawContactEditorView.java b/src/com/android/contacts/editor/RawContactEditorView.java index 3595bf3e2..da2c0c7c2 100755 --- a/src/com/android/contacts/editor/RawContactEditorView.java +++ b/src/com/android/contacts/editor/RawContactEditorView.java @@ -210,7 +210,7 @@ public class RawContactEditorView extends BaseRawContactEditorView { */ @Override public void setState(RawContactDelta state, AccountType type, ViewIdGenerator vig, - boolean isProfile) { + boolean isProfile, DrawingOptions drawingOptions) { mState = state; @@ -323,11 +323,11 @@ public class RawContactEditorView extends BaseRawContactEditorView { // Handle special case editor for structured name final ValuesDelta primary = state.getPrimaryEntry(mimeType); DataKind dataKind = type.getKindForMimetype(DataKind.PSEUDO_MIME_TYPE_DISPLAY_NAME); - mName.setValues(dataKind, primary, state, false, vig); + mName.setValues(dataKind, primary, state, false, vig, drawingOptions); if (!(SimContactsConstants.ACCOUNT_TYPE_SIM).equals(type.accountType)) { mPhoneticName.setValues( type.getKindForMimetype(DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME), - primary, state, false, vig); + primary, state, false, vig, drawingOptions); } else { mPhoneticName.setVisibility(View.GONE); @@ -335,7 +335,7 @@ public class RawContactEditorView extends BaseRawContactEditorView { } else if (Photo.CONTENT_ITEM_TYPE.equals(mimeType)) { // Handle special case editor for photos final ValuesDelta primary = state.getPrimaryEntry(mimeType); - getPhotoEditor().setValues(kind, primary, state, false, vig); + getPhotoEditor().setValues(kind, primary, state, false, vig, drawingOptions); } else if (GroupMembership.CONTENT_ITEM_TYPE.equals(mimeType)) { if (mGroupMembershipView != null) { mGroupMembershipView.setState(state); @@ -344,7 +344,7 @@ public class RawContactEditorView extends BaseRawContactEditorView { final KindSectionView section = (KindSectionView)mInflater.inflate( R.layout.item_kind_section, mFields, false); section.setEnabled(isEnabled()); - section.setState(kind, state, false, vig); + section.setState(kind, state, false, vig, drawingOptions); mFields.addView(section); if (SimContactsConstants.ACCOUNT_TYPE_SIM.equals(type.accountType) ) { String accountName = state.getAccountName(); @@ -387,7 +387,7 @@ public class RawContactEditorView extends BaseRawContactEditorView { } } section.setEnabled(isEnabled()); - section.setState(kind, state, false, vig); + section.setState(kind, state, false, vig, drawingOptions); mFields.addView(section); } else if (Organization.CONTENT_ITEM_TYPE.equals(mimeType)) { // Create the organization section @@ -395,7 +395,7 @@ public class RawContactEditorView extends BaseRawContactEditorView { R.layout.item_kind_section, mFields, false); section.setTitleVisible(false); section.setEnabled(isEnabled()); - section.setState(kind, state, false, vig); + section.setState(kind, state, false, vig, drawingOptions); // If there is organization info for the contact already, display it if (!section.isEmpty()) { @@ -426,7 +426,7 @@ public class RawContactEditorView extends BaseRawContactEditorView { final KindSectionView section = (KindSectionView)mInflater.inflate( R.layout.item_kind_section, mFields, false); section.setEnabled(isEnabled()); - section.setState(kind, state, false, vig); + section.setState(kind, state, false, vig, drawingOptions); mFields.addView(section); } } diff --git a/src/com/android/contacts/editor/RawContactReadOnlyEditorView.java b/src/com/android/contacts/editor/RawContactReadOnlyEditorView.java index 36e96a2ff..a420ea52f 100644 --- a/src/com/android/contacts/editor/RawContactReadOnlyEditorView.java +++ b/src/com/android/contacts/editor/RawContactReadOnlyEditorView.java @@ -113,7 +113,7 @@ public class RawContactReadOnlyEditorView extends BaseRawContactEditorView */ @Override public void setState(RawContactDelta state, AccountType type, ViewIdGenerator vig, - boolean isProfile) { + boolean isProfile, DrawingOptions drawingOptions) { // Remove any existing sections mGeneral.removeAllViews(); @@ -172,7 +172,8 @@ public class RawContactReadOnlyEditorView extends BaseRawContactEditorView boolean hasPhotoEditor = type.getKindForMimetype(Photo.CONTENT_ITEM_TYPE) != null; setHasPhotoEditor(hasPhotoEditor); primary = state.getPrimaryEntry(Photo.CONTENT_ITEM_TYPE); - getPhotoEditor().setValues(kind, primary, state, !type.areContactsWritable(), vig); + getPhotoEditor().setValues(kind, primary, state, !type.areContactsWritable(), vig, + drawingOptions); } // Name diff --git a/src/com/android/contacts/editor/StructuredNameEditorView.java b/src/com/android/contacts/editor/StructuredNameEditorView.java index 340843515..d7f8fcb9e 100644 --- a/src/com/android/contacts/editor/StructuredNameEditorView.java +++ b/src/com/android/contacts/editor/StructuredNameEditorView.java @@ -64,8 +64,8 @@ public class StructuredNameEditorView extends TextFieldsEditorView { @Override public void setValues(DataKind kind, ValuesDelta entry, RawContactDelta state, boolean readOnly, - ViewIdGenerator vig) { - super.setValues(kind, entry, state, readOnly, vig); + ViewIdGenerator vig, DrawingOptions drawingOptions) { + super.setValues(kind, entry, state, readOnly, vig, drawingOptions); if (mSnapshot == null) { mSnapshot = (StructuredNameDataItem) DataItem.createFrom( new ContentValues(getValues().getCompleteValues())); diff --git a/src/com/android/contacts/editor/TextFieldsEditorView.java b/src/com/android/contacts/editor/TextFieldsEditorView.java index e272a95a8..f470db275 100644 --- a/src/com/android/contacts/editor/TextFieldsEditorView.java +++ b/src/com/android/contacts/editor/TextFieldsEditorView.java @@ -17,6 +17,7 @@ package com.android.contacts.editor; import android.content.Context; +import android.graphics.Color; import android.graphics.Rect; import android.os.Parcel; import android.os.Parcelable; @@ -61,6 +62,7 @@ public class TextFieldsEditorView extends LabeledEditorView { private int mEditTextTopPadding; private int mEditTextBottomPadding; private int mPreviousViewHeight; + private int mOriginalEditTextColor; public TextFieldsEditorView(Context context) { super(context); @@ -186,8 +188,8 @@ public class TextFieldsEditorView extends LabeledEditorView { @Override public void setValues(DataKind kind, ValuesDelta entry, RawContactDelta state, boolean readOnly, - ViewIdGenerator vig) { - super.setValues(kind, entry, state, readOnly, vig); + ViewIdGenerator vig, final DrawingOptions drawingOptions) { + super.setValues(kind, entry, state, readOnly, vig, drawingOptions); // Remove edit texts that we currently have if (mFieldEditTexts != null) { for (EditText fieldEditText : mFieldEditTexts) { @@ -236,6 +238,12 @@ public class TextFieldsEditorView extends LabeledEditorView { final String column = field.column; final String value = entry.getAsString(column); fieldView.setText(value); + if (!TextUtils.isEmpty(value)) { + if (drawingOptions != null && drawingOptions.getTextColor() != null) { + mOriginalEditTextColor = fieldView.getCurrentTextColor(); + fieldView.setTextColor(drawingOptions.getTextColor()); + } + } // Show the delete button if we have a non-null value setDeleteButtonVisible(value != null); @@ -254,6 +262,9 @@ public class TextFieldsEditorView extends LabeledEditorView { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { + if (drawingOptions != null && Boolean.TRUE.equals(drawingOptions.getIsTextColorTransient())) { + fieldView.setTextColor(mOriginalEditTextColor); + } } }); |