PickerMetod, ще один варіант розширення для App Inventor [безкоштовно].

Автор: Oto. Posted in Різне

ai2 appinventorПри створенні мобільного додатку в App Inventor , додаток  який повинен передавати дані у МК, та співпрацювати з цим мікроконтролером.

Потрібні різні методи , з допомогою яких це можна зробити зручніше.

Взагалі App Inventorв своєму розпорядженні має багато засобів якими можливо вирішити будь яки завдання, методи цих рішень можуть бути як складними, так и надзвичайно простими.

 

Тому ось мій варіант кількох розширень, здається мені, що вони повинні бути доволі зручні, це начебто для праці з  arduino не вистачає саме таких розширень яки зроблені мною на свій розсуд.

Представляю до вашої уваги кілька таких методів розширень, яких немає в стандартному компоненті сповіщення для App Inventor.

Сподіваюся, це вам сподобається та заощадить ваш час!

📦 Назва пакета: sxem.org.pickermetod; та  sxem.org.metodnotifier;

🕘Версія: MetodNotifier.java.txt

📅 Дата виходу: 24 березня 2023 

👍Велика подяка:

@ТІМАІ2, за його розширення ⚠️AltNotifier(чудова підтримка!!), 

@Gordon_Lu, за його розширення ⚠️ DaffyDialog[безкоштовне та з відкритим кодом] вони надихнули мене, на створення цих блоків.

Розширення .aix зібрано: за допомогою Rush Extension Builder, від @Shreyash

📖 Блоки подій, опис:

1) “InfoChoiceDialog” 

InfoChoiceDialog

цей компонент дуже схожий на стандартний компонент “ShowChooseDialog, він також показує діалогове вікно запитань, які встановлені моб. додатком, і дозволяє  позитивні варіанти відповідей або скасування від користувача (відмінність від “ShowChooseDialog, нам всі три кнопки користувач може зробити свій напис, а також блок має свій флаг “identify.) .

Викликаються відповідні події від трьох кнопок "Left,"Right","Cancel"

Подія після вибору кнопки "Left,"Right", яка повертає флаг-“identifyта  текст кнопки, в блок “InfoChoiceInput.

Якщо вибір "Cancel", флаг-“identifyвідповіді  повертається, в блок “InfoChoiceCanceled.

 

2) “DoubleWindowDialog

DoubleWindowDialog

 Показує подвійне діалогове вікно, де користувач може ввести свої текстові назви.

Відповідності: identify = число(int), message = текст, title = текст, hintUp = текст, hintDown = текст, textUp = текст, textDown = текст, cancelable = boolean 

Після запуску та відображення діалогового вікна, коли текстове поле отримає фокус, одразу виникне програмна клавіатура.

 

Подія після вибору кнопки "ОК, відповідь  повертає число “identifyта  текст “textUp ,textDown, в блок “DoubleWindowInput.

Якщо вибір "Cancel", флаг-“identifyвідповіді  повертається, в блок “DoubleWindowCanceled

 

3) “TxtDigitShowDialog” 

TxtDigitShowDialog

Діалогове вікно для праці з цифрами та текстом. У цього діалогового вікна,  на введення цифр та тексту цікаві розмаїття .

Параметр identify- це ідентифікатор для визначення сповіщувача, коли ви хочете показати два діалогові вікна з однаковим розширенням. Параметр “titleпризначений для визначення заголовка цього діалогового вікна. “textDefault- текст за замовчуванням для введення, який користувач спочатку побачить у текстовому полі, коли відкриває діалогове вікно, а підказка підказка цього текстового поля, це“hintText.

Відповідності: identify = число(int), message = текст, title = текст, textDefault = текст, hintText = текст, hintColor = колір, inputColor = колір, buttonText = текст, cancelButtonText = текст, cancelable = boolean , logic = число(int)

logic” = 0 Немає типу вмісту. Текст не редагується

"logic” = 1 звичайн. текст.

"logic” = 2 тільки цифри.

"logic" = 3 номер телефону.

"logic” = 4 дата/час.   

"logic” = 12 Числове поле пароля

"logic" = 21 адреси електронної пошти.

"logic” = 24 введення часу.

"logic" = 81 текстове поле пароля.

 

