Skip to content

Commit

Permalink
Merge pull request #142 from tomburger/fix/api-30-crashing
Browse files Browse the repository at this point in the history
fix the crash for API 30
  • Loading branch information
EddyVerbruggen authored Nov 10, 2021
2 parents 09d536b + 4399bed commit 28cc483
Showing 1 changed file with 12 additions and 5 deletions.
17 changes: 12 additions & 5 deletions src/android/nl/xservices/plugins/Toast.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,10 @@ public class Toast extends CordovaPlugin {
private android.widget.Toast mostRecentToast;
private ViewGroup viewGroup;

private static final boolean IS_AT_LEAST_JELLY_BEAN = Build.VERSION.SDK_INT >= 16;
private static final boolean IS_AT_LEAST_LOLLIPOP = Build.VERSION.SDK_INT >= 21;
private static final boolean IS_AT_LEAST_PIE = Build.VERSION.SDK_INT >= 28;
private static final boolean IS_AT_LEAST_R = Build.VERSION.SDK_INT >= 30;

// note that webView.isPaused() is not Xwalk compatible, so tracking it poor-man style
private boolean isPaused;
Expand Down Expand Up @@ -105,7 +107,8 @@ public void run() {
}

// if one of the custom layout options have been passed in, draw our own shape
if (styling != null && Build.VERSION.SDK_INT >= 16) {
// (but disabled on Android >= 11 since custom toast views are deprecated)
if (styling != null && IS_AT_LEAST_JELLY_BEAN && !IS_AT_LEAST_R) {

// the defaults mimic the default toast as close as possible
final String backgroundColor = styling.optString("backgroundColor", "#333333");
Expand All @@ -132,14 +135,18 @@ public void run() {
toast.getView().setPadding(horizontalPadding, verticalPadding, horizontalPadding, verticalPadding);

// this gives the toast a very subtle shadow on newer devices
if (Build.VERSION.SDK_INT >= 21) {
if (IS_AT_LEAST_LOLLIPOP) {
toast.getView().setElevation(6);
}
}

// On Android >= 5 you can no longer rely on the 'toast.getView().setOnTouchListener',
// so created something funky that compares the Toast position to the tap coordinates.
if (IS_AT_LEAST_LOLLIPOP) {
if (IS_AT_LEAST_R) {
// On Android >= 11 the 'toast.getView()' will always return null
// so no touchListener can be used or mocked
// DO NOTHING
} else if (IS_AT_LEAST_LOLLIPOP) {
// On Android >= 5 you can no longer rely on the 'toast.getView().setOnTouchListener',
// so created something funky that compares the Toast position to the tap coordinates.
getViewGroup().setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
Expand Down

0 comments on commit 28cc483

Please sign in to comment.