diff --git a/src/main/res/values/colors.xml b/src/main/res/values/colors.xml index 311f4003..333f4545 100644 --- a/src/main/res/values/colors.xml +++ b/src/main/res/values/colors.xml @@ -2,7 +2,7 @@ - #388E3C + #64DD17 #90A4AE #607D8B #455A64 diff --git a/src/main/scala/com/github/shadowsocks/AppManager.scala b/src/main/scala/com/github/shadowsocks/AppManager.scala index 05697a64..2e977e00 100644 --- a/src/main/scala/com/github/shadowsocks/AppManager.scala +++ b/src/main/scala/com/github/shadowsocks/AppManager.scala @@ -54,6 +54,7 @@ import android.view._ import android.widget.AbsListView.OnScrollListener import android.widget.CompoundButton.OnCheckedChangeListener import android.widget._ +import android.Manifest.permission import com.github.shadowsocks.utils.{Key, Utils} import scala.collection.JavaConversions._ @@ -66,8 +67,10 @@ object AppManager { var cachedApps: Array[ProxiedApp] = _ private def getApps(pm: PackageManager) = { - if (cachedApps == null) cachedApps = pm.getInstalledApplications(0) - .map(a => new ProxiedApp(pm.getApplicationLabel(a).toString, a.packageName, a.loadIcon(pm))).toArray + if (cachedApps == null) cachedApps = pm.getInstalledPackages(PackageManager.GET_PERMISSIONS) + .filter(p => p.requestedPermissions != null && p.requestedPermissions.contains(permission.INTERNET)) + .map(p => new ProxiedApp(pm.getApplicationLabel(p.applicationInfo).toString, p.packageName, + p.applicationInfo.loadIcon(pm))).toArray cachedApps } } diff --git a/src/main/scala/com/github/shadowsocks/AppManagerReceiver.scala b/src/main/scala/com/github/shadowsocks/AppManagerReceiver.scala index f754f11a..f3170f21 100644 --- a/src/main/scala/com/github/shadowsocks/AppManagerReceiver.scala +++ b/src/main/scala/com/github/shadowsocks/AppManagerReceiver.scala @@ -7,5 +7,5 @@ import android.content.{Intent, Context, BroadcastReceiver} */ class AppManagerReceiver extends BroadcastReceiver { override def onReceive(context: Context, intent: Intent) = if (intent.getAction != Intent.ACTION_PACKAGE_REMOVED || - !intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)) AppManager.cachedApps = null + !intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)) AppManager.synchronized(AppManager.cachedApps = null) } diff --git a/src/main/scala/com/github/shadowsocks/Shadowsocks.scala b/src/main/scala/com/github/shadowsocks/Shadowsocks.scala index a301deed..3e3d0a60 100644 --- a/src/main/scala/com/github/shadowsocks/Shadowsocks.scala +++ b/src/main/scala/com/github/shadowsocks/Shadowsocks.scala @@ -246,7 +246,7 @@ class Shadowsocks getFragmentManager.findFragmentById(android.R.id.content).asInstanceOf[ShadowsocksSettings] private var adView: AdView = _ private lazy val greyTint = ContextCompat.getColorStateList(this, R.color.material_blue_grey_700) - private lazy val greenTint = ContextCompat.getColorStateList(this, R.color.material_green_700) + private lazy val greenTint = ContextCompat.getColorStateList(this, R.color.material_green_a700) var handler = new Handler() @@ -450,26 +450,28 @@ class Shadowsocks bgService.getState match { case State.CONNECTING => fab.setBackgroundTintList(greyTint) - changeSwitch(checked = true) + serviceStarted = false + fab.setImageResource(R.drawable.ic_cloud_queue) setPreferenceEnabled(false) fabProgressCircle.show() case State.CONNECTED => fab.setBackgroundTintList(greenTint) - changeSwitch(checked = true) + serviceStarted = true + fab.setImageResource(R.drawable.ic_cloud) setPreferenceEnabled(false) - fabProgressCircle.show() - handler.postDelayed(() => fabProgressCircle.hide(), 1000) + fabProgressCircle.postDelayed(fabProgressCircle.hide, 100) case State.STOPPING => fab.setBackgroundTintList(greyTint) - changeSwitch(checked = false) + serviceStarted = false + fab.setImageResource(R.drawable.ic_cloud_queue) setPreferenceEnabled(false) fabProgressCircle.show() case _ => fab.setBackgroundTintList(greyTint) - changeSwitch(checked = false) + serviceStarted = false + fab.setImageResource(R.drawable.ic_cloud_off) setPreferenceEnabled(true) - fabProgressCircle.show() - handler.postDelayed(() => fabProgressCircle.hide(), 1000) + fabProgressCircle.postDelayed(fabProgressCircle.hide, 100) } state = bgService.getState }