From 58a8aa3dd0a959f90701f4e75922b28b9a48edf5 Mon Sep 17 00:00:00 2001 From: David Kramer Date: Thu, 21 Jun 2018 22:56:01 -0600 Subject: [PATCH] Allow toast color / gravity to be changed --- .../main/java/com/termux/api/ToastAPI.java | 44 ++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/termux/api/ToastAPI.java b/app/src/main/java/com/termux/api/ToastAPI.java index 7e5a71794..5ea81c065 100644 --- a/app/src/main/java/com/termux/api/ToastAPI.java +++ b/app/src/main/java/com/termux/api/ToastAPI.java @@ -2,11 +2,16 @@ import android.content.Context; import android.content.Intent; +import android.graphics.Color; +import android.graphics.drawable.Drawable; import android.os.Handler; import android.view.Gravity; +import android.view.View; +import android.widget.TextView; import android.widget.Toast; import com.termux.api.util.ResultReturner; +import com.termux.api.util.TermuxApiLogger; import java.io.PrintWriter; @@ -14,6 +19,9 @@ public class ToastAPI { public static void onReceive(final Context context, Intent intent) { final int durationExtra = intent.getBooleanExtra("short", false) ? Toast.LENGTH_SHORT : Toast.LENGTH_LONG; + final int backgroundColor = getColorExtra(intent, "background", Color.GRAY); + final int textColor = getColorExtra(intent, "text_color", Color.WHITE); + final int gravity = getGravityExtra(intent, Gravity.CENTER); final Handler handler = new Handler(); @@ -24,7 +32,15 @@ public void writeResult(PrintWriter out) throws Exception { @Override public void run() { Toast toast = Toast.makeText(context, inputString, durationExtra); - toast.setGravity(Gravity.CENTER, 0, 0); + View toastView = toast.getView(); + + Drawable background = toastView.getBackground(); + background.setTint(backgroundColor); + + TextView textView = toastView.findViewById(android.R.id.message); + textView.setTextColor(textColor); + + toast.setGravity(gravity, 0, 0); toast.show(); } }); @@ -32,4 +48,30 @@ public void run() { }); } + protected static int getColorExtra(Intent intent, String extra, int defaultColor) { + int color = defaultColor; + + if (intent.hasExtra(extra)) { + String colorExtra = intent.getStringExtra(extra); + + try { + color = Color.parseColor(colorExtra); + } catch (IllegalArgumentException e) { + TermuxApiLogger.error(String.format("Failed to parse color '%s' for '%s'", colorExtra, extra)); + } + } + return color; + } + + protected static int getGravityExtra(Intent intent, int defaultGravity) { + String extraGravity = intent.getStringExtra("gravity"); + + switch (extraGravity == null ? "" : extraGravity) { + case "top": return Gravity.TOP; + case "middle": return Gravity.CENTER; + case "bottom": return Gravity.BOTTOM; + default: return defaultGravity; + } + } + }