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