diff --git a/app/src/main/java/org/futo/circles/feature/people/user/UserDialogFragment.kt b/app/src/main/java/org/futo/circles/feature/people/user/UserDialogFragment.kt index 1597779069299a931e96dd6f368a2c712b4f2bc5..a1da0890eea356db98eb70c74e4d8034e8dc5a60 100644 --- a/app/src/main/java/org/futo/circles/feature/people/user/UserDialogFragment.kt +++ b/app/src/main/java/org/futo/circles/feature/people/user/UserDialogFragment.kt @@ -66,22 +66,25 @@ class UserDialogFragment : BaseFullscreenDialogFragment(DialogFragmentUserBindin addItemDecoration(DividerItemDecoration(context, DividerItemDecoration.VERTICAL)) adapter = usersCirclesAdapter } + val amIFollowing = viewModel.amIFollowingUser() + binding.btnUnFollow.apply { + setIsVisible(amIFollowing) + setOnClickListener { withConfirmation(UnfollowUser()) { viewModel.unFollowUser() } } + } + binding.btnInviteToConnect.apply { + setIsVisible(!amIFollowing) + setOnClickListener { viewModel.inviteToMySharedCircle() } + } } @SuppressLint("RestrictedApi") private fun setupMenu() { with(binding.toolbar) { (menu as? MenuBuilder)?.setOptionalIconsVisible(true) - menu.findItem(R.id.unFollow).isVisible = viewModel.amIFollowingUser() menu.findItem(R.id.ignore).isVisible = !isUserIgnored menu.findItem(R.id.unIgnore).isVisible = isUserIgnored setOnMenuItemClickListener { item -> return@setOnMenuItemClickListener when (item.itemId) { - R.id.unFollow -> { - withConfirmation(UnfollowUser()) { viewModel.unFollowUser() } - true - } - R.id.ignore -> { withConfirmation(IgnoreUser()) { viewModel.ignoreUser() } true diff --git a/app/src/main/java/org/futo/circles/feature/people/user/UserViewModel.kt b/app/src/main/java/org/futo/circles/feature/people/user/UserViewModel.kt index 14adcf406e54a9ff27d4755de6c955a43b9b3f36..0dbaa784f50a54d471e8795d4148f353c402b1f8 100644 --- a/app/src/main/java/org/futo/circles/feature/people/user/UserViewModel.kt +++ b/app/src/main/java/org/futo/circles/feature/people/user/UserViewModel.kt @@ -13,6 +13,8 @@ import org.futo.circles.core.extensions.getOrThrow import org.futo.circles.core.extensions.launchBg import org.futo.circles.core.extensions.launchUi import org.futo.circles.core.feature.room.RoomRelationsBuilder +import org.futo.circles.core.feature.room.invite.InviteRequestsDataSource +import org.futo.circles.core.feature.workspace.SharedCircleDataSource import org.futo.circles.core.provider.MatrixSessionProvider import org.futo.circles.feature.people.UserOptionsDataSource import org.futo.circles.model.TimelineListItem @@ -23,10 +25,13 @@ class UserViewModel @Inject constructor( savedStateHandle: SavedStateHandle, private val userDataSource: UserDataSource, private val userOptionsDataSource: UserOptionsDataSource, - private val roomRelationsBuilder: RoomRelationsBuilder + private val roomRelationsBuilder: RoomRelationsBuilder, + private val inviteRequestsDataSource: InviteRequestsDataSource, + sharedCircleDataSource: SharedCircleDataSource ) : ViewModel() { private val userId: String = savedStateHandle.getOrThrow("userId") + private val mySharedCircleSpaceId = sharedCircleDataSource.getSharedCirclesSpaceId() ?: "" val userLiveData = userDataSource.userLiveData val timelineLiveDataLiveData = MutableLiveData<List<TimelineListItem>>() @@ -87,5 +92,11 @@ class UserViewModel @Inject constructor( } fun amIFollowingUser(): Boolean = userOptionsDataSource.amIFollowingUser(userId) + fun inviteToMySharedCircle() { + launchBg { + val result = inviteRequestsDataSource.inviteUser(mySharedCircleSpaceId, userId) + requestFollowLiveData.postValue(result) + } + } } \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_fragment_user.xml b/app/src/main/res/layout/dialog_fragment_user.xml index 4de5e4250447602beb1c9090832d4ef128ee4f0f..5e34c60a36874d0752754544cd3cebe053573439 100644 --- a/app/src/main/res/layout/dialog_fragment_user.xml +++ b/app/src/main/res/layout/dialog_fragment_user.xml @@ -70,6 +70,42 @@ app:layout_constraintTop_toBottomOf="@id/tvUserName" tools:text="texsdt" /> + <com.google.android.material.button.MaterialButton + android:id="@+id/btnUnFollow" + style="@style/NegativeButtonStyle" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="8dp" + android:text="@string/unfollow" + android:textSize="12sp" + android:visibility="gone" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/tvUserId" + tools:visibility="visible" /> + + <com.google.android.material.button.MaterialButton + android:id="@+id/btnInviteToConnect" + style="@style/AccentButtonStyle" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="8dp" + android:text="@string/invite_to_connect" + android:textSize="12sp" + android:visibility="gone" + app:icon="@drawable/ic_link" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/tvUserId" + tools:visibility="visible" /> + + <androidx.constraintlayout.widget.Barrier + android:id="@+id/buttonsBarier" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + app:barrierDirection="bottom" + app:constraint_referenced_ids="btnInviteToConnect,btnUnFollow" /> + <View android:id="@+id/divider" @@ -79,7 +115,7 @@ android:background="@color/divider_color" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@id/tvUserId" /> + app:layout_constraintTop_toBottomOf="@id/buttonsBarier" /> <org.futo.circles.core.view.LoadingRecyclerView diff --git a/app/src/main/res/menu/user_menu.xml b/app/src/main/res/menu/user_menu.xml index c9aff5dc61aca5ae31d159908ddafa6b4732f698..6a03cbf1c147e71db0da6953fe16d4146d08ca65 100644 --- a/app/src/main/res/menu/user_menu.xml +++ b/app/src/main/res/menu/user_menu.xml @@ -1,10 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> - <item - android:id="@+id/unFollow" - android:icon="@drawable/ic_unfollow" - android:title="@string/unfollow" /> <item android:id="@+id/ignore"