From 5e0b29bb6d3b1ee73e7fba1d6c2ecc7446264419 Mon Sep 17 00:00:00 2001 From: agnostic-apollo Date: Tue, 16 Mar 2021 04:07:01 +0500 Subject: [PATCH] Move DialogUtils to com.termux.app.utils package --- .../com/termux/app/utils/DialogUtils.java | 71 +++++++++++++++++++ .../TermuxFileReceiverActivity.java | 2 +- 2 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/com/termux/app/utils/DialogUtils.java diff --git a/app/src/main/java/com/termux/app/utils/DialogUtils.java b/app/src/main/java/com/termux/app/utils/DialogUtils.java new file mode 100644 index 00000000..5970850f --- /dev/null +++ b/app/src/main/java/com/termux/app/utils/DialogUtils.java @@ -0,0 +1,71 @@ +package com.termux.app.utils; + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.text.Selection; +import android.util.TypedValue; +import android.view.KeyEvent; +import android.view.ViewGroup.LayoutParams; +import android.widget.EditText; +import android.widget.LinearLayout; + +public final class DialogUtils { + + public interface TextSetListener { + void onTextSet(String text); + } + + public static void textInput(Activity activity, int titleText, String initialText, + int positiveButtonText, final TextSetListener onPositive, + int neutralButtonText, final TextSetListener onNeutral, + int negativeButtonText, final TextSetListener onNegative, + final DialogInterface.OnDismissListener onDismiss) { + final EditText input = new EditText(activity); + input.setSingleLine(); + if (initialText != null) { + input.setText(initialText); + Selection.setSelection(input.getText(), initialText.length()); + } + + final AlertDialog[] dialogHolder = new AlertDialog[1]; + input.setImeActionLabel(activity.getResources().getString(positiveButtonText), KeyEvent.KEYCODE_ENTER); + input.setOnEditorActionListener((v, actionId, event) -> { + onPositive.onTextSet(input.getText().toString()); + dialogHolder[0].dismiss(); + return true; + }); + + float dipInPixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1, activity.getResources().getDisplayMetrics()); + // https://www.google.com/design/spec/components/dialogs.html#dialogs-specs + int paddingTopAndSides = Math.round(16 * dipInPixels); + int paddingBottom = Math.round(24 * dipInPixels); + + LinearLayout layout = new LinearLayout(activity); + layout.setOrientation(LinearLayout.VERTICAL); + layout.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); + layout.setPadding(paddingTopAndSides, paddingTopAndSides, paddingTopAndSides, paddingBottom); + layout.addView(input); + + AlertDialog.Builder builder = new AlertDialog.Builder(activity) + .setTitle(titleText).setView(layout) + .setPositiveButton(positiveButtonText, (d, whichButton) -> onPositive.onTextSet(input.getText().toString())); + + if (onNeutral != null) { + builder.setNeutralButton(neutralButtonText, (dialog, which) -> onNeutral.onTextSet(input.getText().toString())); + } + + if (onNegative == null) { + builder.setNegativeButton(android.R.string.cancel, null); + } else { + builder.setNegativeButton(negativeButtonText, (dialog, which) -> onNegative.onTextSet(input.getText().toString())); + } + + if (onDismiss != null) builder.setOnDismissListener(onDismiss); + + dialogHolder[0] = builder.create(); + dialogHolder[0].setCanceledOnTouchOutside(false); + dialogHolder[0].show(); + } + +} diff --git a/app/src/main/java/com/termux/filepicker/TermuxFileReceiverActivity.java b/app/src/main/java/com/termux/filepicker/TermuxFileReceiverActivity.java index f0f53dcb..94194f27 100644 --- a/app/src/main/java/com/termux/filepicker/TermuxFileReceiverActivity.java +++ b/app/src/main/java/com/termux/filepicker/TermuxFileReceiverActivity.java @@ -9,7 +9,7 @@ import android.provider.OpenableColumns; import android.util.Patterns; import com.termux.R; -import com.termux.app.DialogUtils; +import com.termux.app.utils.DialogUtils; import com.termux.app.TermuxConstants; import com.termux.app.TermuxConstants.TERMUX_APP.TERMUX_SERVICE; import com.termux.app.TermuxService;