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