diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 22acdeb3b65a81686e290da0b43537a4b0193b6e..151d8b784ba58f001692a6f994593e89df969cc1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -30,8 +30,6 @@ <string name="circle_name">Circle name</string> <string name="group_topic_optional">Group topic (optional)</string> <string name="group_topic">Group topic</string> - <string name="setup_circles">Setup Circles</string> - <string name="circle_encryption_warning">NOTE: Circle name and cover image are not encrypted</string> <string name="friends">Friends</string> <string name="family">Family</string> <string name="community">Community</string> @@ -240,12 +238,6 @@ <item>@string/other_prohibited_content</item> </string-array> - <string-array name="setup_circles_list"> - <item>@string/friends</item> - <item>@string/family</item> - <item>@string/community</item> - </string-array> - <plurals name="notification_compat_summary_line_for_room"> <item quantity="one">%1$s: %2$d message</item> <item quantity="other">%1$s: %2$d messages</item> diff --git a/core/src/main/java/org/futo/circles/core/workspace/ConfigureWorkspaceDataSource.kt b/core/src/main/java/org/futo/circles/core/workspace/ConfigureWorkspaceDataSource.kt deleted file mode 100644 index b669bf8042c688934ad075d80d150ad090d9e906..0000000000000000000000000000000000000000 --- a/core/src/main/java/org/futo/circles/core/workspace/ConfigureWorkspaceDataSource.kt +++ /dev/null @@ -1,50 +0,0 @@ -package org.futo.circles.core.workspace - -import kotlinx.coroutines.delay -import org.futo.circles.core.model.CirclesRoom -import org.futo.circles.core.model.OptionalWorkspaceTask -import org.futo.circles.core.model.WorkspaceTask -import org.futo.circles.core.room.CreateRoomDataSource -import org.futo.circles.core.utils.getJoinedRoomById -import org.futo.circles.core.utils.getJoinedRoomIdByTag -import javax.inject.Inject - -class ConfigureWorkspaceDataSource @Inject constructor( - private val createRoomDataSource: CreateRoomDataSource, - private val spacesTreeAccountDataSource: SpacesTreeAccountDataSource -) { - - suspend fun perform(task: WorkspaceTask) { - if ((task as? OptionalWorkspaceTask)?.isSelected != true) return - val room = task.room - val roomId = createRoomDataSource.createRoom(room) - room.accountDataKey?.let { key -> - spacesTreeAccountDataSource.updateSpacesConfigAccountData(key, roomId) - } - delay(CREATE_ROOM_DELAY) - } - - suspend fun validate(task: WorkspaceTask): Boolean { - if (task is OptionalWorkspaceTask) return true - val room = task.room - val accountDataKey = room.accountDataKey ?: return false - if (spacesTreeAccountDataSource.getRoomIdByKey(accountDataKey) == null) { - addRecordToAccountDataIfRoomExist(room) - } - return getJoinedRoomById( - spacesTreeAccountDataSource.getRoomIdByKey(accountDataKey) ?: "" - ) != null - } - - private suspend fun addRecordToAccountDataIfRoomExist(room: CirclesRoom) { - val tag = room.tag ?: return - val key = room.accountDataKey ?: return - val roomId = getJoinedRoomIdByTag(tag, true) ?: return - spacesTreeAccountDataSource.updateSpacesConfigAccountData(key, roomId) - } - - private companion object { - private const val CREATE_ROOM_DELAY = 1000L - } - -} \ No newline at end of file diff --git a/core/src/main/java/org/futo/circles/core/workspace/SpacesTreeAccountDataSource.kt b/core/src/main/java/org/futo/circles/core/workspace/SpacesTreeAccountDataSource.kt deleted file mode 100644 index 0c2a293372fba462edc82a0d528a9b7ef3256779..0000000000000000000000000000000000000000 --- a/core/src/main/java/org/futo/circles/core/workspace/SpacesTreeAccountDataSource.kt +++ /dev/null @@ -1,28 +0,0 @@ -package org.futo.circles.core.workspace - -import org.futo.circles.core.provider.MatrixSessionProvider -import javax.inject.Inject - -class SpacesTreeAccountDataSource @Inject constructor() { - - fun getSpacesTreeConfig() = - MatrixSessionProvider.currentSession?.accountDataService() - ?.getUserAccountDataEvent(SPACES_CONFIG_KEY)?.content ?: emptyMap() - - suspend fun updateSpacesConfigAccountData(key: String, roomId: String) { - val currentConfig = getSpacesTreeConfig().toMutableMap() - currentConfig[key] = roomId - saveSpacesTreeConfig(currentConfig) - } - - fun getRoomIdByKey(key: String) = getSpacesTreeConfig()[key]?.toString() - - private suspend fun saveSpacesTreeConfig(configMap: Map<String, Any>) { - MatrixSessionProvider.getSessionOrThrow().accountDataService() - .updateUserAccountData(SPACES_CONFIG_KEY, configMap) - } - - companion object { - private const val SPACES_CONFIG_KEY = "org.futo.circles.config" - } -} \ No newline at end of file diff --git a/core/src/main/java/org/futo/circles/core/workspace/list/WorkspaceTaskViewHolder.kt b/core/src/main/java/org/futo/circles/core/workspace/list/WorkspaceTaskViewHolder.kt new file mode 100644 index 0000000000000000000000000000000000000000..436cdc881621d6c39cf55193adf6d61c20278335 --- /dev/null +++ b/core/src/main/java/org/futo/circles/core/workspace/list/WorkspaceTaskViewHolder.kt @@ -0,0 +1,97 @@ +package org.futo.circles.core.workspace.list + +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.ProgressBar +import androidx.core.content.ContextCompat +import androidx.recyclerview.widget.RecyclerView +import org.futo.circles.core.R +import org.futo.circles.core.databinding.ListItemMandatoryWorkspaceTaskBinding +import org.futo.circles.core.databinding.ListItemOptionalWorkspaceTaskBinding +import org.futo.circles.core.extensions.gone +import org.futo.circles.core.extensions.onClick +import org.futo.circles.core.extensions.visible +import org.futo.circles.core.list.ViewBindingHolder +import org.futo.circles.core.list.context +import org.futo.circles.core.model.OptionalWorkspaceTask +import org.futo.circles.core.model.TaskStatus +import org.futo.circles.core.model.WorkspaceTask + + +abstract class WorkspaceTaskViewHolder(view: View) : RecyclerView.ViewHolder(view) { + abstract fun bind(data: WorkspaceTask) + + protected fun bindStatus(status: TaskStatus, ivStatus: ImageView, vTaskProgress: ProgressBar) { + when (status) { + TaskStatus.RUNNING -> { + ivStatus.gone() + vTaskProgress.visible() + } + + TaskStatus.IDLE -> { + ivStatus.gone() + vTaskProgress.gone() + } + + else -> { + vTaskProgress.gone() + ivStatus.apply { + visible() + setImageResource( + if (status == TaskStatus.FAILED) R.drawable.ic_error + else R.drawable.ic_check_circle + ) + setColorFilter( + ContextCompat.getColor( + context, + if (status == TaskStatus.FAILED) R.color.red + else R.color.blue + ) + ) + } + } + } + } + +} + +class MandatoryWorkspaceTaskViewHolder( + parent: ViewGroup, +) : WorkspaceTaskViewHolder(inflate(parent, ListItemMandatoryWorkspaceTaskBinding::inflate)) { + + private companion object : ViewBindingHolder + + private val binding = baseBinding as ListItemMandatoryWorkspaceTaskBinding + + override fun bind(data: WorkspaceTask) { + with(binding) { + tvName.text = context.getString(data.titleResId) + tvMessage.text = context.getString(data.descriptionResId) + bindStatus(data.status, ivTaskStatus, taskProgress) + } + } +} + +class OptionalWorkspaceTaskViewHolder( + parent: ViewGroup, + onItemClicked: (Int) -> Unit +) : WorkspaceTaskViewHolder(inflate(parent, ListItemOptionalWorkspaceTaskBinding::inflate)) { + + private companion object : ViewBindingHolder + + private val binding = baseBinding as ListItemOptionalWorkspaceTaskBinding + + init { + onClick(binding.rootItem) { onItemClicked(it) } + } + + override fun bind(data: WorkspaceTask) { + with(binding.lTask) { + tvName.text = context.getString(data.titleResId) + tvMessage.text = context.getString(data.descriptionResId) + bindStatus(data.status, ivTaskStatus, taskProgress) + } + binding.taskCheck.isChecked = (data as? OptionalWorkspaceTask)?.isSelected ?: false + } +} \ No newline at end of file diff --git a/core/src/main/res/layout/list_item_mandatory_workspace_task.xml b/core/src/main/res/layout/list_item_mandatory_workspace_task.xml new file mode 100644 index 0000000000000000000000000000000000000000..5b6735ecb3112056eb926b9b1fb09de8f5ab1fb9 --- /dev/null +++ b/core/src/main/res/layout/list_item_mandatory_workspace_task.xml @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/lRoot" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingHorizontal="8dp" + android:paddingVertical="4dp"> + + + <TextView + android:id="@+id/tvName" + style="@style/body" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginStart="8dp" + android:layout_marginEnd="36dp" + android:ellipsize="end" + android:lines="1" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + tools:text="Android01" /> + + <TextView + android:id="@+id/tvMessage" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginStart="8dp" + android:layout_marginEnd="36dp" + android:ellipsize="end" + android:maxLines="4" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/tvName" + tools:text="Android01" /> + + <ProgressBar + android:id="@+id/taskProgress" + android:layout_width="24dp" + android:layout_height="24dp" + app:layout_constraintBottom_toBottomOf="@id/tvMessage" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + <ImageView + android:id="@+id/ivTaskStatus" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:src="@drawable/ic_check_circle" + android:visibility="gone" + app:layout_constraintBottom_toBottomOf="@id/tvMessage" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:tint="@color/blue" + tools:visibility="visible" /> + +</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/core/src/main/res/layout/list_item_optional_workspace_task.xml b/core/src/main/res/layout/list_item_optional_workspace_task.xml new file mode 100644 index 0000000000000000000000000000000000000000..ca9ddc308d422d8205c6e6b4bb6ba28cb60522a2 --- /dev/null +++ b/core/src/main/res/layout/list_item_optional_workspace_task.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:id="@+id/rootItem" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="?selectableItemBackground" + android:clickable="true" + android:focusable="true"> + + + <com.google.android.material.checkbox.MaterialCheckBox + android:id="@+id/taskCheck" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:clickable="false" + android:focusable="false" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + + <include + android:id="@+id/lTask" + layout="@layout/list_item_mandatory_workspace_task" + android:layout_width="0dp" + android:layout_height="wrap_content" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toEndOf="@id/taskCheck" /> + +</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index 64169c1964d759b5eac649afb4cd8b52c695972e..b3e7fd2827a113a28282ea09b47cc186e8ebed48 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -131,5 +131,7 @@ <string name="decline">Decline</string> <string name="requested_to_join_format">%s requested to join</string> <string name="invited_by_format">Invited by %s</string> + <string name="circle_encryption_warning">NOTE: Circle name and cover image are not encrypted</string> + <string name="create">Create</string> </resources> \ No newline at end of file diff --git a/gallery/src/main/res/values/strings.xml b/gallery/src/main/res/values/strings.xml index 878656c6afa528bb23c360911e1bbf3636367889..62b06e9f7ca3c8959c81263700732f694ef1567b 100644 --- a/gallery/src/main/res/values/strings.xml +++ b/gallery/src/main/res/values/strings.xml @@ -17,7 +17,6 @@ <string name="gallery_name">Gallery name</string> <string name="gallery_encryption_warning">NOTE: Gallery name and cover image are not encrypted</string> <string name="create_new_gallery">Create new gallery</string> - <string name="create">Create</string> <string name="photos_empty_message">Create your first Gallery</string> </resources> \ No newline at end of file