diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/setup/DummySpellCheckerListener.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/setup/DummySpellCheckerListener.java new file mode 100644 index 00000000..7a726ea4 --- /dev/null +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/setup/DummySpellCheckerListener.java @@ -0,0 +1,10 @@ +package io.github.sspanak.tt9.preferences.screens.setup; + +import android.view.textservice.SentenceSuggestionsInfo; +import android.view.textservice.SpellCheckerSession; +import android.view.textservice.SuggestionsInfo; + +class DummySpellCheckerListener implements SpellCheckerSession.SpellCheckerSessionListener { + public void onGetSuggestions(SuggestionsInfo[] results){} + public void onGetSentenceSuggestions(SentenceSuggestionsInfo[] results){} +} diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/setup/ItemSpellCheck.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/setup/ItemSpellCheck.java index d8bc9d02..091a9c7f 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/setup/ItemSpellCheck.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/setup/ItemSpellCheck.java @@ -1,7 +1,10 @@ package io.github.sspanak.tt9.preferences.screens.setup; +import android.content.Context; import android.content.Intent; import android.service.textservice.SpellCheckerService; +import android.view.textservice.SpellCheckerSession; +import android.view.textservice.TextServicesManager; import androidx.preference.Preference; @@ -18,13 +21,14 @@ public class ItemSpellCheck extends ItemClickable { if (DeviceInfo.noTouchScreen(activity)) { disable(); item.setVisible(false); - } else if (isSpellCheckEnabled(activity)) { + } else if (isSpellCheckEnabled(activity) || isTextSpellCheckerEnabled(activity)) { enable(); } else { disable(); } } + private boolean isSpellCheckEnabled(PreferencesActivity activity) { if (activity == null) { return false; @@ -34,6 +38,23 @@ public class ItemSpellCheck extends ItemClickable { return activity.getPackageManager().resolveService(spellCheckIntent, 0) != null; } + + private boolean isTextSpellCheckerEnabled(PreferencesActivity activity) { + if (activity == null) { + return false; + } + + TextServicesManager tsm = (TextServicesManager) activity.getSystemService(Context.TEXT_SERVICES_MANAGER_SERVICE); + SpellCheckerSession session = tsm.newSpellCheckerSession(null, null, new DummySpellCheckerListener(), true); + if (session == null) { + return false; + } + + session.close(); + return true; + } + + @Override public void enable() { if (item != null) { @@ -43,6 +64,7 @@ public class ItemSpellCheck extends ItemClickable { } } + @Override public void disable() { if (item != null) { @@ -51,6 +73,7 @@ public class ItemSpellCheck extends ItemClickable { } } + @Override public void enableClickHandler() { if (item != null && item.isEnabled()) { @@ -58,6 +81,7 @@ public class ItemSpellCheck extends ItemClickable { } } + @Override protected boolean onClick(Preference p) { return UI.showSystemSpellCheckerSettings(p.getContext());