diff --git a/android/KMEA/app/src/main/AndroidManifest.xml b/android/KMEA/app/src/main/AndroidManifest.xml index 304d715ee7..1cba0958ce 100644 --- a/android/KMEA/app/src/main/AndroidManifest.xml +++ b/android/KMEA/app/src/main/AndroidManifest.xml @@ -57,6 +57,13 @@ android:label="@string/app_name" android:theme="@style/AppTheme.Light.Dialog" > + + diff --git a/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java b/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java index ed426495d9..51dbe33a23 100644 --- a/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java +++ b/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java @@ -49,7 +49,6 @@ import android.view.inputmethod.InputMethodManager; import android.webkit.WebView; import android.widget.FrameLayout; import android.widget.RelativeLayout; -import android.widget.Toast; import androidx.core.content.ContextCompat; @@ -229,6 +228,7 @@ public final class KMManager { private static boolean debugMode = false; private static boolean shouldAllowSetKeyboard = true; private static boolean didCopyAssets = false; + private static boolean didShowWebViewError = false; private static boolean didLogHardwareKeystrokeException = false; @@ -671,6 +671,16 @@ public final class KMManager { } } + private static void showWebViewError() { + Intent i = new Intent(appContext, WebViewErrorActivity.class); + i.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); // Replaces FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET + i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // Required to call startActivity() from outside of an Activity context + i.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); + i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); + + appContext.startActivity(i); + } + /** * Adjust the keyboard dimensions. If the suggestion banner is active, use the * combined banner height and keyboard height @@ -703,10 +713,7 @@ public final class KMManager { try { SystemKeyboard = new KMKeyboard(appContext, KeyboardType.KEYBOARD_TYPE_SYSTEM); } catch (AndroidRuntimeException e) { - // Notify fatal error when WebView not installed/enabled - String message = appContext.getString(R.string.body_install_webview); - Toast.makeText(appContext, message, - Toast.LENGTH_LONG).show(); + // Catch fatal error when WebView not installed/enabled return; } SystemKeyboardWebViewClient = new KMKeyboardWebViewClient(appContext, keyboardType); @@ -809,6 +816,11 @@ public final class KMManager { } public static void onStartInput(EditorInfo attribute, boolean restarting) { + if (!didShowWebViewError && SystemKeyboard == null && WebViewUtils.getSystemWebViewStatus(appContext) != + SystemWebViewStatus.FULL) { + showWebViewError(); + didShowWebViewError = true; + } if (!restarting && SystemKeyboard != null) { String packageName = attribute.packageName; int inputType = attribute.inputType; diff --git a/android/KMEA/app/src/main/java/com/keyman/engine/WebViewErrorActivity.java b/android/KMEA/app/src/main/java/com/keyman/engine/WebViewErrorActivity.java new file mode 100644 index 0000000000..09534ce46c --- /dev/null +++ b/android/KMEA/app/src/main/java/com/keyman/engine/WebViewErrorActivity.java @@ -0,0 +1,43 @@ +/** + * Keyman is copyright (C) SIL Global. MIT License + */ +package com.keyman.engine; + +import android.content.Context; +import android.os.Bundle; +import android.view.View; +import android.view.inputmethod.InputMethodManager; +import android.widget.Button; +import android.widget.LinearLayout; + +/** + * Activity to display when WebView is either not installed or enabled. + * Prompts user to switch system keyboard. + */ +public class WebViewErrorActivity extends BaseActivity { + private static final String TAG = "WebViewErrorActivity"; + + private static LinearLayout linearLayout = null; + private static Button changeIMEButton = null; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + final Context context = this; + setContentView(R.layout.activity_webview_error); + + linearLayout = (LinearLayout) findViewById(R.id.webViewErrorLayout); + changeIMEButton = (Button) findViewById(R.id.changeIMEButton); + changeIMEButton.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + InputMethodManager imManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); + imManager.showInputMethodPicker(); + + // Dismiss the View + linearLayout.setVisibility(View.GONE); + //finish(); Dismiss IME picker too fast + } + }); + } +} \ No newline at end of file diff --git a/android/KMEA/app/src/main/res/layout/activity_webview_error.xml b/android/KMEA/app/src/main/res/layout/activity_webview_error.xml new file mode 100644 index 0000000000..0b93503ca0 --- /dev/null +++ b/android/KMEA/app/src/main/res/layout/activity_webview_error.xml @@ -0,0 +1,41 @@ + + + + + + +