From cc84ff6a000409340ac1fc8eb24240e4bda019aa Mon Sep 17 00:00:00 2001 From: Helium314 Date: Thu, 7 Sep 2023 16:29:59 +0200 Subject: [PATCH] address some warnings, migrate user dictionary settings to androidx --- .../openboard/inputmethod/event/Combiner.kt | 2 +- .../inputmethod/event/CombinerChain.kt | 4 +- .../inputmethod/event/DeadKeyCombiner.kt | 20 +++++----- .../inputmethod/latin/NgramContext.java | 7 ++-- .../inputmethod/latin/WordComposer.java | 4 +- .../UserDictionaryAddWordContents.java | 4 +- .../userdictionary/UserDictionaryList.java | 23 +++++------ .../UserDictionarySettings.java | 38 +++++++++---------- 8 files changed, 47 insertions(+), 55 deletions(-) diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/event/Combiner.kt b/app/src/main/java/org/dslul/openboard/inputmethod/event/Combiner.kt index c1290dfe0..5d1886c73 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/event/Combiner.kt +++ b/app/src/main/java/org/dslul/openboard/inputmethod/event/Combiner.kt @@ -17,7 +17,7 @@ interface Combiner { * @param event the event to combine with the existing state. * @return the resulting event. */ - fun processEvent(previousEvents: ArrayList?, event: Event?): Event? + fun processEvent(previousEvents: ArrayList?, event: Event?): Event /** * Get the feedback that should be shown to the user for the current state of this combiner. diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/event/CombinerChain.kt b/app/src/main/java/org/dslul/openboard/inputmethod/event/CombinerChain.kt index 0b38ea072..c05934a76 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/event/CombinerChain.kt +++ b/app/src/main/java/org/dslul/openboard/inputmethod/event/CombinerChain.kt @@ -46,13 +46,13 @@ class CombinerChain(initialText: String?) { * new event. However it may never be null. */ fun processEvent(previousEvents: ArrayList?, - newEvent: Event?): Event? { + newEvent: Event): Event { val modifiablePreviousEvents = ArrayList(previousEvents!!) var event = newEvent for (combiner in mCombiners) { // A combiner can never return more than one event; it can return several // code points, but they should be encapsulated within one event. event = combiner.processEvent(modifiablePreviousEvents, event) - if (event!!.isConsumed) { // If the event is consumed, then we don't pass it to subsequent combiners: + if (event.isConsumed) { // If the event is consumed, then we don't pass it to subsequent combiners: // they should not see it at all. break } diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/event/DeadKeyCombiner.kt b/app/src/main/java/org/dslul/openboard/inputmethod/event/DeadKeyCombiner.kt index 2649a1741..4081fed7a 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/event/DeadKeyCombiner.kt +++ b/app/src/main/java/org/dslul/openboard/inputmethod/event/DeadKeyCombiner.kt @@ -188,11 +188,11 @@ class DeadKeyCombiner : Combiner { // TODO: make this a list of events instead val mDeadSequence = StringBuilder() - override fun processEvent(previousEvents: ArrayList?, event: Event?): Event? { + override fun processEvent(previousEvents: ArrayList?, event: Event?): Event { if (TextUtils.isEmpty(mDeadSequence)) { // No dead char is currently being tracked: this is the most common case. if (event!!.isDead) { // The event was a dead key. Start tracking it. mDeadSequence.appendCodePoint(event.mCodePoint) - return Event.Companion.createConsumedEvent(event) + return Event.createConsumedEvent(event) } // Regular keystroke when not keeping track of a dead key. Simply said, there are // no dead keys at all in the current input, so this combiner has nothing to do and @@ -201,8 +201,7 @@ class DeadKeyCombiner : Combiner { } if (Character.isWhitespace(event!!.mCodePoint) || event.mCodePoint == mDeadSequence.codePointBefore(mDeadSequence.length)) { // When whitespace or twice the same dead key, we should output the dead sequence as is. - val resultEvent = createEventChainFromSequence(mDeadSequence.toString(), - event) + val resultEvent = createEventChainFromSequence(mDeadSequence.toString(), event) mDeadSequence.setLength(0) return resultEvent } @@ -211,13 +210,13 @@ class DeadKeyCombiner : Combiner { val trimIndex = mDeadSequence.length - Character.charCount( mDeadSequence.codePointBefore(mDeadSequence.length)) mDeadSequence.setLength(trimIndex) - return Event.Companion.createConsumedEvent(event) + return Event.createConsumedEvent(event) } return event } if (event.isDead) { mDeadSequence.appendCodePoint(event.mCodePoint) - return Event.Companion.createConsumedEvent(event) + return Event.createConsumedEvent(event) } // Combine normally. val sb = StringBuilder() @@ -248,17 +247,16 @@ class DeadKeyCombiner : Combiner { get() = mDeadSequence companion object { - private fun createEventChainFromSequence(text: CharSequence, - originalEvent: Event?): Event? { + private fun createEventChainFromSequence(text: CharSequence, originalEvent: Event): Event { var index = text.length if (index <= 0) { return originalEvent } - var lastEvent: Event? = null + lateinit var lastEvent: Event do { val codePoint = Character.codePointBefore(text, index) - lastEvent = Event.Companion.createHardwareKeypressEvent(codePoint, - originalEvent!!.mKeyCode, lastEvent, false /* isKeyRepeat */) + lastEvent = Event.createHardwareKeypressEvent(codePoint, + originalEvent.mKeyCode, lastEvent, false /* isKeyRepeat */) index -= Character.charCount(codePoint) } while (index > 0) return lastEvent diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/NgramContext.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/NgramContext.java index a13ad9a92..c4f1fe3ce 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/NgramContext.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/NgramContext.java @@ -175,8 +175,7 @@ public class NgramContext { } } } - final String[] contextStringArray = prevTermList.toArray(new String[prevTermList.size()]); - return contextStringArray; + return prevTermList.toArray(new String[prevTermList.size()]); } public boolean isValid() { @@ -227,7 +226,7 @@ public class NgramContext { public int hashCode() { int hashValue = 0; for (final WordInfo wordInfo : mPrevWordsInfo) { - if (wordInfo == null || !WordInfo.EMPTY_WORD_INFO.equals(wordInfo)) { + if (!WordInfo.EMPTY_WORD_INFO.equals(wordInfo)) { break; } hashValue ^= wordInfo.hashCode(); @@ -267,7 +266,7 @@ public class NgramContext { @Override public String toString() { - final StringBuffer builder = new StringBuffer(); + final StringBuilder builder = new StringBuilder(); for (int i = 0; i < mPrevWordsCount; i++) { final WordInfo wordInfo = mPrevWordsInfo[i]; builder.append("PrevWord["); diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/WordComposer.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/WordComposer.java index e7b7eed23..c9989d6e9 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/WordComposer.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/WordComposer.java @@ -127,7 +127,7 @@ public final class WordComposer { refreshTypedWordCache(); } - private final void refreshTypedWordCache() { + private void refreshTypedWordCache() { mTypedWordCache = mCombinerChain.getComposingWordWithCombiningFeedback(); mCodePointSize = Character.codePointCount(mTypedWordCache, 0, mTypedWordCache.length()); } @@ -144,7 +144,7 @@ public final class WordComposer { return size() == 1; } - public final boolean isComposingWord() { + public boolean isComposingWord() { return size() > 0; } diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/userdictionary/UserDictionaryAddWordContents.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/userdictionary/UserDictionaryAddWordContents.java index b1b43d39e..53449b78e 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/userdictionary/UserDictionaryAddWordContents.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/userdictionary/UserDictionaryAddWordContents.java @@ -83,15 +83,13 @@ public class UserDictionaryAddWordContents { // it's too long to be edited. mWordEditText.setSelection(mWordEditText.getText().length()); } - final String shortcut; if (UserDictionarySettings.IS_SHORTCUT_API_SUPPORTED) { - shortcut = args.getString(EXTRA_SHORTCUT); + final String shortcut = args.getString(EXTRA_SHORTCUT); if (null != shortcut && null != mShortcutEditText) { mShortcutEditText.setText(shortcut); } mOldShortcut = args.getString(EXTRA_SHORTCUT); } else { - shortcut = null; mOldShortcut = null; } mMode = args.getInt(EXTRA_MODE); // default return value for #getInt() is 0 = MODE_EDIT diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/userdictionary/UserDictionaryList.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/userdictionary/UserDictionaryList.java index 1a6da9b59..bea0a6c03 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/userdictionary/UserDictionaryList.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/userdictionary/UserDictionaryList.java @@ -22,9 +22,6 @@ import android.content.Intent; import android.database.Cursor; import android.os.Build; import android.os.Bundle; -import android.preference.Preference; -import android.preference.PreferenceFragment; -import android.preference.PreferenceGroup; import android.provider.UserDictionary; import android.text.TextUtils; import android.view.inputmethod.InputMethodInfo; @@ -32,6 +29,9 @@ import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodSubtype; import androidx.annotation.Nullable; +import androidx.preference.Preference; +import androidx.preference.PreferenceFragmentCompat; +import androidx.preference.PreferenceGroup; import org.dslul.openboard.inputmethod.latin.R; import org.dslul.openboard.inputmethod.latin.common.LocaleUtils; @@ -44,18 +44,17 @@ import java.util.TreeSet; // packages/apps/Settings/src/com/android/settings/inputmethod/UserDictionaryList.java // in order to deal with some devices that have issues with the user dictionary handling -public class UserDictionaryList extends PreferenceFragment { +public class UserDictionaryList extends PreferenceFragmentCompat { public static final String USER_DICTIONARY_SETTINGS_INTENT_ACTION = "android.settings.USER_DICTIONARY_SETTINGS"; @Override - public void onCreate(final Bundle icicle) { - super.onCreate(icicle); + public void onCreatePreferences(@Nullable Bundle bundle, @Nullable String s) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { getPreferenceManager().setStorageDeviceProtected(); } - setPreferenceScreen(getPreferenceManager().createPreferenceScreen(getActivity())); + setPreferenceScreen(getPreferenceManager().createPreferenceScreen(requireContext())); } public static TreeSet getUserDictionaryLocalesSet(final Activity activity) { @@ -115,10 +114,12 @@ public class UserDictionaryList extends PreferenceFragment { * @param userDictGroup The group to put the settings in. */ protected void createUserDictSettings(final PreferenceGroup userDictGroup) { - final Activity activity = getActivity(); userDictGroup.removeAll(); - final TreeSet localeSet = - UserDictionaryList.getUserDictionaryLocalesSet(activity); + final TreeSet localeSet = UserDictionaryList.getUserDictionaryLocalesSet(requireActivity()); + if (localeSet == null) { + userDictGroup.addPreference(createUserDictionaryPreference(null)); + return; + } if (localeSet.size() > 1) { // Have an "All languages" entry in the languages list if there are two or more active @@ -141,7 +142,7 @@ public class UserDictionaryList extends PreferenceFragment { * @return The corresponding preference. */ protected Preference createUserDictionaryPreference(@Nullable final String localeString) { - final Preference newPref = new Preference(getActivity()); + final Preference newPref = new Preference(requireContext()); final Intent intent = new Intent(USER_DICTIONARY_SETTINGS_INTENT_ACTION); if (null == localeString) { newPref.setTitle(Locale.getDefault().getDisplayName()); diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/userdictionary/UserDictionarySettings.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/userdictionary/UserDictionarySettings.java index b04ccd6f5..2191bcaba 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/userdictionary/UserDictionarySettings.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/userdictionary/UserDictionarySettings.java @@ -159,7 +159,7 @@ public class UserDictionarySettings extends ListFragment { public void onResume() { super.onResume(); ListAdapter adapter = getListView().getAdapter(); - if (adapter != null && adapter instanceof MyAdapter) { + if (adapter instanceof MyAdapter) { // The list view is forced refreshed here. This allows the changes done // in UserDictionaryAddWordFragment (update/delete/insert) to be seen when // user goes back to this view. @@ -292,28 +292,24 @@ public class UserDictionarySettings extends ListFragment { private static class MyAdapter extends SimpleCursorAdapter implements SectionIndexer { private AlphabetIndexer mIndexer; - private ViewBinder mViewBinder = new ViewBinder() { - - @Override - public boolean setViewValue(final View v, final Cursor c, final int columnIndex) { - if (!IS_SHORTCUT_API_SUPPORTED) { - // just let SimpleCursorAdapter set the view values - return false; - } - if (columnIndex == INDEX_SHORTCUT) { - final String shortcut = c.getString(INDEX_SHORTCUT); - if (TextUtils.isEmpty(shortcut)) { - v.setVisibility(View.GONE); - } else { - ((TextView)v).setText(shortcut); - v.setVisibility(View.VISIBLE); - } - v.invalidate(); - return true; - } - + private final ViewBinder mViewBinder = (v, c, columnIndex) -> { + if (!IS_SHORTCUT_API_SUPPORTED) { + // just let SimpleCursorAdapter set the view values return false; } + if (columnIndex == INDEX_SHORTCUT) { + final String shortcut = c.getString(INDEX_SHORTCUT); + if (TextUtils.isEmpty(shortcut)) { + v.setVisibility(View.GONE); + } else { + ((TextView)v).setText(shortcut); + v.setVisibility(View.VISIBLE); + } + v.invalidate(); + return true; + } + + return false; }; public MyAdapter(final Context context, final int layout, final Cursor c,