Commit b4d3103b authored by Mygod's avatar Mygod

Merge branch 'n' and update to API level 24

Fix #671.
parents d3500881 5966c9d8
...@@ -2,7 +2,7 @@ import android.Keys._ ...@@ -2,7 +2,7 @@ import android.Keys._
android.Plugin.androidBuild android.Plugin.androidBuild
platformTarget in Android := "android-23" platformTarget in Android := "android-24"
name := "shadowsocks" name := "shadowsocks"
...@@ -35,9 +35,9 @@ libraryDependencies ++= Seq( ...@@ -35,9 +35,9 @@ libraryDependencies ++= Seq(
"com.google.android.gms" % "play-services-base" % "9.0.2", "com.google.android.gms" % "play-services-base" % "9.0.2",
"com.google.android.gms" % "play-services-ads" % "9.0.2", "com.google.android.gms" % "play-services-ads" % "9.0.2",
"com.google.android.gms" % "play-services-analytics" % "9.0.2", "com.google.android.gms" % "play-services-analytics" % "9.0.2",
"com.android.support" % "design" % "23.4.0", "com.android.support" % "design" % "24.0.0",
"com.android.support" % "gridlayout-v7" % "23.4.0", "com.android.support" % "gridlayout-v7" % "24.0.0",
"com.android.support" % "cardview-v7" % "23.4.0", "com.android.support" % "cardview-v7" % "24.0.0",
"com.github.jorgecastilloprz" % "fabprogresscircle" % "1.01", "com.github.jorgecastilloprz" % "fabprogresscircle" % "1.01",
"com.j256.ormlite" % "ormlite-core" % "4.48", "com.j256.ormlite" % "ormlite-core" % "4.48",
"com.j256.ormlite" % "ormlite-android" % "4.48", "com.j256.ormlite" % "ormlite-android" % "4.48",
......
...@@ -48,6 +48,9 @@ ...@@ -48,6 +48,9 @@
<category android:name="android.intent.category.LAUNCHER"/> <category android:name="android.intent.category.LAUNCHER"/>
<category android:name="android.intent.category.LEANBACK_LAUNCHER"/> <category android:name="android.intent.category.LEANBACK_LAUNCHER"/>
</intent-filter> </intent-filter>
<intent-filter>
<action android:name="android.service.quicksettings.action.QS_TILE" />
</intent-filter>
</activity> </activity>
<activity <activity
...@@ -125,6 +128,14 @@ ...@@ -125,6 +128,14 @@
</intent-filter> </intent-filter>
</service> </service>
<service android:name=".ShadowsocksTileService" android:label="@string/app_name"
android:icon="@drawable/ic_start_connected"
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
<intent-filter>
<action android:name="android.service.quicksettings.action.QS_TILE" />
</intent-filter>
</service>
<receiver android:name=".BootReceiver" android:enabled="false"> <receiver android:name=".BootReceiver" android:enabled="false">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/> <action android:name="android.intent.action.BOOT_COMPLETED"/>
......
...@@ -203,7 +203,7 @@ class AppManager extends AppCompatActivity with OnMenuItemClickListener { ...@@ -203,7 +203,7 @@ class AppManager extends AppCompatActivity with OnMenuItemClickListener {
this.setContentView(R.layout.layout_apps) this.setContentView(R.layout.layout_apps)
toolbar = findViewById(R.id.toolbar).asInstanceOf[Toolbar] toolbar = findViewById(R.id.toolbar).asInstanceOf[Toolbar]
toolbar.setTitle(R.string.proxied_apps) toolbar.setTitle(R.string.proxied_apps)
toolbar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha) toolbar.setNavigationIcon(R.drawable.abc_ic_ab_back_material)
toolbar.setNavigationOnClickListener((v: View) => { toolbar.setNavigationOnClickListener((v: View) => {
val intent = getParentActivityIntent val intent = getParentActivityIntent
if (intent == null) finish else navigateUpTo(intent) if (intent == null) finish else navigateUpTo(intent)
......
package com.github.shadowsocks
import android.content.Intent
import android.graphics.drawable.Icon
import android.service.quicksettings.{Tile, TileService}
import com.github.shadowsocks.aidl.IShadowsocksServiceCallback
import com.github.shadowsocks.utils.State
import com.github.shadowsocks.ShadowsocksApplication.app
/**
* @author Mygod
*/
final class ShadowsocksTileService extends TileService with ServiceBoundContext {
private lazy val iconIdle = Icon.createWithResource(this, R.drawable.ic_start_idle).setTint(0x80ffffff)
private lazy val iconBusy = Icon.createWithResource(this, R.drawable.ic_start_busy)
private lazy val iconConnected = Icon.createWithResource(this, R.drawable.ic_start_connected)
private lazy val callback = new IShadowsocksServiceCallback.Stub {
def trafficUpdated(txRate: Long, rxRate: Long, txTotal: Long, rxTotal: Long) = ()
def stateChanged(state: Int, msg: String) {
val tile = getQsTile
state match {
case State.STOPPED =>
tile.setIcon(iconIdle)
tile.setLabel(getString(R.string.app_name))
tile.setState(Tile.STATE_INACTIVE)
case State.CONNECTED =>
tile.setIcon(iconConnected)
tile.setLabel(app.currentProfile match {
case Some(profile) => profile.name
case None => getString(R.string.app_name)
})
tile.setState(Tile.STATE_ACTIVE)
case _ =>
tile.setIcon(iconBusy)
tile.setLabel(getString(R.string.app_name))
tile.setState(Tile.STATE_UNAVAILABLE)
}
tile.updateTile
}
}
override def onServiceConnected = callback.stateChanged(bgService.getState, null)
override def onStartListening {
super.onStartListening
attachService(callback)
}
override def onStopListening {
super.onStopListening
detachService // just in case the user switches to NAT mode
}
override def onClick = if (isLocked) unlockAndRun(configure) else configure()
private def configure() = startActivityAndCollapse(new Intent(this, classOf[Shadowsocks]))
}
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