Подія після вибору кнопки "buttonText, відповідь  повертає число “identifyта текст  “hintText-response, в блок “TxtDigitShowInput.

Якщо вибір "Cancel",“identifyвідповіді  повертається, в блок “TxtDigitShowCanceled

 

4)  “NumberPickerDual” 

 NumberPickerDual

Подвійне діалогове вікно вибору чисел, яке дає змогу користувачеві вибрати числа з попередньо визначеним діапазоном.

Відповідності: identify = число(int), message = текст, title = текст, buttonText = текст, defaultValue0 = число(int), minValue0 = число(int), maxValue0 = число(int),

           defaultValue1 = число(int), minValue1 = число(int), maxValue1 = число(int), logic = число(int)

"logic"<=1 перше та друге число без форматування

"logic">=2 перше число - без форматування, друге число - додаємо незначущі нулі після коми, до двох зн.(0.00) та (0.000)3х значного числа.

 

Подія після вибору кнопки "buttonText, відповідь  повертає числа “identifyта  “number0,number1, в блок “DualPickerInput.

До “finalDataповерне текстове значення, у вигляді “0.00” чи “0.000” 

Якщо вибір "Cancel",“identifyвідповіді  повертається, в блок “DualPickerCanceled

 

5)  “NumberPickerTimer

NumberPickerTimer

 Відображення одного діалог вікна для встановлення часу таймера, наприклад: щоб  таймером щось увімкнути та вимкнути в призначений час, відповідно кінцевий вигляд значення може бути такий   “12:55  23:01” . Всі дії робляться в одному вікні, це зручно.

Відповідності: identify = число(int), message = текст, title = текст, buttonText = текст, defaultValue0 = число(int), defaultValue1 = число(int), defaultValue2 = число(int), defaultValue3 = число(int)

 

Подія після вибору кнопки "buttonText, відповідь  повертає “identifyта числа “number0,number1,number2,number3, в блок “TimerPickerInput.

До “finalDataповерне текстове значення, у вигляді “12:55  23:01” 

Якщо вибір "Cancel",відповідь  “identifyповертається, в блок “TimerPickerCanceled

 

6) “NumPickTherm” 

NumPickTherm

Трохи специфічний, але також цікавий варіант. Відображає  діалогове вікно для введення значень термостату.

Чому специфічний? тому що кожен може працювати з даними температури як йому заманеться.

Мені до вподоби коли температура цифр у вигляді, 1000 це 0°c , 1253 це +25.3, 847 це -15.3°c, якщо Ви сприймаєте таку математику температури, то цей блок вам також сподобається.

Відповідності: identify = число(int), message = текст, title = текст, buttonText = текст, horizon = boolean, maxUpw = число(int), minDown = число(int), defaultThermo = число(int)

       "defaultThermo= встановимо початкове значення , треба щоб були  в форматі "1253" чи "747"

       "maxUpwверхня температура . Встановлювати до плюс температури "123" з "1" попереду (позитивна°)

       "minDownнижня температура. Якщо треба порог негативной  температури , пишемо  просто число "23" ("1" не додаємо°)

        "horizon= TRUE - HORIZONTAL (замовчування)  “horizon= FALSE- VERTICAL

 

Подія після вибору кнопки "buttonText, відповідь  повертає в блок “NumPickThermInput,

 “identifyта інші значення:

       "numberSign= знак "-" чи "+" в форматі 0 чи 1

       "number0= число не оброблено 253

       "formatNumber= в форматі числа 1000+253=1253 чи 1000-253=747

       "finalData= в форматі тексту "+25.3°c

Якщо вибір "Cancel",відповідь  “identifyповертається, в блок “NumPickThermCanceled

 

7) “NumPickerTime3byt

PickerTime3byt

Відображає потрійне діалогове вікно для встановлення часу таймера, щоб щось увімкнути та вимкнути в призначений час, зі значенням часу “number2, відповідно кінцевий вигляд значення може бути такий   “09:12  985” . Всі дії робляться в одному вікні.

Відповідності: identify = число(int), message = текст, title = текст, buttonText = текст, defaultValue0 = число(int), defaultValue1 = число(int), minValue2 = число(int), maxValue2 = число(int), defaultValue2 = число(int)

 

