Sfoglia il codice sorgente

Merge pull request #360 from nextcloud/contacts-new-conversation-rework

UI rework
Mario Đanić 6 anni fa
parent
commit
adfb50aea8
100 ha cambiato i file con 944 aggiunte e 1781 eliminazioni
  1. 4 2
      app/build.gradle
  2. 3 1
      app/src/main/java/com/nextcloud/talk/activities/BaseActivity.java
  3. 1 1
      app/src/main/java/com/nextcloud/talk/activities/MagicCallActivity.java
  4. 3 3
      app/src/main/java/com/nextcloud/talk/activities/MainActivity.java
  5. 2 2
      app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.java
  6. 2 2
      app/src/main/java/com/nextcloud/talk/adapters/messages/MagicOutcomingTextMessageViewHolder.java
  7. 2 2
      app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.java
  8. 1 1
      app/src/main/java/com/nextcloud/talk/controllers/CallController.java
  9. 19 21
      app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java
  10. 27 28
      app/src/main/java/com/nextcloud/talk/controllers/ChatController.java
  11. 67 95
      app/src/main/java/com/nextcloud/talk/controllers/ContactsController.java
  12. 1 8
      app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.java
  13. 59 54
      app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java
  14. 0 76
      app/src/main/java/com/nextcloud/talk/controllers/MagicBottomNavigationController.java
  15. 0 9
      app/src/main/java/com/nextcloud/talk/controllers/RingtoneSelectionController.java
  16. 4 3
      app/src/main/java/com/nextcloud/talk/controllers/SettingsController.java
  17. 0 7
      app/src/main/java/com/nextcloud/talk/controllers/SwitchAccountController.java
  18. 17 7
      app/src/main/java/com/nextcloud/talk/controllers/base/BaseController.java
  19. 3 3
      app/src/main/java/com/nextcloud/talk/controllers/base/ButterKnifeController.java
  20. 0 320
      app/src/main/java/com/nextcloud/talk/controllers/base/bottomnavigation/BottomNavigationController.java
  21. 0 87
      app/src/main/java/com/nextcloud/talk/controllers/base/bottomnavigation/BottomNavigationMenuItem.java
  22. 2 24
      app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/CallMenuController.java
  23. 5 4
      app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/EntryMenuController.java
  24. 38 45
      app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java
  25. 1 0
      app/src/main/java/com/nextcloud/talk/interfaces/ClosedInterface.java
  26. 1 1
      app/src/main/java/com/nextcloud/talk/jobs/NotificationWorker.java
  27. 2 1
      app/src/main/java/com/nextcloud/talk/models/RingtoneSettings.java
  28. 1 1
      app/src/main/java/com/nextcloud/talk/models/json/rooms/Conversation.java
  29. 1 1
      app/src/main/java/com/nextcloud/talk/models/json/websocket/BaseWebSocketMessage.java
  30. 5 1
      app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java
  31. 3 3
      app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.java
  32. 73 0
      app/src/main/java/com/nextcloud/talk/utils/FABAwareScrollingViewBehavior.java
  33. 2 2
      app/src/main/java/com/nextcloud/talk/utils/KeyboardUtils.java
  34. 5 2
      app/src/main/java/com/nextcloud/talk/utils/ssl/SSLSocketFactoryCompat.kt
  35. 11 13
      app/src/main/java/com/nextcloud/talk/webrtc/MagicProximitySensor.java
  36. 2 1
      app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java
  37. 0 7
      app/src/main/res/drawable/ic_account_plus_grey600_24dp.xml
  38. 0 25
      app/src/main/res/drawable/ic_chat_white_24dp.xml
  39. 0 25
      app/src/main/res/drawable/ic_info_black_24dp.xml
  40. 0 26
      app/src/main/res/drawable/ic_lock_black_24px.xml
  41. 6 37
      app/src/main/res/drawable/ic_logo.xml
  42. 0 37
      app/src/main/res/drawable/ic_logo_blue.xml
  43. 0 25
      app/src/main/res/drawable/ic_notifications_black_24dp.xml
  44. 0 25
      app/src/main/res/drawable/ic_notifications_white_24dp.xml
  45. 0 29
      app/src/main/res/drawable/ic_person_black_24dp.xml
  46. 0 26
      app/src/main/res/drawable/ic_public_white_24px.xml
  47. 2 2
      app/src/main/res/drawable/ic_settings_white_24dp.xml
  48. 0 25
      app/src/main/res/drawable/ic_videocam_black_24dp.xml
  49. 7 8
      app/src/main/res/layout/activity_magic_call.xml
  50. 6 8
      app/src/main/res/layout/activity_main.xml
  51. 6 8
      app/src/main/res/layout/bottom_sheet.xml
  52. 15 16
      app/src/main/res/layout/call_item.xml
  53. 13 14
      app/src/main/res/layout/controller_account_verification.xml
  54. 0 24
      app/src/main/res/layout/controller_bottom_navigation.xml
  55. 6 7
      app/src/main/res/layout/controller_call_menu.xml
  56. 20 16
      app/src/main/res/layout/controller_call_notification.xml
  57. 16 17
      app/src/main/res/layout/controller_chat.xml
  58. 5 1
      app/src/main/res/layout/controller_contacts_rv.xml
  59. 26 15
      app/src/main/res/layout/controller_conversations_rv.xml
  60. 13 13
      app/src/main/res/layout/controller_entry_menu.xml
  61. 8 9
      app/src/main/res/layout/controller_generic_rv.xml
  62. 21 20
      app/src/main/res/layout/controller_operations_menu.xml
  63. 16 17
      app/src/main/res/layout/controller_server_selection.xml
  64. 27 33
      app/src/main/res/layout/controller_settings.xml
  65. 8 9
      app/src/main/res/layout/controller_web_view_login.xml
  66. 12 15
      app/src/main/res/layout/conversation_privacy_toggle.xml
  67. 66 0
      app/src/main/res/layout/dialog_standard.xml
  68. 91 0
      app/src/main/res/layout/dialog_standard_vertical.xml
  69. 16 18
      app/src/main/res/layout/fast_scroller.xml
  70. 2 2
      app/src/main/res/layout/item_custom_incoming_preview_message.xml
  71. 8 10
      app/src/main/res/layout/item_custom_incoming_text_message.xml
  72. 1 1
      app/src/main/res/layout/item_custom_outcoming_preview_message.xml
  73. 7 9
      app/src/main/res/layout/item_custom_outcoming_text_message.xml
  74. 9 10
      app/src/main/res/layout/item_system_message.xml
  75. 20 17
      app/src/main/res/layout/join_conversation_via_link.xml
  76. 6 6
      app/src/main/res/layout/library_fast_scroller_layout.xml
  77. 2 4
      app/src/main/res/layout/notification_settings_item.xml
  78. 10 11
      app/src/main/res/layout/rv_item_app.xml
  79. 9 10
      app/src/main/res/layout/rv_item_contact.xml
  80. 14 16
      app/src/main/res/layout/rv_item_conversation.xml
  81. 16 18
      app/src/main/res/layout/rv_item_conversation_with_last_message.xml
  82. 0 27
      app/src/main/res/layout/rv_item_empty_footer.xml
  83. 10 11
      app/src/main/res/layout/rv_item_mention.xml
  84. 6 7
      app/src/main/res/layout/rv_item_menu.xml
  85. 8 10
      app/src/main/res/layout/rv_item_notification_sound.xml
  86. 4 6
      app/src/main/res/layout/rv_item_progress.xml
  87. 9 10
      app/src/main/res/layout/rv_item_title_header.xml
  88. 6 9
      app/src/main/res/layout/view_message_input.xml
  89. 12 5
      app/src/main/res/menu/menu_contacts.xml
  90. 0 8
      app/src/main/res/menu/menu_conversation.xml
  91. 4 9
      app/src/main/res/menu/menu_conversation_plus_filter.xml
  92. 0 19
      app/src/main/res/menu/menu_navigation.xml
  93. 1 14
      app/src/main/res/values-b+en+001/strings.xml
  94. 1 40
      app/src/main/res/values-cs-rCZ/strings.xml
  95. 1 40
      app/src/main/res/values-de/strings.xml
  96. 1 8
      app/src/main/res/values-el/strings.xml
  97. 1 14
      app/src/main/res/values-es-rCL/strings.xml
  98. 1 14
      app/src/main/res/values-es-rCO/strings.xml
  99. 1 14
      app/src/main/res/values-es-rCR/strings.xml
  100. 1 14
      app/src/main/res/values-es-rDO/strings.xml

+ 4 - 2
app/build.gradle

@@ -37,6 +37,8 @@ android {
         lintOptions {
             disable 'InvalidPackage'
             disable 'MissingTranslation'
+            disable "ValidController",
+                    "ValidControllerChangeHandler"
         }
     }
 
