diff --git a/src/main/scala/com/github/shadowsocks/Shadowsocks.scala b/src/main/scala/com/github/shadowsocks/Shadowsocks.scala index c91edd63..e9250b23 100644 --- a/src/main/scala/com/github/shadowsocks/Shadowsocks.scala +++ b/src/main/scala/com/github/shadowsocks/Shadowsocks.scala @@ -50,17 +50,17 @@ import android.content.res.AssetManager import android.graphics.{Bitmap, Color, Typeface} import android.net.{Uri, VpnService} import android.os._ -import android.preference._ +import android.preference.{PreferenceManager, SwitchPreference, Preference} import android.support.design.widget.{FloatingActionButton, Snackbar} import android.support.v7.app.AppCompatActivity import android.support.v7.widget.Toolbar import android.util.{DisplayMetrics, Log} -import android.view._ +import android.view.{View, ViewGroup, ViewParent} import android.webkit.{WebView, WebViewClient} import android.widget._ import com.github.shadowsocks.aidl.{IShadowsocksService, IShadowsocksServiceCallback} import com.github.shadowsocks.database._ -import com.github.shadowsocks.preferences.{PasswordEditTextPreference, ProfileEditTextPreference, SummaryEditTextPreference} +import com.github.shadowsocks.preferences.{DropDownPreference, PasswordEditTextPreference, ProfileEditTextPreference, SummaryEditTextPreference} import com.github.shadowsocks.utils._ import com.google.android.gms.ads.{AdRequest, AdSize, AdView} import com.google.android.gms.analytics.HitBuilders @@ -132,8 +132,8 @@ object Shadowsocks { val EXECUTABLES = Array(Executable.PDNSD, Executable.REDSOCKS, Executable.SS_TUNNEL, Executable.SS_LOCAL, Executable.TUN2SOCKS) // Helper functions - def updateListPreference(pref: Preference, value: String) { - pref.asInstanceOf[ListPreference].setValue(value) + def updateDropDownPreference(pref: Preference, value: String) { + pref.asInstanceOf[DropDownPreference].setValue(value) } def updatePasswordEditTextPreference(pref: Preference, value: String) { @@ -162,8 +162,8 @@ object Shadowsocks { case Key.remotePort => updateSummaryEditTextPreference(pref, profile.remotePort.toString) case Key.localPort => updateSummaryEditTextPreference(pref, profile.localPort.toString) case Key.sitekey => updatePasswordEditTextPreference(pref, profile.password) - case Key.encMethod => updateListPreference(pref, profile.method) - case Key.route => updateListPreference(pref, profile.route) + case Key.encMethod => updateDropDownPreference(pref, profile.method) + case Key.route => updateDropDownPreference(pref, profile.route) case Key.isGlobalProxy => updateSwitchPreference(pref, profile.global) case Key.isUdpDns => updateSwitchPreference(pref, profile.udpdns) case Key.isAuth => updateSwitchPreference(pref, profile.auth) diff --git a/src/main/scala/com/github/shadowsocks/preferences/DropDownPreference.scala b/src/main/scala/com/github/shadowsocks/preferences/DropDownPreference.scala index 5df9c1ae..142e384a 100644 --- a/src/main/scala/com/github/shadowsocks/preferences/DropDownPreference.scala +++ b/src/main/scala/com/github/shadowsocks/preferences/DropDownPreference.scala @@ -12,7 +12,6 @@ import android.view.{View, ViewGroup} import android.widget.AdapterView.OnItemSelectedListener import android.widget.{AdapterView, ArrayAdapter} import com.github.shadowsocks.R -import com.github.shadowsocks.utils.Utils /** * Based on: https://github.com/Mygod/mygod-lib-android/blob/683c41cb86d10e99ab0f457d41a218c6915fccc8/lib/src/main/scala/tk/mygod/preference/DropDownPreference.scala @@ -35,7 +34,8 @@ final class DropDownPreference(private val mContext: Context, attrs: AttributeSe override def onItemSelected(parent: AdapterView[_], view: View, position: Int, id: Long) = setValueIndex(position) }) setOnPreferenceClickListener((preference: Preference) => { - mSpinner.setDropDownVerticalOffset(Utils.dpToPx(getContext, 8 - 48 * mSelectedIndex).toInt) // TODO: scrolling? + // TODO: not working with scrolling + // mSpinner.setDropDownVerticalOffset(Utils.dpToPx(getContext, -48 * mSelectedIndex).toInt) mSpinner.performClick true }) @@ -169,8 +169,9 @@ final class DropDownPreference(private val mContext: Context, attrs: AttributeSe protected override def onBindView(@NonNull view: View) { super.onBindView(view) - if (view == mSpinner.getParent) return - if (mSpinner.getParent != null) mSpinner.getParent.asInstanceOf[ViewGroup].removeView(mSpinner) + val parent = mSpinner.getParent.asInstanceOf[ViewGroup] + if (view eq parent) return + if (parent != null) parent.removeView(mSpinner) view.asInstanceOf[ViewGroup].addView(mSpinner, 0) val lp = mSpinner.getLayoutParams lp.width = 0