Commit 56f4a36a authored by Max Lv's avatar Max Lv

Fix an issue when Accessibility enabled

Actually, it's not necessary to move our fragment upward, which contains
a list view.
parent 6db818cc
...@@ -9,6 +9,7 @@ import android.support.annotation.AttrRes ...@@ -9,6 +9,7 @@ import android.support.annotation.AttrRes
import android.support.v4.app.Fragment import android.support.v4.app.Fragment
import android.support.v4.app.FragmentManager import android.support.v4.app.FragmentManager
import android.support.v7.util.SortedList import android.support.v7.util.SortedList
import android.view.accessibility.AccessibilityManager
import android.util.TypedValue import android.util.TypedValue
import com.github.shadowsocks.App.Companion.app import com.github.shadowsocks.App.Companion.app
import com.github.shadowsocks.JniHelper import com.github.shadowsocks.JniHelper
...@@ -21,6 +22,11 @@ private val fieldChildFragmentManager by lazy { ...@@ -21,6 +22,11 @@ private val fieldChildFragmentManager by lazy {
field field
} }
fun isAccessibilityEnabled(context: Context): Boolean {
val am = context.getSystemService(Context.ACCESSIBILITY_SERVICE) as AccessibilityManager
return am.isEnabled()
}
fun String.isNumericAddress() = JniHelper.parseNumericAddress(this) != null fun String.isNumericAddress() = JniHelper.parseNumericAddress(this) != null
fun String.parseNumericAddress(): InetAddress? { fun String.parseNumericAddress(): InetAddress? {
val addr = JniHelper.parseNumericAddress(this) val addr = JniHelper.parseNumericAddress(this)
......
...@@ -32,6 +32,8 @@ import android.support.v4.view.ViewCompat ...@@ -32,6 +32,8 @@ import android.support.v4.view.ViewCompat
import android.util.AttributeSet import android.util.AttributeSet
import android.view.View import android.view.View
import com.github.shadowsocks.utils.isAccessibilityEnabled
/** /**
* Full credits go to: https://stackoverflow.com/a/35904421/2245107 * Full credits go to: https://stackoverflow.com/a/35904421/2245107
*/ */
...@@ -40,7 +42,7 @@ class MoveUpwardBehavior : CoordinatorLayout.Behavior<View> { ...@@ -40,7 +42,7 @@ class MoveUpwardBehavior : CoordinatorLayout.Behavior<View> {
constructor(context: Context, attrs: AttributeSet) : super(context, attrs) constructor(context: Context, attrs: AttributeSet) : super(context, attrs)
override fun layoutDependsOn(parent: CoordinatorLayout, child: View, dependency: View): Boolean = override fun layoutDependsOn(parent: CoordinatorLayout, child: View, dependency: View): Boolean =
dependency is Snackbar.SnackbarLayout dependency is Snackbar.SnackbarLayout
override fun onDependentViewChanged(parent: CoordinatorLayout, child: View, dependency: View): Boolean { override fun onDependentViewChanged(parent: CoordinatorLayout, child: View, dependency: View): Boolean {
child.translationY = Math.min(0f, dependency.translationY - dependency.height) child.translationY = Math.min(0f, dependency.translationY - dependency.height)
...@@ -51,21 +53,25 @@ class MoveUpwardBehavior : CoordinatorLayout.Behavior<View> { ...@@ -51,21 +53,25 @@ class MoveUpwardBehavior : CoordinatorLayout.Behavior<View> {
* Based on BaseTransientBottomBar.animateViewOut (support lib 27.0.2). * Based on BaseTransientBottomBar.animateViewOut (support lib 27.0.2).
*/ */
override fun onDependentViewRemoved(parent: CoordinatorLayout, child: View, dependency: View) { override fun onDependentViewRemoved(parent: CoordinatorLayout, child: View, dependency: View) {
val animator = ValueAnimator() if (!isAccessibilityEnabled(parent.getContext())) {
val start = child.translationY val animator = ValueAnimator()
animator.setFloatValues(start, 0f) val start = child.translationY
animator.interpolator = SnackbarAnimation.FAST_OUT_SLOW_IN_INTERPOLATOR animator.setFloatValues(start, 0f)
animator.duration = SnackbarAnimation.ANIMATION_DURATION animator.interpolator = SnackbarAnimation.FAST_OUT_SLOW_IN_INTERPOLATOR
animator.addUpdateListener(object : ValueAnimator.AnimatorUpdateListener { animator.duration = SnackbarAnimation.ANIMATION_DURATION
private var previousValue = start animator.addUpdateListener(object : ValueAnimator.AnimatorUpdateListener {
private var previousValue = start
override fun onAnimationUpdate(animator: ValueAnimator) { override fun onAnimationUpdate(animator: ValueAnimator) {
val currentValue = animator.animatedValue as Float val currentValue = animator.animatedValue as Float
if (Build.VERSION.SDK_INT > 19) child.translationY = currentValue if (Build.VERSION.SDK_INT > 19) child.translationY = currentValue
else ViewCompat.offsetTopAndBottom(child, (currentValue - previousValue).toInt()) else ViewCompat.offsetTopAndBottom(child, (currentValue - previousValue).toInt())
previousValue = currentValue previousValue = currentValue
} }
}) })
animator.start() animator.start()
} else {
child.translationY = 0f
}
} }
} }
...@@ -13,8 +13,7 @@ ...@@ -13,8 +13,7 @@
android:id="@+id/fragment_holder" android:id="@+id/fragment_holder"
android:background="?android:attr/windowBackground" 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" />
app:layout_behavior="com.github.shadowsocks.widget.BottomMarginBehavior"/>
<LinearLayout <LinearLayout
android:id="@+id/stat" android:id="@+id/stat"
......
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