Подія після вибору кнопки "buttonText, відповідь  повертає “identifyта числа “number0,number1,number2, в блок “NumPickerTime3bytInput.

До “finalDataповерне текстове значення, наприклад у вигляді “12:55  4321” 

Якщо вибір "Cancel",відповідь  “identifyповертається, в блок “NumPickerTime3bytCanceled

 

8) “SelectPicker” 

SelectPicker

Відображає діалогове вікно вибору номерів та текста, дає змогу користувачеві вибрати число чи текст з  попередньо визначеного діапазону.  

Тут також є кілька варіантів .

Відповідності: identify = число(int), arrayString = список-текст, logic = число, message = текст, title = текст, buttonText = текст, defaultValue = число(int), minValue = число(int), maxValue = число(int), sizeStep = число(int)

       "logic”=0  вибір чисел з можливістю ""sizeStep"-коефіцієнта" 

       "logic”=1 додаємо незначущій нуль до двозначних чисел. 

       "logic”=2 формат значень на екран з десятками, плюс текстові "arrayString(перші 3 байт), +0.5°С чи 0:0 (0.9) 

       "logic”=3 формат значень на екран з сотнями, плюс текстові "arrayString(перші 3 байт), вага 0.05кг чи 0:00 (0.09) 

       "logic”=4 на екран виводимо текстові "arrayString, наприклад "Неділя , Понеділок, Вівторок, Середа ,Четвер ,П'ятниця ,Субота" (розмежування тексту - кома).

       "logic”=5формат  на екран в .НЕХ форматі, плюс текстовий "arrayString(перший байт), 0хFF чи  FF (255) 

       "logic”>5 звичайний Picker та звичайний вибір чисел , порог "minValue" активне ,

зверніть увагу "minValue" буде вимкнути автоматично, якщо if(logic<=4) minValue=0;

Подія після вибору кнопки "buttonText, відповідь  в блок “SelectPickerInput”  повертає числа “identify“  та "number0.

До “finalDataповерне текстове значення, наприклад:

       "logic”=0  “3” враховано ""sizeStep"-коефіцієнт" 

       "logic”=1  “03”. 

       "logic”=2 +0.5°С чи 0:0 (0.9) 

       "logic”=3 вага 0.05кг чи 0:00 (0.09)      

       "logic”=4"П'ятниця" 

       "logic”=5  0хFF

       "logic”>53” враховується  "minValueниз можливого значення

Якщо вибір "Cancel",число “identifyвідповіді  повертається, в блок “SelectPickerCanceled

 

Скрин блоков в проекті “test_MetodNotifier

using 1

 

 

Файли

AIX: PickerMetod.aix (24КБ)

AIX: MetodNotifier.aix(30КБ)

AIA: test_MetodNotifier.aia (147КБ)

APK:test_MetodNotifier.apk (3,09МБ)

 

JAVA: V1.1 MetodNotifier.java

MetodNotifier.java.txt

/**
* Optional upgrade, to extend the notifier, with a little variety to change the variables.
* notifier in App Inventor, but based upon the original code.
* Credits: @HalAbelson - MIT who wrote the original notifier code
* Credits: @Shreyash for the Rush extension builder
* Credits: @TIMAI2 available source was the basis of the upgrade
* Credits: @Gordon_Lu available source

* Credits: @BBL  https://youtu.be/w9iJS580CMg

* Additions: @Oto, 24-03-2023(Ukraine)
*/

package sxem.org.metodnotifier;

