some adjustments / lint / unused code

This commit is contained in:
Helium314 2024-01-29 14:32:51 +01:00
parent e98d8fa092
commit 2f5e3230d0
21 changed files with 91 additions and 156 deletions

View file

@ -3,4 +3,5 @@ IMPORTANT: The package will be renamed soon. To avoid merge conflicts, please do
* Please bescribe briefly what your pull request proposes to fix or improve.
* If it's not completely obvious, describe what the PR does to achieve the desired result.
* If you use someone else's code, please mention or better link to the source.
* See the contributing section in the readme for more detailed guidelines
-->

View file

@ -1,6 +1,18 @@
# OpenBoard upgrade, WIP
IMPORTANT: The package will be renamed soon. To avoid merge conflicts, please do not submit any PRs until the renaming is done.
## Table of contents
- [Features](#features)
* [Hidden functionality](#hidden-functionality)
- [Contributing](#contributing-)
* [Reporting issues](#reporting-issues)
* [Translation](#translation)
* [Dictionary creation](#dictionary-creation)
* [Code contribution](#code-contribution)
- [License](#license)
- [Credits](#credits)
## Plan for actual release
The plans for major changes are completed, and most features appear to be stable enough for a proper release.
So what comes next:
@ -57,7 +69,7 @@ Features that may go unnoticed, and further potentially useful information
# Contributing ❤
## Issue reporting
## Reporting issues
Whether you encountered a bug, or want to see a new feature in OpenBoard, you can contribute to the project by opening a new issue [here](https://github.com/openboard-team/openboard/issues). Your help is always welcome!
@ -78,16 +90,22 @@ IMPORTANT: The package will be renamed soon. To avoid merge conflicts, please do
### Getting started
OpenBoard project is based on Gradle and Android Gradle Plugin. To get started, you'll just need to install [Android Studio](https://developer.android.com/studio), and import project 'from Version Control / Git / Github' by providing this git repository [URL](https://github.com/Helium314/openboard) (or git SSH [URL](git@github.com:Helium314/openboard.git)).
OpenBoard project is based on Gradle and Android Gradle Plugin. To get started, you can install [Android Studio](https://developer.android.com/studio), and import project 'from Version Control / Git / Github' by providing this git repository [URL](https://github.com/Helium314/openboard) (or git SSH [URL](git@github.com:Helium314/openboard.git)).
Of course you can also use any other compatible IDE, or work with text editor and command line.
Once everything got setted up correctly, you're ready to go!
Once everything is up correctly, you're ready to go!
### Guidelines
OpenBoard is a complex application, when contributing, you must take a step back and make sure your contribution:
- **Is actually wanted**. Best check related open issues before you start working on a PR. Issues with "PR" and "contributor needed" labels are accepted, but still it would be good if you announced that you are working on it.
If there is no issue related to your intended contribution, it's a good idea to open a new one to avoid disappointment of the contribution not being accepted. For small changes or fixing obvious bugs this step is not necessary.
- **Is only about a single thing**. Mixing unrelated contributions into a single PR is hard to review and can get messy.
- **Has a proper description**. What your coutribution does is usually less obvious to reviewers than for yourself. A good description helps a lot for understanding what is going on, and for separating wanted from unintended changes in behavior.
- **Uses already in-place mechanism and take advantage of them**. In other terms, does not reinvent the wheel or uses shortcuts that could alter the consistency of the existing code.
- **Has the lowest footprint possible**. OpenBoard code has been written by android experts (AOSP/Google engineers). It has been tested and runned on millions of devices. Thus, **existing code will always be safer than new code**. The less we alter existing code, the more OpenBoard will stay stable. Especially in the input logic scope.
- **Has a low footprint**. Some parts of the code are executed very frequently, and the keyboard should stay responsive even on older devices.
- **Does not bring any non-free code or proprietary binary blobs**. This also applies to code/binaries with unknown licenses. Make sure you do not introduce any closed-source library from Google.
If your contribution contains code that is not your own, provide a link to the source.
- **Complies with the user privacy principle OpenBoard follows**.
In addition to previous elements, OpenBoard must stick to [F-Droid inclusion guidelines](https://f-droid.org/docs/Inclusion_Policy/).

View file

@ -20,6 +20,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
public class ProximityInfo {
private static final String TAG = ProximityInfo.class.getSimpleName();
@ -192,7 +193,7 @@ public class ProximityInfo {
touchPositionCorrection.getRadius(row) * hitBoxDiagonal;
}
if (DEBUG) {
Log.d(TAG, String.format(
Log.d(TAG, String.format(Locale.US,
" [%2d] row=%d x/y/r=%7.2f/%7.2f/%5.2f %s code=%s", infoIndex, row,
sweetSpotCenterXs[infoIndex], sweetSpotCenterYs[infoIndex],
sweetSpotRadii[infoIndex], (row < rows ? "correct" : "default"),

View file

@ -2,6 +2,7 @@
package org.dslul.openboard.inputmethod.keyboard.clipboard
import android.annotation.SuppressLint
import android.graphics.Typeface
import android.util.TypedValue
import android.view.LayoutInflater
@ -79,11 +80,11 @@ class ClipboardAdapter(
pinnedIconView.visibility = if (historyEntry?.isPinned == true) View.VISIBLE else View.GONE
}
@SuppressLint("ClickableViewAccessibility")
override fun onTouch(view: View, event: MotionEvent): Boolean {
if (event.actionMasked != MotionEvent.ACTION_DOWN) {
return false
}
if (event.actionMasked == MotionEvent.ACTION_DOWN) {
keyEventListener.onKeyDown(view.tag as Long)
}
return false
}

View file

@ -9,7 +9,6 @@ import org.dslul.openboard.inputmethod.latin.settings.Settings
import org.dslul.openboard.inputmethod.latin.settings.USER_DICTIONARY_SUFFIX
import org.dslul.openboard.inputmethod.latin.utils.DeviceProtectedUtils
import org.dslul.openboard.inputmethod.latin.utils.DictionaryInfoUtils
import org.dslul.openboard.inputmethod.latin.utils.Log
import org.dslul.openboard.inputmethod.latin.utils.upgradeToolbarPref
import java.io.File
@ -34,12 +33,11 @@ class App : Application() {
fun checkVersionUpgrade(context: Context) {
val prefs = DeviceProtectedUtils.getSharedPreferences(context)
val oldVersion = prefs.getInt(Settings.PREF_VERSION_CODE, 0)
Log.i("test", "old version $oldVersion")
if (oldVersion == BuildConfig.VERSION_CODE)
return
upgradeToolbarPref(prefs)
// clear extracted dictionaries, in case updated version contains newer ones
DictionaryInfoUtils.getCachedDirectoryList(context).forEach {
DictionaryInfoUtils.getCachedDirectoryList(context)?.forEach {
if (!it.isDirectory) return@forEach
val files = it.listFiles() ?: return@forEach
for (file in files) {

View file

@ -1,60 +0,0 @@
/*
* Copyright (C) 2011 The Android Open Source Project
* modified
* SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only
*/
package org.dslul.openboard.inputmethod.latin;
import org.dslul.openboard.inputmethod.latin.common.FileUtils;
import java.io.File;
/**
* Immutable class to hold the address of an asset.
* As opposed to a normal file, an asset is usually represented as a contiguous byte array in
* the package file. Open it correctly thus requires the name of the package it is in, but
* also the offset in the file and the length of this data. This class encapsulates these three.
*/
public final class AssetFileAddress {
public final String mFilename;
public final long mOffset;
public final long mLength;
public AssetFileAddress(final String filename, final long offset, final long length) {
mFilename = filename;
mOffset = offset;
mLength = length;
}
public static AssetFileAddress makeFromFile(final File file) {
if (!file.isFile()) return null;
return new AssetFileAddress(file.getAbsolutePath(), 0L, file.length());
}
public static AssetFileAddress makeFromFileName(final String filename) {
if (null == filename) return null;
return makeFromFile(new File(filename));
}
public static AssetFileAddress makeFromFileNameAndOffset(final String filename,
final long offset, final long length) {
if (null == filename) return null;
final File f = new File(filename);
if (!f.isFile()) return null;
return new AssetFileAddress(filename, offset, length);
}
public boolean pointsToPhysicalFile() {
return 0 == mOffset;
}
public void deleteUnderlyingFile() {
FileUtils.deleteRecursively(new File(mFilename));
}
@Override
public String toString() {
return String.format("%s (offset=%d, length=%d)", mFilename, mOffset, mLength);
}
}

View file

@ -13,7 +13,7 @@ import android.content.SharedPreferences;
import android.os.Bundle;
import androidx.appcompat.app.AlertDialog;
import androidx.preference.SwitchPreferenceCompat;
import androidx.preference.SwitchPreference;
import androidx.preference.TwoStatePreference;
import org.dslul.openboard.inputmethod.latin.R;
@ -25,7 +25,7 @@ public final class CorrectionSettingsFragment extends SubScreenFragment
implements SharedPreferences.OnSharedPreferenceChangeListener,
PermissionsManager.PermissionsResultCallback {
private SwitchPreferenceCompat mLookupContactsPreference;
private SwitchPreference mLookupContactsPreference;
@Override
public void onCreate(final Bundle icicle) {

View file

@ -11,14 +11,14 @@ import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.TextUtils;
import androidx.preference.SwitchPreference;
import org.dslul.openboard.inputmethod.latin.R;
import org.dslul.openboard.inputmethod.latin.permissions.PermissionsManager;
import org.dslul.openboard.inputmethod.latin.permissions.PermissionsUtil;
import org.dslul.openboard.inputmethod.latin.settings.SubScreenFragment;
import org.dslul.openboard.inputmethod.latin.utils.ActivityThemeUtils;
import androidx.preference.SwitchPreferenceCompat;
/**
* Preference screen.
*/
@ -26,7 +26,7 @@ public final class SpellCheckerSettingsFragment extends SubScreenFragment
implements SharedPreferences.OnSharedPreferenceChangeListener,
PermissionsManager.PermissionsResultCallback {
private SwitchPreferenceCompat mLookupContactsPreference;
private SwitchPreference mLookupContactsPreference;
@Override
public void onCreate(Bundle savedInstanceState) {

View file

@ -1,21 +0,0 @@
/*
* Copyright (C) 2015 The Android Open Source Project
* modified
* SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only
*/
package org.dslul.openboard.inputmethod.latin.utils;
import org.dslul.openboard.inputmethod.latin.AssetFileAddress;
import org.dslul.openboard.inputmethod.latin.makedict.DictionaryHeader;
import java.io.File;
public class DictionaryHeaderUtils {
public static int getContentVersion(AssetFileAddress fileAddress) {
final DictionaryHeader header = DictionaryInfoUtils.getDictionaryFileHeaderOrNull(
new File(fileAddress.mFilename), fileAddress.mOffset, fileAddress.mLength);
return Integer.parseInt(header.mVersionString);
}
}

View file

@ -110,7 +110,7 @@ public class DictionaryInfoUtils {
/**
* Helper method to the list of cache directories, one for each distinct locale.
*/
public static File[] getCachedDirectoryList(final Context context) {
@Nullable public static File[] getCachedDirectoryList(final Context context) {
return new File(DictionaryInfoUtils.getWordListCacheDirectory(context)).listFiles();
}

View file

@ -19,15 +19,12 @@ fun getDictionaryLocales(context: Context): MutableSet<Locale> {
val locales = HashSet<Locale>()
// get cached dictionaries: extracted or user-added dictionaries
val cachedDirectoryList = DictionaryInfoUtils.getCachedDirectoryList(context)
if (cachedDirectoryList != null) {
for (directory in cachedDirectoryList) {
if (!directory.isDirectory) continue
if (!hasAnythingOtherThanExtractedMainDictionary(directory)) continue
DictionaryInfoUtils.getCachedDirectoryList(context)?.forEach { directory ->
if (!directory.isDirectory) return@forEach
if (!hasAnythingOtherThanExtractedMainDictionary(directory)) return@forEach
val locale = DictionaryInfoUtils.getWordListIdFromFileName(directory.name).constructLocale()
locales.add(locale)
}
}
// get assets dictionaries
val assetsDictionaryList = DictionaryInfoUtils.getAssetsDictionaryList(context)
if (assetsDictionaryList != null) {
@ -70,8 +67,8 @@ fun cleanUnusedMainDicts(context: Context) {
val dirs = dictionaryDir.listFiles() ?: return
val prefs = DeviceProtectedUtils.getSharedPreferences(context)
val usedLocaleLanguageTags = hashSetOf<String>()
getEnabledSubtypes(prefs).forEach {
val locale = it.locale()
getEnabledSubtypes(prefs).forEach { subtype ->
val locale = subtype.locale()
usedLocaleLanguageTags.add(locale.toLanguageTag())
Settings.getSecondaryLocales(prefs, locale).forEach { usedLocaleLanguageTags.add(it.toLanguageTag()) }
}

View file

@ -17,7 +17,6 @@
# Keep classes that are used as a parameter type of methods that are also marked as keep
# to preserve changing those methods' signature.
-keep class org.dslul.openboard.inputmethod.latin.AssetFileAddress
-keep class org.dslul.openboard.inputmethod.latin.Dictionary
-keep class org.dslul.openboard.inputmethod.latin.NgramContext
-keep class org.dslul.openboard.inputmethod.latin.makedict.ProbabilityInfo

View file

@ -18,7 +18,8 @@
app:tint="@color/foreground"
android:layout_gravity="center_vertical"
android:layout_width="40dp"
android:layout_height="40dp" />
android:layout_height="40dp"
android:contentDescription="@string/label_search_key" />
<EditText
android:id="@+id/search_field"
android:layout_marginHorizontal="6dp"
@ -26,7 +27,8 @@
android:maxLines="1"
android:imeOptions="actionDone"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
android:layout_height="wrap_content"
android:autofillHints="language" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"

View file

@ -10,7 +10,7 @@
android:title="@string/settings_screen_advanced"
android:key="screen_advanced">
<SwitchPreferenceCompat
<SwitchPreference
android:key="always_incognito_mode"
android:title="@string/incognito"
android:summary="@string/prefs_force_incognito_mode_summary"
@ -23,33 +23,33 @@
latin:maxValue="@integer/config_max_longpress_timeout"
latin:stepValue="@integer/config_longpress_timeout_step" />
<SwitchPreferenceCompat
<SwitchPreference
android:key="space_trackpad"
android:title="@string/space_trackpad"
android:summary="@string/space_trackpad_summary"
android:defaultValue="true" />
<SwitchPreferenceCompat
<SwitchPreference
android:key="delete_swipe"
android:title="@string/delete_swipe"
android:summary="@string/delete_swipe_summary"
android:defaultValue="true" />
<SwitchPreferenceCompat
<SwitchPreference
android:key="prefs_long_press_keyboard_to_change_lang"
android:title="@string/prefs_long_press_keyboard_to_change_lang"
android:summary="@string/prefs_long_press_keyboard_to_change_lang_summary"
android:persistent="true"
android:defaultValue="true" />
<SwitchPreferenceCompat
<SwitchPreference
android:key="enable_emoji_alt_physical_key"
android:title="@string/prefs_enable_emoji_alt_physical_key"
android:summary="@string/prefs_enable_emoji_alt_physical_key_summary"
android:defaultValue="true"
android:persistent="true" />
<SwitchPreferenceCompat
<SwitchPreference
android:key="show_setup_wizard_icon"
android:title="@string/show_setup_wizard_icon"
android:summary="@string/show_setup_wizard_icon_summary"
@ -79,13 +79,13 @@
<PreferenceCategory
android:title="@string/settings_category_experimental">
<SwitchPreferenceCompat
<SwitchPreference
android:key="space_language_slide"
android:title="@string/space_language_slide"
android:summary="@string/space_language_slide_summary"
android:defaultValue="false" />
<SwitchPreferenceCompat
<SwitchPreference
android:key="url_detection"
android:title="@string/url_detection_title"
android:summary="@string/url_detection_summary"

View file

@ -28,11 +28,11 @@
android:title="@string/select_user_colors"
android:summary="@string/select_user_colors_summary"/>
<SwitchPreferenceCompat
<SwitchPreference
android:key="theme_key_borders"
android:title="@string/key_borders"/>
<SwitchPreferenceCompat
<SwitchPreference
android:key="theme_auto_day_night"
android:title="@string/day_night_mode"
android:defaultValue="@bool/day_night_default"
@ -48,7 +48,7 @@
android:title="@string/select_user_colors_night"
android:summary="@string/select_user_colors_summary"/>
<SwitchPreferenceCompat
<SwitchPreference
android:key="navbar_color"
android:title="@string/theme_navbar"/>
@ -57,7 +57,7 @@
<PreferenceCategory
android:title="@string/settings_category_miscellaneous">
<SwitchPreferenceCompat
<SwitchPreference
android:key="split_keyboard"
android:title="@string/enable_split_keyboard"
android:persistent="true"
@ -69,7 +69,7 @@
latin:minValue="50"
latin:maxValue="200" /> <!-- percentage -->
<SwitchPreferenceCompat
<SwitchPreference
android:key="narrow_key_gaps"
android:title="@string/prefs_narrow_key_gaps"
android:defaultValue="true"

View file

@ -17,21 +17,21 @@
<PreferenceCategory
android:title="@string/settings_category_correction">
<SwitchPreferenceCompat
<SwitchPreference
android:key="block_potentially_offensive"
android:title="@string/prefs_block_potentially_offensive_title"
android:summary="@string/prefs_block_potentially_offensive_summary"
android:defaultValue="@bool/config_block_potentially_offensive"
android:persistent="true" />
<SwitchPreferenceCompat
<SwitchPreference
android:key="auto_correction"
android:title="@string/autocorrect"
android:summary="@string/auto_correction_summary"
android:defaultValue="true"
android:persistent="true" />
<SwitchPreferenceCompat
<SwitchPreference
android:key="more_auto_correction"
android:title="@string/more_autocorrect"
android:summary="@string/more_autocorrect_summary"
@ -46,21 +46,21 @@
android:entryValues="@array/auto_correction_threshold_mode_indexes"
android:defaultValue="@string/auto_correction_threshold_mode_index_modest" />
<SwitchPreferenceCompat
<SwitchPreference
android:key="auto_cap"
android:title="@string/auto_cap"
android:summary="@string/auto_cap_summary"
android:defaultValue="true"
android:persistent="true" />
<SwitchPreferenceCompat
<SwitchPreference
android:key="use_double_space_period"
android:title="@string/use_double_space_period"
android:summary="@string/use_double_space_period_summary"
android:defaultValue="true"
android:persistent="true" />
<SwitchPreferenceCompat
<SwitchPreference
android:key="autospace_after_punctuation"
android:title="@string/autospace_after_punctuation"
android:summary="@string/autospace_after_punctuation_summary"
@ -71,42 +71,42 @@
<PreferenceCategory
android:title="@string/settings_category_suggestions">
<SwitchPreferenceCompat
<SwitchPreference
android:key="show_suggestions"
android:summary="@string/prefs_show_suggestions_summary"
android:title="@string/prefs_show_suggestions"
android:defaultValue="true"
android:persistent="true" />
<SwitchPreferenceCompat
<SwitchPreference
android:key="always_show_suggestions"
android:title="@string/prefs_always_show_suggestions"
android:summary="@string/prefs_always_show_suggestions_summary"
android:defaultValue="false"
android:persistent="true" />
<SwitchPreferenceCompat
<SwitchPreference
android:key="use_personalized_dicts"
android:title="@string/use_personalized_dicts"
android:summary="@string/use_personalized_dicts_summary"
android:defaultValue="true"
android:persistent="true" />
<SwitchPreferenceCompat
<SwitchPreference
android:key="next_word_prediction"
android:title="@string/bigram_prediction"
android:summary="@string/bigram_prediction_summary"
android:defaultValue="true"
android:persistent="true" />
<SwitchPreferenceCompat
<SwitchPreference
android:key="spellcheck_use_contacts"
android:title="@string/use_contacts_dict"
android:summary="@string/use_contacts_dict_summary"
android:defaultValue="true"
android:persistent="true" />
<SwitchPreferenceCompat
<SwitchPreference
android:key="add_to_personal_dictionary"
android:title="@string/add_to_personal_dictionary"
android:summary="@string/add_to_personal_dictionary_summary"

View file

@ -9,26 +9,26 @@
android:title="@string/debug_settings_title"
android:key="english_ime_debug_settings"
>
<SwitchPreferenceCompat
<SwitchPreference
android:key="show_debug_settings"
android:title="@string/prefs_show_debug_settings"
android:persistent="true" />
<SwitchPreferenceCompat
<SwitchPreference
android:key="debug_mode"
android:title="@string/prefs_debug_mode"
android:defaultValue="false"
android:persistent="true" />
<SwitchPreferenceCompat
<SwitchPreference
android:key="show_suggestion_infos"
android:title="@string/prefs_show_suggestion_infos"
android:defaultValue="false"
android:persistent="true" />
<SwitchPreferenceCompat
<SwitchPreference
android:key="force_non_distinct_multitouch"
android:title="@string/prefs_force_non_distinct_multitouch"
android:defaultValue="false"
android:persistent="true" />
<SwitchPreferenceCompat
<SwitchPreference
android:key="sliding_key_input_preview"
android:title="@string/sliding_key_input_preview"
android:summary="@string/sliding_key_input_preview_summary"

View file

@ -8,24 +8,24 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/settings_screen_gesture"
android:key="screen_gesture">
<SwitchPreferenceCompat
<SwitchPreference
android:key="gesture_input"
android:title="@string/gesture_input"
android:summary="@string/gesture_input_summary"
android:defaultValue="true"
android:persistent="true" />
<SwitchPreferenceCompat
<SwitchPreference
android:key="gesture_floating_preview_text"
android:title="@string/gesture_floating_preview_text"
android:summary="@string/gesture_floating_preview_text_summary"
android:defaultValue="true"
android:persistent="true" />
<SwitchPreferenceCompat
<SwitchPreference
android:key="gesture_preview_trail"
android:title="@string/gesture_preview_trail"
android:defaultValue="true"
android:persistent="true" />
<SwitchPreferenceCompat
<SwitchPreference
android:key="gesture_space_aware"
android:title="@string/gesture_space_aware"
android:summary="@string/gesture_space_aware_summary"

View file

@ -10,7 +10,7 @@
<PreferenceCategory android:title="@string/settings_category_input">
<SwitchPreferenceCompat
<SwitchPreference
android:key="show_hints"
android:title="@string/show_hints"
android:summary="@string/show_hints_summary"
@ -25,14 +25,14 @@
android:key="more_keys_order"
android:title="@string/popup_order" />
<SwitchPreferenceCompat
<SwitchPreference
android:key="show_popup_hints"
android:title="@string/show_popup_hints"
android:summary="@string/show_popup_hints_summary"
android:defaultValue="false"
android:persistent="true" />
<SwitchPreferenceCompat
<SwitchPreference
android:key="vibrate_on"
android:title="@string/vibrate_on_keypress"
android:defaultValue="@bool/config_default_vibration_enabled"
@ -43,7 +43,7 @@
android:title="@string/prefs_keypress_vibration_duration_settings"
latin:maxValue="@integer/config_max_vibration_duration" />
<SwitchPreferenceCompat
<SwitchPreference
android:key="sound_on"
android:title="@string/sound_on_keypress"
android:defaultValue="@bool/config_default_sound_enabled"
@ -56,7 +56,7 @@
</PreferenceCategory>
<SwitchPreferenceCompat
<SwitchPreference
android:key="popup_on"
android:title="@string/popup_on_keypress"
android:defaultValue="@bool/config_default_key_preview_popup"
@ -65,14 +65,14 @@
<PreferenceCategory
android:title="@string/settings_category_additional_keys">
<SwitchPreferenceCompat
<SwitchPreference
android:key="show_number_row"
android:title="@string/number_row"
android:summary="@string/number_row_summary"
android:defaultValue="false"
android:persistent="true" />
<SwitchPreferenceCompat
<SwitchPreference
android:key="localized_number_row"
android:title="@string/localized_number_row"
android:summary="@string/localized_number_row_summary"
@ -88,7 +88,7 @@
android:summary="%s"
android:persistent="true" />
<SwitchPreferenceCompat
<SwitchPreference
android:key="show_emoji_key"
android:title="@string/show_emoji_key"
android:defaultValue="false"
@ -102,7 +102,7 @@
<PreferenceCategory android:title="@string/settings_category_clipboard_history">
<SwitchPreferenceCompat
<SwitchPreference
android:key="enable_clipboard_history"
android:title="@string/enable_clipboard_history"
android:summary="@string/enable_clipboard_history_summary"

View file

@ -8,7 +8,7 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/android_spell_checker_settings"
>
<SwitchPreferenceCompat
<SwitchPreference
android:key="spellcheck_use_contacts"
android:title="@string/use_contacts_for_spellchecking_option_title"
android:summary="@string/use_contacts_for_spellchecking_option_summary"

View file

@ -1,3 +1,2 @@
include ':app'
include ':tools:make-keyboard-text'
include ':tools:make-emoji-keys'