@@ -107,7 +109,7 @@ dependencies {
     implementation 'com.google.android.material:material:1.0.0'
     implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha2'
     implementation 'androidx.emoji:emoji-bundled:1.0.0'
-    implementation 'androidx.palette:palette:1.0.0'
+    implementation 'org.michaelevans.colorart:library:0.0.3'
     implementation "android.arch.work:work-runtime:${workVersion}"
     implementation "android.arch.work:work-firebase:${workVersion}"
     androidTestImplementation "android.arch.work:work-testing:${workVersion}"
@@ -179,7 +181,7 @@ dependencies {
 
     implementation 'com.github.wooplr:Spotlight:1.3'
 
-    implementation 'com.github.mario:ChatKit:64c1a2fee1'
+    implementation 'com.github.mario:Chatkit:31d75fd532'
 
     implementation 'com.otaliastudios:autocomplete:1.1.0'
 

+ 3 - 1
app/src/main/java/com/nextcloud/talk/activities/BaseActivity.java

@@ -24,6 +24,7 @@ import android.annotation.SuppressLint;
 import android.content.Context;
 import android.os.Bundle;
 import android.util.Log;
+import android.view.WindowManager;
 import android.webkit.SslErrorHandler;
 
 import com.nextcloud.talk.R;
@@ -57,8 +58,9 @@ public class BaseActivity extends AppCompatActivity {
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
+        getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
         NextcloudTalkApplication.getSharedApplication().getComponentApplication().inject(this);
+        super.onCreate(savedInstanceState);
     }
 
     @Override

+ 1 - 1
app/src/main/java/com/nextcloud/talk/activities/MagicCallActivity.java

@@ -74,7 +74,7 @@ public class MagicCallActivity extends BaseActivity {
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        NextcloudTalkApplication.getSharedApplication().getComponentApplication().inject (this);
+        NextcloudTalkApplication.getSharedApplication().getComponentApplication().inject(this);
 
         requestWindowFeature(Window.FEATURE_NO_TITLE);
         getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN |

+ 3 - 3
app/src/main/java/com/nextcloud/talk/activities/MainActivity.java

@@ -32,7 +32,7 @@ import com.nextcloud.talk.R;
 import com.nextcloud.talk.application.NextcloudTalkApplication;
 import com.nextcloud.talk.controllers.CallNotificationController;
 import com.nextcloud.talk.controllers.ChatController;
-import com.nextcloud.talk.controllers.MagicBottomNavigationController;
+import com.nextcloud.talk.controllers.ConversationsListController;
 import com.nextcloud.talk.controllers.ServerSelectionController;
 import com.nextcloud.talk.controllers.base.providers.ActionBarProvider;
 import com.nextcloud.talk.utils.bundle.BundleKeys;
@@ -94,7 +94,7 @@ public final class MainActivity extends BaseActivity implements ActionBarProvide
 
         if (getIntent().hasExtra(BundleKeys.KEY_FROM_NOTIFICATION_START_CALL)) {
             if (!router.hasRootController()) {
-                router.setRoot(RouterTransaction.with(new MagicBottomNavigationController())
+                router.setRoot(RouterTransaction.with(new ConversationsListController())
                         .pushChangeHandler(new HorizontalChangeHandler())
                         .popChangeHandler(new HorizontalChangeHandler()));
             }
@@ -102,7 +102,7 @@ public final class MainActivity extends BaseActivity implements ActionBarProvide
         } else if (!router.hasRootController()) {
             if (hasDb) {
                 if (userUtils.anyUserExists()) {
-                    router.setRoot(RouterTransaction.with(new MagicBottomNavigationController())
+                    router.setRoot(RouterTransaction.with(new ConversationsListController())
                             .pushChangeHandler(new HorizontalChangeHandler())
                             .popChangeHandler(new HorizontalChangeHandler()));
                 } else {

+ 2 - 2
app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.java

@@ -106,14 +106,14 @@ public class MagicIncomingTextMessageViewHolder
         Resources resources = NextcloudTalkApplication.getSharedApplication().getResources();
         if (message.isGrouped()) {
             messageUserAvatarView.setVisibility(View.INVISIBLE);
-            Drawable bubbleDrawable =  DisplayUtils.getMessageSelector(resources.getColor(R.color.white_two),
+            Drawable bubbleDrawable = DisplayUtils.getMessageSelector(resources.getColor(R.color.white_two),
                     resources.getColor(R.color.transparent),
                     resources.getColor(R.color.white_two), R.drawable.shape_grouped_incoming_message);
             ViewCompat.setBackground(bubble, bubbleDrawable);
             messageAuthor.setVisibility(View.GONE);
         } else {
             messageUserAvatarView.setVisibility(View.VISIBLE);
-            Drawable bubbleDrawable =  DisplayUtils.getMessageSelector(resources.getColor(R.color.white_two),
+            Drawable bubbleDrawable = DisplayUtils.getMessageSelector(resources.getColor(R.color.white_two),
                     resources.getColor(R.color.transparent),
                     resources.getColor(R.color.white_two), R.drawable.shape_incoming_message);
             ViewCompat.setBackground(bubble, bubbleDrawable);

+ 2 - 2
app/src/main/java/com/nextcloud/talk/adapters/messages/MagicOutcomingTextMessageViewHolder.java

@@ -116,12 +116,12 @@ public class MagicOutcomingTextMessageViewHolder extends MessageHolders.Outcomin
 
         Resources resources = NextcloudTalkApplication.getSharedApplication().getResources();
         if (message.isGrouped) {
-            Drawable bubbleDrawable =  DisplayUtils.getMessageSelector(resources.getColor(R.color.colorPrimary),
+            Drawable bubbleDrawable = DisplayUtils.getMessageSelector(resources.getColor(R.color.colorPrimary),
                     resources.getColor(R.color.transparent),
                     resources.getColor(R.color.colorPrimary), R.drawable.shape_grouped_outcoming_message);
             ViewCompat.setBackground(bubble, bubbleDrawable);
         } else {
-            Drawable bubbleDrawable =  DisplayUtils.getMessageSelector(resources.getColor(R.color.colorPrimary),
+            Drawable bubbleDrawable = DisplayUtils.getMessageSelector(resources.getColor(R.color.colorPrimary),
                     resources.getColor(R.color.transparent),
                     resources.getColor(R.color.colorPrimary), R.drawable.shape_outcoming_message);
             ViewCompat.setBackground(bubble, bubbleDrawable);

+ 2 - 2
app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.java

@@ -407,7 +407,7 @@ public class AccountVerificationController extends BaseController {
             getActivity().runOnUiThread(() -> {
                 if (userUtils.getUsers().size() == 1) {
                     getRouter().setRoot(RouterTransaction.with(new
-                            MagicBottomNavigationController())
+                            ConversationsListController())
                             .pushChangeHandler(new HorizontalChangeHandler())
                             .popChangeHandler(new HorizontalChangeHandler()));
                 } else {
@@ -488,7 +488,7 @@ public class AccountVerificationController extends BaseController {
 
                     } else {
                         if (userUtils.anyUserExists()) {
-                            getRouter().setRoot(RouterTransaction.with(new MagicBottomNavigationController())
+                            getRouter().setRoot(RouterTransaction.with(new ConversationsListController())
                                     .pushChangeHandler(new HorizontalChangeHandler())
                                     .popChangeHandler(new HorizontalChangeHandler()));
                         } else {

+ 1 - 1
app/src/main/java/com/nextcloud/talk/controllers/CallController.java

@@ -1890,7 +1890,7 @@ public class CallController extends BaseController {
     private void gotNick(String sessionOrUserId, String nick, boolean isFromAnEvent) {
         if (isFromAnEvent && hasExternalSignalingServer) {
             // get session based on userId
-            sessionOrUserId =  webSocketClient.getSessionForUserId(sessionOrUserId);
+            sessionOrUserId = webSocketClient.getSessionForUserId(sessionOrUserId);
         }
 
         if (relativeLayout != null) {

+ 19 - 21
app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java

@@ -25,6 +25,7 @@ import android.content.Context;
 import android.graphics.Bitmap;
 import android.graphics.Color;
 import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.ColorDrawable;
 import android.media.AudioAttributes;
 import android.media.MediaPlayer;
 import android.net.Uri;
@@ -79,6 +80,7 @@ import com.nextcloud.talk.utils.singletons.AvatarStatusCodeHolder;
 import org.greenrobot.eventbus.EventBus;
 import org.greenrobot.eventbus.Subscribe;
 import org.greenrobot.eventbus.ThreadMode;
+import org.michaelevans.colorart.library.ColorArt;
 import org.parceler.Parcels;
 
 import java.io.IOException;
@@ -89,7 +91,6 @@ import javax.inject.Inject;
 
 import androidx.annotation.NonNull;
 import androidx.constraintlayout.widget.ConstraintLayout;
-import androidx.palette.graphics.Palette;
 import autodagger.AutoInjector;
 import butterknife.BindView;
 import butterknife.OnClick;
@@ -128,8 +129,8 @@ public class CallNotificationController extends BaseController {
     @BindView(R.id.callAnswerCameraView)
     MagicFlipView callAnswerCameraView;
 
-    @BindView(R.id.constraintLayout)
-    ConstraintLayout constraintLayout;
+    @BindView(R.id.backgroundImageView)
+    ImageView backgroundImageView;
 
     @BindView(R.id.incomingTextRelativeLayout)
     RelativeLayout incomingTextRelativeLayout;
@@ -436,6 +437,11 @@ public class CallNotificationController extends BaseController {
                                             (getActivity()).getBitmapPool(), resource, avatarSize, avatarSize));
                                 }
 
+                                if (getResources() != null) {
+                                    incomingTextRelativeLayout.setBackground(getResources().getDrawable(R.drawable
+                                            .incoming_gradient));
+                                }
+
                                 if (AvatarStatusCodeHolder.getInstance().getStatusCode() == 200 &&
                                         userBeingCalled.hasSpreedCapabilityWithName("no-ping")) {
                                     final Allocation input = Allocation.createFromBitmap(renderScript, resource);
@@ -447,25 +453,17 @@ public class CallNotificationController extends BaseController {
                                     script.forEach(output);
                                     output.copyTo(resource);
 
-                                    if (getResources() != null) {
-                                        incomingTextRelativeLayout.setBackground(getResources().getDrawable(R.drawable
-                                                .incoming_gradient));
-                                        constraintLayout.setBackground(new BitmapDrawable(resource));
-                                    }
+                                    backgroundImageView.setImageDrawable(new BitmapDrawable(resource));
                                 } else if (AvatarStatusCodeHolder.getInstance().getStatusCode() == 201) {
-                                    Palette palette = Palette.from(resource).generate();
-                                    if (getResources() != null) {
-                                        int color = palette.getDominantColor(getResources().getColor(R.color.grey950));
-
-                                        if (color != getResources().getColor(R.color.grey950)) {
-                                            float[] hsv = new float[3];
-                                            Color.colorToHSV(color, hsv);
-                                            hsv[2] *= 0.75f;
-                                            color = Color.HSVToColor(hsv);
-                                        }
-
-                                        constraintLayout.setBackgroundColor(color);
-                                    }
+                                    ColorArt colorArt = new ColorArt(resource);
+                                    int color = colorArt.getBackgroundColor();
+
+                                    float[] hsv = new float[3];
+                                    Color.colorToHSV(color, hsv);
+                                    hsv[2] *= 0.75f;
+                                    color = Color.HSVToColor(hsv);
+
+                                    backgroundImageView.setImageDrawable(new ColorDrawable(color));
                                 }
                             }
                         });

+ 27 - 28
app/src/main/java/com/nextcloud/talk/controllers/ChatController.java

@@ -50,7 +50,7 @@ import android.widget.TextView;
 
 import com.amulyakhare.textdrawable.TextDrawable;
 import com.bluelinelabs.conductor.RouterTransaction;
-import com.bluelinelabs.conductor.changehandler.VerticalChangeHandler;
+import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler;
 import com.bumptech.glide.load.DataSource;
 import com.bumptech.glide.load.engine.DiskCacheStrategy;
 import com.bumptech.glide.load.engine.GlideException;
@@ -442,6 +442,18 @@ public class ChatController extends BaseController implements MessagesListAdapte
         messageInputView.getButton().setContentDescription(getResources()
                 .getString(R.string.nc_description_send_message_button));
 
+        if (conversationUser.hasSpreedCapabilityWithName("mention-flag") && getActivity() != null) {
+            getActivity().findViewById(R.id.toolbar).setOnClickListener(v -> {
+                Bundle bundle = new Bundle();
+                bundle.putParcelable(BundleKeys.KEY_USER_ENTITY, Parcels.wrap(conversationUser));
+                bundle.putString(BundleKeys.KEY_BASE_URL, baseUrl);
+                bundle.putString(BundleKeys.KEY_ROOM_TOKEN, roomToken);
+                getRouter().pushController((RouterTransaction.with(new ConversationInfoController(bundle))
+                        .pushChangeHandler(new HorizontalChangeHandler())
+                        .popChangeHandler(new HorizontalChangeHandler())));
+            });
+        }
+
         if (adapterWasNull) {
             // we're starting
             if (TextUtils.isEmpty(roomToken)) {
@@ -476,9 +488,6 @@ public class ChatController extends BaseController implements MessagesListAdapte
     @Override
     protected void onAttach(@NonNull View view) {
         super.onAttach(view);
-        if (getActionBar() != null) {
-            getActionBar().setDisplayHomeAsUpEnabled(true);
-        }
 
         ApplicationWideCurrentRoomHolder.getInstance().setCurrentRoomId(roomId);
         ApplicationWideCurrentRoomHolder.getInstance().setCurrentRoomToken(roomId);
@@ -494,10 +503,11 @@ public class ChatController extends BaseController implements MessagesListAdapte
             new KeyboardUtils(getActivity(), getView(), false);
         }
 
-        if (inChat) {
-            NotificationUtils.cancelExistingNotifications(getApplicationContext(), conversationUser);
+        NotificationUtils.cancelExistingNotifications(getApplicationContext(), conversationUser);
 
+        if (inChat) {
             if (wasDetached & conversationUser.hasSpreedCapabilityWithName("no-ping")) {
+                wasDetached = false;
                 joinRoomWithPassword();
             }
         }
@@ -506,8 +516,10 @@ public class ChatController extends BaseController implements MessagesListAdapte
     @Override
     protected void onDetach(@NonNull View view) {
         super.onDetach(view);
-        if (conversationUser.hasSpreedCapabilityWithName("no-ping")) {
+        if (conversationUser.hasSpreedCapabilityWithName("no-ping")
+                && getActivity() != null && !getActivity().isChangingConfigurations()) {
             wasDetached = true;
+            leaveRoom();
         }
     }
 
@@ -519,10 +531,14 @@ public class ChatController extends BaseController implements MessagesListAdapte
     @Override
     public void onDestroy() {
         super.onDestroy();
+
+        if (getActivity() != null) {
+            getActivity().findViewById(R.id.toolbar).setOnClickListener(null);
+        }
+
         adapter = null;
         inChat = false;
         ApplicationWideCurrentRoomHolder.getInstance().clear();
-        leaveRoom();
     }
 
     private void dispose() {
@@ -574,8 +590,6 @@ public class ChatController extends BaseController implements MessagesListAdapte
 
     private void joinRoomWithPassword() {
 
-        wasDetached = false;
-
         if (currentCall == null) {
             ncApi.joinRoom(credentials, ApiUtils.getUrlForSettingMyselfAsActiveParticipant(baseUrl, roomToken), roomPassword)
                     .subscribeOn(Schedulers.newThread())
@@ -639,8 +653,8 @@ public class ChatController extends BaseController implements MessagesListAdapte
                     @Override
                     public void onNext(GenericOverall genericOverall) {
                         dispose();
-                        if (!isDestroyed()) {
-                            getRouter().popToRoot();
+                        if (!isDestroyed() && !isBeingDestroyed() && !wasDetached) {
+                            getRouter().popCurrentController();
                         }
                     }
 
@@ -977,12 +991,6 @@ public class ChatController extends BaseController implements MessagesListAdapte
     public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
         super.onCreateOptionsMenu(menu, inflater);
         inflater.inflate(R.menu.menu_conversation, menu);
-
-        if (conversationUser.hasSpreedCapabilityWithName("mention-flag")) {
-            menu.findItem(R.id.nc_conversation_info).setVisible(true);
-        } else {
-            menu.findItem(R.id.nc_conversation_info).setVisible(false);
-        }
     }
 
 
@@ -990,7 +998,7 @@ public class ChatController extends BaseController implements MessagesListAdapte
     public boolean onOptionsItemSelected(@NonNull MenuItem item) {
         switch (item.getItemId()) {
             case android.R.id.home:
-                onDestroy();
+                getRouter().popCurrentController();
                 return true;
             case R.id.conversation_video_call:
                 startACall(false);
@@ -998,15 +1006,6 @@ public class ChatController extends BaseController implements MessagesListAdapte
             case R.id.conversation_voice_call:
                 startACall(true);
                 return true;
-            case R.id.nc_conversation_info:
-                Bundle bundle = new Bundle();
-                bundle.putParcelable(BundleKeys.KEY_USER_ENTITY, Parcels.wrap(conversationUser));
-                bundle.putString(BundleKeys.KEY_BASE_URL, baseUrl);
-                bundle.putString(BundleKeys.KEY_ROOM_TOKEN, roomToken);
-                getRouter().pushController((RouterTransaction.with(new ConversationInfoController(bundle))
-                        .pushChangeHandler(new VerticalChangeHandler())
-                        .popChangeHandler(new VerticalChangeHandler())));
-                return true;
             default:
                 return super.onOptionsItemSelected(item);
         }

+ 67 - 95
app/src/main/java/com/nextcloud/talk/controllers/ContactsController.java

@@ -34,7 +34,6 @@ import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
-import android.view.ViewTreeObserver;
 import android.view.inputmethod.EditorInfo;
 import android.widget.ProgressBar;
 import android.widget.RelativeLayout;
@@ -43,7 +42,6 @@ import com.bluelinelabs.conductor.RouterTransaction;
 import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler;
 import com.bluelinelabs.conductor.changehandler.VerticalChangeHandler;
 import com.bluelinelabs.logansquare.LoganSquare;
-import com.google.android.material.bottomnavigation.BottomNavigationView;
 import com.kennyc.bottomsheet.BottomSheet;
 import com.nextcloud.talk.R;
 import com.nextcloud.talk.activities.MagicCallActivity;
@@ -53,6 +51,7 @@ import com.nextcloud.talk.adapters.items.UserItem;
 import com.nextcloud.talk.api.NcApi;
 import com.nextcloud.talk.application.NextcloudTalkApplication;
 import com.nextcloud.talk.controllers.base.BaseController;
+import com.nextcloud.talk.controllers.bottomsheet.EntryMenuController;
 import com.nextcloud.talk.controllers.bottomsheet.OperationsMenuController;
 import com.nextcloud.talk.events.BottomSheetLockEvent;
 import com.nextcloud.talk.models.RetrofitBucket;
@@ -65,6 +64,7 @@ import com.nextcloud.talk.models.json.rooms.RoomOverall;
 import com.nextcloud.talk.models.json.sharees.Sharee;
 import com.nextcloud.talk.models.json.sharees.ShareesOverall;
 import com.nextcloud.talk.utils.ApiUtils;
+import com.nextcloud.talk.utils.KeyboardUtils;
 import com.nextcloud.talk.utils.bundle.BundleKeys;
 import com.nextcloud.talk.utils.database.user.UserUtils;
 
@@ -137,7 +137,11 @@ public class ContactsController extends BaseController implements SearchView.OnQ
     FastScroller fastScroller;
 
     @BindView(R.id.call_header_layout)
-    RelativeLayout callHeaderLayout;
+    RelativeLayout conversationPrivacyToogleLayout;
+
+    @BindView(R.id.joinConversationViaLinkRelativeLayout)
+    RelativeLayout joinConversationViaLinkLayout;
+
     @BindView(R.id.generic_rv_layout)
     CoordinatorLayout genericRvLayout;
 
@@ -196,12 +200,6 @@ public class ContactsController extends BaseController implements SearchView.OnQ
 
         if (isNewConversationView) {
             toggleNewCallHeaderVisibility(!isPublicCall);
-
-            checkAndHandleDoneMenuItem();
-
-            if (getActionBar() != null) {
-                getActionBar().setDisplayHomeAsUpEnabled(true);
-            }
         }
 
     }
@@ -242,6 +240,7 @@ public class ContactsController extends BaseController implements SearchView.OnQ
             @Override
             public void onChanged() {
                 super.onChanged();
+                checkAndHandleDoneMenuItem();
                 adapter.filterItems();
                 adapter.onLoadMoreComplete(null);
             }
@@ -286,7 +285,7 @@ public class ContactsController extends BaseController implements SearchView.OnQ
                                 bundle.putString(BundleKeys.KEY_CONVERSATION_NAME,
                                         roomOverall.getOcs().getData().getDisplayName());
                                 conversationIntent.putExtras(bundle);
-                                getRouter().pushController((RouterTransaction.with(new ChatController(bundle))
+                                getRouter().replaceTopController((RouterTransaction.with(new ChatController(bundle))
                                         .pushChangeHandler(new HorizontalChangeHandler())
                                         .popChangeHandler(new HorizontalChangeHandler())));
                             } else {
@@ -333,7 +332,7 @@ public class ContactsController extends BaseController implements SearchView.OnQ
             bundle.putStringArrayList(BundleKeys.KEY_INVITED_PARTICIPANTS, userIds);
             bundle.putStringArrayList(BundleKeys.KEY_INVITED_GROUP, groupIds);
             bundle.putInt(BundleKeys.KEY_OPERATION_CODE, 11);
-            prepareAndShowBottomSheetWithBundle(bundle);
+            prepareAndShowBottomSheetWithBundle(bundle, false);
         }
     }
 
@@ -352,46 +351,6 @@ public class ContactsController extends BaseController implements SearchView.OnQ
                 searchView.setOnQueryTextListener(this);
             }
         }
-
-        final View mSearchEditFrame = searchView
-                .findViewById(androidx.appcompat.R.id.search_edit_frame);
-
-        BottomNavigationView bottomNavigationView = null;
-        if (getParentController() != null && getParentController().getView() != null) {
-            bottomNavigationView = getParentController().getView().findViewById(R.id.navigation);
-        }
-
-        Handler handler = new Handler();
-        ViewTreeObserver vto = mSearchEditFrame.getViewTreeObserver();
-        BottomNavigationView finalBottomNavigationView = bottomNavigationView;
-        vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
-            int oldVisibility = -1;
-
-            @Override
-            public void onGlobalLayout() {
-
-                int currentVisibility = mSearchEditFrame.getVisibility();
-
-                if (currentVisibility != oldVisibility) {
-                    if (currentVisibility == View.VISIBLE) {
-                        if (finalBottomNavigationView != null) {
-                            handler.postDelayed(() -> finalBottomNavigationView.setVisibility(View.GONE), 100);
-                        }
-                    } else {
-                        handler.postDelayed(() -> {
-                            if (finalBottomNavigationView != null) {
-                                finalBottomNavigationView.setVisibility(View.VISIBLE);
-                            }
-                            searchItem.setVisible(contactItems.size() > 0);
-                        }, 500);
-                    }
-
-                    oldVisibility = currentVisibility;
-                }
-
-            }
-        });
-
     }
 
     @Override
@@ -411,10 +370,9 @@ public class ContactsController extends BaseController implements SearchView.OnQ
     @Override
     public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
         super.onCreateOptionsMenu(menu, inflater);
-        inflater.inflate(R.menu.menu_conversation_plus_filter, menu);
+        inflater.inflate(R.menu.menu_contacts, menu);
         searchItem = menu.findItem(R.id.action_search);
         doneMenuItem = menu.findItem(R.id.contacts_selection_done);
-        menu.findItem(R.id.action_new_conversation).setVisible(false);
 
         initSearchView();
     }
@@ -423,11 +381,11 @@ public class ContactsController extends BaseController implements SearchView.OnQ
     public void onPrepareOptionsMenu(Menu menu) {
         super.onPrepareOptionsMenu(menu);
         searchItem.setVisible(contactItems.size() > 0);
+        checkAndHandleDoneMenuItem();
         if (adapter.hasFilter()) {
             searchItem.expandActionView();
             searchView.setQuery((CharSequence) adapter.getFilter(String.class), false);
         }
-
     }
 
     private void fetchData(boolean startFromScratch) {
@@ -621,7 +579,7 @@ public class ContactsController extends BaseController implements SearchView.OnQ
                                     secondName = ((GenericTextHeaderItem) o2).getModel();
                                 }
 
-                                if (o1 instanceof  UserItem && o2 instanceof UserItem) {
+                                if (o1 instanceof UserItem && o2 instanceof UserItem) {
                                     if ("groups".equals(((UserItem) o1).getModel().getSource()) && "groups".equals(((UserItem) o2).getModel().getSource())) {
                                         return firstName.compareToIgnoreCase(secondName);
                                     } else if ("groups".equals(((UserItem) o1).getModel().getSource())) {
@@ -649,17 +607,6 @@ public class ContactsController extends BaseController implements SearchView.OnQ
                             if (swipeRefreshLayout != null) {
                                 swipeRefreshLayout.setRefreshing(false);
                             }
-
-                            progressBar.setVisibility(View.GONE);
-                            genericRvLayout.setVisibility(View.VISIBLE);
-                            if (isNewConversationView) {
-                                callHeaderLayout.setVisibility(View.VISIBLE);
-                            }
-
-                            if (isNewConversationView) {
-                                checkAndHandleDoneMenuItem();
-                            }
-
                         }
 
                     }
@@ -674,14 +621,10 @@ public class ContactsController extends BaseController implements SearchView.OnQ
                             HttpException exception = (HttpException) e;
                             switch (exception.code()) {
                                 case 401:
-                                    if (getParentController() != null &&
-                                            getParentController().getRouter() != null) {
-                                        getParentController().getRouter().pushController((RouterTransaction.with
-                                                (new WebViewLoginController(currentUser.getBaseUrl(),
-                                                        true))
-                                                .pushChangeHandler(new VerticalChangeHandler())
-                                                .popChangeHandler(new VerticalChangeHandler())));
-                                    }
+                                    getRouter().pushController((RouterTransaction.with(new WebViewLoginController(currentUser.getBaseUrl(),
+                                            true))
+                                            .pushChangeHandler(new VerticalChangeHandler())
+                                            .popChangeHandler(new VerticalChangeHandler())));
                                     break;
                                 default:
                                     break;
@@ -704,6 +647,7 @@ public class ContactsController extends BaseController implements SearchView.OnQ
                         dispose(contactsQueryDisposable);
                         alreadyFetching = false;
 
+                        disengageProgressBar();
                     }
                 });
 
@@ -730,6 +674,20 @@ public class ContactsController extends BaseController implements SearchView.OnQ
                 return "";
             }
         });
+
+        disengageProgressBar();
+    }
+
+    private void disengageProgressBar() {
+        if (!alreadyFetching) {
+            progressBar.setVisibility(View.GONE);
+            genericRvLayout.setVisibility(View.VISIBLE);
+
+            if (isNewConversationView) {
+                conversationPrivacyToogleLayout.setVisibility(View.VISIBLE);
+                joinConversationViaLinkLayout.setVisibility(View.VISIBLE);
+            }
+        }
     }
 
     private void dispose(@Nullable Disposable disposable) {
@@ -807,10 +765,7 @@ public class ContactsController extends BaseController implements SearchView.OnQ
     private void checkAndHandleDoneMenuItem() {
         if (adapter != null && doneMenuItem != null) {
             if (adapter.getSelectedItemCount() > 0 || isPublicCall) {
-                if (!doneMenuItem.isVisible()) {
-                    doneMenuItem.setVisible(true);
-                }
-
+                doneMenuItem.setVisible(true);
             } else {
                 doneMenuItem.setVisible(false);
             }
@@ -834,28 +789,37 @@ public class ContactsController extends BaseController implements SearchView.OnQ
     }
 
 
-    private void prepareAndShowBottomSheetWithBundle(Bundle bundle) {
+    private void prepareAndShowBottomSheetWithBundle(Bundle bundle, boolean showEntrySheet) {
         if (view == null) {
             view = getActivity().getLayoutInflater().inflate(R.layout.bottom_sheet, null, false);
         }
 
-        getChildRouter((ViewGroup) view).setRoot(
-                RouterTransaction.with(new OperationsMenuController(bundle))
-                        .popChangeHandler(new VerticalChangeHandler())
-                        .pushChangeHandler(new VerticalChangeHandler()));
-
         if (bottomSheet == null) {
             bottomSheet = new BottomSheet.Builder(getActivity()).setView(view).create();
         }
 
-        bottomSheet.setOnCancelListener(dialog -> {
-            if (getActionBar() != null) {
-                getActionBar().setDisplayHomeAsUpEnabled(true);
+        if (showEntrySheet) {
+            getChildRouter((ViewGroup) view).setRoot(
+                    RouterTransaction.with(new EntryMenuController(bundle))
+                            .popChangeHandler(new VerticalChangeHandler())
+                            .pushChangeHandler(new VerticalChangeHandler()));
+        } else {
+            getChildRouter((ViewGroup) view).setRoot(
+                    RouterTransaction.with(new OperationsMenuController(bundle))
+                            .popChangeHandler(new VerticalChangeHandler())
+                            .pushChangeHandler(new VerticalChangeHandler()));
+        }
+
+        bottomSheet.setOnShowListener(dialog -> {
+            if (showEntrySheet) {
+                new KeyboardUtils(getActivity(), bottomSheet.getLayout(), true);
+            } else {
+                eventBus.post(new BottomSheetLockEvent(false, 0,
+                        false, false));
             }
         });
 
-        bottomSheet.setOnShowListener(dialog -> eventBus.post(new BottomSheetLockEvent(false, 0,
-                false, false)));
+        bottomSheet.setOnDismissListener(dialog -> getActionBar().setDisplayHomeAsUpEnabled(getRouter().getBackstackSize() > 1));
 
         bottomSheet.show();
     }
@@ -920,13 +884,12 @@ public class ContactsController extends BaseController implements SearchView.OnQ
                                     if (currentUser.hasSpreedCapabilityWithName("chat-v2")) {
                                         bundle.putString(BundleKeys.KEY_CONVERSATION_NAME,
                                                 roomOverall.getOcs().getData().getDisplayName());
-                                        if (getParentController() != null) {
-                                            getParentController().getRouter().pushController((RouterTransaction.with(new ChatController(bundle))
-                                                    .pushChangeHandler(new HorizontalChangeHandler())
-                                                    .popChangeHandler(new HorizontalChangeHandler())));
-                                        }
+                                        getRouter().replaceTopController((RouterTransaction.with(new ChatController(bundle))
+                                                .pushChangeHandler(new HorizontalChangeHandler())
+                                                .popChangeHandler(new HorizontalChangeHandler())));
                                     } else {
                                         startActivity(conversationIntent);
+                                        new Handler().postDelayed(() -> getRouter().popCurrentController(), 100);
                                     }
                                 }
                             }
@@ -965,6 +928,15 @@ public class ContactsController extends BaseController implements SearchView.OnQ
         return true;
     }
 
+    @Optional
+    @OnClick(R.id.joinConversationViaLinkRelativeLayout)
+    void joinConversationViaLink() {
+        Bundle bundle = new Bundle();
+        bundle.putInt(BundleKeys.KEY_OPERATION_CODE, 10);
+
+        prepareAndShowBottomSheetWithBundle(bundle, true);
+    }
+
     @Optional
     @OnClick(R.id.call_header_layout)
     void toggleCallHeader() {
@@ -995,7 +967,7 @@ public class ContactsController extends BaseController implements SearchView.OnQ
             }
         }
 
-        checkAndHandleDoneMenuItem();
+        adapter.notifyDataSetChanged();
     }
 
     private void toggleNewCallHeaderVisibility(boolean showInitialLayout) {

+ 1 - 8
app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.java

@@ -208,14 +208,6 @@ public class ConversationInfoController extends BaseController {
         adapter.notifyDataSetChanged();
     }
 
-    @Override
-    protected void onAttach(@NonNull View view) {
-        super.onAttach(view);
-        if (getActionBar() != null) {
-            getActionBar().setDisplayHomeAsUpEnabled(true);
-        }
-    }
-
     @Override
     protected String getTitle() {
         return getResources().getString(R.string.nc_conversation_menu_conversation_info);
@@ -248,6 +240,7 @@ public class ConversationInfoController extends BaseController {
                 });
 
     }
+
     private void fetchRoomInfo() {
         ncApi.getRoom(credentials, ApiUtils.getRoom(conversationUser.getBaseUrl(), conversationToken))
                 .subscribeOn(Schedulers.newThread())

+ 59 - 54
app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java

@@ -23,6 +23,8 @@ package com.nextcloud.talk.controllers;
 import android.app.SearchManager;
 import android.content.Context;
 import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.drawable.BitmapDrawable;
 import android.os.Bundle;
 import android.os.Handler;
 import android.text.InputType;
@@ -33,7 +35,6 @@ import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
-import android.view.ViewTreeObserver;
 import android.view.inputmethod.EditorInfo;
 import android.widget.ProgressBar;
 import android.widget.RelativeLayout;
@@ -42,7 +43,13 @@ import com.bluelinelabs.conductor.RouterTransaction;
 import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler;
 import com.bluelinelabs.conductor.changehandler.VerticalChangeHandler;
 import com.bluelinelabs.conductor.internal.NoOpControllerChangeHandler;
-import com.google.android.material.bottomnavigation.BottomNavigationView;
+import com.bumptech.glide.load.model.GlideUrl;
+import com.bumptech.glide.load.model.LazyHeaders;
+import com.bumptech.glide.load.resource.bitmap.CircleCrop;
+import com.bumptech.glide.request.RequestOptions;
+import com.bumptech.glide.request.target.SimpleTarget;
+import com.bumptech.glide.request.transition.Transition;
+import com.google.android.material.floatingactionbutton.FloatingActionButton;
 import com.kennyc.bottomsheet.BottomSheet;
 import com.nextcloud.talk.R;
 import com.nextcloud.talk.activities.MagicCallActivity;
@@ -59,9 +66,11 @@ import com.nextcloud.talk.models.database.UserEntity;
 import com.nextcloud.talk.models.json.participants.Participant;
 import com.nextcloud.talk.models.json.rooms.Conversation;
 import com.nextcloud.talk.utils.ApiUtils;
+import com.nextcloud.talk.utils.DisplayUtils;
 import com.nextcloud.talk.utils.KeyboardUtils;
 import com.nextcloud.talk.utils.bundle.BundleKeys;
 import com.nextcloud.talk.utils.database.user.UserUtils;
+import com.nextcloud.talk.utils.glide.GlideApp;
 
 import org.apache.commons.lang3.builder.CompareToBuilder;
 import org.greenrobot.eventbus.EventBus;
@@ -126,6 +135,9 @@ public class ConversationsListController extends BaseController implements Searc
     @BindView(R.id.fast_scroller)
     FastScroller fastScroller;
 
+    @BindView(R.id.floatingActionButton)
+    FloatingActionButton floatingActionButton;
+
     private UserEntity currentUser;
     private Disposable roomsQueryDisposable;
     private FlexibleAdapter<AbstractFlexibleItem> adapter;
@@ -172,23 +184,41 @@ public class ConversationsListController extends BaseController implements Searc
         prepareViews();
     }
 
+    private void loadUserAvatar(MenuItem menuItem) {
+        if (getActivity() != null) {
+            int avatarSize = (int) DisplayUtils.convertDpToPixel(menuItem.getIcon().getIntrinsicHeight(), getActivity());
+
+            GlideUrl glideUrl = new GlideUrl(ApiUtils.getUrlForAvatarWithNameAndPixels(currentUser.getBaseUrl(),
+                    currentUser.getUserId(), avatarSize), new LazyHeaders.Builder()
+                    .setHeader("Accept", "image/*")
+                    .setHeader("User-Agent", ApiUtils.getUserAgent())
+                    .build());
+
+            GlideApp.with(getActivity())
+                    .asBitmap()
+                    .centerInside()
+                    .override(avatarSize, avatarSize)
+                    .apply(RequestOptions.bitmapTransform(new CircleCrop()))
+                    .load(glideUrl)
+                    .into(new SimpleTarget<Bitmap>() {
+                        @Override
+                        public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
+                            menuItem.setIcon(new BitmapDrawable(resource));
+                        }
+                    });
+        }
+    }
+
     @Override
     protected void onAttach(@NonNull View view) {
         super.onAttach(view);
         eventBus.register(this);
-        if (getActionBar() != null) {
-            getActionBar().setDisplayHomeAsUpEnabled(false);
-        }
 
         currentUser = userUtils.getCurrentUser();
 
         if (currentUser != null) {
             credentials = ApiUtils.getCredentials(currentUser.getUsername(), currentUser.getToken());
-        }
-
-        if (currentUser != null) {
             shouldUseLastMessageLayout = currentUser.hasSpreedCapabilityWithName("last-room-activity");
-
             fetchData(false);
         }
     }
@@ -214,47 +244,15 @@ public class ConversationsListController extends BaseController implements Searc
                 searchView.setOnQueryTextListener(this);
             }
         }
-
-        final View mSearchEditFrame = searchView
-                .findViewById(androidx.appcompat.R.id.search_edit_frame);
-
-        BottomNavigationView bottomNavigationView = getParentController().getView().findViewById(R.id.navigation);
-
-        Handler handler = new Handler();
-        ViewTreeObserver vto = mSearchEditFrame.getViewTreeObserver();
-        vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
-            int oldVisibility = -1;
-
-            @Override
-            public void onGlobalLayout() {
-
-                int currentVisibility = mSearchEditFrame.getVisibility();
-
-                if (currentVisibility != oldVisibility) {
-                    if (currentVisibility == View.VISIBLE) {
-                        handler.postDelayed(() -> bottomNavigationView.setVisibility(View.GONE), 100);
-                    } else {
-                        handler.postDelayed(() -> {
-                            bottomNavigationView.setVisibility(View.VISIBLE);
-                            searchItem.setVisible(callItems.size() > 0);
-                        }, 500);
-                    }
-
-                    oldVisibility = currentVisibility;
-                }
-
-            }
-        });
-
     }
 
     @Override
     public boolean onOptionsItemSelected(@NonNull MenuItem item) {
         switch (item.getItemId()) {
-            case R.id.action_new_conversation:
-                Bundle bundle = new Bundle();
-                bundle.putParcelable(BundleKeys.KEY_MENU_TYPE, Parcels.wrap(CallMenuController.MenuType.NEW_CONVERSATION));
-                prepareAndShowBottomSheetWithBundle(bundle, true);
+            case R.id.action_settings:
+                getRouter().pushController((RouterTransaction.with(new SettingsController())
+                        .pushChangeHandler(new VerticalChangeHandler())
+                        .popChangeHandler(new VerticalChangeHandler())));
                 return true;
             default:
                 return super.onOptionsItemSelected(item);
@@ -278,6 +276,9 @@ public class ConversationsListController extends BaseController implements Searc
             searchItem.expandActionView();
             searchView.setQuery(adapter.getFilter(String.class), false);
         }
+
+        MenuItem menuItem = menu.findItem(R.id.action_settings);
+        loadUserAvatar(menuItem);
     }
 
     private void fetchData(boolean fromBottomSheet) {
@@ -409,14 +410,9 @@ public class ConversationsListController extends BaseController implements Searc
         swipeRefreshLayout.setOnRefreshListener(() -> fetchData(false));
         swipeRefreshLayout.setColorSchemeResources(R.color.colorPrimary);
 
-        emptyLayoutView.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                if (getParentController() != null && getParentController().getView() != null) {
-                    ((BottomNavigationView) getParentController().getView().findViewById(R.id.navigation))
-                            .setSelectedItemId(R.id.navigation_contacts);
-                }
-            }
+        emptyLayoutView.setOnClickListener(v -> showNewConversationsScreen());
+        floatingActionButton.setOnClickListener(v -> {
+            showNewConversationsScreen();
         });
 
         fastScroller.addOnScrollStateChangeListener(this);
@@ -436,6 +432,14 @@ public class ConversationsListController extends BaseController implements Searc
         });
     }
 
+    private void showNewConversationsScreen() {
+        Bundle bundle = new Bundle();
+        bundle.putBoolean(BundleKeys.KEY_NEW_CONVERSATION, true);
+        getRouter().pushController((RouterTransaction.with(new ContactsController(bundle))
+                .pushChangeHandler(new HorizontalChangeHandler())
+                .popChangeHandler(new HorizontalChangeHandler())));
+    }
+
     private void dispose(@Nullable Disposable disposable) {
         if (disposable != null && !disposable.isDisposed()) {
             disposable.dispose();
@@ -544,6 +548,7 @@ public class ConversationsListController extends BaseController implements Searc
         }
 
         bottomSheet.setOnShowListener(dialog -> new KeyboardUtils(getActivity(), bottomSheet.getLayout(), true));
+        bottomSheet.setOnDismissListener(dialog -> getActionBar().setDisplayHomeAsUpEnabled(getRouter().getBackstackSize() > 1));
         bottomSheet.show();
     }
 
@@ -583,7 +588,7 @@ public class ConversationsListController extends BaseController implements Searc
 
                 if (currentUser.hasSpreedCapabilityWithName("chat-v2")) {
                     bundle.putString(BundleKeys.KEY_CONVERSATION_NAME, conversation.getDisplayName());
-                    getParentController().getRouter().pushController((RouterTransaction.with(new ChatController(bundle))
+                    getRouter().pushController((RouterTransaction.with(new ChatController(bundle))
                             .pushChangeHandler(new HorizontalChangeHandler())
                             .popChangeHandler(new HorizontalChangeHandler())));
                 } else {

+ 0 - 76
app/src/main/java/com/nextcloud/talk/controllers/MagicBottomNavigationController.java

@@ -1,76 +0,0 @@
-/*
- * Nextcloud Talk application
- *
- * @author Mario Danic
- * Copyright (C) 2017 Mario Danic <mario@lovelyhq.com>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- * The bottom navigation was taken from a PR to Conductor by Chris6647@gmail.com
- * https://github.com/bluelinelabs/Conductor/pull/316 and https://github.com/chris6647/Conductor/pull/1/files
- * and of course modified by yours truly.
- */
-
-package com.nextcloud.talk.controllers;
-
-import com.bluelinelabs.conductor.Controller;
-import com.nextcloud.talk.R;
-import com.nextcloud.talk.controllers.base.bottomnavigation.BottomNavigationController;
-import com.nextcloud.talk.controllers.base.bottomnavigation.BottomNavigationMenuItem;
-
-import java.lang.reflect.Constructor;
-
-import androidx.annotation.IdRes;
-
-public class MagicBottomNavigationController extends BottomNavigationController {
-
-    public MagicBottomNavigationController() {
-        super(R.menu.menu_navigation);
-    }
-
-    /**
-     * Supplied MenuItemId must match a {@link Controller} as defined in {@link
-     * BottomNavigationMenuItem} or an {@link IllegalArgumentException} will be thrown.
-     *
-     * @param itemId
-     */
-    @Override
-    protected Controller getControllerFor(@IdRes int itemId) {
-        Constructor[] constructors =
-                BottomNavigationMenuItem.getEnum(itemId).getControllerClass().getConstructors();
-        Controller controller = null;
-        try {
-            /* Determine default or Bundle constructor */
-            for (Constructor constructor : constructors) {
-                if (constructor.getParameterTypes().length == 0) {
-                    controller = (Controller) constructor.newInstance();
-                }
-            }
-        } catch (Exception e) {
-            throw new RuntimeException(
-                    "An exception occurred while creating a new instance for mapping of "
-                            + itemId
-                            + ". "
-                            + e.getMessage(),
-                    e);
-        }
-
-        if (controller == null) {
-            throw new RuntimeException(
-                    "Controller must have a public empty constructor. "
-                            + itemId);
-        }
-        return controller;
-    }
-}

+ 0 - 9
app/src/main/java/com/nextcloud/talk/controllers/RingtoneSelectionController.java

@@ -112,15 +112,6 @@ public class RingtoneSelectionController extends BaseController implements Flexi
         prepareViews();
     }
 
-    @Override
-    protected void onAttach(@NonNull View view) {
-        super.onAttach(view);
-
-        if (getActionBar() != null) {
-            getActionBar().setDisplayHomeAsUpEnabled(true);
-        }
-    }
-
     @Override
     public boolean onOptionsItemSelected(@NonNull MenuItem item) {
         switch (item.getItemId()) {

+ 4 - 3
app/src/main/java/com/nextcloud/talk/controllers/SettingsController.java

@@ -188,6 +188,7 @@ public class SettingsController extends BaseController {
     @Override
     protected void onViewBound(@NonNull View view) {
         super.onViewBound(view);
+        setHasOptionsMenu(true);
 
         NextcloudTalkApplication.getSharedApplication().getComponentApplication().inject(this);
 
@@ -258,13 +259,13 @@ public class SettingsController extends BaseController {
         });
 
         addAccountButton.addPreferenceClickListener(view15 -> {
-            getParentController().getRouter().pushController(RouterTransaction.with(new
+            getRouter().pushController(RouterTransaction.with(new
                     ServerSelectionController()).pushChangeHandler(new VerticalChangeHandler())
                     .popChangeHandler(new VerticalChangeHandler()));
         });
 
         switchAccountButton.addPreferenceClickListener(view16 -> {
-            getParentController().getRouter().pushController(RouterTransaction.with(new
+            getRouter().pushController(RouterTransaction.with(new
                     SwitchAccountController()).pushChangeHandler(new VerticalChangeHandler())
                     .popChangeHandler(new VerticalChangeHandler()));
         });
@@ -371,7 +372,7 @@ public class SettingsController extends BaseController {
             baseUrlTextView.setText(currentUser.getBaseUrl());
 
             reauthorizeButton.addPreferenceClickListener(view14 -> {
-                getParentController().getRouter().pushController(RouterTransaction.with(
+                getRouter().pushController(RouterTransaction.with(
                         new WebViewLoginController(currentUser.getBaseUrl(), true))
                         .pushChangeHandler(new VerticalChangeHandler())
                         .popChangeHandler(new VerticalChangeHandler()));

+ 0 - 7
app/src/main/java/com/nextcloud/talk/controllers/SwitchAccountController.java

@@ -222,13 +222,6 @@ public class SwitchAccountController extends BaseController {
         prepareViews();
     }
 
-    @Override
-    protected void onAttach(@NonNull View view) {
-        super.onAttach(view);
-        if (getActionBar() != null) {
-            getActionBar().setDisplayHomeAsUpEnabled(true);
-        }
-    }
 
     private void prepareViews() {
         LinearLayoutManager layoutManager = new SmoothScrollLinearLayoutManager(getActivity());

+ 17 - 7
app/src/main/java/com/nextcloud/talk/controllers/base/BaseController.java

@@ -3,13 +3,13 @@
  *
  * @author BlueLine Labs, Inc.
  * Copyright (C) 2016 BlueLine Labs, Inc.
- *
+ * <p>
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- *
+ * <p>
  * http://www.apache.org/licenses/LICENSE-2.0
- *
+ * <p>
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -20,12 +20,12 @@ package com.nextcloud.talk.controllers.base;
 
 import android.os.Bundle;
 import android.util.Log;
+import android.view.MenuItem;
 import android.view.View;
 
 import com.bluelinelabs.conductor.Controller;
 import com.nextcloud.talk.application.NextcloudTalkApplication;
 import com.nextcloud.talk.controllers.AccountVerificationController;
-import com.nextcloud.talk.controllers.MagicBottomNavigationController;
 import com.nextcloud.talk.controllers.ServerSelectionController;
 import com.nextcloud.talk.controllers.SwitchAccountController;
 import com.nextcloud.talk.controllers.WebViewLoginController;
@@ -57,6 +57,17 @@ public abstract class BaseController extends ButterKnifeController {
         cleanTempCertPreference();
     }
 
+    @Override
+    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
+        switch (item.getItemId()) {
+            case android.R.id.home:
+                getRouter().popCurrentController();
+                return true;
+            default:
+                return super.onOptionsItemSelected(item);
+        }
+    }
+
     private void cleanTempCertPreference() {
         NextcloudTalkApplication.getSharedApplication().getComponentApplication().inject(this);
 
@@ -92,10 +103,9 @@ public abstract class BaseController extends ButterKnifeController {
     @Override
     protected void onAttach(@NonNull View view) {
         setTitle();
-        if (!MagicBottomNavigationController.class.getName().equals(getClass().getName()) && getActionBar() != null) {
-            getActionBar().setDisplayHomeAsUpEnabled(false);
+        if (getActionBar() != null) {
+            getActionBar().setDisplayHomeAsUpEnabled(getParentController() != null || getRouter().getBackstackSize() > 1);
         }
-
         super.onAttach(view);
     }
 

+ 3 - 3
app/src/main/java/com/nextcloud/talk/controllers/base/ButterKnifeController.java

@@ -3,13 +3,13 @@
  *
  * @author BlueLine Labs, Inc.
  * Copyright (C) 2016 BlueLine Labs, Inc.
- *
+ * <p>
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- *
+ * <p>
  * http://www.apache.org/licenses/LICENSE-2.0
- *
+ * <p>
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ 0 - 320
app/src/main/java/com/nextcloud/talk/controllers/base/bottomnavigation/BottomNavigationController.java

@@ -1,320 +0,0 @@
-/*
- * Nextcloud Talk application
- *
- * @author Mario Danic
- * Copyright (C) 2017-2018 Mario Danic <mario@lovelyhq.com>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- * The bottom navigation was taken from a PR to Conductor by Chris6647@gmail.com
- * https://github.com/bluelinelabs/Conductor/pull/316 and https://github.com/chris6647/Conductor/pull/1/files
- * and of course modified by yours truly.
- */
-
-package com.nextcloud.talk.controllers.base.bottomnavigation;
-
-import android.os.Bundle;
-import android.util.Log;
-import android.util.SparseArray;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-
-import com.bluelinelabs.conductor.ChangeHandlerFrameLayout;
-import com.bluelinelabs.conductor.Controller;
-import com.bluelinelabs.conductor.Router;
-import com.bluelinelabs.conductor.RouterTransaction;
-import com.bluelinelabs.conductor.changehandler.FadeChangeHandler;
-import com.google.android.material.bottomnavigation.BottomNavigationView;
-import com.nextcloud.talk.R;
-import com.nextcloud.talk.controllers.base.BaseController;
-import com.nextcloud.talk.utils.animations.ViewHidingBehaviourAnimation;
-import com.nextcloud.talk.utils.bundle.BundleBuilder;
-
-import androidx.annotation.MenuRes;
-import androidx.annotation.NonNull;
-import androidx.coordinatorlayout.widget.CoordinatorLayout;
-import butterknife.BindView;
-
-/**
- * The {@link Controller} for the Bottom Navigation View. Populates a {@link BottomNavigationView}
- * with the supplied {@link Menu} resource. The first item set as checked will be shown by default.
- * The backstack of each {@link MenuItem} is switched out, in order to maintain a separate backstack
- * for each {@link MenuItem} - even though that is against the Google Design Guidelines:
- *
- * @author chris6647@gmail.com
- * @see <a
- * href="https://material.io/guidelines/components/bottom-navigation.html#bottom-navigation-behavior">Material
- * Design Guidelines</a>
- *
- * Internally works similarly to {@link com.bluelinelabs.conductor.support.RouterPagerAdapter},
- * in the sense that it keeps track of the currently active {@link MenuItem} and the paired
- * Child {@link Router}. Everytime we navigate from one to another,
- * or {@link Controller#onSaveInstanceState(Bundle)} is called, we save the entire instance state
- * of the Child {@link Router}, and cache it, so we have it available when we navigate to
- * another {@link MenuItem} and can then restore the correct Child {@link Router}
- * (and thus the entire backstack)
- */
-public abstract class BottomNavigationController extends BaseController {
-
-    public static final String TAG = "BottomNavigationContr";
-    public static final int INVALID_INT = -1;
-    private static final String KEY_MENU_RESOURCE = "key_menu_resource";
-    private static final String KEY_STATE_ROUTER_BUNDLES = "key_state_router_bundles";
-    private static final String KEY_STATE_CURRENTLY_SELECTED_ID = "key_state_currently_selected_id";
-    @BindView(R.id.navigation)
-    BottomNavigationView bottomNavigationView;
-
-    @BindView(R.id.bottom_navigation_controller_container)
-    ChangeHandlerFrameLayout controllerContainer;
-
-    private int currentlySelectedItemId = BottomNavigationController.INVALID_INT;
-
-    private SparseArray<Bundle> routerSavedStateBundles;
-
-    public BottomNavigationController(@MenuRes int menu) {
-        this(new BundleBuilder(new Bundle()).putInt(KEY_MENU_RESOURCE, menu).build());
-    }
-
-    public BottomNavigationController(Bundle args) {
-        super(args);
-    }
-
-    @NonNull
-    @Override
-    protected View inflateView(@NonNull LayoutInflater inflater, @NonNull ViewGroup container) {
-        return inflater.inflate(R.layout.controller_bottom_navigation, container, false);
-    }
-
-    @Override
-    protected void onViewBound(@NonNull View view) {
-        super.onViewBound(view);
-        /* Setup the BottomNavigationView with the constructor supplied Menu resource */
-        bottomNavigationView.inflateMenu(getMenuResource());
-        bottomNavigationView.setOnNavigationItemSelectedListener(item -> {
-            int nextItemId = item.getItemId();
-            if (currentlySelectedItemId != nextItemId) {
-                Router oldChildRouter = getChildRouter(currentlySelectedItemId);
-                save(oldChildRouter, currentlySelectedItemId);
-                destroyChildRouter(oldChildRouter);
-
-                configureRouter(getChildRouter(nextItemId), nextItemId);
-                currentlySelectedItemId = nextItemId;
-            } else {
-                resetCurrentBackstack();
-            }
-            return true;
-        });
-
-        CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) bottomNavigationView.getLayoutParams();
-        layoutParams.setBehavior(new ViewHidingBehaviourAnimation());
-    }
-
-    @Override
-    protected void onAttach(@NonNull View view) {
-        super.onAttach(view);
-        /*
-         * Fresh start, setup everything.
-         * Must be done in onAttach to avoid artifacts if using multiple Activities,
-         * and in case of resuming the app (i.e. when the view is not created again)
-         */
-        if (routerSavedStateBundles == null) {
-            Menu menu = bottomNavigationView.getMenu();
-            int menuSize = menu.size();
-            routerSavedStateBundles = new SparseArray<>(menuSize);
-            for (int i = 0; i < menuSize; i++) {
-                MenuItem menuItem = menu.getItem(i);
-                /* Ensure the first checked item is shown */
-                if (menuItem.isChecked()) {
-                    /*
-                     * Seems like the BottomNavigationView always initializes index 0 as isChecked / Selected,
-                     * regardless of what was set in the menu xml originally.
-                     * So basically all we're doing here is always setting up menuItem index 0.
-                     */
-                    int itemId = menuItem.getItemId();
-                    configureRouter(getChildRouter(itemId), itemId);
-                    bottomNavigationView.setSelectedItemId(itemId);
-                    currentlySelectedItemId = bottomNavigationView.getSelectedItemId();
-                    break;
-                }
-            }
-        } else {
-            /*
-             * Since we are restoring our state,
-             * and onRestoreInstanceState is called before onViewBound,
-             * all we need to do is rebind.
-             */
-            getChildRouter(currentlySelectedItemId).rebindIfNeeded();
-        }
-    }
-
-    /**
-     * Get the Child {@link Router} matching the supplied ItemId.
-     *
-     * @param itemId MenuItem ID
-     * @return
-     */
-    protected Router getChildRouter(int itemId) {
-        return getChildRouter(controllerContainer, "itemId:" + itemId);
-    }
-
-    /**
-     * Correctly configure the {@link Router} given the cached routerSavedState.
-     *
-     * @param itemId {@link MenuItem} ID
-     * @return true if {@link Router} was restored
-     */
-    private void configureRouter(@NonNull Router childRouter, int itemId) {
-        if (!childRouter.hasRootController()) {
-            Bundle routerSavedState = routerSavedStateBundles.get(itemId);
-            if (routerSavedState != null && !routerSavedState.isEmpty()) {
-                childRouter.restoreInstanceState(routerSavedState);
-                routerSavedStateBundles.remove(itemId);
-            } else {
-                childRouter.setRoot(RouterTransaction.with(getControllerFor(itemId)));
-            }
-        }
-        childRouter.rebindIfNeeded();
-    }
-
-    /**
-     * Remove the supplied {@link Router} as a child of this Controller.
-     *
-     * @param childRouter
-     */
-    protected void destroyChildRouter(@NonNull Router childRouter) {
-        removeChildRouter(childRouter);
-    }
-
-    /**
-     * Resets the current backstack to the {@link Controller}, supplied by {@link
-     * BottomNavigationController#getControllerFor(int)}, using a {@link FadeChangeHandler}.
-     */
-    protected void resetCurrentBackstack() {
-        if (currentlySelectedItemId != BottomNavigationController.INVALID_INT) {
-            destroyChildRouter(getChildRouter(currentlySelectedItemId));
-            routerSavedStateBundles.remove(currentlySelectedItemId);
-            /* Must get reference to newly recreated childRouter to avoid old view not being removed */
-            getChildRouter(currentlySelectedItemId).setRoot(
-                    RouterTransaction.with(getControllerFor(currentlySelectedItemId))
-                            .pushChangeHandler(new FadeChangeHandler(true)));
-        } else {
-            Log.w(TAG,
-                    "Attempted to reset backstack on BottomNavigationController with currentlySelectedItemId=" +
-                            currentlySelectedItemId);
-        }
-    }
-
-    /**
-     * Navigate to the supplied {@link Controller}, while setting the menuItemId as selected on the
-     * {@link BottomNavigationView}.
-     *
-     * @param itemId {@link MenuItem} ID
-     */
-    protected void navigateTo(int itemId) {
-        if (currentlySelectedItemId != itemId) {
-            destroyChildRouter(getChildRouter(currentlySelectedItemId));
-            routerSavedStateBundles.remove(currentlySelectedItemId);
-
-            /* Ensure correct Checked state based on new selection */
-            Menu menu = bottomNavigationView.getMenu();
-            for (int i = 0; i < menu.size(); i++) {
-                MenuItem menuItem = menu.getItem(i);
-                if (menuItem.isChecked() && menuItem.getItemId() != itemId) {
-                    menuItem.setChecked(false);
-                } else if (menuItem.getItemId() == itemId) {
-                    menuItem.setChecked(true);
-                }
-            }
-
-            configureRouter(getChildRouter(itemId), itemId);
-            currentlySelectedItemId = itemId;
-        } else {
-            resetCurrentBackstack();
-        }
-    }
-
-    /**
-     * Saves the Child {@link Router} into a {@link Bundle} and caches that {@link Bundle}.
-     * <p>
-     * Be cautious as this call causes the controller flag it needs reattach,
-     * so it should only be called just prior to destroying the router
-     *
-     * @param itemId {@link MenuItem} ID
-     */
-    private void save(Router childRouter, int itemId) {
-        Bundle routerBundle = new Bundle();
-        childRouter.saveInstanceState(routerBundle);
-        routerSavedStateBundles.put(itemId, routerBundle);
-    }
-
-    @Override
-    protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
-        routerSavedStateBundles = savedInstanceState.getSparseParcelableArray(KEY_STATE_ROUTER_BUNDLES);
-        currentlySelectedItemId =
-                savedInstanceState.getInt(KEY_STATE_CURRENTLY_SELECTED_ID, BottomNavigationController.INVALID_INT);
-    }
-
-    @Override
-    protected void onSaveInstanceState(@NonNull Bundle outState) {
-        outState.putSparseParcelableArray(KEY_STATE_ROUTER_BUNDLES, routerSavedStateBundles);
-        /*
-         * For some reason the BottomNavigationView does not seem to correctly restore its
-         * selectedId, even though the view appears with the correct state.
-         * So we keep track of it manually
-         */
-        outState.putInt(KEY_STATE_CURRENTLY_SELECTED_ID, currentlySelectedItemId);
-    }
-
-    @Override
-    public boolean handleBack() {
-        /*
-         * The childRouter should handleBack,
-         * as this BottomNavigationController doesn't have a back step sensible to the user.
-         */
-        Router childRouter = getChildRouter(currentlySelectedItemId);
-        if (childRouter != null) {
-            if (childRouter.getBackstackSize() > 1) {
-                return childRouter.handleBack();
-            } else if (currentlySelectedItemId != R.id.navigation_calls) {
-                navigateTo(R.id.navigation_calls);
-                return true;
-            } else {
-                return false;
-            }
-        } else {
-            Log.d(TAG, "handleBack called with getChildRouter(currentlySelectedItemId) == null.");
-            return false;
-        }
-    }
-
-    /**
-     * Get the {@link Menu} Resource ID from {@link Controller#getArgs()}
-     *
-     * @return the {@link Menu} Resource ID
-     */
-    private int getMenuResource() {
-        return getArgs().getInt(KEY_MENU_RESOURCE);
-    }
-
-    /**
-     * Return a target instance of {@link Controller} for given menu item ID
-     *
-     * @param itemId the ID tapped by the user
-     * @return the {@link Controller} instance to navigate to
-     */
-    protected abstract Controller getControllerFor(int itemId);
-}

+ 0 - 87
app/src/main/java/com/nextcloud/talk/controllers/base/bottomnavigation/BottomNavigationMenuItem.java

@@ -1,87 +0,0 @@
-/*
- * Nextcloud Talk application
- *
- * @author Mario Danic
- * Copyright (C) 2017 Mario Danic <mario@lovelyhq.com>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- * The bottom navigation was taken from a PR to Conductor by Chris6647@gmail.com
- * https://github.com/bluelinelabs/Conductor/pull/316 and https://github.com/chris6647/Conductor/pull/1/files
- * and of course modified by yours truly.
- */
-
-package com.nextcloud.talk.controllers.base.bottomnavigation;
-
-import com.bluelinelabs.conductor.Controller;
-import com.nextcloud.talk.R;
-import com.nextcloud.talk.controllers.ContactsController;
-import com.nextcloud.talk.controllers.ConversationsListController;
-import com.nextcloud.talk.controllers.SettingsController;
-import com.nextcloud.talk.utils.BottomNavigationUtils;
-
-import androidx.annotation.IdRes;
-
-/**
- * Enum representation of valid Bottom Navigation Menu Items
- */
-public enum BottomNavigationMenuItem {
-    CALLS(R.id.navigation_calls, ConversationsListController.class),
-    CONTACTS(R.id.navigation_contacts, ContactsController.class),
-    SETTINGS(R.id.navigation_settings, SettingsController.class);
-
-    private int menuResId;
-    private Class<? extends Controller> controllerClass;
-
-    BottomNavigationMenuItem(@IdRes int menuResId, Class<? extends Controller> controllerClass) {
-        this.menuResId = menuResId;
-        this.controllerClass = controllerClass;
-    }
-
-    public static BottomNavigationMenuItem getEnum(@IdRes int menuResId) {
-        for (BottomNavigationMenuItem type : BottomNavigationMenuItem.values()) {
-            if (menuResId == type.getMenuResId()) {
-                return type;
-            }
-        }
-        throw new IllegalArgumentException("Unable to map " + menuResId);
-    }
-
-    public static BottomNavigationMenuItem getEnum(Class<? extends Controller> controllerClass) {
-        for (BottomNavigationMenuItem type : BottomNavigationMenuItem.values()) {
-            if (BottomNavigationUtils.equals(controllerClass, type.getControllerClass())) {
-                return type;
-            }
-        }
-        throw new IllegalArgumentException("Unable to map " + controllerClass);
-    }
-
-    public int getMenuResId() {
-        return menuResId;
-    }
-
-    public Class<? extends Controller> getControllerClass() {
-        return controllerClass;
-    }
-
-    @Override
-    public String toString() {
-        return "BottomNavigationMenuItem{"
-                + "menuResId="
-                + menuResId
-                + ", controllerClass="
-                + controllerClass
-                + '}';
-    }
-}

+ 2 - 24
app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/CallMenuController.java

@@ -30,13 +30,11 @@ import android.view.ViewGroup;
 
 import com.bluelinelabs.conductor.RouterTransaction;
 import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler;
-import com.bluelinelabs.conductor.changehandler.VerticalChangeHandler;
 import com.kennyc.bottomsheet.adapters.AppAdapter;
 import com.nextcloud.talk.R;
 import com.nextcloud.talk.adapters.items.AppItem;
 import com.nextcloud.talk.adapters.items.MenuItem;
 import com.nextcloud.talk.application.NextcloudTalkApplication;
-import com.nextcloud.talk.controllers.ContactsController;
 import com.nextcloud.talk.controllers.base.BaseController;
 import com.nextcloud.talk.events.BottomSheetLockEvent;
 import com.nextcloud.talk.models.database.UserEntity;
@@ -139,7 +137,7 @@ public class CallMenuController extends BaseController implements FlexibleAdapte
                 menuItems.add(new MenuItem(getResources().getString(R.string.nc_remove_from_favorites), 97, getResources()
                         .getDrawable(R.drawable.ic_star_border_grey600_24dp)));
             } else if ((currentUser = userUtils.getCurrentUser()) != null &&
-                    currentUser.hasSpreedCapabilityWithName("favorites")){
+                    currentUser.hasSpreedCapabilityWithName("favorites")) {
                 menuItems.add(new MenuItem(getResources().getString(R.string.nc_add_to_favorites), 98, getResources()
                         .getDrawable(R.drawable.ic_star_grey600_24dp)));
             }
@@ -254,26 +252,6 @@ public class CallMenuController extends BaseController implements FlexibleAdapte
                             .popChangeHandler(new HorizontalChangeHandler()));
                 }
             }
-        } else if (menuType.equals(MenuType.NEW_CONVERSATION) && position != 0) {
-            MenuItem menuItem = (MenuItem) adapter.getItem(position);
-            if (menuItem != null) {
-                if (menuItem.getTag() == 1) {
-                    eventBus.post(new BottomSheetLockEvent(true, 0, false, true));
-                    bundle = new Bundle();
-                    bundle.putBoolean(BundleKeys.KEY_NEW_CONVERSATION, true);
-                    getParentController().getParentController().getRouter().pushController((RouterTransaction.with
-                            (new ContactsController
-                                    (bundle))
-                            .pushChangeHandler(new VerticalChangeHandler())
-                            .popChangeHandler(new VerticalChangeHandler())));
-                } else {
-                    bundle = new Bundle();
-                    bundle.putInt(BundleKeys.KEY_OPERATION_CODE, 10);
-                    getRouter().pushController(RouterTransaction.with(new EntryMenuController(bundle))
-                            .pushChangeHandler(new HorizontalChangeHandler())
-                            .popChangeHandler(new HorizontalChangeHandler()));
-                }
-            }
         }
 
         return true;
@@ -281,6 +259,6 @@ public class CallMenuController extends BaseController implements FlexibleAdapte
 
     @Parcel
     public enum MenuType {
-        REGULAR, SHARE, NEW_CONVERSATION
+        REGULAR, SHARE
     }
 }

+ 5 - 4
app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/EntryMenuController.java

@@ -131,9 +131,10 @@ public class EntryMenuController extends BaseController {
             bundle.putString(BundleKeys.KEY_CALL_URL, callUrl);
             bundle.putString(BundleKeys.KEY_CONVERSATION_PASSWORD, editText.getText().toString());
             bundle.putInt(BundleKeys.KEY_OPERATION_CODE, operationCode);
-            if(originalBundle.containsKey(BundleKeys.KEY_SPREED_CAPABILITIES)) {
+            if (originalBundle.containsKey(BundleKeys.KEY_SPREED_CAPABILITIES)) {
                 bundle.putParcelable(BundleKeys.KEY_SPREED_CAPABILITIES, originalBundle.getParcelable(BundleKeys.KEY_SPREED_CAPABILITIES));
             }
+
             getRouter().pushController(RouterTransaction.with(new OperationsMenuController(bundle))
                     .pushChangeHandler(new HorizontalChangeHandler())
                     .popChangeHandler(new HorizontalChangeHandler()));
@@ -219,7 +220,7 @@ public class EntryMenuController extends BaseController {
                         } else {
                             if (proceedButton.isEnabled()) {
                                 proceedButton.setEnabled(false);
-                                proceedButton.setAlpha(0.7f);
+                                proceedButton.setAlpha(0.38f);
                             }
                             textFieldBoxes.setError(getResources().getString(R.string.nc_call_name_is_same),
                                     true);
@@ -241,7 +242,7 @@ public class EntryMenuController extends BaseController {
                     } else {
                         if (proceedButton.isEnabled()) {
                             proceedButton.setEnabled(false);
-                            proceedButton.setAlpha(0.7f);
+                            proceedButton.setAlpha(0.38f);
                         }
                         textFieldBoxes.setError(getResources().getString(R.string.nc_wrong_link),
                                 true);
@@ -249,7 +250,7 @@ public class EntryMenuController extends BaseController {
                 } else {
                     if (proceedButton.isEnabled()) {
                         proceedButton.setEnabled(false);
-                        proceedButton.setAlpha(0.7f);
+                        proceedButton.setAlpha(0.38f);
                     }
                 }
             }

+ 38 - 45
app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java

@@ -141,7 +141,7 @@ public class OperationsMenuController extends BaseController {
         if (args.containsKey(BundleKeys.KEY_INVITED_GROUP)) {
             this.invitedGroups = args.getStringArrayList(BundleKeys.KEY_INVITED_GROUP);
         }
-        
+
         if (args.containsKey(BundleKeys.KEY_CONVERSATION_TYPE)) {
             this.conversationType = Parcels.unwrap(args.getParcelable(BundleKeys.KEY_CONVERSATION_TYPE));
         }
@@ -168,7 +168,7 @@ public class OperationsMenuController extends BaseController {
         currentUser = userUtils.getCurrentUser();
         OperationsObserver operationsObserver = new OperationsObserver();
 
-        if (!TextUtils.isEmpty(callUrl) ) {
+        if (!TextUtils.isEmpty(callUrl)) {
             conversationToken = callUrl.substring(callUrl.lastIndexOf("/") + 1, callUrl.length());
             if (callUrl.contains("/index.php")) {
                 baseUrl = callUrl.substring(0, callUrl.indexOf("/index.php"));
@@ -274,7 +274,7 @@ public class OperationsMenuController extends BaseController {
                     RetrofitBucket retrofitBucket;
                     boolean isGroupCallWorkaround = false;
                     String invite = null;
-                    
+
                     if (invitedGroups.size() > 0) {
                         invite = invitedGroups.get(0);
                     }
@@ -289,7 +289,7 @@ public class OperationsMenuController extends BaseController {
                             isGroupCallWorkaround = true;
                             roomType = "3";
                         }
-                        
+
                         retrofitBucket = ApiUtils.getRetrofitBucketForCreateRoom(currentUser.getBaseUrl(),
                                 roomType, invite, null);
                     }
@@ -517,6 +517,7 @@ public class OperationsMenuController extends BaseController {
         if (localInvitedGroups.size() > 0) {
             localInvitedGroups.remove(0);
         }
+
         if (localInvitedUsers.size() > 0 || (localInvitedGroups.size() > 0 && currentUser.hasSpreedCapabilityWithName("invite-groups-and-mails"))) {
             if ((localInvitedGroups.size() > 0 && currentUser.hasSpreedCapabilityWithName("invite-groups-and-mails"))) {
                 for (int i = 0; i < localInvitedGroups.size(); i++) {
@@ -557,44 +558,44 @@ public class OperationsMenuController extends BaseController {
                             });
 
                 }
+            }
 
-                for (int i = 0; i < localInvitedGroups.size(); i++) {
-                    final String userId = invitedUsers.get(i);
-                    retrofitBucket = ApiUtils.getRetrofitBucketForAddParticipant(currentUser.getBaseUrl(), conversation.getToken(),
-                            userId);
+            for (int i = 0; i < localInvitedUsers.size(); i++) {
+                final String userId = invitedUsers.get(i);
+                retrofitBucket = ApiUtils.getRetrofitBucketForAddParticipant(currentUser.getBaseUrl(), conversation.getToken(),
+                        userId);
 
-                    ncApi.addParticipant(credentials, retrofitBucket.getUrl(), retrofitBucket.getQueryMap())
-                            .subscribeOn(Schedulers.newThread())
-                            .observeOn(AndroidSchedulers.mainThread())
-                            .retry(1)
-                            .subscribe(new Observer<AddParticipantOverall>() {
-                                @Override
-                                public void onSubscribe(Disposable d) {
+                ncApi.addParticipant(credentials, retrofitBucket.getUrl(), retrofitBucket.getQueryMap())
+                        .subscribeOn(Schedulers.newThread())
+                        .observeOn(AndroidSchedulers.mainThread())
+                        .retry(1)
+                        .subscribe(new Observer<AddParticipantOverall>() {
+                            @Override
+                            public void onSubscribe(Disposable d) {
 
-                                }
+                            }
 
-                                @Override
-                                public void onNext(AddParticipantOverall addParticipantOverall) {
-                                }
+                            @Override
+                            public void onNext(AddParticipantOverall addParticipantOverall) {
+                            }
 
-                                @Override
-                                public void onError(Throwable e) {
-                                    dispose();
-                                }
+                            @Override
+                            public void onError(Throwable e) {
+                                dispose();
+                            }
 
-                                @Override
-                                public void onComplete() {
-                                    synchronized (localInvitedUsers) {
-                                        localInvitedUsers.remove(userId);
-                                    }
+                            @Override
+                            public void onComplete() {
+                                synchronized (localInvitedUsers) {
+                                    localInvitedUsers.remove(userId);
+                                }
 
-                                    if (localInvitedUsers.size() == 0) {
-                                        initiateConversation(true, null);
-                                    }
-                                    dispose();
+                                if (localInvitedGroups.size() == 0 && localInvitedUsers.size() == 0) {
+                                    initiateConversation(true, null);
                                 }
-                            });
-                }
+                                dispose();
+                            }
+                        });
             }
         } else {
             if (!currentUser.hasSpreedCapabilityWithName("chat-v2")) {
@@ -630,17 +631,9 @@ public class OperationsMenuController extends BaseController {
             conversationIntent.putExtras(bundle);
 
             if (getParentController() != null) {
-                if (getParentController().getParentController() != null) {
-                    getParentController().getParentController().getRouter().pushController(RouterTransaction.with(new
-                            ChatController(bundle))
-                            .pushChangeHandler(new HorizontalChangeHandler())
-                            .popChangeHandler(new HorizontalChangeHandler()));
-                } else {
-                    getParentController().getRouter().pushController(RouterTransaction.with(new
-                            ChatController(bundle))
-                            .pushChangeHandler(new HorizontalChangeHandler())
-                            .popChangeHandler(new HorizontalChangeHandler()));
-                }
+                getParentController().getRouter().replaceTopController(RouterTransaction.with(new ChatController(bundle))
+                        .pushChangeHandler(new HorizontalChangeHandler())
+                        .popChangeHandler(new HorizontalChangeHandler()));
             }
 
         } else {

+ 1 - 0
app/src/main/java/com/nextcloud/talk/interfaces/ClosedInterface.java

@@ -22,5 +22,6 @@ package com.nextcloud.talk.interfaces;
 
 public interface ClosedInterface {
     void providerInstallerInstallIfNeededAsync();
+
     boolean isGooglePlayServicesAvailable();
 }

+ 1 - 1
app/src/main/java/com/nextcloud/talk/jobs/NotificationWorker.java

@@ -265,7 +265,7 @@ public class NotificationWorker extends Worker {
         PendingIntent pendingIntent = PendingIntent.getActivity(context,
                 0, intent, PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_ONE_SHOT);
 
-        NotificationManagerCompat notificationManager =  NotificationManagerCompat.from(context);
+        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
 
 
         CRC32 crc32 = new CRC32();

+ 2 - 1
app/src/main/java/com/nextcloud/talk/models/RingtoneSettings.java

@@ -36,7 +36,8 @@ import lombok.Data;
 @Data
 public class RingtoneSettings {
     @JsonField(name = "ringtoneUri", typeConverter = UriTypeConverter.class)
-    @Nullable Uri ringtoneUri;
+    @Nullable
+    Uri ringtoneUri;
     @JsonField(name = "ringtoneName")
     String ringtoneName;
 }

+ 1 - 1
app/src/main/java/com/nextcloud/talk/models/json/rooms/Conversation.java

@@ -73,7 +73,7 @@ public class Conversation {
     public int unreadMessages;
     @JsonField(name = "unreadMention")
     public boolean unreadMention;
-    @JsonField(name =  "lastMessage")
+    @JsonField(name = "lastMessage")
     public ChatMessage lastMessage;
     @JsonField(name = "objectType")
     String objectType;

+ 1 - 1
app/src/main/java/com/nextcloud/talk/models/json/websocket/BaseWebSocketMessage.java

@@ -30,7 +30,7 @@ import lombok.Data;
 @Data
 @JsonObject
 @Parcel
-public class BaseWebSocketMessage{
+public class BaseWebSocketMessage {
     @JsonField(name = "type")
     String type;
 }

+ 5 - 1
app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java

@@ -195,9 +195,13 @@ public class ApiUtils {
         return "/status.php";
     }
 
+    public static String getUrlForAvatarWithNameAndPixels(String baseUrl, String name, int avatarSize) {
+        return baseUrl + "/index.php/avatar/" + Uri.encode(name) + "/" + avatarSize;
+    }
+
     public static String getUrlForAvatarWithName(String baseUrl, String name, @DimenRes int avatarSize) {
         avatarSize = Math.round(NextcloudTalkApplication
-                                    .getSharedApplication().getResources().getDimension(avatarSize));
+                .getSharedApplication().getResources().getDimension(avatarSize));
 
         return baseUrl + "/index.php/avatar/" + Uri.encode(name) + "/" + avatarSize;
     }

+ 3 - 3
app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.java

@@ -110,17 +110,17 @@ public class DisplayUtils {
             int end = text.indexOf(m.group()) + m.group().length();
             spannable.setSpan(new ForegroundColorSpan(color), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
             spannable.setSpan(new StyleSpan(Typeface.BOLD), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
-            spannable.setSpan(new AbsoluteSizeSpan(textSize) , start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+            spannable.setSpan(new AbsoluteSizeSpan(textSize), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
         }
 
         return spannable;
     }
 
     public static Drawable getMessageSelector(@ColorInt int normalColor, @ColorInt int selectedColor,
-                                        @ColorInt int pressedColor, @DrawableRes int shape) {
+                                              @ColorInt int pressedColor, @DrawableRes int shape) {
 
         Drawable vectorDrawable = ContextCompat.getDrawable(NextcloudTalkApplication.getSharedApplication()
-                .getApplicationContext(),
+                        .getApplicationContext(),
                 shape);
         Drawable drawable = DrawableCompat.wrap(vectorDrawable).mutate();
         DrawableCompat.setTintList(

+ 73 - 0
app/src/main/java/com/nextcloud/talk/utils/FABAwareScrollingViewBehavior.java

@@ -0,0 +1,73 @@
+/*
+ * Copyright 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.nextcloud.talk.utils;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.View;
+
+import com.google.android.material.appbar.AppBarLayout;
+import com.google.android.material.floatingactionbutton.FloatingActionButton;
+
+import java.util.List;
+
+import androidx.coordinatorlayout.widget.CoordinatorLayout;
+import androidx.core.view.ViewCompat;
+
+public class FABAwareScrollingViewBehavior extends AppBarLayout.ScrollingViewBehavior {
+
+    public FABAwareScrollingViewBehavior(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    @Override
+    public boolean layoutDependsOn(CoordinatorLayout parent, View child, View dependency) {
+        return super.layoutDependsOn(parent, child, dependency) ||
+                dependency instanceof FloatingActionButton;
+    }
+
+    @Override
+    public boolean onStartNestedScroll(final CoordinatorLayout coordinatorLayout, final View child,
+                                       final View directTargetChild, final View target, final int nestedScrollAxes) {
+        // Ensure we react to vertical scrolling
+        return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL
+                || super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target, nestedScrollAxes);
+    }
+
+    @Override
+    public void onNestedScroll(final CoordinatorLayout coordinatorLayout, final View child,
+                               final View target, final int dxConsumed, final int dyConsumed,
+                               final int dxUnconsumed, final int dyUnconsumed) {
+        super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed);
+        if (dyConsumed > 0) {
+            // User scrolled down -> hide the FAB
+            List<View> dependencies = coordinatorLayout.getDependencies(child);
+            for (View view : dependencies) {
+                if (view instanceof FloatingActionButton) {
+                    ((FloatingActionButton) view).hide();
+                }
+            }
+        } else if (dyConsumed < 0) {
+            // User scrolled up -> show the FAB
+            List<View> dependencies = coordinatorLayout.getDependencies(child);
+            for (View view : dependencies) {
+                if (view instanceof FloatingActionButton) {
+                    ((FloatingActionButton) view).show();
+                }
+            }
+        }
+    }
+}

+ 2 - 2
app/src/main/java/com/nextcloud/talk/utils/KeyboardUtils.java

@@ -50,11 +50,11 @@ public class KeyboardUtils {
             if (shouldSetBottomPadding) {
                 if (contentView.getPaddingBottom() != diff) {
                     //set the padding of the contentView for the keyboard
-                    contentView.setPadding(0, 0, 0,  diff);
+                    contentView.setPadding(0, 0, 0, diff);
                 }
             } else {
                 //check if the padding is != initialBottomPadding (if yes reset the padding)
-                if (contentView.getPaddingBottom() !=  0) {
+                if (contentView.getPaddingBottom() != 0) {
                     //reset the padding of the contentView
                     contentView.setPadding(0, 0, 0, 0);
                 }

+ 5 - 2
app/src/main/java/com/nextcloud/talk/utils/ssl/SSLSocketFactoryCompat.kt

@@ -109,8 +109,11 @@ class SSLSocketFactoryCompat(keyManager: KeyManager?,
         }
     }
 
-    override fun getDefaultCipherSuites(): Array<String>? = cipherSuites ?: delegate.defaultCipherSuites
-    override fun getSupportedCipherSuites(): Array<String>? = cipherSuites ?: delegate.supportedCipherSuites
+    override fun getDefaultCipherSuites(): Array<String>? = cipherSuites
+            ?: delegate.defaultCipherSuites
+
+    override fun getSupportedCipherSuites(): Array<String>? = cipherSuites
+            ?: delegate.supportedCipherSuites
 
     override fun createSocket(s: Socket, host: String, port: Int, autoClose: Boolean): Socket {
         val ssl = delegate.createSocket(s, host, port, autoClose)

+ 11 - 13
app/src/main/java/com/nextcloud/talk/webrtc/MagicProximitySensor.java

@@ -92,7 +92,7 @@ public class MagicProximitySensor implements SensorEventListener {
     /**
      * Deactivate the proximity sensor.
      */
-    public void stop() {
+    void stop() {
         threadChecker.checkIsOnValidThread();
         if (proximitySensor == null) {
             return;
@@ -103,7 +103,7 @@ public class MagicProximitySensor implements SensorEventListener {
     /**
      * Getter for last reported state. Set to true if "near" is reported.
      */
-    public boolean sensorReportsNearState() {
+    boolean sensorReportsNearState() {
         threadChecker.checkIsOnValidThread();
         return lastStateReportIsNear;
     }
@@ -166,20 +166,18 @@ public class MagicProximitySensor implements SensorEventListener {
         }
         StringBuilder info = new StringBuilder("Proximity sensor: ");
         info.append("name=").append(proximitySensor.getName())
-            .append(", vendor: ").append(proximitySensor.getVendor())
-            .append(", power: ").append(proximitySensor.getPower())
-            .append(", resolution: ").append(proximitySensor.getResolution())
-            .append(", max range: ").append(proximitySensor.getMaximumRange())
-            .append(", min delay: ").append(proximitySensor.getMinDelay());
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
-            // Added in API level 20.
-            info.append(", type: ").append(proximitySensor.getStringType());
-        }
+                .append(", vendor: ").append(proximitySensor.getVendor())
+                .append(", power: ").append(proximitySensor.getPower())
+                .append(", resolution: ").append(proximitySensor.getResolution())
+                .append(", max range: ").append(proximitySensor.getMaximumRange())
+                .append(", min delay: ").append(proximitySensor.getMinDelay());
+        // Added in API level 20.
+        info.append(", type: ").append(proximitySensor.getStringType());
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
             // Added in API level 21.
             info.append(", max delay: ").append(proximitySensor.getMaxDelay())
-                .append(", reporting mode: ").append(proximitySensor.getReportingMode())
-                .append(", isWakeUpSensor: ").append(proximitySensor.isWakeUpSensor());
+                    .append(", reporting mode: ").append(proximitySensor.getReportingMode())
+                    .append(", isWakeUpSensor: ").append(proximitySensor.isWakeUpSensor());
         }
         Log.d(TAG, info.toString());
     }

+ 2 - 1
app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java

@@ -67,7 +67,7 @@ public class WebSocketConnectionHelper {
         }
 
         MagicWebSocketInstance magicWebSocketInstance;
-        if (magicWebSocketInstanceMap.containsKey(userEntity.getId())  && (magicWebSocketInstance = magicWebSocketInstanceMap.get(userEntity.getId())) != null && !magicWebSocketInstance.isPermanentlyClosed()) {
+        if (magicWebSocketInstanceMap.containsKey(userEntity.getId()) && (magicWebSocketInstance = magicWebSocketInstanceMap.get(userEntity.getId())) != null && !magicWebSocketInstance.isPermanentlyClosed()) {
             return magicWebSocketInstance;
         } else {
             magicWebSocketInstance = new MagicWebSocketInstance(userEntity, generatedURL, webSocketTicket);
@@ -85,6 +85,7 @@ public class WebSocketConnectionHelper {
             }
         }
     }
+
     HelloOverallWebSocketMessage getAssembledHelloModel(UserEntity userEntity, String ticket) {
         HelloOverallWebSocketMessage helloOverallWebSocketMessage = new HelloOverallWebSocketMessage();
         helloOverallWebSocketMessage.setType("hello");

+ 0 - 7
app/src/main/res/drawable/ic_account_plus_grey600_24dp.xml

@@ -1,7 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:height="24dp"
-    android:width="24dp"
-    android:viewportWidth="24"
-    android:viewportHeight="24">
-    <path android:fillColor="#757575" android:pathData="M15,14C12.33,14 7,15.33 7,18V20H23V18C23,15.33 17.67,14 15,14M6,10V7H4V10H1V12H4V15H6V12H9V10M15,12A4,4 0 0,0 19,8A4,4 0 0,0 15,4A4,4 0 0,0 11,8A4,4 0 0,0 15,12Z" />
-</vector>

+ 0 - 25
app/src/main/res/drawable/ic_chat_white_24dp.xml

@@ -1,25 +0,0 @@
-<!--
-  ~ Nextcloud Talk application
-  ~
-  ~ @author Mario Danic
-  ~ Copyright (C) 2017-2018 Mario Danic <mario@lovelyhq.com>
-  ~
-  ~ This program is free software: you can redistribute it and/or modify
-  ~ it under the terms of the GNU General Public License as published by
-  ~ the Free Software Foundation, either version 3 of the License, or
-  ~ at your option) any later version.
-  ~
-  ~ This program is distributed in the hope that it will be useful,
-  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
-  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  ~ GNU General Public License for more details.
-  ~
-  ~ You should have received a copy of the GNU General Public License
-  ~ along with this program.  If not, see <http://www.gnu.org/licenses/>.
-  -->
-
-<vector android:autoMirrored="true" android:height="24dp"
-    android:viewportHeight="24.0" android:viewportWidth="24.0"
-    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
-    <path android:fillColor="#FFFFFF" android:pathData="M20,2L4,2c-1.1,0 -1.99,0.9 -1.99,2L2,22l4,-4h14c1.1,0 2,-0.9 2,-2L22,4c0,-1.1 -0.9,-2 -2,-2zM6,9h12v2L6,11L6,9zM14,14L6,14v-2h8v2zM18,8L6,8L6,6h12v2z"/>
-</vector>

+ 0 - 25
app/src/main/res/drawable/ic_info_black_24dp.xml

@@ -1,25 +0,0 @@
-<!--
-  ~ Nextcloud Talk application
-  ~
-  ~ @author Mario Danic
-  ~ Copyright (C) 2017-2018 Mario Danic <mario@lovelyhq.com>
-  ~
-  ~ This program is free software: you can redistribute it and/or modify
-  ~ it under the terms of the GNU General Public License as published by
-  ~ the Free Software Foundation, either version 3 of the License, or
-  ~ at your option) any later version.
-  ~
-  ~ This program is distributed in the hope that it will be useful,
-  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
-  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  ~ GNU General Public License for more details.
-  ~
-  ~ You should have received a copy of the GNU General Public License
-  ~ along with this program.  If not, see <http://www.gnu.org/licenses/>.
-  -->
-
-<vector android:autoMirrored="true" android:height="24dp"
-    android:tint="#FFFFFF" android:viewportHeight="24.0"
-    android:viewportWidth="24.0" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
-    <path android:fillColor="#FF000000" android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM13,17h-2v-6h2v6zM13,9h-2L11,7h2v2z"/>
-</vector>

+ 0 - 26
app/src/main/res/drawable/ic_lock_black_24px.xml

@@ -1,26 +0,0 @@
-<!--
-  ~ Nextcloud Talk application
-  ~
-  ~ @author Mario Danic
-  ~ Copyright (C) 2017-2018 Mario Danic <mario@lovelyhq.com>
-  ~
-  ~ This program is free software: you can redistribute it and/or modify
-  ~ it under the terms of the GNU General Public License as published by
-  ~ the Free Software Foundation, either version 3 of the License, or
-  ~ at your option) any later version.
-  ~
-  ~ This program is distributed in the hope that it will be useful,
-  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
-  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  ~ GNU General Public License for more details.
-  ~
-  ~ You should have received a copy of the GNU General Public License
-  ~ along with this program.  If not, see <http://www.gnu.org/licenses/>.
-  -->
-
-<vector android:autoMirrored="true" android:height="24dp"
-    android:viewportHeight="24.0" android:viewportWidth="24.0"
-    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
-    <path android:fillColor="#000000"
-          android:pathData="M18,8h-1L17,6c0,-2.76 -2.24,-5 -5,-5S7,3.24 7,6v2L6,8c-1.1,0 -2,0.9 -2,2v10c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2L20,10c0,-1.1 -0.9,-2 -2,-2zM12,17c-1.1,0 -2,-0.9 -2,-2s0.9,-2 2,-2 2,0.9 2,2 -0.9,2 -2,2zM15.1,8L8.9,8L8.9,6c0,-1.71 1.39,-3.1 3.1,-3.1 1.71,0 3.1,1.39 3.1,3.1v2z"/>
-</vector>

+ 6 - 37
app/src/main/res/drawable/ic_logo.xml

@@ -1,37 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Nextcloud Talk application
-  ~
-  ~ @author Mario Danic
-  ~ Copyright (C) 2018 Mario Danic
-  ~
-  ~ This program is free software: you can redistribute it and/or modify
-  ~ it under the terms of the GNU General Public License as published by
-  ~ the Free Software Foundation, either version 3 of the License, or
-  ~ at your option) any later version.
-  ~
-  ~ This program is distributed in the hope that it will be useful,
-  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
-  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  ~ GNU General Public License for more details.
-  ~
-  ~ You should have received a copy of the GNU General Public License
-  ~ along with this program.  If not, see <http://www.gnu.org/licenses/>.
-  -->
-
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="16dp"
-    android:height="16dp"
-    android:viewportWidth="16"
-    android:viewportHeight="16">
-
-    <path
-        android:fillColor="#fff"
-        android:strokeWidth="0.14"
-        android:pathData="M7.9992,0.999 A6.9994,6.9993,0,0,0,1,7.9986 A6.9994,6.9993,0,0,0,7.9992,14.998
-A6.9994,6.9993,0,0,0,11.63,13.974 C12.4902,14.3158,14.4171,15.33,14.8757,14.8919
-C15.3549,14.4343,14.3131,12.2803,14.0633,11.4799
-A6.9994,6.9993,0,0,0,14.9983,7.9985 A6.9994,6.9993,0,0,0,7.9992,0.9992 Z
-M8,3.6601 A4.3401,4.34,0,0,1,12.34,8.0002 A4.3401,4.34,0,0,1,8,12.34
-A4.3401,4.34,0,0,1,3.66,8.0002 A4.3401,4.34,0,0,1,8,3.6601 Z" />
-</vector>
+<vector android:autoMirrored="true" android:height="24dp"
+    android:viewportHeight="128" android:viewportWidth="128"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#ffffff"
+        android:pathData="M63.992,0.689C29.031,0.689 0.691,29.031 0.692,63.992c0,34.96 28.34,63.301 63.3,63.302 6.982,-0.014 13.881,-1.183 20.426,-3.43 4.317,-1.482 8.48,-3.433 12.411,-5.831 3.383,1.344 8.59,3.838 13.736,5.902 6.688,2.683 13.274,4.639 15.618,2.399 2.317,-2.212 0.703,-8.809 -1.647,-15.575 -2.046,-5.892 -4.649,-11.913 -5.701,-15.282 2.544,-4.415 4.535,-9.101 5.945,-13.954 1.648,-5.674 2.5,-11.574 2.512,-17.532C127.291,29.032 98.952,0.692 63.992,0.691ZM63.999,24.756l0.001,0c21.677,0 39.25,17.573 39.25,39.251 -0.001,21.677 -17.574,39.249 -39.251,39.249 -21.676,0 -39.249,-17.572 -39.25,-39.249 0,-21.678 17.573,-39.251 39.25,-39.251z" android:strokeWidth="4.78543139"/>
+</vector>

+ 0 - 37
app/src/main/res/drawable/ic_logo_blue.xml

@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Nextcloud Talk application
-  ~
-  ~ @author Mario Danic
-  ~ Copyright (C) 2017-2018 Mario Danic <mario@lovelyhq.com>
-  ~
-  ~ This program is free software: you can redistribute it and/or modify
-  ~ it under the terms of the GNU General Public License as published by
-  ~ the Free Software Foundation, either version 3 of the License, or
-  ~ at your option) any later version.
-  ~
-  ~ This program is distributed in the hope that it will be useful,
-  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
-  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  ~ GNU General Public License for more details.
-  ~
-  ~ You should have received a copy of the GNU General Public License
-  ~ along with this program.  If not, see <http://www.gnu.org/licenses/>.
-  -->
-
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="24dp"
-    android:height="24dp"
-    android:viewportWidth="24"
-    android:viewportHeight="24">
-
-    <path
-        android:fillColor="#0082C9"
-        android:strokeWidth="0.14"
-        android:pathData="M7.9992,0.999 A6.9994,6.9993,0,0,0,1,7.9986 A6.9994,6.9993,0,0,0,7.9992,14.998
-A6.9994,6.9993,0,0,0,11.63,13.974 C12.4902,14.3158,14.4171,15.33,14.8757,14.8919
-C15.3549,14.4343,14.3131,12.2803,14.0633,11.4799
-A6.9994,6.9993,0,0,0,14.9983,7.9985 A6.9994,6.9993,0,0,0,7.9992,0.9992 Z
-M8,3.6601 A4.3401,4.34,0,0,1,12.34,8.0002 A4.3401,4.34,0,0,1,8,12.34
-A4.3401,4.34,0,0,1,3.66,8.0002 A4.3401,4.34,0,0,1,8,3.6601 Z" />
-</vector>

+ 0 - 25
app/src/main/res/drawable/ic_notifications_black_24dp.xml

@@ -1,25 +0,0 @@
-<!--
-  ~ Nextcloud Talk application
-  ~
-  ~ @author Mario Danic
-  ~ Copyright (C) 2017 Mario Danic <mario@lovelyhq.com>
-  ~
-  ~ This program is free software: you can redistribute it and/or modify
-  ~ it under the terms of the GNU General Public License as published by
-  ~ the Free Software Foundation, either version 3 of the License, or
-  ~ at your option) any later version.
-  ~
-  ~ This program is distributed in the hope that it will be useful,
-  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
-  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  ~ GNU General Public License for more details.
-  ~
-  ~ You should have received a copy of the GNU General Public License
-  ~ along with this program.  If not, see <http://www.gnu.org/licenses/>.
-  -->
-
-<vector android:autoMirrored="true" android:height="24dp"
-    android:viewportHeight="24.0" android:viewportWidth="24.0"
-    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
-    <path android:fillColor="#FF000000" android:pathData="M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.89,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z"/>
-</vector>

+ 0 - 25
app/src/main/res/drawable/ic_notifications_white_24dp.xml

@@ -1,25 +0,0 @@
-<!--
-  ~ Nextcloud Talk application
-  ~
-  ~ @author Mario Danic
-  ~ Copyright (C) 2017-2018 Mario Danic <mario@lovelyhq.com>
-  ~
-  ~ This program is free software: you can redistribute it and/or modify
-  ~ it under the terms of the GNU General Public License as published by
-  ~ the Free Software Foundation, either version 3 of the License, or
-  ~ at your option) any later version.
-  ~
-  ~ This program is distributed in the hope that it will be useful,
-  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
-  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  ~ GNU General Public License for more details.
-  ~
-  ~ You should have received a copy of the GNU General Public License
-  ~ along with this program.  If not, see <http://www.gnu.org/licenses/>.
-  -->
-
-<vector android:autoMirrored="true" android:height="24dp"
-    android:viewportHeight="24.0" android:viewportWidth="24.0"
-    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
-    <path android:fillColor="#FFFFFF" android:pathData="M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.89,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z"/>
-</vector>

+ 0 - 29
app/src/main/res/drawable/ic_person_black_24dp.xml

@@ -1,29 +0,0 @@
-<!--
-  ~ Nextcloud Talk application
-  ~
-  ~ @author Mario Danic
-  ~ Copyright (C) 2017 Mario Danic
-  ~
-  ~ This program is free software: you can redistribute it and/or modify
-  ~ it under the terms of the GNU General Public License as published by
-  ~ the Free Software Foundation, either version 3 of the License, or
-  ~ at your option) any later version.
-  ~
-  ~ This program is distributed in the hope that it will be useful,
-  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
-  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  ~ GNU General Public License for more details.
-  ~
-  ~ You should have received a copy of the GNU General Public License
-  ~ along with this program.  If not, see <http://www.gnu.org/licenses/>.
-  -->
-
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0">
-    <path
-        android:fillColor="#FF000000"
-        android:pathData="M12,12c2.21,0 4,-1.79 4,-4s-1.79,-4 -4,-4 -4,1.79 -4,4 1.79,4 4,4zM12,14c-2.67,0 -8,1.34 -8,4v2h16v-2c0,-2.66 -5.33,-4 -8,-4z"/>
-</vector>

+ 0 - 26
app/src/main/res/drawable/ic_public_white_24px.xml

@@ -1,26 +0,0 @@
-<!--
-  ~ Nextcloud Talk application
-  ~
-  ~ @author Mario Danic
-  ~ Copyright (C) 2017-2018 Mario Danic <mario@lovelyhq.com>
-  ~
-  ~ This program is free software: you can redistribute it and/or modify
-  ~ it under the terms of the GNU General Public License as published by
-  ~ the Free Software Foundation, either version 3 of the License, or
-  ~ at your option) any later version.
-  ~
-  ~ This program is distributed in the hope that it will be useful,
-  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
-  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  ~ GNU General Public License for more details.
-  ~
-  ~ You should have received a copy of the GNU General Public License
-  ~ along with this program.  If not, see <http://www.gnu.org/licenses/>.
-  -->
-
-<vector android:autoMirrored="true" android:height="24dp"
-    android:viewportHeight="16.0" android:viewportWidth="16.0"
-    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
-    <path android:fillColor="#FFFFFFFF"
-          android:pathData="m9.236,2.166 l-3.182,3.184c-0.707,0.707 -1.038,1.618 -0.988,2.457 0.05,0.839 0.433,1.584 0.988,2.139l1.412,-1.416c-0.567,-0.567 -0.544,-1.219 0.002,-1.766l3.181,-3.182c0.525,-0.525 1.251,-0.523 1.772,-0.002 0.482,0.556 0.527,1.238 -0.004,1.77l-0.82,0.82c0.555,0.785 0.645,1.366 0.593,2.234l1.641,-1.641c1.237,-1.237 1.237,-3.365 0,-4.602 -1.236,-1.236 -3.342,-1.211 -4.596,0.004zM9.943,6.051 L8.529,7.469c0,0 0.003,0 0.004,0 0.55,0.55 0.507,1.258 -0.004,1.77l-3.182,3.182c-0.696,0.592 -1.298,0.471 -1.77,0 -0.626,-0.626 -0.5,-1.268 0,-1.768l0.85,-0.847c-0.556,-0.784 -0.648,-1.365 -0.598,-2.232l-1.666,1.666c-1.239,1.239 -1.236,3.36 0,4.596 1.235,1.235 3.362,1.236 4.598,0l3.182,-3.182c0.709,-0.708 1.04,-1.618 0.991,-2.459 -0.048,-0.84 -0.432,-1.586 -0.989,-2.141z"/>
-</vector>

+ 2 - 2
app/src/main/res/drawable/ic_settings_black_24dp.xml → app/src/main/res/drawable/ic_settings_white_24dp.xml

@@ -2,7 +2,7 @@
   ~ Nextcloud Talk application
   ~
   ~ @author Mario Danic
-  ~ Copyright (C) 2017 Mario Danic
+  ~ Copyright (C) 2017-2018 Mario Danic <mario@lovelyhq.com>
   ~
   ~ This program is free software: you can redistribute it and/or modify
   ~ it under the terms of the GNU General Public License as published by
@@ -22,6 +22,6 @@
     android:autoMirrored="true" android:height="24dp"
     android:viewportHeight="24.0" android:viewportWidth="24.0"
     android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
-    <path android:fillColor="#FF000000" android:pathData="M19.43,12.98c0.04,-0.32 0.07,-0.64 0.07,-0.98s-0.03,-0.66 -0.07,-0.98l2.11,-1.65c0.19,-0.15 0.24,-0.42 0.12,-0.64l-2,-3.46c-0.12,-0.22 -0.39,-0.3 -0.61,-0.22l-2.49,1c-0.52,-0.4 -1.08,-0.73 -1.69,-0.98l-0.38,-2.65C14.46,2.18 14.25,2 14,2h-4c-0.25,0 -0.46,0.18 -0.49,0.42l-0.38,2.65c-0.61,0.25 -1.17,0.59 -1.69,0.98l-2.49,-1c-0.23,-0.09 -0.49,0 -0.61,0.22l-2,3.46c-0.13,0.22 -0.07,0.49 0.12,0.64l2.11,1.65c-0.04,0.32 -0.07,0.65 -0.07,0.98s0.03,0.66 0.07,0.98l-2.11,1.65c-0.19,0.15 -0.24,0.42 -0.12,0.64l2,3.46c0.12,0.22 0.39,0.3 0.61,0.22l2.49,-1c0.52,0.4 1.08,0.73 1.69,0.98l0.38,2.65c0.03,0.24 0.24,0.42 0.49,0.42h4c0.25,0 0.46,-0.18 0.49,-0.42l0.38,-2.65c0.61,-0.25 1.17,-0.59 1.69,-0.98l2.49,1c0.23,0.09 0.49,0 0.61,-0.22l2,-3.46c0.12,-0.22 0.07,-0.49 -0.12,-0.64l-2.11,-1.65zM12,15.5c-1.93,0 -3.5,-1.57 -3.5,-3.5s1.57,-3.5 3.5,-3.5 3.5,1.57 3.5,3.5 -1.57,3.5 -3.5,3.5z"
+    <path android:fillColor="#FFFFFF" android:pathData="M19.43,12.98c0.04,-0.32 0.07,-0.64 0.07,-0.98s-0.03,-0.66 -0.07,-0.98l2.11,-1.65c0.19,-0.15 0.24,-0.42 0.12,-0.64l-2,-3.46c-0.12,-0.22 -0.39,-0.3 -0.61,-0.22l-2.49,1c-0.52,-0.4 -1.08,-0.73 -1.69,-0.98l-0.38,-2.65C14.46,2.18 14.25,2 14,2h-4c-0.25,0 -0.46,0.18 -0.49,0.42l-0.38,2.65c-0.61,0.25 -1.17,0.59 -1.69,0.98l-2.49,-1c-0.23,-0.09 -0.49,0 -0.61,0.22l-2,3.46c-0.13,0.22 -0.07,0.49 0.12,0.64l2.11,1.65c-0.04,0.32 -0.07,0.65 -0.07,0.98s0.03,0.66 0.07,0.98l-2.11,1.65c-0.19,0.15 -0.24,0.42 -0.12,0.64l2,3.46c0.12,0.22 0.39,0.3 0.61,0.22l2.49,-1c0.52,0.4 1.08,0.73 1.69,0.98l0.38,2.65c0.03,0.24 0.24,0.42 0.49,0.42h4c0.25,0 0.46,-0.18 0.49,-0.42l0.38,-2.65c0.61,-0.25 1.17,-0.59 1.69,-0.98l2.49,1c0.23,0.09 0.49,0 0.61,-0.22l2,-3.46c0.12,-0.22 0.07,-0.49 -0.12,-0.64l-2.11,-1.65zM12,15.5c-1.93,0 -3.5,-1.57 -3.5,-3.5s1.57,-3.5 3.5,-3.5 3.5,1.57 3.5,3.5 -1.57,3.5 -3.5,3.5z"
         tools:ignore="VectorPath" />
 </vector>

+ 0 - 25
app/src/main/res/drawable/ic_videocam_black_24dp.xml

@@ -1,25 +0,0 @@
-<!--
-  ~ Nextcloud Talk application
-  ~
-  ~ @author Mario Danic
-  ~ Copyright (C) 2017 Mario Danic <mario@lovelyhq.com>
-  ~
-  ~ This program is free software: you can redistribute it and/or modify
-  ~ it under the terms of the GNU General Public License as published by
-  ~ the Free Software Foundation, either version 3 of the License, or
-  ~ at your option) any later version.
-  ~
-  ~ This program is distributed in the hope that it will be useful,
-  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
-  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  ~ GNU General Public License for more details.
-  ~
-  ~ You should have received a copy of the GNU General Public License
-  ~ along with this program.  If not, see <http://www.gnu.org/licenses/>.
-  -->
-
-<vector android:autoMirrored="true" android:height="24dp"
-    android:viewportHeight="24.0" android:viewportWidth="24.0"
-    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
-    <path android:fillColor="#FF000000" android:pathData="M17,10.5V7c0,-0.55 -0.45,-1 -1,-1H4c-0.55,0 -1,0.45 -1,1v10c0,0.55 0.45,1 1,1h12c0.55,0 1,-0.45 1,-1v-3.5l4,4v-11l-4,4z"/>
-</vector>

+ 7 - 8
app/src/main/res/layout/activity_magic_call.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ~ Nextcloud Talk application
   ~
   ~ @author Mario Danic
@@ -20,15 +19,15 @@
   -->
 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-                xmlns:tools="http://schemas.android.com/tools"
-                android:layout_width="match_parent"
-                android:layout_height="match_parent"
-                android:fitsSystemWindows="true"
-                tools:context=".activities.MagicCallActivity">
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:fitsSystemWindows="true"
+    tools:context=".activities.MagicCallActivity">
 
     <com.bluelinelabs.conductor.ChangeHandlerFrameLayout
         android:id="@+id/controller_container"
         android:layout_width="match_parent"
-        android:layout_height="match_parent"/>
+        android:layout_height="match_parent" />
 
 </RelativeLayout>

+ 6 - 8
app/src/main/res/layout/activity_main.xml

@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<androidx.coordinatorlayout.widget.CoordinatorLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
@@ -8,7 +7,6 @@
     tools:context=".activities.MainActivity">
 
     <com.google.android.material.appbar.AppBarLayout
-        android:id="@+id/appBarLayout"
         android:layout_width="match_parent"
         android:layout_height="wrap_content">
 
@@ -16,16 +14,16 @@
             android:id="@+id/toolbar"
             android:layout_width="match_parent"
             android:layout_height="?android:attr/actionBarSize"
-            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
-            />
-
+            android:theme="@style/ThemeOverlay.MaterialComponents.Dark.ActionBar"
+            app:titleMarginStart="0dp"
+            app:contentInsetStartWithNavigation="0dp"
+            app:contentInsetStart="24dp" />
     </com.google.android.material.appbar.AppBarLayout>
 
     <com.bluelinelabs.conductor.ChangeHandlerFrameLayout
         android:id="@+id/controller_container"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        app:layout_behavior="@string/appbar_scrolling_view_behavior"
-        />
+        app:layout_behavior="@string/appbar_scrolling_view_behavior" />
 
 </androidx.coordinatorlayout.widget.CoordinatorLayout>

+ 6 - 8
app/src/main/res/layout/bottom_sheet.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ~ Nextcloud Talk application
   ~
   ~ @author Mario Danic
@@ -20,12 +19,11 @@
   -->
 
 <com.bluelinelabs.conductor.ChangeHandlerFrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-                                                     xmlns:app="http://schemas.android.com/apk/res-auto"
-                                                     android:id="@+id/bottom_sheet"
-                                                     android:layout_width="match_parent"
-                                                     android:layout_height="wrap_content"
-                                                     android:background="@color/white"
-                                                     app:layout_behavior="@string/appbar_scrolling_view_behavior">
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="@color/white"
+    app:layout_behavior="@string/appbar_scrolling_view_behavior">
 
 
 </com.bluelinelabs.conductor.ChangeHandlerFrameLayout>

+ 15 - 16
app/src/main/res/layout/call_item.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ~ Nextcloud Talk application
   ~
   ~ @author Mario Danic
@@ -20,23 +19,23 @@
   -->
 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-                android:id="@+id/relative_layout"
-                android:layout_width="match_parent"
-                android:layout_height="match_parent"
-                android:layout_weight="1"
-                android:orientation="vertical">
+    android:id="@+id/relative_layout"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:layout_weight="1"
+    android:orientation="vertical">
 
     <org.webrtc.SurfaceViewRenderer
         android:id="@+id/surface_view"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:visibility="invisible"/>
+        android:visibility="invisible" />
 
     <ImageView
         android:id="@+id/avatarImageView"
         android:layout_width="80dp"
         android:layout_height="80dp"
-        android:layout_centerInParent="true"/>
+        android:layout_centerInParent="true" />
 
     <TextView
         android:id="@+id/peer_nick_text_view"
@@ -44,21 +43,21 @@
         android:layout_height="wrap_content"
         android:layout_alignParentStart="true"
         android:layout_alignParentTop="true"
-        android:layout_marginBottom="8dp"
-        android:layout_marginEnd="8dp"
         android:layout_marginStart="8dp"
-        android:textColor="@android:color/white"/>
+        android:layout_marginEnd="8dp"
+        android:layout_marginBottom="8dp"
+        android:textColor="@android:color/white" />
 
     <ImageView
         android:id="@+id/remote_audio_off"
         android:layout_width="16dp"
         android:layout_height="16dp"
-        android:layout_alignParentStart="true"
         android:layout_below="@id/peer_nick_text_view"
-        android:layout_marginEnd="8dp"
+        android:layout_alignParentStart="true"
         android:layout_marginStart="8dp"
+        android:layout_marginEnd="8dp"
         android:src="@drawable/ic_mic_off_white_24px"
-        android:visibility="invisible"/>
+        android:visibility="invisible" />
 
     <ImageView
         android:id="@+id/remote_video_off"
@@ -68,6 +67,6 @@
         android:layout_marginStart="8dp"
         android:layout_toEndOf="@id/remote_audio_off"
         android:src="@drawable/ic_videocam_off_white_24px"
-        android:visibility="invisible"/>
+        android:visibility="invisible" />
 
 </RelativeLayout>

+ 13 - 14
app/src/main/res/layout/controller_account_verification.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ~ Nextcloud Talk application
   ~
   ~ @author Mario Danic
@@ -20,25 +19,25 @@
   -->
 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-                xmlns:tools="http://schemas.android.com/tools"
-                android:layout_width="match_parent"
-                android:layout_height="match_parent"
-                android:background="@color/nc_white_color"
-                android:keepScreenOn="true">
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/nc_white_color"
+    android:keepScreenOn="true">
 
     <ProgressBar
         android:id="@+id/progress_bar"
         android:layout_width="@dimen/item_height"
         android:layout_height="@dimen/item_height"
         android:layout_centerInParent="true"
-        android:layout_marginEnd="@dimen/activity_horizontal_margin"
+        android:layout_marginStart="@dimen/activity_horizontal_margin"
         android:layout_marginLeft="@dimen/activity_horizontal_margin"
+        android:layout_marginEnd="@dimen/activity_horizontal_margin"
         android:layout_marginRight="@dimen/activity_horizontal_margin"
-        android:layout_marginStart="@dimen/activity_horizontal_margin"
         android:indeterminate="true"
         android:indeterminateTint="@color/colorPrimary"
         android:indeterminateTintMode="src_in"
-        android:keepScreenOn="true"/>
+        android:keepScreenOn="true" />
 
     <TextView
         android:id="@+id/progress_text"
@@ -47,13 +46,13 @@
         android:layout_below="@+id/progress_bar"
         android:layout_centerHorizontal="true"
         android:layout_centerVertical="true"
-        android:layout_marginEnd="@dimen/activity_horizontal_margin"
-        android:layout_marginLeft="@dimen/activity_horizontal_margin"
-        android:layout_marginRight="@dimen/activity_horizontal_margin"
         android:layout_marginStart="@dimen/activity_horizontal_margin"
+        android:layout_marginLeft="@dimen/activity_horizontal_margin"
         android:layout_marginTop="@dimen/padding_between_elements"
+        android:layout_marginEnd="@dimen/activity_horizontal_margin"
+        android:layout_marginRight="@dimen/activity_horizontal_margin"
         android:textAlignment="center"
         android:textSize="18sp"
-        tools:text="Verifying..."/>
+        tools:text="Verifying..." />
 
 </RelativeLayout>

+ 0 - 24
app/src/main/res/layout/controller_bottom_navigation.xml

@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<androidx.coordinatorlayout.widget.CoordinatorLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:id="@+id/bottom_navigation_root"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:orientation="vertical">
-
-    <com.bluelinelabs.conductor.ChangeHandlerFrameLayout
-        android:id="@+id/bottom_navigation_controller_container"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:layout_gravity="top"
-        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
-
-    <com.google.android.material.bottomnavigation.BottomNavigationView
-        android:id="@+id/navigation"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_gravity="bottom"
-        android:animateLayoutChanges="true"
-        android:background="@color/white"/>
-</androidx.coordinatorlayout.widget.CoordinatorLayout>

+ 6 - 7
app/src/main/res/layout/controller_call_menu.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ~ Nextcloud Talk application
   ~
   ~ @author Mario Danic
@@ -20,16 +19,16 @@
   -->
 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-                xmlns:tools="http://schemas.android.com/tools"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:background="@color/nc_white_color">
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="@color/nc_white_color">
 
     <androidx.recyclerview.widget.RecyclerView
         android:id="@+id/recycler_view"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        tools:listitem="@layout/rv_item_conversation"/>
+        tools:listitem="@layout/rv_item_conversation" />
 
 
 </RelativeLayout>

+ 20 - 16
app/src/main/res/layout/controller_call_notification.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ~ Nextcloud Talk application
   ~
   ~ @author Mario Danic
@@ -19,17 +18,22 @@
   ~ along with this program.  If not, see <http://www.gnu.org/licenses/>.
   -->
 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
-                                             xmlns:app="http://schemas.android.com/apk/res-auto"
-                                             xmlns:tools="http://schemas.android.com/tools"
-                                             android:id="@+id/constraintLayout"
-                                             android:layout_width="match_parent"
-                                             android:layout_height="match_parent"
-                                             android:background="@color/grey950">
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <ImageView
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:id="@+id/backgroundImageView"
+        android:src="@color/grey950"
+        android:scaleType="centerCrop"/>
 
     <RelativeLayout
+        android:id="@+id/incomingTextRelativeLayout"
         android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:id="@+id/incomingTextRelativeLayout">
+        android:layout_height="wrap_content">
 
         <TextView
             android:id="@+id/incomingCallTextView"
@@ -42,7 +46,7 @@
             android:textSize="16sp"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toTopOf="parent"/>
+            app:layout_constraintTop_toTopOf="parent" />
 
         <TextView
             android:id="@+id/conversationNameTextView"
@@ -54,7 +58,7 @@
             android:textAlignment="center"
             android:textColor="@color/white"
             android:textSize="28sp"
-            tools:text="Victor Gregorius Magnus"/>
+            tools:text="Victor Gregorius Magnus" />
 
     </RelativeLayout>
 
@@ -67,7 +71,7 @@
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintVertical_bias="0.45"
-        tools:src="@color/white"/>
+        tools:src="@color/white" />
 
     <LinearLayout
         android:layout_width="wrap_content"
@@ -86,7 +90,7 @@
             app:checked="false"
             app:enableInitialAnimation="false"
             app:frontBackgroundColor="@color/colorPrimary"
-            app:frontImage="@drawable/ic_mic_white_24px"/>
+            app:frontImage="@drawable/ic_mic_white_24px" />
 
         <com.nextcloud.talk.utils.MagicFlipView
             android:id="@+id/callControlHangupView"
@@ -96,7 +100,7 @@
             app:checked="false"
             app:enableInitialAnimation="false"
             app:frontBackgroundColor="@color/nc_darkRed"
-            app:frontImage="@drawable/ic_call_end_white_24px"/>
+            app:frontImage="@drawable/ic_call_end_white_24px" />
 
         <com.nextcloud.talk.utils.MagicFlipView
             android:id="@+id/callAnswerCameraView"
@@ -107,7 +111,7 @@
             app:checked="false"
             app:enableInitialAnimation="false"
             app:frontBackgroundColor="@color/colorPrimary"
-            app:frontImage="@drawable/ic_videocam_white_24px"/>
+            app:frontImage="@drawable/ic_videocam_white_24px" />
     </LinearLayout>
 
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 16 - 17
app/src/main/res/layout/controller_chat.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ~ Nextcloud Talk application
   ~
   ~ @author Mario Danic
@@ -20,23 +19,23 @@
   -->
 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-                xmlns:app="http://schemas.android.com/apk/res-auto"
-                android:layout_width="match_parent"
-                android:layout_height="match_parent">
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
 
     <ProgressBar
         android:id="@+id/progressBar"
         android:layout_width="@dimen/item_height"
         android:layout_height="@dimen/item_height"
         android:layout_centerInParent="true"
-        android:layout_marginEnd="@dimen/activity_horizontal_margin"
+        android:layout_marginStart="@dimen/activity_horizontal_margin"
         android:layout_marginLeft="@dimen/activity_horizontal_margin"
+        android:layout_marginEnd="@dimen/activity_horizontal_margin"
         android:layout_marginRight="@dimen/activity_horizontal_margin"
-        android:layout_marginStart="@dimen/activity_horizontal_margin"
         android:indeterminate="true"
         android:indeterminateTint="@color/colorPrimary"
         android:indeterminateTintMode="src_in"
-        android:visibility="gone"/>
+        android:visibility="gone" />
 
     <RelativeLayout
         android:id="@+id/emptyLayout"
@@ -51,7 +50,7 @@
             android:layout_centerInParent="true"
             android:text="👋"
             android:textAlignment="center"
-            android:textSize="72sp"/>
+            android:textSize="72sp" />
 
         <TextView
             android:id="@+id/sendHiTextView"
@@ -60,7 +59,7 @@
             android:layout_below="@+id/wawingTextView"
             android:layout_margin="8dp"
             android:textAlignment="center"
-            android:textSize="20sp"/>
+            android:textSize="20sp" />
     </RelativeLayout>
 
     <com.stfalcon.chatkit.messages.MessagesList
@@ -77,6 +76,7 @@
         app:incomingDefaultBubbleColor="@color/white_two"
         app:incomingDefaultBubblePressedColor="@color/white_two"
         app:incomingDefaultBubbleSelectedColor="@color/transparent"
+        app:incomingImageTimeTextSize="12sp"
         app:incomingTextColor="@color/nc_incoming_text_default"
         app:incomingTextLinkColor="@color/nc_incoming_text_default"
         app:incomingTextSize="@dimen/chat_text_size"
@@ -88,13 +88,12 @@
         app:outcomingDefaultBubbleColor="@color/colorPrimary"
         app:outcomingDefaultBubblePressedColor="@color/colorPrimary"
         app:outcomingDefaultBubbleSelectedColor="@color/transparent"
+        app:outcomingImageTimeTextSize="12sp"
         app:outcomingTextColor="@color/nc_outcoming_text_default"
         app:outcomingTextLinkColor="@color/nc_outcoming_text_default"
         app:outcomingTextSize="@dimen/chat_text_size"
         app:outcomingTimeTextSize="12sp"
-        app:outcomingImageTimeTextSize="12sp"
-        app:incomingImageTimeTextSize="12sp"
-        app:textAutoLink="all"/>
+        app:textAutoLink="all" />
 
     <com.webianks.library.PopupBubble
         android:id="@+id/popupBubbleView"
@@ -107,7 +106,7 @@
         app:pb_backgroundColor="@color/colorPrimary"
         app:pb_icon="@drawable/ic_baseline_arrow_downward_24px"
         app:pb_text="@string/nc_new_messages"
-        app:pb_textColor="@color/white"/>
+        app:pb_textColor="@color/white" />
 
     <View
         android:id="@+id/separator"
@@ -116,15 +115,15 @@
         android:layout_above="@+id/messageInputView"
         android:layout_marginLeft="16dp"
         android:layout_marginRight="16dp"
-        android:background="@color/nc_light_grey"/>
+        android:background="@color/nc_light_grey" />
 
     <com.stfalcon.chatkit.messages.MessageInput
         android:id="@+id/messageInputView"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_alignParentBottom="true"
-        android:maxLength="1000"
         android:inputType="textLongMessage|textAutoComplete"
+        android:maxLength="1000"
         app:inputButtonDefaultBgColor="@color/colorPrimary"
         app:inputButtonDefaultBgPressedColor="@color/colorPrimaryDark"
         app:inputButtonHeight="30dp"
@@ -132,6 +131,6 @@
         app:inputButtonWidth="30dp"
         app:inputHint="@string/nc_hint_enter_a_message"
         app:inputTextColor="@color/black"
-        app:inputTextSize="16sp"/>
+        app:inputTextSize="16sp" />
 
 </RelativeLayout>

+ 5 - 1
app/src/main/res/layout/controller_contacts_rv.xml

@@ -37,7 +37,11 @@
         android:indeterminateTintMode="src_in" />
 
     <include
-        layout="@layout/rv_item_call_header"
+        layout="@layout/join_conversation_via_link"
+        android:visibility="gone" />
+
+    <include
+        layout="@layout/conversation_privacy_toggle"
         android:visibility="gone" />
 
     <include

+ 26 - 15
app/src/main/res/layout/controller_conversations_rv.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ~ Nextcloud Talk application
   ~
   ~ @author Mario Danic
@@ -20,24 +19,25 @@
   -->
 
 <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
-                                                 xmlns:tools="http://schemas.android.com/tools"
-                                                 android:id="@+id/generic_rv_layout"
-                                                 android:layout_width="match_parent"
-                                                 android:layout_height="match_parent"
-                                                 android:background="@color/nc_white_color">
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/generic_rv_layout"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/nc_white_color">
 
     <ProgressBar
         android:id="@+id/progressBar"
         android:layout_width="@dimen/item_height"
         android:layout_height="@dimen/item_height"
         android:layout_gravity="center"
-        android:layout_marginEnd="@dimen/activity_horizontal_margin"
+        android:layout_marginStart="@dimen/activity_horizontal_margin"
         android:layout_marginLeft="@dimen/activity_horizontal_margin"
+        android:layout_marginEnd="@dimen/activity_horizontal_margin"
         android:layout_marginRight="@dimen/activity_horizontal_margin"
-        android:layout_marginStart="@dimen/activity_horizontal_margin"
         android:indeterminate="true"
         android:indeterminateTint="@color/colorPrimary"
-        android:indeterminateTintMode="src_in"/>
+        android:indeterminateTintMode="src_in" />
 
     <RelativeLayout
         android:id="@+id/emptyLayout"
@@ -50,7 +50,8 @@
             android:layout_width="72dp"
             android:layout_height="72dp"
             android:layout_centerInParent="true"
-            android:background="@drawable/ic_logo_blue"/>
+            android:background="@drawable/ic_logo"
+            android:tint="@color/colorPrimary"/>
 
         <TextView
             android:id="@+id/sendHiTextView"
@@ -60,14 +61,15 @@
             android:layout_margin="8dp"
             android:text="@string/nc_conversations_empty"
             android:textAlignment="center"
-            android:textSize="20sp"/>
+            android:textSize="20sp" />
     </RelativeLayout>
 
     <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
         android:id="@+id/swipeRefreshLayoutView"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:visibility="gone">
+        android:visibility="gone"
+        app:layout_behavior="com.nextcloud.talk.utils.FABAwareScrollingViewBehavior">
 
         <FrameLayout
             android:layout_width="match_parent"
@@ -77,11 +79,20 @@
                 android:id="@+id/recycler_view"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
-                tools:listitem="@layout/rv_item_conversation"/>
+                tools:listitem="@layout/rv_item_conversation" />
 
         </FrameLayout>
 
     </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
 
-    <include layout="@layout/fast_scroller"/>
+    <include layout="@layout/fast_scroller" />
+
+    <com.google.android.material.floatingactionbutton.FloatingActionButton
+        android:id="@+id/floatingActionButton"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="bottom|end"
+        android:layout_margin="16dp"
+        app:srcCompat="@drawable/ic_add_white_24px" />
+
 </androidx.coordinatorlayout.widget.CoordinatorLayout>

+ 13 - 13
app/src/main/res/layout/controller_entry_menu.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ~ Nextcloud Talk application
   ~
   ~ @author Mario Danic
@@ -20,17 +19,17 @@
   -->
 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-                xmlns:app="http://schemas.android.com/apk/res-auto"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:background="@color/nc_white_color">
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="@color/nc_white_color">
 
     <studio.carbonylgroup.textfieldboxes.TextFieldBoxes
         android:id="@+id/text_field_boxes"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_marginEnd="@dimen/activity_horizontal_margin"
         android:layout_marginStart="@dimen/activity_horizontal_margin"
+        android:layout_marginEnd="@dimen/activity_horizontal_margin"
         app:errorColor="@color/nc_darkRed"
         app:helperText=" "
         app:panelBackgroundColor="@color/nc_white_color"
@@ -43,23 +42,24 @@
             android:imeOptions="actionDone"
             android:inputType="textUri"
             android:singleLine="true"
-            android:textColor="@color/colorPrimary"/>
+            android:textColor="@color/colorPrimary" />
 
     </studio.carbonylgroup.textfieldboxes.TextFieldBoxes>
 
-    <Button
+    <com.google.android.material.button.MaterialButton
         android:id="@+id/ok_button"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_alignParentEnd="true"
         android:layout_below="@id/text_field_boxes"
-        android:layout_marginBottom="12dp"
-        android:layout_marginEnd="8dp"
+        android:layout_alignParentEnd="true"
         android:layout_marginTop="8dp"
+        android:layout_marginEnd="8dp"
+        android:layout_marginBottom="12dp"
         android:alpha="0.7"
+        style="@style/Widget.MaterialComponents.Button.TextButton"
         android:background="#0000"
         android:enabled="false"
         android:text="@string/nc_proceed"
-        android:textColor="@color/colorPrimary"/>
+        android:textColor="@color/colorPrimary" />
 
 </RelativeLayout>

+ 8 - 9
app/src/main/res/layout/controller_generic_rv.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ~ Nextcloud Talk application
   ~
   ~ @author Mario Danic
@@ -20,11 +19,11 @@
   -->
 
 <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
-                                                 xmlns:tools="http://schemas.android.com/tools"
-                                                 android:id="@+id/generic_rv_layout"
-                                                 android:layout_width="match_parent"
-                                                 android:layout_height="match_parent"
-                                                 android:background="@color/nc_white_color">
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/generic_rv_layout"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/nc_white_color">
 
     <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
         android:id="@+id/swipe_refresh_layout"
@@ -39,11 +38,11 @@
                 android:id="@+id/recycler_view"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
-                tools:listitem="@layout/rv_item_conversation"/>
+                tools:listitem="@layout/rv_item_conversation" />
 
         </FrameLayout>
 
     </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
 
-    <include layout="@layout/fast_scroller"/>
+    <include layout="@layout/fast_scroller" />
 </androidx.coordinatorlayout.widget.CoordinatorLayout>

+ 21 - 20
app/src/main/res/layout/controller_operations_menu.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ~ Nextcloud Talk application
   ~
   ~ @author Mario Danic
@@ -20,33 +19,33 @@
   -->
 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:background="@color/nc_white_color">
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="@color/nc_white_color">
 
     <ProgressBar
         android:id="@+id/progress_bar"
         android:layout_width="48dp"
         android:layout_height="48dp"
         android:layout_centerInParent="true"
-        android:layout_marginBottom="24dp"
         android:layout_marginTop="24dp"
+        android:layout_marginBottom="24dp"
         android:indeterminate="true"
         android:indeterminateTint="@color/colorPrimary"
         android:indeterminateTintMode="src_in"
-        android:keepScreenOn="true"/>
+        android:keepScreenOn="true" />
 
     <ImageView
         android:id="@+id/result_image_view"
         android:layout_width="48dp"
         android:layout_height="48dp"
         android:layout_centerHorizontal="true"
-        android:layout_marginBottom="8dp"
-        android:layout_marginEnd="24dp"
         android:layout_marginStart="24dp"
         android:layout_marginTop="24dp"
+        android:layout_marginEnd="24dp"
+        android:layout_marginBottom="8dp"
         android:tintMode="src_in"
-        android:visibility="gone"/>
+        android:visibility="gone" />
 
     <TextView
         android:id="@+id/result_text_view"
@@ -54,38 +53,40 @@
         android:layout_height="wrap_content"
         android:layout_below="@id/result_image_view"
         android:layout_centerHorizontal="true"
-        android:layout_marginBottom="12dp"
-        android:layout_marginEnd="24dp"
         android:layout_marginStart="24dp"
+        android:layout_marginEnd="24dp"
+        android:layout_marginBottom="12dp"
         android:maxLines="3"
         android:textAlignment="center"
         android:textColor="@color/colorPrimary"
-        android:visibility="gone"/>
+        android:visibility="gone" />
 
-    <Button
+    <com.google.android.material.button.MaterialButton
         android:id="@+id/ok_button"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_alignParentEnd="true"
         android:layout_below="@id/result_text_view"
-        android:layout_marginBottom="12dp"
+        android:layout_alignParentEnd="true"
         android:layout_marginEnd="8dp"
+        android:layout_marginBottom="12dp"
+        style="@style/Widget.MaterialComponents.Button.TextButton"
         android:background="#0000"
         android:text="@string/nc_ok"
         android:textColor="@color/colorPrimary"
-        android:visibility="gone"/>
+        android:visibility="gone" />
 
-    <Button
+    <com.google.android.material.button.MaterialButton
         android:id="@+id/web_button"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_below="@id/result_text_view"
-        android:layout_marginBottom="12dp"
+        style="@style/Widget.MaterialComponents.Button.TextButton"
         android:layout_marginEnd="8dp"
+        android:layout_marginBottom="12dp"
         android:layout_toStartOf="@id/ok_button"
         android:background="#0000"
         android:text="@string/nc_join_via_web"
         android:textColor="@color/nc_darkGreen"
-        android:visibility="gone"/>
+        android:visibility="gone" />
 
 </RelativeLayout>

+ 16 - 17
app/src/main/res/layout/controller_server_selection.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ~ Nextcloud Talk application
   ~
   ~ @author Mario Danic
@@ -20,29 +19,29 @@
   -->
 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-                xmlns:app="http://schemas.android.com/apk/res-auto"
-                android:layout_width="match_parent"
-                android:layout_height="match_parent"
-                android:background="@color/colorPrimary"
-                android:fitsSystemWindows="true">
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/colorPrimary"
+    android:fitsSystemWindows="true">
 
     <ImageView
         android:id="@+id/image_logo"
         android:layout_width="96dp"
         android:layout_height="96dp"
         android:layout_centerHorizontal="true"
-        android:layout_marginBottom="36dp"
         android:layout_marginTop="92dp"
+        android:layout_marginBottom="36dp"
         android:scaleType="fitXY"
-        app:srcCompat="@drawable/ic_logo"/>
+        app:srcCompat="@drawable/ic_logo" />
 
     <studio.carbonylgroup.textfieldboxes.TextFieldBoxes
         android:id="@+id/text_field_boxes"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_below="@id/image_logo"
-        android:layout_marginEnd="@dimen/activity_horizontal_margin"
         android:layout_marginStart="@dimen/activity_horizontal_margin"
+        android:layout_marginEnd="@dimen/activity_horizontal_margin"
         app:errorColor="@android:color/white"
         app:helperText=" "
         app:labelText="@string/nc_server_url"
@@ -56,7 +55,7 @@
             android:imeOptions="actionDone"
             android:inputType="textUri"
             android:singleLine="true"
-            android:textColor="@android:color/white"/>
+            android:textColor="@android:color/white" />
 
     </studio.carbonylgroup.textfieldboxes.TextFieldBoxes>
 
@@ -66,14 +65,14 @@
         android:layout_height="@dimen/small_item_height"
         android:layout_below="@id/text_field_boxes"
         android:layout_centerHorizontal="true"
-        android:layout_marginEnd="@dimen/activity_horizontal_margin"
         android:layout_marginStart="@dimen/activity_horizontal_margin"
         android:layout_marginTop="24dp"
+        android:layout_marginEnd="@dimen/activity_horizontal_margin"
         android:indeterminate="true"
         android:indeterminateTint="@android:color/white"
         android:indeterminateTintMode="src_in"
         android:keepScreenOn="true"
-        android:visibility="invisible"/>
+        android:visibility="invisible" />
 
     <TextView
         android:id="@+id/helper_text_view"
@@ -81,14 +80,14 @@
         android:layout_height="wrap_content"
         android:layout_below="@id/progress_bar"
         android:layout_centerHorizontal="true"
-        android:layout_marginEnd="@dimen/activity_horizontal_margin"
         android:layout_marginStart="@dimen/activity_horizontal_margin"
         android:layout_marginTop="56dp"
+        android:layout_marginEnd="@dimen/activity_horizontal_margin"
         android:lines="2"
         android:text="@string/nc_get_from_provider"
         android:textAlignment="center"
         android:textAllCaps="true"
-        android:textColor="@color/nc_light_blue_color"/>
+        android:textColor="@color/nc_light_blue_color" />
 
     <TextView
         android:id="@+id/cert_text_view"
@@ -96,13 +95,13 @@
         android:layout_height="wrap_content"
         android:layout_below="@id/helper_text_view"
         android:layout_centerHorizontal="true"
-        android:layout_marginEnd="@dimen/activity_horizontal_margin"
         android:layout_marginStart="@dimen/activity_horizontal_margin"
         android:layout_marginTop="16dp"
+        android:layout_marginEnd="@dimen/activity_horizontal_margin"
         android:lines="2"
         android:text="@string/nc_configure_cert_auth"
         android:textAlignment="center"
         android:textAllCaps="true"
-        android:textColor="@color/nc_light_blue_color"/>
+        android:textColor="@color/nc_light_blue_color" />
 
 </RelativeLayout>

+ 27 - 33
app/src/main/res/layout/controller_settings.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ~ Nextcloud Talk application
   ~
   ~ @author Mario Danic
@@ -20,11 +19,10 @@
   -->
 
 <com.yarolegovich.mp.MaterialPreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
-                                              xmlns:apc="http://schemas.android.com/apk/res-auto"
-                                              android:id="@+id/settings_screen"
-                                              android:layout_width="match_parent"
-                                              android:layout_height="match_parent"
-                                              android:layout_marginBottom="48dp">
+    xmlns:apc="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/settings_screen"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
 
     <com.yarolegovich.mp.MaterialPreferenceCategory
         android:id="@+id/message_view"
@@ -36,7 +34,7 @@
             android:id="@+id/message_text"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:gravity="center"/>
+            android:gravity="center" />
     </com.yarolegovich.mp.MaterialPreferenceCategory>
 
     <com.yarolegovich.mp.MaterialPreferenceCategory
@@ -52,7 +50,7 @@
                 android:id="@+id/avatar_image"
                 android:layout_width="@dimen/avatar_size_big"
                 android:layout_height="@dimen/avatar_size_big"
-                android:layout_centerHorizontal="true"/>
+                android:layout_centerHorizontal="true" />
 
             <TextView
                 android:id="@+id/display_name_text"
@@ -60,7 +58,7 @@
                 android:layout_height="wrap_content"
                 android:layout_below="@id/avatar_image"
                 android:layout_centerHorizontal="true"
-                android:layout_marginTop="@dimen/margin_between_elements"/>
+                android:layout_marginTop="@dimen/margin_between_elements" />
 
             <TextView
                 android:id="@+id/base_url_text"
@@ -68,7 +66,7 @@
                 android:layout_height="wrap_content"
                 android:layout_below="@id/display_name_text"
                 android:layout_centerHorizontal="true"
-                android:layout_margin="4dp"/>
+                android:layout_margin="4dp" />
 
 
             <com.yarolegovich.mp.MaterialStandardPreference
@@ -77,35 +75,35 @@
                 android:layout_height="wrap_content"
                 android:layout_below="@id/base_url_text"
                 android:tag="switchAccountButton"
-                apc:mp_title="@string/nc_settings_switch_account"/>
+                apc:mp_title="@string/nc_settings_switch_account" />
 
             <com.yarolegovich.mp.MaterialStandardPreference
                 android:id="@+id/settings_reauthorize"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_below="@id/settings_switch"
-                apc:mp_title="@string/nc_settings_reauthorize"/>
+                apc:mp_title="@string/nc_settings_reauthorize" />
 
             <com.yarolegovich.mp.MaterialStandardPreference
                 android:id="@+id/settings_client_cert"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_below="@id/settings_reauthorize"
-                apc:mp_title="@string/nc_client_cert_setup"/>
+                apc:mp_title="@string/nc_client_cert_setup" />
 
             <com.yarolegovich.mp.MaterialStandardPreference
                 android:id="@+id/settings_remove_account"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_below="@id/settings_client_cert"
-                apc:mp_title="@string/nc_settings_remove_account"/>
+                apc:mp_title="@string/nc_settings_remove_account" />
 
             <com.yarolegovich.mp.MaterialStandardPreference
                 android:id="@+id/settings_add_account"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_below="@id/settings_remove_account"
-                apc:mp_title="@string/nc_settings_add_account"/>
+                apc:mp_title="@string/nc_settings_add_account" />
 
         </RelativeLayout>
 
@@ -123,23 +121,23 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             apc:mp_key="@string/nc_settings_call_ringtone_key"
-            apc:mp_title="@string/nc_settings_call_ringtone"/>
+            apc:mp_title="@string/nc_settings_call_ringtone" />
 
         <com.yarolegovich.mp.MaterialStandardPreference
             android:id="@+id/settings_message_sound"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             apc:mp_key="@string/nc_settings_message_ringtone_key"
-            apc:mp_title="@string/nc_settings_other_notifications_ringtone"/>
+            apc:mp_title="@string/nc_settings_other_notifications_ringtone" />
 
         <com.yarolegovich.mp.MaterialSwitchPreference
             android:id="@+id/settings_always_vibrate"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
+            apc:mp_default_value="true"
             apc:mp_key="@string/nc_settings_vibrate_key"
-            apc:mp_title="@string/nc_settings_vibrate"
             apc:mp_summary="@string/nc_settings_vibrate_desc"
-            apc:mp_default_value="true"/>
+            apc:mp_title="@string/nc_settings_vibrate" />
 
     </com.yarolegovich.mp.MaterialPreferenceCategory>
 
@@ -159,8 +157,7 @@
             apc:mp_entry_descriptions="@array/proxy_type_descriptions"
             apc:mp_key="@string/nc_settings_proxy_type_key"
             apc:mp_show_value="onRight"
-            apc:mp_title="@string/nc_settings_proxy_type_title">
-        </com.yarolegovich.mp.MaterialChoicePreference>
+            apc:mp_title="@string/nc_settings_proxy_type_title"></com.yarolegovich.mp.MaterialChoicePreference>
 
         <com.yarolegovich.mp.MaterialEditTextPreference
             android:id="@+id/settings_proxy_host_edit"
@@ -168,7 +165,7 @@
             android:layout_height="wrap_content"
             apc:mp_key="@string/nc_settings_proxy_host_key"
             apc:mp_show_value="onRight"
-            apc:mp_title="@string/nc_settings_proxy_host_title"/>
+            apc:mp_title="@string/nc_settings_proxy_host_title" />
 
         <com.yarolegovich.mp.MaterialEditTextPreference
             android:id="@+id/settings_proxy_port_edit"
@@ -176,7 +173,7 @@
             android:layout_height="wrap_content"
             apc:mp_key="@string/nc_settings_proxy_port_key"
             apc:mp_show_value="onRight"
-            apc:mp_title="@string/nc_settings_proxy_port_title"/>
+            apc:mp_title="@string/nc_settings_proxy_port_title" />
 
         <com.yarolegovich.mp.MaterialSwitchPreference
             android:id="@+id/settings_proxy_use_credentials"
@@ -195,7 +192,7 @@
             android:layout_height="wrap_content"
             apc:mp_key="@string/nc_settings_proxy_username_key"
             apc:mp_show_value="onRight"
-            apc:mp_title="@string/nc_username"/>
+            apc:mp_title="@string/nc_username" />
 
         <com.yarolegovich.mp.MaterialEditTextPreference
             android:id="@+id/settings_proxy_password_edit"
@@ -203,7 +200,7 @@
             android:layout_height="wrap_content"
             apc:mp_key="@string/nc_settings_proxy_password_key"
             apc:mp_show_value="onRight"
-            apc:mp_title="@string/nc_password"/>
+            apc:mp_title="@string/nc_password" />
 
     </com.yarolegovich.mp.MaterialPreferenceCategory>
 
@@ -218,30 +215,27 @@
             android:id="@+id/settings_privacy"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            apc:mp_title="@string/nc_privacy"/>
+            apc:mp_title="@string/nc_privacy" />
 
         <com.yarolegovich.mp.MaterialStandardPreference
             android:id="@+id/settings_source_code"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            apc:mp_title="@string/nc_get_source_code">
-        </com.yarolegovich.mp.MaterialStandardPreference>
+            apc:mp_title="@string/nc_get_source_code"></com.yarolegovich.mp.MaterialStandardPreference>
 
         <com.yarolegovich.mp.MaterialStandardPreference
             android:id="@+id/settings_licence"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             apc:mp_summary="@string/nc_license_summary"
-            apc:mp_title="@string/nc_license_title">
-        </com.yarolegovich.mp.MaterialStandardPreference>
+            apc:mp_title="@string/nc_license_title"></com.yarolegovich.mp.MaterialStandardPreference>
 
         <com.yarolegovich.mp.MaterialStandardPreference
             android:id="@+id/settings_version"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             apc:mp_summary="v0.1"
-            apc:mp_title="@string/nc_app_name">
-        </com.yarolegovich.mp.MaterialStandardPreference>
+            apc:mp_title="@string/nc_app_name"></com.yarolegovich.mp.MaterialStandardPreference>
 
     </com.yarolegovich.mp.MaterialPreferenceCategory>
 

+ 8 - 9
app/src/main/res/layout/controller_web_view_login.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ~ Nextcloud Talk application
   ~
   ~ @author Mario Danic
@@ -20,23 +19,23 @@
   -->
 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-                android:layout_width="match_parent"
-                android:layout_height="match_parent"
-                android:keepScreenOn="true"
-                android:orientation="vertical">
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:keepScreenOn="true"
+    android:orientation="vertical">
 
     <ProgressBar
         android:id="@+id/progress_bar"
         android:layout_width="@dimen/item_height"
         android:layout_height="@dimen/item_height"
         android:layout_centerInParent="true"
-        android:layout_marginEnd="@dimen/activity_horizontal_margin"
+        android:layout_marginStart="@dimen/activity_horizontal_margin"
         android:layout_marginLeft="@dimen/activity_horizontal_margin"
+        android:layout_marginEnd="@dimen/activity_horizontal_margin"
         android:layout_marginRight="@dimen/activity_horizontal_margin"
-        android:layout_marginStart="@dimen/activity_horizontal_margin"
         android:indeterminate="true"
         android:indeterminateTint="@color/colorPrimary"
-        android:indeterminateTintMode="src_in"/>
+        android:indeterminateTintMode="src_in" />
 
     <WebView
         android:id="@+id/webview"

+ 12 - 15
app/src/main/res/layout/rv_item_call_header.xml → app/src/main/res/layout/conversation_privacy_toggle.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ~ Nextcloud Talk application
   ~
   ~ @author Mario Danic
@@ -20,11 +19,11 @@
   -->
 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-                xmlns:tools="http://schemas.android.com/tools"
-                android:id="@+id/call_header_layout"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:orientation="vertical">
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/call_header_layout"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical">
 
     <RelativeLayout
         android:id="@+id/initial_relative_layout"
@@ -36,25 +35,24 @@
             android:layout_width="32dp"
             android:layout_height="32dp"
             android:layout_centerVertical="true"
-            android:layout_marginEnd="8dp"
             android:layout_marginStart="@dimen/activity_horizontal_margin"
+            android:layout_marginEnd="8dp"
             android:contentDescription="@null"
             android:src="@drawable/ic_public_black_24px"
-            android:tint="@color/colorPrimary"/>
+            android:tint="@color/colorPrimary" />
 
         <TextView
-            android:id="@+id/description_text"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_centerVertical="true"
-            android:layout_marginEnd="@dimen/activity_horizontal_margin"
             android:layout_marginStart="@dimen/activity_horizontal_margin"
+            android:layout_marginEnd="@dimen/activity_horizontal_margin"
             android:layout_toEndOf="@id/public_call_link"
             android:ellipsize="middle"
             android:singleLine="true"
             android:text="@string/nc_public_call"
             android:textAppearance="?android:attr/textAppearanceListItem"
-            tools:text="@string/nc_public_call"/>
+            tools:text="@string/nc_public_call" />
 
     </RelativeLayout>
 
@@ -67,16 +65,15 @@
         android:visibility="gone">
 
         <TextView
-            android:id="@+id/public_explanation_text_View"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_centerInParent="true"
-            android:layout_marginEnd="24dp"
             android:layout_marginStart="24dp"
+            android:layout_marginEnd="24dp"
             android:text="@string/nc_public_call_explanation"
             android:textAlignment="center"
             android:textAppearance="?android:attr/textAppearanceListItem"
-            tools:text="@string/nc_public_call_explanation"/>
+            tools:text="@string/nc_public_call_explanation" />
 
     </RelativeLayout>
 </RelativeLayout>

+ 66 - 0
app/src/main/res/layout/dialog_standard.xml

@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Adapted to use TextButton style and Material buttons from LovelyDialog
+  -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <include layout="@layout/view_color_area"/>
+
+    <ScrollView
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:layout_weight="1">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical">
+
+            <Space
+                android:layout_width="wrap_content"
+                android:layout_height="12dp" />
+
+            <include layout="@layout/view_title_and_message"/>
+
+        </LinearLayout>
+    </ScrollView>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:gravity="end"
+        android:orientation="horizontal">
+
+        <com.google.android.material.button.MaterialButton
+            android:id="@+id/ld_btn_neutral"
+            style="@style/Widget.MaterialComponents.Button.TextButton"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:visibility="gone" />
+
+        <Space
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="1" />
+
+        <com.google.android.material.button.MaterialButton
+            android:id="@+id/ld_btn_no"
+            style="@style/Widget.MaterialComponents.Button.TextButton"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:visibility="gone" />
+
+        <com.google.android.material.button.MaterialButton
+            android:id="@+id/ld_btn_yes"
+            style="@style/Widget.MaterialComponents.Button.TextButton"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:visibility="gone" />
+
+    </LinearLayout>
+
+</LinearLayout>

+ 91 - 0
app/src/main/res/layout/dialog_standard_vertical.xml

@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Nextcloud Talk application
+  ~
+  ~ @author Mario Danic
+  ~ Copyright (C) 2017-2018 Mario Danic <mario@lovelyhq.com>
+  ~
+  ~ This program is free software: you can redistribute it and/or modify
+  ~ it under the terms of the GNU General Public License as published by
+  ~ the Free Software Foundation, either version 3 of the License, or
+  ~ at your option) any later version.
+  ~
+  ~ This program is distributed in the hope that it will be useful,
+  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
+  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  ~ GNU General Public License for more details.
+  ~
+  ~ You should have received a copy of the GNU General Public License
+  ~ along with this program.  If not, see <http://www.gnu.org/licenses/>.
+  -->
+
+<!--
+    Adapted to use TextButton style and Material buttons from LovelyDialog
+  -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <include layout="@layout/view_color_area"/>
+
+    <ScrollView
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:layout_weight="1">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical">
+
+            <Space
+                android:layout_width="wrap_content"
+                android:layout_height="12dp"/>
+
+            <include layout="@layout/view_title_and_message"/>
+
+        </LinearLayout>
+    </ScrollView>
+
+
+    <com.google.android.material.button.MaterialButton
+        android:id="@+id/ld_btn_yes"
+        style="@style/Widget.MaterialComponents.Button.TextButton"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="end"
+        android:gravity="end|center_vertical"
+        android:paddingLeft="@dimen/ld_side_margin"
+        android:paddingRight="@dimen/ld_side_margin"
+        android:visibility="gone"/>
+
+    <com.google.android.material.button.MaterialButton
+        android:id="@+id/ld_btn_no"
+        style="@style/Widget.MaterialComponents.Button.TextButton"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="end"
+        android:gravity="end|center_vertical"
+        android:paddingLeft="@dimen/ld_side_margin"
+        android:paddingRight="@dimen/ld_side_margin"
+        android:visibility="gone"/>
+
+    <com.google.android.material.button.MaterialButton
+        android:id="@+id/ld_btn_neutral"
+        style="@style/Widget.MaterialComponents.Button.TextButton"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="end"
+        android:gravity="end|center_vertical"
+        android:paddingLeft="@dimen/ld_side_margin"
+        android:paddingRight="@dimen/ld_side_margin"
+        android:visibility="gone"/>
+
+    <Space
+        android:layout_width="wrap_content"
+        android:layout_height="12dp"/>
+
+
+</LinearLayout>

+ 16 - 18
app/src/main/res/layout/fast_scroller.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ~ Nextcloud Talk application
   ~
   ~ @author Mario Danic
@@ -20,19 +19,18 @@
   -->
 
 <eu.davidea.fastscroller.FastScroller xmlns:android="http://schemas.android.com/apk/res/android"
-                                      xmlns:app="http://schemas.android.com/apk/res-auto"
-                                      xmlns:tools="http://schemas.android.com/tools"
-                                      android:id="@+id/fast_scroller"
-                                      android:layout_width="wrap_content"
-                                      android:layout_height="match_parent"
-                                      android:layout_alignBottom="@+id/swipe_refresh_layout"
-                                      android:layout_alignParentEnd="true"
-                                      android:layout_alignTop="@+id/swipe_refresh_layout"
-                                      android:layout_centerHorizontal="true"
-                                      app:fastScrollerAutoHideDelayInMillis="1000"
-                                      app:fastScrollerAutoHideEnabled="true"
-                                      app:fastScrollerBubbleEnabled="true"
-                                      app:fastScrollerBubblePosition="adjacent"
-                                      app:fastScrollerIgnoreTouchesOutsideHandle="false"
-                                      tools:visibility="visible">
-</eu.davidea.fastscroller.FastScroller>
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/fast_scroller"
+    android:layout_width="wrap_content"
+    android:layout_height="match_parent"
+    android:layout_alignTop="@+id/swipe_refresh_layout"
+    android:layout_alignBottom="@+id/swipe_refresh_layout"
+    android:layout_alignParentEnd="true"
+    android:layout_centerHorizontal="true"
+    app:fastScrollerAutoHideDelayInMillis="1000"
+    app:fastScrollerAutoHideEnabled="true"
+    app:fastScrollerBubbleEnabled="true"
+    app:fastScrollerBubblePosition="adjacent"
+    app:fastScrollerIgnoreTouchesOutsideHandle="false"
+    tools:visibility="visible"></eu.davidea.fastscroller.FastScroller>

+ 2 - 2
app/src/main/res/layout/item_custom_incoming_preview_message.xml

@@ -22,8 +22,8 @@
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_marginStart="16dp"
-    android:layout_marginEnd="16dp"
     android:layout_marginTop="2dp"
+    android:layout_marginEnd="16dp"
     android:layout_marginBottom="2dp">
 
     <com.stfalcon.chatkit.utils.ShapeImageView
@@ -71,7 +71,7 @@
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_below="@id/messageText"
-                android:layout_alignParentEnd="true"/>
+                android:layout_alignParentEnd="true" />
 
         </RelativeLayout>
 

+ 8 - 10
app/src/main/res/layout/item_custom_incoming_text_message.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ~ Nextcloud Talk application
   ~
   ~ @author Mario Danic
@@ -19,22 +18,21 @@
   ~ along with this program.  If not, see <http://www.gnu.org/licenses/>.
   -->
 
-<RelativeLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:layout_marginBottom="2dp"
     android:layout_marginLeft="16dp"
+    android:layout_marginTop="2dp"
     android:layout_marginRight="16dp"
-    android:layout_marginTop="2dp">
+    android:layout_marginBottom="2dp">
 
     <com.stfalcon.chatkit.utils.ShapeImageView
         android:id="@id/messageUserAvatar"
         android:layout_width="40dp"
         android:layout_height="40dp"
         android:layout_alignParentTop="true"
-        android:layout_marginEnd="8dp"/>
+        android:layout_marginEnd="8dp" />
 
     <com.google.android.flexbox.FlexboxLayout
         android:id="@id/bubble"
@@ -53,7 +51,7 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:textColor="@color/colorPrimary"
-            android:textSize="12sp"/>
+            android:textSize="12sp" />
 
         <com.kevalpatel2106.emoticongifkeyboard.widget.EmoticonTextView
             android:id="@id/messageText"
@@ -62,7 +60,7 @@
             android:textIsSelectable="true"
             app:layout_alignSelf="flex_start"
             app:layout_flexGrow="1"
-            app:layout_wrapBefore="true"/>
+            app:layout_wrapBefore="true" />
 
 
         <TextView
@@ -71,7 +69,7 @@
             android:layout_height="wrap_content"
             android:layout_below="@id/messageText"
             android:layout_marginStart="8dp"
-            app:layout_alignSelf="center"/>
+            app:layout_alignSelf="center" />
 
     </com.google.android.flexbox.FlexboxLayout>
 </RelativeLayout>

+ 1 - 1
app/src/main/res/layout/item_custom_outcoming_preview_message.xml

@@ -65,7 +65,7 @@
                 android:layout_height="wrap_content"
                 android:layout_below="@id/messageText"
                 android:layout_alignParentEnd="true"
-                android:textColor="@color/white60"/>
+                android:textColor="@color/white60" />
 
         </RelativeLayout>
 

+ 7 - 9
app/src/main/res/layout/item_custom_outcoming_text_message.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ~ Nextcloud Talk application
   ~
   ~ @author Mario Danic
@@ -19,15 +18,14 @@
   ~ along with this program.  If not, see <http://www.gnu.org/licenses/>.
   -->
 
-<RelativeLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:layout_marginBottom="2dp"
     android:layout_marginLeft="16dp"
+    android:layout_marginTop="2dp"
     android:layout_marginRight="16dp"
-    android:layout_marginTop="2dp">
+    android:layout_marginBottom="2dp">
 
     <com.google.android.flexbox.FlexboxLayout
         android:id="@id/bubble"
@@ -44,10 +42,10 @@
             android:id="@id/messageText"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:textIsSelectable="true"
+            android:layout_alignWithParentIfMissing="true"
             android:textColorHighlight="@color/nc_grey"
 
-            android:layout_alignWithParentIfMissing="true"/>
+            android:textIsSelectable="true" />
 
         <TextView
             android:id="@id/messageTime"
@@ -55,7 +53,7 @@
             android:layout_height="wrap_content"
             android:layout_below="@id/messageText"
             android:layout_marginStart="8dp"
-            app:layout_alignSelf="center"/>
+            app:layout_alignSelf="center" />
 
     </com.google.android.flexbox.FlexboxLayout>
 </RelativeLayout>

+ 9 - 10
app/src/main/res/layout/item_system_message.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ~ Nextcloud Talk application
   ~
   ~ @author Mario Danic
@@ -20,17 +19,17 @@
   -->
 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:layout_marginBottom="8dp"
-                android:layout_marginEnd="16dp"
-                android:layout_marginStart="16dp"
-                android:layout_marginTop="8dp">
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_marginStart="16dp"
+    android:layout_marginTop="8dp"
+    android:layout_marginEnd="16dp"
+    android:layout_marginBottom="8dp">
 
     <RelativeLayout
+        android:id="@id/bubble"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:id="@id/bubble"
         android:layout_centerHorizontal="true">
 
         <TextView
@@ -41,7 +40,7 @@
             android:gravity="center_horizontal"
             android:textAlignment="center"
             android:textColor="@color/colorPrimary"
-            android:textSize="12sp"/>
+            android:textSize="12sp" />
 
     </RelativeLayout>
 </RelativeLayout>

+ 20 - 17
app/src/main/res/layout/rv_item_participant.xml → app/src/main/res/layout/join_conversation_via_link.xml

@@ -1,4 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?><!--
+<?xml version="1.0" encoding="utf-8"?>
+<!--
   ~ Nextcloud Talk application
   ~
   ~ @author Mario Danic
@@ -19,32 +20,34 @@
   -->
 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
+    android:orientation="vertical"
     android:layout_width="match_parent"
-    android:layout_height="@dimen/item_height"
-    android:orientation="vertical">
+    android:layout_height="72dp"
+    android:id="@+id/joinConversationViaLinkRelativeLayout">
 
-    <com.nextcloud.talk.utils.MagicFlipView
-        android:id="@+id/avatar_flip_view"
-        android:layout_width="@dimen/avatar_size"
-        android:layout_height="@dimen/avatar_size"
+    <ImageView
+        android:id="@+id/joinConversationViaLinkImageView"
+        android:layout_width="32dp"
+        android:layout_height="32dp"
         android:layout_centerVertical="true"
-        android:layout_marginStart="16dp"
-        android:layout_marginEnd="@dimen/activity_horizontal_margin"
-        app:animationDuration="170"
-        app:enableInitialAnimation="true"
-        app:rearBackgroundColor="@color/colorPrimary" />
+        android:layout_marginStart="@dimen/activity_horizontal_margin"
+        android:layout_marginEnd="8dp"
+        android:contentDescription="@null"
+        android:src="@drawable/ic_public_black_24px"
+        android:tint="@color/colorPrimary" />
 
     <TextView
-        android:id="@+id/name_text"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_centerVertical="true"
+        android:layout_marginStart="@dimen/activity_horizontal_margin"
         android:layout_marginEnd="@dimen/activity_horizontal_margin"
-        android:layout_toEndOf="@id/avatar_flip_view"
-        android:ellipsize="end"
+        android:layout_toEndOf="@id/joinConversationViaLinkImageView"
+        android:ellipsize="middle"
+        android:singleLine="true"
+        android:text="@string/nc_join_via_link"
         android:textAppearance="?android:attr/textAppearanceListItem"
-        tools:text="Contact item text" />
+        tools:text="@string/nc_join_via_link" />
 
 </RelativeLayout>

+ 6 - 6
app/src/main/res/layout/library_fast_scroller_layout.xml

@@ -1,15 +1,15 @@
 <?xml version="1.0" encoding="utf-8"?>
 <merge xmlns:android="http://schemas.android.com/apk/res/android"
-       xmlns:tools="http://schemas.android.com/tools"
-       android:layout_width="wrap_content"
-       android:layout_height="match_parent">
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="wrap_content"
+    android:layout_height="match_parent">
 
     <View
         android:id="@+id/fast_scroller_bar"
         android:layout_width="7dp"
         android:layout_height="wrap_content"
         android:layout_gravity="end"
-        android:background="@color/transparent"/>
+        android:background="@color/transparent" />
 
     <RelativeLayout
         android:layout_width="wrap_content"
@@ -30,7 +30,7 @@
             android:textSize="38sp"
             android:visibility="gone"
             tools:text="A"
-            tools:visibility="visible"/>
+            tools:visibility="visible" />
 
         <ImageView
             android:id="@+id/fast_scroller_handle"
@@ -40,7 +40,7 @@
             android:alpha="0.5"
             android:contentDescription="@null"
             android:paddingStart="6dp"
-            android:src="@drawable/fast_scroller_handle"/>
+            android:src="@drawable/fast_scroller_handle" />
 
     </RelativeLayout>
 

+ 2 - 4
app/src/main/res/layout/notification_settings_item.xml

@@ -40,15 +40,13 @@
             apc:mp_entry_values="@array/message_notification_levels_entry_values"
             apc:mp_key="message_notification_level"
             apc:mp_show_value="onBottom"
-            apc:mp_title="@string/nc_plain_old_messages">
-        </com.yarolegovich.mp.MaterialChoicePreference>
+            apc:mp_title="@string/nc_plain_old_messages"></com.yarolegovich.mp.MaterialChoicePreference>
 
         <com.yarolegovich.mp.MaterialSwitchPreference
-            android:id="@+id/conversation_info_mute_calls"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            apc:mp_key="mute_calls"
             apc:mp_default_value="false"
+            apc:mp_key="mute_calls"
             apc:mp_summary="@string/nc_mute_calls_description"
             apc:mp_title="@string/nc_mute_calls" />
 

+ 10 - 11
app/src/main/res/layout/rv_item_app.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ~ Nextcloud Talk application
   ~
   ~ @author Mario Danic
@@ -20,12 +19,12 @@
   -->
 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-                xmlns:tools="http://schemas.android.com/tools"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:background="@color/white"
-                android:paddingBottom="16dp"
-                android:paddingTop="16dp">
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="@color/white"
+    android:paddingTop="16dp"
+    android:paddingBottom="16dp">
 
     <ImageView
         android:id="@+id/icon_image_view"
@@ -35,20 +34,20 @@
         android:layout_marginStart="16dp"
         android:focusable="false"
         android:focusableInTouchMode="false"
-        tools:src="@drawable/ic_add_grey600_24px"/>
+        tools:src="@drawable/ic_add_grey600_24px" />
 
     <TextView
         android:id="@+id/app_title_text_view"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_centerVertical="true"
-        android:layout_marginEnd="16dp"
         android:layout_marginStart="16dp"
+        android:layout_marginEnd="16dp"
         android:layout_toEndOf="@id/icon_image_view"
         android:focusable="false"
         android:focusableInTouchMode="false"
         android:textColor="@color/black"
         android:textSize="16sp"
-        tools:text="Start a new conversation"/>
+        tools:text="Start a new conversation" />
 
 </RelativeLayout>

+ 9 - 10
app/src/main/res/layout/rv_item_contact.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ~ Nextcloud Talk application
   ~
   ~ @author Mario Danic
@@ -22,22 +21,22 @@
   -->
 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-                xmlns:app="http://schemas.android.com/apk/res-auto"
-                xmlns:tools="http://schemas.android.com/tools"
-                android:layout_width="match_parent"
-                android:layout_height="@dimen/item_height"
-                android:orientation="vertical">
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="@dimen/item_height"
+    android:orientation="vertical">
 
     <com.nextcloud.talk.utils.MagicFlipView
         android:id="@+id/avatar_flip_view"
         android:layout_width="@dimen/avatar_size"
         android:layout_height="@dimen/avatar_size"
         android:layout_centerVertical="true"
-        android:layout_marginEnd="@dimen/activity_horizontal_margin"
         android:layout_marginStart="48dp"
+        android:layout_marginEnd="@dimen/activity_horizontal_margin"
         app:animationDuration="170"
         app:enableInitialAnimation="true"
-        app:rearBackgroundColor="@color/colorPrimary"/>
+        app:rearBackgroundColor="@color/colorPrimary" />
 
     <TextView
         android:id="@+id/name_text"
@@ -48,6 +47,6 @@
         android:layout_toEndOf="@id/avatar_flip_view"
         android:ellipsize="end"
         android:textAppearance="?android:attr/textAppearanceListItem"
-        tools:text="Contact item text"/>
+        tools:text="Contact item text" />
 
 </RelativeLayout>

+ 14 - 16
app/src/main/res/layout/rv_item_conversation.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ~ Nextcloud Talk application
   ~
   ~ @author Mario Danic
@@ -22,9 +21,9 @@
   -->
 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-                xmlns:tools="http://schemas.android.com/tools"
-                android:layout_width="match_parent"
-                android:layout_height="@dimen/item_height">
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="@dimen/item_height">
 
 
     <FrameLayout
@@ -34,25 +33,24 @@
         android:layout_centerVertical="true"
         android:layout_marginStart="@dimen/activity_horizontal_margin">
 
-        <com.nextcloud.talk.utils.MagicFlipView
-            xmlns:app="http://schemas.android.com/apk/res-auto"
+        <com.nextcloud.talk.utils.MagicFlipView xmlns:app="http://schemas.android.com/apk/res-auto"
             android:id="@+id/avatar_image"
             android:layout_width="@dimen/avatar_size"
             android:layout_height="@dimen/avatar_size"
             app:animationDuration="170"
             app:checked="false"
             app:enableInitialAnimation="true"
-            app:rearBackgroundColor="@color/colorPrimary"/>
+            app:rearBackgroundColor="@color/colorPrimary" />
 
         <ImageView
             android:id="@+id/password_protected_image_view"
             android:layout_width="10dp"
             android:layout_height="10dp"
             android:layout_gravity="bottom|end"
-            android:layout_marginBottom="6dp"
             android:layout_marginEnd="6dp"
+            android:layout_marginBottom="6dp"
             android:src="@drawable/ic_lock_white_24px"
-            android:visibility="visible"/>
+            android:visibility="visible" />
 
     </FrameLayout>
 
@@ -62,8 +60,8 @@
         android:layout_height="wrap_content"
         android:layout_centerInParent="true"
         android:layout_marginStart="@dimen/margin_between_elements"
-        android:layout_toEndOf="@id/frame_layout"
         android:layout_toStartOf="@+id/more_menu"
+        android:layout_toEndOf="@id/frame_layout"
         android:orientation="vertical">
 
         <com.kevalpatel2106.emoticongifkeyboard.widget.EmoticonTextView
@@ -73,7 +71,7 @@
             android:ellipsize="middle"
             android:singleLine="true"
             android:textAppearance="?android:attr/textAppearanceListItem"
-            tools:text="Call item text"/>
+            tools:text="Call item text" />
 
         <TextView
             android:id="@+id/secondary_text"
@@ -81,7 +79,7 @@
             android:layout_height="wrap_content"
             android:singleLine="true"
             android:textColor="?android:attr/textColorSecondary"
-            tools:text="A week ago"/>
+            tools:text="A week ago" />
 
     </LinearLayout>
 
@@ -91,12 +89,12 @@
         android:layout_height="match_parent"
         android:layout_alignParentEnd="true"
         android:layout_centerVertical="true"
-        android:layout_marginEnd="@dimen/activity_horizontal_margin"
         android:layout_marginStart="@dimen/margin_between_elements"
+        android:layout_marginEnd="@dimen/activity_horizontal_margin"
         android:background="?android:attr/selectableItemBackground"
-        android:paddingEnd="8dp"
         android:paddingStart="8dp"
+        android:paddingEnd="8dp"
         android:scaleType="center"
-        android:src="@drawable/ic_more_horiz_black_24dp"/>
+        android:src="@drawable/ic_more_horiz_black_24dp" />
 
 </RelativeLayout>

+ 16 - 18
app/src/main/res/layout/rv_item_conversation_with_last_message.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ~ Nextcloud Talk application
   ~
   ~ @author Mario Danic
@@ -24,9 +23,9 @@
   -->
 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-                xmlns:tools="http://schemas.android.com/tools"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content">
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content">
 
 
     <RelativeLayout
@@ -42,24 +41,24 @@
 
             <ImageView
                 android:id="@id/dialogAvatar"
-                android:contentDescription="@null"
                 android:layout_width="@dimen/avatar_size"
                 android:layout_height="@dimen/avatar_size"
-                tools:src="@drawable/ic_call_black_24dp"/>
+                android:contentDescription="@null"
+                tools:src="@drawable/ic_call_black_24dp" />
 
             <ImageView
                 android:id="@+id/passwordProtectedRoomImageView"
                 android:layout_width="12dp"
                 android:layout_height="12dp"
                 android:layout_gravity="bottom|end"
-                android:background="@drawable/shape_lock_bubble"/>
+                android:background="@drawable/shape_lock_bubble" />
 
             <ImageView
                 android:id="@+id/favoriteConversationImageView"
                 android:layout_width="12dp"
                 android:layout_height="12dp"
                 android:layout_gravity="top|end"
-                android:background="@drawable/shape_favorite_bubble"/>
+                android:background="@drawable/shape_favorite_bubble" />
         </FrameLayout>
 
         <TextView
@@ -68,14 +67,14 @@
             android:layout_height="wrap_content"
             android:layout_alignTop="@id/dialogAvatarFrameLayout"
             android:layout_marginStart="8dp"
-            android:layout_toEndOf="@id/dialogAvatarFrameLayout"
             android:layout_toStartOf="@id/dialogDate"
+            android:layout_toEndOf="@id/dialogAvatarFrameLayout"
             android:ellipsize="end"
             android:includeFontPadding="false"
             android:maxLines="1"
             android:textColor="@color/nc_incoming_text_default"
             android:textSize="16sp"
-            tools:text="Best conversation"/>
+            tools:text="Best conversation" />
 
         <TextView
             android:id="@id/dialogDate"
@@ -84,10 +83,9 @@
             android:layout_alignParentEnd="true"
             android:ellipsize="end"
             android:maxLines="1"
-            android:textColor="@color/warm_grey_two"/>
+            android:textColor="@color/warm_grey_two" />
 
         <RelativeLayout
-            android:id="@+id/dialogLastMessageLayout"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_below="@id/dialogName"
@@ -97,25 +95,25 @@
 
             <ImageView
                 android:id="@id/dialogLastMessageUserAvatar"
-                android:contentDescription="@null"
                 android:layout_width="@dimen/small_item_height"
                 android:layout_height="@dimen/small_item_height"
                 android:layout_marginEnd="8dp"
-                tools:src="@drawable/ic_call_black_24dp"/>
+                android:contentDescription="@null"
+                tools:src="@drawable/ic_call_black_24dp" />
 
             <TextView
                 android:id="@id/dialogLastMessage"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_centerVertical="true"
-                android:layout_toEndOf="@id/dialogLastMessageUserAvatar"
                 android:layout_toStartOf="@id/dialogUnreadBubble"
+                android:layout_toEndOf="@id/dialogLastMessageUserAvatar"
                 android:ellipsize="end"
                 android:gravity="top"
                 android:lines="2"
                 android:singleLine="false"
                 android:textColor="@color/warm_grey_four"
-                tools:text="This is the last message\nof an incredibly long two line  conversation text"/>
+                tools:text="This is the last message\nof an incredibly long two line  conversation text" />
 
             <TextView
                 android:id="@id/dialogUnreadBubble"
@@ -128,7 +126,7 @@
                 android:lines="1"
                 android:textAlignment="center"
                 android:textColor="@color/white"
-                tools:text="1"/>
+                tools:text="1" />
 
         </RelativeLayout>
 

+ 0 - 27
app/src/main/res/layout/rv_item_empty_footer.xml

@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Nextcloud Talk application
-  ~
-  ~ @author Mario Danic
-  ~ Copyright (C) 2017-2018 Mario Danic <mario@lovelyhq.com>
-  ~
-  ~ This program is free software: you can redistribute it and/or modify
-  ~ it under the terms of the GNU General Public License as published by
-  ~ the Free Software Foundation, either version 3 of the License, or
-  ~ at your option) any later version.
-  ~
-  ~ This program is distributed in the hope that it will be useful,
-  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
-  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  ~ GNU General Public License for more details.
-  ~
-  ~ You should have received a copy of the GNU General Public License
-  ~ along with this program.  If not, see <http://www.gnu.org/licenses/>.
-  -->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-              android:layout_width="match_parent"
-              android:layout_height="48dp"
-              android:orientation="vertical">
-
-</LinearLayout>

+ 10 - 11
app/src/main/res/layout/rv_item_mention.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ~ Nextcloud Talk application
   ~
   ~ @author Mario Danic
@@ -22,11 +21,11 @@
   -->
 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-                xmlns:app="http://schemas.android.com/apk/res-auto"
-                xmlns:tools="http://schemas.android.com/tools"
-                android:layout_width="match_parent"
-                android:layout_height="@dimen/item_height"
-                android:orientation="vertical">
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="@dimen/item_height"
+    android:orientation="vertical">
 
     <FrameLayout
         android:id="@+id/frame_layout"
@@ -42,7 +41,7 @@
             app:animationDuration="170"
             app:checked="false"
             app:enableInitialAnimation="false"
-            app:rearBackgroundColor="@color/colorPrimary"/>
+            app:rearBackgroundColor="@color/colorPrimary" />
 
     </FrameLayout>
 
@@ -51,8 +50,8 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_centerInParent="true"
-        android:layout_marginEnd="@dimen/margin_between_elements"
         android:layout_marginStart="@dimen/margin_between_elements"
+        android:layout_marginEnd="@dimen/margin_between_elements"
         android:layout_toEndOf="@id/frame_layout"
         android:orientation="vertical">
 
@@ -63,7 +62,7 @@
             android:ellipsize="middle"
             android:singleLine="true"
             android:textAppearance="?android:attr/textAppearanceListItem"
-            tools:text="Call item text"/>
+            tools:text="Call item text" />
 
         <TextView
             android:id="@+id/secondary_text"
@@ -72,7 +71,7 @@
             android:ellipsize="middle"
             android:singleLine="true"
             android:textColor="?android:attr/textColorSecondary"
-            tools:text="A week ago"/>
+            tools:text="A week ago" />
 
     </LinearLayout>
 

+ 6 - 7
app/src/main/res/layout/rv_item_menu.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ~ Nextcloud Talk application
   ~
   ~ @author Mario Danic
@@ -22,10 +21,10 @@
   -->
 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-                xmlns:tools="http://schemas.android.com/tools"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:background="@color/white">
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="@color/white">
 
     <TextView
         android:id="@+id/menu_text"
@@ -39,5 +38,5 @@
         android:textSize="16sp"
         tools:drawableLeft="@drawable/ic_add_grey600_24px"
         tools:drawablePadding="16dp"
-        tools:text="Start a new conversation"/>
+        tools:text="Start a new conversation" />
 </RelativeLayout>

+ 8 - 10
app/src/main/res/layout/rv_item_notification_sound.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ~ Nextcloud Talk application
   ~
   ~ @author Mario Danic
@@ -20,25 +19,24 @@
   -->
 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-                android:layout_width="match_parent"
-                android:layout_height="@dimen/item_height"
-                android:orientation="vertical">
+    android:layout_width="match_parent"
+    android:layout_height="@dimen/item_height"
+    android:orientation="vertical">
 
 
-    <com.nextcloud.talk.utils.MagicFlipView
-        xmlns:app="http://schemas.android.com/apk/res-auto"
+    <com.nextcloud.talk.utils.MagicFlipView xmlns:app="http://schemas.android.com/apk/res-auto"
         android:id="@+id/magicFlipView"
         android:layout_width="@dimen/avatar_size"
         android:layout_height="@dimen/avatar_size"
         android:layout_centerVertical="true"
-        android:layout_marginEnd="@dimen/activity_horizontal_margin"
         android:layout_marginStart="24dp"
+        android:layout_marginEnd="@dimen/activity_horizontal_margin"
         app:animationDuration="170"
         app:checked="false"
         app:enableInitialAnimation="true"
         app:frontBackgroundColor="@color/colorPrimary"
         app:frontImage="@drawable/ic_play_circle_outline_white_24dp"
-        app:rearBackgroundColor="@color/colorPrimary"/>
+        app:rearBackgroundColor="@color/colorPrimary" />
 
     <TextView
         android:id="@+id/notificationNameTextView"
@@ -48,6 +46,6 @@
         android:layout_margin="8dp"
         android:layout_toEndOf="@id/magicFlipView"
         android:ellipsize="end"
-        android:textAppearance="?android:attr/textAppearanceListItem"/>
+        android:textAppearance="?android:attr/textAppearanceListItem" />
 
 </RelativeLayout>

+ 4 - 6
app/src/main/res/layout/rv_item_progress.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ~ Nextcloud Talk application
   ~
   ~ @author Mario Danic
@@ -19,8 +18,7 @@
   ~ along with this program.  If not, see <http://www.gnu.org/licenses/>.
   -->
 
-<FrameLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
@@ -31,7 +29,7 @@
         style="@style/Widget.AppCompat.ProgressBar"
         android:layout_width="24dp"
         android:layout_height="24dp"
-        android:layout_gravity="center"/>
+        android:layout_gravity="center" />
 
     <TextView
         android:id="@+id/progress_message"
@@ -40,6 +38,6 @@
         android:layout_gravity="center"
         android:text="@string/nc_no_more_load_retry"
         android:visibility="gone"
-        tools:visibility="visible"/>
+        tools:visibility="visible" />
 
 </FrameLayout>

+ 9 - 10
app/src/main/res/layout/rv_item_title_header.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ~ Nextcloud Talk application
   ~
   ~ @author Mario Danic
@@ -20,25 +19,25 @@
   -->
 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-              xmlns:tools="http://schemas.android.com/tools"
-              android:layout_width="match_parent"
-              android:layout_height="wrap_content"
-              android:orientation="vertical">
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical">
 
     <View
         android:layout_width="match_parent"
         android:layout_height="1px"
-        android:background="?android:attr/listDivider"/>
+        android:background="?android:attr/listDivider" />
 
     <TextView
         android:id="@+id/title_text_view"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_marginBottom="8dp"
-        android:layout_marginEnd="16dp"
         android:layout_marginStart="16dp"
         android:layout_marginTop="8dp"
+        android:layout_marginEnd="16dp"
+        android:layout_marginBottom="8dp"
         android:textColor="@color/colorPrimary"
-        tools:text="A"/>
+        tools:text="A" />
 
 </LinearLayout>

+ 6 - 9
app/src/main/res/layout/view_message_input.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ~ Nextcloud Talk application
   ~
   ~ @author Mario Danic
@@ -19,8 +18,7 @@
   ~ along with this program.  If not, see <http://www.gnu.org/licenses/>.
   -->
 
-<merge
-    xmlns:android="http://schemas.android.com/apk/res/android"
+<merge xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:orientation="vertical">
@@ -29,20 +27,19 @@
         android:id="@id/attachmentButton"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_centerVertical="true"/>
+        android:layout_centerVertical="true" />
 
     <androidx.legacy.widget.Space
         android:id="@id/attachmentButtonSpace"
         android:layout_width="0dp"
         android:layout_height="0dp"
-        android:layout_toEndOf="@id/attachmentButton"/>
+        android:layout_toEndOf="@id/attachmentButton" />
 
     <com.kevalpatel2106.emoticongifkeyboard.widget.EmoticonEditText
         android:id="@id/messageInput"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_centerVertical="true"
-        android:layout_toEndOf="@id/attachmentButtonSpace"
         android:layout_toStartOf="@id/sendButtonSpace"
         android:inputType="textAutoCorrect|textMultiLine|textCapSentences"/>
 
@@ -50,13 +47,13 @@
         android:id="@id/sendButtonSpace"
         android:layout_width="0dp"
         android:layout_height="0dp"
-        android:layout_toStartOf="@id/messageSendButton"/>
+        android:layout_toStartOf="@id/messageSendButton" />
 
     <ImageButton
         android:id="@id/messageSendButton"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignParentEnd="true"
-        android:layout_centerVertical="true"/>
+        android:layout_centerVertical="true" />
 
 </merge>

+ 12 - 5
app/src/main/res/menu/menu_contacts.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ~ Nextcloud Talk application
   ~
   ~ @author Mario Danic
@@ -20,11 +19,19 @@
   -->
 
 <menu xmlns:android="http://schemas.android.com/apk/res/android"
-      xmlns:app="http://schemas.android.com/apk/res-auto">
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+
+    <item
+        android:id="@+id/action_search"
+        android:animateLayoutChanges="true"
+        android:icon="@drawable/ic_search_white_24dp"
+        android:title="@string/nc_search"
+        app:actionViewClass="androidx.appcompat.widget.SearchView"
+        app:showAsAction="collapseActionView|always" />
 
     <item
         android:id="@+id/contacts_selection_done"
         android:title="@string/nc_contacts_done"
-        app:showAsAction="always"
-        android:visible="false"/>
+        android:visible="false"
+        app:showAsAction="always" />
 </menu>

+ 0 - 8
app/src/main/res/menu/menu_conversation.xml

@@ -34,12 +34,4 @@
         android:orderInCategory="1"
         android:title="@string/nc_conversation_menu_video_call"
         app:showAsAction="ifRoom|withText" />
-
-    <item
-        android:id="@+id/nc_conversation_info"
-        android:icon="@drawable/ic_info_black_24dp"
-        android:orderInCategory="2"
-        android:title="@string/nc_conversation_menu_conversation_info"
-        android:visible="false"
-        app:showAsAction="ifRoom|withText" />
 </menu>

+ 4 - 9
app/src/main/res/menu/menu_conversation_plus_filter.xml

@@ -31,15 +31,10 @@
 	      app:actionViewClass="androidx.appcompat.widget.SearchView"
         />
 
-    <item android:id="@+id/action_new_conversation"
-          android:title="@string/nc_new_conversation"
-          android:icon="@drawable/ic_add_white_24px"
-          app:showAsAction="ifRoom"/>
+	<item android:id="@+id/action_settings"
+		android:title="@string/nc_settings"
+		android:icon="@drawable/ic_settings_white_24dp"
+		app:showAsAction="ifRoom"/>
 
-	<item
-		android:id="@+id/contacts_selection_done"
-		android:title="@string/nc_contacts_done"
-		app:showAsAction="always"
-		android:visible="false"/>
 
 </menu>

+ 0 - 19
app/src/main/res/menu/menu_navigation.xml

@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <item
-        android:id="@+id/navigation_calls"
-        android:checked="true"
-        android:icon="@drawable/ic_logo"
-        android:title="@string/nc_bottom_navigation_title_conversations"/>
-
-    <item
-        android:id="@+id/navigation_contacts"
-        android:icon="@drawable/ic_person_black_24dp"
-        android:title="@string/nc_bottom_navigation_title_contacts"/>
-
-    <item
-        android:id="@+id/navigation_settings"
-        android:icon="@drawable/ic_settings_black_24dp"
-        android:title="@string/nc_bottom_navigation_title_settings"/>
-</menu>

+ 1 - 14
app/src/main/res/values-b+en+001/strings.xml

@@ -20,9 +20,7 @@
 
 <resources>
     <!-- Bottom Navigation -->
-    <string name="nc_bottom_navigation_title_conversations">Conversations</string>
-    <string name="nc_bottom_navigation_title_contacts">Contacts</string>
-    <string name="nc_bottom_navigation_title_settings">Settings</string>
+    <string name="nc_settings">Settings</string>
 
     <!-- Server selection -->
     <string name="nc_server_url">Server address</string>
@@ -39,13 +37,10 @@
     <string name="nc_get_from_provider">Do you not have a server yet?\nClick here to get one from a provider</string>
 
     <!-- Account verification -->
-    <string name="nc_display_name_fetched">Display name fetched</string>
     <string name="nc_push_disabled">Push notifications disabled</string>
     <string name="nc_capabilities_failed">Failed to fetch capabilities, aborting</string>
     <string name="nc_display_name_not_fetched">Display name couldn\'t be fetched, aborting</string>
-    <string name="nc_nextcloud_talk_app_installed">%1$s app found</string>
     <string name="nc_nextcloud_talk_app_not_installed">%1$s app not installed on the server, aborting</string>
-    <string name="nc_display_name_stored">Display name stored</string>
     <string name="nc_display_name_not_stored">Could not store display name, aborting</string>
 
     <string name="nc_never">Never joined</string>
@@ -55,7 +50,6 @@
     <string name="nc_certificate_dialog_text">Do you trust the until now unknown SSL certificate, issued by %1$s for %2$s, valid from %3$s to %4$s?</string>
     <string name="nc_yes">Yes</string>
     <string name="nc_no">No</string>
-    <string name="nc_details">Details</string>
     <string name="nc_certificate_error">Your SSL setup prevented connection</string>
 
     <!-- Settings -->
@@ -101,15 +95,9 @@
     <string name="nc_join_via_web">Join via web</string>
     <!-- Contacts -->
     <string name="nc_select_contacts">Select contacts</string>
-    <string name="nc_one_contact_selected">contact selected</string>
-    <string name="nc_more_contacts_selected">contacts selected</string>
-    <string name="nc_contacts_clear">Clear</string>
     <string name="nc_contacts_done">Done</string>
 
     <!-- Permissions -->
-    <string name="nc_permissions">Permissions need to be granted to establish a video and/or audio call. Please click \"ALLOW\" in the upcoming system dialog.</string>
-    <string name="nc_permissions_audio">Microphone permission needs to be granted to enable audio calls. Please click \"ALLOW\" in the upcoming system dialog.</string>
-    <string name="nc_permissions_video">Camera permission needs to be granted to enable video calls. Please click \"ALLOW\" in the upcoming system dialog.</string>
     <string name="nc_camera_permission_permanently_denied">To enable video communication please grant \"Camera\" permission in the system settings.</string>
     <string name="nc_microphone_permission_permanently_denied">To enable voice communication please grant \"Microphone\" permission in the system settings.</string>
     <string name="nc_permissions_settings">Open settings</string>
@@ -141,7 +129,6 @@
     <!-- Magical stuff -->
     <string name="nc_push_to_talk">Press-to-transmit</string>
     <string name="nc_push_to_talk_desc">With the microphone disabled, click&amp;hold to use Press-to-transmit</string>
-    <string name="nc_store_short_desc">Have private video calls and chat using your own server.</string>
     <string name="nc_configure_cert_auth">Select authentication certificate</string>
     <string name="nc_change_cert_auth">Change authentication certificate</string>
     <!-- Chat -->

+ 1 - 40
app/src/main/res/values-cs-rCZ/strings.xml

@@ -20,9 +20,7 @@
 
 <resources>
     <!-- Bottom Navigation -->
-    <string name="nc_bottom_navigation_title_conversations">Konverzace</string>
-    <string name="nc_bottom_navigation_title_contacts">Kontakty</string>
-    <string name="nc_bottom_navigation_title_settings">Nastavení</string>
+    <string name="nc_settings">Nastavení</string>
 
     <!-- Server selection -->
     <string name="nc_server_url">Adresa serveru</string>
@@ -39,14 +37,11 @@
     <string name="nc_get_from_provider">Nemáte ještě server?\nKliknutím sem ho získejte od poskytovatele</string>
 
     <!-- Account verification -->
-    <string name="nc_display_name_fetched">Zobrazované jméno získáno</string>
     <string name="nc_push_disabled">Vyskakovací upozornění zakázána</string>
     <string name="nc_capabilities_failed">Nepodařilo se získat schopnosti, ukončuje se</string>
     <string name="nc_external_server_failed">Nepodařilo se získat nastavení signalizace</string>
     <string name="nc_display_name_not_fetched">Nepodařilo se získat zobrazované jméno, přerušuje se</string>
-    <string name="nc_nextcloud_talk_app_installed">nalezena aplikace %1$s</string>
     <string name="nc_nextcloud_talk_app_not_installed">Aplikace %1$s není na serveru nainstalována, ruší se</string>
-    <string name="nc_display_name_stored">Zobrazované jméno uloženo</string>
     <string name="nc_display_name_not_stored">Nepodařilo se uložit zobrazované jméno, ukončuje se</string>
 
     <string name="nc_never">Nikdy nepřipojeno</string>
@@ -56,7 +51,6 @@
     <string name="nc_certificate_dialog_text">Věříte doposud neznámému SSL certifikátu, vydaném %1$s pro %2$s, platnému od %3$s do %4$s?</string>
     <string name="nc_yes">Ano</string>
     <string name="nc_no">Ne</string>
-    <string name="nc_details">Detaily</string>
     <string name="nc_certificate_error">Vaše nastavení SSL zabránilo připojení</string>
 
     <!-- Settings -->
@@ -116,15 +110,9 @@
 
     <!-- Contacts -->
     <string name="nc_select_contacts">Vybrat kontakty</string>
-    <string name="nc_one_contact_selected">kontakt vybrán</string>
-    <string name="nc_more_contacts_selected">kontakty označeny</string>
-    <string name="nc_contacts_clear">Vyčistit</string>
     <string name="nc_contacts_done">Hotovo</string>
 
     <!-- Permissions -->
-    <string name="nc_permissions">Pro navazování video a/nebo audio volání je třeba udělit oprávnění. V nadcházejícím systémovém dialogu klikněte na „Umožnit“.</string>
-    <string name="nc_permissions_audio">Pro navazování audio hovorů je třeba udělit oprávnění k přístupu k mikrofonu. V nadcházejícím systémovém dialogu klikněte na „Umožnit“.</string>
-    <string name="nc_permissions_video">Aby bylo možné uskutečňovat videohovory, je třeba udělit oprávnění pro přístup ke kameře. V nadcházejícím systémovém dialogu klikněte na „Umožnit“.</string>
     <string name="nc_camera_permission_permanently_denied">Pro zapnutí videokomunikace udělte v nastavení systému oprávnění „Kamera“ .</string>
     <string name="nc_microphone_permission_permanently_denied">Pro zapnutí hlasové komunikace udělte v nastavení systému oprávnění „Mikrofon“ .</string>
     <string name="nc_permissions_settings">Otevřít nastavení</string>
@@ -142,7 +130,6 @@
     <string name="nc_notification_channel_calls">Kanál oznamování volání</string>
     <string name="nc_notification_channel_messages">Kanál oznamování zpráv</string>
     <string name="nc_notification_channel_calls_description">Zobrazit příchozí hovory</string>
-    <string name="nc_notification_channel_Cmessages_description">Zobrazit přicházející zprávy</string>
     <string name="nc_notification_settings">Nastavení oznamování</string>
     <string name="nc_plain_old_messages">Zprávy</string>
     <string name="nc_notify_me_always">Vždy oznamovat</string>
@@ -168,34 +155,8 @@
     <!-- Magical stuff -->
     <string name="nc_push_to_talk">Vysílačka</string>
     <string name="nc_push_to_talk_desc">Při vypnutém mikrofonu, klikněte &amp; držte pro použití vysílačky</string>
-    <string name="nc_store_short_desc">Mějte soukromé videohovory a chat pomocí vlastního serveru.</string>
     <string name="nc_configure_cert_auth">Vyberte ověřovací certifikát</string>
     <string name="nc_change_cert_auth">Změnit certifikát sloužící pro ověřování totožnosti</string>
-    <string name="nc_store_full_desc">Použijte Nextcloud Talk pro zvukové či videohovory dvou osob či skupin, vytvářejte nebo se připojujte k webovým konferencím a posílejte zprávy na chatu. Veškerá komunikace je zcela šifrována a prostředníkem je váš vlastní server, díky čemuž poskytuje nejvyšší možnou úroveň soukromí.
-
-Nextcloud Talk je snadno pužitelný a vždy bude zcela zdarma!
-
-Nextcloud Talk podporuje:
-* HD (H.265) audio/video hovory
-* Skupinové a dvoustranné hovory
-* Webináře &amp; veřejné webové porady
-* Individuální a skupinový chat
-* Snadné sdílení obrazovky
-* Mobilní aplikace pro Android a iOS
-* Mobilní volání &amp; chat push oznamování (pouze pokud je instalováno z Google Play)
-* Napojení na Nextcloud Soubory a Nextcloud Groupware
-* Zcela ve vlastní režii, zcela open source
-* Volání šifrovaná mezi volajícími
-* Škálování na miliony uživatelů
-* SIP brána: volejte telefonem
-
-Aplikace Nextcloud Talk vyžaduje k fungování Nextcloud Talk server. Nextcloud je soukromá, samohostovaná platforma pro synchronizaci souborů a komunikaci, navržená tak, abyste získali zpět vládu nad svými daty. Funguje na serveru, který si zvolíte, ať už doma, u poskytovatele služeb nebo u vás ve firmě, a zpřístupňuje vám dokumenty, kalendáře, kontakty, e-mail a ostatní data. Sdílet je možné dokonce napříč různými instancemi Nextcloud serveru a pracovat společně na dokumentech. Nextcloud je zcela open source, díky čemuž je možné ho rozšířit pro vaše potřeby, podílet se na jeho vývoji nebo „jen“ prověřit to, co slibujeme.
-
-Nextcloud každý den používá miliony uživatelů na celém světě, v práci i doma. Firemní uživatelé se mohou spolehnout na profesionální podporu Nextcloud GmbH, což jim zajišťuje že mají zcela podporovanou, pro produkční nasazení připravenou platformu pro produktivitu a spolupráci, která je zcela pod kontrolou jejich IT oddělení.
-
-Více se dozvíte na https://nextcloud.com/talk
-
-Nextcloud naleznete na https://nextcloud.com</string>
 
     <!-- Chat -->
     <string name="nc_hint_enter_a_message">Zadejte zprávu…</string>

+ 1 - 40
app/src/main/res/values-de/strings.xml

@@ -20,9 +20,7 @@
 
 <resources>
     <!-- Bottom Navigation -->
-    <string name="nc_bottom_navigation_title_conversations">Unterhaltungen</string>
-    <string name="nc_bottom_navigation_title_contacts">Kontakte</string>
-    <string name="nc_bottom_navigation_title_settings">Einstellungen</string>
+    <string name="nc_settings">Einstellungen</string>
 
     <!-- Server selection -->
     <string name="nc_server_url">Serveradresse</string>
@@ -39,14 +37,11 @@
     <string name="nc_get_from_provider">Sie haben noch keinen Server?\nKlicken Sie hier um Server-Anbieter zu finden</string>
 
     <!-- Account verification -->
-    <string name="nc_display_name_fetched">Anzeigename abgerufen</string>
     <string name="nc_push_disabled">Push-Benachrichtigungen sind deaktiviert</string>
     <string name="nc_capabilities_failed">Fehler beim Abfragen der Fähigkeiten. Abbruch</string>
     <string name="nc_external_server_failed">Konnte die Benachrichtigungseinstellungen nicht abrufen</string>
     <string name="nc_display_name_not_fetched">Anzeigename konnte nicht abgerufen werden, Abbruch</string>
-    <string name="nc_nextcloud_talk_app_installed">%1$s App gefunden</string>
     <string name="nc_nextcloud_talk_app_not_installed">%1$s App nicht auf dem Server installiert, Abbruch</string>
-    <string name="nc_display_name_stored">Anzeigename gespeichert</string>
     <string name="nc_display_name_not_stored">Der Anzeigename konnte nicht gespeichert werden, Abbruch</string>
 
     <string name="nc_never">Nie beigetreten</string>
@@ -56,7 +51,6 @@
     <string name="nc_certificate_dialog_text">Vertrauen Sie dem bisher unbekannten SSL Zertifikat, ausgestellt von %1$s für %2$s, gültig von %3$s bis %4$s?</string>
     <string name="nc_yes">Ja</string>
     <string name="nc_no">Nein</string>
-    <string name="nc_details">Details</string>
     <string name="nc_certificate_error">Ihre SSL Konfiguration hat die Verbindung verhindert</string>
 
     <!-- Settings -->
@@ -116,15 +110,9 @@
 
     <!-- Contacts -->
     <string name="nc_select_contacts">Kontakte auswählen</string>
-    <string name="nc_one_contact_selected">Kontakt ausgewählt</string>
-    <string name="nc_more_contacts_selected">Kontakte ausgewählt</string>
-    <string name="nc_contacts_clear">Alle abwählen</string>
     <string name="nc_contacts_done">Fertig</string>
 
     <!-- Permissions -->
-    <string name="nc_permissions">Für Video- und Audioanrufe müssen Berechtigungen erteilt werden. Bitte klicken Sie im folgenden Systemdialog auf \\"ZULASSEN\\".</string>
-    <string name="nc_permissions_audio">Für die Nutzung des Mikrophons für Audioanrufe muss eine Berechtigungen erteilt werden. Bitte klicken Sie im folgenden Systemdialog auf \"ZULASSEN\".</string>
-    <string name="nc_permissions_video">Für die Nutzung der Kamera für Videoanrufe muss eine Berechtigungen erteilt werden. Bitte klicken Sie im folgenden Systemdialog auf \"ZULASSEN\".</string>
     <string name="nc_camera_permission_permanently_denied">Um Videoanrufe zu ermöglichen, gewähren Sie die Berechtigung für die \"Kamera\" in den Systemeinstellungen</string>
     <string name="nc_microphone_permission_permanently_denied">Um Audioanrufe zu ermöglichen, gewähren Sie die Berechtigung für das \"Mikrofon\" in den Systemeinstellungen</string>
     <string name="nc_permissions_settings">Einstellungen öffnen</string>
@@ -142,7 +130,6 @@
     <string name="nc_notification_channel_calls">Benachrichtigungskanal für Anrufe</string>
     <string name="nc_notification_channel_messages">Benachrichtigungskanal für Nachrichten</string>
     <string name="nc_notification_channel_calls_description">Eingehende Anrufe anzeigen</string>
-    <string name="nc_notification_channel_Cmessages_description">Zeigt eingehende Nachrichten</string>
     <string name="nc_notification_settings">Benachrichtigungseinstellungen</string>
     <string name="nc_plain_old_messages">Nachrichten</string>
     <string name="nc_notify_me_always">Immer benachrichtigen</string>
@@ -168,34 +155,8 @@
     <!-- Magical stuff -->
     <string name="nc_push_to_talk">Funkgerät-Modus</string>
     <string name="nc_push_to_talk_desc">Bei stummgeschaltetem Mikrofon drücken&amp;halten Sie die Sprechtaste um zu senden (Funkgerät-Modus)</string>
-    <string name="nc_store_short_desc">Nutzen Sie private Videoanrufe und den Chat durch die Verwendung eines eigenen Servers.</string>
     <string name="nc_configure_cert_auth">Authentifizierungs-Zertifikat auswählen</string>
     <string name="nc_change_cert_auth">Authentifizierungs-Zertifikat ändern</string>
-    <string name="nc_store_full_desc">Verwenden Sie Nextcloud Talk, um Einzel- oder Gruppen-Audio- oder Videoanrufe zu führen, Webkonferenzen zu erstellen oder daran teilzunehmen und Chatnachrichten zu senden. Die gesamte Kommunikation wird vollständig verschlüsselt und von Ihrem eigenen Server vermittelt, um ein höchstmögliches Maß an Privatsphäre zu gewährleisten.
-
-Nextcloud Talk ist einfach zu bedienen und wird immer kostenlos sein!
-
-Nextcloud Talk unterstützt:
-* HD (H.265) Audio- / Videoanrufe
-* Gruppen- und Einzelanrufe
-* Webinare&amp; öffentliche Web-Meetings
-* Einzel- und Gruppenchat
-* Einfache Bildschirmfreigabe
-* Mobile Apps für Android und iOS
-* Mobile Anrufe&amp; Chat-Push-Benachrichtigungen (nur bei Installation von Google Play)
-* Integration in Nextcloud-Dateien und Nextcloud Groupware
-* Vollständig on-premise, 100% Open Source
-* Ende-zu-Ende verschlüsselte Anrufe
-* Skalierung für Millionen von Benutzern
-* SIP-Gate: per Telefon einwählen
-
-Die App Nextcloud Talk benötigt einen Nextcloud Talk-Server, um zu funktionieren. Nextcloud ist eine private, selbst gehostete Dateisynchronisations- und Kommunikationsplattform, die Ihnen die Kontrolle über Ihre Daten zurückgibt. Es läuft auf einem Server Ihrer Wahl, sei es zu Hause, bei einem Dienstanbieter oder in Ihrem Unternehmen, und gibt Ihnen Zugriff auf Ihre Dokumente, Kalender, Kontakte, E-Mails und andere Daten. Sie können mit anderen sogar über verschiedene Nextcloud-Server teilen und gemeinsam an Dokumenten arbeiten. Nextcloud ist eine Open-Source-Lösung, die Ihnen die Möglichkeit bietet, sie für Ihre eigenen Zwecke zu erweitern, an deren Entwicklung teilzunehmen oder einfach zu überprüfen, ob sie das tun, was wir versprechen.
-
-Millionen von Benutzern nutzen Nextcloud täglich in Unternehmen und zu Hause auf der ganzen Welt. Geschäftsanwender verlassen sich auf die professionelle Unterstützung der Nextcloud GmbH und stellen sicher, dass sie über eine vollständig unterstützte, unternehmensbereite Plattform für Produktivität und Zusammenarbeit verfügen, die vollständig von ihrer IT-Abteilung gesteuert wird.
-
-Weitere Informationen erhalten Sie unter https://nextcloud.com/talk
-
-Finden Sie Nextcloud auf https://nextcloud.com</string>
 
     <!-- Chat -->
     <string name="nc_hint_enter_a_message">Eine Nachricht eingeben…</string>

+ 1 - 8
app/src/main/res/values-el/strings.xml

@@ -20,9 +20,7 @@
 
 <resources>
     <!-- Bottom Navigation -->
-    <string name="nc_bottom_navigation_title_conversations">Συζητήσεις</string>
-    <string name="nc_bottom_navigation_title_contacts">Επαφές</string>
-    <string name="nc_bottom_navigation_title_settings">Ρυθμίσεις</string>
+    <string name="nc_settings">Ρυθμίσεις</string>
 
     <!-- Server selection -->
     <string name="nc_server_url">Διεύθυνση διακομιστή</string>
@@ -39,7 +37,6 @@
     <string name="nc_certificate_dialog_title">Ελέγξτε το πιστοποιητικό</string>
     <string name="nc_yes">Ναι</string>
     <string name="nc_no">Όχι</string>
-    <string name="nc_details">Λεπτομέρειες</string>
     <!-- Settings -->
     <string name="nc_settings_proxy_title">Διαμεσολαβητής</string>
     <string name="nc_settings_proxy_type_title">Τύπος διαμεσολαβητή</string>
@@ -79,9 +76,6 @@
 
     <!-- Contacts -->
     <string name="nc_select_contacts">Επιλογή επαφών</string>
-    <string name="nc_one_contact_selected">η επαφή επιλέχθηκε</string>
-    <string name="nc_more_contacts_selected">οι επαφές επιλέχθηκαν</string>
-    <string name="nc_contacts_clear">Εκκαθάριση</string>
     <string name="nc_contacts_done">Ολοκληρώθηκε</string>
 
     <string name="nc_permissions_settings">Άνοιγμα ρυθμίσεων</string>
@@ -101,7 +95,6 @@
     <string name="nc_share_subject">%1$s πρόσκληση</string>
     <string name="nc_share_text_pass">\nΣυνθηματικό: %1$s</string>
 
-    <string name="nc_store_short_desc">Ιδιωτικές κλήσεις βίντεο και συνομιλίας με την χρήση δικό σας διακομιστή.</string>
     <!-- Chat -->
     <string name="nc_hint_enter_a_message">Εισάγετε ένα μήνυμα…</string>
     <string name="nc_date_header_yesterday">Χθές</string>

+ 1 - 14
app/src/main/res/values-es-rCL/strings.xml

@@ -20,9 +20,7 @@
 
 <resources>
     <!-- Bottom Navigation -->
-    <string name="nc_bottom_navigation_title_conversations">Conversaciones</string>
-    <string name="nc_bottom_navigation_title_contacts">Contactos</string>
-    <string name="nc_bottom_navigation_title_settings">Configuraciones</string>
+    <string name="nc_settings">Configuraciones</string>
 
     <!-- Server selection -->
     <string name="nc_server_url">Dirección del servidor</string>
@@ -39,13 +37,10 @@
     <string name="nc_get_from_provider">¿Aún no cuentas con un servidor?\nHaz click aquí para obtener uno de un proveedor</string>
 
     <!-- Account verification -->
-    <string name="nc_display_name_fetched">Se obtuvo el nombre a desplegar</string>
     <string name="nc_push_disabled">Notificaciones push deshabilitadas</string>
     <string name="nc_capabilities_failed">Se presentó una falla al recuperar las capacidades, abortando</string>
     <string name="nc_display_name_not_fetched">No se pudo obtener el nombre a desplegar, abortando</string>
-    <string name="nc_nextcloud_talk_app_installed">Aplicación %1$s encontrada</string>
     <string name="nc_nextcloud_talk_app_not_installed">La aplicación %1$s no está instalada en el servidor, abortando</string>
-    <string name="nc_display_name_stored">Nombre a mostrar almacenado</string>
     <string name="nc_display_name_not_stored">No se pudo almacenar el nombre a desplegar, abortando</string>
 
     <string name="nc_never">Nunca se unió</string>
@@ -55,7 +50,6 @@
     <string name="nc_certificate_dialog_text">¿Confias en el certificado SSL, hasta ahora desconocido, emitido por %1$s para %2$s, con validez del %3$s al %4$s?</string>
     <string name="nc_yes">Sí</string>
     <string name="nc_no">No</string>
-    <string name="nc_details">Detalles</string>
     <string name="nc_certificate_error">Tu configuración de SSL impidió la conexión</string>
 
     <!-- Settings -->
@@ -101,15 +95,9 @@
     <string name="nc_join_via_web">Únete vía web</string>
     <!-- Contacts -->
     <string name="nc_select_contacts">Selecciona los contactos</string>
-    <string name="nc_one_contact_selected">contacto seleccionado</string>
-    <string name="nc_more_contacts_selected">contactos seleccionados</string>
-    <string name="nc_contacts_clear">Limpiar</string>
     <string name="nc_contacts_done">Terminado</string>
 
     <!-- Permissions -->
-    <string name="nc_permissions">Hay permisos que necesitan ser otorgados para establecer una video y/o audio llamada. Por favor haz click en \"PERMITIR\" en la sigueinte ventana de diálogo del sistema. </string>
-    <string name="nc_permissions_audio">El permiso de micrófono necesita ser otorgado para habilitar llamadas de audio. Por favor haz click en \"PERMITIR\" en la siguiente ventana de diálogo del sistema. </string>
-    <string name="nc_permissions_video">El permiso de la cámara necesita ser otorgado para habilitar video llamadas. Por favor haz click en \"PERMITIR\" en la siguiente ventana de diálogo del sistema. </string>
     <string name="nc_camera_permission_permanently_denied">Para habilitar la comunicación con video por favor otorga el permiso de \"Cámara\" en la configuración del sistema. </string>
     <string name="nc_microphone_permission_permanently_denied">Para habilitar la comunicacion con voz por favor otorga el privilegio de \"Microfono\" en las configuraciones del sistema. </string>
     <string name="nc_permissions_settings">Abrir configuraciones</string>
@@ -141,7 +129,6 @@ teléfonos móviles. Puedes intentar unirte a la conversación a través de un n
     <!-- Magical stuff -->
     <string name="nc_push_to_talk">Presiona-para-hablar</string>
     <string name="nc_push_to_talk_desc">Con el microfono deshabilitado, haz click &amp; presiona para usar Presiona-para-hablar</string>
-    <string name="nc_store_short_desc">Haz video llamadas y chats privados usnaod tu propio servidor.</string>
     <string name="nc_configure_cert_auth">Seleccionar el certificado de autenticación</string>
     <string name="nc_change_cert_auth">Cambiar el certificado de atuenticación</string>
     <!-- Chat -->

+ 1 - 14
app/src/main/res/values-es-rCO/strings.xml

@@ -20,9 +20,7 @@
 
 <resources>
     <!-- Bottom Navigation -->
-    <string name="nc_bottom_navigation_title_conversations">Conversaciones</string>
-    <string name="nc_bottom_navigation_title_contacts">Contactos</string>
-    <string name="nc_bottom_navigation_title_settings">Configuraciones</string>
+    <string name="nc_settings">Configuraciones</string>
 
     <!-- Server selection -->
     <string name="nc_server_url">Dirección del servidor</string>
@@ -39,13 +37,10 @@
     <string name="nc_get_from_provider">¿Aún no cuentas con un servidor?\nHaz click aquí para obtener uno de un proveedor</string>
 
     <!-- Account verification -->
-    <string name="nc_display_name_fetched">Se obtuvo el nombre a desplegar</string>
     <string name="nc_push_disabled">Notificaciones push deshabilitadas</string>
     <string name="nc_capabilities_failed">Se presentó una falla al recuperar las capacidades, abortando</string>
     <string name="nc_display_name_not_fetched">No se pudo obtener el nombre a desplegar, abortando</string>
-    <string name="nc_nextcloud_talk_app_installed">Aplicación %1$s encontrada</string>
     <string name="nc_nextcloud_talk_app_not_installed">La aplicación %1$s no está instalada en el servidor, abortando</string>
-    <string name="nc_display_name_stored">Nombre a mostrar almacenado</string>
     <string name="nc_display_name_not_stored">No se pudo almacenar el nombre a desplegar, abortando</string>
 
     <string name="nc_never">Nunca se unió</string>
@@ -55,7 +50,6 @@
     <string name="nc_certificate_dialog_text">¿Confias en el certificado SSL, hasta ahora desconocido, emitido por %1$s para %2$s, con validez del %3$s al %4$s?</string>
     <string name="nc_yes">Sí</string>
     <string name="nc_no">No</string>
-    <string name="nc_details">Detalles</string>
     <string name="nc_certificate_error">Tu configuración de SSL impidió la conexión</string>
 
     <!-- Settings -->
@@ -101,15 +95,9 @@
     <string name="nc_join_via_web">Únete vía web</string>
     <!-- Contacts -->
     <string name="nc_select_contacts">Selecciona los contactos</string>
-    <string name="nc_one_contact_selected">contacto seleccionado</string>
-    <string name="nc_more_contacts_selected">contactos seleccionados</string>
-    <string name="nc_contacts_clear">Limpiar</string>
     <string name="nc_contacts_done">Terminado</string>
 
     <!-- Permissions -->
-    <string name="nc_permissions">Hay permisos que necesitan ser otorgados para establecer una video y/o audio llamada. Por favor haz click en \"PERMITIR\" en la sigueinte ventana de diálogo del sistema. </string>
-    <string name="nc_permissions_audio">El permiso de micrófono necesita ser otorgado para habilitar llamadas de audio. Por favor haz click en \"PERMITIR\" en la siguiente ventana de diálogo del sistema. </string>
-    <string name="nc_permissions_video">El permiso de la cámara necesita ser otorgado para habilitar video llamadas. Por favor haz click en \"PERMITIR\" en la siguiente ventana de diálogo del sistema. </string>
     <string name="nc_camera_permission_permanently_denied">Para habilitar la comunicación con video por favor otorga el permiso de \"Cámara\" en la configuración del sistema. </string>
     <string name="nc_microphone_permission_permanently_denied">Para habilitar la comunicacion con voz por favor otorga el privilegio de \"Microfono\" en las configuraciones del sistema. </string>
     <string name="nc_permissions_settings">Abrir configuraciones</string>
@@ -141,7 +129,6 @@ teléfonos móviles. Puedes intentar unirte a la conversación a través de un n
     <!-- Magical stuff -->
     <string name="nc_push_to_talk">Presiona-para-hablar</string>
     <string name="nc_push_to_talk_desc">Con el microfono deshabilitado, haz click &amp; presiona para usar Presiona-para-hablar</string>
-    <string name="nc_store_short_desc">Haz video llamadas y chats privados usnaod tu propio servidor.</string>
     <string name="nc_configure_cert_auth">Seleccionar el certificado de autenticación</string>
     <string name="nc_change_cert_auth">Cambiar el certificado de atuenticación</string>
     <!-- Chat -->

+ 1 - 14
app/src/main/res/values-es-rCR/strings.xml

@@ -20,9 +20,7 @@
 
 <resources>
     <!-- Bottom Navigation -->
-    <string name="nc_bottom_navigation_title_conversations">Conversaciones</string>
-    <string name="nc_bottom_navigation_title_contacts">Contactos</string>
-    <string name="nc_bottom_navigation_title_settings">Configuraciones</string>
+    <string name="nc_settings">Configuraciones</string>
 
     <!-- Server selection -->
     <string name="nc_server_url">Dirección del servidor</string>
@@ -39,13 +37,10 @@
     <string name="nc_get_from_provider">¿Aún no cuentas con un servidor?\nHaz click aquí para obtener uno de un proveedor</string>
 
     <!-- Account verification -->
-    <string name="nc_display_name_fetched">Se obtuvo el nombre a desplegar</string>
     <string name="nc_push_disabled">Notificaciones push deshabilitadas</string>
     <string name="nc_capabilities_failed">Se presentó una falla al recuperar las capacidades, abortando</string>
     <string name="nc_display_name_not_fetched">No se pudo obtener el nombre a desplegar, abortando</string>
-    <string name="nc_nextcloud_talk_app_installed">Aplicación %1$s encontrada</string>
     <string name="nc_nextcloud_talk_app_not_installed">La aplicación %1$s no está instalada en el servidor, abortando</string>
-    <string name="nc_display_name_stored">Nombre a mostrar almacenado</string>
     <string name="nc_display_name_not_stored">No se pudo almacenar el nombre a desplegar, abortando</string>
 
     <string name="nc_never">Nunca se unió</string>
@@ -55,7 +50,6 @@
     <string name="nc_certificate_dialog_text">¿Confias en el certificado SSL, hasta ahora desconocido, emitido por %1$s para %2$s, con validez del %3$s al %4$s?</string>
     <string name="nc_yes">Sí</string>
     <string name="nc_no">No</string>
-    <string name="nc_details">Detalles</string>
     <string name="nc_certificate_error">Tu configuración de SSL impidió la conexión</string>
 
     <!-- Settings -->
@@ -101,15 +95,9 @@
     <string name="nc_join_via_web">Únete vía web</string>
     <!-- Contacts -->
     <string name="nc_select_contacts">Selecciona los contactos</string>
-    <string name="nc_one_contact_selected">contacto seleccionado</string>
-    <string name="nc_more_contacts_selected">contactos seleccionados</string>
-    <string name="nc_contacts_clear">Limpiar</string>
     <string name="nc_contacts_done">Terminado</string>
 
     <!-- Permissions -->
-    <string name="nc_permissions">Hay permisos que necesitan ser otorgados para establecer una video y/o audio llamada. Por favor haz click en \"PERMITIR\" en la sigueinte ventana de diálogo del sistema. </string>
-    <string name="nc_permissions_audio">El permiso de micrófono necesita ser otorgado para habilitar llamadas de audio. Por favor haz click en \"PERMITIR\" en la siguiente ventana de diálogo del sistema. </string>
-    <string name="nc_permissions_video">El permiso de la cámara necesita ser otorgado para habilitar video llamadas. Por favor haz click en \"PERMITIR\" en la siguiente ventana de diálogo del sistema. </string>
     <string name="nc_camera_permission_permanently_denied">Para habilitar la comunicación con video por favor otorga el permiso de \"Cámara\" en la configuración del sistema. </string>
     <string name="nc_microphone_permission_permanently_denied">Para habilitar la comunicacion con voz por favor otorga el privilegio de \"Microfono\" en las configuraciones del sistema. </string>
     <string name="nc_permissions_settings">Abrir configuraciones</string>
@@ -141,7 +129,6 @@ teléfonos móviles. Puedes intentar unirte a la conversación a través de un n
     <!-- Magical stuff -->
     <string name="nc_push_to_talk">Presiona-para-hablar</string>
     <string name="nc_push_to_talk_desc">Con el microfono deshabilitado, haz click &amp; presiona para usar Presiona-para-hablar</string>
-    <string name="nc_store_short_desc">Haz video llamadas y chats privados usnaod tu propio servidor.</string>
     <string name="nc_configure_cert_auth">Seleccionar el certificado de autenticación</string>
     <string name="nc_change_cert_auth">Cambiar el certificado de atuenticación</string>
     <!-- Chat -->

+ 1 - 14
app/src/main/res/values-es-rDO/strings.xml

@@ -20,9 +20,7 @@
 
 <resources>
     <!-- Bottom Navigation -->
-    <string name="nc_bottom_navigation_title_conversations">Conversaciones</string>
-    <string name="nc_bottom_navigation_title_contacts">Contactos</string>
-    <string name="nc_bottom_navigation_title_settings">Configuraciones</string>
+    <string name="nc_settings">Configuraciones</string>
 
     <!-- Server selection -->
     <string name="nc_server_url">Dirección del servidor</string>
@@ -39,13 +37,10 @@
     <string name="nc_get_from_provider">¿Aún no cuentas con un servidor?\nHaz click aquí para obtener uno de un proveedor</string>
 
     <!-- Account verification -->
-    <string name="nc_display_name_fetched">Se obtuvo el nombre a desplegar</string>
     <string name="nc_push_disabled">Notificaciones push deshabilitadas</string>
     <string name="nc_capabilities_failed">Se presentó una falla al recuperar las capacidades, abortando</string>
     <string name="nc_display_name_not_fetched">No se pudo obtener el nombre a desplegar, abortando</string>
-    <string name="nc_nextcloud_talk_app_installed">Aplicación %1$s encontrada</string>
     <string name="nc_nextcloud_talk_app_not_installed">La aplicación %1$s no está instalada en el servidor, abortando</string>
-    <string name="nc_display_name_stored">Nombre a mostrar almacenado</string>
     <string name="nc_display_name_not_stored">No se pudo almacenar el nombre a desplegar, abortando</string>
 
     <string name="nc_never">Nunca se unió</string>
@@ -55,7 +50,6 @@
     <string name="nc_certificate_dialog_text">¿Confias en el certificado SSL, hasta ahora desconocido, emitido por %1$s para %2$s, con validez del %3$s al %4$s?</string>
     <string name="nc_yes">Sí</string>
     <string name="nc_no">No</string>
-    <string name="nc_details">Detalles</string>
     <string name="nc_certificate_error">Tu configuración de SSL impidió la conexión</string>
 
     <!-- Settings -->
@@ -101,15 +95,9 @@
     <string name="nc_join_via_web">Únete vía web</string>
     <!-- Contacts -->
     <string name="nc_select_contacts">Selecciona los contactos</string>
-    <string name="nc_one_contact_selected">contacto seleccionado</string>
-    <string name="nc_more_contacts_selected">contactos seleccionados</string>
-    <string name="nc_contacts_clear">Limpiar</string>
     <string name="nc_contacts_done">Terminado</string>
 
     <!-- Permissions -->
-    <string name="nc_permissions">Hay permisos que necesitan ser otorgados para establecer una video y/o audio llamada. Por favor haz click en \"PERMITIR\" en la sigueinte ventana de diálogo del sistema. </string>
-    <string name="nc_permissions_audio">El permiso de micrófono necesita ser otorgado para habilitar llamadas de audio. Por favor haz click en \"PERMITIR\" en la siguiente ventana de diálogo del sistema. </string>
-    <string name="nc_permissions_video">El permiso de la cámara necesita ser otorgado para habilitar video llamadas. Por favor haz click en \"PERMITIR\" en la siguiente ventana de diálogo del sistema. </string>
     <string name="nc_camera_permission_permanently_denied">Para habilitar la comunicación con video por favor otorga el permiso de \"Cámara\" en la configuración del sistema. </string>
     <string name="nc_microphone_permission_permanently_denied">Para habilitar la comunicacion con voz por favor otorga el privilegio de \"Microfono\" en las configuraciones del sistema. </string>
     <string name="nc_permissions_settings">Abrir configuraciones</string>
@@ -141,7 +129,6 @@ teléfonos móviles. Puedes intentar unirte a la conversación a través de un n
     <!-- Magical stuff -->
     <string name="nc_push_to_talk">Presiona-para-hablar</string>
     <string name="nc_push_to_talk_desc">Con el microfono deshabilitado, haz click &amp; presiona para usar Presiona-para-hablar</string>
-    <string name="nc_store_short_desc">Haz video llamadas y chats privados usnaod tu propio servidor.</string>
     <string name="nc_configure_cert_auth">Seleccionar el certificado de autenticación</string>
     <string name="nc_change_cert_auth">Cambiar el certificado de atuenticación</string>
     <!-- Chat -->

Some files were not shown because too many files changed in this diff