瀏覽代碼

Merge pull request #355 from nextcloud/show-participant-flags

Add support for showing participant engagement level
Mario Đanić 6 年之前
父節點
當前提交
13e39e0860
共有 29 個文件被更改,包括 524 次插入165 次删除
  1. 3 2
      app/src/gplay/AndroidManifest.xml
  2. 2 1
      app/src/main/AndroidManifest.xml
  3. 48 19
      app/src/main/java/com/nextcloud/talk/adapters/items/UserItem.java
  4. 0 1
      app/src/main/java/com/nextcloud/talk/application/NextcloudTalkApplication.java
  5. 30 30
      app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java
  6. 0 4
      app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.java
  7. 0 1
      app/src/main/java/com/nextcloud/talk/models/database/ArbitraryStorage.java
  8. 38 0
      app/src/main/java/com/nextcloud/talk/models/json/converters/ObjectParcelConverter.java
  9. 54 3
      app/src/main/java/com/nextcloud/talk/models/json/participants/Participant.java
  10. 0 10
      app/src/main/java/com/nextcloud/talk/utils/database/arbitrarystorage/ArbitraryStorageUtils.java
  11. 25 0
      app/src/main/res/drawable/ic_call_grey_600_24dp.xml
  12. 4 2
      app/src/main/res/drawable/ic_group_grey600_24px.xml
  13. 4 2
      app/src/main/res/drawable/ic_link_black_24px.xml
  14. 4 2
      app/src/main/res/drawable/ic_link_grey600_24px.xml
  15. 4 2
      app/src/main/res/drawable/ic_link_white_24px.xml
  16. 25 0
      app/src/main/res/drawable/ic_mic_grey_600_24dp.xml
  17. 4 22
      app/src/main/res/drawable/ic_people_group_black_24px.xml
  18. 4 2
      app/src/main/res/drawable/ic_people_group_white_24px.xml
  19. 4 2
      app/src/main/res/drawable/ic_settings_black_24dp.xml
  20. 25 0
      app/src/main/res/drawable/ic_videocam_grey_600_24dp.xml
  21. 30 0
      app/src/main/res/drawable/shape_call_bubble.xml
  22. 30 0
      app/src/main/res/drawable/shape_video_bubble.xml
  23. 30 0
      app/src/main/res/drawable/shape_voice_bubble.xml
  24. 61 56
      app/src/main/res/layout/controller_conversation_info.xml
  25. 0 1
      app/src/main/res/layout/rv_item_contact.xml
  26. 93 0
      app/src/main/res/layout/rv_item_conversation_info_participant.xml
  27. 0 1
      app/src/main/res/layout/rv_item_mention.xml
  28. 1 1
      app/src/main/res/layout/rv_item_participant.xml
  29. 1 1
      scripts/analysis/lint-results.txt

+ 3 - 2
app/src/gplay/AndroidManifest.xml

@@ -11,11 +11,12 @@
         android:networkSecurityConfig="@xml/network_security_config"
         android:supportsRtl="true"
         android:theme="@style/AppTheme"
-        tools:replace="label, icon, theme, name, allowBackup">
+        tools:replace="label, icon, theme, name, allowBackup"
+        tools:ignore="UnusedAttribute, ExportedService">
 
         <meta-data android:name="firebase_analytics_collection_deactivated" android:value="true" />
         <meta-data android:name="google_analytics_adid_collection_enabled" android:value="false" />
-        
+
         <service
             android:name=".services.firebase.MagicFirebaseMessagingService">
             <intent-filter>

+ 2 - 1
app/src/main/AndroidManifest.xml

@@ -43,7 +43,8 @@
         android:networkSecurityConfig="@xml/network_security_config"
         android:supportsRtl="true"
         android:theme="@style/AppTheme"
-        tools:replace="label, icon, theme, name, allowBackup">
+        tools:replace="label, icon, theme, name, allowBackup"
+        tools:ignore="UnusedAttribute">
 
 
         <meta-data

+ 48 - 19
app/src/main/java/com/nextcloud/talk/adapters/items/UserItem.java

@@ -20,12 +20,12 @@
 
 package com.nextcloud.talk.adapters.items;
 
+import android.content.res.Resources;
 import android.text.TextUtils;
-import android.util.Log;
 import android.view.View;
+import android.widget.ImageView;
 import android.widget.TextView;
 
-import com.amulyakhare.textdrawable.TextDrawable;
 import com.bumptech.glide.load.engine.DiskCacheStrategy;
 import com.bumptech.glide.load.model.GlideUrl;
 import com.bumptech.glide.load.model.LazyHeaders;
@@ -106,7 +106,7 @@ public class UserItem extends AbstractFlexibleItem<UserItem.UserItemViewHolder>
         if (header != null) {
             return R.layout.rv_item_contact;
         } else {
-            return R.layout.rv_item_mention;
+            return R.layout.rv_item_conversation_info_participant;
         }
     }
 
@@ -177,22 +177,45 @@ public class UserItem extends AbstractFlexibleItem<UserItem.UserItemViewHolder>
             holder.itemView.setAlpha(1.0f);
         }
 
-        // TODO: show what the user is doing currently
-        long participantFlags = participant.getParticipantFlags();
-        if (participantFlags == 0) {
-        } else if (participantFlags == 1) {
-            // do nothing, just in call
-        } else if (participantFlags == 2) {
-            // with audio
-        } else if (participantFlags == 4) {
-            // with video
-        } else if (participantFlags == 7) {
-            // video and audio
-        }
-
-        String userType = "";
+        Resources resources = NextcloudTalkApplication.getSharedApplication().getResources();
 
         if (header == null) {
+            Participant.ParticipantFlags participantFlags = participant.getParticipantFlags();
+            switch (participantFlags) {
+                case NOT_IN_CALL:
+                    holder.voiceOrSimpleCallImageView.setVisibility(View.GONE);
+                    holder.videoCallImageView.setVisibility(View.GONE);
+                    break;
+                case IN_CALL:
+                    holder.voiceOrSimpleCallImageView.setBackground(resources.getDrawable(R.drawable.shape_call_bubble));
+                    holder.voiceOrSimpleCallImageView.setVisibility(View.VISIBLE);
+                    holder.videoCallImageView.setVisibility(View.GONE);
+                    break;
+                case IN_CALL_WITH_AUDIO:
+                    holder.voiceOrSimpleCallImageView.setBackground(resources.getDrawable(R.drawable.shape_voice_bubble));
+                    holder.voiceOrSimpleCallImageView.setVisibility(View.VISIBLE);
+                    holder.videoCallImageView.setVisibility(View.GONE);
+                    break;
+                case IN_CALL_WITH_VIDEO:
+                    holder.voiceOrSimpleCallImageView.setBackground(resources.getDrawable(R.drawable.shape_call_bubble));
+                    holder.videoCallImageView.setBackground(resources.getDrawable(R.drawable.shape_video_bubble));
+                    holder.voiceOrSimpleCallImageView.setVisibility(View.VISIBLE);
+                    holder.videoCallImageView.setVisibility(View.VISIBLE);
+                    break;
+                case IN_CALL_WITH_AUDIO_AND_VIDEO:
+                    holder.voiceOrSimpleCallImageView.setBackground(resources.getDrawable(R.drawable.shape_voice_bubble));
+                    holder.videoCallImageView.setBackground(resources.getDrawable(R.drawable.shape_video_bubble));
+                    holder.voiceOrSimpleCallImageView.setVisibility(View.VISIBLE);
+                    holder.videoCallImageView.setVisibility(View.VISIBLE);
+                    break;
+                default:
+                    holder.voiceOrSimpleCallImageView.setVisibility(View.GONE);
+                    holder.videoCallImageView.setVisibility(View.GONE);
+                    break;
+            }
+
+            String userType = "";
+
             switch (new EnumParticipantTypeConverter().convertToInt(participant.getType())) {
                 case 1:
                     userType = NextcloudTalkApplication.getSharedApplication().getString(R.string.nc_owner);
@@ -210,11 +233,11 @@ public class UserItem extends AbstractFlexibleItem<UserItem.UserItemViewHolder>
                     userType = NextcloudTalkApplication.getSharedApplication().getString(R.string.nc_following_link);
                     break;
                 default:
-                    // do nothing
+                    break;
             }
 
             holder.contactMentionId.setText(userType);
-            holder.contactMentionId.setTextColor(NextcloudTalkApplication.getSharedApplication().getColor(R.color.colorPrimary));
+            holder.contactMentionId.setTextColor(NextcloudTalkApplication.getSharedApplication().getResources().getColor(R.color.colorPrimary));
         }
     }
 
@@ -244,6 +267,12 @@ public class UserItem extends AbstractFlexibleItem<UserItem.UserItemViewHolder>
         @Nullable
         @BindView(R.id.secondary_text)
         public TextView contactMentionId;