import android.app.Activity;
import android.app.AlertDialog;
import com.google.appinventor.components.runtime.EventDispatcher;
import com.google.appinventor.components.annotations.SimpleEvent;
import com.google.appinventor.components.annotations.SimpleFunction;
import com.google.appinventor.components.runtime.AndroidNonvisibleComponent;
import com.google.appinventor.components.runtime.ComponentContainer;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.view.View;
import android.content.DialogInterface;
import android.view.inputmethod.InputMethodManager;
import android.content.Context;
import android.widget.NumberPicker;
import android.graphics.Typeface;
public class MetodNotifier extends AndroidNonvisibleComponent {
private final Context context;
private final Activity activity;
public MetodNotifier(ComponentContainer container){
super(container.$form());
activity = container.$context();
this.context = container.$context();
}
/** ######################################################
*
*/

@SimpleFunction(description = "Показує діалогове вікно запитань, яке встановлює користувач, і дозволяє "
+ " позитивну відповідь або скасування від користувача. Викликається відповідна подія \n "
+ "від трьох кнопок \"Left\",\"Right\",\"Cancel\" \n ")
public void InfoChoiceDialog(final int identify, String message, String title, String buttonTextLeft, String buttonTextRight, String buttonTextCancel) {
InfoChoiceAlert(identify, message, title, buttonTextLeft, buttonTextRight, buttonTextCancel);
}
private void InfoChoiceAlert(final int identify, String message, String title, String buttonTextLeft, String buttonTextRight, String buttonTextCancel) {

AlertDialog.Builder alert = new AlertDialog.Builder(activity);
alert.setTitle(title);
alert.setMessage(message);

alert.setPositiveButton(buttonTextLeft, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
InfoChoiceInput(identify, buttonTextLeft.toString());
}
});
alert.setNeutralButton( buttonTextRight, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
InfoChoiceInput(identify, buttonTextRight.toString());
}
});
alert.setNegativeButton(buttonTextCancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
InfoChoiceCanceled(identify);
//AfterQuestion("Cancel");
}
});
alert.show();
}
@SimpleEvent(
description = "Event raised after the user has responded to ShowQuestionDialog.")
public void InfoChoiceInput(final int identify, String response) {
EventDispatcher.dispatchEvent(this, "InfoChoiceInput", identify, response);
}
@SimpleEvent(
description = "Подія викликана, коли користувач скасував ПоказатиТекстДіалог.")
public void InfoChoiceCanceled(final int identify) {
EventDispatcher.dispatchEvent(this, "InfoChoiceCanceled", identify);
}
/** ##########################################################################
* LOGIN/PASS ENTRY DIALOG , String hintUp, String hintDown
*/

@SimpleFunction(description = "Показує подвійне діалогове вікно, де користувач може ввести назву"
+ "і деталі назви. Користувач також може скасувати")

public void DoubleWindowDialog(final int identify, String message, String title, String hintUp, String hintDown, String textUp, String textDown, boolean cancelable) {
DoubleWindowTxt( identify, message, title, hintUp, hintDown, textUp, textDown, cancelable);
}
private void DoubleWindowTxt(final int identify, String message, String title, String hintUp, String hintDown, String textUp, String textDown, boolean cancelable) {

AlertDialog.Builder alert = new AlertDialog.Builder(activity);

alert.setTitle(title);
alert.setMessage(message);
alert.setCancelable(false);
LinearLayout layout = new LinearLayout(activity);
layout.setOrientation(LinearLayout.VERTICAL);

final EditText inputLogin = new EditText(activity);
inputLogin.setHint(hintUp);
inputLogin.setText(textUp);
layout.addView(inputLogin);

final EditText inputPass = new EditText(activity);
inputPass.setHint(hintDown);
inputPass.setText(textDown);
layout.addView(inputPass);

alert.setView(layout);
alert.setPositiveButton("OK!", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
HideKeyboard((View) layout);
DoubleWindowInput(identify, inputLogin.getText().toString(), inputPass.getText().toString());
}
});

if (cancelable) {
alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
DoubleWindowCanceled(identify);
HideKeyboard((View) layout);
}
});
}
alert.show();
// Request focus after showing dialog Запитати фокус після показу діалогу
inputLogin.requestFocus();
// Show soft keyboard Показати програмну клавіатуру
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
}
@SimpleEvent(description = "Подія, що виникає після того, як користувач відповів на ДубльВікнаТекст.")
public void DoubleWindowInput(final int identify, String textUp, String textDown) {
EventDispatcher.dispatchEvent(this, "DoubleWindowInput", identify, textUp, textDown);
}
@SimpleEvent(description = "Event raised when the user canceled ДубльВікнаТекст.")
public void DoubleWindowCanceled(final int identify) {
EventDispatcher.dispatchEvent(this, "DoubleWindowCanceled", identify);
}

