From b0544c9bb96eadc0c3749b53fdc35684931b3cdb Mon Sep 17 00:00:00 2001
From: Taras Smakula <tarassmakula@gmail.com>
Date: Wed, 13 Mar 2024 15:31:47 +0200
Subject: [PATCH] Create ui

---
 .../filter/FilterTimelinesDataSource.kt       | 13 +++-
 .../filter/FilterTimelinesDialogFragment.kt   | 36 +++++++++-
 .../filter/FilterTimelinesViewModel.kt        |  5 +-
 .../dialog_fragment_filter_timeline.xml       | 68 ++++++++++++++++++-
 core/src/main/res/values/strings.xml          |  2 +
 5 files changed, 118 insertions(+), 6 deletions(-)

diff --git a/core/src/main/java/org/futo/circles/core/feature/circles/filter/FilterTimelinesDataSource.kt b/core/src/main/java/org/futo/circles/core/feature/circles/filter/FilterTimelinesDataSource.kt
index 228ccfe74..4eed7fb30 100644
--- a/core/src/main/java/org/futo/circles/core/feature/circles/filter/FilterTimelinesDataSource.kt
+++ b/core/src/main/java/org/futo/circles/core/feature/circles/filter/FilterTimelinesDataSource.kt
@@ -1,6 +1,17 @@
 package org.futo.circles.core.feature.circles.filter
 
+import androidx.lifecycle.SavedStateHandle
+import org.futo.circles.core.extensions.getOrThrow
+import org.futo.circles.core.provider.MatrixSessionProvider
 import javax.inject.Inject
 
