From da3690d18c06aaba05fdef7fa75ca3f3e7dc69a1 Mon Sep 17 00:00:00 2001 From: Mygod Date: Mon, 23 Nov 2015 21:21:47 +0800 Subject: [PATCH] Fix #441 --- src/main/res/layout/layout_profiles.xml | 13 +++++--- .../shadowsocks/ProfileManagerActivity.scala | 2 +- .../com/github/shadowsocks/Shadowsocks.scala | 12 +++----- .../shadowsocks/ShadowsocksSettings.scala | 4 +-- .../widget/AutoPaddingBehavior.scala | 30 +++++++++++++++++++ 5 files changed, 46 insertions(+), 15 deletions(-) create mode 100644 src/main/scala/com/github/shadowsocks/widget/AutoPaddingBehavior.scala diff --git a/src/main/res/layout/layout_profiles.xml b/src/main/res/layout/layout_profiles.xml index a98f4674bd..500b67f965 100644 --- a/src/main/res/layout/layout_profiles.xml +++ b/src/main/res/layout/layout_profiles.xml @@ -1,11 +1,16 @@ - + + + diff --git a/src/main/scala/com/github/shadowsocks/ProfileManagerActivity.scala b/src/main/scala/com/github/shadowsocks/ProfileManagerActivity.scala index 1c07c50466..4bb55fd1eb 100644 --- a/src/main/scala/com/github/shadowsocks/ProfileManagerActivity.scala +++ b/src/main/scala/com/github/shadowsocks/ProfileManagerActivity.scala @@ -153,7 +153,7 @@ class ProfileManagerActivity extends AppCompatActivity with OnMenuItemClickListe profilesList.setLayoutManager(new LinearLayoutManager(this)) profilesList.setItemAnimator(new DefaultItemAnimator) profilesList.setAdapter(profilesAdapter) - removedSnackbar = Snackbar.make(findViewById(android.R.id.content), R.string.removed, Snackbar.LENGTH_LONG) + removedSnackbar = Snackbar.make(profilesList, R.string.removed, Snackbar.LENGTH_LONG) .setAction(R.string.undo, ((v: View) => profilesAdapter.undoRemoves): OnClickListener) removedSnackbar.getView.addOnAttachStateChangeListener(new OnAttachStateChangeListener { def onViewDetachedFromWindow(v: View) = profilesAdapter.commitRemoves diff --git a/src/main/scala/com/github/shadowsocks/Shadowsocks.scala b/src/main/scala/com/github/shadowsocks/Shadowsocks.scala index 8be49d5516..6f27187d5c 100644 --- a/src/main/scala/com/github/shadowsocks/Shadowsocks.scala +++ b/src/main/scala/com/github/shadowsocks/Shadowsocks.scala @@ -293,12 +293,6 @@ class Shadowsocks } } - def isTextEmpty(s: String, msg: String): Boolean = { - if (s != null && s.length > 0) return false - Snackbar.make(getWindow.getDecorView.findViewById(android.R.id.content), msg, Snackbar.LENGTH_LONG).show - true - } - def cancelStart() { clearDialog() changeSwitch(checked = false) @@ -554,7 +548,9 @@ class Shadowsocks def checkText(key: String): Boolean = { val text = ShadowsocksApplication.settings.getString(key, "") - !isTextEmpty(text, getString(R.string.proxy_empty)) + if (text != null && text.length > 0) return true + Snackbar.make(findViewById(android.R.id.content), getString(R.string.proxy_empty), Snackbar.LENGTH_LONG).show + false } /** Called when connect button is clicked. */ @@ -598,7 +594,7 @@ class Shadowsocks handler.postDelayed(() => fabProgressCircle.hide(), 1000) fab.setEnabled(true) changeSwitch(checked = false) - if (m != null) Snackbar.make(getWindow.getDecorView.findViewById(android.R.id.content), + if (m != null) Snackbar.make(findViewById(android.R.id.content), getString(R.string.vpn_error).formatLocal(Locale.ENGLISH, m), Snackbar.LENGTH_LONG).show setPreferenceEnabled(enabled = true) case State.STOPPING => diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala index fba18268d1..f6e25db2bd 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala @@ -5,9 +5,9 @@ import java.util.Locale import android.content.{DialogInterface, Intent} import android.net.Uri import android.os.{Build, Bundle} -import android.preference.{SwitchPreference, Preference, PreferenceFragment} +import android.preference.{Preference, PreferenceFragment, SwitchPreference} import android.support.v7.app.AlertDialog -import android.webkit.{WebViewClient, WebView} +import android.webkit.{WebView, WebViewClient} import com.github.shadowsocks.utils.Key // TODO: Move related logic here diff --git a/src/main/scala/com/github/shadowsocks/widget/AutoPaddingBehavior.scala b/src/main/scala/com/github/shadowsocks/widget/AutoPaddingBehavior.scala new file mode 100644 index 0000000000..56211a78a2 --- /dev/null +++ b/src/main/scala/com/github/shadowsocks/widget/AutoPaddingBehavior.scala @@ -0,0 +1,30 @@ +package com.github.shadowsocks.widget + +import android.content.Context +import android.support.design.widget.CoordinatorLayout +import android.support.design.widget.CoordinatorLayout.Behavior +import android.support.design.widget.Snackbar.SnackbarLayout +import android.util.AttributeSet +import android.view.View + +/** + * @author Mygod + */ +class AutoPaddingBehavior(context: Context, attrs: AttributeSet) extends Behavior[View] { + override def layoutDependsOn(parent: CoordinatorLayout, child: View, dependency: View) = + dependency.isInstanceOf[SnackbarLayout] + + override def onDependentViewChanged(parent: CoordinatorLayout, child: View, dependency: View) = + dependency match { + case sl: SnackbarLayout => + child.setPadding(0, 0, 0, dependency.getHeight) + true + case _ => super.onDependentViewChanged(parent, child, dependency) + } + + override def onDependentViewRemoved(parent: CoordinatorLayout, child: View, dependency: View) = + dependency match { + case sl: SnackbarLayout => child.setPadding(0, 0, 0, 0) + case _ => super.onDependentViewRemoved(parent, child, dependency) + } +}