mirror of
https://github.com/Helium314/HeliBoard.git
synced 2025-05-19 00:10:20 +00:00
load emoji keyboards only when used, and not on keyboard start
ca 30% faster keyboard loading (on first start, or when theme/color change) ca 5-10% reduced memory use may result in short loading times when an emoji tab is opened for the first time
This commit is contained in:
parent
89f8c44cfc
commit
3107144f38
4 changed files with 48 additions and 14 deletions
|
@ -265,6 +265,34 @@ public class Key implements Comparable<Key> {
|
||||||
mEnabled = key.mEnabled;
|
mEnabled = key.mEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** constructor for creating emoji recent keys when there is no keyboard to take keys from */
|
||||||
|
public Key(@NonNull final Key key, @Nullable final MoreKeySpec[] moreKeys,
|
||||||
|
@Nullable final String labelHint, final int backgroundType, final int code, @Nullable final String outputText) {
|
||||||
|
// Final attributes.
|
||||||
|
mCode = outputText == null ? code : CODE_OUTPUT_TEXT;
|
||||||
|
mLabel = outputText == null ? StringUtils.newSingleCodePointString(code) : outputText;
|
||||||
|
mHintLabel = labelHint;
|
||||||
|
mLabelFlags = key.mLabelFlags;
|
||||||
|
mIconId = key.mIconId;
|
||||||
|
mWidth = key.mWidth;
|
||||||
|
mHeight = key.mHeight;
|
||||||
|
mHorizontalGap = key.mHorizontalGap;
|
||||||
|
mVerticalGap = key.mVerticalGap;
|
||||||
|
mX = key.mX;
|
||||||
|
mY = key.mY;
|
||||||
|
mHitBox.set(key.mHitBox);
|
||||||
|
mMoreKeys = moreKeys;
|
||||||
|
mMoreKeysColumnAndFlags = key.mMoreKeysColumnAndFlags;
|
||||||
|
mBackgroundType = backgroundType;
|
||||||
|
mActionFlags = key.mActionFlags;
|
||||||
|
mKeyVisualAttributes = key.mKeyVisualAttributes;
|
||||||
|
mOptionalAttributes = outputText == null ? null : Key.OptionalAttributes.newInstance(outputText, CODE_UNSPECIFIED, ICON_UNDEFINED, 0, 0);
|
||||||
|
mHashCode = key.mHashCode;
|
||||||
|
// Key state.
|
||||||
|
mPressed = key.mPressed;
|
||||||
|
mEnabled = key.mEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
/** constructor from KeyParams */
|
/** constructor from KeyParams */
|
||||||
private Key(KeyParams keyParams) {
|
private Key(KeyParams keyParams) {
|
||||||
// stuff to copy
|
// stuff to copy
|
||||||
|
|
|
@ -158,7 +158,7 @@ final class DynamicGridKeyboard extends Keyboard {
|
||||||
Settings.writeEmojiRecentKeys(mPrefs, jsonStr);
|
Settings.writeEmojiRecentKeys(mPrefs, jsonStr);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Key getKeyByCode(final Collection<DynamicGridKeyboard> keyboards,
|
private Key getKeyByCode(final Collection<DynamicGridKeyboard> keyboards,
|
||||||
final int code) {
|
final int code) {
|
||||||
for (final DynamicGridKeyboard keyboard : keyboards) {
|
for (final DynamicGridKeyboard keyboard : keyboards) {
|
||||||
for (final Key key : keyboard.getSortedKeys()) {
|
for (final Key key : keyboard.getSortedKeys()) {
|
||||||
|
@ -167,10 +167,12 @@ final class DynamicGridKeyboard extends Keyboard {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
|
||||||
|
// fall back to creating the key
|
||||||
|
return new Key(getTemplateKey(TEMPLATE_KEY_CODE_0), null, null, Key.BACKGROUND_TYPE_EMPTY, code, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Key getKeyByOutputText(final Collection<DynamicGridKeyboard> keyboards,
|
private Key getKeyByOutputText(final Collection<DynamicGridKeyboard> keyboards,
|
||||||
final String outputText) {
|
final String outputText) {
|
||||||
for (final DynamicGridKeyboard keyboard : keyboards) {
|
for (final DynamicGridKeyboard keyboard : keyboards) {
|
||||||
for (final Key key : keyboard.getSortedKeys()) {
|
for (final Key key : keyboard.getSortedKeys()) {
|
||||||
|
@ -179,7 +181,9 @@ final class DynamicGridKeyboard extends Keyboard {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
|
||||||
|
// fall back to creating the key
|
||||||
|
return new Key(getTemplateKey(TEMPLATE_KEY_CODE_0), null, null, Key.BACKGROUND_TYPE_EMPTY, 0, outputText);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void loadRecentKeys(final Collection<DynamicGridKeyboard> keyboards) {
|
public void loadRecentKeys(final Collection<DynamicGridKeyboard> keyboards) {
|
||||||
|
|
|
@ -48,10 +48,14 @@ final class EmojiCategory {
|
||||||
|
|
||||||
public final class CategoryProperties {
|
public final class CategoryProperties {
|
||||||
public final int mCategoryId;
|
public final int mCategoryId;
|
||||||
public final int mPageCount;
|
private int mPageCount = -1;
|
||||||
public CategoryProperties(final int categoryId, final int pageCount) {
|
public CategoryProperties(final int categoryId) {
|
||||||
mCategoryId = categoryId;
|
mCategoryId = categoryId;
|
||||||
mPageCount = pageCount;
|
}
|
||||||
|
public int getPageCount() {
|
||||||
|
if (mPageCount < 0)
|
||||||
|
mPageCount = computeCategoryPageCount(mCategoryId);
|
||||||
|
return mPageCount;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -147,8 +151,7 @@ final class EmojiCategory {
|
||||||
}
|
}
|
||||||
addShownCategoryId(EmojiCategory.ID_EMOTICONS);
|
addShownCategoryId(EmojiCategory.ID_EMOTICONS);
|
||||||
|
|
||||||
DynamicGridKeyboard recentsKbd =
|
DynamicGridKeyboard recentsKbd = getKeyboard(EmojiCategory.ID_RECENTS, 0);
|
||||||
getKeyboard(EmojiCategory.ID_RECENTS, 0 /* categoryPageId */);
|
|
||||||
recentsKbd.loadRecentKeys(mCategoryKeyboardMap.values());
|
recentsKbd.loadRecentKeys(mCategoryKeyboardMap.values());
|
||||||
|
|
||||||
mCurrentCategoryId = Settings.readLastShownEmojiCategoryId(mPrefs, defaultCategoryId);
|
mCurrentCategoryId = Settings.readLastShownEmojiCategoryId(mPrefs, defaultCategoryId);
|
||||||
|
@ -167,9 +170,7 @@ final class EmojiCategory {
|
||||||
|
|
||||||
private void addShownCategoryId(final int categoryId) {
|
private void addShownCategoryId(final int categoryId) {
|
||||||
// Load a keyboard of categoryId
|
// Load a keyboard of categoryId
|
||||||
getKeyboard(categoryId, 0 /* categoryPageId */);
|
final CategoryProperties properties = new CategoryProperties(categoryId);
|
||||||
final CategoryProperties properties =
|
|
||||||
new CategoryProperties(categoryId, computeCategoryPageCount(categoryId));
|
|
||||||
mShownCategories.add(properties);
|
mShownCategories.add(properties);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -214,7 +215,7 @@ final class EmojiCategory {
|
||||||
public int getCategoryPageCount(final int categoryId) {
|
public int getCategoryPageCount(final int categoryId) {
|
||||||
for (final CategoryProperties prop : mShownCategories) {
|
for (final CategoryProperties prop : mShownCategories) {
|
||||||
if (prop.mCategoryId == categoryId) {
|
if (prop.mCategoryId == categoryId) {
|
||||||
return prop.mPageCount;
|
return prop.getPageCount();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Log.w(TAG, "Invalid category id: " + categoryId);
|
Log.w(TAG, "Invalid category id: " + categoryId);
|
||||||
|
@ -258,7 +259,7 @@ final class EmojiCategory {
|
||||||
if (props.mCategoryId == categoryId) {
|
if (props.mCategoryId == categoryId) {
|
||||||
return sum + categoryPageId;
|
return sum + categoryPageId;
|
||||||
}
|
}
|
||||||
sum += props.mPageCount;
|
sum += props.getPageCount();
|
||||||
}
|
}
|
||||||
Log.w(TAG, "categoryId not found: " + categoryId);
|
Log.w(TAG, "categoryId not found: " + categoryId);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-only
|
||||||
package org.dslul.openboard.inputmethod.keyboard.internal.keyboard_parser
|
package org.dslul.openboard.inputmethod.keyboard.internal.keyboard_parser
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue