mainview: add account presence cycle to account combo box delegates

Make account presence cycle a component, and remove redundant
update function

Gitlab: #23
Change-Id: I93cb37f2886da2e8e5e41d4c97ce054497e4e399
diff --git a/src/mainview/components/AccountComboBox.qml b/src/mainview/components/AccountComboBox.qml
index 6037d43..0fd3fa8 100644
--- a/src/mainview/components/AccountComboBox.qml
+++ b/src/mainview/components/AccountComboBox.qml
@@ -1,4 +1,3 @@
-
 /*
  * Copyright (C) 2020 by Savoir-faire Linux
  * Author: Mingrui Zhang <mingrui.zhang@savoirfairelinux.com>
@@ -16,6 +15,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
+
 import QtQuick 2.14
 import QtQuick.Controls 2.14
 import QtQuick.Layouts 1.14
@@ -37,13 +37,6 @@
         needToBackToWelcomePage()
     }
 
-    // Refresh every item in accountListModel.
-    function updateAccountListModel() {
-        accountListModel.dataChanged(accountListModel.index(0, 0),
-                                     accountListModel.index(
-                                         accountListModel.rowCount() - 1, 0))
-    }
-
     // Reset accountListModel.
     function resetAccountListModel() {
         accountListModel.reset()
@@ -72,41 +65,24 @@
         }
         mipmap: true
 
-        Rectangle {
-            id: presenseRect
+        AccountPresenceCycle {
+            id: currentAccountPresenseCycle
 
             anchors.right: userImageRoot.right
             anchors.rightMargin: -2
             anchors.bottom: userImageRoot.bottom
             anchors.bottomMargin: -2
 
-            width: 12
-            height: 12
-
-            // Visible when account is registered, enum REGISTERED == 5.
+            // Visible when account is registered.
             visible: {
                 if (currentIndex !== -1)
                     return accountListModel.data(
                                 accountListModel.index(
-                                    accountComboBox.currentIndex, 0), 261) === 5
+                                    accountComboBox.currentIndex, 0), 261)
+                            === Account.Status.REGISTERED
                 else
                     return visible
             }
-
-            Rectangle {
-                id: presenseCycle
-
-                anchors.centerIn: presenseRect
-
-                width: 10
-                height: 10
-
-                radius: 30
-                color: JamiTheme.presenceGreen
-            }
-
-            radius: 30
-            color: JamiTheme.backgroundColor
         }
     }
 
diff --git a/src/mainview/components/AccountComboBoxPopup.qml b/src/mainview/components/AccountComboBoxPopup.qml
index 2e3120d..813cb8e 100644
--- a/src/mainview/components/AccountComboBoxPopup.qml
+++ b/src/mainview/components/AccountComboBoxPopup.qml
@@ -57,7 +57,6 @@
         model: accountListModel
         implicitHeight: contentHeight
         delegate: ItemDelegate {
-
             Image {
                 id: userImage
 
@@ -66,7 +65,7 @@
                 anchors.verticalCenter: parent.verticalCenter
 
                 width: 30
-                height: parent.height
+                height: 30
 
                 fillMode: Image.PreserveAspectFit
                 mipmap: true
@@ -81,6 +80,22 @@
                     }
                     return "data:image/png;base64," + data
                 }
+
+                AccountPresenceCycle {
+                    id: accountPresenseCycle
+
+                    anchors.right: userImage.right
+                    anchors.rightMargin: -2
+                    anchors.bottom: userImage.bottom
+                    anchors.bottomMargin: -2
+
+                    // Visible when account is registered.
+                    visible: {
+                        return accountListModel.data(
+                                    accountListModel.index(index, 0), 261)
+                                === Account.Status.REGISTERED
+                    }
+                }
             }
 
             Text {
diff --git a/src/mainview/components/AccountPresenceCycle.qml b/src/mainview/components/AccountPresenceCycle.qml
new file mode 100644
index 0000000..9eb4458
--- /dev/null
+++ b/src/mainview/components/AccountPresenceCycle.qml
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2020 by Savoir-faire Linux
+ * Author: Mingrui Zhang <mingrui.zhang@savoirfairelinux.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 <https://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 2.14
+import QtQuick.Controls 2.14
+import net.jami.Models 1.0
+
+Rectangle {
+    id: root
+
+    width: 12
+    height: 12
+
+    Rectangle {
+        id: presenceCycle
+
+        anchors.centerIn: root
+
+        width: 10
+        height: 10
+
+        radius: 30
+        color: JamiTheme.presenceGreen
+    }
+
+    radius: 30
+    color: JamiTheme.backgroundColor
+}
diff --git a/src/mainview/components/ConversationSmartListUserImage.qml b/src/mainview/components/ConversationSmartListUserImage.qml
index 6f3600b..e8034fd 100644
--- a/src/mainview/components/ConversationSmartListUserImage.qml
+++ b/src/mainview/components/ConversationSmartListUserImage.qml
@@ -31,33 +31,14 @@
     source: "data:image/png;base64," + Picture
     mipmap: true
 
-    Rectangle {
-        id: presenseRect
+    AccountPresenceCycle {
+        id: conversationAccountPresenseCycle
 
         anchors.right: userImage.right
-        anchors.rightMargin: -2
         anchors.bottom: userImage.bottom
         anchors.bottomMargin: -2
 
-        width: 14
-        height: 14
-
         visible: Presence
-
-        Rectangle {
-            id: presenseCycle
-
-            anchors.centerIn: presenseRect
-
-            width: 10
-            height: 10
-
-            radius: 30
-            color: JamiTheme.presenceGreen
-        }
-
-        radius: 30
-        color: JamiTheme.backgroundColor
     }
 
     Rectangle {