diff --git a/res/layout/avatar_with_presence.xml b/res/layout/avatar_with_presence.xml new file mode 100644 index 000000000..a9ba34466 --- /dev/null +++ b/res/layout/avatar_with_presence.xml @@ -0,0 +1,32 @@ + + + + + + + + diff --git a/res/layout/contact_cell.xml b/res/layout/contact_cell.xml index d94aeb9d9..6895a1fcc 100644 --- a/res/layout/contact_cell.xml +++ b/res/layout/contact_cell.xml @@ -23,35 +23,12 @@ android:layout_margin="5dp" android:gravity="center_vertical"> - - - - - - + android:gravity="center_vertical" + /> + android:layout_marginLeft="40dp" /> >> updateAvatarPresence status = " + presenceStatus + " - vs basicStatus = " + basicStatus); - - if (basicStatus == PresenceBasicStatus.Closed) { - friendStatus.setImageResource(R.drawable.presence_unregistered); - } else if (presenceStatus == OnlineStatus.Online.toString()) { - friendStatus.setImageResource(R.drawable.presence_online); - } else { - friendStatus.setImageResource(R.drawable.presence_offline); - } - } else{ - Log.e("===>>> updateAvatarPresence friend is null "); - friendStatus.setImageResource(R.drawable.presence_unregistered); - } + AvatarWithPresenceImage avatarWithPresenceImage = (AvatarWithPresenceImage) view.findViewById(R.id.avatar_with_presence); + if(contact != null && contact.isLinphoneFriend() && contact.getFriendPresenceModel() != null) { + avatarWithPresenceImage.setLinphoneContact(contact); } return view; diff --git a/src/org/linphone/LinphoneActivity.java b/src/org/linphone/LinphoneActivity.java index a3af5d695..80f495140 100644 --- a/src/org/linphone/LinphoneActivity.java +++ b/src/org/linphone/LinphoneActivity.java @@ -47,6 +47,7 @@ import org.linphone.core.LinphoneProxyConfig; import org.linphone.core.Reason; import org.linphone.mediastream.Log; import org.linphone.ui.AddressText; +import org.linphone.ui.AvatarWithPresenceImage; import android.Manifest; import android.annotation.SuppressLint; @@ -118,7 +119,7 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta private boolean isAnimationDisabled = false, preferLinphoneContacts = false, emptyFragment = false, permissionAsked = false; private OrientationEventListener mOrientationHelper; private LinphoneCoreListenerBase mListener; - private LinearLayout mTabBar; + private LinearLayout mTabBar; private DrawerLayout sideMenu; private String[] sideMenuItems; @@ -127,6 +128,8 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta private ImageView menu; private boolean fetchedContactsOnce = false; + private ArrayList listeners; + static final boolean isInstanciated() { return instance != null; } @@ -201,7 +204,7 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta } } - mListener = new LinphoneCoreListenerBase(){ + mListener = new LinphoneCoreListenerBase(){ @Override public void messageReceived(LinphoneCore lc, LinphoneChatRoom cr, LinphoneChatMessage message) { if(!displayChatMessageNotification(message.getFrom().asStringUriOnly())) { @@ -279,15 +282,11 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta @Override public void notifyPresenceReceived(LinphoneCore lc, LinphoneFriend lf) { - // if(currentFragment == FragmentsAvailable.HISTORY_DETAIL || currentFragment == FragmentsAvailable.HISTORY_LIST || currentFragment == FragmentsAvailable.CONTACTS_LIST - // || currentFragment == FragmentsAvailable.CONTACT_DETAIL || currentFragment == FragmentsAvailable.CONTACT_EDITOR || currentFragment == FragmentsAvailable.CHAT_LIST - // || currentFragment == FragmentsAvailable.CHAT){ - - if(currentFragment == FragmentsAvailable.CONTACTS_LIST){ - if (contactListFragment != null && contactListFragment.isVisible()) { - ((ContactsListFragment) contactListFragment).invalidate(); - } - } + for(AvatarWithPresenceImage listener : listeners){ + if(listener.isThisFriend(lf)){ + listener.updatePresenceIcon(lc, lf); + } + } } }; @@ -418,6 +417,11 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta missedChats = (TextView) findViewById(R.id.missed_chats); } + + public void addPresenceUpdatedListener(AvatarWithPresenceImage aWPI){ + listeners.add(aWPI); + } + private boolean isTablet() { return getResources().getBoolean(R.bool.isTablet); } diff --git a/src/org/linphone/LinphoneContact.java b/src/org/linphone/LinphoneContact.java index bc86aa52e..3a8855597 100644 --- a/src/org/linphone/LinphoneContact.java +++ b/src/org/linphone/LinphoneContact.java @@ -437,6 +437,10 @@ public class LinphoneContact implements Serializable, Comparable>> updateAvatarPresence status = " + presenceStatus + " - vs basicStatus = " + basicStatus); + + if (basicStatus == PresenceBasicStatus.Closed) { + friendStatus.setImageResource(R.drawable.presence_unregistered); + } else if (presenceStatus == OnlineStatus.Online.toString()) { + friendStatus.setImageResource(R.drawable.presence_online); + } else { + friendStatus.setImageResource(R.drawable.presence_offline); + } + } else{ + Log.e("===>>> updateAvatarPresence friend is null "); + friendStatus.setImageResource(R.drawable.presence_unregistered); + } + } + } +} + + +interface onPresenceUpdated { + void updatePresenceIcon (LinphoneCore lc, LinphoneFriend friend); +} \ No newline at end of file