選択肢を出す [Dialog choice]

※この記事はAutomateで選択肢を出す [Dialog choice] - おはやし日記からの移植です

Automate で選択肢の提示をする方法についてまとめました。

環境 : Android 9.0, Automate Version 1.23.1

llamalab.com

選択ボタンを表示させる

今回扱うのは Interface - Dialog choice ブロックです。

f:id:o-treetree:20200519071622j:plain

選択肢を提示し、いずれかが選択されたらYESへ、CANSELが押されたらNOに分岐します。

まずは変数について見ていきます

Input arguments 入力引数

Title

ボタンウィンドウのタイトル。何も書かなければタイトルは出ない

Choices

選択肢。array型かdictionary型で与える

["first", "second", "third", "else"] //array
-> 選択肢は first second third else

{"first" : 1, "second" : "two", "third" : 3, "else" : "その他"} //dictionary
-> 選択肢は 1 two 3 その他

Multi-select

複数選択。デフォルト(チェックボックスが灰色の[-])では false

  • true - 複数選択できるようになり、ボタンウィンドウがチェックボックス式になる。ALL(全選択)が表示される。
  • false - 複数選択は不可能。ボタンウィンドウは選択肢が並ぶだけになる。

No selection

何も選択せず次に進むことができるかどうか。デフォルトではfalse

  • Multi-select = false(単一選択)のときは無効。チェックの有無にかかわらずfalse。何も選択しないならばCANSELを押すしかない
  • true - チェックボックスに何もいれなくてもOKを押せる。
  • false - チェックボックスがどれも選択されていないとOKが押せない。

Sort

選択肢のソート。デフォルトではtrue

  • true - 選択肢が、array型なら各要素で、dictionary型なら各valueによって辞書順にソートされる。ソート順は 数字→アルファベット→日本語。
  • false - 選択肢が、入力したChoicesの順序のまま表示される。
Choices = ["first", "second", "third", "else"] //array
Sort : true
->
選択肢は else first second third の順で表示

Coices = {"first" : 1, "second" : "two", "third" : 3, "else" : "その他"} //dictionary
Sort : true
->
選択肢は 1 3 two その他 の順で表示

Pre-selected

ユーザーが選択する前にあらかじめ選択しておく際入力。デフォルトは空白(none)。Multi-selectの真偽によって挙動が異なる

  • Malti-select : true - チェックボックスで、指定された選択肢にあらかじめチェックがつく
  • Malti-select : false - ボタンウィンドウがラジオボタン式になり、Pre-selectedの要素が選択された形で表示される。

Choicesの型によって入力方法が異なる

  • Choicesがarray型 - Choicesに対するインデックスを1つ入力(ソートについては考えなくて良い)。もしarray型で列挙した場合はarr[0]が採用される。
Choices = ["first", "second", "third", "else"] //array
Pre-selected = 2
->
選択肢 third があらかじめ選択される
Pre-selected = [2, 1]
->
Pre-selected = 2と同値
  • Choicesがdictionary型 - Choicesに対するkeyをarray型で列挙(一つなら変数のみでも良い)。
Choices = {"first" : 1, "second" : "two", "third" : 3, "else" : "その他"} //dictionary
Pre-selected = ["else", "fiest"]
->
選択肢 1, その他 があらかじめ選択される

Timeout

入力の制限時間。デフォルトでは空白(ずっと待機する)。

入力は 0h 5m 0s のような直感的入力のほか$fx$を有効にしてにて秒数で指定も可能。

指定時間以内に入力がなされなければNOへ分岐する

Notification channel

よくわからないけどデフォルトの空白のままで困らない

Show window

ボタンウィンドウを即時表示する。デフォルトはfalse。普通はtrueにすると良い

  • true - Dialog choiceブロックに至ったら即座にボタンウィンドウが表示される
  • false - Dialog choiceブロックに至ったら、通知がでて、その通知を押すとボタンウィンドウが表示される。

Requires the “appear atop of other apps or parts of the screen” privilege on Android 10+.

documentationより)

Output variables 出力変数

Array of selected indices/keys

indicesはindexの複数形

選択したものはarray型で出力される。選択肢が単一だとしても出力はarray型なので、取り出すにはarr[0]のようにしなければならない

Choices = ["first", "second", "third", "else"] //array
Array of... : x
->
second を選択
->
x = [1] //インデックスは0始まりであることに注意

Choices = {"first" : 1, "second" : "two", "third" : 3, "else" : "その他"} //dictionary
Array of... : x
->
two その他 を選択
->
x = ["second", "else"]

使用例

以下の擬似プログラミングに沿って作ってみる。General::Variable setとは、Variable setブロックがGeneralカテゴリにあることを明示しています。

Flow beginning{}
General::Variable set{
  Variable : tenki
  Value = ["晴れ", "曇り", "雨", "雪"]
}
Interface::Dialog choice{
  Title : 今日の天気は?
  Choices = tenki //先に設定したarray型変数を使う
  Show_window : true
  Array_of... : selected
}
Interface::Dialog message{
  Title : 今日の天気は
  Message : {tenki[selected[0]]}です
  Show_window : true
}

順につなげてこのようになります

f:id:o-treetree:20200519071642j:plain

実行

f:id:o-treetree:20200519071653j:plain

曇り を選択

f:id:o-treetree:20200519071712j:plain