BaseRawContactEditorView.java revision b18624f0cbca15e6a515316f7046ad814d54c970
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 19ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikovimport com.android.contacts.R; 204597c92d655d45447780b32c7572acef110b6ed1Dmitri Plotnikovimport com.android.contacts.model.AccountType; 214597c92d655d45447780b32c7572acef110b6ed1Dmitri Plotnikovimport com.android.contacts.model.AccountType.EditType; 22e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikovimport com.android.contacts.model.EntityDelta; 234bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamiltonimport com.android.contacts.model.EntityDelta.ValuesDelta; 24e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikovimport com.android.contacts.model.EntityModifier; 254bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton 264bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamiltonimport android.content.Context; 274bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamiltonimport android.content.Entity; 28e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikovimport android.database.Cursor; 294bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamiltonimport android.graphics.Bitmap; 30e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.Photo; 314bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamiltonimport android.provider.ContactsContract.Data; 324bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamiltonimport android.provider.ContactsContract.RawContacts; 334bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamiltonimport android.util.AttributeSet; 34ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikovimport android.view.View; 35ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikovimport android.view.ViewGroup; 364bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamiltonimport android.widget.LinearLayout; 374bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton 384bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton/** 394bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * Base view that provides common code for the editor interaction for a specific 40ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov * RawContact represented through an {@link EntityDelta}. 414bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * <p> 424bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * Internal updates are performed against {@link ValuesDelta} so that the 434bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * source {@link Entity} can be swapped out. Any state-based changes, such as 444bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * adding {@link Data} rows or changing {@link EditType}, are performed through 454597c92d655d45447780b32c7572acef110b6ed1Dmitri Plotnikov * {@link EntityModifier} to ensure that {@link AccountType} are enforced. 464bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton */ 4772af89f9e497bb8ef54fe3deeec7e8477d192242Daniel Lehmannpublic abstract class BaseRawContactEditorView extends LinearLayout { 484bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton 49ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov private PhotoEditorView mPhoto; 50ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov private boolean mHasPhotoEditor = false; 51ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov 52ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov private View mHeader; 53ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov private View mBody; 54b18624f0cbca15e6a515316f7046ad814d54c970Dmitri Plotnikov private View mDivider; 55ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov 56ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov private boolean mExpanded = true; 574bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton 5872af89f9e497bb8ef54fe3deeec7e8477d192242Daniel Lehmann public BaseRawContactEditorView(Context context) { 594bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton super(context); 604bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton } 614bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton 6272af89f9e497bb8ef54fe3deeec7e8477d192242Daniel Lehmann public BaseRawContactEditorView(Context context, AttributeSet attrs) { 634bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton super(context, attrs); 644bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton } 654bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton 66ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov @Override 67ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov protected void onFinishInflate() { 68ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov super.onFinishInflate(); 69ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov 70ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov mHeader = findViewById(R.id.header); 71ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov mBody = findViewById(R.id.body); 72b18624f0cbca15e6a515316f7046ad814d54c970Dmitri Plotnikov mDivider = findViewById(R.id.divider); 73ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov mHeader.setOnClickListener(new OnClickListener() { 74ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov @Override 75ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov public void onClick(View v) { 76ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov setExpanded(!mExpanded); 77ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov } 78ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov }); 79ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov 80ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov mPhoto = (PhotoEditorView)findViewById(R.id.edit_photo); 8102bb1252aa990813fa9e86ad75c458acc15e6801Dmitri Plotnikov mPhoto.setEnabled(isEnabled()); 82ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov } 83ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov 84e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov public void setGroupMetaData(Cursor groupMetaData) { 85e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov } 86e843f916942fff482ec162eee2a23914e32182cfDmitri Plotnikov 874bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton /** 884bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * Assign the given {@link Bitmap} to the internal {@link PhotoEditorView} 894bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * for the {@link EntityDelta} currently being edited. 904bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton */ 914bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton public void setPhotoBitmap(Bitmap bitmap) { 924bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton mPhoto.setPhotoBitmap(bitmap); 934bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton } 944bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton 95ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov protected void setHasPhotoEditor(boolean hasPhotoEditor) { 96ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov mHasPhotoEditor = hasPhotoEditor; 97ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov mPhoto.setVisibility(hasPhotoEditor ? View.VISIBLE : View.GONE); 98ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov } 99ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov 1004bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton /** 1014bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * Return true if the current {@link RawContacts} supports {@link Photo}, 1024bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * which means that {@link PhotoEditorView} is enabled. 1034bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton */ 1044bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton public boolean hasPhotoEditor() { 1054bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton return mHasPhotoEditor; 1064bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton } 1074bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton 1084bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton /** 1094bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * Return true if internal {@link PhotoEditorView} has a {@link Photo} set. 1104bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton */ 1114bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton public boolean hasSetPhoto() { 1124bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton return mPhoto.hasSetPhoto(); 1134bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton } 1144bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton 1154bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton public PhotoEditorView getPhotoEditor() { 1164bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton return mPhoto; 1174bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton } 1184bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton 1194bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton /** 1204bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * @return the RawContact ID that this editor is editing. 1214bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton */ 1224bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton public abstract long getRawContactId(); 1234bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton 1244bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton /** 1254bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * Set the internal state for this view, given a current 1264597c92d655d45447780b32c7572acef110b6ed1Dmitri Plotnikov * {@link EntityDelta} state and the {@link AccountType} that 1274bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * apply to that state. 1284bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton */ 1294597c92d655d45447780b32c7572acef110b6ed1Dmitri Plotnikov public abstract void setState(EntityDelta state, AccountType source, ViewIdGenerator vig); 130ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov 131ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov /* package */ void setExpanded(boolean value) { 132ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov // only allow collapsing if we are one of several children 133ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov final boolean newValue; 134ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov if (getParent() instanceof ViewGroup && ((ViewGroup) getParent()).getChildCount() == 1) { 135ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov newValue = true; 136ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov } else { 137ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov newValue = value; 138ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov } 139ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov 140ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov if (newValue == mExpanded) return; 141ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov mExpanded = newValue; 142ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov mBody.setVisibility(newValue ? View.VISIBLE : View.GONE); 143b18624f0cbca15e6a515316f7046ad814d54c970Dmitri Plotnikov mDivider.setVisibility(newValue ? View.GONE : View.VISIBLE); 144ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov } 1454bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton} 146