diff --git a/res/values-sw533dp/non_localizable_strings.xml b/res/values-sw533dp/non_localizable_strings.xml index 5a5e39760..40efdfed5 100644 --- a/res/values-sw533dp/non_localizable_strings.xml +++ b/res/values-sw533dp/non_localizable_strings.xml @@ -1,4 +1,4 @@ - false + true diff --git a/src/android/org/linphone/LinphoneUtils.java b/src/android/org/linphone/LinphoneUtils.java index d8f0ca945..29de3012c 100644 --- a/src/android/org/linphone/LinphoneUtils.java +++ b/src/android/org/linphone/LinphoneUtils.java @@ -369,27 +369,6 @@ public final class LinphoneUtils { return true; } - public static boolean zipLogs(StringBuilder sb, String toZipFile){ - boolean success = false; - try { - FileOutputStream zip = new FileOutputStream(toZipFile); - - ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(zip)); - ZipEntry entry = new ZipEntry("logs.txt"); - out.putNextEntry(entry); - - out.write(sb.toString().getBytes()); - - out.close(); - success = true; - - } catch (Exception e){ - Log.e("Exception when trying to zip the logs: " + e.getMessage()); - } - - return success; - } - public static String getNameFromFilePath(String filePath) { String name = filePath; int i = filePath.lastIndexOf('/'); diff --git a/src/android/org/linphone/activities/LinphoneActivity.java b/src/android/org/linphone/activities/LinphoneActivity.java index 80f4e81c4..0500bb115 100644 --- a/src/android/org/linphone/activities/LinphoneActivity.java +++ b/src/android/org/linphone/activities/LinphoneActivity.java @@ -145,7 +145,7 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick private View contacts_selected, history_selected, dialer_selected, chat_selected; private RelativeLayout mTopBar; private ImageView cancel; - private FragmentsAvailable pendingFragmentTransaction, currentFragment; + private FragmentsAvailable pendingFragmentTransaction, currentFragment, leftFragment; private Fragment fragment; private List fragmentsHistory; private Fragment.SavedState dialerSavedState; @@ -334,7 +334,7 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick missedChats = (TextView) findViewById(R.id.missed_chats); } - private boolean isTablet() { + public boolean isTablet() { return getResources().getBoolean(R.bool.isTablet); } @@ -451,7 +451,7 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick ((ContactsListFragment) fragment).displayFirstContact(); break; case CHAT_LIST: - //TODO((ChatListFragment) fragment).displayFirstChat(); + ((ChatListFragment) fragment).displayFirstChat(); break; } } else { @@ -517,13 +517,19 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick transaction.commitAllowingStateLoss(); getFragmentManager().executePendingTransactions(); } else { - if (newFragmentType.shouldAddItselfToTheRightOf(currentFragment)) { + if (newFragmentType.shouldAddItselfToTheRightOf(currentFragment) || newFragmentType.shouldAddItselfToTheRightOf(leftFragment)) { ll.setVisibility(View.VISIBLE); if (newFragmentType == FragmentsAvailable.CONTACT_EDITOR) { transaction.addToBackStack(newFragmentType.toString()); } transaction.replace(R.id.fragmentContainer2, newFragment); + leftFragment = currentFragment; + + if (newFragmentType == FragmentsAvailable.GROUP_CHAT && leftFragment != FragmentsAvailable.CHAT_LIST) { + leftFragment = FragmentsAvailable.CHAT_LIST; + transaction.replace(R.id.fragmentContainer, new ChatListFragment()); + } } else { if (newFragmentType == FragmentsAvailable.EMPTY) { ll.setVisibility(View.VISIBLE); @@ -534,7 +540,9 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick if (newFragmentType == FragmentsAvailable.DIALER || newFragmentType == FragmentsAvailable.ABOUT || newFragmentType == FragmentsAvailable.SETTINGS - || newFragmentType == FragmentsAvailable.ACCOUNT_SETTINGS) { + || newFragmentType == FragmentsAvailable.ACCOUNT_SETTINGS + || newFragmentType == FragmentsAvailable.CREATE_CHAT + || newFragmentType == FragmentsAvailable.INFO_GROUP_CHAT) { ll.setVisibility(View.GONE); } else { ll.setVisibility(View.VISIBLE); @@ -702,9 +710,21 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick } public void goToChat(String sipUri) { - Bundle extras = new Bundle(); - extras.putString("SipUri", sipUri); - changeCurrentFragment(FragmentsAvailable.GROUP_CHAT, extras); + if (isTablet()) { + Fragment fragment2 = getFragmentManager().findFragmentById(R.id.fragmentContainer2); + if (fragment2 != null && fragment2.isVisible() && currentFragment == FragmentsAvailable.GROUP_CHAT && !emptyFragment) { + GroupChatFragment chatFragment = (GroupChatFragment) fragment2; + chatFragment.changeDisplayedChat(sipUri); + } else { + Bundle extras = new Bundle(); + extras.putString("SipUri", sipUri); + changeCurrentFragment(FragmentsAvailable.GROUP_CHAT, extras); + } + } else { + Bundle extras = new Bundle(); + extras.putString("SipUri", sipUri); + changeCurrentFragment(FragmentsAvailable.GROUP_CHAT, extras); + } LinphoneService.instance().resetMessageNotifCount(); LinphoneService.instance().removeMessageNotification(); @@ -758,12 +778,11 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick } } - if (currentFragment == FragmentsAvailable.CHAT_LIST || currentFragment == FragmentsAvailable.CHAT) { + if (currentFragment == FragmentsAvailable.CHAT_LIST || currentFragment == FragmentsAvailable.GROUP_CHAT) { Fragment fragment2 = getFragmentManager().findFragmentById(R.id.fragmentContainer2); - if (fragment2 != null && fragment2.isVisible() && currentFragment == FragmentsAvailable.CHAT && !emptyFragment) { - /*ChatFragment chatFragment = (ChatFragment) fragment2; - chatFragment.changeDisplayedChat(sipUri, displayName, pictureUri, message, fileUri);*/ - //TODO + if (fragment2 != null && fragment2.isVisible() && currentFragment == FragmentsAvailable.GROUP_CHAT && !emptyFragment) { + GroupChatFragment chatFragment = (GroupChatFragment) fragment2; + chatFragment.changeDisplayedChat(sipUri); } else { displayChat(sipUri, message, fileUri, pictureUri, thumbnailUri, displayName, lAddress); } @@ -872,13 +891,6 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick dialer_selected.setVisibility(View.VISIBLE); } - public void onMessageSent(String to, String message) { - Fragment fragment = getFragmentManager().findFragmentById(R.id.fragmentContainer); - if (fragment.getClass() == ChatListFragment.class) { - ////TODO ((ChatListFragment)fragment).refresh(); - } - } - public void updateStatusFragment(StatusFragment fragment) { statusFragment = fragment; } @@ -971,42 +983,6 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick return dialog; } - public Dialog displayWrongPasswordDialog(final String username, final String realm, final String domain){ - final Dialog dialog = new Dialog(this); - dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); - Drawable d = new ColorDrawable(ContextCompat.getColor(this, R.color.colorC)); - d.setAlpha(200); - dialog.setContentView(R.layout.input_dialog); - dialog.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT); - dialog.getWindow().setBackgroundDrawable(d); - - TextView customText = (TextView) dialog.findViewById(R.id.customText); - customText.setText(getString(R.string.error_bad_credentials)); - - Button retry = (Button) dialog.findViewById(R.id.retry); - Button cancel = (Button) dialog.findViewById(R.id.cancel); - - retry.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View view) { - String newPassword = ((EditText) dialog.findViewById(R.id.password)).getText().toString(); - AuthInfo authInfo = Factory.instance().createAuthInfo(username, null, newPassword, null, realm, domain); - LinphoneManager.getLc().addAuthInfo(authInfo); - LinphoneManager.getLc().refreshRegisters(); - dialog.dismiss(); - } - }); - - cancel.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View view) { - dialog.dismiss(); - } - }); - - return dialog; - } - @Override public void setAddresGoToDialerAndCall(String number, String name, Uri photo) { // Bundle extras = new Bundle(); @@ -1207,14 +1183,6 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick return true; } - public void checkAndRequestReadPhoneStatePermission() { - checkAndRequestPermission(Manifest.permission.READ_PHONE_STATE, 0); - } - - public void checkAndRequestReadExternalStoragePermission() { - checkAndRequestPermission(Manifest.permission.READ_EXTERNAL_STORAGE, 0); - } - public void checkAndRequestExternalStoragePermission() { checkAndRequestPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE, 0); } @@ -1223,14 +1191,6 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick checkAndRequestPermission(Manifest.permission.CAMERA, 0); } - public void checkAndRequestReadContactsPermission() { - checkAndRequestPermission(Manifest.permission.READ_CONTACTS, PERMISSIONS_REQUEST_CONTACTS); - } - - public void checkAndRequestInappPermission() { - checkAndRequestPermission(Manifest.permission.GET_ACCOUNTS, PERMISSIONS_REQUEST_CONTACTS); - } - public void checkAndRequestWriteContactsPermission() { checkAndRequestPermission(Manifest.permission.WRITE_CONTACTS, 0); } @@ -1869,29 +1829,4 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick } return -1; } - - public String getCVSPathFromOtherUri(String path) { - Uri contactUri = Uri.parse(path); - - ContentResolver cr = getContentResolver(); - InputStream stream = null; - try { - stream = cr.openInputStream(contactUri); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - - StringBuffer fileContent = new StringBuffer(""); - int ch; - try { - while( (ch = stream.read()) != -1) - fileContent.append((char)ch); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - String data = new String(fileContent); - return data; - } - } diff --git a/src/android/org/linphone/chat/ChatCreationFragment.java b/src/android/org/linphone/chat/ChatCreationFragment.java index 4ad905bfb..3860d9d2d 100644 --- a/src/android/org/linphone/chat/ChatCreationFragment.java +++ b/src/android/org/linphone/chat/ChatCreationFragment.java @@ -329,8 +329,12 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen mAllContactsSelected.setVisibility(View.INVISIBLE); updateList(); } else if (id == R.id.back) { - mContactsSelectedLayout.removeAllViews(); - LinphoneActivity.instance().popBackStack(); + if (LinphoneActivity.instance().isTablet()) { + LinphoneActivity.instance().goToChatList(); + } else { + mContactsSelectedLayout.removeAllViews(); + LinphoneActivity.instance().popBackStack(); + } } else if (id == R.id.next) { if (mChatRoomAddress == null && mChatRoomSubject == null) { if (mContactsSelected.size() == 1) { diff --git a/src/android/org/linphone/chat/ChatListFragment.java b/src/android/org/linphone/chat/ChatListFragment.java index 4e25cbff0..f7fb2ec16 100644 --- a/src/android/org/linphone/chat/ChatListFragment.java +++ b/src/android/org/linphone/chat/ChatListFragment.java @@ -138,6 +138,16 @@ public class ChatListFragment extends Fragment implements ContactsUpdatedListene mNoChatHistory.setVisibility(mChatRoomsAdapter.getCount() == 0 ? View.VISIBLE : View.GONE); } + public void displayFirstChat() { + ChatRoomsAdapter adapter = (ChatRoomsAdapter)mChatRoomsList.getAdapter(); + if (adapter != null && adapter.getCount() > 0) { + ChatRoom room = (ChatRoom) adapter.getItem(0); + LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly()); + } else { + LinphoneActivity.instance().displayEmptyFragment(); + } + } + @Override public void onResume() { super.onResume(); diff --git a/src/android/org/linphone/chat/GroupChatFragment.java b/src/android/org/linphone/chat/GroupChatFragment.java index aa3e78521..25e7ae599 100644 --- a/src/android/org/linphone/chat/GroupChatFragment.java +++ b/src/android/org/linphone/chat/GroupChatFragment.java @@ -234,6 +234,17 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con LinphoneManager.getInstance().setCurrentChatRoomAddress(mRemoteSipAddress); } + public void changeDisplayedChat(String sipUri) { + mRemoteSipUri = sipUri; + mRemoteSipAddress = LinphoneManager.getLc().createAddress(mRemoteSipUri); + + initChatRoom(); + displayChatRoomHeader(); + displayChatRoomHistory(); + + LinphoneManager.getInstance().setCurrentChatRoomAddress(mRemoteSipAddress); + } + @Override public void onPause() { ContactsManager.removeContactsListener(this); diff --git a/src/android/org/linphone/chat/GroupInfoFragment.java b/src/android/org/linphone/chat/GroupInfoFragment.java index 45579b9e5..d5810e1e3 100644 --- a/src/android/org/linphone/chat/GroupInfoFragment.java +++ b/src/android/org/linphone/chat/GroupInfoFragment.java @@ -123,7 +123,11 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener { @Override public void onClick(View view) { if (mIsAlreadyCreatedGroup) { - getFragmentManager().popBackStack(); + if (LinphoneActivity.instance().isTablet()) { + LinphoneActivity.instance().goToChat(mGroupChatRoomAddress.asStringUriOnly()); + } else { + getFragmentManager().popBackStack(); + } } else { LinphoneActivity.instance().goToChatCreator(null, mParticipants, null, true); } diff --git a/src/android/org/linphone/chat/ImdnFragment.java b/src/android/org/linphone/chat/ImdnFragment.java index c2f3a58d4..b78aa84e9 100644 --- a/src/android/org/linphone/chat/ImdnFragment.java +++ b/src/android/org/linphone/chat/ImdnFragment.java @@ -50,7 +50,7 @@ public class ImdnFragment extends Fragment { private ImageView mBackButton; private ChatBubbleViewHolder mBubble; - private String mMessageId; + private String mRoomUri, mMessageId; private Address mRoomAddr; private ChatRoom mRoom; @@ -61,8 +61,8 @@ public class ImdnFragment extends Fragment { String roomUri; if (getArguments() != null) { - roomUri = getArguments().getString("SipUri"); - mRoomAddr = LinphoneManager.getLc().createAddress(roomUri); + mRoomUri = getArguments().getString("SipUri"); + mRoomAddr = LinphoneManager.getLc().createAddress(mRoomUri); mMessageId = getArguments().getString("MessageId"); } Core core = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); @@ -81,7 +81,11 @@ public class ImdnFragment extends Fragment { mBackButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - LinphoneActivity.instance().onBackPressed(); + if (LinphoneActivity.instance().isTablet()) { + LinphoneActivity.instance().goToChat(mRoomUri); + } else { + LinphoneActivity.instance().onBackPressed(); + } } }); diff --git a/src/android/org/linphone/fragments/FragmentsAvailable.java b/src/android/org/linphone/fragments/FragmentsAvailable.java index eedca8e3c..27aca334f 100644 --- a/src/android/org/linphone/fragments/FragmentsAvailable.java +++ b/src/android/org/linphone/fragments/FragmentsAvailable.java @@ -38,51 +38,6 @@ public enum FragmentsAvailable { GROUP_CHAT, MESSAGE_IMDN; - public boolean shouldAnimate() { - return true; - } - - public boolean isRightOf(FragmentsAvailable fragment) { - switch (this) { - case HISTORY_LIST: - return fragment == UNKNOW; - - case HISTORY_DETAIL: - return HISTORY_LIST.isRightOf(fragment) || fragment == HISTORY_LIST; - - case CONTACTS_LIST: - return HISTORY_DETAIL.isRightOf(fragment) || fragment == HISTORY_DETAIL; - - case CONTACT_DETAIL: - return CONTACTS_LIST.isRightOf(fragment) || fragment == CONTACTS_LIST; - - case CONTACT_EDITOR: - return CONTACT_DETAIL.isRightOf(fragment) || fragment == CONTACT_DETAIL; - - case DIALER: - return CONTACT_EDITOR.isRightOf(fragment) || fragment == CONTACT_EDITOR; - - case CHAT_LIST: - return DIALER.isRightOf(fragment) || fragment == DIALER; - - case SETTINGS: - return CHAT_LIST.isRightOf(fragment) || fragment == CHAT_LIST; - - case ABOUT: - case ACCOUNT_SETTINGS: - return SETTINGS.isRightOf(fragment) || fragment == SETTINGS; - - case CHAT: - case CREATE_CHAT: - case GROUP_CHAT: - case INFO_GROUP_CHAT: - return CHAT_LIST.isRightOf(fragment) || fragment == CHAT_LIST; - - default: - return false; - } - } - public boolean shouldAddItselfToTheRightOf(FragmentsAvailable fragment) { switch (this) { case HISTORY_DETAIL: @@ -97,10 +52,13 @@ public enum FragmentsAvailable { case CHAT: return fragment == CHAT_LIST || fragment == CHAT; - case CREATE_CHAT: - return fragment == CHAT_LIST || fragment == CREATE_CHAT; + case GROUP_CHAT: + return fragment == CHAT_LIST || fragment == GROUP_CHAT; - default: + case MESSAGE_IMDN: + return fragment == GROUP_CHAT || fragment == MESSAGE_IMDN; + + default: return false; } } diff --git a/submodules/bctoolbox b/submodules/bctoolbox index 25e640640..312f1e41b 160000 --- a/submodules/bctoolbox +++ b/submodules/bctoolbox @@ -1 +1 @@ -Subproject commit 25e640640000e2ea691c4eb6137e8edebf6b3a52 +Subproject commit 312f1e41b217b1cb69bcad193046b01774be5341