Stick info header when selecting subscriptions in the feed group dialog

- Avoid creating plural translation by using a different wording
This commit is contained in:
Mauricio Colli 2020-01-29 23:23:10 -03:00
parent 3f32573638
commit 2c783ff911
No known key found for this signature in database
GPG key ID: F200BFD6F29DDD85
4 changed files with 55 additions and 65 deletions

View file

@ -29,7 +29,6 @@ import org.schabi.newpipe.database.subscription.SubscriptionEntity
import org.schabi.newpipe.local.subscription.FeedGroupIcon import org.schabi.newpipe.local.subscription.FeedGroupIcon
import org.schabi.newpipe.local.subscription.dialog.FeedGroupDialogViewModel.FeedDialogEvent import org.schabi.newpipe.local.subscription.dialog.FeedGroupDialogViewModel.FeedDialogEvent
import org.schabi.newpipe.local.subscription.item.EmptyPlaceholderItem import org.schabi.newpipe.local.subscription.item.EmptyPlaceholderItem
import org.schabi.newpipe.local.subscription.item.HeaderTextSideItem
import org.schabi.newpipe.local.subscription.item.PickerIconItem import org.schabi.newpipe.local.subscription.item.PickerIconItem
import org.schabi.newpipe.local.subscription.item.PickerSubscriptionItem import org.schabi.newpipe.local.subscription.item.PickerSubscriptionItem
import org.schabi.newpipe.util.AnimationUtils.animateView import org.schabi.newpipe.util.AnimationUtils.animateView
@ -82,7 +81,7 @@ class FeedGroupDialog : DialogFragment() {
super.onSaveInstanceState(outState) super.onSaveInstanceState(outState)
iconsListState = icon_selector.layoutManager?.onSaveInstanceState() iconsListState = icon_selector.layoutManager?.onSaveInstanceState()
subscriptionsListState = subscriptions_selector.layoutManager?.onSaveInstanceState() subscriptionsListState = subscriptions_selector_list.layoutManager?.onSaveInstanceState()
Icepick.saveInstanceState(this, outState) Icepick.saveInstanceState(this, outState)
} }
@ -185,9 +184,7 @@ class FeedGroupDialog : DialogFragment() {
val selectedCountText = getString(R.string.feed_group_dialog_selection_count, this.selectedSubscriptions.size) val selectedCountText = getString(R.string.feed_group_dialog_selection_count, this.selectedSubscriptions.size)
selected_subscription_count_view.text = selectedCountText selected_subscription_count_view.text = selectedCountText
subscriptions_selector_header_info.text = selectedCountText
val headerInfoItem = HeaderTextSideItem(getString(R.string.tab_subscriptions), selectedCountText)
groupAdapter.add(headerInfoItem)
Section().apply { Section().apply {
addAll(subscriptions.map { addAll(subscriptions.map {
@ -199,16 +196,11 @@ class FeedGroupDialog : DialogFragment() {
groupAdapter.add(this) groupAdapter.add(this)
} }
subscriptions_selector.apply { subscriptions_selector_list.apply {
if (useGridLayout) { layoutManager = if (useGridLayout) {
layoutManager = GridLayoutManager(requireContext(), groupAdapter.spanCount, RecyclerView.VERTICAL, false).apply { GridLayoutManager(requireContext(), groupAdapter.spanCount, RecyclerView.VERTICAL, false)
spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {
override fun getSpanSize(position: Int) =
if (position == 0) 4 else 1
}
}
} else { } else {
layoutManager = LinearLayoutManager(requireContext(), RecyclerView.VERTICAL, false) LinearLayoutManager(requireContext(), RecyclerView.VERTICAL, false)
} }
adapter = groupAdapter adapter = groupAdapter
@ -237,14 +229,13 @@ class FeedGroupDialog : DialogFragment() {
val updateSelectedCountText = getString(R.string.feed_group_dialog_selection_count, this.selectedSubscriptions.size) val updateSelectedCountText = getString(R.string.feed_group_dialog_selection_count, this.selectedSubscriptions.size)
selected_subscription_count_view.text = updateSelectedCountText selected_subscription_count_view.text = updateSelectedCountText
headerInfoItem.infoText = updateSelectedCountText subscriptions_selector_header_info.text = updateSelectedCountText
headerInfoItem.notifyChanged(HeaderTextSideItem.UPDATE_INFO)
} }
} }
} }
select_channel_button.setOnClickListener { select_channel_button.setOnClickListener {
subscriptions_selector.scrollToPosition(0) subscriptions_selector_list.scrollToPosition(0)
showSubscriptionsPicker() showSubscriptionsPicker()
} }
} }

View file

@ -1,37 +0,0 @@
package org.schabi.newpipe.local.subscription.item
import android.view.View.OnClickListener
import com.xwray.groupie.kotlinandroidextensions.Item
import com.xwray.groupie.kotlinandroidextensions.GroupieViewHolder
import kotlinx.android.synthetic.main.header_with_text_item.*
import org.schabi.newpipe.R
class HeaderTextSideItem(
val title: String,
var infoText: String? = null,
private val onClickListener: (() -> Unit)? = null
) : Item() {
companion object {
const val UPDATE_INFO = 123
}
override fun getLayout(): Int = R.layout.header_with_text_item
override fun bind(viewHolder: GroupieViewHolder, position: Int, payloads: MutableList<Any>) {
if (payloads.contains(UPDATE_INFO)) {
viewHolder.header_info.text = infoText
return
}
super.bind(viewHolder, position, payloads)
}
override fun bind(viewHolder: GroupieViewHolder, position: Int) {
viewHolder.header_title.text = title
viewHolder.header_info.text = infoText
val listener: OnClickListener? = if (onClickListener != null) OnClickListener { onClickListener.invoke() } else null
viewHolder.root.setOnClickListener(listener)
}
}

View file

@ -15,8 +15,7 @@
android:minHeight="150dp" android:minHeight="150dp"
android:orientation="vertical" android:orientation="vertical"
android:padding="8dp" android:padding="8dp"
android:visibility="gone" android:visibility="gone">
tools:visibility="visible">
<ImageButton <ImageButton
android:id="@+id/icon_preview" android:id="@+id/icon_preview"
@ -34,10 +33,10 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="8dp" android:layout_marginStart="8dp"
android:paddingTop="6dp"
android:paddingBottom="6dp"
android:gravity="center_vertical" android:gravity="center_vertical"
android:hint="@string/feed_group_dialog_name_input" android:hint="@string/feed_group_dialog_name_input"
android:paddingTop="6dp"
android:paddingBottom="6dp"
app:errorEnabled="true" app:errorEnabled="true"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/icon_preview" app:layout_constraintStart_toEndOf="@+id/icon_preview"
@ -93,19 +92,56 @@
android:paddingBottom="16dp" android:paddingBottom="16dp"
android:visibility="gone" android:visibility="gone"
tools:layoutManager="androidx.recyclerview.widget.GridLayoutManager" tools:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
tools:listItem="@layout/item_icon_picker" tools:listitem="@layout/picker_icon_item"
tools:spanCount="7" /> tools:spanCount="7" />
<androidx.recyclerview.widget.RecyclerView <LinearLayout
android:id="@+id/subscriptions_selector" android:id="@+id/subscriptions_selector"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
android:layout_weight="1" android:layout_weight="1"
android:orientation="vertical"
android:visibility="gone" android:visibility="gone"
tools:itemCount="200" tools:visibility="visible">
tools:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
tools:listItem="@layout/item_icon_picker" <LinearLayout
tools:spanCount="4" /> android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingLeft="16dp"
android:paddingTop="12dp"
android:paddingRight="16dp"
android:paddingBottom="12dp">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="start|center_vertical"
android:text="@string/tab_subscriptions"
android:textColor="?android:attr/textColorPrimary"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/subscriptions_selector_header_info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="start|center_vertical"
android:textColor="?android:attr/textColorPrimary"
android:textSize="12sp"
tools:text="1 selected" />
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/subscriptions_selector_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:itemCount="200"
tools:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
tools:listitem="@layout/picker_subscription_item"
tools:spanCount="4" />
</LinearLayout>
<View <View
android:id="@+id/separator" android:id="@+id/separator"

View file

@ -606,7 +606,7 @@
<string name="feed_notification_loading">Loading feed…</string> <string name="feed_notification_loading">Loading feed…</string>
<string name="feed_processing_message">Processing feed…</string> <string name="feed_processing_message">Processing feed…</string>
<string name="feed_group_dialog_select_subscriptions">Select subscriptions</string> <string name="feed_group_dialog_select_subscriptions">Select subscriptions</string>
<string name="feed_group_dialog_selection_count">%d selected</string> <string name="feed_group_dialog_selection_count">Selected: %d</string>
<string name="feed_group_dialog_empty_selection">No subscription selected</string> <string name="feed_group_dialog_empty_selection">No subscription selected</string>
<string name="feed_group_dialog_empty_name">Empty group name</string> <string name="feed_group_dialog_empty_name">Empty group name</string>
<string name="feed_group_dialog_name_input">Name</string> <string name="feed_group_dialog_name_input">Name</string>