From cebe5d9b00b13b21ee4bd3d89f04b9cfb6ffae93 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Thu, 12 May 2016 12:03:45 +0200 Subject: [PATCH] Improved memory again (and a few other things along the way) --- src/org/linphone/ChatFragment.java | 20 +------ src/org/linphone/ChatListFragment.java | 27 ++++++++- src/org/linphone/ContactEditorFragment.java | 8 --- src/org/linphone/ContactsListFragment.java | 12 ---- src/org/linphone/LinphoneActivity.java | 61 ++++----------------- src/org/linphone/LinphoneManager.java | 10 +--- 6 files changed, 40 insertions(+), 98 deletions(-) diff --git a/src/org/linphone/ChatFragment.java b/src/org/linphone/ChatFragment.java index b19cd6a9a..05d96eb24 100644 --- a/src/org/linphone/ChatFragment.java +++ b/src/org/linphone/ChatFragment.java @@ -39,7 +39,6 @@ import org.linphone.core.LinphoneCoreListenerBase; import org.linphone.mediastream.Log; import org.linphone.ui.BubbleChat; -import android.Manifest; import android.annotation.SuppressLint; import android.app.Activity; import android.app.Dialog; @@ -47,7 +46,6 @@ import android.app.Fragment; import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; -import android.content.pm.PackageManager; import android.content.res.Configuration; import android.database.Cursor; import android.graphics.Bitmap; @@ -89,8 +87,6 @@ import android.widget.Toast; public class ChatFragment extends Fragment implements OnClickListener, LinphoneChatMessage.LinphoneChatMessageListener { - private static ChatFragment instance; - private static final int ADD_PHOTO = 1337; private static final int MENU_DELETE_MESSAGE = 0; private static final int MENU_PICTURE_SMALL = 2; @@ -128,14 +124,9 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC private ByteArrayInputStream mUploadingImageStream; private boolean newChatConversation = false; - public static boolean isInstanciated() { - return instance != null; - } - @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreate(savedInstanceState); - instance = this; final View view = inflater.inflate(R.layout.chat, container, false); LinphoneManager.addListener(this); @@ -219,6 +210,8 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC public void messageReceived(LinphoneCore lc, LinphoneChatRoom cr, LinphoneChatMessage message) { LinphoneAddress from = cr.getPeerAddress(); if (from.asStringUriOnly().equals(sipUri)) { + LinphoneService.instance().removeMessageNotification(); + cr.markAsRead(); invalidate(); messagesList.setSelection(adapter.getCount()-1); @@ -257,10 +250,6 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC return view; } - public static ChatFragment instance() { - return instance; - } - public String getSipUri() { return sipUri; } @@ -567,10 +556,6 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC LinphoneService.instance().removeMessageNotification(); - if (LinphoneActivity.isInstanciated()) { - LinphoneActivity.instance().updateChatFragment(null); - } - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc != null) { lc.removeListener(mListener); @@ -598,7 +583,6 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC if (LinphoneActivity.isInstanciated()) { LinphoneActivity.instance().selectMenu(FragmentsAvailable.CHAT); - LinphoneActivity.instance().updateChatFragment(this); } if(LinphoneManager.getLc().isIncall()){ diff --git a/src/org/linphone/ChatListFragment.java b/src/org/linphone/ChatListFragment.java index 584f60bf7..b0dfbeb3c 100644 --- a/src/org/linphone/ChatListFragment.java +++ b/src/org/linphone/ChatListFragment.java @@ -22,8 +22,10 @@ import java.util.List; import org.linphone.core.LinphoneAddress; import org.linphone.core.LinphoneChatMessage; import org.linphone.core.LinphoneChatRoom; +import org.linphone.core.LinphoneCore; import org.linphone.core.LinphoneCoreException; import org.linphone.core.LinphoneCoreFactory; +import org.linphone.core.LinphoneCoreListenerBase; import org.linphone.mediastream.Log; import android.app.Dialog; @@ -61,6 +63,7 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte private ImageView edit, selectAll, deselectAll, delete, newDiscussion, cancel, backInCall; private LinearLayout editList, topbar; private boolean isEditMode = false; + private LinphoneCoreListenerBase mListener; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, @@ -97,6 +100,13 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte delete = (ImageView) view.findViewById(R.id.delete); delete.setOnClickListener(this); + + mListener = new LinphoneCoreListenerBase() { + @Override + public void messageReceived(LinphoneCore lc, LinphoneChatRoom cr, LinphoneChatMessage message) { + refresh(); + } + }; return view; } @@ -194,12 +204,25 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte if (LinphoneActivity.isInstanciated()) { LinphoneActivity.instance().selectMenu(FragmentsAvailable.CHAT_LIST); - LinphoneActivity.instance().updateChatListFragment(this); LinphoneActivity.instance().hideTabBar(false); } + LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + if (lc != null) { + lc.addListener(mListener); + } + refresh(); } + + @Override + public void onPause() { + LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + if (lc != null) { + lc.removeListener(mListener); + } + super.onPause(); + } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { @@ -381,7 +404,7 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte displayName.setText(contact == null ? LinphoneUtils.getAddressDisplayName(address) : contact.getFullName()); - if(contact != null){ + if (contact != null) { LinphoneUtils.setImagePictureFromUri(view.getContext(), contactPicture, contact.getPhotoUri(), contact.getThumbnailUri()); } else { contactPicture.setImageResource(R.drawable.avatar); diff --git a/src/org/linphone/ContactEditorFragment.java b/src/org/linphone/ContactEditorFragment.java index 131c0aa2d..134abcb6a 100644 --- a/src/org/linphone/ContactEditorFragment.java +++ b/src/org/linphone/ContactEditorFragment.java @@ -144,14 +144,6 @@ public class ContactEditorFragment extends Fragment { contact.addOrUpdateNumberOrAddress(numberOrAddress); } contact.save(); - - if (!isNewContact) { - if (LinphoneActivity.instance().getResources().getBoolean(R.bool.isTablet)) { - if(ContactsListFragment.isInstanciated()) { - ContactsListFragment.instance().invalidate(); - } - } - } getFragmentManager().popBackStackImmediate(); } }); diff --git a/src/org/linphone/ContactsListFragment.java b/src/org/linphone/ContactsListFragment.java index a656d69fe..9dffdeac4 100644 --- a/src/org/linphone/ContactsListFragment.java +++ b/src/org/linphone/ContactsListFragment.java @@ -68,16 +68,6 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O private ImageView clearSearchField; private EditText searchField; - private static ContactsListFragment instance; - - static final boolean isInstanciated() { - return instance != null; - } - - public static final ContactsListFragment instance() { - return instance; - } - @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mInflater = inflater; @@ -379,7 +369,6 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O @Override public void onResume() { - instance = this; ContactsManager.addContactsListener(this); super.onResume(); @@ -399,7 +388,6 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O @Override public void onPause() { - instance = null; ContactsManager.removeContactsListener(this); super.onPause(); } diff --git a/src/org/linphone/LinphoneActivity.java b/src/org/linphone/LinphoneActivity.java index 58d463648..82889f9b8 100644 --- a/src/org/linphone/LinphoneActivity.java +++ b/src/org/linphone/LinphoneActivity.java @@ -112,8 +112,7 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta private ImageView cancel; private FragmentsAvailable currentFragment, nextFragment; private List fragmentsHistory; - private Fragment dialerFragment, chatListFragment, historyListFragment, contactListFragment; - private ChatFragment chatFragment; + private Fragment dialerFragment; private Fragment.SavedState dialerSavedState; private boolean newProxyConfig; private boolean isAnimationDisabled = true, emptyFragment = false, permissionAsked = false; @@ -195,13 +194,7 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta mListener = new LinphoneCoreListenerBase(){ @Override public void messageReceived(LinphoneCore lc, LinphoneChatRoom cr, LinphoneChatMessage message) { - if(!displayChatMessageNotification(message.getFrom().asStringUriOnly())) { - cr.markAsRead(); - } displayMissedChats(getUnreadMessageCount()); - if (chatListFragment != null && chatListFragment.isVisible()) { - ((ChatListFragment) chatListFragment).refresh(); - } } @Override @@ -373,14 +366,18 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta switch (newFragmentType) { case HISTORY_LIST: newFragment = new HistoryListFragment(); - historyListFragment = newFragment; + if (isTablet()) { + ((HistoryListFragment) newFragment).displayFirstLog(); + } break; case HISTORY_DETAIL: newFragment = new HistoryDetailFragment(); break; case CONTACTS_LIST: newFragment = new ContactsListFragment(); - contactListFragment = newFragment; + if (isTablet()) { + ((ContactsListFragment) newFragment).displayFirstContact(); + } break; case CONTACT_DETAIL: newFragment = new ContactDetailsFragment(); @@ -409,7 +406,9 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta break; case CHAT_LIST: newFragment = new ChatListFragment(); - chatListFragment = newFragment; + if (isTablet()) { + ((ChatListFragment) newFragment).displayFirstChat(); + } break; case CHAT: newFragment = new ChatFragment(); @@ -642,15 +641,6 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta startActivity(new Intent(LinphoneActivity.this, AssistantActivity.class)); } - public boolean displayChatMessageNotification(String address){ - if(chatFragment != null) { - if(chatFragment.getSipUri().equals(address)) { - return false; - } - } - return true; - } - public int getUnreadMessageCount() { int count = 0; LinphoneChatRoom[] chats = LinphoneManager.getLc().getChatRooms(); @@ -718,10 +708,6 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta } } - if (chatListFragment != null && chatListFragment.isVisible()) { - ((ChatListFragment) chatListFragment).refresh(); - } - LinphoneService.instance().resetMessageNotifCount(); LinphoneService.instance().removeMessageNotification(); displayMissedChats(getUnreadMessageCount()); @@ -737,30 +723,15 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta history_selected.setVisibility(View.VISIBLE); LinphoneManager.getLc().resetMissedCallsCount(); displayMissedCalls(0); - if(isTablet()) { - if (historyListFragment != null && historyListFragment.isVisible()) { - ((HistoryListFragment) historyListFragment).displayFirstLog(); - } - } } else if (id == R.id.contacts) { changeCurrentFragment(FragmentsAvailable.CONTACTS_LIST, null); contacts_selected.setVisibility(View.VISIBLE); - if(isTablet()) { - if (contactListFragment != null && contactListFragment.isVisible()) { - ((ContactsListFragment) contactListFragment).displayFirstContact(); - } - } } else if (id == R.id.dialer) { changeCurrentFragment(FragmentsAvailable.DIALER, null); dialer_selected.setVisibility(View.VISIBLE); } else if (id == R.id.chat) { changeCurrentFragment(FragmentsAvailable.CHAT_LIST, null); chat_selected.setVisibility(View.VISIBLE); - if(isTablet()) { - if (chatListFragment != null && chatListFragment.isVisible()) { - ((ChatListFragment) chatListFragment).displayFirstChat(); - } - } } else if (id == R.id.cancel){ hideTopBar(); displayDialer(); @@ -825,14 +796,6 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN | WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); } - public void updateChatFragment(ChatFragment fragment) { - chatFragment = fragment; - } - - public void updateChatListFragment(ChatListFragment fragment) { - chatListFragment = fragment; - } - public void updateStatusFragment(StatusFragment fragment) { statusFragment = fragment; } @@ -884,10 +847,6 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta public int onMessageSent(String to, String message) { getChatStorage().deleteDraft(to); - if (chatListFragment != null && chatListFragment.isVisible()) { - ((ChatListFragment) chatListFragment).refresh(); - } - return getChatStorage().saveTextMessage("", to, message, System.currentTimeMillis()); } diff --git a/src/org/linphone/LinphoneManager.java b/src/org/linphone/LinphoneManager.java index 77c6437f4..61192d309 100644 --- a/src/org/linphone/LinphoneManager.java +++ b/src/org/linphone/LinphoneManager.java @@ -864,14 +864,10 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag try { LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(from); if (!mServiceContext.getResources().getBoolean(R.bool.disable_chat_message_notification)) { - if (LinphoneActivity.isInstanciated() && !LinphoneActivity.instance().displayChatMessageNotification(from.asStringUriOnly())) { - return; + if (contact != null) { + LinphoneService.instance().displayMessageNotification(from.asStringUriOnly(), contact.getFullName(), textMessage); } else { - if (contact != null) { - LinphoneService.instance().displayMessageNotification(from.asStringUriOnly(), contact.getFullName(), textMessage); - } else { - LinphoneService.instance().displayMessageNotification(from.asStringUriOnly(), from.getUserName(), textMessage); - } + LinphoneService.instance().displayMessageNotification(from.asStringUriOnly(), from.getUserName(), textMessage); } } } catch (Exception e) {