diff --git a/res/color/security_switch_track_color.xml b/res/color/security_switch_track_color.xml new file mode 100644 index 000000000..abf1d92f8 --- /dev/null +++ b/res/color/security_switch_track_color.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/res/drawable-xhdpi/attachment_delete.png b/res/drawable-xhdpi/attachment_delete.png new file mode 100644 index 000000000..8c8b89c15 Binary files /dev/null and b/res/drawable-xhdpi/attachment_delete.png differ diff --git a/res/drawable-xhdpi/chat_error.png b/res/drawable-xhdpi/chat_error.png deleted file mode 100644 index 3791317c2..000000000 Binary files a/res/drawable-xhdpi/chat_error.png and /dev/null differ diff --git a/res/drawable-xhdpi/chat_group_new.png b/res/drawable-xhdpi/chat_group_new.png new file mode 100644 index 000000000..50d061eed Binary files /dev/null and b/res/drawable-xhdpi/chat_group_new.png differ diff --git a/res/drawable-xhdpi/chat_message_delivered.png b/res/drawable-xhdpi/chat_message_delivered.png deleted file mode 100644 index b98f73db2..000000000 Binary files a/res/drawable-xhdpi/chat_message_delivered.png and /dev/null differ diff --git a/res/drawable-xhdpi/chat_message_not_delivered.png b/res/drawable-xhdpi/chat_message_not_delivered.png deleted file mode 100644 index f858a3cea..000000000 Binary files a/res/drawable-xhdpi/chat_message_not_delivered.png and /dev/null differ diff --git a/res/drawable-xhdpi/chat_new.png b/res/drawable-xhdpi/chat_new.png new file mode 100644 index 000000000..2c2f41889 Binary files /dev/null and b/res/drawable-xhdpi/chat_new.png differ diff --git a/res/drawable-xhdpi/chat_read.png b/res/drawable-xhdpi/chat_read.png deleted file mode 100644 index b7ae0d29a..000000000 Binary files a/res/drawable-xhdpi/chat_read.png and /dev/null differ diff --git a/res/drawable-xhdpi/chevron_list_close.png b/res/drawable-xhdpi/chevron_list_close.png new file mode 100644 index 000000000..80de198cc Binary files /dev/null and b/res/drawable-xhdpi/chevron_list_close.png differ diff --git a/res/drawable-xhdpi/chevron_list_open.png b/res/drawable-xhdpi/chevron_list_open.png new file mode 100644 index 000000000..422f69f9c Binary files /dev/null and b/res/drawable-xhdpi/chevron_list_open.png differ diff --git a/res/drawable-xhdpi/imdn_error.png b/res/drawable-xhdpi/imdn_error.png new file mode 100644 index 000000000..c3f8b3251 Binary files /dev/null and b/res/drawable-xhdpi/imdn_error.png differ diff --git a/res/drawable-xhdpi/imdn_read.png b/res/drawable-xhdpi/imdn_read.png new file mode 100644 index 000000000..534ea87cf Binary files /dev/null and b/res/drawable-xhdpi/imdn_read.png differ diff --git a/res/drawable-xhdpi/imdn_received.png b/res/drawable-xhdpi/imdn_received.png new file mode 100644 index 000000000..592684b07 Binary files /dev/null and b/res/drawable-xhdpi/imdn_received.png differ diff --git a/res/drawable-xhdpi/invite_linphone.png b/res/drawable-xhdpi/invite_linphone.png new file mode 100644 index 000000000..20606be43 Binary files /dev/null and b/res/drawable-xhdpi/invite_linphone.png differ diff --git a/res/drawable-xhdpi/menu_about.png b/res/drawable-xhdpi/menu_about.png new file mode 100644 index 000000000..37b24bbaa Binary files /dev/null and b/res/drawable-xhdpi/menu_about.png differ diff --git a/res/drawable-xhdpi/menu_assistant.png b/res/drawable-xhdpi/menu_assistant.png new file mode 100644 index 000000000..8b6955242 Binary files /dev/null and b/res/drawable-xhdpi/menu_assistant.png differ diff --git a/res/drawable-xhdpi/menu_link_account.png b/res/drawable-xhdpi/menu_link_account.png new file mode 100644 index 000000000..448f37100 Binary files /dev/null and b/res/drawable-xhdpi/menu_link_account.png differ diff --git a/res/drawable-xhdpi/menu_options.png b/res/drawable-xhdpi/menu_options.png new file mode 100644 index 000000000..3a1c7800f Binary files /dev/null and b/res/drawable-xhdpi/menu_options.png differ diff --git a/res/drawable-xhdpi/menu_recordings.png b/res/drawable-xhdpi/menu_recordings.png new file mode 100644 index 000000000..3bef81d13 Binary files /dev/null and b/res/drawable-xhdpi/menu_recordings.png differ diff --git a/res/drawable-xhdpi/options_rec_default.png b/res/drawable-xhdpi/options_rec_default.png new file mode 100644 index 000000000..075c09314 Binary files /dev/null and b/res/drawable-xhdpi/options_rec_default.png differ diff --git a/res/drawable-xhdpi/options_rec_selected.png b/res/drawable-xhdpi/options_rec_selected.png new file mode 100644 index 000000000..0ef1ca322 Binary files /dev/null and b/res/drawable-xhdpi/options_rec_selected.png differ diff --git a/res/drawable-xhdpi/recording.png b/res/drawable-xhdpi/recording.png new file mode 100644 index 000000000..7f1e07ad3 Binary files /dev/null and b/res/drawable-xhdpi/recording.png differ diff --git a/res/drawable-xhdpi/security_1_button.png b/res/drawable-xhdpi/security_1_button.png new file mode 100644 index 000000000..25942adc8 Binary files /dev/null and b/res/drawable-xhdpi/security_1_button.png differ diff --git a/res/drawable-xhdpi/security_1_indicator.png b/res/drawable-xhdpi/security_1_indicator.png new file mode 100644 index 000000000..0aa4a2e04 Binary files /dev/null and b/res/drawable-xhdpi/security_1_indicator.png differ diff --git a/res/drawable-xhdpi/security_2_authentification.png b/res/drawable-xhdpi/security_2_authentification.png new file mode 100644 index 000000000..213f23fc4 Binary files /dev/null and b/res/drawable-xhdpi/security_2_authentification.png differ diff --git a/res/drawable-xhdpi/security_2_button.png b/res/drawable-xhdpi/security_2_button.png new file mode 100644 index 000000000..d56769b14 Binary files /dev/null and b/res/drawable-xhdpi/security_2_button.png differ diff --git a/res/drawable-xhdpi/security_2_indicator.png b/res/drawable-xhdpi/security_2_indicator.png new file mode 100644 index 000000000..910e3d124 Binary files /dev/null and b/res/drawable-xhdpi/security_2_indicator.png differ diff --git a/res/drawable-xhdpi/security_alert_authentification.png b/res/drawable-xhdpi/security_alert_authentification.png new file mode 100644 index 000000000..9821c2a33 Binary files /dev/null and b/res/drawable-xhdpi/security_alert_authentification.png differ diff --git a/res/drawable-xhdpi/security_alert_button.png b/res/drawable-xhdpi/security_alert_button.png new file mode 100644 index 000000000..a75123692 Binary files /dev/null and b/res/drawable-xhdpi/security_alert_button.png differ diff --git a/res/drawable-xhdpi/security_alert_indicator.png b/res/drawable-xhdpi/security_alert_indicator.png new file mode 100644 index 000000000..54a340667 Binary files /dev/null and b/res/drawable-xhdpi/security_alert_indicator.png differ diff --git a/res/drawable-xhdpi/security_indicator.png b/res/drawable-xhdpi/security_indicator.png new file mode 100644 index 000000000..05cdab3b5 Binary files /dev/null and b/res/drawable-xhdpi/security_indicator.png differ diff --git a/res/drawable-xhdpi/security_toogle_icon_green.png b/res/drawable-xhdpi/security_toogle_icon_green.png new file mode 100644 index 000000000..368e30c79 Binary files /dev/null and b/res/drawable-xhdpi/security_toogle_icon_green.png differ diff --git a/res/drawable-xhdpi/security_toogle_icon_grey.png b/res/drawable-xhdpi/security_toogle_icon_grey.png new file mode 100644 index 000000000..c77235794 Binary files /dev/null and b/res/drawable-xhdpi/security_toogle_icon_grey.png differ diff --git a/res/drawable/security_switch_thumb.xml b/res/drawable/security_switch_thumb.xml new file mode 100644 index 000000000..3cfa94fb6 --- /dev/null +++ b/res/drawable/security_switch_thumb.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/res/drawable/security_switch_track.xml b/res/drawable/security_switch_track.xml new file mode 100644 index 000000000..943b363d1 --- /dev/null +++ b/res/drawable/security_switch_track.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/res/layout/chat_create.xml b/res/layout/chat_create.xml index bb6840efa..ff2c11069 100644 --- a/res/layout/chat_create.xml +++ b/res/layout/chat_create.xml @@ -22,16 +22,52 @@ android:layout_width="0dp" android:layout_height="match_parent" android:layout_gravity="left" - android:layout_weight="0.2" + android:layout_weight="1" android:background="@drawable/toolbar_button" android:contentDescription="@string/content_description_back" android:padding="18dp" android:src="@drawable/back"/> - + android:layout_weight="2" + android:orientation="horizontal" + android:layout_marginLeft="5dp" + android:layout_marginRight="5dp" + android:gravity="center"> + + + + + + + + + + + android:layout_weight="1"> diff --git a/res/layout/chatlist.xml b/res/layout/chatlist.xml index 82ec2e2dc..bee0767ec 100644 --- a/res/layout/chatlist.xml +++ b/res/layout/chatlist.xml @@ -18,7 +18,17 @@ + + + android:layout_weight="0.2"/> - + + + + + + diff --git a/res/values/color.xml b/res/values/color.xml index e0b31ba31..c200eea54 100644 --- a/res/values/color.xml +++ b/res/values/color.xml @@ -13,6 +13,9 @@ #3eb5c0 #96c11f #FF8000 + #96c11f + #c2c2c2 + #ffffff #00000000 diff --git a/src/android/org/linphone/activities/LinphoneActivity.java b/src/android/org/linphone/activities/LinphoneActivity.java index ad5c7d026..2578345ec 100644 --- a/src/android/org/linphone/activities/LinphoneActivity.java +++ b/src/android/org/linphone/activities/LinphoneActivity.java @@ -683,7 +683,7 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick } } - public void goToChatCreator(String address, ArrayList selectedContacts, String subject, boolean isGoBack, Bundle shareInfos) { + public void goToChatCreator(String address, ArrayList selectedContacts, String subject, boolean isGoBack, Bundle shareInfos, boolean createGroupChat) { if (currentFragment == FragmentsAvailable.INFO_GROUP_CHAT && isGoBack) { getFragmentManager().popBackStackImmediate(); getFragmentManager().popBackStackImmediate(); @@ -692,6 +692,7 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick extras.putSerializable("selectedContacts", selectedContacts); extras.putString("subject", subject); extras.putString("groupChatRoomAddress", address); + extras.putBoolean("createGroupChatRoom", createGroupChat); if (shareInfos != null) { if (shareInfos.getString("fileSharedUri") != null) diff --git a/src/android/org/linphone/chat/ChatCreationFragment.java b/src/android/org/linphone/chat/ChatCreationFragment.java index c8af43400..afe1a5759 100644 --- a/src/android/org/linphone/chat/ChatCreationFragment.java +++ b/src/android/org/linphone/chat/ChatCreationFragment.java @@ -36,6 +36,7 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.RelativeLayout; +import android.widget.Switch; import android.widget.TextView; import org.linphone.LinphoneManager; @@ -67,7 +68,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen private ImageView mAllContactsButton, mLinphoneContactsButton, mClearSearchFieldButton, mBackButton, mNextButton; private boolean mOnlyDisplayLinphoneContacts; private View mAllContactsSelected, mLinphoneContactsSelected; - private RelativeLayout mSearchLayout, mWaitLayout; + private RelativeLayout mSearchLayout, mWaitLayout, mLinphoneContactsToggle, mAllContactsToggle; private EditText mSearchField; private ProgressBar mContactsFetchInProgress; private SearchContactsListAdapter mSearchAdapter; @@ -75,6 +76,9 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen private ChatRoom mChatRoom; private ChatRoomListenerStub mChatRoomCreationListener; private Bundle mShareInfos; + private ImageView mSecurityToggleOff, mSecurityToggleOn; + private Switch mSecurityToggle; + private boolean mCreateGroupChatRoom; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -84,12 +88,15 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen mContactsSelected = new ArrayList<>(); mChatRoomSubject = null; mChatRoomAddress = null; + mCreateGroupChatRoom = false; + if (getArguments() != null) { if (getArguments().getSerializable("selectedContacts") != null) { mContactsSelected = (ArrayList) getArguments().getSerializable("selectedContacts"); } mChatRoomSubject = getArguments().getString("subject"); mChatRoomAddress = getArguments().getString("groupChatRoomAddress"); + mCreateGroupChatRoom = getArguments().getBoolean("createGroupChatRoom", false); } mWaitLayout = view.findViewById(R.id.waitScreen); @@ -122,7 +129,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen mContactsFetchInProgress = view.findViewById(R.id.contactsFetchInProgress); mContactsFetchInProgress.setVisibility(View.VISIBLE); - mSearchAdapter = new SearchContactsListAdapter(null, mContactsFetchInProgress, this); + mSearchAdapter = new SearchContactsListAdapter(null, mContactsFetchInProgress, this, mCreateGroupChatRoom == false); mSearchField = view.findViewById(R.id.searchField); mSearchField.addTextChangedListener(new TextWatcher() { @@ -144,6 +151,25 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen } }); + mLinphoneContactsToggle = view.findViewById(R.id.layout_linphone_contacts); + mAllContactsToggle = view.findViewById(R.id.layout_all_contacts); + + mSecurityToggle = view.findViewById(R.id.security_toogle); + mSecurityToggleOn = view.findViewById(R.id.security_toogle_on); + mSecurityToggleOff = view.findViewById(R.id.security_toogle_off); + mSecurityToggleOn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + mSecurityToggle.setChecked(true); + } + }); + mSecurityToggleOff.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + mSecurityToggle.setChecked(false); + } + }); + LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity().getApplicationContext()); mContactsList.setAdapter(mSearchAdapter); @@ -269,6 +295,18 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen mLinphoneContactsButton.setEnabled(!mAllContactsButton.isEnabled()); } + if (mCreateGroupChatRoom) { + mLinphoneContactsToggle.setVisibility(View.GONE); + mAllContactsToggle.setVisibility(View.GONE); + mContactsSelectLayout.setVisibility(View.VISIBLE); + mNextButton.setVisibility(View.VISIBLE); + } else { + mLinphoneContactsToggle.setVisibility(View.VISIBLE); + mAllContactsToggle.setVisibility(View.VISIBLE); + mContactsSelectLayout.setVisibility(View.GONE); + mNextButton.setVisibility(View.GONE); + } + mContactsSelectedLayout.removeAllViews(); if (mContactsSelected.size() > 0) { mSearchAdapter.setContactsSelectedList(mContactsSelected); @@ -440,7 +478,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen ContactAddress ca = mSearchAdapter.getContacts().get(position); Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); ProxyConfig lpc = lc.getDefaultProxyConfig(); - if (lpc == null || lpc.getConferenceFactoryUri() == null) { + if (lpc == null || lpc.getConferenceFactoryUri() == null || mCreateGroupChatRoom == false) { ChatRoom chatRoom = lc.getChatRoom(ca.getAddress()); LinphoneActivity.instance().goToChat(chatRoom.getPeerAddress().asStringUriOnly(), mShareInfos); } else { diff --git a/src/android/org/linphone/chat/ChatEventsAdapter.java b/src/android/org/linphone/chat/ChatEventsAdapter.java index 155f223fc..c0619d1a5 100644 --- a/src/android/org/linphone/chat/ChatEventsAdapter.java +++ b/src/android/org/linphone/chat/ChatEventsAdapter.java @@ -216,22 +216,22 @@ public class ChatEventsAdapter extends SelectableAdapter { holder.imdmLabel.setTextColor(mContext.getResources().getColor(R.color.colorD));*/ } else if (status == ChatMessage.State.DeliveredToUser) { holder.imdmLayout.setVisibility(View.VISIBLE); - holder.imdmIcon.setImageResource(R.drawable.chat_delivered); + holder.imdmIcon.setImageResource(R.drawable.imdn_received); holder.imdmLabel.setText(R.string.delivered); holder.imdmLabel.setTextColor(mContext.getResources().getColor(R.color.colorD)); } else if (status == ChatMessage.State.Displayed) { holder.imdmLayout.setVisibility(View.VISIBLE); - holder.imdmIcon.setImageResource(R.drawable.chat_read); + holder.imdmIcon.setImageResource(R.drawable.imdn_read); holder.imdmLabel.setText(R.string.displayed); holder.imdmLabel.setTextColor(mContext.getResources().getColor(R.color.colorK)); } else if (status == ChatMessage.State.NotDelivered) { holder.imdmLayout.setVisibility(View.VISIBLE); - holder.imdmIcon.setImageResource(R.drawable.chat_error); + holder.imdmIcon.setImageResource(R.drawable.imdn_error); holder.imdmLabel.setText(R.string.error); holder.imdmLabel.setTextColor(mContext.getResources().getColor(R.color.colorI)); } else if (status == ChatMessage.State.FileTransferError) { holder.imdmLayout.setVisibility(View.VISIBLE); - holder.imdmIcon.setImageResource(R.drawable.chat_error); + holder.imdmIcon.setImageResource(R.drawable.imdn_error); holder.imdmLabel.setText(R.string.file_transfer_error); holder.imdmLabel.setTextColor(mContext.getResources().getColor(R.color.colorI)); } diff --git a/src/android/org/linphone/chat/ChatListFragment.java b/src/android/org/linphone/chat/ChatListFragment.java index e9db9f8b6..4d833c78f 100644 --- a/src/android/org/linphone/chat/ChatListFragment.java +++ b/src/android/org/linphone/chat/ChatListFragment.java @@ -55,7 +55,7 @@ import static org.linphone.fragments.FragmentsAvailable.CHAT_LIST; public class ChatListFragment extends Fragment implements ContactsUpdatedListener, ChatRoomViewHolder.ClickListener, SelectableHelper.DeleteListener { private RecyclerView mChatRoomsList; - private ImageView mNewDiscussionButton, mBackToCallButton; + private ImageView mNewDiscussionButton, mNewGroupDiscussionButton, mBackToCallButton; private ChatRoomsAdapter mChatRoomsAdapter; private CoreListenerStub mListener; private RelativeLayout mWaitLayout; @@ -77,6 +77,7 @@ public class ChatListFragment extends Fragment implements ContactsUpdatedListene mChatRoomsList = view.findViewById(R.id.chatList); mWaitLayout = view.findViewById(R.id.waitScreen); mNewDiscussionButton = view.findViewById(R.id.new_discussion); + mNewGroupDiscussionButton = view.findViewById(R.id.new_group_discussion); mBackToCallButton = view.findViewById(R.id.back_in_call); mSelectionHelper = new SelectableHelper(view, this); @@ -99,7 +100,14 @@ public class ChatListFragment extends Fragment implements ContactsUpdatedListene mNewDiscussionButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - LinphoneActivity.instance().goToChatCreator(null, null, null, false, null); + LinphoneActivity.instance().goToChatCreator(null, null, null, false, null, false); + } + }); + + mNewGroupDiscussionButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + LinphoneActivity.instance().goToChatCreator(null, null, null, false, null, true); } }); diff --git a/src/android/org/linphone/chat/GroupInfoFragment.java b/src/android/org/linphone/chat/GroupInfoFragment.java index 49b2acea9..4f40eba58 100644 --- a/src/android/org/linphone/chat/GroupInfoFragment.java +++ b/src/android/org/linphone/chat/GroupInfoFragment.java @@ -160,7 +160,7 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener { getFragmentManager().popBackStack(); } } else { - LinphoneActivity.instance().goToChatCreator(null, mParticipants, null, true, mShareInfos); + LinphoneActivity.instance().goToChatCreator(null, mParticipants, null, true, mShareInfos, true); } } }); @@ -205,7 +205,7 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener { @Override public void onClick(View view) { if (mIsEditionEnabled) { - LinphoneActivity.instance().goToChatCreator(mGroupChatRoomAddress != null ? mGroupChatRoomAddress.asString() : null, mParticipants, mSubject, !mIsAlreadyCreatedGroup, null); + LinphoneActivity.instance().goToChatCreator(mGroupChatRoomAddress != null ? mGroupChatRoomAddress.asString() : null, mParticipants, mSubject, !mIsAlreadyCreatedGroup, null, true); } } }); @@ -213,7 +213,7 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener { mAddParticipantsButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - LinphoneActivity.instance().goToChatCreator(mGroupChatRoomAddress != null ? mGroupChatRoomAddress.asString() : null, mParticipants, mSubject, !mIsAlreadyCreatedGroup, null); + LinphoneActivity.instance().goToChatCreator(mGroupChatRoomAddress != null ? mGroupChatRoomAddress.asString() : null, mParticipants, mSubject, !mIsAlreadyCreatedGroup, null, true); } }); diff --git a/src/android/org/linphone/contacts/SearchContactsListAdapter.java b/src/android/org/linphone/contacts/SearchContactsListAdapter.java index 8e8a42471..406a75b62 100644 --- a/src/android/org/linphone/contacts/SearchContactsListAdapter.java +++ b/src/android/org/linphone/contacts/SearchContactsListAdapter.java @@ -85,6 +85,7 @@ public class SearchContactsListAdapter extends RecyclerView.Adapter getContacts() { return contacts; @@ -98,7 +99,8 @@ public class SearchContactsListAdapter extends RecyclerView.Adapter contactsList, ProgressBar pB, ViewHolder.ClickListener clickListener) { + public SearchContactsListAdapter(List contactsList, ProgressBar pB, ViewHolder.ClickListener clickListener, boolean hideSelectionMark) { + mHideSelectionMark = hideSelectionMark; mListener = clickListener; progressBar = pB; setContactsSelectedList(null); @@ -158,6 +160,9 @@ public class SearchContactsListAdapter extends RecyclerView.Adapter