Add close icon to tabs in Tabs account preferences page (#1588)
* Add close icon to tabs in Tabs account preferences page * Improve code according to code review
This commit is contained in:
parent
bac3003182
commit
54b3d1f8cd
@ -1289,7 +1289,7 @@ public final class ComposeActivity
|
|||||||
private void enableButton(ImageButton button, boolean clickable, boolean colorActive) {
|
private void enableButton(ImageButton button, boolean clickable, boolean colorActive) {
|
||||||
button.setEnabled(clickable);
|
button.setEnabled(clickable);
|
||||||
ThemeUtils.setDrawableTint(this, button.getDrawable(),
|
ThemeUtils.setDrawableTint(this, button.getDrawable(),
|
||||||
colorActive ? android.R.attr.textColorTertiary : R.attr.compose_media_button_disabled_tint);
|
colorActive ? android.R.attr.textColorTertiary : R.attr.image_button_disabled_tint);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void enablePollButton(boolean enable) {
|
private void enablePollButton(boolean enable) {
|
||||||
@ -1298,7 +1298,7 @@ public final class ComposeActivity
|
|||||||
if(enable) {
|
if(enable) {
|
||||||
textColor = ThemeUtils.getColor(this, android.R.attr.textColorTertiary);
|
textColor = ThemeUtils.getColor(this, android.R.attr.textColorTertiary);
|
||||||
} else {
|
} else {
|
||||||
textColor = ThemeUtils.getColor(this, R.attr.compose_media_button_disabled_tint);
|
textColor = ThemeUtils.getColor(this, R.attr.image_button_disabled_tint);
|
||||||
}
|
}
|
||||||
actionAddPoll.setTextColor(textColor);
|
actionAddPoll.setTextColor(textColor);
|
||||||
actionAddPoll.getCompoundDrawablesRelative()[0].setColorFilter(textColor, PorterDuff.Mode.SRC_IN);
|
actionAddPoll.getCompoundDrawablesRelative()[0].setColorFilter(textColor, PorterDuff.Mode.SRC_IN);
|
||||||
|
@ -41,6 +41,7 @@ import io.reactivex.android.schedulers.AndroidSchedulers
|
|||||||
import io.reactivex.schedulers.Schedulers
|
import io.reactivex.schedulers.Schedulers
|
||||||
import kotlinx.android.synthetic.main.activity_tab_preference.*
|
import kotlinx.android.synthetic.main.activity_tab_preference.*
|
||||||
import kotlinx.android.synthetic.main.toolbar_basic.*
|
import kotlinx.android.synthetic.main.toolbar_basic.*
|
||||||
|
import kotlinx.android.synthetic.main.item_tab_preference.view.removeButton
|
||||||
import java.util.regex.Pattern
|
import java.util.regex.Pattern
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@ -76,7 +77,7 @@ class TabPreferenceActivity : BaseActivity(), Injectable, ItemInteractionListene
|
|||||||
}
|
}
|
||||||
|
|
||||||
currentTabs = (accountManager.activeAccount?.tabPreferences ?: emptyList()).toMutableList()
|
currentTabs = (accountManager.activeAccount?.tabPreferences ?: emptyList()).toMutableList()
|
||||||
currentTabsAdapter = TabAdapter(currentTabs, false, this)
|
currentTabsAdapter = TabAdapter(currentTabs, false, this, currentTabs.size <= MIN_TAB_COUNT)
|
||||||
currentTabsRecyclerView.adapter = currentTabsAdapter
|
currentTabsRecyclerView.adapter = currentTabsAdapter
|
||||||
currentTabsRecyclerView.layoutManager = LinearLayoutManager(this)
|
currentTabsRecyclerView.layoutManager = LinearLayoutManager(this)
|
||||||
currentTabsRecyclerView.addItemDecoration(DividerItemDecoration(this, LinearLayoutManager.VERTICAL))
|
currentTabsRecyclerView.addItemDecoration(DividerItemDecoration(this, LinearLayoutManager.VERTICAL))
|
||||||
@ -109,10 +110,7 @@ class TabPreferenceActivity : BaseActivity(), Injectable, ItemInteractionListene
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
|
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
|
||||||
currentTabs.removeAt(viewHolder.adapterPosition)
|
onTabRemoved(viewHolder.adapterPosition)
|
||||||
currentTabsAdapter.notifyItemRemoved(viewHolder.adapterPosition)
|
|
||||||
updateAvailableTabs()
|
|
||||||
saveTabs()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onSelectedChanged(viewHolder: RecyclerView.ViewHolder?, actionState: Int) {
|
override fun onSelectedChanged(viewHolder: RecyclerView.ViewHolder?, actionState: Int) {
|
||||||
@ -168,6 +166,13 @@ class TabPreferenceActivity : BaseActivity(), Injectable, ItemInteractionListene
|
|||||||
saveTabs()
|
saveTabs()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onTabRemoved(position: Int) {
|
||||||
|
currentTabs.removeAt(position)
|
||||||
|
currentTabsAdapter.notifyItemRemoved(position)
|
||||||
|
updateAvailableTabs()
|
||||||
|
saveTabs()
|
||||||
|
}
|
||||||
|
|
||||||
override fun onActionChipClicked(tab: TabData) {
|
override fun onActionChipClicked(tab: TabData) {
|
||||||
showEditHashtagDialog(tab)
|
showEditHashtagDialog(tab)
|
||||||
}
|
}
|
||||||
@ -273,7 +278,7 @@ class TabPreferenceActivity : BaseActivity(), Injectable, ItemInteractionListene
|
|||||||
addTabAdapter.updateData(addableTabs)
|
addTabAdapter.updateData(addableTabs)
|
||||||
|
|
||||||
maxTabsInfo.visible(addableTabs.size == 0 || currentTabs.size >= MAX_TAB_COUNT)
|
maxTabsInfo.visible(addableTabs.size == 0 || currentTabs.size >= MAX_TAB_COUNT)
|
||||||
|
currentTabsAdapter.setRemoveButtonVisible(currentTabs.size > MIN_TAB_COUNT);
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStartDelete(viewHolder: RecyclerView.ViewHolder) {
|
override fun onStartDelete(viewHolder: RecyclerView.ViewHolder) {
|
||||||
|
@ -32,14 +32,16 @@ import kotlinx.android.synthetic.main.item_tab_preference.view.*
|
|||||||
|
|
||||||
interface ItemInteractionListener {
|
interface ItemInteractionListener {
|
||||||
fun onTabAdded(tab: TabData)
|
fun onTabAdded(tab: TabData)
|
||||||
|
fun onTabRemoved(position: Int)
|
||||||
fun onStartDelete(viewHolder: RecyclerView.ViewHolder)
|
fun onStartDelete(viewHolder: RecyclerView.ViewHolder)
|
||||||
fun onStartDrag(viewHolder: RecyclerView.ViewHolder)
|
fun onStartDrag(viewHolder: RecyclerView.ViewHolder)
|
||||||
fun onActionChipClicked(tab: TabData)
|
fun onActionChipClicked(tab: TabData)
|
||||||
}
|
}
|
||||||
|
|
||||||
class TabAdapter(private var data: List<TabData>,
|
class TabAdapter(private var data: List<TabData>,
|
||||||
private val small: Boolean = false,
|
private val small: Boolean,
|
||||||
private val listener: ItemInteractionListener? = null) : RecyclerView.Adapter<TabAdapter.ViewHolder>() {
|
private val listener: ItemInteractionListener,
|
||||||
|
private var removeButtonEnabled: Boolean = false) : RecyclerView.Adapter<TabAdapter.ViewHolder>() {
|
||||||
|
|
||||||
fun updateData(newData: List<TabData>) {
|
fun updateData(newData: List<TabData>) {
|
||||||
this.data = newData
|
this.data = newData
|
||||||
@ -67,17 +69,28 @@ class TabAdapter(private var data: List<TabData>,
|
|||||||
holder.itemView.textView.setCompoundDrawablesRelativeWithIntrinsicBounds(iconDrawable, null, null, null)
|
holder.itemView.textView.setCompoundDrawablesRelativeWithIntrinsicBounds(iconDrawable, null, null, null)
|
||||||
if (small) {
|
if (small) {
|
||||||
holder.itemView.textView.setOnClickListener {
|
holder.itemView.textView.setOnClickListener {
|
||||||
listener?.onTabAdded(data[position])
|
listener.onTabAdded(data[position])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
holder.itemView.imageView?.setOnTouchListener { _, event ->
|
holder.itemView.imageView?.setOnTouchListener { _, event ->
|
||||||
if (event.action == MotionEvent.ACTION_DOWN) {
|
if (event.action == MotionEvent.ACTION_DOWN) {
|
||||||
listener?.onStartDrag(holder)
|
listener.onStartDrag(holder)
|
||||||
true
|
true
|
||||||
} else {
|
} else {
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
holder.itemView.removeButton?.setOnClickListener {
|
||||||
|
listener.onTabRemoved(holder.adapterPosition)
|
||||||
|
}
|
||||||
|
if (holder.itemView.removeButton != null) {
|
||||||
|
holder.itemView.removeButton.isEnabled = removeButtonEnabled
|
||||||
|
ThemeUtils.setDrawableTint(
|
||||||
|
holder.itemView.context,
|
||||||
|
holder.itemView.removeButton.drawable,
|
||||||
|
(if (removeButtonEnabled) android.R.attr.textColorTertiary else R.attr.image_button_disabled_tint)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
if (!small) {
|
if (!small) {
|
||||||
|
|
||||||
@ -89,7 +102,7 @@ class TabAdapter(private var data: List<TabData>,
|
|||||||
|
|
||||||
holder.itemView.actionChip.chipIcon = context.getDrawable(R.drawable.ic_edit_chip)
|
holder.itemView.actionChip.chipIcon = context.getDrawable(R.drawable.ic_edit_chip)
|
||||||
holder.itemView.actionChip.setOnClickListener {
|
holder.itemView.actionChip.setOnClickListener {
|
||||||
listener?.onActionChipClicked(data[position])
|
listener.onActionChipClicked(data[position])
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@ -102,5 +115,12 @@ class TabAdapter(private var data: List<TabData>,
|
|||||||
return data.size
|
return data.size
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun setRemoveButtonVisible(enabled: Boolean) {
|
||||||
|
if (removeButtonEnabled != enabled) {
|
||||||
|
removeButtonEnabled = enabled
|
||||||
|
notifyDataSetChanged()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
|
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
android:background="?android:colorBackground"
|
android:background="?android:colorBackground"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
android:paddingStart="16dp"
|
android:paddingStart="16dp"
|
||||||
android:paddingTop="16dp"
|
android:paddingTop="8dp"
|
||||||
android:paddingEnd="16dp">
|
android:paddingEnd="16dp">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
@ -15,6 +15,8 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="end"
|
android:layout_gravity="end"
|
||||||
|
android:paddingTop="8dp"
|
||||||
|
android:paddingBottom="8dp"
|
||||||
android:src="@drawable/ic_drag_indicator_24dp"
|
android:src="@drawable/ic_drag_indicator_24dp"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
@ -24,6 +26,8 @@
|
|||||||
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="8dp"
|
||||||
|
android:paddingBottom="8dp"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:drawablePadding="12dp"
|
android:drawablePadding="12dp"
|
||||||
android:textColor="?android:attr/textColorSecondary"
|
android:textColor="?android:attr/textColorSecondary"
|
||||||
@ -32,10 +36,23 @@
|
|||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toEndOf="@id/imageView"
|
app:layout_constraintStart_toEndOf="@id/imageView"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
app:layout_goneMarginBottom="16dp"
|
app:layout_goneMarginBottom="8dp"
|
||||||
tools:drawableStart="@drawable/ic_home_24dp"
|
tools:drawableStart="@drawable/ic_home_24dp"
|
||||||
tools:text="Home" />
|
tools:text="Home" />
|
||||||
|
|
||||||
|
<ImageButton
|
||||||
|
android:id="@+id/removeButton"
|
||||||
|
style="?attr/image_button_style"
|
||||||
|
android:layout_width="32dp"
|
||||||
|
android:layout_height="32dp"
|
||||||
|
android:layout_gravity="end"
|
||||||
|
android:layout_marginTop="4dp"
|
||||||
|
android:background="?attr/selectableItemBackgroundBorderless"
|
||||||
|
android:contentDescription="@string/action_delete"
|
||||||
|
android:src="@drawable/ic_clear_24dp"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
<com.google.android.material.chip.ChipGroup
|
<com.google.android.material.chip.ChipGroup
|
||||||
android:id="@+id/chipGroup"
|
android:id="@+id/chipGroup"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@ -56,4 +73,3 @@
|
|||||||
</com.google.android.material.chip.ChipGroup>
|
</com.google.android.material.chip.ChipGroup>
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@
|
|||||||
<item name="account_toolbar_icon_tint_collapsed">@color/account_toolbar_icon_collapsed_dark</item>
|
<item name="account_toolbar_icon_tint_collapsed">@color/account_toolbar_icon_collapsed_dark</item>
|
||||||
|
|
||||||
<item name="compose_close_button_tint">@color/toolbar_icon_dark</item>
|
<item name="compose_close_button_tint">@color/toolbar_icon_dark</item>
|
||||||
<item name="compose_media_button_disabled_tint">@color/compose_media_button_disabled_dark</item>
|
<item name="image_button_disabled_tint">@color/image_button_disabled_dark</item>
|
||||||
<item name="compose_content_warning_bar_background">@drawable/border_background_dark</item>
|
<item name="compose_content_warning_bar_background">@drawable/border_background_dark</item>
|
||||||
<item name="compose_reply_content_background">@color/compose_reply_content_background_dark</item>
|
<item name="compose_reply_content_background">@color/compose_reply_content_background_dark</item>
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
<attr name="account_toolbar_icon_tint_uncollapsed" format="reference|color" />
|
<attr name="account_toolbar_icon_tint_uncollapsed" format="reference|color" />
|
||||||
<attr name="account_toolbar_icon_tint_collapsed" format="reference|color" />
|
<attr name="account_toolbar_icon_tint_collapsed" format="reference|color" />
|
||||||
<attr name="compose_close_button_tint" format="reference|color" />
|
<attr name="compose_close_button_tint" format="reference|color" />
|
||||||
<attr name="compose_media_button_disabled_tint" format="reference|color" />
|
<attr name="image_button_disabled_tint" format="reference|color" />
|
||||||
<attr name="compose_content_warning_bar_background" format="reference" />
|
<attr name="compose_content_warning_bar_background" format="reference" />
|
||||||
<attr name="compose_reply_content_background" format="reference|color" />
|
<attr name="compose_reply_content_background" format="reference|color" />
|
||||||
<attr name="report_status_background_color" format="reference|color" />
|
<attr name="report_status_background_color" format="reference|color" />
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
<color name="status_divider_dark">#2f3441</color>
|
<color name="status_divider_dark">#2f3441</color>
|
||||||
<color name="tab_page_margin_dark">#1a1c23</color>
|
<color name="tab_page_margin_dark">#1a1c23</color>
|
||||||
<color name="account_toolbar_icon_collapsed_dark">#ffffff</color>
|
<color name="account_toolbar_icon_collapsed_dark">#ffffff</color>
|
||||||
<color name="compose_media_button_disabled_dark">#586173</color>
|
<color name="image_button_disabled_dark">#586173</color>
|
||||||
<color name="custom_tab_toolbar_dark">#313543</color>
|
<color name="custom_tab_toolbar_dark">#313543</color>
|
||||||
<color name="compose_reply_content_background_dark">#373c4b</color>
|
<color name="compose_reply_content_background_dark">#373c4b</color>
|
||||||
<color name="autocomplete_divider_dark">#424a5b</color>
|
<color name="autocomplete_divider_dark">#424a5b</color>
|
||||||
@ -54,7 +54,7 @@
|
|||||||
<color name="status_divider_light">#cfcfcf</color>
|
<color name="status_divider_light">#cfcfcf</color>
|
||||||
<color name="tab_page_margin_light">#cfcfcf</color>
|
<color name="tab_page_margin_light">#cfcfcf</color>
|
||||||
<color name="account_toolbar_icon_collapsed_light">#DE000000</color>
|
<color name="account_toolbar_icon_collapsed_light">#DE000000</color>
|
||||||
<color name="compose_media_button_disabled_light">#a3a5ab</color>
|
<color name="image_button_disabled_light">#a3a5ab</color>
|
||||||
<color name="report_status_background_light">#EFEFEF</color>
|
<color name="report_status_background_light">#EFEFEF</color>
|
||||||
<color name="custom_tab_toolbar_light">#ffffff</color>
|
<color name="custom_tab_toolbar_light">#ffffff</color>
|
||||||
<color name="compose_reply_content_background_light">#e0e1e6</color>
|
<color name="compose_reply_content_background_light">#e0e1e6</color>
|
||||||
|
@ -105,7 +105,7 @@
|
|||||||
</item>
|
</item>
|
||||||
|
|
||||||
<item name="compose_close_button_tint">@color/toolbar_icon_light</item>
|
<item name="compose_close_button_tint">@color/toolbar_icon_light</item>
|
||||||
<item name="compose_media_button_disabled_tint">@color/compose_media_button_disabled_light
|
<item name="image_button_disabled_tint">@color/image_button_disabled_light
|
||||||
</item>
|
</item>
|
||||||
<item name="compose_content_warning_bar_background">@drawable/border_background_light</item>
|
<item name="compose_content_warning_bar_background">@drawable/border_background_light</item>
|
||||||
<item name="compose_reply_content_background">
|
<item name="compose_reply_content_background">
|
||||||
|
Loading…
Reference in New Issue
Block a user