+        @Nullable
+        @BindView(R.id.voiceOrSimpleCallImageView)
+        ImageView voiceOrSimpleCallImageView;
+        @Nullable
+        @BindView(R.id.videoCallImageView)
+        ImageView videoCallImageView;
 
         /**
          * Default constructor.

+ 0 - 1
app/src/main/java/com/nextcloud/talk/application/NextcloudTalkApplication.java

@@ -50,7 +50,6 @@ import javax.inject.Singleton;
 import androidx.lifecycle.LifecycleObserver;
 import androidx.multidex.MultiDex;
 import androidx.multidex.MultiDexApplication;
-import androidx.work.Configuration;
 import androidx.work.OneTimeWorkRequest;
 import androidx.work.PeriodicWorkRequest;
 import androidx.work.WorkManager;

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

@@ -216,7 +216,7 @@ public class CallNotificationController extends BaseController {
                         boolean inCallOnDifferentDevice = false;
                         List<Participant> participantList = participantsOverall.getOcs().getData();
                         for (Participant participant : participantList) {
-                            if (participant.isInCall() || (userBeingCalled.hasSpreedCapabilityWithName("in-call-flags") && participant.getParticipantFlags() != 0)) {
+                            if (participant.getParticipantFlags() != Participant.ParticipantFlags.NOT_IN_CALL) {
                                 hasParticipantsInCall = true;
 
                                 if (participant.getUserId().equals(userBeingCalled.getUserId())) {
@@ -436,38 +436,38 @@ public class CallNotificationController extends BaseController {
                                             (getActivity()).getBitmapPool(), resource, avatarSize, avatarSize));
                                 }
 
-                                    if (AvatarStatusCodeHolder.getInstance().getStatusCode() == 200 &&
-                                            userBeingCalled.hasSpreedCapabilityWithName("no-ping")) {
-                                        final Allocation input = Allocation.createFromBitmap(renderScript, resource);
-                                        final Allocation output = Allocation.createTyped(renderScript, input.getType());
-                                        final ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(renderScript, Element
-                                                .U8_4(renderScript));
-                                        script.setRadius(15f);
-                                        script.setInput(input);
-                                        script.forEach(output);
-                                        output.copyTo(resource);
-
-                                        if (getResources() != null) {
-                                            incomingTextRelativeLayout.setBackground(getResources().getDrawable(R.drawable
-                                                    .incoming_gradient));
-                                            constraintLayout.setBackground(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);
+                                if (AvatarStatusCodeHolder.getInstance().getStatusCode() == 200 &&
+                                        userBeingCalled.hasSpreedCapabilityWithName("no-ping")) {
+                                    final Allocation input = Allocation.createFromBitmap(renderScript, resource);
+                                    final Allocation output = Allocation.createTyped(renderScript, input.getType());
+                                    final ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(renderScript, Element
+                                            .U8_4(renderScript));
+                                    script.setRadius(15f);
+                                    script.setInput(input);
+                                    script.forEach(output);
+                                    output.copyTo(resource);
+
+                                    if (getResources() != null) {
+                                        incomingTextRelativeLayout.setBackground(getResources().getDrawable(R.drawable
+                                                .incoming_gradient));
+                                        constraintLayout.setBackground(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);
                                     }
                                 }
+                            }
                         });
 
 

+ 0 - 4
app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.java

@@ -42,7 +42,6 @@ import com.nextcloud.talk.application.NextcloudTalkApplication;
 import com.nextcloud.talk.controllers.base.BaseController;
 import com.nextcloud.talk.models.database.UserEntity;
 import com.nextcloud.talk.models.json.converters.EnumNotificationLevelConverter;
-import com.nextcloud.talk.models.json.converters.EnumParticipantTypeConverter;
 import com.nextcloud.talk.models.json.participants.Participant;
 import com.nextcloud.talk.models.json.participants.ParticipantsOverall;
 import com.nextcloud.talk.models.json.rooms.Conversation;
@@ -58,9 +57,6 @@ import com.yarolegovich.mp.MaterialPreferenceScreen;
 import org.parceler.Parcels;
 
 import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
 import java.util.List;
 
 import javax.inject.Inject;

+ 0 - 1
app/src/main/java/com/nextcloud/talk/models/database/ArbitraryStorage.java

@@ -26,7 +26,6 @@ import java.io.Serializable;
 
 import io.requery.Entity;
 import io.requery.Key;
-import io.requery.Nullable;
 import io.requery.Persistable;
 
 @Entity

+ 38 - 0
app/src/main/java/com/nextcloud/talk/models/json/converters/ObjectParcelConverter.java

@@ -0,0 +1,38 @@
+/*
+ * 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/>.
+ */
+
+package com.nextcloud.talk.models.json.converters;
+
+import android.os.Parcel;
+
+import org.parceler.ParcelConverter;
+import org.parceler.Parcels;
+
+public class ObjectParcelConverter implements ParcelConverter<Object> {
+    @Override
+    public void toParcel(Object input, Parcel parcel) {
+        parcel.writeParcelable(Parcels.wrap(input), 0);
+    }
+
+    @Override
+    public Object fromParcel(Parcel parcel) {
+        return parcel.readParcelable(Object.class.getClassLoader());
+    }
+}

+ 54 - 3
app/src/main/java/com/nextcloud/talk/models/json/participants/Participant.java

@@ -23,8 +23,10 @@ package com.nextcloud.talk.models.json.participants;
 import com.bluelinelabs.logansquare.annotation.JsonField;
 import com.bluelinelabs.logansquare.annotation.JsonObject;
 import com.nextcloud.talk.models.json.converters.EnumParticipantTypeConverter;
+import com.nextcloud.talk.models.json.converters.ObjectParcelConverter;
 
 import org.parceler.Parcel;
+import org.parceler.ParcelPropertyConverter;
 
 import lombok.Data;
 
