Commit 8b293dac authored by Mygod's avatar Mygod

Update snackbar style

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