Explorar el Código

delete deprecated CallItem + refactor related code

CallItem was only used before NC 14.
rv_item_conversation.xml was used by CallItem. After CallItem is now deleted, rv_item_conversation.xml was deleted from other xml classes as "tool"-view (this didn't make sense & was only a placeholder)
Furthermore, it was renamed to account_item.xml as now it is only used for account selection.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
Marcel Hibbe hace 3 años
padre
commit
70b4eed654

+ 4 - 17
app/src/main/java/com/nextcloud/talk/adapters/items/AdvancedUserItem.java

@@ -100,7 +100,7 @@ public class AdvancedUserItem extends AbstractFlexibleItem<AdvancedUserItem.User
 
     @Override
     public int getLayoutRes() {
-        return R.layout.rv_item_conversation;
+        return R.layout.account_item;
     }
 
     @Override
@@ -145,11 +145,6 @@ public class AdvancedUserItem extends AbstractFlexibleItem<AdvancedUserItem.User
             holder.avatarImageView.setController(draweeController);
         } else {
             holder.avatarImageView.setVisibility(View.GONE);
-            RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) holder.linearLayout.getLayoutParams();
-            layoutParams.setMarginStart((int) NextcloudTalkApplication.Companion.getSharedApplication().getApplicationContext()
-                    .getResources().getDimension(R.dimen.activity_horizontal_margin));
-            layoutParams.addRule(RelativeLayout.ALIGN_PARENT_START);
-            holder.linearLayout.setLayoutParams(layoutParams);
         }
     }
 
