Prechádzať zdrojové kódy

add editing mode for conversation avatar

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
Marcel Hibbe 2 rokov pred
rodič
commit
84008a40dc

+ 70 - 18
app/src/main/java/com/nextcloud/talk/conversation/info/ConversationInfoActivity.kt

@@ -34,6 +34,8 @@ import android.os.Bundle
 import android.os.Parcelable
 import android.text.TextUtils
 import android.util.Log
+import android.view.Menu
+import android.view.MenuItem
 import android.view.View
 import android.view.View.GONE
 import android.view.View.VISIBLE
@@ -135,6 +137,9 @@ class ConversationInfoActivity :
     private var adapter: FlexibleAdapter<ParticipantItem>? = null
     private var userItems: MutableList<ParticipantItem> = ArrayList()
 
+    private lateinit var optionsMenu: Menu
+    private var edit = false
+
     private lateinit var pickImage: PickImage
 
     private val workerData: Data?
@@ -199,22 +204,18 @@ class ConversationInfoActivity :
     }
 
     private fun setupAvatarOptions() {
-        if (CapabilitiesUtilNew.isConversationAvatarEndpointAvailable(conversationUser)) {
-            pickImage = PickImage(this, conversationUser)
-            binding.avatarUpload.setOnClickListener { pickImage.selectLocal() }
-            binding.avatarChoose.setOnClickListener { pickImage.selectRemote() }
-            binding.avatarCamera.setOnClickListener { pickImage.takePicture() }
-            binding.avatarDelete.setOnClickListener { deleteAvatar() }
-            binding.avatarImage.let { ViewCompat.setTransitionName(it, "userAvatar.transitionTag") }
-
-            binding.let {
-                viewThemeUtils.material.themeFAB(it.avatarUpload)
-                viewThemeUtils.material.themeFAB(it.avatarChoose)
-                viewThemeUtils.material.themeFAB(it.avatarCamera)
-                viewThemeUtils.material.themeFAB(it.avatarDelete)
-            }
-        } else {
-            binding.avatarButtons.visibility = GONE
+        pickImage = PickImage(this, conversationUser)
+        binding.avatarUpload.setOnClickListener { pickImage.selectLocal() }
+        binding.avatarChoose.setOnClickListener { pickImage.selectRemote() }
+        binding.avatarCamera.setOnClickListener { pickImage.takePicture() }
+        binding.avatarDelete.setOnClickListener { deleteAvatar() }
+        binding.avatarImage.let { ViewCompat.setTransitionName(it, "userAvatar.transitionTag") }
+
+        binding.let {
+            viewThemeUtils.material.themeFAB(it.avatarUpload)
+            viewThemeUtils.material.themeFAB(it.avatarChoose)
+            viewThemeUtils.material.themeFAB(it.avatarCamera)
+            viewThemeUtils.material.themeFAB(it.avatarDelete)
         }
     }
 
@@ -234,6 +235,30 @@ class ConversationInfoActivity :
         viewThemeUtils.material.themeToolbar(binding.conversationInfoToolbar)
     }
 
+    override fun onCreateOptionsMenu(menu: Menu): Boolean {
+        super.onCreateOptionsMenu(menu)
+        if (CapabilitiesUtilNew.isConversationAvatarEndpointAvailable(conversationUser)) {
+            menuInflater.inflate(R.menu.menu_conversation_info, menu)
+            optionsMenu = menu
+            return true
+        }
+        return false
+    }
+
+    override fun onPrepareOptionsMenu(menu: Menu): Boolean {
+        super.onPrepareOptionsMenu(menu)
+        // menu.findItem(R.id.edit).isVisible = editableFields.size > 0
+        setEditMode(false)
+        return true
+    }
+
+    override fun onOptionsItemSelected(item: MenuItem): Boolean {
+        if (item.itemId == R.id.edit) {
+            toggleEditMode()
+        }
+        return true
+    }
+
     private fun themeSwitchPreferences() {
         binding.run {
             listOf(
@@ -263,6 +288,33 @@ class ConversationInfoActivity :
         }
     }
 
+    private fun toggleEditMode() {
+        edit = !edit
+        if (edit) {
+            setEditMode(true)
+        } else {
+            setEditMode(false)
+        }
+    }
+
+    private fun setEditMode(editing: Boolean) {
+        if (editing) {
+            optionsMenu.findItem(R.id.edit).setTitle(R.string.save)
+            binding.avatarUpload.visibility = VISIBLE
+            binding.avatarChoose.visibility = VISIBLE
+            binding.avatarCamera.visibility = VISIBLE
+            binding.avatarDelete.visibility = VISIBLE
+            edit = true
+        } else {
+            optionsMenu.findItem(R.id.edit).setTitle(R.string.edit)
+            binding.avatarUpload.visibility = GONE
+            binding.avatarChoose.visibility = GONE
+            binding.avatarCamera.visibility = GONE
+            binding.avatarDelete.visibility = GONE
+            edit = false
+        }
+    }
+
     override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
         super.onActivityResult(requestCode, resultCode, data)
         when (resultCode) {
@@ -325,7 +377,7 @@ class ConversationInfoActivity :
                 }
 
                 override fun onComplete() {
-                    // unused atm
+                    setEditMode(false)
                 }
             })
     }
@@ -360,7 +412,7 @@ class ConversationInfoActivity :
                 }
 
                 override fun onComplete() {
-                    // unused atm
+                    setEditMode(false)
                 }
             })
     }

+ 8 - 8
app/src/main/res/layout/activity_conversation_info.xml

@@ -87,6 +87,14 @@
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content">
 
+                    <ImageView
+                        android:id="@+id/avatar_image"
+                        android:layout_width="@dimen/avatar_size_big"
+                        android:layout_height="@dimen/avatar_size_big"
+                        android:layout_centerHorizontal="true"
+                        tools:src="@drawable/account_circle_48dp"
+                        android:contentDescription="@string/avatar" />
+
                     <androidx.emoji2.widget.EmojiTextView
                         android:id="@+id/display_name_text"
                         android:layout_width="wrap_content"
@@ -96,14 +104,6 @@
                         android:layout_marginTop="@dimen/margin_between_elements"
                         tools:text="Jane Doe" />
 
-                    <ImageView
-                        android:id="@+id/avatar_image"
-                        android:layout_width="@dimen/avatar_size_big"
-                        android:layout_height="@dimen/avatar_size_big"
-                        android:layout_centerHorizontal="true"
-                        tools:src="@drawable/account_circle_48dp"
-                        android:contentDescription="@string/avatar" />
-
                 </RelativeLayout>
 
                 <LinearLayout

+ 28 - 0
app/src/main/res/menu/menu_conversation_info.xml

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Nextcloud Android Talk application
+
+  @author Tobias Kaminsky
+  Copyright (C) 2021 Tobias Kaminsky
+  Copyright (C) 2021 Nextcloud GmbH
+ 
+  This program is free software: you can redistribute it and/or modify
+  it under the terms of the GNU Affero 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 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 <https://www.gnu.org/licenses/>.
+-->
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+    <item
+        android:id="@+id/edit"
+        android:title="@string/edit"
+        app:showAsAction="ifRoom" />
+</menu>