From 46e3cc85d620e6b31ba730d7853ee734124bd687 Mon Sep 17 00:00:00 2001 From: Lucas Alber Date: Sat, 13 Aug 2022 16:12:52 +0200 Subject: [PATCH] Add android ui --- android_ui.py | 31 +++++++++++++++++++++++++ terminal_ui.py | 43 ++++++++++++++++++++++++++++++++++ wizard.py | 62 ++++++++++---------------------------------------- 3 files changed, 86 insertions(+), 50 deletions(-) create mode 100644 android_ui.py create mode 100644 terminal_ui.py diff --git a/android_ui.py b/android_ui.py new file mode 100644 index 0000000..6a2ad52 --- /dev/null +++ b/android_ui.py @@ -0,0 +1,31 @@ +import androidhelper + + +droid = androidhelper.Android() + + +def query(text): + droid.ttsSpeak(text) + result = droid.dialogGetInput("", text).result + while result is None: + result = droid.dialogGetInput("", text).result + return result + + +def query_int(text): + try: + ans = query(text) + return int(ans) + except ValueError: + droid.makeToast("Please enter a valid number!") + return query_int(text) + + +def query_yes_no(question): + droid.ttsSpeak(question) + droid.dialogCreateAlert("", question) + droid.dialogSetPositiveButtonText("Yes") + droid.dialogSetNegativeButtonText("No") + droid.dialogShow() + resp = droid.dialogGetResponse().result + return resp["which"] == "positive" diff --git a/terminal_ui.py b/terminal_ui.py new file mode 100644 index 0000000..e2ffeb1 --- /dev/null +++ b/terminal_ui.py @@ -0,0 +1,43 @@ +def query(text): + return input(f"{text} \n> ") + + +def query_int(text): + try: + ans = query(text) + return int(ans) + except ValueError: + print("Please enter a valid number!") + return query_int(text) + + +def query_yes_no(question, default="no"): + """Ask a yes/no question via raw_input() and return their answer. + + https://stackoverflow.com/questions/3041986/apt-command-line-interface-like-yes-no-input + + "question" is a string that is presented to the user. + "default" is the presumed answer if the user just hits . + It must be "yes" (the default), "no" or None (meaning + an answer is required of the user). + + The "answer" return value is True for "yes" or False for "no". + """ + valid = {"yes": True, "y": True, "ye": True, "no": False, "n": False} + if default is None: + prompt = " [y/n] " + elif default == "yes": + prompt = " [Y/n] " + elif default == "no": + prompt = " [y/N] " + else: + raise ValueError("invalid default answer: '%s'" % default) + + while True: + choice = query(question + prompt).lower() + if default is not None and choice == "": + return valid[default] + elif choice in valid: + return valid[choice] + else: + print("Please respond with 'yes' or 'no' (or 'y' or 'n').") diff --git a/wizard.py b/wizard.py index 19ac1d0..3560e7e 100644 --- a/wizard.py +++ b/wizard.py @@ -1,57 +1,17 @@ import os +try: + import android_ui as ui +except ImportError: + import terminal_ui as ui + MIN_CELL_WIDTH = 15 -def query(text): - return input(f"{text} \n> ") - - -def query_int(text): - try: - ans = query(text) - return int(ans) - except ValueError: - print("Please enter a valid number!") - return query_int(text) - - def clear(): os.system("cls" if os.name in ("nt", "dos") else "clear") -def query_yes_no(question, default="yes"): - """Ask a yes/no question via raw_input() and return their answer. - - https://stackoverflow.com/questions/3041986/apt-command-line-interface-like-yes-no-input - - "question" is a string that is presented to the user. - "default" is the presumed answer if the user just hits . - It must be "yes" (the default), "no" or None (meaning - an answer is required of the user). - - The "answer" return value is True for "yes" or False for "no". - """ - valid = {"yes": True, "y": True, "ye": True, "no": False, "n": False} - if default is None: - prompt = " [y/n] " - elif default == "yes": - prompt = " [Y/n] " - elif default == "no": - prompt = " [y/N] " - else: - raise ValueError("invalid default answer: '%s'" % default) - - while True: - choice = query(question + prompt).lower() - if default is not None and choice == "": - return valid[default] - elif choice in valid: - return valid[choice] - else: - print("Please respond with 'yes' or 'no' (or 'y' or 'n').") - - def remove_line(d): for key in d.keys(): del d[key][-1] @@ -98,7 +58,7 @@ def main(): clear() print("Welcome! This is WiZaRδ!\n") - players = [name.strip() for name in query("Enter Player Names (separated by comma)").split(",")] + players = [name.strip() for name in ui.query("Enter Player Names (separated by comma)").split(",")] guesses = {player: [] for player in players} results = {player: [] for player in players} @@ -118,10 +78,10 @@ def main(): guess_sum = 0 for j in range(i, i + len(players)): player = players[j % len(players)] - guess = query_int(f"{player}, enter your guess{f' (not {i - guess_sum})' if j == i + len(players) - 1 and i > 3 else ''}!") + guess = ui.query_int(f"{player}, enter your guess{f' (not {i - guess_sum})' if j == i + len(players) - 1 and i > 3 else ''}!") guesses[player] += [guess] guess_sum += guess - if not query_yes_no("Reenter guesses?", default="no"): + if not ui.query_yes_no("Reenter guesses?"): break else: remove_line(guesses) @@ -129,15 +89,16 @@ def main(): # PRINT STANDINGS print() print_standings(players, guesses, results) + input("\nPress enter to continue...") # INPUT RESULTS print() while True: for j in range(i, i + len(players)): player = players[j % len(players)] - result = query_int(f"{player}, how many tricks did you take?") + result = ui.query_int(f"{player}, how many tricks did you take?") results[player] += [result] - if not query_yes_no("Reenter results?", default="no"): + if not ui.query_yes_no("Reenter results?"): break else: remove_line(results) @@ -145,6 +106,7 @@ def main(): # PRINT STANDINGS print() print_standings(players, guesses, results) + input("\nPress enter to continue...") if __name__ == "__main__":