@@ -162,18 +157,12 @@ public class AdvancedUserItem extends AbstractFlexibleItem<AdvancedUserItem.User
 
     static class UserItemViewHolder extends FlexibleViewHolder {
 
-        @BindView(R.id.name_text)
+        @BindView(R.id.user_name)
         public EmojiTextView contactDisplayName;
-        @BindView(R.id.secondary_text)
+        @BindView(R.id.account)
         public TextView serverUrl;
-        @BindView(R.id.avatar_image)
+        @BindView(R.id.user_icon)
         public SimpleDraweeView avatarImageView;
-        @BindView(R.id.linear_layout)
-        LinearLayout linearLayout;
-        @BindView(R.id.more_menu)
-        ImageButton moreMenuButton;
-        @BindView(R.id.password_protected_image_view)
-        ImageView passwordProtectedImageView;
 
         /**
          * Default constructor.
@@ -181,8 +170,6 @@ public class AdvancedUserItem extends AbstractFlexibleItem<AdvancedUserItem.User
         UserItemViewHolder(View view, FlexibleAdapter adapter) {
             super(view, adapter);
             ButterKnife.bind(this, view);
-            moreMenuButton.setVisibility(View.GONE);
-            passwordProtectedImageView.setVisibility(View.GONE);
         }
     }
 }

+ 0 - 207
app/src/main/java/com/nextcloud/talk/adapters/items/CallItem.java

@@ -1,207 +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/>.
- */
-
-package com.nextcloud.talk.adapters.items;
-
-import android.content.res.Resources;
-import android.text.TextUtils;
-import android.text.format.DateUtils;
-import android.view.View;
-import android.widget.ImageButton;
-import android.widget.ImageView;
-
-import com.facebook.drawee.backends.pipeline.Fresco;
-import com.facebook.drawee.interfaces.DraweeController;
-import com.facebook.drawee.view.SimpleDraweeView;
-import com.nextcloud.talk.R;
-import com.nextcloud.talk.application.NextcloudTalkApplication;
-import com.nextcloud.talk.events.MoreMenuClickEvent;
-import com.nextcloud.talk.models.database.UserEntity;
-import com.nextcloud.talk.models.json.conversations.Conversation;
-import com.nextcloud.talk.utils.ApiUtils;
-import com.nextcloud.talk.utils.DisplayUtils;
-
-import org.greenrobot.eventbus.EventBus;
-
-import java.util.List;
-import java.util.regex.Pattern;
-
-import androidx.emoji.widget.EmojiTextView;
-import butterknife.BindView;
-import butterknife.ButterKnife;
-import eu.davidea.flexibleadapter.FlexibleAdapter;
-import eu.davidea.flexibleadapter.items.AbstractFlexibleItem;
-import eu.davidea.flexibleadapter.items.IFilterable;
-import eu.davidea.flexibleadapter.items.ISectionable;
-import eu.davidea.flexibleadapter.utils.FlexibleUtils;
-import eu.davidea.viewholders.FlexibleViewHolder;
-
-public class CallItem extends AbstractFlexibleItem<CallItem.RoomItemViewHolder> implements ISectionable<CallItem.RoomItemViewHolder, GenericTextHeaderItem>, IFilterable<String> {
-
-    private Conversation conversation;
-    private UserEntity userEntity;
-    private GenericTextHeaderItem header;
-
-    public CallItem(Conversation conversation, UserEntity userEntity) {
-        this.conversation = conversation;
-        this.userEntity = userEntity;
-    }
-
-    public CallItem(Conversation conversation, UserEntity userEntity, GenericTextHeaderItem genericTextHeaderItem) {
-        this.conversation = conversation;
-        this.userEntity = userEntity;
-        this.header = genericTextHeaderItem;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (o instanceof CallItem) {
-            CallItem inItem = (CallItem) o;
-            return conversation.equals(inItem.getModel());
-        }
-        return false;
-    }
-
-    @Override
-    public int hashCode() {
-        return conversation.hashCode();
-    }
-
-    /**
-     * @return the model object
-     */
-
-    public Conversation getModel() {
-        return conversation;
-    }
-
-    /**
-     * Filter is applied to the model fields.
-     */
-
-    @Override
-    public int getLayoutRes() {
-        return R.layout.rv_item_conversation;
-    }
-
-    @Override
-    public RoomItemViewHolder createViewHolder(View view, FlexibleAdapter adapter) {
-        return new RoomItemViewHolder(view, adapter);
-    }
-
-    @Override
-    public void bindViewHolder(final FlexibleAdapter adapter, RoomItemViewHolder holder, int position, List payloads) {
-        if (adapter.hasFilter()) {
-            FlexibleUtils.highlightText(holder.roomDisplayName, conversation.getDisplayName(),
-                    String.valueOf(adapter.getFilter(String.class)), NextcloudTalkApplication.Companion.getSharedApplication()
-                            .getResources().getColor(R.color.colorPrimary));
-        } else {
-            holder.roomDisplayName.setText(conversation.getDisplayName());
-        }
-
-        if (conversation.getLastPing() == 0) {
-            holder.roomLastPing.setText(R.string.nc_never);
-        } else {
-            holder.roomLastPing.setText(DateUtils.getRelativeTimeSpanString(conversation.getLastPing() * 1000L,
-                    System.currentTimeMillis(), 0, DateUtils.FORMAT_ABBREV_RELATIVE));
-        }
-
-        if (conversation.hasPassword) {
-            holder.passwordProtectedImageView.setVisibility(View.VISIBLE);
-        } else {
-            holder.passwordProtectedImageView.setVisibility(View.GONE);
-        }
-
-        Resources resources = NextcloudTalkApplication.Companion.getSharedApplication().getResources();
-        switch (conversation.getType()) {
-            case ROOM_TYPE_ONE_TO_ONE_CALL:
-                holder.avatarImageView.setVisibility(View.VISIBLE);
-
-                holder.moreMenuButton.setContentDescription(String.format(resources.getString(R.string
-                        .nc_description_more_menu_one_to_one), conversation.getDisplayName()));
-
-                if (!TextUtils.isEmpty(conversation.getName())) {
-                    DraweeController draweeController = Fresco.newDraweeControllerBuilder()
-                            .setOldController(holder.avatarImageView.getController())
-                            .setAutoPlayAnimations(true)
-                            .setImageRequest(DisplayUtils.getImageRequestForUrl(ApiUtils.getUrlForAvatarWithName(userEntity.getBaseUrl(),
-                                    conversation.getName(),
-                                    R.dimen.avatar_size), null))
-                            .build();
-                    holder.avatarImageView.setController(draweeController);
-                } else {
-                    holder.avatarImageView.setVisibility(View.GONE);
-                }
-                break;
-            case ROOM_GROUP_CALL:
-                holder.moreMenuButton.setContentDescription(String.format(resources.getString(R.string
-                        .nc_description_more_menu_group), conversation.getDisplayName()));
-                holder.avatarImageView.setActualImageResource(R.drawable.ic_circular_group);
-                holder.avatarImageView.setVisibility(View.VISIBLE);
-                break;
-            case ROOM_PUBLIC_CALL:
-                holder.moreMenuButton.setContentDescription(String.format(resources.getString(R.string
-                        .nc_description_more_menu_public), conversation.getDisplayName()));
-                holder.avatarImageView.setActualImageResource(R.drawable.ic_circular_link);
-                holder.avatarImageView.setVisibility(View.VISIBLE);
-                break;
-            default:
-                holder.avatarImageView.setVisibility(View.GONE);
-
-        }
-
-        holder.moreMenuButton.setOnClickListener(view -> EventBus.getDefault().post(new MoreMenuClickEvent(conversation)));
-    }
-
-    @Override
-    public boolean filter(String constraint) {
-        return conversation.getDisplayName() != null &&
-                Pattern.compile(constraint, Pattern.CASE_INSENSITIVE | Pattern.LITERAL).matcher(conversation.getDisplayName().trim()).find();
-    }
-
-    @Override
-    public GenericTextHeaderItem getHeader() {
-        return header;
-    }
-
-    @Override
-    public void setHeader(GenericTextHeaderItem header) {
-        this.header = header;
-    }
-
-    static class RoomItemViewHolder extends FlexibleViewHolder {
-
-        @BindView(R.id.name_text)
-        public EmojiTextView roomDisplayName;
-        @BindView(R.id.secondary_text)
-        public EmojiTextView roomLastPing;
-        @BindView(R.id.avatar_image)
-        public SimpleDraweeView avatarImageView;
-        @BindView(R.id.more_menu)
-        public ImageButton moreMenuButton;
-        @BindView(R.id.password_protected_image_view)
-        ImageView passwordProtectedImageView;
-
-        RoomItemViewHolder(View view, FlexibleAdapter adapter) {
-            super(view, adapter);
-            ButterKnife.bind(this, view);
-        }
-    }
-}

+ 42 - 90
app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java

@@ -65,7 +65,6 @@ import com.google.android.material.floatingactionbutton.FloatingActionButton;
 import com.kennyc.bottomsheet.BottomSheet;
 import com.nextcloud.talk.R;
 import com.nextcloud.talk.activities.MainActivity;
-import com.nextcloud.talk.adapters.items.CallItem;
 import com.nextcloud.talk.adapters.items.ConversationItem;
 import com.nextcloud.talk.adapters.items.GenericTextHeaderItem;
 import com.nextcloud.talk.api.NcApi;
@@ -183,9 +182,9 @@ public class ConversationsListController extends BaseController implements Searc
     private Disposable roomsQueryDisposable;
     private Disposable openConversationsQueryDisposable;
     private FlexibleAdapter<AbstractFlexibleItem> adapter;
-    private List<AbstractFlexibleItem> callItems = new ArrayList<>();
-    private List<AbstractFlexibleItem> callItemsWithHeader = new ArrayList<>();
-    private List<AbstractFlexibleItem> searchableCallItems = new ArrayList<>();
+    private List<AbstractFlexibleItem> conversationItems = new ArrayList<>();
+    private List<AbstractFlexibleItem> conversationItemsWithHeader = new ArrayList<>();
+    private final List<AbstractFlexibleItem> searchableConversationItems = new ArrayList<>();
 
     private BottomSheet bottomSheet;
     private MenuItem searchItem;
@@ -193,7 +192,6 @@ public class ConversationsListController extends BaseController implements Searc
     private String searchQuery;
 
     private View view;
-    private boolean shouldUseLastMessageLayout;
 
     private String credentials;
 
@@ -246,7 +244,7 @@ public class ConversationsListController extends BaseController implements Searc
         }
 
         if (adapter == null) {
-            adapter = new FlexibleAdapter<>(callItems, getActivity(), true);
+            adapter = new FlexibleAdapter<>(conversationItems, getActivity(), true);
         } else {
             loadingContent.setVisibility(View.GONE);
         }
