From 244c2ecdfd38f3c7c3a237314b97d06aa67155fe Mon Sep 17 00:00:00 2001 From: Mygod Date: Sun, 23 Oct 2016 14:16:35 +0800 Subject: [PATCH] Add quick toggle shortcut (#950) Mainly for Android 7.1, also backward compatible. --- src/main/AndroidManifest.xml | 13 +++++++ src/main/res/xml/shortcuts.xml | 13 +++++++ .../shadowsocks/QuickToggleShortcut.scala | 39 +++++++++++++++++++ 3 files changed, 65 insertions(+) create mode 100644 src/main/res/xml/shortcuts.xml create mode 100644 src/main/scala/com/github/shadowsocks/QuickToggleShortcut.scala diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index 4f8db047..72f2e81b 100644 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -53,6 +53,8 @@ + + + + + + + diff --git a/src/main/res/xml/shortcuts.xml b/src/main/res/xml/shortcuts.xml new file mode 100644 index 00000000..b68fad43 --- /dev/null +++ b/src/main/res/xml/shortcuts.xml @@ -0,0 +1,13 @@ + + + + + + diff --git a/src/main/scala/com/github/shadowsocks/QuickToggleShortcut.scala b/src/main/scala/com/github/shadowsocks/QuickToggleShortcut.scala new file mode 100644 index 00000000..1d19d304 --- /dev/null +++ b/src/main/scala/com/github/shadowsocks/QuickToggleShortcut.scala @@ -0,0 +1,39 @@ +package com.github.shadowsocks + +import android.app.Activity +import android.content.Intent +import android.os.Bundle +import com.github.shadowsocks.utils.{State, Utils} + +/** + * @author Mygod + */ +class QuickToggleShortcut extends Activity with ServiceBoundContext { + override def onCreate(savedInstanceState: Bundle) { + super.onCreate(savedInstanceState) + getIntent.getAction match { + case Intent.ACTION_CREATE_SHORTCUT => + setResult(Activity.RESULT_OK, new Intent() + .putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(this, classOf[QuickToggleShortcut])) + .putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.quick_toggle)) + .putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, + Intent.ShortcutIconResource.fromContext(this, R.mipmap.ic_launcher))) + finish() + case _ => attachService() + } + } + + override def onDestroy() { + detachService() + super.onDestroy() + } + + override def onServiceConnected() { + bgService.getState match { + case State.STOPPED => Utils.startSsService(this) + case State.CONNECTED => Utils.stopSsService(this) + case _ => // ignore + } + finish() + } +}