@@ -53,12 +55,26 @@ public class Participant {
     @JsonField(name = "roomId")
     long roomId;
 
+    @ParcelPropertyConverter(ObjectParcelConverter.class)
     @JsonField(name = "inCall")
-    boolean inCall;
+    Object inCall;
 
-    @JsonField(name = "participantFlags")
-    long participantFlags;
+    public ParticipantFlags getParticipantFlags() {
+        ParticipantFlags participantFlags = ParticipantFlags.NOT_IN_CALL;
+        if (inCall != null) {
+            if (inCall instanceof Long) {
+                participantFlags = ParticipantFlags.fromValue((Long) inCall);
+            } else if (inCall instanceof Boolean) {
+                if ((boolean) inCall) {
+                    participantFlags = ParticipantFlags.IN_CALL;
+                } else {
+                    participantFlags = ParticipantFlags.NOT_IN_CALL;
+                }
+            }
+        }
 
+        return participantFlags;
+    }
     String source;
 
     public enum ParticipantType {
@@ -69,4 +85,39 @@ public class Participant {
         GUEST,
         USER_FOLLOWING_LINK
     }
+
+    public enum ParticipantFlags {
+        NOT_IN_CALL (0),
+        IN_CALL (1),
+        IN_CALL_WITH_AUDIO (3),
+        IN_CALL_WITH_VIDEO (5),
+        IN_CALL_WITH_AUDIO_AND_VIDEO (7);
+
+        private long value;
+
+        ParticipantFlags(long value) {
+            this.value = value;
+        }
+
+        public long getValue() {
+            return value;
+        }
+
+        public static ParticipantFlags fromValue(long value) {
+            if (value == 0) {
+                return NOT_IN_CALL;
+            } else if (value == 1) {
+                return IN_CALL;
+            } else if (value == 3) {
+                return IN_CALL_WITH_AUDIO;
+            } else if (value == 5) {
+                return IN_CALL_WITH_VIDEO;
+            } else if (value == 7) {
+                return IN_CALL_WITH_AUDIO_AND_VIDEO;
+            } else {
+                return NOT_IN_CALL;
+            }
+        }
+
+    }
 }

+ 0 - 10
app/src/main/java/com/nextcloud/talk/utils/database/arbitrarystorage/ArbitraryStorageUtils.java

@@ -19,21 +19,11 @@
  */
 package com.nextcloud.talk.utils.database.arbitrarystorage;
 
-import android.text.TextUtils;
-
 import com.nextcloud.talk.models.database.ArbitraryStorage;
 import com.nextcloud.talk.models.database.ArbitraryStorageEntity;
-import com.nextcloud.talk.models.database.User;
-import com.nextcloud.talk.models.database.UserEntity;
-
-import java.util.List;
 
 import androidx.annotation.Nullable;
-import io.reactivex.Completable;
 import io.reactivex.Observable;
-import io.reactivex.Observer;
-import io.reactivex.android.schedulers.AndroidSchedulers;
-import io.reactivex.disposables.Disposable;
 import io.reactivex.schedulers.Schedulers;
 import io.requery.Persistable;
 import io.requery.query.Result;

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

@@ -0,0 +1,25 @@
+<!--
+  ~ 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="#757575" 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="M6.62,10.79c1.44,2.83 3.76,5.14 6.59,6.59l2.2,-2.2c0.27,-0.27 0.67,-0.36 1.02,-0.24 1.12,0.37 2.33,0.57 3.57,0.57 0.55,0 1,0.45 1,1V20c0,0.55 -0.45,1 -1,1 -9.39,0 -17,-7.61 -17,-17 0,-0.55 0.45,-1 1,-1h3.5c0.55,0 1,0.45 1,1 0,1.25 0.2,2.45 0.57,3.57 0.11,0.35 0.03,0.74 -0.25,1.02l-2.2,2.2z"/>
+</vector>

+ 4 - 2
app/src/main/res/drawable/ic_group_grey600_24px.xml

@@ -1,7 +1,9 @@
-<vector android:autoMirrored="true" android:height="24dp"
+<vector xmlns:tools="http://schemas.android.com/tools"
+    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="#757575" android:fillType="nonZero"
         android:pathData="M12.729,5C11.044,5 9.833,6.38 9.833,7.702C9.833,9.054 9.93,10.019 10.605,11.08C10.822,11.36 11.074,11.418 11.281,11.659C11.411,12.142 11.513,12.625 11.378,13.107C10.957,13.255 10.557,13.428 10.152,13.59C9.66,13.326 9.09,13.107 8.598,12.914C8.53,12.644 8.579,12.444 8.646,12.19C8.762,12.07 8.868,12.016 8.994,11.901C9.351,11.466 9.37,10.733 9.37,10.212C9.37,9.44 8.675,8.861 7.922,8.861C7.082,8.861 6.474,9.555 6.474,10.212L6.455,10.212C6.455,10.887 6.503,11.37 6.841,11.901C6.938,12.045 7.075,12.07 7.179,12.19C7.244,12.431 7.296,12.673 7.227,12.914C6.61,13.129 6.027,13.397 5.49,13.686C5.085,13.976 5.265,13.862 5.007,14.796C4.888,15.279 6.262,15.501 7.247,15.578C7.198,15.843 7.131,16.196 6.938,16.871C6.629,18.078 11.139,18.512 12.729,18.512C15.074,18.512 18.822,18.072 18.501,16.871C17.999,14.999 18.3,15.221 17.555,14.651C16.503,14.02 15.188,13.525 14.08,13.107C13.935,12.57 14.041,12.171 14.177,11.659C14.403,11.418 14.659,11.312 14.872,11.08C15.537,10.227 15.624,8.741 15.624,7.702C15.624,6.172 14.244,5 12.729,5L12.729,5Z"
-        android:strokeColor="#00000000" android:strokeWidth="1"/>
+        android:strokeColor="#00000000" android:strokeWidth="1"
+        tools:ignore="VectorPath" />
 </vector>

+ 4 - 2
app/src/main/res/drawable/ic_link_black_24px.xml

@@ -18,10 +18,12 @@
   ~ along with this program.  If not, see <http://www.gnu.org/licenses/>.
   -->
 
-<vector android:autoMirrored="true" android:height="24dp"
+<vector xmlns:tools="http://schemas.android.com/tools"
+    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:fillType="nonZero"
         android:pathData="M13,5.921L9.818,9.105C9.111,9.812 8.781,10.723 8.83,11.562C8.88,12.401 9.263,13.146 9.818,13.701L11.23,12.285C10.663,11.717 10.686,11.065 11.232,10.519L14.414,7.337C14.939,6.812 15.664,6.814 16.186,7.335C16.668,7.891 16.713,8.574 16.182,9.105L15.362,9.925C15.917,10.71 16.007,11.291 15.955,12.16L17.596,10.519C18.833,9.282 18.833,7.154 17.596,5.917C16.36,4.681 14.254,4.706 13,5.921L13,5.921ZM13.707,9.806L12.293,11.224L12.297,11.224C12.847,11.774 12.804,12.482 12.293,12.994L9.111,16.175C8.415,16.767 7.813,16.646 7.342,16.175C6.715,15.549 6.842,14.907 7.342,14.407L8.192,13.56C7.636,12.777 7.543,12.195 7.594,11.328L5.928,12.994C4.689,14.233 4.692,16.354 5.928,17.589C7.163,18.825 9.29,18.825 10.526,17.589L13.707,14.407C14.416,13.699 14.747,12.789 14.698,11.949C14.65,11.109 14.266,10.362 13.709,9.808L13.707,9.806Z"
-        android:strokeColor="#00000000" android:strokeWidth="1"/>
+        android:strokeColor="#00000000" android:strokeWidth="1"
+        tools:ignore="VectorPath" />
 </vector>

+ 4 - 2
app/src/main/res/drawable/ic_link_grey600_24px.xml

@@ -1,7 +1,9 @@
-<vector android:autoMirrored="true" android:height="24dp"
+<vector xmlns:tools="http://schemas.android.com/tools"
+    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="#757575" android:fillType="nonZero"
         android:pathData="M13,5.921L9.818,9.105C9.111,9.812 8.781,10.723 8.83,11.562C8.88,12.401 9.263,13.146 9.818,13.701L11.23,12.285C10.663,11.717 10.686,11.065 11.232,10.519L14.414,7.337C14.939,6.812 15.664,6.814 16.186,7.335C16.668,7.891 16.713,8.574 16.182,9.105L15.362,9.925C15.917,10.71 16.007,11.291 15.955,12.16L17.596,10.519C18.833,9.282 18.833,7.154 17.596,5.917C16.36,4.681 14.254,4.706 13,5.921L13,5.921ZM13.707,9.806L12.293,11.224L12.297,11.224C12.847,11.774 12.804,12.482 12.293,12.994L9.111,16.175C8.415,16.767 7.813,16.646 7.342,16.175C6.715,15.549 6.842,14.907 7.342,14.407L8.192,13.56C7.636,12.777 7.543,12.195 7.594,11.328L5.928,12.994C4.689,14.233 4.692,16.354 5.928,17.589C7.163,18.825 9.29,18.825 10.526,17.589L13.707,14.407C14.416,13.699 14.747,12.789 14.698,11.949C14.65,11.109 14.266,10.362 13.709,9.808L13.707,9.806Z"
-        android:strokeColor="#00000000" android:strokeWidth="1"/>
+        android:strokeColor="#00000000" android:strokeWidth="1"
+        tools:ignore="VectorPath" />
 </vector>

+ 4 - 2
app/src/main/res/drawable/ic_link_white_24px.xml

@@ -1,4 +1,5 @@
-<vector android:autoMirrored="true" android:height="24dp"
+<vector xmlns:tools="http://schemas.android.com/tools"
+    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="#D5D5D5" android:fillType="nonZero"
@@ -6,5 +7,6 @@
         android:strokeColor="#00000000" android:strokeWidth="1"/>
     <path android:fillColor="#FFFFFF" android:fillType="nonZero"
         android:pathData="M13,5.921L9.818,9.105C9.111,9.812 8.781,10.723 8.83,11.562C8.88,12.401 9.263,13.146 9.818,13.701L11.23,12.285C10.663,11.717 10.686,11.065 11.232,10.519L14.414,7.337C14.939,6.812 15.664,6.814 16.186,7.335C16.668,7.891 16.713,8.574 16.182,9.105L15.362,9.925C15.917,10.71 16.007,11.291 15.955,12.16L17.596,10.519C18.833,9.282 18.833,7.154 17.596,5.917C16.36,4.681 14.254,4.706 13,5.921L13,5.921ZM13.707,9.806L12.293,11.224L12.297,11.224C12.847,11.774 12.804,12.482 12.293,12.994L9.111,16.175C8.415,16.767 7.813,16.646 7.342,16.175C6.715,15.549 6.842,14.907 7.342,14.407L8.192,13.56C7.636,12.777 7.543,12.195 7.594,11.328L5.928,12.994C4.689,14.233 4.692,16.354 5.928,17.589C7.163,18.825 9.29,18.825 10.526,17.589L13.707,14.407C14.416,13.699 14.747,12.789 14.698,11.949C14.65,11.109 14.266,10.362 13.709,9.808L13.707,9.806Z"
-        android:strokeColor="#00000000" android:strokeWidth="1"/>
+        android:strokeColor="#00000000" android:strokeWidth="1"
+        tools:ignore="VectorPath" />
 </vector>

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

@@ -0,0 +1,25 @@
+<!--
+  ~ 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="#757575" 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,14c1.66,0 2.99,-1.34 2.99,-3L15,5c0,-1.66 -1.34,-3 -3,-3S9,3.34 9,5v6c0,1.66 1.34,3 3,3zM17.3,11c0,3 -2.54,5.1 -5.3,5.1S6.7,14 6.7,11L5,11c0,3.41 2.72,6.23 6,6.72L11,21h2v-3.28c3.28,-0.48 6,-3.3 6,-6.72h-1.7z"/>
+</vector>

+ 4 - 22
app/src/main/res/drawable/ic_people_group_black_24px.xml

@@ -18,30 +18,12 @@
   ~ along with this program.  If not, see <http://www.gnu.org/licenses/>.
   -->
 
-<!--
-  ~ 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"
+<vector xmlns:tools="http://schemas.android.com/tools"
+    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:fillType="nonZero"
         android:pathData="M12.729,5C11.044,5 9.833,6.38 9.833,7.702C9.833,9.054 9.93,10.019 10.605,11.08C10.822,11.36 11.074,11.418 11.281,11.659C11.411,12.142 11.513,12.625 11.378,13.107C10.957,13.255 10.557,13.428 10.152,13.59C9.66,13.326 9.09,13.107 8.598,12.914C8.53,12.644 8.579,12.444 8.646,12.19C8.762,12.07 8.868,12.016 8.994,11.901C9.351,11.466 9.37,10.733 9.37,10.212C9.37,9.44 8.675,8.861 7.922,8.861C7.082,8.861 6.474,9.555 6.474,10.212L6.455,10.212C6.455,10.887 6.503,11.37 6.841,11.901C6.938,12.045 7.075,12.07 7.179,12.19C7.244,12.431 7.296,12.673 7.227,12.914C6.61,13.129 6.027,13.397 5.49,13.686C5.085,13.976 5.265,13.862 5.007,14.796C4.888,15.279 6.262,15.501 7.247,15.578C7.198,15.843 7.131,16.196 6.938,16.871C6.629,18.078 11.139,18.512 12.729,18.512C15.074,18.512 18.822,18.072 18.501,16.871C17.999,14.999 18.3,15.221 17.555,14.651C16.503,14.02 15.188,13.525 14.08,13.107C13.935,12.57 14.041,12.171 14.177,11.659C14.403,11.418 14.659,11.312 14.872,11.08C15.537,10.227 15.624,8.741 15.624,7.702C15.624,6.172 14.244,5 12.729,5L12.729,5Z"
-        android:strokeColor="#00000000" android:strokeWidth="1"/>
+        android:strokeColor="#00000000" android:strokeWidth="1"
+        tools:ignore="VectorPath" />
 </vector>

+ 4 - 2
app/src/main/res/drawable/ic_people_group_white_24px.xml

@@ -1,4 +1,5 @@
-<vector android:autoMirrored="true" android:height="24dp"
+<vector xmlns:tools="http://schemas.android.com/tools"
+    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="#D5D5D5" android:fillType="nonZero"
@@ -6,5 +7,6 @@
         android:strokeColor="#00000000" android:strokeWidth="1"/>
     <path android:fillColor="#FFFFFF" android:fillType="nonZero"
         android:pathData="M12.729,5C11.044,5 9.833,6.38 9.833,7.702C9.833,9.054 9.93,10.019 10.605,11.08C10.822,11.36 11.074,11.418 11.281,11.659C11.411,12.142 11.513,12.625 11.378,13.107C10.957,13.255 10.557,13.428 10.152,13.59C9.66,13.326 9.09,13.107 8.598,12.914C8.53,12.644 8.579,12.444 8.646,12.19C8.762,12.07 8.868,12.016 8.994,11.901C9.351,11.466 9.37,10.733 9.37,10.212C9.37,9.44 8.675,8.861 7.922,8.861C7.082,8.861 6.474,9.555 6.474,10.212L6.455,10.212C6.455,10.887 6.503,11.37 6.841,11.901C6.938,12.045 7.075,12.07 7.179,12.19C7.244,12.431 7.296,12.673 7.227,12.914C6.61,13.129 6.027,13.397 5.49,13.686C5.085,13.976 5.265,13.862 5.007,14.796C4.888,15.279 6.262,15.501 7.247,15.578C7.198,15.843 7.131,16.196 6.938,16.871C6.629,18.078 11.139,18.512 12.729,18.512C15.074,18.512 18.822,18.072 18.501,16.871C17.999,14.999 18.3,15.221 17.555,14.651C16.503,14.02 15.188,13.525 14.08,13.107C13.935,12.57 14.041,12.171 14.177,11.659C14.403,11.418 14.659,11.312 14.872,11.08C15.537,10.227 15.624,8.741 15.624,7.702C15.624,6.172 14.244,5 12.729,5L12.729,5Z"
-        android:strokeColor="#00000000" android:strokeWidth="1"/>
+        android:strokeColor="#00000000" android:strokeWidth="1"
+        tools:ignore="VectorPath" />
 </vector>

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

@@ -18,8 +18,10 @@
   ~ along with this program.  If not, see <http://www.gnu.org/licenses/>.
   -->
 
-<vector android:autoMirrored="true" android:height="24dp"
+<vector xmlns:tools="http://schemas.android.com/tools"
+    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="#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"
+        tools:ignore="VectorPath" />
 </vector>

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

@@ -0,0 +1,25 @@
+<!--
+  ~ 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="#757575" 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>

+ 30 - 0
app/src/main/res/drawable/shape_call_bubble.xml

@@ -0,0 +1,30 @@
+<?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/>.
+  -->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item>
+        <shape
+            android:shape="oval">
+            <solid android:color="@color/white"/>
+        </shape>
+    </item>
+    <item android:drawable="@drawable/ic_call_grey_600_24dp"/>
+</layer-list>

+ 30 - 0
app/src/main/res/drawable/shape_video_bubble.xml

@@ -0,0 +1,30 @@
+<?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/>.
+  -->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item>
+        <shape
+            android:shape="oval">
+            <solid android:color="@color/white"/>
+        </shape>
+    </item>
+    <item android:drawable="@drawable/ic_videocam_grey_600_24dp"/>
+</layer-list>

+ 30 - 0
app/src/main/res/drawable/shape_voice_bubble.xml

@@ -0,0 +1,30 @@
+<?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/>.
+  -->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item>
+        <shape
+            android:shape="oval">
+            <solid android:color="@color/white"/>
+        </shape>
+    </item>
+    <item android:drawable="@drawable/ic_mic_grey_600_24dp"/>
+</layer-list>

+ 61 - 56
app/src/main/res/layout/controller_conversation_info.xml

@@ -18,7 +18,7 @@
   ~ along with this program.  If not, see <http://www.gnu.org/licenses/>.
   -->
 
-<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:apc="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
@@ -26,74 +26,79 @@
     android:background="@color/nc_white_color"
     android:orientation="vertical">
 
-    <RelativeLayout
+    <ProgressBar
+        android:id="@+id/progressBar"
+        android:layout_width="@dimen/item_height"
+        android:layout_height="@dimen/item_height"
+        android:layout_centerInParent="true"
+        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:indeterminate="true"
+        android:indeterminateTint="@color/colorPrimary"
+        android:indeterminateTintMode="src_in" />
+
+    <ScrollView
         android:layout_width="match_parent"
         android:layout_height="wrap_content">
 
-        <ProgressBar
-            android:id="@+id/progressBar"
-            android:layout_width="@dimen/item_height"
-            android:layout_height="@dimen/item_height"
-            android:layout_centerInParent="true"
-            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:indeterminate="true"
-            android:indeterminateTint="@color/colorPrimary"
-            android:indeterminateTintMode="src_in" />
-
-        <com.yarolegovich.mp.MaterialPreferenceCategory
-            android:id="@+id/conversation_info_name"
+        <RelativeLayout
             android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:animateLayoutChanges="true"
-            android:visibility="gone">
+            android:layout_height="wrap_content">
 
-            <RelativeLayout
+            <com.yarolegovich.mp.MaterialPreferenceCategory
+                android:id="@+id/conversation_info_name"
                 android:layout_width="match_parent"
-                android:layout_height="wrap_content">
+                android:layout_height="wrap_content"
+                android:animateLayoutChanges="true"
+                android:visibility="gone">
 
-                <ImageView
-                    android:id="@+id/avatar_image"
-                    android:layout_width="@dimen/avatar_size_big"
-                    android:layout_height="@dimen/avatar_size_big"
-                    android:layout_centerHorizontal="true" />
+                <RelativeLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content">
 
-                <TextView
-                    android:id="@+id/display_name_text"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_below="@id/avatar_image"
-                    android:layout_centerHorizontal="true"
-                    android:layout_marginTop="@dimen/margin_between_elements" />
+                    <ImageView
+                        android:id="@+id/avatar_image"
+                        android:layout_width="@dimen/avatar_size_big"
+                        android:layout_height="@dimen/avatar_size_big"
+                        android:layout_centerHorizontal="true" />
 
-            </RelativeLayout>
-        </com.yarolegovich.mp.MaterialPreferenceCategory>
+                    <TextView
+                        android:id="@+id/display_name_text"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_below="@id/avatar_image"
+                        android:layout_centerHorizontal="true"
+                        android:layout_marginTop="@dimen/margin_between_elements" />
 
-        <include
-            layout="@layout/notification_settings_item"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_below="@id/conversation_info_name"
-            android:visibility="gone" />
+                </RelativeLayout>
+            </com.yarolegovich.mp.MaterialPreferenceCategory>
 
-        <com.yarolegovich.mp.MaterialPreferenceCategory
-            android:id="@+id/participants_list_category"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_below="@+id/notification_settings"
-            android:visibility="gone"
-            apc:mpc_title="@string/nc_participants"
-            apc:mpc_title_color="@color/colorPrimary">
+            <include
+                layout="@layout/notification_settings_item"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_below="@id/conversation_info_name"
+                android:visibility="gone" />
 
-            <androidx.recyclerview.widget.RecyclerView
-                android:id="@+id/recycler_view"
+            <com.yarolegovich.mp.MaterialPreferenceCategory
+                android:id="@+id/participants_list_category"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                tools:listitem="@layout/rv_item_contact"></androidx.recyclerview.widget.RecyclerView>
+                android:layout_below="@+id/notification_settings"
+                android:visibility="gone"
+                apc:mpc_title="@string/nc_participants"
+                apc:mpc_title_color="@color/colorPrimary"
+                tools:ignore="UnknownIdInLayout">
 
-        </com.yarolegovich.mp.MaterialPreferenceCategory>
+                <androidx.recyclerview.widget.RecyclerView
+                    android:id="@+id/recycler_view"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    tools:listitem="@layout/rv_item_contact"></androidx.recyclerview.widget.RecyclerView>
 
-    </RelativeLayout>
-</ScrollView>
+            </com.yarolegovich.mp.MaterialPreferenceCategory>
+        </RelativeLayout>
+    </ScrollView>
+</RelativeLayout>

+ 0 - 1
app/src/main/res/layout/rv_item_contact.xml

@@ -29,7 +29,6 @@
                 android:orientation="vertical">
 
     <com.nextcloud.talk.utils.MagicFlipView
-        xmlns:app="http://schemas.android.com/apk/res-auto"
         android:id="@+id/avatar_flip_view"
         android:layout_width="@dimen/avatar_size"
         android:layout_height="@dimen/avatar_size"

+ 93 - 0
app/src/main/res/layout/rv_item_conversation_info_participant.xml

@@ -0,0 +1,93 @@
+<?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/>.
+  -->
+
+<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">
+
+    <FrameLayout
+        android:id="@+id/frame_layout"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_centerVertical="true"
+        android:layout_marginStart="@dimen/activity_horizontal_margin">
+
+        <com.nextcloud.talk.utils.MagicFlipView
+            android:id="@+id/avatar_flip_view"
+            android:layout_width="@dimen/avatar_size"
+            android:layout_height="@dimen/avatar_size"
+            app:animationDuration="170"
+            app:checked="false"
+            app:enableInitialAnimation="false"
+            app:rearBackgroundColor="@color/colorPrimary"/>
+
+        <ImageView
+            android:id="@+id/voiceOrSimpleCallImageView"
+            android:layout_width="12dp"
+            android:layout_height="12dp"
+            android:layout_gravity="bottom|end"
+            android:background="@drawable/shape_lock_bubble"
+            android:visibility="gone"/>
+
+        <ImageView
+            android:id="@+id/videoCallImageView"
+            android:layout_width="12dp"
+            android:layout_height="12dp"
+            android:layout_gravity="top|end"
+            android:background="@drawable/shape_favorite_bubble"
+            android:visibility="gone"/>
+
+    </FrameLayout>
+
+    <LinearLayout
+        android:id="@+id/linear_layout"
+        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_toEndOf="@id/frame_layout"
+        android:orientation="vertical">
+
+        <TextView
+            android:id="@+id/name_text"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:ellipsize="middle"
+            android:singleLine="true"
+            android:textAppearance="?android:attr/textAppearanceListItem"
+            tools:text="Call item text"/>
+
+        <TextView
+            android:id="@+id/secondary_text"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:ellipsize="middle"
+            android:singleLine="true"
+            android:textColor="?android:attr/textColorSecondary"
+            tools:text="A week ago"/>
+
+    </LinearLayout>
+
+</RelativeLayout>

+ 0 - 1
app/src/main/res/layout/rv_item_mention.xml

@@ -36,7 +36,6 @@
         android:layout_marginStart="@dimen/activity_horizontal_margin">
 
         <com.nextcloud.talk.utils.MagicFlipView
-            xmlns:app="http://schemas.android.com/apk/res-auto"
             android:id="@+id/avatar_flip_view"
             android:layout_width="@dimen/avatar_size"
             android:layout_height="@dimen/avatar_size"

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

@@ -25,7 +25,7 @@
     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
         android:id="@+id/avatar_flip_view"
         android:layout_width="@dimen/avatar_size"
         android:layout_height="@dimen/avatar_size"

+ 1 - 1
scripts/analysis/lint-results.txt

@@ -1,2 +1,2 @@
 DO NOT TOUCH; GENERATED BY DRONE
-      <span class="mdl-layout-title">Lint Report: 2 errors and 126 warnings</span>
+      <span class="mdl-layout-title">Lint Report: 2 errors and 122 warnings</span>