Commit 8b293dac authored by Mygod's avatar Mygod

Update snackbar style

parent 8ae3f5ce
......@@ -9,8 +9,8 @@ buildscript {
sdkVersion = 28
compileSdkVersion = 28
buildToolsVersion = '28.0.1'
androidxVersion = '1.0.0-beta01'
roomVersion = '2.0.0-beta01'
androidxVersion = '1.0.0-rc01'
roomVersion = '2.0.0-rc01'
workVersion = '1.0.0-alpha06'
preferencexVersion = '1.0.0-alpha2'
junitVersion = '4.12'
......
......@@ -38,10 +38,12 @@ import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.app.AppCompatDelegate
import androidx.browser.customtabs.CustomTabsIntent
import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.content.ContextCompat
import androidx.core.content.getSystemService
import androidx.core.net.toUri
import androidx.core.view.GravityCompat
import androidx.core.view.updateLayoutParams
import androidx.drawerlayout.widget.DrawerLayout
import androidx.preference.PreferenceDataStore
import com.crashlytics.android.Crashlytics
......@@ -61,6 +63,7 @@ import com.github.shadowsocks.widget.StatsBar
import com.google.android.material.navigation.NavigationView
import com.google.android.material.snackbar.Snackbar
import java.util.*
import kotlin.math.roundToInt
class MainActivity : AppCompatActivity(), ShadowsocksConnection.Interface, OnPreferenceDataStoreChangeListener,
NavigationView.OnNavigationItemSelectedListener {
......@@ -81,7 +84,11 @@ class MainActivity : AppCompatActivity(), ShadowsocksConnection.Interface, OnPre
private lateinit var navigation: NavigationView
val snackbar by lazy { findViewById<View>(R.id.snackbar) }
fun snackbar(text: CharSequence = "") = Snackbar.make(snackbar, text, Snackbar.LENGTH_LONG)
fun snackbar(text: CharSequence = "") = Snackbar.make(snackbar, text, Snackbar.LENGTH_LONG).apply {
view.updateLayoutParams<CoordinatorLayout.LayoutParams> {
bottomMargin += snackbar.measuredHeight - fab.top - fab.translationY.roundToInt()
}
}
private val customTabsIntent by lazy {
CustomTabsIntent.Builder()
......
......@@ -336,8 +336,7 @@ class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener {
profilesList.itemAnimator = animator
profilesList.adapter = profilesAdapter
instance = this
undoManager = UndoSnackbarManager((activity as MainActivity).snackbar,
profilesAdapter::undo, profilesAdapter::commit)
undoManager = UndoSnackbarManager(activity as MainActivity, profilesAdapter::undo, profilesAdapter::commit)
ItemTouchHelper(object : ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP or ItemTouchHelper.DOWN,
ItemTouchHelper.START or ItemTouchHelper.END) {
override fun getSwipeDirs(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder): Int =
......
......@@ -373,7 +373,7 @@ class CustomRulesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener,
list.layoutManager = LinearLayoutManager(activity, RecyclerView.VERTICAL, false)
list.itemAnimator = DefaultItemAnimator()
list.adapter = adapter
undoManager = UndoSnackbarManager(activity.snackbar, adapter::undo)
undoManager = UndoSnackbarManager(activity, adapter::undo)
ItemTouchHelper(object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.START or ItemTouchHelper.END) {
override fun getSwipeDirs(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder): Int =
if (isEnabled && selectedItems.isEmpty()) super.getSwipeDirs(recyclerView, viewHolder) else 0
......
......@@ -20,17 +20,18 @@
package com.github.shadowsocks.widget
import android.view.View
import com.github.shadowsocks.MainActivity
import com.github.shadowsocks.R
import com.google.android.material.snackbar.Snackbar
/**
* @param view The view to find a parent from.
* @param activity MainActivity.
* //@param view The view to find a parent from.
* @param undo Callback for undoing removals.
* @param commit Callback for committing removals.
* @tparam T Item type.
*/
class UndoSnackbarManager<in T>(private val view: View, private val undo: (List<Pair<Int, T>>) -> Unit,
class UndoSnackbarManager<in T>(private val activity: MainActivity, private val undo: (List<Pair<Int, T>>) -> Unit,
commit: ((List<Pair<Int, T>>) -> Unit)? = null) {
private val recycleBin = ArrayList<Pair<Int, T>>()
private val removedCallback = object : Snackbar.Callback() {
......@@ -49,15 +50,14 @@ class UndoSnackbarManager<in T>(private val view: View, private val undo: (List<
fun remove(items: Collection<Pair<Int, T>>) {
recycleBin.addAll(items)
val count = recycleBin.size
val snackbar = Snackbar
.make(view, view.resources.getQuantityString(R.plurals.removed, count, count), Snackbar.LENGTH_LONG)
.addCallback(removedCallback)
.setAction(R.string.undo) {
last = activity.snackbar(activity.resources.getQuantityString(R.plurals.removed, count, count)).apply {
addCallback(removedCallback)
setAction(R.string.undo) {
undo(recycleBin.reversed())
recycleBin.clear()
}
snackbar.show()
last = snackbar
show()
}
}
fun remove(vararg items: Pair<Int, T>) = remove(items.toList())
......
......@@ -8,14 +8,12 @@
android:layout_height="match_parent">
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/snackbar"
android:background="@color/color_primary_dark"
android:clipChildren="false"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/fragment_holder"
android:background="?android:attr/windowBackground"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
......@@ -24,6 +22,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:elevation="6dp"
app:layout_dodgeInsetEdges="top"
app:layout_anchor="@id/stats"
app:backgroundTint="@color/background_service"
app:fabSize="normal"
......@@ -37,7 +36,6 @@
android:layout_gravity="bottom"
app:backgroundTint="@color/background_stat"
app:contentInsetStart="0dp"
app:layout_dodgeInsetEdges="bottom"
app:layout_scrollFlags="enterAlways|scroll"
app:hideOnScroll="true">
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment