メインコンテンツまでスキップ

キーコンフィグ

ここでは、THINKLETのLauncherアプリのキーコンフィグの設定について説明しています。
キーコンフィグは、THINKLETのLauncherアプリに実装された機能です。
Launcherがフォアグラウンドで表示されているときに機能し、ボタン操作だけで、アプリの起動ができます。
キーコンフィグでは、アプリの起動に用いる、Intentに渡すpackageName, className 以外で、extras, flags, action を設定できます。

例えば、Androidのアプリから、次のように別のアプリを起動するような実装 (Kotlin) があるとします。

context.startActivity(Intent().apply {
setClassName("com.example.fd.test", "com.example.fd.test.MainActivity")
action = "com.example.fd.test.ACTION_TEST"
putExtra("str", "AAA")
putExtra("num", 1920)
flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
})

同様条件でTHINKLETのボタン操作から、アプリを起動するには、次のように指定します。
なお、KEYCODE_CAMERAがアサインされたボタンを長押し、それを離したタイミングで設定しています。

{
"key-config": [
{
"key-name": "center",
"key-event": "long-released",
"key-action": {
"action-type": "launch-app",
"action-param": {
"package-name": "com.example.fd.test",
"class-name": "com.example.fd.test.MainActivity",
"action-name": "com.example.fd.test.ACTION_TEST",
"extras": [
{
"key-name": "str",
"key-value": "AAA"
},
{
"key-name": "num",
"key-type": "int",
"key-value": 1920
}
],
"flags": [
"FLAG_ACTIVITY_NEW_TASK",
"FLAG_ACTIVITY_CLEAR_TASK"
]
}
}
}
]
}

Key と value

Keyとvalueの対応は下記のようになっています。

トップレベル

KeyValue Typedescription
key-configJSONArrayキー・イベントごとのConfig をまとめた JSON Object の配列、フォーマットは下記参照

キー・イベントごとのConfig

KeyValue Typedescription
key-nameStringleft = (1), center = (2), right = (3) のいずれか.
key-eventStringfirst-pressed, single-released, double-pressed, double-released, long-pressed, long-released のいずれか。※1
key-actionJSONObjectキー・イベントに応じたアクションをまとめた JSON Object

※1:キーイベントと実際の動作の対応は下記の通りです

key-event実際の動作
first-pressedボタンが押下された瞬間に発生するイベント
single-released二回押し判定の閾値ミリ秒を超え、かつ、長押し判定の閾値ミリ秒を超える前にボタンが離された時に発生するイベント (いわゆる短押し)
double-pressed二回押し判定の閾値ミリ秒を超える前に、2回目のボタンが押された瞬間に発生するイベント(二回押しの押し始め)
double-releaseddouble-pressed の判定後、ボタンが離された時に発生するイベント
long-pressedボタンが押し続けられた状態で、長押し判定の閾値ミリ秒を超えた瞬間に発生するイベント(いわゆる長押し)
long-releasedボタンが押し続けられた状態のまま長押し判定の閾値ミリ秒を超えた後、ボタンが離された時に発生するイベント

※2: 使用上の注意

double-pressedやlong-pressedでlaunch-appを指定する場合、起動される側のアプリのonKeyDownイベントのハンドルに注意してください。 キーが押されたままの状態だと、起動される側のアプリは起動した直後からonKeyDownイベントを拾います。 この挙動はThinkletLauncher側ではコントロールできないので、起動されるアプリ側で適切にハンドルするようにしてください。 なお、first-pressedは、launch-appを指定できません。 したがって、xxxx-release を使用することを推奨しています。

キーアクション

KeyValue Typedescription
action-typeStringアプリ起動の場合は、"launch-app" を指定すること
action-paramJSONObject起動するアプリのパッケージ名、クラス名、その他パラメータをまとめた JSON Object

アクションパラメータ

KeyValue Typedescription
package-nameString起動するアプリのパッケージ名、ComponentName の第一引数になる
class-nameString起動するアプリのクラス名、ComponentName の第二引数になる
action-nameStringstartActivity に使われる Intent に追加する action 名
extrasJSONArraystartActivity に使われる Intent に追加する extra の値をまとめた JSONObject の配列。詳細は後述
flagsJSONArraystartActivity に使われる Intent に追加する flags の値をまとめた String の配列。詳細は後述

extras パラメータ

KeyValue Typedescription
key-nameStringputExtra / getXxxExtra の name フィールドに指定される key の名前
key-typeString または intputExtra / getXxxExtra の value フィールドに指定される値の型。省略した場合は String と解釈。
key-valueString型 または Int型key-type で指定した型の value 値。String型と Int型のみ指定可能。

flags パラメータ

  • Intentに設定するFlagを指定できる。
  • 以下が、Intent.addFlagsに設定するためのエイリアスです。
AliasValue
FLAG_ACTIVITY_CLEAR_TASKIntent.FLAG_ACTIVITY_CLEAR_TASK
FLAG_ACTIVITY_SINGLE_TOPIntent.FLAG_ACTIVITY_SINGLE_TOP
FLAG_ACTIVITY_BROUGHT_TO_FRONTIntent.FLAG_ACTIVITY_BROUGHT_TO_FRONT
FLAG_ACTIVITY_CLEAR_TOPIntent.FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTSIntent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
FLAG_ACTIVITY_FORWARD_RESULTIntent.FLAG_ACTIVITY_FORWARD_RESULT
FLAG_ACTIVITY_LAUNCHED_FROM_HISTORYIntent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY
FLAG_ACTIVITY_MULTIPLE_TASKIntent.FLAG_ACTIVITY_MULTIPLE_TASK
FLAG_ACTIVITY_NEW_DOCUMENTIntent.FLAG_ACTIVITY_NEW_DOCUMENT
FLAG_ACTIVITY_NEW_TASKIntent.FLAG_ACTIVITY_NEW_TASK
FLAG_ACTIVITY_NO_ANIMATIONIntent.FLAG_ACTIVITY_NO_ANIMATION
FLAG_ACTIVITY_NO_HISTORYIntent.FLAG_ACTIVITY_NO_HISTORY
FLAG_ACTIVITY_NO_USER_ACTIONIntent.FLAG_ACTIVITY_NO_USER_ACTION
FLAG_ACTIVITY_PREVIOUS_IS_TOPIntent.FLAG_ACTIVITY_PREVIOUS_IS_TOP
FLAG_ACTIVITY_REORDER_TO_FRONTIntent.FLAG_ACTIVITY_REORDER_TO_FRONT
FLAG_ACTIVITY_RESET_TASK_IF_NEEDEDIntent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
FLAG_ACTIVITY_RETAIN_IN_RECENTSIntent.FLAG_ACTIVITY_RETAIN_IN_RECENTS
FLAG_ACTIVITY_TASK_ON_HOMEIntent.FLAG_ACTIVITY_TASK_ON_HOME
FLAG_DEBUG_LOG_RESOLUTIONIntent.FLAG_DEBUG_LOG_RESOLUTION
FLAG_EXCLUDE_STOPPED_PACKAGESIntent.FLAG_EXCLUDE_STOPPED_PACKAGES
FLAG_FROM_BACKGROUNDIntent.FLAG_FROM_BACKGROUND
FLAG_GRANT_PERSISTABLE_URI_PERMISSIONIntent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION
FLAG_GRANT_PREFIX_URI_PERMISSIONIntent.FLAG_GRANT_PREFIX_URI_PERMISSION
FLAG_GRANT_READ_URI_PERMISSIONIntent.FLAG_GRANT_READ_URI_PERMISSION
FLAG_GRANT_WRITE_URI_PERMISSIONIntent.FLAG_GRANT_WRITE_URI_PERMISSION
FLAG_INCLUDE_STOPPED_PACKAGESIntent.FLAG_INCLUDE_STOPPED_PACKAGES
FLAG_RECEIVER_FOREGROUNDIntent.FLAG_RECEIVER_FOREGROUND
FLAG_RECEIVER_NO_ABORTIntent.FLAG_RECEIVER_NO_ABORT
FLAG_RECEIVER_REGISTERED_ONLYIntent.FLAG_RECEIVER_REGISTERED_ONLY
FLAG_RECEIVER_REPLACE_PENDINGIntent.FLAG_RECEIVER_REPLACE_PENDING

key_config.json の格納場所

key_config.json のTHINKLETE上の格納場所は下記の通りです。

/storage/emulated/0/Android/data/ai.fd.thinklet.app.launcher/files/key_config.json