-class FilterTimelinesDataSource @Inject constructor() {
+class FilterTimelinesDataSource @Inject constructor(
+    savedStateHandle: SavedStateHandle
+) {
+
+    private val circleId: String = savedStateHandle.getOrThrow("circleId")
+
+    val circleSummaryLiveData =
+        MatrixSessionProvider.getSessionOrThrow().roomService().getRoomSummaryLive(circleId)
+
 }
\ No newline at end of file
diff --git a/core/src/main/java/org/futo/circles/core/feature/circles/filter/FilterTimelinesDialogFragment.kt b/core/src/main/java/org/futo/circles/core/feature/circles/filter/FilterTimelinesDialogFragment.kt
index 5ad59fcff..6cb18bda0 100644
--- a/core/src/main/java/org/futo/circles/core/feature/circles/filter/FilterTimelinesDialogFragment.kt
+++ b/core/src/main/java/org/futo/circles/core/feature/circles/filter/FilterTimelinesDialogFragment.kt
@@ -1,12 +1,46 @@
 package org.futo.circles.core.feature.circles.filter
 
+import android.os.Bundle
+import android.view.View
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.viewModels
 import dagger.hilt.android.AndroidEntryPoint
+import org.futo.circles.core.R
 import org.futo.circles.core.base.fragment.BaseFullscreenDialogFragment
+import org.futo.circles.core.base.fragment.HasLoadingState
 import org.futo.circles.core.databinding.DialogFragmentFilterTimelineBinding
+import org.futo.circles.core.extensions.observeData
+import org.futo.circles.core.mapping.nameOrId
 
 
 @AndroidEntryPoint
 class FilterTimelinesDialogFragment :
-    BaseFullscreenDialogFragment(DialogFragmentFilterTimelineBinding::inflate) {
+    BaseFullscreenDialogFragment(DialogFragmentFilterTimelineBinding::inflate), HasLoadingState {
+
+    override val fragment: Fragment = this
+    private val viewModel by viewModels<FilterTimelinesViewModel>()
+
+    private val binding by lazy {
+        getBinding() as DialogFragmentFilterTimelineBinding
+    }
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+        setupViews()
+        setupObservers()
+    }
+
+    private fun setupViews() {
+
+    }
+
+    private fun setupObservers() {
+        viewModel.circleInfoLiveData.observeData(this) {
+            it.getOrNull()?.let { info ->
+                binding.tvSubtitle.text =
+                    getString(R.string.select_timelines_format, info.nameOrId())
+            }
+        }
+    }
 
 }
\ No newline at end of file
diff --git a/core/src/main/java/org/futo/circles/core/feature/circles/filter/FilterTimelinesViewModel.kt b/core/src/main/java/org/futo/circles/core/feature/circles/filter/FilterTimelinesViewModel.kt
index 5e0bd522e..77beb3bd3 100644
--- a/core/src/main/java/org/futo/circles/core/feature/circles/filter/FilterTimelinesViewModel.kt
+++ b/core/src/main/java/org/futo/circles/core/feature/circles/filter/FilterTimelinesViewModel.kt
@@ -6,7 +6,10 @@ import javax.inject.Inject
 
 @HiltViewModel
 class FilterTimelinesViewModel @Inject constructor(
-    private val dataSource: FilterTimelinesDataSource
+    dataSource: FilterTimelinesDataSource
 ) : ViewModel() {
 
+    val circleInfoLiveData = dataSource.circleSummaryLiveData
+
+
 }
\ No newline at end of file
diff --git a/core/src/main/res/layout/dialog_fragment_filter_timeline.xml b/core/src/main/res/layout/dialog_fragment_filter_timeline.xml
index 77d9ef65f..deed8c8e1 100644
--- a/core/src/main/res/layout/dialog_fragment_filter_timeline.xml
+++ b/core/src/main/res/layout/dialog_fragment_filter_timeline.xml
@@ -1,6 +1,68 @@
 <?xml version="1.0" encoding="utf-8"?>
-<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
-    android:layout_height="match_parent">
+    android:layout_height="match_parent"
+    android:orientation="vertical">
 
-</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
+
+    <com.google.android.material.appbar.MaterialToolbar
+        android:id="@+id/toolbar"
+        android:layout_width="match_parent"
+        android:layout_height="?attr/actionBarSize"
+        app:navigationIcon="?attr/homeAsUpIndicator"
+        app:title="@string/filter_timelines"
+        app:titleCentered="true"
+        app:titleMarginEnd="72dp">
+
+        <org.futo.circles.core.view.LoadingButton
+            android:id="@+id/btnSave"
+            android:layout_width="56dp"
+            android:layout_height="match_parent"
+            android:layout_gravity="end"
+            android:layout_marginVertical="8dp"
+            android:layout_marginEnd="8dp"
+            android:enabled="false"
+            android:text="@string/save"
+            android:textSize="13sp"
+            app:textPadding="1dp" />
+
+    </com.google.android.material.appbar.MaterialToolbar>
+
+
+    <View
+        android:id="@+id/toolbarDivider"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/divider_height"
+        android:background="@color/divider_color" />
+
+    <TextView
+        android:id="@+id/tvSubtitle"
+        style="@style/subheadline"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="8dp"
+        android:gravity="center"
+        android:paddingHorizontal="8dp"
+        android:text="@string/select_timelines_format" />
+
+    <com.google.android.material.button.MaterialButton
+        android:id="@+id/btnSelectAll"
+        style="@style/NegativeButtonStyle"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginHorizontal="8dp"
+        android:layout_marginTop="8dp"
+        android:text="@string/select_all"
+        android:textSize="12sp" />
+
+
+    <org.futo.circles.core.view.LoadingRecyclerView
+        android:id="@+id/rvUsers"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_marginTop="8dp"
+        android:paddingHorizontal="8dp" />
+
+
+</LinearLayout>
\ 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 3b6a8c98a..d530d4c52 100644
--- a/core/src/main/res/values/strings.xml
+++ b/core/src/main/res/values/strings.xml
@@ -171,4 +171,6 @@
     <string name="invite_to_connect">Invite to connect</string>
     <string name="follow">Follow</string>
     <string name="default_user_role">Default user role</string>
+    <string name="select_timelines_format">Select timelines which posts you want to read in %s</string>
+    <string name="select_all">Select all</string>
 </resources>
\ No newline at end of file
-- 
GitLab