@@ -309,8 +307,6 @@ public class ConversationsListController extends BaseController implements Searc
             }
 
             credentials = ApiUtils.getCredentials(currentUser.getUsername(), currentUser.getToken());
-            shouldUseLastMessageLayout = CapabilitiesUtil.hasSpreedFeatureCapability(currentUser,
-                                                                                     "last-room-activity");
             if (getActivity() != null && getActivity() instanceof MainActivity) {
                 loadUserAvatar(((MainActivity) getActivity()).binding.switchAccountButton);
             }
@@ -372,7 +368,7 @@ public class ConversationsListController extends BaseController implements Searc
         } else {
             MainActivity activity = (MainActivity) getActivity();
 
-            searchItem.setVisible(callItems.size() > 0);
+            searchItem.setVisible(conversationItems.size() > 0);
             if (activity != null) {
                 if (adapter.hasFilter()) {
                     showSearchView(activity, searchView, searchItem);
@@ -409,7 +405,7 @@ public class ConversationsListController extends BaseController implements Searc
                 @Override
                 public boolean onMenuItemActionExpand(MenuItem item) {
                     adapter.setHeadersShown(true);
-                    adapter.updateDataSet(searchableCallItems, false);
+                    adapter.updateDataSet(searchableConversationItems, false);
                     adapter.showAllHeaders();
                     swipeRefreshLayout.setEnabled(false);
                     return true;
@@ -418,7 +414,7 @@ public class ConversationsListController extends BaseController implements Searc
                 @Override
                 public boolean onMenuItemActionCollapse(MenuItem item) {
                     adapter.setHeadersShown(false);
-                    adapter.updateDataSet(callItems, false);
+                    adapter.updateDataSet(conversationItems, false);
                     adapter.hideAllHeaders();
                     swipeRefreshLayout.setEnabled(true);
 
@@ -478,8 +474,8 @@ public class ConversationsListController extends BaseController implements Searc
 
         isRefreshing = true;
 
-        callItems = new ArrayList<>();
-        callItemsWithHeader = new ArrayList<>();
+        conversationItems = new ArrayList<>();
+        conversationItemsWithHeader = new ArrayList<>();
 
         int apiVersion = ApiUtils.getConversationApiVersion(currentUser, new int[]{ApiUtils.APIv4, ApiUtils.APIv3, 1});
 
@@ -528,41 +524,26 @@ public class ConversationsListController extends BaseController implements Searc
                             callHeaderItems.put(headerTitle, genericTextHeaderItem);
                         }
 
-                        if (shouldUseLastMessageLayout) {
-                            if (getActivity() != null) {
-                                ConversationItem conversationItem = new ConversationItem(
-                                    conversation,
-                                    currentUser,
-                                    getActivity());
-                                callItems.add(conversationItem);
-
-                                ConversationItem conversationItemWithHeader = new ConversationItem(
-                                    conversation,
-                                    currentUser,
-                                    getActivity(),
-                                    callHeaderItems.get(headerTitle));
-
-                                callItemsWithHeader.add(conversationItemWithHeader);
-                            }
-                        } else {
-                            CallItem callItem = new CallItem(
+                        if (getActivity() != null) {
+                            ConversationItem conversationItem = new ConversationItem(
                                 conversation,
-                                currentUser);
-                            callItems.add(callItem);
+                                currentUser,
+                                getActivity());
+                            conversationItems.add(conversationItem);
 
-                            CallItem callItemWithHeader = new CallItem(
+                            ConversationItem conversationItemWithHeader = new ConversationItem(
                                 conversation,
                                 currentUser,
+                                getActivity(),
                                 callHeaderItems.get(headerTitle));
-
-                            callItemsWithHeader.add(callItemWithHeader);
+                            conversationItemsWithHeader.add(conversationItemWithHeader);
                         }
                     }
 
-                    sortConversations(callItems);
-                    sortConversations(callItemsWithHeader);
+                    sortConversations(conversationItems);
+                    sortConversations(conversationItemsWithHeader);
 
-                    adapter.updateDataSet(callItems, false);
+                    adapter.updateDataSet(conversationItems, false);
 
                     new Handler().postDelayed(this::checkToShowUnreadBubble, UNREAD_BUBBLE_DELAY);
 
@@ -597,26 +578,20 @@ public class ConversationsListController extends BaseController implements Searc
                 });
     }
 
-    private void sortConversations(List<AbstractFlexibleItem> callItems) {
-        if (CapabilitiesUtil.hasSpreedFeatureCapability(currentUser, "last-room-activity")) {
-            Collections.sort(callItems, (o1, o2) -> {
-                Conversation conversation1 = ((ConversationItem) o1).getModel();
-                Conversation conversation2 = ((ConversationItem) o2).getModel();
-                return new CompareToBuilder()
-                        .append(conversation2.isFavorite(), conversation1.isFavorite())
-                        .append(conversation2.getLastActivity(), conversation1.getLastActivity())
-                        .toComparison();
-            });
-        } else {
-            Collections.sort(callItems, (callItem, t1) ->
-                    Long.compare(((CallItem) t1).getModel().getLastPing(),
-                                 ((CallItem) callItem).getModel().getLastPing()));
-        }
+    private void sortConversations(List<AbstractFlexibleItem> conversationItems) {
+        Collections.sort(conversationItems, (o1, o2) -> {
+            Conversation conversation1 = ((ConversationItem) o1).getModel();
+            Conversation conversation2 = ((ConversationItem) o2).getModel();
+            return new CompareToBuilder()
+                    .append(conversation2.isFavorite(), conversation1.isFavorite())
+                    .append(conversation2.getLastActivity(), conversation1.getLastActivity())
+                    .toComparison();
+        });
     }
 
     private void fetchOpenConversations(int apiVersion){
-        searchableCallItems.clear();
-        searchableCallItems.addAll(callItemsWithHeader);
+        searchableConversationItems.clear();
+        searchableConversationItems.addAll(conversationItemsWithHeader);
 
         if (CapabilitiesUtil.hasSpreedFeatureCapability(currentUser, "listable-rooms")) {
             List<AbstractFlexibleItem> openConversationItems = new ArrayList<>();
@@ -637,20 +612,15 @@ public class ConversationsListController extends BaseController implements Searc
                             callHeaderItems.put(headerTitle, genericTextHeaderItem);
                         }
 
+                        ConversationItem conversationItem = new ConversationItem(
+                            conversation,
+                            currentUser,
+                            getActivity(),
+                            callHeaderItems.get(headerTitle));
 
-                        if (shouldUseLastMessageLayout) {
-                            if (getActivity() != null) {
-                                ConversationItem conversationItem = new ConversationItem(conversation
-                                    , currentUser, getActivity(), callHeaderItems.get(headerTitle));
-                                openConversationItems.add(conversationItem);
-                            }
-                        } else {
-                            CallItem callItem = new CallItem(conversation, currentUser, callHeaderItems.get(headerTitle));
-                            openConversationItems.add(callItem);
-                        }
+                        openConversationItems.add(conversationItem);
                     }
-
-                    searchableCallItems.addAll(openConversationItems);
+                    searchableConversationItems.addAll(openConversationItems);
 
                 }, throwable -> {
                     handleHttpExceptions(throwable);
@@ -746,7 +716,7 @@ public class ConversationsListController extends BaseController implements Searc
     private void checkToShowUnreadBubble() {
         try {
             int lastVisibleItem = layoutManager.findLastCompletelyVisibleItemPosition();
-            for (AbstractFlexibleItem flexItem : callItems) {
+            for (AbstractFlexibleItem flexItem : conversationItems) {
                 Conversation conversationItem = ((ConversationItem) flexItem).getModel();
                 int position = adapter.getGlobalPositionOf(flexItem);
                 if ((conversationItem.unreadMention ||
@@ -902,7 +872,7 @@ public class ConversationsListController extends BaseController implements Searc
 
     @Override
     public boolean onItemClick(View view, int position) {
-        selectedConversation = getConversation(position);
+        selectedConversation = ((ConversationItem) Objects.requireNonNull(adapter.getItem(position))).getModel();
         if (selectedConversation != null && getActivity() != null) {
             if (showShareToScreen) {
                 handleSharedData();
@@ -973,20 +943,13 @@ public class ConversationsListController extends BaseController implements Searc
 
     @Override
     public void onItemLongClick(int position) {
-
         if (showShareToScreen) {
             Log.d(TAG, "sharing to multiple rooms not yet implemented. onItemLongClick is ignored.");
 
-        } else if (CapabilitiesUtil.hasSpreedFeatureCapability(currentUser, "last-room-activity")) {
+        } else {
             Object clickedItem = adapter.getItem(position);
             if (clickedItem != null) {
-                Conversation conversation;
-                if (shouldUseLastMessageLayout) {
-                    conversation = ((ConversationItem) clickedItem).getModel();
-                } else {
-                    conversation = ((CallItem) clickedItem).getModel();
-                }
-
+                Conversation conversation = ((ConversationItem) clickedItem).getModel();
                 MoreMenuClickEvent moreMenuClickEvent = new MoreMenuClickEvent(conversation);
                 onMessageEvent(moreMenuClickEvent);
             }
@@ -1110,17 +1073,6 @@ public class ConversationsListController extends BaseController implements Searc
         }
     }
 
-    private Conversation getConversation(int position) {
-        Object clickedItem = adapter.getItem(position);
-        Conversation conversation;
-        if (shouldUseLastMessageLayout) {
-            conversation = ((ConversationItem) clickedItem).getModel();
-        } else {
-            conversation = ((CallItem) clickedItem).getModel();
-        }
-        return conversation;
-    }
-
     @Subscribe(sticky = true, threadMode = ThreadMode.BACKGROUND)
     public void onMessageEvent(EventStatus eventStatus) {
         if (currentUser != null && eventStatus.getUserId() == currentUser.getId()) {

+ 1 - 39
app/src/main/res/layout/account_item.xml

@@ -57,16 +57,6 @@
                 fresco:placeholderImage="@drawable/account_circle_48dp"
                 fresco:failureImage="@drawable/account_circle_48dp"
                 app:roundAsCircle="true"/>
-
-            <ImageView
-                android:id="@+id/ticker"
-                android:layout_width="18dp"
-                android:layout_height="18dp"
-                android:layout_gravity="bottom|end"
-                android:background="@drawable/round_bgnd"
-                android:contentDescription="@string/nc_account_chooser_active_user"
-                android:src="@drawable/ic_check_circle"
-                tools:visibility="gone" />
         </FrameLayout>
 
 
@@ -80,7 +70,7 @@
             android:paddingStart="3dp"
             android:paddingEnd="0dp">
 
-            <TextView
+            <androidx.emoji.widget.EmojiTextView
                 android:id="@+id/user_name"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
@@ -95,20 +85,6 @@
                 android:textSize="@dimen/two_line_primary_text_size"
                 tools:text="Firstname Lastname" />
 
-            <TextView
-                android:id="@+id/status"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:layout_marginStart="@dimen/standard_half_margin"
-                android:layout_marginEnd="@dimen/standard_double_margin"
-                android:layout_marginBottom="4dp"
-                android:ellipsize="end"
-                android:gravity="top"
-                android:maxLines="1"
-                android:textColor="?android:attr/textColorSecondary"
-                android:visibility="gone"
-                tools:text="☁️ My custom status" />
-
             <TextView
                 android:id="@+id/account"
                 android:layout_width="match_parent"
@@ -126,19 +102,5 @@
 
         </LinearLayout>
 
-        <ImageView
-            android:id="@+id/account_menu"
-            android:layout_width="48dp"
-            android:layout_height="match_parent"
-            android:layout_alignParentEnd="true"
-            android:layout_centerVertical="true"
-            android:clickable="true"
-            android:contentDescription="@string/nc_account_chooser_active_user"
-            android:focusable="true"
-            android:paddingStart="@dimen/standard_half_padding"
-            android:paddingEnd="10dp"
-            android:src="@drawable/ic_check_circle"
-            app:tint="@color/colorPrimary" />
-
     </RelativeLayout>
 </com.google.android.material.card.MaterialCardView>

+ 1 - 2
app/src/main/res/layout/controller_call_menu.xml

@@ -27,8 +27,7 @@
     <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" />
+        android:layout_height="wrap_content" />
 
 
 </RelativeLayout>

+ 1 - 2
app/src/main/res/layout/controller_conversations_rv.xml

@@ -103,8 +103,7 @@
             <androidx.recyclerview.widget.RecyclerView
                 android:id="@+id/recycler_view"
                 android:layout_width="match_parent"
-                android:layout_height="match_parent"
-                tools:listitem="@layout/rv_item_conversation" />
+                android:layout_height="match_parent" />
 
         </FrameLayout>
 

+ 1 - 2
app/src/main/res/layout/controller_generic_rv.xml

@@ -43,6 +43,5 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         app:layout_anchor="@+id/swipe_refresh_layout"
-        app:layout_anchorGravity="center"
-        tools:listitem="@layout/rv_item_conversation" />
+        app:layout_anchorGravity="center" />
 </androidx.coordinatorlayout.widget.CoordinatorLayout>

+ 144 - 0
app/src/main/res/layout/current_account_item.xml

@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  Nextcloud Talk application
+
+  Copyright (C) 2016 Andy Scherzinger
+  Copyright (C) 2016 Nextcloud
+  Copyright (C) 2016 ownCloud
+  Copyright (C) 2020 Infomaniak Network SA
+
+  This program is free software; you can redistribute it and/or
+  modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+  License as published by the Free Software Foundation; either
+  version 3 of the License, or 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 AFFERO GENERAL PUBLIC LICENSE for more details.
+
+  You should have received a copy of the GNU Affero General Public
+  License along with this program. If not, see <http://www.gnu.org/licenses/>.
+-->
+<com.google.android.material.card.MaterialCardView 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"
+    xmlns:fresco="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="72dp"
+    android:layout_margin="4dp"
+    android:orientation="horizontal"
+    app:cardBackgroundColor="@color/transparent"
+    app:cardElevation="0dp">
+
+    <RelativeLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="horizontal"
+        tools:ignore="UnusedAttribute">
+
+        <FrameLayout
+            android:id="@+id/avatar_container"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_alignParentStart="true"
+            android:layout_centerVertical="true">
+
+            <com.facebook.drawee.view.SimpleDraweeView
+                android:id="@+id/user_icon"
+                android:layout_width="@dimen/small_item_height"
+                android:layout_height="@dimen/small_item_height"
+                android:layout_gravity="top|start"
+                android:layout_marginStart="12dp"
+                android:layout_marginTop="1dp"
+                android:layout_marginEnd="1dp"
+                android:layout_marginBottom="1dp"
+                android:contentDescription="@string/avatar"
+                android:src="@drawable/account_circle_48dp"
+                fresco:placeholderImage="@drawable/account_circle_48dp"
+                fresco:failureImage="@drawable/account_circle_48dp"
+                app:roundAsCircle="true"/>
+
+            <ImageView
+                android:id="@+id/ticker"
+                android:layout_width="18dp"
+                android:layout_height="18dp"
+                android:layout_gravity="bottom|end"
+                android:background="@drawable/round_bgnd"
+                android:contentDescription="@string/nc_account_chooser_active_user"
+                android:src="@drawable/ic_check_circle"
+                tools:visibility="gone" />
+        </FrameLayout>
+
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_centerInParent="true"
+            android:layout_marginEnd="25dp"
+            android:layout_toEndOf="@id/avatar_container"
+            android:orientation="vertical"
+            android:paddingStart="3dp"
+            android:paddingEnd="0dp">
+
+            <androidx.emoji.widget.EmojiTextView
+                android:id="@+id/user_name"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="@dimen/standard_half_margin"
+                android:layout_marginTop="4dp"
+                android:layout_marginEnd="@dimen/standard_double_margin"
+                android:ellipsize="end"
+                android:gravity="start|bottom"
+                android:maxLines="1"
+                android:textAlignment="viewStart"
+                android:textColor="@color/conversation_item_header"
+                android:textSize="@dimen/two_line_primary_text_size"
+                tools:text="Firstname Lastname" />
+
+            <TextView
+                android:id="@+id/status"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="@dimen/standard_half_margin"
+                android:layout_marginEnd="@dimen/standard_double_margin"
+                android:layout_marginBottom="4dp"
+                android:ellipsize="end"
+                android:gravity="top"
+                android:maxLines="1"
+                android:textColor="?android:attr/textColorSecondary"
+                android:visibility="gone"
+                tools:text="☁️ My custom status" />
+
+            <TextView
+                android:id="@+id/account"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="@dimen/standard_half_margin"
+                android:layout_marginEnd="@dimen/standard_double_margin"
+                android:layout_marginBottom="4dp"
+                android:ellipsize="end"
+                android:gravity="start|top"
+                android:maxLines="1"
+                android:textAlignment="viewStart"
+                android:textColor="@color/textColorMaxContrast"
+                android:textSize="14sp"
+                tools:text="https://server.com/nextcloud" />
+
+        </LinearLayout>
+
+        <ImageView
+            android:id="@+id/account_menu"
+            android:layout_width="48dp"
+            android:layout_height="match_parent"
+            android:layout_alignParentEnd="true"
+            android:layout_centerVertical="true"
+            android:clickable="true"
+            android:contentDescription="@string/nc_account_chooser_active_user"
+            android:focusable="true"
+            android:paddingStart="@dimen/standard_half_padding"
+            android:paddingEnd="10dp"
+            android:src="@drawable/ic_check_circle"
+            app:tint="@color/colorPrimary" />
+
+    </RelativeLayout>
+</com.google.android.material.card.MaterialCardView>

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

@@ -23,7 +23,7 @@
 
     <include
         android:id="@+id/current_account"
-        layout="@layout/account_item"
+        layout="@layout/current_account_item"
         android:layout_width="0dp"
         android:layout_height="72dp"
         android:layout_margin="4dp"

+ 0 - 98
app/src/main/res/layout/rv_item_conversation.xml

@@ -1,98 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><!--
-  ~ Nextcloud Talk application
-  ~
-  ~ @author Mario Danic
-  ~ @author Andy Scherzinger
-  ~ Copyright (C) 2017 Mario Danic
-  ~ Copyright (C) 2017-2021 Andy Scherzinger
-  ~
-  ~ 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/>.
-  -->
-
-<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="wrap_content"
-    android:layout_margin="@dimen/standard_margin">
-
-    <FrameLayout
-        android:id="@+id/frame_layout"
-        android:layout_width="@dimen/small_item_height"
-        android:layout_height="@dimen/small_item_height"
-        android:layout_centerVertical="true"
-        android:layout_marginEnd="@dimen/margin_between_elements">
-
-        <ImageView
-            android:id="@+id/password_protected_image_view"
-            android:layout_width="16dp"
-            android:layout_height="16dp"
-            android:layout_gravity="bottom|end"
-            android:contentDescription="@string/password_protected"
-            android:src="@drawable/ic_lock_white_24px"
-            android:visibility="visible" />
-
-        <com.facebook.drawee.view.SimpleDraweeView
-            android:id="@+id/avatar_image"
-            android:layout_width="@dimen/small_item_height"
-            android:layout_height="@dimen/small_item_height"
-            app:roundAsCircle="true" />
-
-    </FrameLayout>
-
-    <ImageButton
-        android:id="@+id/more_menu"
-        android:layout_width="wrap_content"
-        android:layout_height="@dimen/small_item_height"
-        android:layout_alignParentEnd="true"
-        android:layout_centerVertical="true"
-        android:layout_marginStart="@dimen/standard_margin"
-        android:background="?android:attr/selectableItemBackground"
-        android:contentDescription="@null"
-        android:scaleType="center"
-        android:src="@drawable/ic_more_horiz_black_24dp" />
-
-    <LinearLayout
-        android:id="@+id/linear_layout"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_centerInParent="true"
-        android:layout_toStartOf="@+id/more_menu"
-        android:layout_toEndOf="@id/frame_layout"
-        android:orientation="vertical">
-
-        <androidx.emoji.widget.EmojiTextView
-            android:id="@+id/name_text"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:ellipsize="middle"
-            android:singleLine="true"
-            android:textAlignment="viewStart"
-            android:textColor="@color/conversation_item_header"
-            android:textSize="@dimen/two_line_primary_text_size"
-            tools:text="Call item text" />
-
-        <androidx.emoji.widget.EmojiTextView
-            android:id="@+id/secondary_text"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:singleLine="true"
-            android:textAlignment="viewStart"
-            android:textColor="@color/textColorMaxContrast"
-            android:textSize="14sp"
-            tools:text="A week ago" />
-
-    </LinearLayout>
-
-</RelativeLayout>