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 @@
+
+
+
+
+
+
+
+
+
diff --git a/android/KMEA/app/src/main/res/values/strings.xml b/android/KMEA/app/src/main/res/values/strings.xml
index 658e8e7eba..737d728154 100644
--- a/android/KMEA/app/src/main/res/values/strings.xml
+++ b/android/KMEA/app/src/main/res/values/strings.xml
@@ -139,6 +139,12 @@
Keyman requires WebView to be installed."
+
+
+ Keyman requires WebView to be installed and enabled.\n\n
+ Switch to a different keyboard.
+
+
Keyman requires WebView to be enabled."
diff --git a/android/KMEA/app/src/main/res/values/styles.xml b/android/KMEA/app/src/main/res/values/styles.xml
index e21242fea9..ef8daf5ca9 100644
--- a/android/KMEA/app/src/main/res/values/styles.xml
+++ b/android/KMEA/app/src/main/res/values/styles.xml
@@ -22,6 +22,9 @@
- @android:color/black
- @android:color/transparent
+