Commit 5966c9d8 authored by Mygod's avatar Mygod

Quick settings tile for N preview (draft)

Addresses #671 but has NOT fixed it yet.
parent 2c2e5790
...@@ -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-N"
name := "shadowsocks" name := "shadowsocks"
......
...@@ -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=".ShadowsocksReceiver"> <receiver android:name=".ShadowsocksReceiver">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/> <action android:name="android.intent.action.BOOT_COMPLETED"/>
......
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
/**
* @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(ShadowsocksApplication.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