From d2325290efec77e187423188c87d87a56dd77939 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 23 Jul 2012 17:51:35 +0200 Subject: [PATCH] Added shadows to contact pictures --- res/drawable/avatar_shadow.png | Bin 0 -> 12436 bytes res/drawable/avatar_shadow_left.png | Bin 0 -> 2285 bytes res/drawable/avatar_shadow_right.png | Bin 0 -> 2270 bytes res/layout/active_call.xml | 21 ++++--- res/layout/avatar.xml | 29 ++++++++++ res/layout/chat.xml | 12 ++-- res/layout/contact.xml | 12 ++-- res/layout/history_detail.xml | 12 ++-- res/layout/incoming.xml | 10 ++-- res/values/attrs.xml | 6 ++ src/org/linphone/AudioCallFragment.java | 5 +- src/org/linphone/ChatFragment.java | 5 +- src/org/linphone/ContactFragment.java | 6 +- src/org/linphone/HistoryDetailFragment.java | 8 ++- src/org/linphone/IncomingCallActivity.java | 10 ++-- src/org/linphone/ui/AvatarWithShadow.java | 60 ++++++++++++++++++++ 16 files changed, 147 insertions(+), 49 deletions(-) create mode 100644 res/drawable/avatar_shadow.png create mode 100644 res/drawable/avatar_shadow_left.png create mode 100644 res/drawable/avatar_shadow_right.png create mode 100644 res/layout/avatar.xml create mode 100644 src/org/linphone/ui/AvatarWithShadow.java diff --git a/res/drawable/avatar_shadow.png b/res/drawable/avatar_shadow.png new file mode 100644 index 0000000000000000000000000000000000000000..7a8aac483c8ddab649af4cd6e71483af126fd502 GIT binary patch literal 12436 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 literal 0 HcmV?d00001 diff --git a/res/layout/active_call.xml b/res/layout/active_call.xml index 8d4919a52..a729896da 100644 --- a/res/layout/active_call.xml +++ b/res/layout/active_call.xml @@ -1,5 +1,6 @@ - @@ -15,7 +16,7 @@ android:id="@+id/contactNameOrNumber" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_weight="0.4" + android:layout_weight="0.5" android:gravity="center_vertical|left" android:paddingLeft="20dp" android:textColor="@android:color/white" @@ -23,8 +24,8 @@ - + android:paddingBottom="10sp" /> \ No newline at end of file diff --git a/res/layout/avatar.xml b/res/layout/avatar.xml new file mode 100644 index 000000000..9f0b1161e --- /dev/null +++ b/res/layout/avatar.xml @@ -0,0 +1,29 @@ + + + + + + + + + + \ No newline at end of file diff --git a/res/layout/chat.xml b/res/layout/chat.xml index 84104801c..49e79ecb8 100644 --- a/res/layout/chat.xml +++ b/res/layout/chat.xml @@ -1,5 +1,6 @@ - + - + - + @@ -27,12 +28,11 @@ android:orientation="vertical" android:paddingTop="30dip"> - + @@ -12,4 +13,9 @@ + + + + + \ No newline at end of file diff --git a/src/org/linphone/AudioCallFragment.java b/src/org/linphone/AudioCallFragment.java index f6187253a..630f9f783 100644 --- a/src/org/linphone/AudioCallFragment.java +++ b/src/org/linphone/AudioCallFragment.java @@ -21,6 +21,7 @@ import org.linphone.core.LinphoneAddress; import org.linphone.core.LinphoneCall; import org.linphone.core.LinphoneCall.State; import org.linphone.core.LinphoneCoreFactory; +import org.linphone.ui.AvatarWithShadow; import android.app.Activity; import android.content.res.Resources; @@ -106,9 +107,9 @@ public class AudioCallFragment extends Fragment { } private void displayOrHideContactPicture(LinearLayout callView, Uri pictureUri, boolean hide) { - ImageView contactPicture = (ImageView) callView.findViewById(R.id.contactPicture); + AvatarWithShadow contactPicture = (AvatarWithShadow) callView.findViewById(R.id.contactPicture); if (pictureUri != null) { - LinphoneUtils.setImagePictureFromUri(callView.getContext(), contactPicture, Uri.parse(pictureUri.toString()), R.drawable.unknown_small); + LinphoneUtils.setImagePictureFromUri(callView.getContext(), contactPicture.getView(), Uri.parse(pictureUri.toString()), R.drawable.unknown_small); } if (hide) { contactPicture.setVisibility(View.GONE); diff --git a/src/org/linphone/ChatFragment.java b/src/org/linphone/ChatFragment.java index beb21a886..06d9b50ec 100644 --- a/src/org/linphone/ChatFragment.java +++ b/src/org/linphone/ChatFragment.java @@ -23,6 +23,7 @@ import org.linphone.LinphoneSimpleListener.LinphoneOnMessageReceivedListener; import org.linphone.core.LinphoneAddress; import org.linphone.core.LinphoneChatRoom; import org.linphone.core.LinphoneCore; +import org.linphone.ui.AvatarWithShadow; import org.linphone.ui.BubbleChat; import android.net.Uri; @@ -73,9 +74,9 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneO contactName.setText(name); } - ImageView contactPicture = (ImageView) view.findViewById(R.id.contactPicture); + AvatarWithShadow contactPicture = (AvatarWithShadow) view.findViewById(R.id.contactPicture); if (pictureUri != null) { - LinphoneUtils.setImagePictureFromUri(view.getContext(), contactPicture, Uri.parse(pictureUri), R.drawable.unknown_small); + LinphoneUtils.setImagePictureFromUri(view.getContext(), contactPicture.getView(), Uri.parse(pictureUri), R.drawable.unknown_small); } ImageView sendMessage = (ImageView) view.findViewById(R.id.sendMessage); diff --git a/src/org/linphone/ContactFragment.java b/src/org/linphone/ContactFragment.java index 17759c1a2..2a41bb84b 100644 --- a/src/org/linphone/ContactFragment.java +++ b/src/org/linphone/ContactFragment.java @@ -20,6 +20,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. import java.io.InputStream; import org.linphone.compatibility.Compatibility; +import org.linphone.ui.AvatarWithShadow; import android.graphics.BitmapFactory; import android.os.Bundle; @@ -28,7 +29,6 @@ import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; -import android.widget.ImageView; import android.widget.TableLayout; import android.widget.TextView; @@ -44,12 +44,12 @@ public class ContactFragment extends Fragment { contact = (Contact) getArguments().getSerializable("Contact"); View view = inflater.inflate(R.layout.contact, container, false); - ImageView contactPicture = (ImageView) view.findViewById(R.id.contactPicture); + AvatarWithShadow contactPicture = (AvatarWithShadow) view.findViewById(R.id.contactPicture); if (contact.getPhotoUri() != null) { InputStream input = Compatibility.getContactPictureInputStream(getActivity().getContentResolver(), contact.getID()); contactPicture.setImageBitmap(BitmapFactory.decodeStream(input)); } else { - contactPicture.setImageResource(R.drawable.unknown_small); + contactPicture.setBackgroundResource(R.drawable.unknown_small); } chatListener = getChatListener(); diff --git a/src/org/linphone/HistoryDetailFragment.java b/src/org/linphone/HistoryDetailFragment.java index 87b221a14..c3af4bf65 100644 --- a/src/org/linphone/HistoryDetailFragment.java +++ b/src/org/linphone/HistoryDetailFragment.java @@ -18,6 +18,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ import org.linphone.compatibility.Compatibility; +import org.linphone.ui.AvatarWithShadow; import android.content.Intent; import android.net.Uri; @@ -34,7 +35,8 @@ import android.widget.TextView; * @author Sylvain Berfini */ public class HistoryDetailFragment extends Fragment implements OnClickListener { - private ImageView contactPicture, dialBack, chat, addToContacts; + private ImageView dialBack, chat, addToContacts; + private AvatarWithShadow contactPicture; private TextView contactName, callDirection, time, date, dialBackUri; private String sipUri, displayName, pictureUri; @@ -50,9 +52,9 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener { View view = inflater.inflate(R.layout.history_detail, container, false); - contactPicture = (ImageView) view.findViewById(R.id.contactPicture); + contactPicture = (AvatarWithShadow) view.findViewById(R.id.contactPicture); if (pictureUri != null) { - LinphoneUtils.setImagePictureFromUri(view.getContext(), contactPicture, Uri.parse(pictureUri), R.drawable.unknown_small); + LinphoneUtils.setImagePictureFromUri(view.getContext(), contactPicture.getView(), Uri.parse(pictureUri), R.drawable.unknown_small); } dialBack = (ImageView) view.findViewById(R.id.dialBack); diff --git a/src/org/linphone/IncomingCallActivity.java b/src/org/linphone/IncomingCallActivity.java index f75bd5a06..763f36f41 100644 --- a/src/org/linphone/IncomingCallActivity.java +++ b/src/org/linphone/IncomingCallActivity.java @@ -25,6 +25,7 @@ import org.linphone.core.LinphoneAddress; import org.linphone.core.LinphoneCall; import org.linphone.core.LinphoneCall.State; import org.linphone.core.Log; +import org.linphone.ui.AvatarWithShadow; import org.linphone.ui.LinphoneSliders; import org.linphone.ui.LinphoneSliders.LinphoneSliderTriggered; @@ -33,7 +34,6 @@ import android.net.Uri; import android.os.Bundle; import android.view.KeyEvent; import android.view.WindowManager; -import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; @@ -47,7 +47,7 @@ public class IncomingCallActivity extends Activity implements LinphoneOnCallStat private TextView mNameView; private TextView mNumberView; - private ImageView mPictureView; + private AvatarWithShadow mPictureView; private LinphoneCall mCall; private LinphoneSliders mIncomingCallWidget; @@ -57,7 +57,7 @@ public class IncomingCallActivity extends Activity implements LinphoneOnCallStat mNameView = (TextView) findViewById(R.id.incoming_caller_name); mNumberView = (TextView) findViewById(R.id.incoming_caller_number); - mPictureView = (ImageView) findViewById(R.id.incoming_picture); + mPictureView = (AvatarWithShadow) findViewById(R.id.incoming_picture); // set this flag so this activity will stay in front of the keyguard int flags = WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED; @@ -93,7 +93,7 @@ public class IncomingCallActivity extends Activity implements LinphoneOnCallStat LinphoneAddress address = mCall.getRemoteAddress(); // May be greatly sped up using a drawable cache Uri uri = LinphoneUtils.findUriPictureOfContactAndSetDisplayName(address, getContentResolver()); - LinphoneUtils.setImagePictureFromUri(this, mPictureView, uri, R.drawable.unknown_small); + LinphoneUtils.setImagePictureFromUri(this, mPictureView.getView(), uri, R.drawable.unknown_small); // To be done after findUriPictureOfContactAndSetDisplayName called mNameView.setText(address.getDisplayName()); @@ -132,7 +132,7 @@ public class IncomingCallActivity extends Activity implements LinphoneOnCallStat private void answer() { if (!LinphoneManager.getInstance().acceptCall(mCall)) { // the above method takes care of Samsung Galaxy S - Toast.makeText(this, R.string.couldnt_accept_call, Toast.LENGTH_LONG); + Toast.makeText(this, R.string.couldnt_accept_call, Toast.LENGTH_LONG).show(); } else { if (mCall.getCurrentParamsCopy().getVideoEnabled()) LinphoneActivity.instance().startVideoActivity(mCall); diff --git a/src/org/linphone/ui/AvatarWithShadow.java b/src/org/linphone/ui/AvatarWithShadow.java new file mode 100644 index 000000000..b83d4b557 --- /dev/null +++ b/src/org/linphone/ui/AvatarWithShadow.java @@ -0,0 +1,60 @@ +package org.linphone.ui; +/* +AvatarWithShadow.java +Copyright (C) 2012 Belledonne Communications, Grenoble, France + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ +import org.linphone.R; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Bitmap; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; + +/** + * @author Sylvain Berfini + */ +public class AvatarWithShadow extends LinearLayout { + private ImageView contactPicture; + + public AvatarWithShadow(Context context, AttributeSet attrs) { + super(context, attrs); + + TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.AvatarWithShadow); + int pictureResId = array.getResourceId(R.styleable.AvatarWithShadow_picture, 0); + array.recycle(); + + View view = LayoutInflater.from(context).inflate(R.layout.avatar, this); + contactPicture = (ImageView) view.findViewById(R.id.picture); + contactPicture.setImageResource(pictureResId); + } + + public ImageView getView() { + return contactPicture; + } + + public void setImageBitmap(Bitmap bitmap) { + contactPicture.setImageBitmap(bitmap); + } + + public void setBackgroundResource(int res) { + contactPicture.setBackgroundResource(res); + } +}