space switcher empty spaces (#6988)

This commit is contained in:
Nikita Fedrunov 2022-09-05 16:11:50 +02:00 committed by GitHub
parent e81f02f433
commit b37996e4c3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 63 additions and 2 deletions

1
changelog.d/6754.bugfix Normal file
View File

@ -0,0 +1 @@
[App Layout] - space switcher now has empty state

View File

@ -442,6 +442,10 @@
<string name="system_alerts_header">"System Alerts"</string>
<string name="suggested_header">Suggested Rooms</string>
<!-- Space List fragment -->
<string name="space_list_empty_title">No spaces yet.</string>
<string name="space_list_empty_message">Spaces are a new way to group rooms and people. Create a space to get started.</string>
<!-- Invites fragment -->
<string name="invites_title">Invites</string>

View File

@ -21,6 +21,7 @@ import android.view.HapticFeedbackConstants
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.view.isVisible
import com.airbnb.epoxy.EpoxyTouchHelper
import com.airbnb.mvrx.Loading
import com.airbnb.mvrx.Success
@ -28,6 +29,7 @@ import com.airbnb.mvrx.Uninitialized
import com.airbnb.mvrx.fragmentViewModel
import com.airbnb.mvrx.withState
import dagger.hilt.android.AndroidEntryPoint
import im.vector.app.core.epoxy.onClick
import im.vector.app.core.extensions.cleanup
import im.vector.app.core.extensions.configureWith
import im.vector.app.core.platform.StateView
@ -71,6 +73,7 @@ class SpaceListFragment :
homeActivitySharedActionViewModel = activityViewModelProvider[HomeSharedActionViewModel::class.java]
roomListSharedActionViewModel = activityViewModelProvider[RoomListSharedActionViewModel::class.java]
views.stateView.contentView = views.groupListView
views.spacesEmptyButton.onClick { onAddSpaceSelected() }
setupSpaceController()
observeViewEvents()
}
@ -147,13 +150,22 @@ class SpaceListFragment :
}
override fun invalidate() = withState(viewModel) { state ->
when (state.asyncSpaces) {
when (val spaces = state.asyncSpaces) {
Uninitialized,
is Loading -> {
views.stateView.state = StateView.State.Loading
return@withState
}
is Success -> views.stateView.state = StateView.State.Content
is Success -> {
views.stateView.state = StateView.State.Content
if (spaces.invoke().isEmpty()) {
views.spacesEmptyGroup.isVisible = true
views.groupListView.isVisible = false
} else {
views.spacesEmptyGroup.isVisible = false
views.groupListView.isVisible = true
}
}
else -> Unit
}

View File

@ -12,4 +12,48 @@
android:overScrollMode="always"
tools:listitem="@layout/item_space" />
<LinearLayout
android:id="@+id/spaces_empty_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical"
android:padding="@dimen/layout_horizontal_margin"
android:visibility="gone"
tools:visibility="visible">
<TextView
android:id="@+id/spaces_empty_title"
style="@style/Widget.Vector.TextView.Subtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:gravity="center"
android:text="@string/space_list_empty_title"
android:textColor="?vctr_content_primary"
android:textStyle="bold" />
<TextView
android:id="@+id/spaces_empty_message"
style="@style/Widget.Vector.TextView.Body"
android:layout_width="220dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="20dp"
android:gravity="center"
android:text="@string/space_list_empty_message"
android:textColor="?vctr_content_secondary" />
<Button
android:id="@+id/spaces_empty_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="8dp"
android:minWidth="190dp"
android:text="@string/create_space" />
</LinearLayout>
</im.vector.app.core.platform.StateView>