/** #########################################################################
*/
@SimpleFunction(description = "Відображає діалогове вікно вибору номерів, яке дає змогу користувачеві вибрати число з попередньо визначеного діапазону.")
public void NumberPickerDialog(final int identify, String message, String title, String buttonText,
int defaultValue, int minValue, int maxValue, boolean cancelable) {
TextNumberPickerDialog(identify, message, title, buttonText, defaultValue, minValue, maxValue, cancelable);
}
private void TextNumberPickerDialog(final int identify, String message, String title, String buttonText,
int defaultValue, int minValue, int maxValue, boolean cancelable) {

AlertDialog.Builder alert = new AlertDialog.Builder(this.context);
final NumberPicker numberPicker = new NumberPicker(this.context);
numberPicker.setMaxValue(maxValue);
numberPicker.setMinValue(minValue);
numberPicker.setValue(defaultValue);

alert.setView(numberPicker);
alert.setCancelable(false);
alert.setTitle(title);
alert.setMessage(message);
alert.setPositiveButton(buttonText, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
NumberPickerInput(identify, numberPicker.getValue());
}
});
if (cancelable) {
alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
NumberPickerCanceled(identify);
}
});
}
alert.show();
}
@SimpleEvent(description = "This event is fired when the user has pressed the OK button in a number picker dialog.")
public void NumberPickerInput(int identify, int number) {
EventDispatcher.dispatchEvent(this, "NumberPickerInput", identify, number);
}
@SimpleEvent(description = "This event is fired when the user has pressed the cancel button in a number picker dialog.")
public void NumberPickerCanceled(int identify) {
EventDispatcher.dispatchEvent(this, "NumberPickerCanceled", identify);
}

/** ################################################################
*
*/
@SimpleFunction(description = "Відображає діалогове вікно для введення тексту. \n "
+ "logic = 0 Немає типу вмісту. Текст не редагується \n "
+ "logic = 1 звичайн. текст. \n "
+ "logic = 2 тільки цифри. \n "
+ "logic = 3 номер телефону. \n "
+ "logic = 4 дата/час. \n "
+ "logic = 12 Числове поле пароля \n "
+ "logic = 21 адреса електронної пошти. \n "
+ "logic = 24 введення часу. \n "
+ "logic = 81 текстове поле пароля. ")
public void TxtDigitShowDialog(final int identify, String message, String title, String textDefault, String hintText,
int hintColor, int inputColor, String buttonText, String cancelButtonText, boolean cancelable, int logic) {
TextTxtDigitShowDialog( identify, message, title, textDefault, hintText, hintColor, inputColor, buttonText, cancelButtonText, cancelable, logic);
}
private void TextTxtDigitShowDialog(final int identify, String message, String title, String textDefault, String hintText,
int hintColor, int inputColor, String buttonText, String cancelButtonText, boolean cancelable, int logic) {

AlertDialog.Builder alert = new AlertDialog.Builder(this.context);
alert.setTitle(title);
alert.setMessage(message);
alert.setCancelable(false);
final EditText edit = new EditText(this.context);
edit.setText(textDefault);
edit.setHintTextColor(hintColor);
edit.setTextColor(inputColor);
edit.setHint(hintText);
edit.setTypeface(Typeface.DEFAULT, Typeface.BOLD);
edit.setInputType(logic);
alert.setView(edit);

alert.setPositiveButton(buttonText, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
TxtDigitShowInput(identify, edit.getText().toString());
InputMethodManager imm = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(edit.getWindowToken(), 0);
}
});
if (cancelable) {
alert.setNegativeButton(cancelButtonText, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
TxtDigitShowCanceled(identify);
InputMethodManager imm = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(edit.getWindowToken(), 0);
}
});
}
alert.show();
}
@SimpleEvent(description = "This event is fired when the user has pressed the OK button in a text response dialog.")
public void TxtDigitShowInput(final int identify, String response) {
EventDispatcher.dispatchEvent(this, "TxtDigitShowInput", identify, response);
}
@SimpleEvent(description = "This event is fired when the user has pressed the cancel button in a text response dialog.")
public void TxtDigitShowCanceled(final int identify) {
EventDispatcher.dispatchEvent(this, "TxtDigitShowCanceled", identify);
}
/** ##############################################################
* Приховати програмну клавіатуру після того, як користувач введе текст або скасує введення.
*/
public void HideKeyboard(View view) {
if (view != null) {
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}

}

Joomla Plugins