14bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton/* 24bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * Copyright (C) 2009 The Android Open Source Project 34bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * 44bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * Licensed under the Apache License, Version 2.0 (the "License"); 54bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * you may not use this file except in compliance with the License. 64bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * You may obtain a copy of the License at 74bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * 84bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * http://www.apache.org/licenses/LICENSE-2.0 94bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * 104bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * Unless required by applicable law or agreed to in writing, software 114bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * distributed under the License is distributed on an "AS IS" BASIS, 124bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * See the License for the specific language governing permissions and 144bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * limitations under the License. 154bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton */ 164bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton 1718ffaa2561cc7dd2e3ef81737e6537931c0a9a11Dmitri Plotnikovpackage com.android.contacts.editor; 184bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton 194bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamiltonimport android.content.Context; 20e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikovimport android.database.Cursor; 214bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamiltonimport android.graphics.Bitmap; 22e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.Photo; 234bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamiltonimport android.provider.ContactsContract.Data; 244bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamiltonimport android.provider.ContactsContract.RawContacts; 254bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamiltonimport android.util.AttributeSet; 26ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikovimport android.view.View; 27ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikovimport android.view.ViewGroup; 284bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamiltonimport android.widget.LinearLayout; 294bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton 30e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.R; 31cd321f65f1e50409812976380ad1f0fdb3fa35cbYorke Leeimport com.android.contacts.common.model.RawContactDelta; 32738ff8623dc77dd91a1b9023861e924ba5e4c27eChiao Chengimport com.android.contacts.common.model.ValuesDelta; 33cd321f65f1e50409812976380ad1f0fdb3fa35cbYorke Leeimport com.android.contacts.common.model.RawContactModifier; 34428f008513d1591cc08fcfe2cf0c9237fb313241Chiao Chengimport com.android.contacts.common.model.account.AccountType; 35428f008513d1591cc08fcfe2cf0c9237fb313241Chiao Chengimport com.android.contacts.common.model.account.AccountType.EditType; 36e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Cheng 374bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton/** 384bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * Base view that provides common code for the editor interaction for a specific 39851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * RawContact represented through an {@link RawContactDelta}. 404bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * <p> 414bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * Internal updates are performed against {@link ValuesDelta} so that the 42851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * source {@link RawContact} can be swapped out. Any state-based changes, such as 434bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * adding {@link Data} rows or changing {@link EditType}, are performed through 44851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * {@link RawContactModifier} to ensure that {@link AccountType} are enforced. 454bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton */ 4672af89f9e497bb8ef54fe3deeec7e8477d192242Daniel Lehmannpublic abstract class BaseRawContactEditorView extends LinearLayout { 474bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton 48ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov private PhotoEditorView mPhoto; 49ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov private boolean mHasPhotoEditor = false; 50ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov 51ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov private View mBody; 52b18624f0cbca15e6a515316f7046ad814d54c970Dmitri Plotnikov private View mDivider; 53ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov 54ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov private boolean mExpanded = true; 554bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton 5672af89f9e497bb8ef54fe3deeec7e8477d192242Daniel Lehmann public BaseRawContactEditorView(Context context) { 574bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton super(context); 584bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton } 594bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton 6072af89f9e497bb8ef54fe3deeec7e8477d192242Daniel Lehmann public BaseRawContactEditorView(Context context, AttributeSet attrs) { 614bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton super(context, attrs); 624bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton } 634bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton 64ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov @Override 65ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov protected void onFinishInflate() { 66ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov super.onFinishInflate(); 67ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov 68ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov mBody = findViewById(R.id.body); 69b18624f0cbca15e6a515316f7046ad814d54c970Dmitri Plotnikov mDivider = findViewById(R.id.divider); 70ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov 71ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov mPhoto = (PhotoEditorView)findViewById(R.id.edit_photo); 7202bb1252aa990813fa9e86ad75c458acc15e6801Dmitri Plotnikov mPhoto.setEnabled(isEnabled()); 73ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov } 74ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov 75e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov public void setGroupMetaData(Cursor groupMetaData) { 76e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov } 77e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov 784bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton /** 794bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * Assign the given {@link Bitmap} to the internal {@link PhotoEditorView} 80851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * for the {@link RawContactDelta} currently being edited. 814bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton */ 824bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton public void setPhotoBitmap(Bitmap bitmap) { 834bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton mPhoto.setPhotoBitmap(bitmap); 844bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton } 854bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton 86ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov protected void setHasPhotoEditor(boolean hasPhotoEditor) { 87ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov mHasPhotoEditor = hasPhotoEditor; 88ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov mPhoto.setVisibility(hasPhotoEditor ? View.VISIBLE : View.GONE); 89ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov } 90ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov 914bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton /** 924bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * Return true if the current {@link RawContacts} supports {@link Photo}, 934bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * which means that {@link PhotoEditorView} is enabled. 944bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton */ 954bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton public boolean hasPhotoEditor() { 964bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton return mHasPhotoEditor; 974bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton } 984bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton 994bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton /** 1004bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * Return true if internal {@link PhotoEditorView} has a {@link Photo} set. 1014bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton */ 1024bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton public boolean hasSetPhoto() { 1034bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton return mPhoto.hasSetPhoto(); 1044bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton } 1054bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton 1064bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton public PhotoEditorView getPhotoEditor() { 1074bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton return mPhoto; 1084bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton } 1094bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton 1104bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton /** 1114bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * @return the RawContact ID that this editor is editing. 1124bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton */ 1134bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton public abstract long getRawContactId(); 1144bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton 1154bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton /** 1164bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * Set the internal state for this view, given a current 117851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * {@link RawContactDelta} state and the {@link AccountType} that 1184bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * apply to that state. 1194bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton */ 120851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public abstract void setState(RawContactDelta state, AccountType source, ViewIdGenerator vig, 121681f36cc7cc49be781eedc4685eda2d1b2c0444cIsaac Katzenelson boolean isProfile); 122ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov 123ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov /* package */ void setExpanded(boolean value) { 124ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov // only allow collapsing if we are one of several children 125ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov final boolean newValue; 126ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov if (getParent() instanceof ViewGroup && ((ViewGroup) getParent()).getChildCount() == 1) { 127ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov newValue = true; 128ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov } else { 129ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov newValue = value; 130ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov } 131ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov 132ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov if (newValue == mExpanded) return; 133ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov mExpanded = newValue; 134ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov mBody.setVisibility(newValue ? View.VISIBLE : View.GONE); 135b18624f0cbca15e6a515316f7046ad814d54c970Dmitri Plotnikov mDivider.setVisibility(newValue ? View.GONE : View.VISIBLE); 136ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov } 1374bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton} 138