mirror of
https://github.com/Helium314/HeliBoard.git
synced 2025-06-24 18:10:54 +00:00
Merge branch 'dslul:master' into master
This commit is contained in:
commit
9342748335
78 changed files with 929 additions and 386 deletions
|
@ -76,6 +76,15 @@ final class DynamicGridKeyboard extends Keyboard {
|
||||||
throw new RuntimeException("Can't find template key: code=" + code);
|
throw new RuntimeException("Can't find template key: code=" + code);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getDynamicOccupiedHeight() {
|
||||||
|
final int row = (mGridKeys.size() - 1) / mColumnsNum + 1;
|
||||||
|
return row * mVerticalStep;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getColumnsCount() {
|
||||||
|
return mColumnsNum;
|
||||||
|
}
|
||||||
|
|
||||||
public void addPendingKey(final Key usedKey) {
|
public void addPendingKey(final Key usedKey) {
|
||||||
synchronized (mLock) {
|
synchronized (mLock) {
|
||||||
mPendingKeys.addLast(usedKey);
|
mPendingKeys.addLast(usedKey);
|
||||||
|
|
|
@ -21,9 +21,7 @@ import android.content.res.Resources;
|
||||||
import android.content.res.TypedArray;
|
import android.content.res.TypedArray;
|
||||||
import android.graphics.Paint;
|
import android.graphics.Paint;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
import android.os.Build;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.util.Pair;
|
|
||||||
|
|
||||||
import androidx.core.graphics.PaintCompat;
|
import androidx.core.graphics.PaintCompat;
|
||||||
import org.dslul.openboard.inputmethod.keyboard.Key;
|
import org.dslul.openboard.inputmethod.keyboard.Key;
|
||||||
|
@ -56,6 +54,8 @@ final class EmojiCategory {
|
||||||
private static final int ID_FLAGS = 9;
|
private static final int ID_FLAGS = 9;
|
||||||
private static final int ID_EMOTICONS = 10;
|
private static final int ID_EMOTICONS = 10;
|
||||||
|
|
||||||
|
private static final int MAX_LINE_COUNT_PER_PAGE = 3;
|
||||||
|
|
||||||
public final class CategoryProperties {
|
public final class CategoryProperties {
|
||||||
public final int mCategoryId;
|
public final int mCategoryId;
|
||||||
public final int mPageCount;
|
public final int mPageCount;
|
||||||
|
@ -119,7 +119,7 @@ final class EmojiCategory {
|
||||||
|
|
||||||
private final SharedPreferences mPrefs;
|
private final SharedPreferences mPrefs;
|
||||||
private final Resources mRes;
|
private final Resources mRes;
|
||||||
private final int mMaxPageKeyCount;
|
private final int mMaxRecentsKeyCount;
|
||||||
private final KeyboardLayoutSet mLayoutSet;
|
private final KeyboardLayoutSet mLayoutSet;
|
||||||
private final HashMap<String, Integer> mCategoryNameToIdMap = new HashMap<>();
|
private final HashMap<String, Integer> mCategoryNameToIdMap = new HashMap<>();
|
||||||
private final int[] mCategoryTabIconId = new int[sCategoryName.length];
|
private final int[] mCategoryTabIconId = new int[sCategoryName.length];
|
||||||
|
@ -134,7 +134,7 @@ final class EmojiCategory {
|
||||||
final KeyboardLayoutSet layoutSet, final TypedArray emojiPaletteViewAttr) {
|
final KeyboardLayoutSet layoutSet, final TypedArray emojiPaletteViewAttr) {
|
||||||
mPrefs = prefs;
|
mPrefs = prefs;
|
||||||
mRes = res;
|
mRes = res;
|
||||||
mMaxPageKeyCount = res.getInteger(R.integer.config_emoji_keyboard_max_page_key_count);
|
mMaxRecentsKeyCount = res.getInteger(R.integer.config_emoji_keyboard_max_recents_key_count);
|
||||||
mLayoutSet = layoutSet;
|
mLayoutSet = layoutSet;
|
||||||
for (int i = 0; i < sCategoryName.length; ++i) {
|
for (int i = 0; i < sCategoryName.length; ++i) {
|
||||||
mCategoryNameToIdMap.put(sCategoryName[i], i);
|
mCategoryNameToIdMap.put(sCategoryName[i], i);
|
||||||
|
@ -170,7 +170,7 @@ final class EmojiCategory {
|
||||||
mCurrentCategoryId = defaultCategoryId;
|
mCurrentCategoryId = defaultCategoryId;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mCurrentCategoryPageId >= getCategoryPageCount(mCurrentCategoryId)) {
|
if (mCurrentCategoryPageId >= computeCategoryPageCount(mCurrentCategoryId)) {
|
||||||
mCurrentCategoryPageId = 0;
|
mCurrentCategoryPageId = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -179,7 +179,7 @@ final class EmojiCategory {
|
||||||
// Load a keyboard of categoryId
|
// Load a keyboard of categoryId
|
||||||
getKeyboard(categoryId, 0 /* categoryPageId */);
|
getKeyboard(categoryId, 0 /* categoryPageId */);
|
||||||
final CategoryProperties properties =
|
final CategoryProperties properties =
|
||||||
new CategoryProperties(categoryId, getCategoryPageCount(categoryId));
|
new CategoryProperties(categoryId, computeCategoryPageCount(categoryId));
|
||||||
mShownCategories.add(properties);
|
mShownCategories.add(properties);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -217,11 +217,11 @@ final class EmojiCategory {
|
||||||
return mCurrentCategoryId;
|
return mCurrentCategoryId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getCurrentCategoryPageSize() {
|
public int getCurrentCategoryPageCount() {
|
||||||
return getCategoryPageSize(mCurrentCategoryId);
|
return getCategoryPageCount(mCurrentCategoryId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getCategoryPageSize(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.mPageCount;
|
||||||
|
@ -283,38 +283,21 @@ final class EmojiCategory {
|
||||||
return getTabIdFromCategoryId(EmojiCategory.ID_RECENTS);
|
return getTabIdFromCategoryId(EmojiCategory.ID_RECENTS);
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getCategoryPageCount(final int categoryId) {
|
private int computeCategoryPageCount(final int categoryId) {
|
||||||
final Keyboard keyboard = mLayoutSet.getKeyboard(sCategoryElementId[categoryId]);
|
final Keyboard keyboard = mLayoutSet.getKeyboard(sCategoryElementId[categoryId]);
|
||||||
return (keyboard.getSortedKeys().size() - 1) / mMaxPageKeyCount + 1;
|
return (keyboard.getSortedKeys().size() - 1) / computeMaxKeyCountPerPage() + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns a pair of the category id and the category page id from the view pager's page
|
// Returns a keyboard from the recycler view's adapter position.
|
||||||
// position. The category page id is numbered in each category. And the view page position
|
public DynamicGridKeyboard getKeyboardFromAdapterPosition(final int position) {
|
||||||
// is the position of the current shown page in the view pager which contains all pages of
|
if (position >= 0 && position < getCurrentCategoryPageCount()) {
|
||||||
// all categories.
|
return getKeyboard(mCurrentCategoryId, position);
|
||||||
public Pair<Integer, Integer> getCategoryIdAndPageIdFromPagePosition(final int position) {
|
|
||||||
int sum = 0;
|
|
||||||
for (final CategoryProperties properties : mShownCategories) {
|
|
||||||
final int temp = sum;
|
|
||||||
sum += properties.mPageCount;
|
|
||||||
if (sum > position) {
|
|
||||||
return new Pair<>(properties.mCategoryId, position - temp);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Log.w(TAG, "invalid position for categoryId : " + mCurrentCategoryId);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns a keyboard from the view pager's page position.
|
private static Long getCategoryKeyboardMapKey(final int categoryId, final int id) {
|
||||||
public DynamicGridKeyboard getKeyboardFromPagePosition(final int position) {
|
|
||||||
final Pair<Integer, Integer> categoryAndId =
|
|
||||||
getCategoryIdAndPageIdFromPagePosition(position);
|
|
||||||
if (categoryAndId != null) {
|
|
||||||
return getKeyboard(categoryAndId.first, categoryAndId.second);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final Long getCategoryKeyboardMapKey(final int categoryId, final int id) {
|
|
||||||
return (((long) categoryId) << Integer.SIZE) | id;
|
return (((long) categoryId) << Integer.SIZE) | id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -328,19 +311,20 @@ final class EmojiCategory {
|
||||||
if (categoryId == EmojiCategory.ID_RECENTS) {
|
if (categoryId == EmojiCategory.ID_RECENTS) {
|
||||||
final DynamicGridKeyboard kbd = new DynamicGridKeyboard(mPrefs,
|
final DynamicGridKeyboard kbd = new DynamicGridKeyboard(mPrefs,
|
||||||
mLayoutSet.getKeyboard(KeyboardId.ELEMENT_EMOJI_RECENTS),
|
mLayoutSet.getKeyboard(KeyboardId.ELEMENT_EMOJI_RECENTS),
|
||||||
mMaxPageKeyCount, categoryId);
|
mMaxRecentsKeyCount, categoryId);
|
||||||
mCategoryKeyboardMap.put(categoryKeyboardMapKey, kbd);
|
mCategoryKeyboardMap.put(categoryKeyboardMapKey, kbd);
|
||||||
return kbd;
|
return kbd;
|
||||||
}
|
}
|
||||||
|
|
||||||
final Keyboard keyboard = mLayoutSet.getKeyboard(sCategoryElementId[categoryId]);
|
final Keyboard keyboard = mLayoutSet.getKeyboard(sCategoryElementId[categoryId]);
|
||||||
final Key[][] sortedKeys = sortKeysIntoPages(
|
final int keyCountPerPage = computeMaxKeyCountPerPage();
|
||||||
keyboard.getSortedKeys(), mMaxPageKeyCount);
|
final Key[][] sortedKeysPages = sortKeysGrouped(
|
||||||
for (int pageId = 0; pageId < sortedKeys.length; ++pageId) {
|
keyboard.getSortedKeys(), keyCountPerPage);
|
||||||
|
for (int pageId = 0; pageId < sortedKeysPages.length; ++pageId) {
|
||||||
final DynamicGridKeyboard tempKeyboard = new DynamicGridKeyboard(mPrefs,
|
final DynamicGridKeyboard tempKeyboard = new DynamicGridKeyboard(mPrefs,
|
||||||
mLayoutSet.getKeyboard(KeyboardId.ELEMENT_EMOJI_RECENTS),
|
mLayoutSet.getKeyboard(KeyboardId.ELEMENT_EMOJI_RECENTS),
|
||||||
mMaxPageKeyCount, categoryId);
|
keyCountPerPage, categoryId);
|
||||||
for (final Key emojiKey : sortedKeys[pageId]) {
|
for (final Key emojiKey : sortedKeysPages[pageId]) {
|
||||||
if (emojiKey == null) {
|
if (emojiKey == null) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -353,37 +337,33 @@ final class EmojiCategory {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getTotalPageCountOfAllCategories() {
|
private int computeMaxKeyCountPerPage() {
|
||||||
int sum = 0;
|
final DynamicGridKeyboard tempKeyboard = new DynamicGridKeyboard(mPrefs,
|
||||||
for (CategoryProperties properties : mShownCategories) {
|
mLayoutSet.getKeyboard(KeyboardId.ELEMENT_EMOJI_RECENTS),
|
||||||
sum += properties.mPageCount;
|
0, 0);
|
||||||
}
|
return MAX_LINE_COUNT_PER_PAGE * tempKeyboard.getColumnsCount();
|
||||||
return sum;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Comparator<Key> EMOJI_KEY_COMPARATOR = new Comparator<Key>() {
|
private static final Comparator<Key> EMOJI_KEY_COMPARATOR = (lhs, rhs) -> {
|
||||||
@Override
|
final Rect lHitBox = lhs.getHitBox();
|
||||||
public int compare(final Key lhs, final Key rhs) {
|
final Rect rHitBox = rhs.getHitBox();
|
||||||
final Rect lHitBox = lhs.getHitBox();
|
if (lHitBox.top < rHitBox.top) {
|
||||||
final Rect rHitBox = rhs.getHitBox();
|
return -1;
|
||||||
if (lHitBox.top < rHitBox.top) {
|
} else if (lHitBox.top > rHitBox.top) {
|
||||||
return -1;
|
return 1;
|
||||||
} else if (lHitBox.top > rHitBox.top) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
if (lHitBox.left < rHitBox.left) {
|
|
||||||
return -1;
|
|
||||||
} else if (lHitBox.left > rHitBox.left) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
if (lhs.getCode() == rhs.getCode()) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return lhs.getCode() < rhs.getCode() ? -1 : 1;
|
|
||||||
}
|
}
|
||||||
|
if (lHitBox.left < rHitBox.left) {
|
||||||
|
return -1;
|
||||||
|
} else if (lHitBox.left > rHitBox.left) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (lhs.getCode() == rhs.getCode()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return lhs.getCode() < rhs.getCode() ? -1 : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
private static Key[][] sortKeysIntoPages(final List<Key> inKeys, final int maxPageCount) {
|
private static Key[][] sortKeysGrouped(final List<Key> inKeys, final int maxPageCount) {
|
||||||
final ArrayList<Key> keys = new ArrayList<>(inKeys);
|
final ArrayList<Key> keys = new ArrayList<>(inKeys);
|
||||||
Collections.sort(keys, EMOJI_KEY_COMPARATOR);
|
Collections.sort(keys, EMOJI_KEY_COMPARATOR);
|
||||||
final int pageCount = (keys.size() - 1) / maxPageCount + 1;
|
final int pageCount = (keys.size() - 1) / maxPageCount + 1;
|
||||||
|
|
|
@ -61,9 +61,9 @@ public final class EmojiCategoryPageIndicatorView extends View {
|
||||||
final float height = getHeight();
|
final float height = getHeight();
|
||||||
final float width = getWidth();
|
final float width = getWidth();
|
||||||
final float unitWidth = width / mCategoryPageSize;
|
final float unitWidth = width / mCategoryPageSize;
|
||||||
final float left = unitWidth * mCurrentCategoryPageId + mOffset * unitWidth;
|
final float left = Math.min(unitWidth * mCurrentCategoryPageId + mOffset * unitWidth, width - unitWidth);
|
||||||
final float top = 0.0f;
|
final float top = 0.0f;
|
||||||
final float right = left + unitWidth;
|
final float right = Math.min(left + unitWidth, width);
|
||||||
final float bottom = height * BOTTOM_MARGIN_RATIO;
|
final float bottom = height * BOTTOM_MARGIN_RATIO;
|
||||||
canvas.drawRect(left, top, right, bottom, mPaint);
|
canvas.drawRect(left, top, right, bottom, mPaint);
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,17 +20,16 @@ import android.content.res.Resources;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
|
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import org.dslul.openboard.inputmethod.latin.R;
|
import org.dslul.openboard.inputmethod.latin.R;
|
||||||
|
import org.dslul.openboard.inputmethod.latin.settings.SettingsValues;
|
||||||
import org.dslul.openboard.inputmethod.latin.utils.ResourceUtils;
|
import org.dslul.openboard.inputmethod.latin.utils.ResourceUtils;
|
||||||
|
|
||||||
import androidx.viewpager.widget.ViewPager;
|
|
||||||
import androidx.viewpager2.widget.ViewPager2;
|
|
||||||
|
|
||||||
final class EmojiLayoutParams {
|
final class EmojiLayoutParams {
|
||||||
private static final int DEFAULT_KEYBOARD_ROWS = 4;
|
private static final int DEFAULT_KEYBOARD_ROWS = 4;
|
||||||
|
|
||||||
public final int mEmojiPagerHeight;
|
public final int mEmojiListHeight;
|
||||||
private final int mEmojiPagerBottomMargin;
|
private final int mEmojiListBottomMargin;
|
||||||
public final int mEmojiKeyboardHeight;
|
public final int mEmojiKeyboardHeight;
|
||||||
private final int mEmojiCategoryPageIdViewHeight;
|
private final int mEmojiCategoryPageIdViewHeight;
|
||||||
public final int mEmojiActionBarHeight;
|
public final int mEmojiActionBarHeight;
|
||||||
|
@ -56,16 +55,16 @@ final class EmojiLayoutParams {
|
||||||
+ mKeyVerticalGap;
|
+ mKeyVerticalGap;
|
||||||
mEmojiActionBarHeight = baseheight / DEFAULT_KEYBOARD_ROWS
|
mEmojiActionBarHeight = baseheight / DEFAULT_KEYBOARD_ROWS
|
||||||
- (mKeyVerticalGap - mBottomPadding) / 2;
|
- (mKeyVerticalGap - mBottomPadding) / 2;
|
||||||
mEmojiPagerHeight = defaultKeyboardHeight - mEmojiActionBarHeight
|
mEmojiListHeight = defaultKeyboardHeight - mEmojiActionBarHeight
|
||||||
- mEmojiCategoryPageIdViewHeight;
|
- mEmojiCategoryPageIdViewHeight;
|
||||||
mEmojiPagerBottomMargin = 0;
|
mEmojiListBottomMargin = 0;
|
||||||
mEmojiKeyboardHeight = mEmojiPagerHeight - mEmojiPagerBottomMargin - 1;
|
mEmojiKeyboardHeight = mEmojiListHeight - mEmojiListBottomMargin - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setPagerProperties(final ViewPager2 vp) {
|
public void setEmojiListProperties(final RecyclerView vp) {
|
||||||
final LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) vp.getLayoutParams();
|
final LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) vp.getLayoutParams();
|
||||||
lp.height = mEmojiKeyboardHeight;
|
lp.height = mEmojiKeyboardHeight;
|
||||||
lp.bottomMargin = mEmojiPagerBottomMargin;
|
lp.bottomMargin = mEmojiListBottomMargin;
|
||||||
vp.setLayoutParams(lp);
|
vp.setLayoutParams(lp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -113,6 +113,20 @@ final class EmojiPageKeyboardView extends KeyboardView implements
|
||||||
mMoreKeysKeyboardContainer = inflater.inflate(moreKeysKeyboardLayoutId, null);
|
mMoreKeysKeyboardContainer = inflater.inflate(moreKeysKeyboardLayoutId, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||||
|
final Keyboard keyboard = getKeyboard();
|
||||||
|
if (keyboard instanceof DynamicGridKeyboard) {
|
||||||
|
final int width = keyboard.mOccupiedWidth + getPaddingLeft() + getPaddingRight();
|
||||||
|
final int occupiedHeight =
|
||||||
|
((DynamicGridKeyboard) keyboard).getDynamicOccupiedHeight();
|
||||||
|
final int height = occupiedHeight + getPaddingTop() + getPaddingBottom();
|
||||||
|
setMeasuredDimension(width, height);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setHardwareAcceleratedDrawingEnabled(final boolean enabled) {
|
public void setHardwareAcceleratedDrawingEnabled(final boolean enabled) {
|
||||||
super.setHardwareAcceleratedDrawingEnabled(enabled);
|
super.setHardwareAcceleratedDrawingEnabled(enabled);
|
||||||
|
@ -173,9 +187,7 @@ final class EmojiPageKeyboardView extends KeyboardView implements
|
||||||
Keyboard moreKeysKeyboard = mMoreKeysKeyboardCache.get(key);
|
Keyboard moreKeysKeyboard = mMoreKeysKeyboardCache.get(key);
|
||||||
if (moreKeysKeyboard == null) {
|
if (moreKeysKeyboard == null) {
|
||||||
final MoreKeysKeyboard.Builder builder = new MoreKeysKeyboard.Builder(
|
final MoreKeysKeyboard.Builder builder = new MoreKeysKeyboard.Builder(
|
||||||
getContext(), key, getKeyboard(),
|
getContext(), key, getKeyboard(), false, 0, 0, newLabelPaint(key));
|
||||||
true, key.getWidth(), key.getHeight(), // TODO This is cheating
|
|
||||||
newLabelPaint(key));
|
|
||||||
moreKeysKeyboard = builder.build();
|
moreKeysKeyboard = builder.build();
|
||||||
mMoreKeysKeyboardCache.put(key, moreKeysKeyboard);
|
mMoreKeysKeyboardCache.put(key, moreKeysKeyboard);
|
||||||
}
|
}
|
||||||
|
@ -382,9 +394,6 @@ final class EmojiPageKeyboardView extends KeyboardView implements
|
||||||
final Runnable pendingKeyDown = mPendingKeyDown;
|
final Runnable pendingKeyDown = mPendingKeyDown;
|
||||||
final Key currentKey = mCurrentKey;
|
final Key currentKey = mCurrentKey;
|
||||||
releaseCurrentKey(false /* withKeyRegistering */);
|
releaseCurrentKey(false /* withKeyRegistering */);
|
||||||
if (key == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
final boolean isShowingMoreKeysPanel = isShowingMoreKeysPanel();
|
final boolean isShowingMoreKeysPanel = isShowingMoreKeysPanel();
|
||||||
if (isShowingMoreKeysPanel) {
|
if (isShowingMoreKeysPanel) {
|
||||||
|
@ -402,7 +411,7 @@ final class EmojiPageKeyboardView extends KeyboardView implements
|
||||||
callListenerOnReleaseKey(key, true /* withRegistering */);
|
callListenerOnReleaseKey(key, true /* withRegistering */);
|
||||||
}
|
}
|
||||||
}, KEY_RELEASE_DELAY_TIME);
|
}, KEY_RELEASE_DELAY_TIME);
|
||||||
} else {
|
} else if (key != null) {
|
||||||
callListenerOnReleaseKey(key, true /* withRegistering */);
|
callListenerOnReleaseKey(key, true /* withRegistering */);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -182,7 +182,7 @@ final class EmojiPalettesAdapter extends RecyclerView.Adapter<EmojiPalettesAdapt
|
||||||
mActiveKeyboardViews.remove(position);
|
mActiveKeyboardViews.remove(position);
|
||||||
}
|
}
|
||||||
final Keyboard keyboard =
|
final Keyboard keyboard =
|
||||||
mEmojiCategory.getKeyboardFromPagePosition(position);
|
mEmojiCategory.getKeyboardFromAdapterPosition(position);
|
||||||
holder.getKeyboardView().setKeyboard(keyboard);
|
holder.getKeyboardView().setKeyboard(keyboard);
|
||||||
holder.getKeyboardView().setOnKeyEventListener(mListener);
|
holder.getKeyboardView().setOnKeyEventListener(mListener);
|
||||||
//parent.addView(keyboardView);
|
//parent.addView(keyboardView);
|
||||||
|
@ -201,10 +201,9 @@ final class EmojiPalettesAdapter extends RecyclerView.Adapter<EmojiPalettesAdapt
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getItemCount() {
|
public int getItemCount() {
|
||||||
return mEmojiCategory.getTotalPageCountOfAllCategories();
|
return mEmojiCategory.getCurrentCategoryPageCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static class ViewHolder extends RecyclerView.ViewHolder {
|
static class ViewHolder extends RecyclerView.ViewHolder {
|
||||||
private EmojiPageKeyboardView customView;
|
private EmojiPageKeyboardView customView;
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,6 @@ import android.content.res.Resources;
|
||||||
import android.content.res.TypedArray;
|
import android.content.res.TypedArray;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.util.Pair;
|
|
||||||
import android.util.TypedValue;
|
import android.util.TypedValue;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
|
@ -34,6 +33,9 @@ import android.widget.TabHost.OnTabChangeListener;
|
||||||
import android.widget.TabWidget;
|
import android.widget.TabWidget;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import org.dslul.openboard.inputmethod.compat.TabHostCompat;
|
import org.dslul.openboard.inputmethod.compat.TabHostCompat;
|
||||||
import org.dslul.openboard.inputmethod.keyboard.Key;
|
import org.dslul.openboard.inputmethod.keyboard.Key;
|
||||||
import org.dslul.openboard.inputmethod.keyboard.KeyboardActionListener;
|
import org.dslul.openboard.inputmethod.keyboard.KeyboardActionListener;
|
||||||
|
@ -46,10 +48,12 @@ import org.dslul.openboard.inputmethod.latin.AudioAndHapticFeedbackManager;
|
||||||
import org.dslul.openboard.inputmethod.latin.R;
|
import org.dslul.openboard.inputmethod.latin.R;
|
||||||
import org.dslul.openboard.inputmethod.latin.RichInputMethodSubtype;
|
import org.dslul.openboard.inputmethod.latin.RichInputMethodSubtype;
|
||||||
import org.dslul.openboard.inputmethod.latin.common.Constants;
|
import org.dslul.openboard.inputmethod.latin.common.Constants;
|
||||||
|
import org.dslul.openboard.inputmethod.latin.settings.Settings;
|
||||||
|
import org.dslul.openboard.inputmethod.latin.settings.SettingsValues;
|
||||||
import org.dslul.openboard.inputmethod.latin.utils.DeviceProtectedUtils;
|
import org.dslul.openboard.inputmethod.latin.utils.DeviceProtectedUtils;
|
||||||
import org.dslul.openboard.inputmethod.latin.utils.ResourceUtils;
|
import org.dslul.openboard.inputmethod.latin.utils.ResourceUtils;
|
||||||
|
|
||||||
import androidx.viewpager2.widget.ViewPager2;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import static org.dslul.openboard.inputmethod.latin.common.Constants.NOT_A_COORDINATE;
|
import static org.dslul.openboard.inputmethod.latin.common.Constants.NOT_A_COORDINATE;
|
||||||
|
|
||||||
|
@ -78,6 +82,7 @@ public final class EmojiPalettesView extends LinearLayout
|
||||||
private EmojiPalettesAdapter mEmojiPalettesAdapter;
|
private EmojiPalettesAdapter mEmojiPalettesAdapter;
|
||||||
private final EmojiLayoutParams mEmojiLayoutParams;
|
private final EmojiLayoutParams mEmojiLayoutParams;
|
||||||
private final DeleteKeyOnTouchListener mDeleteKeyOnTouchListener;
|
private final DeleteKeyOnTouchListener mDeleteKeyOnTouchListener;
|
||||||
|
private final LinearLayoutManager mEmojiLayoutManager;
|
||||||
|
|
||||||
private ImageButton mDeleteKey;
|
private ImageButton mDeleteKey;
|
||||||
private TextView mAlphabetKeyLeft;
|
private TextView mAlphabetKeyLeft;
|
||||||
|
@ -85,8 +90,7 @@ public final class EmojiPalettesView extends LinearLayout
|
||||||
// TODO: Remove this workaround.
|
// TODO: Remove this workaround.
|
||||||
private View mSpacebarIcon;
|
private View mSpacebarIcon;
|
||||||
private TabHostCompat mTabHost;
|
private TabHostCompat mTabHost;
|
||||||
private ViewPager2 mEmojiPager;
|
private RecyclerView mEmojiRecyclerView;
|
||||||
private int mCurrentPagerPosition = 0;
|
|
||||||
private EmojiCategoryPageIndicatorView mEmojiCategoryPageIndicatorView;
|
private EmojiCategoryPageIndicatorView mEmojiCategoryPageIndicatorView;
|
||||||
|
|
||||||
private KeyboardActionListener mKeyboardActionListener = KeyboardActionListener.EMPTY_LISTENER;
|
private KeyboardActionListener mKeyboardActionListener = KeyboardActionListener.EMPTY_LISTENER;
|
||||||
|
@ -132,6 +136,7 @@ public final class EmojiPalettesView extends LinearLayout
|
||||||
R.styleable.EmojiPalettesView_categoryPageIndicatorBackground, 0);
|
R.styleable.EmojiPalettesView_categoryPageIndicatorBackground, 0);
|
||||||
emojiPalettesViewAttr.recycle();
|
emojiPalettesViewAttr.recycle();
|
||||||
mDeleteKeyOnTouchListener = new DeleteKeyOnTouchListener();
|
mDeleteKeyOnTouchListener = new DeleteKeyOnTouchListener();
|
||||||
|
mEmojiLayoutManager = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -164,6 +169,7 @@ public final class EmojiPalettesView extends LinearLayout
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onFinishInflate() {
|
protected void onFinishInflate() {
|
||||||
|
super.onFinishInflate();
|
||||||
mTabHost = findViewById(R.id.emoji_category_tabhost);
|
mTabHost = findViewById(R.id.emoji_category_tabhost);
|
||||||
mTabHost.setup();
|
mTabHost.setup();
|
||||||
for (final EmojiCategory.CategoryProperties properties
|
for (final EmojiCategory.CategoryProperties properties
|
||||||
|
@ -183,51 +189,41 @@ public final class EmojiPalettesView extends LinearLayout
|
||||||
|
|
||||||
mEmojiPalettesAdapter = new EmojiPalettesAdapter(mEmojiCategory, this);
|
mEmojiPalettesAdapter = new EmojiPalettesAdapter(mEmojiCategory, this);
|
||||||
|
|
||||||
mEmojiPager = findViewById(R.id.emoji_keyboard_pager);
|
mEmojiRecyclerView = findViewById(R.id.emoji_keyboard_list);
|
||||||
mEmojiPager.setAdapter(mEmojiPalettesAdapter);
|
mEmojiRecyclerView.setLayoutManager(mEmojiLayoutManager);
|
||||||
|
mEmojiRecyclerView.setAdapter(mEmojiPalettesAdapter);
|
||||||
mEmojiPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
|
mEmojiRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
|
public void onScrollStateChanged(@NonNull @NotNull RecyclerView recyclerView, int newState) {
|
||||||
mEmojiPalettesAdapter.onPageScrolled();
|
super.onScrollStateChanged(recyclerView, newState);
|
||||||
final Pair<Integer, Integer> newPos =
|
|
||||||
mEmojiCategory.getCategoryIdAndPageIdFromPagePosition(position);
|
|
||||||
final int newCategoryId = newPos.first;
|
|
||||||
final int newCategorySize = mEmojiCategory.getCategoryPageSize(newCategoryId);
|
|
||||||
final int currentCategoryId = mEmojiCategory.getCurrentCategoryId();
|
|
||||||
final int currentCategoryPageId = mEmojiCategory.getCurrentCategoryPageId();
|
|
||||||
final int currentCategorySize = mEmojiCategory.getCurrentCategoryPageSize();
|
|
||||||
if (newCategoryId == currentCategoryId) {
|
|
||||||
mEmojiCategoryPageIndicatorView.setCategoryPageId(
|
|
||||||
newCategorySize, newPos.second, positionOffset);
|
|
||||||
} else if (newCategoryId > currentCategoryId) {
|
|
||||||
mEmojiCategoryPageIndicatorView.setCategoryPageId(
|
|
||||||
currentCategorySize, currentCategoryPageId, positionOffset);
|
|
||||||
} else if (newCategoryId < currentCategoryId) {
|
|
||||||
mEmojiCategoryPageIndicatorView.setCategoryPageId(
|
|
||||||
currentCategorySize, currentCategoryPageId, positionOffset - 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPageSelected(int position) {
|
|
||||||
final Pair<Integer, Integer> newPos =
|
|
||||||
mEmojiCategory.getCategoryIdAndPageIdFromPagePosition(position);
|
|
||||||
setCurrentCategoryAndPageId(newPos.first /* categoryId */, newPos.second /* categoryPageId */,
|
|
||||||
false /* force */);
|
|
||||||
updateEmojiCategoryPageIdView();
|
|
||||||
mCurrentPagerPosition = position;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPageScrollStateChanged(int state) {
|
|
||||||
// Ignore this message. Only want the actual page selected.
|
// Ignore this message. Only want the actual page selected.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onScrolled(@NonNull @NotNull RecyclerView recyclerView, int dx, int dy) {
|
||||||
|
super.onScrolled(recyclerView, dx, dy);
|
||||||
|
mEmojiPalettesAdapter.onPageScrolled();
|
||||||
|
|
||||||
|
final int offset = recyclerView.computeVerticalScrollOffset();
|
||||||
|
final int extent = recyclerView.computeVerticalScrollExtent();
|
||||||
|
final int range = recyclerView.computeVerticalScrollRange();
|
||||||
|
final float percentage = offset / (float) (range - extent);
|
||||||
|
|
||||||
|
final int currentCategorySize = mEmojiCategory.getCurrentCategoryPageCount();
|
||||||
|
final int a = (int) (percentage * currentCategorySize);
|
||||||
|
final float b = percentage * currentCategorySize - a;
|
||||||
|
mEmojiCategoryPageIndicatorView.setCategoryPageId(
|
||||||
|
currentCategorySize, a, b);
|
||||||
|
|
||||||
|
final int firstCompleteVisibleBoard = mEmojiLayoutManager.findFirstCompletelyVisibleItemPosition();
|
||||||
|
final int firstVisibleBoard = mEmojiLayoutManager.findFirstVisibleItemPosition();
|
||||||
|
mEmojiCategory.setCurrentCategoryPageId(
|
||||||
|
firstCompleteVisibleBoard > 0 ? firstCompleteVisibleBoard : firstVisibleBoard);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
mEmojiPager.setOffscreenPageLimit(ViewPager2.OFFSCREEN_PAGE_LIMIT_DEFAULT);
|
mEmojiRecyclerView.setPersistentDrawingCache(PERSISTENT_NO_CACHE);
|
||||||
mEmojiPager.setPersistentDrawingCache(PERSISTENT_NO_CACHE);
|
mEmojiLayoutParams.setEmojiListProperties(mEmojiRecyclerView);
|
||||||
mEmojiLayoutParams.setPagerProperties(mEmojiPager);
|
|
||||||
|
|
||||||
mEmojiCategoryPageIndicatorView =
|
mEmojiCategoryPageIndicatorView =
|
||||||
findViewById(R.id.emoji_category_page_id_view);
|
findViewById(R.id.emoji_category_page_id_view);
|
||||||
|
@ -283,8 +279,10 @@ public final class EmojiPalettesView extends LinearLayout
|
||||||
AudioAndHapticFeedbackManager.getInstance().performHapticAndAudioFeedback(
|
AudioAndHapticFeedbackManager.getInstance().performHapticAndAudioFeedback(
|
||||||
Constants.CODE_UNSPECIFIED, this);
|
Constants.CODE_UNSPECIFIED, this);
|
||||||
final int categoryId = mEmojiCategory.getCategoryId(tabId);
|
final int categoryId = mEmojiCategory.getCategoryId(tabId);
|
||||||
setCurrentCategoryAndPageId(categoryId, 0, false /* force */);
|
if (categoryId != mEmojiCategory.getCurrentCategoryId()) {
|
||||||
updateEmojiCategoryPageIdView();
|
setCurrentCategoryAndPageId(categoryId, 0, false /* force */);
|
||||||
|
updateEmojiCategoryPageIdView();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -388,14 +386,17 @@ public final class EmojiPalettesView extends LinearLayout
|
||||||
final KeyDrawParams params = new KeyDrawParams();
|
final KeyDrawParams params = new KeyDrawParams();
|
||||||
params.updateParams(mEmojiLayoutParams.getActionBarHeight(), keyVisualAttr);
|
params.updateParams(mEmojiLayoutParams.getActionBarHeight(), keyVisualAttr);
|
||||||
setupAlphabetKey(mAlphabetKeyLeft, switchToAlphaLabel, params);
|
setupAlphabetKey(mAlphabetKeyLeft, switchToAlphaLabel, params);
|
||||||
mEmojiPager.setAdapter(mEmojiPalettesAdapter);
|
if (mEmojiRecyclerView.getAdapter() == null) {
|
||||||
mEmojiPager.setCurrentItem(mCurrentPagerPosition, false);
|
mEmojiRecyclerView.setAdapter(mEmojiPalettesAdapter);
|
||||||
|
setCurrentCategoryAndPageId(mEmojiCategory.getCurrentCategoryId(), mEmojiCategory.getCurrentCategoryPageId(),
|
||||||
|
true /* force */);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void stopEmojiPalettes() {
|
public void stopEmojiPalettes() {
|
||||||
mEmojiPalettesAdapter.releaseCurrentKey(true /* withKeyRegistering */);
|
mEmojiPalettesAdapter.releaseCurrentKey(true /* withKeyRegistering */);
|
||||||
mEmojiPalettesAdapter.flushPendingRecentKeys();
|
mEmojiPalettesAdapter.flushPendingRecentKeys();
|
||||||
mEmojiPager.setAdapter(null);
|
mEmojiRecyclerView.setAdapter(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setKeyboardActionListener(final KeyboardActionListener listener) {
|
public void setKeyboardActionListener(final KeyboardActionListener listener) {
|
||||||
|
@ -408,19 +409,14 @@ public final class EmojiPalettesView extends LinearLayout
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mEmojiCategoryPageIndicatorView.setCategoryPageId(
|
mEmojiCategoryPageIndicatorView.setCategoryPageId(
|
||||||
mEmojiCategory.getCurrentCategoryPageSize(),
|
mEmojiCategory.getCurrentCategoryPageCount(),
|
||||||
mEmojiCategory.getCurrentCategoryPageId(), 0.0f /* offset */);
|
mEmojiCategory.getCurrentCategoryPageId(), 0.0f /* offset */);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setCurrentCategoryAndPageId(final int categoryId, final int categoryPageId,
|
private void setCurrentCategoryAndPageId(final int categoryId, final int categoryPageId,
|
||||||
final boolean force) {
|
final boolean force) {
|
||||||
final int oldCategoryId = mEmojiCategory.getCurrentCategoryId();
|
final int oldCategoryId = mEmojiCategory.getCurrentCategoryId();
|
||||||
final int oldPageId = mEmojiCategory.getCurrentCategoryPageId();
|
final int oldCategoryPageId = mEmojiCategory.getCurrentCategoryPageId();
|
||||||
final boolean firstPage = categoryPageId == 0;
|
|
||||||
mEmojiCategory.setCurrentCategoryPageId(categoryPageId);
|
|
||||||
if (oldCategoryId == categoryId && (!firstPage || oldPageId == 0) && !force) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (oldCategoryId == EmojiCategory.ID_RECENTS && categoryId != EmojiCategory.ID_RECENTS) {
|
if (oldCategoryId == EmojiCategory.ID_RECENTS && categoryId != EmojiCategory.ID_RECENTS) {
|
||||||
// Needs to save pending updates for recent keys when we get out of the recents
|
// Needs to save pending updates for recent keys when we get out of the recents
|
||||||
|
@ -429,13 +425,11 @@ public final class EmojiPalettesView extends LinearLayout
|
||||||
mEmojiPalettesAdapter.flushPendingRecentKeys();
|
mEmojiPalettesAdapter.flushPendingRecentKeys();
|
||||||
}
|
}
|
||||||
|
|
||||||
mEmojiCategory.setCurrentCategoryId(categoryId);
|
if (force || oldCategoryId != categoryId || oldCategoryPageId != categoryPageId) {
|
||||||
final Pair<Integer, Integer> pagerIds = mEmojiCategory.getCategoryIdAndPageIdFromPagePosition(
|
mEmojiCategory.setCurrentCategoryId(categoryId);
|
||||||
mEmojiPager.getCurrentItem());
|
mEmojiCategory.setCurrentCategoryPageId(categoryPageId);
|
||||||
if (force || pagerIds.first != categoryId || (firstPage && pagerIds.second != 0)) {
|
mEmojiPalettesAdapter.notifyDataSetChanged();
|
||||||
final int newPagerPageId = mEmojiCategory.getPagerPageIdFromCategoryAndPageId(categoryId, categoryPageId);
|
mEmojiRecyclerView.scrollToPosition(categoryPageId);
|
||||||
final boolean smooth = pagerIds.first == categoryId && firstPage && pagerIds.second != 0;
|
|
||||||
mEmojiPager.setCurrentItem(newPagerPageId, smooth /* smoothScroll */);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
final int newTabId = mEmojiCategory.getTabIdFromCategoryId(categoryId);
|
final int newTabId = mEmojiCategory.getTabIdFromCategoryId(categoryId);
|
||||||
|
|
|
@ -52,6 +52,7 @@ public final class KeyboardIconsSet {
|
||||||
public static final String NAME_PREVIOUS_KEY = "previous_key";
|
public static final String NAME_PREVIOUS_KEY = "previous_key";
|
||||||
public static final String NAME_TAB_KEY = "tab_key";
|
public static final String NAME_TAB_KEY = "tab_key";
|
||||||
public static final String NAME_SHORTCUT_KEY = "shortcut_key";
|
public static final String NAME_SHORTCUT_KEY = "shortcut_key";
|
||||||
|
public static final String NAME_CLIPBOARD_KEY = "clipboard_key";
|
||||||
public static final String NAME_INCOGNITO_KEY = "incognito_key";
|
public static final String NAME_INCOGNITO_KEY = "incognito_key";
|
||||||
public static final String NAME_SHORTCUT_KEY_DISABLED = "shortcut_key_disabled";
|
public static final String NAME_SHORTCUT_KEY_DISABLED = "shortcut_key_disabled";
|
||||||
public static final String NAME_LANGUAGE_SWITCH_KEY = "language_switch_key";
|
public static final String NAME_LANGUAGE_SWITCH_KEY = "language_switch_key";
|
||||||
|
@ -80,6 +81,7 @@ public final class KeyboardIconsSet {
|
||||||
NAME_PREVIOUS_KEY, R.styleable.Keyboard_iconPreviousKey,
|
NAME_PREVIOUS_KEY, R.styleable.Keyboard_iconPreviousKey,
|
||||||
NAME_TAB_KEY, R.styleable.Keyboard_iconTabKey,
|
NAME_TAB_KEY, R.styleable.Keyboard_iconTabKey,
|
||||||
NAME_SHORTCUT_KEY, R.styleable.Keyboard_iconShortcutKey,
|
NAME_SHORTCUT_KEY, R.styleable.Keyboard_iconShortcutKey,
|
||||||
|
NAME_CLIPBOARD_KEY, R.styleable.Keyboard_iconClipboardKey,
|
||||||
NAME_INCOGNITO_KEY, R.styleable.Keyboard_iconIncognitoKey,
|
NAME_INCOGNITO_KEY, R.styleable.Keyboard_iconIncognitoKey,
|
||||||
NAME_SPACE_KEY_FOR_NUMBER_LAYOUT, R.styleable.Keyboard_iconSpaceKeyForNumberLayout,
|
NAME_SPACE_KEY_FOR_NUMBER_LAYOUT, R.styleable.Keyboard_iconSpaceKeyForNumberLayout,
|
||||||
NAME_SHIFT_KEY_SHIFTED, R.styleable.Keyboard_iconShiftKeyShifted,
|
NAME_SHIFT_KEY_SHIFTED, R.styleable.Keyboard_iconShiftKeyShifted,
|
||||||
|
|
|
@ -32,6 +32,7 @@ import android.os.Build;
|
||||||
import android.os.Debug;
|
import android.os.Debug;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
|
import android.os.Process;
|
||||||
import android.text.InputType;
|
import android.text.InputType;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.util.PrintWriterPrinter;
|
import android.util.PrintWriterPrinter;
|
||||||
|
@ -186,6 +187,24 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
||||||
}
|
}
|
||||||
final HideSoftInputReceiver mHideSoftInputReceiver = new HideSoftInputReceiver(this);
|
final HideSoftInputReceiver mHideSoftInputReceiver = new HideSoftInputReceiver(this);
|
||||||
|
|
||||||
|
final static class RestartAfterDeviceUnlockReceiver extends BroadcastReceiver {
|
||||||
|
@Override
|
||||||
|
public void onReceive(Context context, Intent intent) {
|
||||||
|
final String action = intent.getAction();
|
||||||
|
// Restart the keyboard if credential encrypted storage is unlocked. This reloads the
|
||||||
|
// dictionary and other data from credential-encrypted storage (with the onCreate()
|
||||||
|
// method).
|
||||||
|
if (Intent.ACTION_USER_UNLOCKED.equals(action)) {
|
||||||
|
final int myPid = Process.myPid();
|
||||||
|
Log.i(TAG, "Killing my process: pid=" + myPid);
|
||||||
|
Process.killProcess(myPid);
|
||||||
|
} else {
|
||||||
|
Log.e(TAG, "Unexpected intent " + intent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
final RestartAfterDeviceUnlockReceiver mRestartAfterDeviceUnlockReceiver = new RestartAfterDeviceUnlockReceiver();
|
||||||
|
|
||||||
private AlertDialog mOptionsDialog;
|
private AlertDialog mOptionsDialog;
|
||||||
|
|
||||||
private final boolean mIsHardwareAcceleratedDrawingEnabled;
|
private final boolean mIsHardwareAcceleratedDrawingEnabled;
|
||||||
|
@ -625,6 +644,10 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
||||||
registerReceiver(mHideSoftInputReceiver, hideSoftInputFilter, PERMISSION_HIDE_SOFT_INPUT,
|
registerReceiver(mHideSoftInputReceiver, hideSoftInputFilter, PERMISSION_HIDE_SOFT_INPUT,
|
||||||
null /* scheduler */);
|
null /* scheduler */);
|
||||||
|
|
||||||
|
final IntentFilter restartAfterUnlockFilter = new IntentFilter();
|
||||||
|
restartAfterUnlockFilter.addAction(Intent.ACTION_USER_UNLOCKED);
|
||||||
|
registerReceiver(mRestartAfterDeviceUnlockReceiver, restartAfterUnlockFilter);
|
||||||
|
|
||||||
StatsUtils.onCreate(mSettings.getCurrent(), mRichImm);
|
StatsUtils.onCreate(mSettings.getCurrent(), mRichImm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -733,6 +756,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
||||||
unregisterReceiver(mRingerModeChangeReceiver);
|
unregisterReceiver(mRingerModeChangeReceiver);
|
||||||
unregisterReceiver(mDictionaryPackInstallReceiver);
|
unregisterReceiver(mDictionaryPackInstallReceiver);
|
||||||
unregisterReceiver(mDictionaryDumpBroadcastReceiver);
|
unregisterReceiver(mDictionaryDumpBroadcastReceiver);
|
||||||
|
unregisterReceiver(mRestartAfterDeviceUnlockReceiver);
|
||||||
mStatsUtilsManager.onDestroy(this /* context */);
|
mStatsUtilsManager.onDestroy(this /* context */);
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
}
|
}
|
||||||
|
@ -742,6 +766,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
||||||
unregisterReceiver(mDictionaryPackInstallReceiver);
|
unregisterReceiver(mDictionaryPackInstallReceiver);
|
||||||
unregisterReceiver(mDictionaryDumpBroadcastReceiver);
|
unregisterReceiver(mDictionaryDumpBroadcastReceiver);
|
||||||
unregisterReceiver(mRingerModeChangeReceiver);
|
unregisterReceiver(mRingerModeChangeReceiver);
|
||||||
|
unregisterReceiver(mRestartAfterDeviceUnlockReceiver);
|
||||||
mInputLogic.recycle();
|
mInputLogic.recycle();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1092,6 +1117,10 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public CharSequence getSelection() {
|
||||||
|
return mInputLogic.mConnection.getSelectedText(0);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is called when the user has clicked on the extracted text view,
|
* This is called when the user has clicked on the extracted text view,
|
||||||
* when running in fullscreen mode. The default implementation hides
|
* when running in fullscreen mode. The default implementation hides
|
||||||
|
@ -1559,10 +1588,11 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
||||||
currentSettingsValues.mInputAttributes.mShouldShowSuggestions
|
currentSettingsValues.mInputAttributes.mShouldShowSuggestions
|
||||||
&& currentSettingsValues.isSuggestionsEnabledPerUserSettings();
|
&& currentSettingsValues.isSuggestionsEnabledPerUserSettings();
|
||||||
final boolean shouldShowSuggestionsStripUnlessPassword = currentSettingsValues.mShowsVoiceInputKey
|
final boolean shouldShowSuggestionsStripUnlessPassword = currentSettingsValues.mShowsVoiceInputKey
|
||||||
|
|| currentSettingsValues.mShowsClipboardKey
|
||||||
|| shouldShowSuggestionCandidates
|
|| shouldShowSuggestionCandidates
|
||||||
|| currentSettingsValues.isApplicationSpecifiedCompletionsOn();
|
|| currentSettingsValues.isApplicationSpecifiedCompletionsOn();
|
||||||
final boolean shouldShowSuggestionsStrip = shouldShowSuggestionsStripUnlessPassword
|
final boolean shouldShowSuggestionsStrip = shouldShowSuggestionsStripUnlessPassword
|
||||||
&& !currentSettingsValues.mInputAttributes.mIsPasswordField;
|
&& (!currentSettingsValues.mInputAttributes.mIsPasswordField || currentSettingsValues.mShowsClipboardKey);
|
||||||
mSuggestionStripView.updateVisibility(shouldShowSuggestionsStrip, isFullscreenMode());
|
mSuggestionStripView.updateVisibility(shouldShowSuggestionsStrip, isFullscreenMode());
|
||||||
if (!shouldShowSuggestionsStrip) {
|
if (!shouldShowSuggestionsStrip) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -56,6 +56,7 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
|
||||||
// PREF_VOICE_MODE_OBSOLETE is obsolete. Use PREF_VOICE_INPUT_KEY instead.
|
// PREF_VOICE_MODE_OBSOLETE is obsolete. Use PREF_VOICE_INPUT_KEY instead.
|
||||||
public static final String PREF_VOICE_MODE_OBSOLETE = "voice_mode";
|
public static final String PREF_VOICE_MODE_OBSOLETE = "voice_mode";
|
||||||
public static final String PREF_VOICE_INPUT_KEY = "pref_voice_input_key";
|
public static final String PREF_VOICE_INPUT_KEY = "pref_voice_input_key";
|
||||||
|
public static final String PREF_CLIPBOARD_CLIPBOARD_KEY = "pref_clipboard_clipboard_key";
|
||||||
public static final String PREF_EDIT_PERSONAL_DICTIONARY = "edit_personal_dictionary";
|
public static final String PREF_EDIT_PERSONAL_DICTIONARY = "edit_personal_dictionary";
|
||||||
// PREF_AUTO_CORRECTION_THRESHOLD_OBSOLETE is obsolete. Use PREF_AUTO_CORRECTION instead.
|
// PREF_AUTO_CORRECTION_THRESHOLD_OBSOLETE is obsolete. Use PREF_AUTO_CORRECTION instead.
|
||||||
public static final String PREF_AUTO_CORRECTION_THRESHOLD_OBSOLETE =
|
public static final String PREF_AUTO_CORRECTION_THRESHOLD_OBSOLETE =
|
||||||
|
@ -77,6 +78,8 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
|
||||||
"pref_show_language_switch_key";
|
"pref_show_language_switch_key";
|
||||||
public static final String PREF_SHOW_EMOJI_KEY =
|
public static final String PREF_SHOW_EMOJI_KEY =
|
||||||
"pref_show_emoji_key";
|
"pref_show_emoji_key";
|
||||||
|
public static final String PREF_SHOW_CLIPBOARD_KEY =
|
||||||
|
"pref_show_clipboard_key";
|
||||||
public static final String PREF_INCLUDE_OTHER_IMES_IN_LANGUAGE_SWITCH_LIST =
|
public static final String PREF_INCLUDE_OTHER_IMES_IN_LANGUAGE_SWITCH_LIST =
|
||||||
"pref_include_other_imes_in_language_switch_list";
|
"pref_include_other_imes_in_language_switch_list";
|
||||||
public static final String PREF_CUSTOM_INPUT_STYLES = "custom_input_styles";
|
public static final String PREF_CUSTOM_INPUT_STYLES = "custom_input_styles";
|
||||||
|
|
|
@ -73,6 +73,7 @@ public class SettingsValues {
|
||||||
public final boolean mShowsHints;
|
public final boolean mShowsHints;
|
||||||
public final boolean mShowsLanguageSwitchKey;
|
public final boolean mShowsLanguageSwitchKey;
|
||||||
public final boolean mShowsEmojiKey;
|
public final boolean mShowsEmojiKey;
|
||||||
|
public final boolean mShowsClipboardKey;
|
||||||
public final boolean mUsePersonalizedDicts;
|
public final boolean mUsePersonalizedDicts;
|
||||||
public final boolean mUseDoubleSpacePeriod;
|
public final boolean mUseDoubleSpacePeriod;
|
||||||
public final boolean mBlockPotentiallyOffensive;
|
public final boolean mBlockPotentiallyOffensive;
|
||||||
|
@ -149,6 +150,7 @@ public class SettingsValues {
|
||||||
mShowsHints = prefs.getBoolean(Settings.PREF_SHOW_HINTS, true);
|
mShowsHints = prefs.getBoolean(Settings.PREF_SHOW_HINTS, true);
|
||||||
mShowsLanguageSwitchKey = prefs.getBoolean(Settings.PREF_SHOW_LANGUAGE_SWITCH_KEY, false);
|
mShowsLanguageSwitchKey = prefs.getBoolean(Settings.PREF_SHOW_LANGUAGE_SWITCH_KEY, false);
|
||||||
mShowsEmojiKey = prefs.getBoolean(Settings.PREF_SHOW_EMOJI_KEY, false);
|
mShowsEmojiKey = prefs.getBoolean(Settings.PREF_SHOW_EMOJI_KEY, false);
|
||||||
|
mShowsClipboardKey = prefs.getBoolean(Settings.PREF_SHOW_CLIPBOARD_KEY, false);
|
||||||
mUsePersonalizedDicts = prefs.getBoolean(Settings.PREF_KEY_USE_PERSONALIZED_DICTS, true);
|
mUsePersonalizedDicts = prefs.getBoolean(Settings.PREF_KEY_USE_PERSONALIZED_DICTS, true);
|
||||||
mUseDoubleSpacePeriod = prefs.getBoolean(Settings.PREF_KEY_USE_DOUBLE_SPACE_PERIOD, true)
|
mUseDoubleSpacePeriod = prefs.getBoolean(Settings.PREF_KEY_USE_DOUBLE_SPACE_PERIOD, true)
|
||||||
&& inputAttributes.mIsGeneralTextInput;
|
&& inputAttributes.mIsGeneralTextInput;
|
||||||
|
@ -188,7 +190,8 @@ public class SettingsValues {
|
||||||
//&& !mInputAttributes.mInputTypeNoAutoCorrect;
|
//&& !mInputAttributes.mInputTypeNoAutoCorrect;
|
||||||
mSuggestionsEnabledPerUserSettings = !mInputAttributes.mIsPasswordField &&
|
mSuggestionsEnabledPerUserSettings = !mInputAttributes.mIsPasswordField &&
|
||||||
readSuggestionsEnabled(prefs);
|
readSuggestionsEnabled(prefs);
|
||||||
mIncognitoModeEnabled = Settings.readAlwaysIncognitoMode(prefs) || mInputAttributes.mNoLearning;
|
mIncognitoModeEnabled = Settings.readAlwaysIncognitoMode(prefs) || mInputAttributes.mNoLearning
|
||||||
|
|| mInputAttributes.mIsPasswordField;
|
||||||
mIsInternal = Settings.isInternal(prefs);
|
mIsInternal = Settings.isInternal(prefs);
|
||||||
mHasCustomKeyPreviewAnimationParams = prefs.getBoolean(
|
mHasCustomKeyPreviewAnimationParams = prefs.getBoolean(
|
||||||
DebugSettings.PREF_HAS_CUSTOM_KEY_PREVIEW_ANIMATION_PARAMS, false);
|
DebugSettings.PREF_HAS_CUSTOM_KEY_PREVIEW_ANIMATION_PARAMS, false);
|
||||||
|
|
|
@ -16,6 +16,8 @@
|
||||||
|
|
||||||
package org.dslul.openboard.inputmethod.latin.suggestions;
|
package org.dslul.openboard.inputmethod.latin.suggestions;
|
||||||
|
|
||||||
|
import android.content.ClipData;
|
||||||
|
import android.content.ClipboardManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.content.res.TypedArray;
|
import android.content.res.TypedArray;
|
||||||
|
@ -59,6 +61,8 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
|
||||||
public interface Listener {
|
public interface Listener {
|
||||||
void pickSuggestionManually(SuggestedWordInfo word);
|
void pickSuggestionManually(SuggestedWordInfo word);
|
||||||
void onCodeInput(int primaryCode, int x, int y, boolean isKeyRepeat);
|
void onCodeInput(int primaryCode, int x, int y, boolean isKeyRepeat);
|
||||||
|
void onTextInput(final String rawText);
|
||||||
|
CharSequence getSelection();
|
||||||
}
|
}
|
||||||
|
|
||||||
static final boolean DBG = DebugFlags.DEBUG_ENABLED;
|
static final boolean DBG = DebugFlags.DEBUG_ENABLED;
|
||||||
|
@ -66,6 +70,7 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
|
||||||
|
|
||||||
private final ViewGroup mSuggestionsStrip;
|
private final ViewGroup mSuggestionsStrip;
|
||||||
private final ImageButton mVoiceKey;
|
private final ImageButton mVoiceKey;
|
||||||
|
private final ImageButton mClipboardKey;
|
||||||
private final ImageButton mOtherKey;
|
private final ImageButton mOtherKey;
|
||||||
MainKeyboardView mMainKeyboardView;
|
MainKeyboardView mMainKeyboardView;
|
||||||
|
|
||||||
|
@ -126,6 +131,7 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
|
||||||
|
|
||||||
mSuggestionsStrip = findViewById(R.id.suggestions_strip);
|
mSuggestionsStrip = findViewById(R.id.suggestions_strip);
|
||||||
mVoiceKey = findViewById(R.id.suggestions_strip_voice_key);
|
mVoiceKey = findViewById(R.id.suggestions_strip_voice_key);
|
||||||
|
mClipboardKey = findViewById(R.id.suggestions_strip_clipboard_key);
|
||||||
mOtherKey = findViewById(R.id.suggestions_strip_other_key);
|
mOtherKey = findViewById(R.id.suggestions_strip_other_key);
|
||||||
mStripVisibilityGroup = new StripVisibilityGroup(this, mSuggestionsStrip);
|
mStripVisibilityGroup = new StripVisibilityGroup(this, mSuggestionsStrip);
|
||||||
|
|
||||||
|
@ -161,9 +167,13 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
|
||||||
R.styleable.Keyboard, defStyle, R.style.SuggestionStripView);
|
R.styleable.Keyboard, defStyle, R.style.SuggestionStripView);
|
||||||
final Drawable iconVoice = keyboardAttr.getDrawable(R.styleable.Keyboard_iconShortcutKey);
|
final Drawable iconVoice = keyboardAttr.getDrawable(R.styleable.Keyboard_iconShortcutKey);
|
||||||
final Drawable iconIncognito = keyboardAttr.getDrawable(R.styleable.Keyboard_iconIncognitoKey);
|
final Drawable iconIncognito = keyboardAttr.getDrawable(R.styleable.Keyboard_iconIncognitoKey);
|
||||||
|
final Drawable iconClipboard = keyboardAttr.getDrawable(R.styleable.Keyboard_iconClipboardKey);
|
||||||
keyboardAttr.recycle();
|
keyboardAttr.recycle();
|
||||||
mVoiceKey.setImageDrawable(iconVoice);
|
mVoiceKey.setImageDrawable(iconVoice);
|
||||||
mVoiceKey.setOnClickListener(this);
|
mVoiceKey.setOnClickListener(this);
|
||||||
|
mClipboardKey.setImageDrawable(iconClipboard);
|
||||||
|
mClipboardKey.setOnClickListener(this);
|
||||||
|
mClipboardKey.setOnLongClickListener(this);
|
||||||
|
|
||||||
mOtherKey.setImageDrawable(iconIncognito);
|
mOtherKey.setImageDrawable(iconIncognito);
|
||||||
}
|
}
|
||||||
|
@ -181,7 +191,8 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
|
||||||
final int visibility = shouldBeVisible ? VISIBLE : (isFullscreenMode ? GONE : INVISIBLE);
|
final int visibility = shouldBeVisible ? VISIBLE : (isFullscreenMode ? GONE : INVISIBLE);
|
||||||
setVisibility(visibility);
|
setVisibility(visibility);
|
||||||
final SettingsValues currentSettingsValues = Settings.getInstance().getCurrent();
|
final SettingsValues currentSettingsValues = Settings.getInstance().getCurrent();
|
||||||
mVoiceKey.setVisibility(currentSettingsValues.mShowsVoiceInputKey ? VISIBLE : INVISIBLE);
|
mVoiceKey.setVisibility(currentSettingsValues.mShowsVoiceInputKey ? VISIBLE : GONE);
|
||||||
|
mClipboardKey.setVisibility(currentSettingsValues.mShowsClipboardKey ? VISIBLE : (mVoiceKey.getVisibility() == GONE ? INVISIBLE : GONE));
|
||||||
mOtherKey.setVisibility(currentSettingsValues.mIncognitoModeEnabled ? VISIBLE : INVISIBLE);
|
mOtherKey.setVisibility(currentSettingsValues.mIncognitoModeEnabled ? VISIBLE : INVISIBLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -256,6 +267,23 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onLongClick(final View view) {
|
public boolean onLongClick(final View view) {
|
||||||
|
if (view == mClipboardKey) {
|
||||||
|
ClipboardManager clipboardManager = (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE);
|
||||||
|
ClipData clipData = clipboardManager.getPrimaryClip();
|
||||||
|
if (clipData != null && clipData.getItemCount() > 0 && clipData.getItemAt(0) != null) {
|
||||||
|
String clipString = clipData.getItemAt(0).coerceToText(getContext()).toString();
|
||||||
|
if (clipString.length() == 1) {
|
||||||
|
mListener.onTextInput(clipString);
|
||||||
|
} else if (clipString.length() > 1) {
|
||||||
|
//awkward workaround
|
||||||
|
mListener.onTextInput(clipString.substring(0, clipString.length() - 1));
|
||||||
|
mListener.onTextInput(clipString.substring(clipString.length() - 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
AudioAndHapticFeedbackManager.getInstance().performHapticAndAudioFeedback(
|
||||||
|
Constants.NOT_A_CODE, this);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
AudioAndHapticFeedbackManager.getInstance().performHapticAndAudioFeedback(
|
AudioAndHapticFeedbackManager.getInstance().performHapticAndAudioFeedback(
|
||||||
Constants.NOT_A_CODE, this);
|
Constants.NOT_A_CODE, this);
|
||||||
return showMoreSuggestions();
|
return showMoreSuggestions();
|
||||||
|
@ -413,6 +441,15 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
|
||||||
false /* isKeyRepeat */);
|
false /* isKeyRepeat */);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (view == mClipboardKey) {
|
||||||
|
CharSequence selectionSequence = mListener.getSelection();
|
||||||
|
if (selectionSequence != null && selectionSequence.length() > 0
|
||||||
|
&& !Settings.getInstance().getCurrent().mInputAttributes.mIsPasswordField) {
|
||||||
|
ClipboardManager clipboardManager = (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE);
|
||||||
|
clipboardManager.setPrimaryClip(ClipData.newPlainText(selectionSequence, selectionSequence));
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
final Object tag = view.getTag();
|
final Object tag = view.getTag();
|
||||||
// {@link Integer} tag is set at
|
// {@link Integer} tag is set at
|
||||||
|
|
|
@ -18,14 +18,20 @@ package org.dslul.openboard.inputmethod.latin.utils;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
|
import android.os.Build;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import androidx.annotation.RequiresApi;
|
||||||
|
|
||||||
public final class DeviceProtectedUtils {
|
public final class DeviceProtectedUtils {
|
||||||
|
|
||||||
static final String TAG = DeviceProtectedUtils.class.getSimpleName();
|
static final String TAG = DeviceProtectedUtils.class.getSimpleName();
|
||||||
|
|
||||||
public static SharedPreferences getSharedPreferences(final Context context) {
|
public static SharedPreferences getSharedPreferences(final Context context) {
|
||||||
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
|
||||||
|
return PreferenceManager.getDefaultSharedPreferences(context);
|
||||||
|
}
|
||||||
Context deviceProtectedContext = getDeviceProtectedContext(context);
|
Context deviceProtectedContext = getDeviceProtectedContext(context);
|
||||||
SharedPreferences deviceProtectedPreferences = PreferenceManager.getDefaultSharedPreferences(deviceProtectedContext);
|
SharedPreferences deviceProtectedPreferences = PreferenceManager.getDefaultSharedPreferences(deviceProtectedContext);
|
||||||
if (deviceProtectedPreferences.getAll().isEmpty()) {
|
if (deviceProtectedPreferences.getAll().isEmpty()) {
|
||||||
|
@ -35,6 +41,7 @@ public final class DeviceProtectedUtils {
|
||||||
return deviceProtectedPreferences;
|
return deviceProtectedPreferences;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@RequiresApi(api = Build.VERSION_CODES.N)
|
||||||
private static Context getDeviceProtectedContext(final Context context) {
|
private static Context getDeviceProtectedContext(final Context context) {
|
||||||
return context.isDeviceProtectedStorage()
|
return context.isDeviceProtectedStorage()
|
||||||
? context : context.createDeviceProtectedStorageContext();
|
? context : context.createDeviceProtectedStorageContext();
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<item android:state_focused="true">
|
<item android:state_focused="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_activities_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
<bitmap android:src="@drawable/ic_emoji_activities_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_pressed="true">
|
<item android:state_pressed="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_activities_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
<bitmap android:src="@drawable/ic_emoji_activities_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_selected="true">
|
<item android:state_selected="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_activities_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
<bitmap android:src="@drawable/ic_emoji_activities_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
||||||
</item>
|
</item>
|
||||||
<item android:drawable="@drawable/ic_emoji_activities_normal_lxx_dark" />
|
<item android:drawable="@drawable/ic_emoji_activities_normal_lxx_dark" />
|
||||||
</selector>
|
</selector>
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<item android:state_focused="true">
|
<item android:state_focused="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_activities_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
<bitmap android:src="@drawable/ic_emoji_activities_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_pressed="true">
|
<item android:state_pressed="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_activities_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
<bitmap android:src="@drawable/ic_emoji_activities_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_selected="true">
|
<item android:state_selected="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_activities_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
<bitmap android:src="@drawable/ic_emoji_activities_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
||||||
</item>
|
</item>
|
||||||
<item android:drawable="@drawable/ic_emoji_activities_normal_lxx_light" />
|
<item android:drawable="@drawable/ic_emoji_activities_normal_lxx_light" />
|
||||||
</selector>
|
</selector>
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<item android:state_focused="true">
|
<item android:state_focused="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_animals_nature_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
<bitmap android:src="@drawable/ic_emoji_animals_nature_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_pressed="true">
|
<item android:state_pressed="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_animals_nature_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
<bitmap android:src="@drawable/ic_emoji_animals_nature_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_selected="true">
|
<item android:state_selected="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_animals_nature_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
<bitmap android:src="@drawable/ic_emoji_animals_nature_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
||||||
</item>
|
</item>
|
||||||
<item android:drawable="@drawable/ic_emoji_animals_nature_normal_lxx_dark" />
|
<item android:drawable="@drawable/ic_emoji_animals_nature_normal_lxx_dark" />
|
||||||
</selector>
|
</selector>
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<item android:state_focused="true">
|
<item android:state_focused="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_animals_nature_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
<bitmap android:src="@drawable/ic_emoji_animals_nature_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_pressed="true">
|
<item android:state_pressed="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_animals_nature_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
<bitmap android:src="@drawable/ic_emoji_animals_nature_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_selected="true">
|
<item android:state_selected="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_animals_nature_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
<bitmap android:src="@drawable/ic_emoji_animals_nature_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
||||||
</item>
|
</item>
|
||||||
<item android:drawable="@drawable/ic_emoji_animals_nature_normal_lxx_light" />
|
<item android:drawable="@drawable/ic_emoji_animals_nature_normal_lxx_light" />
|
||||||
</selector>
|
</selector>
|
||||||
|
|
|
@ -20,13 +20,13 @@
|
||||||
|
|
||||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<item android:state_focused="true">
|
<item android:state_focused="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_emoticons_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
<bitmap android:src="@drawable/ic_emoji_emoticons_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_pressed="true">
|
<item android:state_pressed="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_emoticons_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
<bitmap android:src="@drawable/ic_emoji_emoticons_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_selected="true">
|
<item android:state_selected="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_emoticons_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
<bitmap android:src="@drawable/ic_emoji_emoticons_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
||||||
</item>
|
</item>
|
||||||
<item android:drawable="@drawable/ic_emoji_emoticons_normal_lxx_dark" />
|
<item android:drawable="@drawable/ic_emoji_emoticons_normal_lxx_dark" />
|
||||||
</selector>
|
</selector>
|
||||||
|
|
|
@ -20,13 +20,13 @@
|
||||||
|
|
||||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<item android:state_focused="true">
|
<item android:state_focused="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_emoticons_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
<bitmap android:src="@drawable/ic_emoji_emoticons_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_pressed="true">
|
<item android:state_pressed="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_emoticons_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
<bitmap android:src="@drawable/ic_emoji_emoticons_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_selected="true">
|
<item android:state_selected="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_emoticons_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
<bitmap android:src="@drawable/ic_emoji_emoticons_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
||||||
</item>
|
</item>
|
||||||
<item android:drawable="@drawable/ic_emoji_emoticons_normal_lxx_light" />
|
<item android:drawable="@drawable/ic_emoji_emoticons_normal_lxx_light" />
|
||||||
</selector>
|
</selector>
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<item android:state_focused="true">
|
<item android:state_focused="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_flags_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
<bitmap android:src="@drawable/ic_emoji_flags_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_pressed="true">
|
<item android:state_pressed="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_flags_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
<bitmap android:src="@drawable/ic_emoji_flags_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_selected="true">
|
<item android:state_selected="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_flags_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
<bitmap android:src="@drawable/ic_emoji_flags_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
||||||
</item>
|
</item>
|
||||||
<item android:drawable="@drawable/ic_emoji_flags_normal_lxx_dark" />
|
<item android:drawable="@drawable/ic_emoji_flags_normal_lxx_dark" />
|
||||||
</selector>
|
</selector>
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<item android:state_focused="true">
|
<item android:state_focused="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_flags_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
<bitmap android:src="@drawable/ic_emoji_flags_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_pressed="true">
|
<item android:state_pressed="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_flags_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
<bitmap android:src="@drawable/ic_emoji_flags_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_selected="true">
|
<item android:state_selected="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_flags_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
<bitmap android:src="@drawable/ic_emoji_flags_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
||||||
</item>
|
</item>
|
||||||
<item android:drawable="@drawable/ic_emoji_flags_normal_lxx_light" />
|
<item android:drawable="@drawable/ic_emoji_flags_normal_lxx_light" />
|
||||||
</selector>
|
</selector>
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<item android:state_focused="true">
|
<item android:state_focused="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_food_drink_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
<bitmap android:src="@drawable/ic_emoji_food_drink_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_pressed="true">
|
<item android:state_pressed="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_food_drink_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
<bitmap android:src="@drawable/ic_emoji_food_drink_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_selected="true">
|
<item android:state_selected="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_food_drink_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
<bitmap android:src="@drawable/ic_emoji_food_drink_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
||||||
</item>
|
</item>
|
||||||
<item android:drawable="@drawable/ic_emoji_food_drink_normal_lxx_dark" />
|
<item android:drawable="@drawable/ic_emoji_food_drink_normal_lxx_dark" />
|
||||||
</selector>
|
</selector>
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<item android:state_focused="true">
|
<item android:state_focused="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_food_drink_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
<bitmap android:src="@drawable/ic_emoji_food_drink_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_pressed="true">
|
<item android:state_pressed="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_food_drink_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
<bitmap android:src="@drawable/ic_emoji_food_drink_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_selected="true">
|
<item android:state_selected="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_food_drink_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
<bitmap android:src="@drawable/ic_emoji_food_drink_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
||||||
</item>
|
</item>
|
||||||
<item android:drawable="@drawable/ic_emoji_food_drink_normal_lxx_light" />
|
<item android:drawable="@drawable/ic_emoji_food_drink_normal_lxx_light" />
|
||||||
</selector>
|
</selector>
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<item android:state_focused="true">
|
<item android:state_focused="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_objects_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
<bitmap android:src="@drawable/ic_emoji_objects_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_pressed="true">
|
<item android:state_pressed="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_objects_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
<bitmap android:src="@drawable/ic_emoji_objects_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_selected="true">
|
<item android:state_selected="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_objects_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
<bitmap android:src="@drawable/ic_emoji_objects_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
||||||
</item>
|
</item>
|
||||||
<item android:drawable="@drawable/ic_emoji_objects_normal_lxx_dark" />
|
<item android:drawable="@drawable/ic_emoji_objects_normal_lxx_dark" />
|
||||||
</selector>
|
</selector>
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<item android:state_focused="true">
|
<item android:state_focused="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_objects_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
<bitmap android:src="@drawable/ic_emoji_objects_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_pressed="true">
|
<item android:state_pressed="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_objects_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
<bitmap android:src="@drawable/ic_emoji_objects_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_selected="true">
|
<item android:state_selected="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_objects_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
<bitmap android:src="@drawable/ic_emoji_objects_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
||||||
</item>
|
</item>
|
||||||
<item android:drawable="@drawable/ic_emoji_objects_normal_lxx_light" />
|
<item android:drawable="@drawable/ic_emoji_objects_normal_lxx_light" />
|
||||||
</selector>
|
</selector>
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<item android:state_focused="true">
|
<item android:state_focused="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_people_body_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
<bitmap android:src="@drawable/ic_emoji_people_body_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_pressed="true">
|
<item android:state_pressed="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_people_body_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
<bitmap android:src="@drawable/ic_emoji_people_body_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_selected="true">
|
<item android:state_selected="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_people_body_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
<bitmap android:src="@drawable/ic_emoji_people_body_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
||||||
</item>
|
</item>
|
||||||
<item android:drawable="@drawable/ic_emoji_people_body_normal_lxx_dark" />
|
<item android:drawable="@drawable/ic_emoji_people_body_normal_lxx_dark" />
|
||||||
</selector>
|
</selector>
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<item android:state_focused="true">
|
<item android:state_focused="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_people_body_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
<bitmap android:src="@drawable/ic_emoji_people_body_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_pressed="true">
|
<item android:state_pressed="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_people_body_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
<bitmap android:src="@drawable/ic_emoji_people_body_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_selected="true">
|
<item android:state_selected="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_people_body_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
<bitmap android:src="@drawable/ic_emoji_people_body_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
||||||
</item>
|
</item>
|
||||||
<item android:drawable="@drawable/ic_emoji_people_body_normal_lxx_light" />
|
<item android:drawable="@drawable/ic_emoji_people_body_normal_lxx_light" />
|
||||||
</selector>
|
</selector>
|
||||||
|
|
|
@ -19,13 +19,13 @@
|
||||||
-->
|
-->
|
||||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<item android:state_focused="true">
|
<item android:state_focused="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_recents_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
<bitmap android:src="@drawable/ic_emoji_recents_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_pressed="true">
|
<item android:state_pressed="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_recents_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
<bitmap android:src="@drawable/ic_emoji_recents_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_selected="true">
|
<item android:state_selected="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_recents_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
<bitmap android:src="@drawable/ic_emoji_recents_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
||||||
</item>
|
</item>
|
||||||
<item android:drawable="@drawable/ic_emoji_recents_normal_lxx_dark" />
|
<item android:drawable="@drawable/ic_emoji_recents_normal_lxx_dark" />
|
||||||
</selector>
|
</selector>
|
||||||
|
|
|
@ -19,13 +19,13 @@
|
||||||
-->
|
-->
|
||||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<item android:state_focused="true">
|
<item android:state_focused="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_recents_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
<bitmap android:src="@drawable/ic_emoji_recents_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_pressed="true">
|
<item android:state_pressed="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_recents_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
<bitmap android:src="@drawable/ic_emoji_recents_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_selected="true">
|
<item android:state_selected="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_recents_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
<bitmap android:src="@drawable/ic_emoji_recents_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
||||||
</item>
|
</item>
|
||||||
<item android:drawable="@drawable/ic_emoji_recents_normal_lxx_light" />
|
<item android:drawable="@drawable/ic_emoji_recents_normal_lxx_light" />
|
||||||
</selector>
|
</selector>
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<item android:state_focused="true">
|
<item android:state_focused="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_smileys_emotion_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
<bitmap android:src="@drawable/ic_emoji_smileys_emotion_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_pressed="true">
|
<item android:state_pressed="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_smileys_emotion_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
<bitmap android:src="@drawable/ic_emoji_smileys_emotion_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_selected="true">
|
<item android:state_selected="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_smileys_emotion_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
<bitmap android:src="@drawable/ic_emoji_smileys_emotion_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
||||||
</item>
|
</item>
|
||||||
<item android:drawable="@drawable/ic_emoji_smileys_emotion_normal_lxx_dark" />
|
<item android:drawable="@drawable/ic_emoji_smileys_emotion_normal_lxx_dark" />
|
||||||
</selector>
|
</selector>
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<item android:state_focused="true">
|
<item android:state_focused="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_smileys_emotion_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
<bitmap android:src="@drawable/ic_emoji_smileys_emotion_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_pressed="true">
|
<item android:state_pressed="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_smileys_emotion_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
<bitmap android:src="@drawable/ic_emoji_smileys_emotion_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_selected="true">
|
<item android:state_selected="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_smileys_emotion_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
<bitmap android:src="@drawable/ic_emoji_smileys_emotion_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
||||||
</item>
|
</item>
|
||||||
<item android:drawable="@drawable/ic_emoji_smileys_emotion_normal_lxx_light" />
|
<item android:drawable="@drawable/ic_emoji_smileys_emotion_normal_lxx_light" />
|
||||||
</selector>
|
</selector>
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<item android:state_focused="true">
|
<item android:state_focused="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_symbols_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
<bitmap android:src="@drawable/ic_emoji_symbols_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_pressed="true">
|
<item android:state_pressed="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_symbols_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
<bitmap android:src="@drawable/ic_emoji_symbols_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_selected="true">
|
<item android:state_selected="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_symbols_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
<bitmap android:src="@drawable/ic_emoji_symbols_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
||||||
</item>
|
</item>
|
||||||
<item android:drawable="@drawable/ic_emoji_symbols_normal_lxx_dark" />
|
<item android:drawable="@drawable/ic_emoji_symbols_normal_lxx_dark" />
|
||||||
</selector>
|
</selector>
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<item android:state_focused="true">
|
<item android:state_focused="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_symbols_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
<bitmap android:src="@drawable/ic_emoji_symbols_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_pressed="true">
|
<item android:state_pressed="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_symbols_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
<bitmap android:src="@drawable/ic_emoji_symbols_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_selected="true">
|
<item android:state_selected="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_symbols_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
<bitmap android:src="@drawable/ic_emoji_symbols_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
||||||
</item>
|
</item>
|
||||||
<item android:drawable="@drawable/ic_emoji_symbols_normal_lxx_light" />
|
<item android:drawable="@drawable/ic_emoji_symbols_normal_lxx_light" />
|
||||||
</selector>
|
</selector>
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<item android:state_focused="true">
|
<item android:state_focused="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_travel_places_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
<bitmap android:src="@drawable/ic_emoji_travel_places_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_pressed="true">
|
<item android:state_pressed="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_travel_places_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
<bitmap android:src="@drawable/ic_emoji_travel_places_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_selected="true">
|
<item android:state_selected="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_travel_places_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
<bitmap android:src="@drawable/ic_emoji_travel_places_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
||||||
</item>
|
</item>
|
||||||
<item android:drawable="@drawable/ic_emoji_travel_places_normal_lxx_dark" />
|
<item android:drawable="@drawable/ic_emoji_travel_places_normal_lxx_dark" />
|
||||||
</selector>
|
</selector>
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<item android:state_focused="true">
|
<item android:state_focused="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_travel_places_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
<bitmap android:src="@drawable/ic_emoji_travel_places_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_pressed="true">
|
<item android:state_pressed="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_travel_places_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
<bitmap android:src="@drawable/ic_emoji_travel_places_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
||||||
</item>
|
</item>
|
||||||
<item android:state_selected="true">
|
<item android:state_selected="true">
|
||||||
<bitmap android:src="@drawable/ic_emoji_travel_places_normal_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
<bitmap android:src="@drawable/ic_emoji_travel_places_activated_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
||||||
</item>
|
</item>
|
||||||
<item android:drawable="@drawable/ic_emoji_travel_places_normal_lxx_light" />
|
<item android:drawable="@drawable/ic_emoji_travel_places_normal_lxx_light" />
|
||||||
</selector>
|
</selector>
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
|
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:src="@drawable/sym_keyboard_shift_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
android:src="@drawable/sym_keyboard_shift_locked_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_dark" />
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
|
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:src="@drawable/sym_keyboard_shift_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
android:src="@drawable/sym_keyboard_shift_locked_lxx_dark" android:tint="@color/icon_tint_system_accent_lxx_light" />
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
<vector android:height="24dp" android:tint="#CACACA"
|
||||||
|
android:viewportHeight="24" android:viewportWidth="24"
|
||||||
|
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<path android:fillColor="@android:color/white" android:pathData="M19,2h-4.18C14.4,0.84 13.3,0 12,0c-1.3,0 -2.4,0.84 -2.82,2L5,2c-1.1,0 -2,0.9 -2,2v16c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2L21,4c0,-1.1 -0.9,-2 -2,-2zM12,2c0.55,0 1,0.45 1,1s-0.45,1 -1,1 -1,-0.45 -1,-1 0.45,-1 1,-1zM19,20L5,20L5,4h2v3h10L17,4h2v16z"/>
|
||||||
|
</vector>
|
|
@ -0,0 +1,5 @@
|
||||||
|
<vector android:height="24dp" android:tint="#414141"
|
||||||
|
android:viewportHeight="24" android:viewportWidth="24"
|
||||||
|
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<path android:fillColor="@android:color/white" android:pathData="M19,2h-4.18C14.4,0.84 13.3,0 12,0c-1.3,0 -2.4,0.84 -2.82,2L5,2c-1.1,0 -2,0.9 -2,2v16c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2L21,4c0,-1.1 -0.9,-2 -2,-2zM12,2c0.55,0 1,0.45 1,1s-0.45,1 -1,1 -1,-0.45 -1,-1 0.45,-1 1,-1zM19,20L5,20L5,4h2v3h10L17,4h2v16z"/>
|
||||||
|
</vector>
|
|
@ -59,8 +59,8 @@
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
</org.dslul.openboard.inputmethod.compat.TabHostCompat>
|
</org.dslul.openboard.inputmethod.compat.TabHostCompat>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
<androidx.viewpager2.widget.ViewPager2
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
android:id="@+id/emoji_keyboard_pager"
|
android:id="@+id/emoji_keyboard_list"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical" />
|
android:orientation="vertical" />
|
||||||
|
|
|
@ -20,34 +20,45 @@
|
||||||
|
|
||||||
<merge
|
<merge
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<!-- Provide audio and haptic feedback by ourselves based on the keyboard settings.
|
|
||||||
We just need to ignore the system's audio and haptic feedback settings. -->
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/suggestions_strip"
|
android:id="@+id/suggestions_strip_wrapper"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_marginLeft="@dimen/config_suggestions_strip_horizontal_margin"
|
|
||||||
android:layout_marginRight="@dimen/config_suggestions_strip_horizontal_margin"
|
|
||||||
android:hapticFeedbackEnabled="false"
|
android:hapticFeedbackEnabled="false"
|
||||||
android:soundEffectsEnabled="false" />
|
android:soundEffectsEnabled="false">
|
||||||
<!-- Provide audio and haptic feedback by ourselves based on the keyboard settings.
|
<!-- Provide audio and haptic feedback by ourselves based on the keyboard settings.
|
||||||
We just need to ignore the system's audio and haptic feedback settings. -->
|
We just need to ignore the system's audio and haptic feedback settings. -->
|
||||||
<ImageButton
|
<ImageButton
|
||||||
android:id="@+id/suggestions_strip_other_key"
|
android:id="@+id/suggestions_strip_other_key"
|
||||||
android:layout_width="@dimen/config_suggestions_strip_edge_key_width"
|
android:layout_width="@dimen/config_suggestions_strip_edge_key_width"
|
||||||
android:layout_height="fill_parent"
|
android:layout_height="fill_parent"
|
||||||
android:layout_alignParentStart="true"
|
android:layout_weight="0"
|
||||||
android:layout_centerVertical="true"
|
style="?attr/suggestionWordStyle"
|
||||||
style="?attr/suggestionWordStyle"
|
android:contentDescription="@string/more_keys_strip_description" />
|
||||||
android:contentDescription="@string/more_keys_strip_description" />
|
<!-- Provide audio and haptic feedback by ourselves based on the keyboard settings.
|
||||||
<ImageButton
|
We just need to ignore the system's audio and haptic feedback settings. -->
|
||||||
android:id="@+id/suggestions_strip_voice_key"
|
<LinearLayout
|
||||||
android:layout_width="@dimen/config_suggestions_strip_edge_key_width"
|
android:id="@+id/suggestions_strip"
|
||||||
android:layout_height="fill_parent"
|
android:orientation="horizontal"
|
||||||
android:layout_alignParentEnd="true"
|
android:maxWidth="100dp"
|
||||||
android:layout_alignParentRight="true"
|
android:layout_width="wrap_content"
|
||||||
android:layout_centerVertical="true"
|
android:layout_height="match_parent"
|
||||||
android:contentDescription="@string/spoken_description_mic"
|
android:layout_weight="1"
|
||||||
style="?attr/suggestionWordStyle" />
|
android:hapticFeedbackEnabled="false"
|
||||||
|
android:soundEffectsEnabled="false" />
|
||||||
|
<ImageButton
|
||||||
|
android:id="@+id/suggestions_strip_voice_key"
|
||||||
|
android:layout_width="@dimen/config_suggestions_strip_edge_key_width"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
android:contentDescription="@string/spoken_description_mic"
|
||||||
|
style="?attr/suggestionWordStyle" />
|
||||||
|
<ImageButton
|
||||||
|
android:id="@+id/suggestions_strip_clipboard_key"
|
||||||
|
android:layout_width="@dimen/config_suggestions_strip_edge_key_width"
|
||||||
|
android:scaleType="fitCenter"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
android:contentDescription="@string/spoken_description_mic"
|
||||||
|
style="?attr/suggestionWordStyle" />
|
||||||
|
</LinearLayout>
|
||||||
</merge>
|
</merge>
|
||||||
|
|
|
@ -77,8 +77,9 @@
|
||||||
<dimen name="config_gesture_floating_preview_vertical_padding">15dp</dimen>
|
<dimen name="config_gesture_floating_preview_vertical_padding">15dp</dimen>
|
||||||
|
|
||||||
<!-- Emoji keyboard -->
|
<!-- Emoji keyboard -->
|
||||||
<fraction name="config_emoji_keyboard_key_width">10%p</fraction>
|
<fraction name="config_emoji_keyboard_key_width">8.33%p</fraction>
|
||||||
<fraction name="config_emoji_keyboard_row_height">50%p</fraction>
|
<fraction name="config_emoji_keyboard_row_height">40%p</fraction>
|
||||||
<fraction name="config_emoji_keyboard_key_letter_size">54%p</fraction>
|
<fraction name="config_emoji_keyboard_key_letter_size">70%p</fraction>
|
||||||
<integer name="config_emoji_keyboard_max_page_key_count">20</integer>
|
<fraction name="config_emoji_keyboard_key_label_size">70%p</fraction>
|
||||||
|
<integer name="config_emoji_keyboard_max_recents_key_count">32</integer>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -65,8 +65,9 @@
|
||||||
<dimen name="config_gesture_floating_preview_vertical_padding">17dp</dimen>
|
<dimen name="config_gesture_floating_preview_vertical_padding">17dp</dimen>
|
||||||
|
|
||||||
<!-- Emoji keyboard -->
|
<!-- Emoji keyboard -->
|
||||||
<fraction name="config_emoji_keyboard_key_width">10%p</fraction>
|
<fraction name="config_emoji_keyboard_key_width">8.33%p</fraction>
|
||||||
<fraction name="config_emoji_keyboard_row_height">33%p</fraction>
|
<fraction name="config_emoji_keyboard_row_height">40%p</fraction>
|
||||||
<fraction name="config_emoji_keyboard_key_letter_size">70%p</fraction>
|
<fraction name="config_emoji_keyboard_key_letter_size">64%p</fraction>
|
||||||
<integer name="config_emoji_keyboard_max_page_key_count">30</integer>
|
<fraction name="config_emoji_keyboard_key_label_size">64%p</fraction>
|
||||||
|
<integer name="config_emoji_keyboard_max_recents_key_count">36</integer>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -82,8 +82,9 @@
|
||||||
<dimen name="config_gesture_floating_preview_round_radius">3dp</dimen>
|
<dimen name="config_gesture_floating_preview_round_radius">3dp</dimen>
|
||||||
|
|
||||||
<!-- Emoji keyboard -->
|
<!-- Emoji keyboard -->
|
||||||
<fraction name="config_emoji_keyboard_key_width">12.5%p</fraction>
|
<fraction name="config_emoji_keyboard_key_width">11.11%p</fraction>
|
||||||
<fraction name="config_emoji_keyboard_row_height">33%p</fraction>
|
<fraction name="config_emoji_keyboard_row_height">28%p</fraction>
|
||||||
<fraction name="config_emoji_keyboard_key_letter_size">60%p</fraction>
|
<fraction name="config_emoji_keyboard_key_letter_size">78%p</fraction>
|
||||||
<integer name="config_emoji_keyboard_max_page_key_count">24</integer>
|
<fraction name="config_emoji_keyboard_key_label_size">78%p</fraction>
|
||||||
|
<integer name="config_emoji_keyboard_max_recents_key_count">36</integer>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -65,6 +65,7 @@
|
||||||
<!-- Emoji keyboard -->
|
<!-- Emoji keyboard -->
|
||||||
<fraction name="config_emoji_keyboard_key_width">7.69%p</fraction>
|
<fraction name="config_emoji_keyboard_key_width">7.69%p</fraction>
|
||||||
<fraction name="config_emoji_keyboard_row_height">33%p</fraction>
|
<fraction name="config_emoji_keyboard_row_height">33%p</fraction>
|
||||||
<fraction name="config_emoji_keyboard_key_letter_size">60%p</fraction>
|
<fraction name="config_emoji_keyboard_key_letter_size">58%p</fraction>
|
||||||
<integer name="config_emoji_keyboard_max_page_key_count">39</integer>
|
<fraction name="config_emoji_keyboard_key_label_size">58%p</fraction>
|
||||||
|
<integer name="config_emoji_keyboard_max_recents_key_count">39</integer>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -81,7 +81,8 @@
|
||||||
|
|
||||||
<!-- Emoji keyboard -->
|
<!-- Emoji keyboard -->
|
||||||
<fraction name="config_emoji_keyboard_key_width">10%p</fraction>
|
<fraction name="config_emoji_keyboard_key_width">10%p</fraction>
|
||||||
<fraction name="config_emoji_keyboard_row_height">33%p</fraction>
|
<fraction name="config_emoji_keyboard_row_height">30%p</fraction>
|
||||||
<fraction name="config_emoji_keyboard_key_letter_size">68%p</fraction>
|
<fraction name="config_emoji_keyboard_key_letter_size">64%p</fraction>
|
||||||
<integer name="config_emoji_keyboard_max_page_key_count">30</integer>
|
<fraction name="config_emoji_keyboard_key_label_size">64%p</fraction>
|
||||||
|
<integer name="config_emoji_keyboard_max_recents_key_count">39</integer>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -23,19 +23,15 @@
|
||||||
<color name="highlight_color_lxx_light">@android:color/system_accent1_500</color>
|
<color name="highlight_color_lxx_light">@android:color/system_accent1_500</color>
|
||||||
<color name="gesture_trail_color_lxx_light">@android:color/system_accent1_200</color>
|
<color name="gesture_trail_color_lxx_light">@android:color/system_accent1_200</color>
|
||||||
<color name="sliding_key_input_preview_color_lxx_light">@android:color/system_accent1_900</color>
|
<color name="sliding_key_input_preview_color_lxx_light">@android:color/system_accent1_900</color>
|
||||||
<color name="action_key_background_lxx_light">@android:color/system_accent1_500</color>
|
<color name="action_key_background_lxx_light">@color/highlight_color_lxx_light</color>
|
||||||
<color name="action_key_background_pressed_lxx_light">@android:color/system_accent1_200</color>
|
<color name="action_key_background_pressed_lxx_light">@android:color/system_accent1_200</color>
|
||||||
|
<color name="icon_tint_system_accent_lxx_light">@color/highlight_color_lxx_light</color>
|
||||||
|
|
||||||
<!-- System theming colors for LXX_Dark theme, overriding some colors in main colors.xml -->
|
<!-- System theming colors for LXX_Dark theme, overriding some colors in main colors.xml -->
|
||||||
<color name="highlight_color_lxx_dark">@android:color/system_accent1_500</color>
|
<color name="highlight_color_lxx_dark">@android:color/system_accent1_500</color>
|
||||||
<color name="gesture_trail_color_lxx_dark">@android:color/system_accent1_200</color>
|
<color name="gesture_trail_color_lxx_dark">@android:color/system_accent1_200</color>
|
||||||
<color name="sliding_key_input_preview_color_lxx_dark">@android:color/system_accent1_900</color>
|
<color name="sliding_key_input_preview_color_lxx_dark">@android:color/system_accent1_900</color>
|
||||||
<color name="action_key_background_lxx_dark">@android:color/system_accent1_500</color>
|
<color name="action_key_background_lxx_dark">@color/highlight_color_lxx_dark</color>
|
||||||
<color name="action_key_background_pressed_lxx_dark">@android:color/system_accent1_200</color>
|
<color name="action_key_background_pressed_lxx_dark">@android:color/system_accent1_200</color>
|
||||||
|
<color name="icon_tint_system_accent_lxx_dark">@color/highlight_color_lxx_dark</color>
|
||||||
<!-- System theming color for icons in Material themes. The colors are different because the
|
|
||||||
icons have some transparency (so the background color affects shading) -->
|
|
||||||
<!-- Both themes apply this color as a tint to the normal_lxx_dark icons -->
|
|
||||||
<color name="icon_tint_system_accent_lxx_dark">@android:color/system_accent1_300</color>
|
|
||||||
<color name="icon_tint_system_accent_lxx_light">@android:color/system_accent1_600</color>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -19,29 +19,8 @@
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<resources>
|
<resources>
|
||||||
<style name="KeyboardIcons.LXX_Dark">
|
<style name="KeyboardIcons.LXX_Dark" parent="KeyboardIcons.LXX_Dark.Parent">
|
||||||
<!-- Keyboard icons -->
|
<!-- Use system accent color for shifted shift key -->
|
||||||
<item name="iconShiftKey">@drawable/sym_keyboard_shift_lxx_dark</item>
|
|
||||||
<item name="iconShiftKeyShifted">@drawable/sym_keyboard_shift_locked_lxx_dark_system_accent</item>
|
<item name="iconShiftKeyShifted">@drawable/sym_keyboard_shift_locked_lxx_dark_system_accent</item>
|
||||||
<item name="iconDeleteKey">@drawable/sym_keyboard_delete_lxx_dark</item>
|
|
||||||
<item name="iconTabKey">@drawable/sym_keyboard_tab_lxx_dark</item>
|
|
||||||
<item name="iconSettingsKey">@drawable/sym_keyboard_settings_lxx_dark</item>
|
|
||||||
<item name="iconSpaceKey">@null</item>
|
|
||||||
<item name="iconEnterKey">@drawable/sym_keyboard_return_lxx_dark</item>
|
|
||||||
<item name="iconGoKey">@drawable/sym_keyboard_go_lxx_dark</item>
|
|
||||||
<item name="iconSearchKey">@drawable/sym_keyboard_search_lxx_dark</item>
|
|
||||||
<item name="iconSendKey">@drawable/sym_keyboard_send_lxx_dark</item>
|
|
||||||
<item name="iconNextKey">@drawable/sym_keyboard_next_lxx_dark</item>
|
|
||||||
<item name="iconDoneKey">@drawable/sym_keyboard_done_lxx_dark</item>
|
|
||||||
<item name="iconPreviousKey">@drawable/sym_keyboard_previous_lxx_dark</item>
|
|
||||||
<item name="iconShortcutKey">@drawable/sym_keyboard_voice_lxx_dark</item>
|
|
||||||
<item name="iconShortcutKeyDisabled">@drawable/sym_keyboard_voice_off_lxx_dark</item>
|
|
||||||
<item name="iconIncognitoKey">@drawable/sym_keyboard_incognito_lxx_dark</item>
|
|
||||||
<item name="iconSpaceKeyForNumberLayout">@drawable/sym_keyboard_space_lxx_dark</item>
|
|
||||||
<item name="iconLanguageSwitchKey">@drawable/sym_keyboard_language_switch_lxx_dark</item>
|
|
||||||
<item name="iconZwnjKey">@drawable/sym_keyboard_zwnj_lxx_dark</item>
|
|
||||||
<item name="iconZwjKey">@drawable/sym_keyboard_zwj_lxx_dark</item>
|
|
||||||
<item name="iconEmojiActionKey">@drawable/sym_keyboard_smiley_lxx_dark</item>
|
|
||||||
<item name="iconEmojiNormalKey">@drawable/sym_keyboard_smiley_lxx_dark</item>
|
|
||||||
</style>
|
</style>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -19,29 +19,8 @@
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<resources>
|
<resources>
|
||||||
<style name="KeyboardIcons.LXX_Light">
|
<style name="KeyboardIcons.LXX_Light" parent="KeyboardIcons.LXX_Light.Parent">
|
||||||
<!-- Keyboard icons -->
|
<!-- Use system accent color for shifted shift key -->
|
||||||
<item name="iconShiftKey">@drawable/sym_keyboard_shift_lxx_light</item>
|
|
||||||
<item name="iconShiftKeyShifted">@drawable/sym_keyboard_shift_locked_lxx_light_system_accent</item>
|
<item name="iconShiftKeyShifted">@drawable/sym_keyboard_shift_locked_lxx_light_system_accent</item>
|
||||||
<item name="iconDeleteKey">@drawable/sym_keyboard_delete_lxx_light</item>
|
|
||||||
<item name="iconTabKey">@drawable/sym_keyboard_tab_lxx_light</item>
|
|
||||||
<item name="iconSettingsKey">@drawable/sym_keyboard_settings_lxx_light</item>
|
|
||||||
<item name="iconSpaceKey">@null</item>
|
|
||||||
<item name="iconEnterKey">@drawable/sym_keyboard_return_lxx_light</item>
|
|
||||||
<item name="iconGoKey">@drawable/sym_keyboard_go_lxx_light</item>
|
|
||||||
<item name="iconSearchKey">@drawable/sym_keyboard_search_lxx_light</item>
|
|
||||||
<item name="iconSendKey">@drawable/sym_keyboard_send_lxx_light</item>
|
|
||||||
<item name="iconNextKey">@drawable/sym_keyboard_next_lxx_light</item>
|
|
||||||
<item name="iconDoneKey">@drawable/sym_keyboard_done_lxx_light</item>
|
|
||||||
<item name="iconPreviousKey">@drawable/sym_keyboard_previous_lxx_light</item>
|
|
||||||
<item name="iconShortcutKey">@drawable/sym_keyboard_voice_lxx_light</item>
|
|
||||||
<item name="iconShortcutKeyDisabled">@drawable/sym_keyboard_voice_off_lxx_light</item>
|
|
||||||
<item name="iconIncognitoKey">@drawable/sym_keyboard_incognito_lxx_light</item>
|
|
||||||
<item name="iconSpaceKeyForNumberLayout">@drawable/sym_keyboard_space_lxx_light</item>
|
|
||||||
<item name="iconLanguageSwitchKey">@drawable/sym_keyboard_language_switch_lxx_light</item>
|
|
||||||
<item name="iconZwnjKey">@drawable/sym_keyboard_zwnj_lxx_light</item>
|
|
||||||
<item name="iconZwjKey">@drawable/sym_keyboard_zwj_lxx_light</item>
|
|
||||||
<item name="iconEmojiActionKey">@drawable/sym_keyboard_smiley_lxx_dark</item>
|
|
||||||
<item name="iconEmojiNormalKey">@drawable/sym_keyboard_smiley_lxx_light</item>
|
|
||||||
</style>
|
</style>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -270,6 +270,7 @@
|
||||||
<attr name="iconPreviousKey" format="reference" />
|
<attr name="iconPreviousKey" format="reference" />
|
||||||
<attr name="iconTabKey" format="reference" />
|
<attr name="iconTabKey" format="reference" />
|
||||||
<attr name="iconShortcutKey" format="reference" />
|
<attr name="iconShortcutKey" format="reference" />
|
||||||
|
<attr name="iconClipboardKey" format="reference" />
|
||||||
<attr name="iconIncognitoKey" format="reference" />
|
<attr name="iconIncognitoKey" format="reference" />
|
||||||
<attr name="iconSpaceKeyForNumberLayout" format="reference" />
|
<attr name="iconSpaceKeyForNumberLayout" format="reference" />
|
||||||
<attr name="iconShiftKeyShifted" format="reference" />
|
<attr name="iconShiftKeyShifted" format="reference" />
|
||||||
|
|
|
@ -88,9 +88,10 @@
|
||||||
|
|
||||||
<!-- Emoji keyboard -->
|
<!-- Emoji keyboard -->
|
||||||
<fraction name="config_emoji_keyboard_key_width">12.5%p</fraction>
|
<fraction name="config_emoji_keyboard_key_width">12.5%p</fraction>
|
||||||
<fraction name="config_emoji_keyboard_row_height">33%p</fraction>
|
<fraction name="config_emoji_keyboard_row_height">28%p</fraction>
|
||||||
<fraction name="config_emoji_keyboard_key_letter_size">68%p</fraction>
|
<fraction name="config_emoji_keyboard_key_letter_size">78%p</fraction>
|
||||||
<integer name="config_emoji_keyboard_max_page_key_count">24</integer>
|
<fraction name="config_emoji_keyboard_key_label_size">78%p</fraction>
|
||||||
|
<integer name="config_emoji_keyboard_max_recents_key_count">32</integer>
|
||||||
|
|
||||||
<!-- Key codes of hardware keys that can be used to toggle the Emoji layout.
|
<!-- Key codes of hardware keys that can be used to toggle the Emoji layout.
|
||||||
Each array defines a comma-separated tuple containing:
|
Each array defines a comma-separated tuple containing:
|
||||||
|
|
|
@ -54,6 +54,7 @@
|
||||||
<item>dvorak</item>
|
<item>dvorak</item>
|
||||||
<item>colemak</item>
|
<item>colemak</item>
|
||||||
<item>colemak_dh</item>
|
<item>colemak_dh</item>
|
||||||
|
<item>workman</item>
|
||||||
<item>bepo</item>
|
<item>bepo</item>
|
||||||
<item>pcqwerty</item>
|
<item>pcqwerty</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
@ -65,6 +66,7 @@
|
||||||
<item>Dvorak</item>
|
<item>Dvorak</item>
|
||||||
<item>Colemak</item>
|
<item>Colemak</item>
|
||||||
<item>Colemak Mod-DH</item>
|
<item>Colemak Mod-DH</item>
|
||||||
|
<item>Workman</item>
|
||||||
<item>Bépo</item>
|
<item>Bépo</item>
|
||||||
<item>PC</item>
|
<item>PC</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
@ -78,6 +80,7 @@
|
||||||
<string name="subtype_generic_dvorak" translatable="false">%s (Dvorak)</string>
|
<string name="subtype_generic_dvorak" translatable="false">%s (Dvorak)</string>
|
||||||
<string name="subtype_generic_colemak" translatable="false">%s (Colemak)</string>
|
<string name="subtype_generic_colemak" translatable="false">%s (Colemak)</string>
|
||||||
<string name="subtype_generic_colemak_dh" translatable="false">%s (Colemak Mod-DH)</string>
|
<string name="subtype_generic_colemak_dh" translatable="false">%s (Colemak Mod-DH)</string>
|
||||||
|
<string name="subtype_generic_workman" translatable="false">%s (Workman)</string>
|
||||||
<string name="subtype_generic_bepo" translatable="false">%s (Bépo)</string>
|
<string name="subtype_generic_bepo" translatable="false">%s (Bépo)</string>
|
||||||
<string name="subtype_generic_pcqwerty" translatable="false">%s (PC)</string>
|
<string name="subtype_generic_pcqwerty" translatable="false">%s (PC)</string>
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
<item name="iconSearchKey">@drawable/sym_keyboard_search_holo_dark</item>
|
<item name="iconSearchKey">@drawable/sym_keyboard_search_holo_dark</item>
|
||||||
<item name="iconTabKey">@drawable/sym_keyboard_tab_holo_dark</item>
|
<item name="iconTabKey">@drawable/sym_keyboard_tab_holo_dark</item>
|
||||||
<item name="iconShortcutKey">@drawable/sym_keyboard_voice_holo_dark</item>
|
<item name="iconShortcutKey">@drawable/sym_keyboard_voice_holo_dark</item>
|
||||||
|
<item name="iconClipboardKey">@drawable/sym_keyboard_clipboard_dark</item>
|
||||||
<item name="iconIncognitoKey">@drawable/sym_keyboard_incognito_dark</item>
|
<item name="iconIncognitoKey">@drawable/sym_keyboard_incognito_dark</item>
|
||||||
<item name="iconSpaceKeyForNumberLayout">@drawable/sym_keyboard_space_holo_dark</item>
|
<item name="iconSpaceKeyForNumberLayout">@drawable/sym_keyboard_space_holo_dark</item>
|
||||||
<item name="iconShiftKeyShifted">@drawable/sym_keyboard_shift_locked_holo_dark</item>
|
<item name="iconShiftKeyShifted">@drawable/sym_keyboard_shift_locked_holo_dark</item>
|
||||||
|
|
48
app/src/main/res/values/keyboard-icons-lxx-dark-parent.xml
Normal file
48
app/src/main/res/values/keyboard-icons-lxx-dark-parent.xml
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
/*
|
||||||
|
**
|
||||||
|
** Copyright 2014, The Android Open Source Project
|
||||||
|
**
|
||||||
|
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
** you may not use this file except in compliance with the License.
|
||||||
|
** You may obtain a copy of the License at
|
||||||
|
**
|
||||||
|
** http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
**
|
||||||
|
** Unless required by applicable law or agreed to in writing, software
|
||||||
|
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
** See the License for the specific language governing permissions and
|
||||||
|
** limitations under the License.
|
||||||
|
*/
|
||||||
|
-->
|
||||||
|
|
||||||
|
<resources>
|
||||||
|
<style name="KeyboardIcons.LXX_Dark.Parent">
|
||||||
|
<!-- Keyboard icons -->
|
||||||
|
<item name="iconShiftKey">@drawable/sym_keyboard_shift_lxx_dark</item>
|
||||||
|
<item name="iconShiftKeyShifted">@drawable/sym_keyboard_shift_locked_lxx_dark</item>
|
||||||
|
<item name="iconDeleteKey">@drawable/sym_keyboard_delete_lxx_dark</item>
|
||||||
|
<item name="iconTabKey">@drawable/sym_keyboard_tab_lxx_dark</item>
|
||||||
|
<item name="iconSettingsKey">@drawable/sym_keyboard_settings_lxx_dark</item>
|
||||||
|
<item name="iconSpaceKey">@null</item>
|
||||||
|
<item name="iconEnterKey">@drawable/sym_keyboard_return_lxx_dark</item>
|
||||||
|
<item name="iconGoKey">@drawable/sym_keyboard_go_lxx_dark</item>
|
||||||
|
<item name="iconSearchKey">@drawable/sym_keyboard_search_lxx_dark</item>
|
||||||
|
<item name="iconSendKey">@drawable/sym_keyboard_send_lxx_dark</item>
|
||||||
|
<item name="iconNextKey">@drawable/sym_keyboard_next_lxx_dark</item>
|
||||||
|
<item name="iconDoneKey">@drawable/sym_keyboard_done_lxx_dark</item>
|
||||||
|
<item name="iconPreviousKey">@drawable/sym_keyboard_previous_lxx_dark</item>
|
||||||
|
<item name="iconShortcutKey">@drawable/sym_keyboard_voice_lxx_dark</item>
|
||||||
|
<item name="iconShortcutKeyDisabled">@drawable/sym_keyboard_voice_off_lxx_dark</item>
|
||||||
|
<item name="iconClipboardKey">@drawable/sym_keyboard_clipboard_dark</item>
|
||||||
|
<item name="iconIncognitoKey">@drawable/sym_keyboard_incognito_lxx_dark</item>
|
||||||
|
<item name="iconSpaceKeyForNumberLayout">@drawable/sym_keyboard_space_lxx_dark</item>
|
||||||
|
<item name="iconLanguageSwitchKey">@drawable/sym_keyboard_language_switch_lxx_dark</item>
|
||||||
|
<item name="iconZwnjKey">@drawable/sym_keyboard_zwnj_lxx_dark</item>
|
||||||
|
<item name="iconZwjKey">@drawable/sym_keyboard_zwj_lxx_dark</item>
|
||||||
|
<item name="iconEmojiActionKey">@drawable/sym_keyboard_smiley_lxx_dark</item>
|
||||||
|
<item name="iconEmojiNormalKey">@drawable/sym_keyboard_smiley_lxx_dark</item>
|
||||||
|
</style>
|
||||||
|
</resources>
|
|
@ -19,29 +19,5 @@
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<resources>
|
<resources>
|
||||||
<style name="KeyboardIcons.LXX_Dark">
|
<style name="KeyboardIcons.LXX_Dark" parent="KeyboardIcons.LXX_Dark.Parent" />
|
||||||
<!-- Keyboard icons -->
|
|
||||||
<item name="iconShiftKey">@drawable/sym_keyboard_shift_lxx_dark</item>
|
|
||||||
<item name="iconShiftKeyShifted">@drawable/sym_keyboard_shift_locked_lxx_dark</item>
|
|
||||||
<item name="iconDeleteKey">@drawable/sym_keyboard_delete_lxx_dark</item>
|
|
||||||
<item name="iconTabKey">@drawable/sym_keyboard_tab_lxx_dark</item>
|
|
||||||
<item name="iconSettingsKey">@drawable/sym_keyboard_settings_lxx_dark</item>
|
|
||||||
<item name="iconSpaceKey">@null</item>
|
|
||||||
<item name="iconEnterKey">@drawable/sym_keyboard_return_lxx_dark</item>
|
|
||||||
<item name="iconGoKey">@drawable/sym_keyboard_go_lxx_dark</item>
|
|
||||||
<item name="iconSearchKey">@drawable/sym_keyboard_search_lxx_dark</item>
|
|
||||||
<item name="iconSendKey">@drawable/sym_keyboard_send_lxx_dark</item>
|
|
||||||
<item name="iconNextKey">@drawable/sym_keyboard_next_lxx_dark</item>
|
|
||||||
<item name="iconDoneKey">@drawable/sym_keyboard_done_lxx_dark</item>
|
|
||||||
<item name="iconPreviousKey">@drawable/sym_keyboard_previous_lxx_dark</item>
|
|
||||||
<item name="iconShortcutKey">@drawable/sym_keyboard_voice_lxx_dark</item>
|
|
||||||
<item name="iconShortcutKeyDisabled">@drawable/sym_keyboard_voice_off_lxx_dark</item>
|
|
||||||
<item name="iconIncognitoKey">@drawable/sym_keyboard_incognito_lxx_dark</item>
|
|
||||||
<item name="iconSpaceKeyForNumberLayout">@drawable/sym_keyboard_space_lxx_dark</item>
|
|
||||||
<item name="iconLanguageSwitchKey">@drawable/sym_keyboard_language_switch_lxx_dark</item>
|
|
||||||
<item name="iconZwnjKey">@drawable/sym_keyboard_zwnj_lxx_dark</item>
|
|
||||||
<item name="iconZwjKey">@drawable/sym_keyboard_zwj_lxx_dark</item>
|
|
||||||
<item name="iconEmojiActionKey">@drawable/sym_keyboard_smiley_lxx_dark</item>
|
|
||||||
<item name="iconEmojiNormalKey">@drawable/sym_keyboard_smiley_lxx_dark</item>
|
|
||||||
</style>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
48
app/src/main/res/values/keyboard-icons-lxx-light-parent.xml
Normal file
48
app/src/main/res/values/keyboard-icons-lxx-light-parent.xml
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
/*
|
||||||
|
**
|
||||||
|
** Copyright 2014, The Android Open Source Project
|
||||||
|
**
|
||||||
|
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
** you may not use this file except in compliance with the License.
|
||||||
|
** You may obtain a copy of the License at
|
||||||
|
**
|
||||||
|
** http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
**
|
||||||
|
** Unless required by applicable law or agreed to in writing, software
|
||||||
|
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
** See the License for the specific language governing permissions and
|
||||||
|
** limitations under the License.
|
||||||
|
*/
|
||||||
|
-->
|
||||||
|
|
||||||
|
<resources>
|
||||||
|
<style name="KeyboardIcons.LXX_Light.Parent">
|
||||||
|
<!-- Keyboard icons -->
|
||||||
|
<item name="iconShiftKey">@drawable/sym_keyboard_shift_lxx_light</item>
|
||||||
|
<item name="iconShiftKeyShifted">@drawable/sym_keyboard_shift_locked_lxx_light</item>
|
||||||
|
<item name="iconDeleteKey">@drawable/sym_keyboard_delete_lxx_light</item>
|
||||||
|
<item name="iconTabKey">@drawable/sym_keyboard_tab_lxx_light</item>
|
||||||
|
<item name="iconSettingsKey">@drawable/sym_keyboard_settings_lxx_light</item>
|
||||||
|
<item name="iconSpaceKey">@null</item>
|
||||||
|
<item name="iconEnterKey">@drawable/sym_keyboard_return_lxx_light</item>
|
||||||
|
<item name="iconGoKey">@drawable/sym_keyboard_go_lxx_light</item>
|
||||||
|
<item name="iconSearchKey">@drawable/sym_keyboard_search_lxx_light</item>
|
||||||
|
<item name="iconSendKey">@drawable/sym_keyboard_send_lxx_light</item>
|
||||||
|
<item name="iconNextKey">@drawable/sym_keyboard_next_lxx_light</item>
|
||||||
|
<item name="iconDoneKey">@drawable/sym_keyboard_done_lxx_light</item>
|
||||||
|
<item name="iconPreviousKey">@drawable/sym_keyboard_previous_lxx_light</item>
|
||||||
|
<item name="iconShortcutKey">@drawable/sym_keyboard_voice_lxx_light</item>
|
||||||
|
<item name="iconShortcutKeyDisabled">@drawable/sym_keyboard_voice_off_lxx_light</item>
|
||||||
|
<item name="iconClipboardKey">@drawable/sym_keyboard_clipboard_light</item>
|
||||||
|
<item name="iconIncognitoKey">@drawable/sym_keyboard_incognito_lxx_light</item>
|
||||||
|
<item name="iconSpaceKeyForNumberLayout">@drawable/sym_keyboard_space_lxx_light</item>
|
||||||
|
<item name="iconLanguageSwitchKey">@drawable/sym_keyboard_language_switch_lxx_light</item>
|
||||||
|
<item name="iconZwnjKey">@drawable/sym_keyboard_zwnj_lxx_light</item>
|
||||||
|
<item name="iconZwjKey">@drawable/sym_keyboard_zwj_lxx_light</item>
|
||||||
|
<item name="iconEmojiActionKey">@drawable/sym_keyboard_smiley_lxx_dark</item>
|
||||||
|
<item name="iconEmojiNormalKey">@drawable/sym_keyboard_smiley_lxx_light</item>
|
||||||
|
</style>
|
||||||
|
</resources>
|
|
@ -19,29 +19,5 @@
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<resources>
|
<resources>
|
||||||
<style name="KeyboardIcons.LXX_Light">
|
<style name="KeyboardIcons.LXX_Light" parent="KeyboardIcons.LXX_Light.Parent" />
|
||||||
<!-- Keyboard icons -->
|
|
||||||
<item name="iconShiftKey">@drawable/sym_keyboard_shift_lxx_light</item>
|
|
||||||
<item name="iconShiftKeyShifted">@drawable/sym_keyboard_shift_locked_lxx_light</item>
|
|
||||||
<item name="iconDeleteKey">@drawable/sym_keyboard_delete_lxx_light</item>
|
|
||||||
<item name="iconTabKey">@drawable/sym_keyboard_tab_lxx_light</item>
|
|
||||||
<item name="iconSettingsKey">@drawable/sym_keyboard_settings_lxx_light</item>
|
|
||||||
<item name="iconSpaceKey">@null</item>
|
|
||||||
<item name="iconEnterKey">@drawable/sym_keyboard_return_lxx_light</item>
|
|
||||||
<item name="iconGoKey">@drawable/sym_keyboard_go_lxx_light</item>
|
|
||||||
<item name="iconSearchKey">@drawable/sym_keyboard_search_lxx_light</item>
|
|
||||||
<item name="iconSendKey">@drawable/sym_keyboard_send_lxx_light</item>
|
|
||||||
<item name="iconNextKey">@drawable/sym_keyboard_next_lxx_light</item>
|
|
||||||
<item name="iconDoneKey">@drawable/sym_keyboard_done_lxx_light</item>
|
|
||||||
<item name="iconPreviousKey">@drawable/sym_keyboard_previous_lxx_light</item>
|
|
||||||
<item name="iconShortcutKey">@drawable/sym_keyboard_voice_lxx_light</item>
|
|
||||||
<item name="iconShortcutKeyDisabled">@drawable/sym_keyboard_voice_off_lxx_light</item>
|
|
||||||
<item name="iconIncognitoKey">@drawable/sym_keyboard_incognito_lxx_light</item>
|
|
||||||
<item name="iconSpaceKeyForNumberLayout">@drawable/sym_keyboard_space_lxx_light</item>
|
|
||||||
<item name="iconLanguageSwitchKey">@drawable/sym_keyboard_language_switch_lxx_light</item>
|
|
||||||
<item name="iconZwnjKey">@drawable/sym_keyboard_zwnj_lxx_light</item>
|
|
||||||
<item name="iconZwjKey">@drawable/sym_keyboard_zwj_lxx_light</item>
|
|
||||||
<item name="iconEmojiActionKey">@drawable/sym_keyboard_smiley_lxx_dark</item>
|
|
||||||
<item name="iconEmojiNormalKey">@drawable/sym_keyboard_smiley_lxx_light</item>
|
|
||||||
</style>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -179,6 +179,10 @@
|
||||||
<!-- The summary text to describe the reason why the "Voice input key" option is disabled. [CHAR LIMIT=100] -->
|
<!-- The summary text to describe the reason why the "Voice input key" option is disabled. [CHAR LIMIT=100] -->
|
||||||
<string name="voice_input_disabled_summary">No voice input methods enabled. Check Languages & input settings.</string>
|
<string name="voice_input_disabled_summary">No voice input methods enabled. Check Languages & input settings.</string>
|
||||||
|
|
||||||
|
<!-- Preferences item for enabling pasting from keyboard -->
|
||||||
|
<string name="show_clipboard_key">Clipboard key</string>
|
||||||
|
<string name="show_clipboard_key_summary">Press to copy, long-press to paste.</string>
|
||||||
|
|
||||||
<!-- Title for configuring input method settings [CHAR LIMIT=35] -->
|
<!-- Title for configuring input method settings [CHAR LIMIT=35] -->
|
||||||
<string name="configure_input_method">Configure input methods</string>
|
<string name="configure_input_method">Configure input methods</string>
|
||||||
|
|
||||||
|
@ -351,6 +355,17 @@ language among those that use the Latin alphabet. This keyboard is laid out in t
|
||||||
disposition that offers additional keys, but smaller keys compared to other common dispositions for
|
disposition that offers additional keys, but smaller keys compared to other common dispositions for
|
||||||
mobile devices. [CHAR LIMIT=25] -->
|
mobile devices. [CHAR LIMIT=25] -->
|
||||||
<string name="subtype_no_language_colemak_dh">Alphabet (Colemak Mod-DH)</string>
|
<string name="subtype_no_language_colemak_dh">Alphabet (Colemak Mod-DH)</string>
|
||||||
|
<!-- This string is displayed in the description for a keyboard type. It refers specifically to
|
||||||
|
the Latin alphabet, as opposed to Cyrillic, Arabic, Hebrew or other scripts.
|
||||||
|
When the device is configured to use a language using a script other than the Latin alphabet, the
|
||||||
|
user still needs a keyboard that can input Latin characters for passwords or login names for
|
||||||
|
example, and a way to switch to this Latin alphabet keyboard. This string is the description for
|
||||||
|
this keyboard, so users of other scripts should understand when they read this that it represents a
|
||||||
|
keyboard that is meant for them to be able to enter Latin characters as opposed to the script they
|
||||||
|
are used to. This keyboard does not provide a dictionary, and it is not tied to any specific
|
||||||
|
language among those that use the Latin alphabet. This keyboard is laid out in the Workman
|
||||||
|
disposition rather than other common dispositions for Latin languages. [CHAR LIMIT=25] -->
|
||||||
|
<string name="subtype_no_language_workman">Alphabet (Workman)</string>
|
||||||
<string name="subtype_no_language_pcqwerty">Alphabet (PC)</string>
|
<string name="subtype_no_language_pcqwerty">Alphabet (PC)</string>
|
||||||
<!-- Description for Emoji keyboard subtype [CHAR LIMIT=25] -->
|
<!-- Description for Emoji keyboard subtype [CHAR LIMIT=25] -->
|
||||||
<string name="subtype_emoji">Emoji</string>
|
<string name="subtype_emoji">Emoji</string>
|
||||||
|
|
64
app/src/main/res/xml-sw600dp/rows_workman.xml
Normal file
64
app/src/main/res/xml-sw600dp/rows_workman.xml
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
/*
|
||||||
|
**
|
||||||
|
** Copyright 2011, The Android Open Source Project
|
||||||
|
**
|
||||||
|
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
** you may not use this file except in compliance with the License.
|
||||||
|
** You may obtain a copy of the License at
|
||||||
|
**
|
||||||
|
** http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
**
|
||||||
|
** Unless required by applicable law or agreed to in writing, software
|
||||||
|
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
** See the License for the specific language governing permissions and
|
||||||
|
** limitations under the License.
|
||||||
|
*/
|
||||||
|
-->
|
||||||
|
|
||||||
|
<merge
|
||||||
|
xmlns:latin="http://schemas.android.com/apk/res-auto"
|
||||||
|
>
|
||||||
|
<include
|
||||||
|
latin:keyboardLayout="@xml/key_styles_common" />
|
||||||
|
Ideally just the keyWidth should be different and the spacer should adjust to fill
|
||||||
|
the available space. -->
|
||||||
|
<!-- First row -->
|
||||||
|
<Row>
|
||||||
|
<include
|
||||||
|
latin:keyboardLayout="@xml/rowkeys_workman1"
|
||||||
|
latin:keyWidth="9.0%p" />
|
||||||
|
<Key
|
||||||
|
latin:keyStyle="deleteKeyStyle"
|
||||||
|
latin:keyWidth="fillRight" />
|
||||||
|
</Row>
|
||||||
|
<!-- Second row -->
|
||||||
|
<Row>
|
||||||
|
<include
|
||||||
|
latin:keyboardLayout="@xml/rowkeys_workman2"
|
||||||
|
latin:keyWidth="9.0%p" />
|
||||||
|
<Key
|
||||||
|
latin:keyStyle="enterKeyStyle"
|
||||||
|
latin:keyWidth="fillRight" />
|
||||||
|
</Row>
|
||||||
|
<!-- Third row -->
|
||||||
|
<Row>
|
||||||
|
<Key
|
||||||
|
latin:keyStyle="shiftKeyStyle"
|
||||||
|
latin:keyWidth="10.0%p" />
|
||||||
|
<include
|
||||||
|
latin:keyboardLayout="@xml/rowkeys_workman3"
|
||||||
|
latin:keyWidth="9.0%p" />
|
||||||
|
<include
|
||||||
|
latin:keyboardLayout="@xml/keys_exclamation_question"
|
||||||
|
latin:keyWidth="9.0%p" />
|
||||||
|
<Key
|
||||||
|
latin:keyStyle="shiftKeyStyle"
|
||||||
|
latin:keyWidth="fillRight" />
|
||||||
|
</Row>
|
||||||
|
<!-- Fourth row -->
|
||||||
|
<include
|
||||||
|
latin:keyboardLayout="@xml/row_qwerty4" />
|
||||||
|
</merge>
|
|
@ -21,7 +21,8 @@
|
||||||
<Keyboard
|
<Keyboard
|
||||||
xmlns:latin="http://schemas.android.com/apk/res-auto"
|
xmlns:latin="http://schemas.android.com/apk/res-auto"
|
||||||
latin:keyWidth="@fraction/config_emoji_keyboard_key_width"
|
latin:keyWidth="@fraction/config_emoji_keyboard_key_width"
|
||||||
latin:keyLetterSize="90%p"
|
latin:keyLetterSize="@fraction/config_emoji_keyboard_key_letter_size"
|
||||||
|
latin:keyLabelSize="@fraction/config_emoji_keyboard_key_label_size"
|
||||||
latin:rowHeight="@fraction/config_emoji_keyboard_row_height"
|
latin:rowHeight="@fraction/config_emoji_keyboard_row_height"
|
||||||
>
|
>
|
||||||
<GridRows
|
<GridRows
|
||||||
|
|
|
@ -21,7 +21,8 @@
|
||||||
<Keyboard
|
<Keyboard
|
||||||
xmlns:latin="http://schemas.android.com/apk/res-auto"
|
xmlns:latin="http://schemas.android.com/apk/res-auto"
|
||||||
latin:keyWidth="@fraction/config_emoji_keyboard_key_width"
|
latin:keyWidth="@fraction/config_emoji_keyboard_key_width"
|
||||||
latin:keyLetterSize="90%p"
|
latin:keyLetterSize="@fraction/config_emoji_keyboard_key_letter_size"
|
||||||
|
latin:keyLabelSize="@fraction/config_emoji_keyboard_key_label_size"
|
||||||
latin:rowHeight="@fraction/config_emoji_keyboard_row_height"
|
latin:rowHeight="@fraction/config_emoji_keyboard_row_height"
|
||||||
>
|
>
|
||||||
<GridRows
|
<GridRows
|
||||||
|
|
|
@ -21,7 +21,8 @@
|
||||||
<Keyboard
|
<Keyboard
|
||||||
xmlns:latin="http://schemas.android.com/apk/res-auto"
|
xmlns:latin="http://schemas.android.com/apk/res-auto"
|
||||||
latin:keyWidth="@fraction/config_emoji_keyboard_key_width"
|
latin:keyWidth="@fraction/config_emoji_keyboard_key_width"
|
||||||
latin:keyLetterSize="90%p"
|
latin:keyLetterSize="@fraction/config_emoji_keyboard_key_letter_size"
|
||||||
|
latin:keyLabelSize="@fraction/config_emoji_keyboard_key_label_size"
|
||||||
latin:rowHeight="@fraction/config_emoji_keyboard_row_height"
|
latin:rowHeight="@fraction/config_emoji_keyboard_row_height"
|
||||||
>
|
>
|
||||||
<GridRows
|
<GridRows
|
||||||
|
|
|
@ -21,7 +21,8 @@
|
||||||
<Keyboard
|
<Keyboard
|
||||||
xmlns:latin="http://schemas.android.com/apk/res-auto"
|
xmlns:latin="http://schemas.android.com/apk/res-auto"
|
||||||
latin:keyWidth="@fraction/config_emoji_keyboard_key_width"
|
latin:keyWidth="@fraction/config_emoji_keyboard_key_width"
|
||||||
latin:keyLetterSize="90%p"
|
latin:keyLetterSize="@fraction/config_emoji_keyboard_key_letter_size"
|
||||||
|
latin:keyLabelSize="@fraction/config_emoji_keyboard_key_label_size"
|
||||||
latin:rowHeight="@fraction/config_emoji_keyboard_row_height"
|
latin:rowHeight="@fraction/config_emoji_keyboard_row_height"
|
||||||
>
|
>
|
||||||
<GridRows
|
<GridRows
|
||||||
|
|
|
@ -21,7 +21,8 @@
|
||||||
<Keyboard
|
<Keyboard
|
||||||
xmlns:latin="http://schemas.android.com/apk/res-auto"
|
xmlns:latin="http://schemas.android.com/apk/res-auto"
|
||||||
latin:keyWidth="@fraction/config_emoji_keyboard_key_width"
|
latin:keyWidth="@fraction/config_emoji_keyboard_key_width"
|
||||||
latin:keyLetterSize="90%p"
|
latin:keyLetterSize="@fraction/config_emoji_keyboard_key_letter_size"
|
||||||
|
latin:keyLabelSize="@fraction/config_emoji_keyboard_key_label_size"
|
||||||
latin:rowHeight="@fraction/config_emoji_keyboard_row_height"
|
latin:rowHeight="@fraction/config_emoji_keyboard_row_height"
|
||||||
>
|
>
|
||||||
<GridRows
|
<GridRows
|
||||||
|
|
|
@ -21,7 +21,8 @@
|
||||||
<Keyboard
|
<Keyboard
|
||||||
xmlns:latin="http://schemas.android.com/apk/res-auto"
|
xmlns:latin="http://schemas.android.com/apk/res-auto"
|
||||||
latin:keyWidth="@fraction/config_emoji_keyboard_key_width"
|
latin:keyWidth="@fraction/config_emoji_keyboard_key_width"
|
||||||
latin:keyLetterSize="90%p"
|
latin:keyLetterSize="@fraction/config_emoji_keyboard_key_letter_size"
|
||||||
|
latin:keyLabelSize="@fraction/config_emoji_keyboard_key_label_size"
|
||||||
latin:rowHeight="@fraction/config_emoji_keyboard_row_height"
|
latin:rowHeight="@fraction/config_emoji_keyboard_row_height"
|
||||||
>
|
>
|
||||||
<GridRows
|
<GridRows
|
||||||
|
|
|
@ -21,8 +21,8 @@
|
||||||
<Keyboard
|
<Keyboard
|
||||||
xmlns:latin="http://schemas.android.com/apk/res-auto"
|
xmlns:latin="http://schemas.android.com/apk/res-auto"
|
||||||
latin:keyWidth="@fraction/config_emoji_keyboard_key_width"
|
latin:keyWidth="@fraction/config_emoji_keyboard_key_width"
|
||||||
latin:keyLetterSize="90%p"
|
latin:keyLetterSize="@fraction/config_emoji_keyboard_key_letter_size"
|
||||||
latin:keyLabelSize="60%p"
|
latin:keyLabelSize="@fraction/config_emoji_keyboard_key_label_size"
|
||||||
latin:rowHeight="@fraction/config_emoji_keyboard_row_height"
|
latin:rowHeight="@fraction/config_emoji_keyboard_row_height"
|
||||||
>
|
>
|
||||||
<GridRows
|
<GridRows
|
||||||
|
|
|
@ -21,7 +21,8 @@
|
||||||
<Keyboard
|
<Keyboard
|
||||||
xmlns:latin="http://schemas.android.com/apk/res-auto"
|
xmlns:latin="http://schemas.android.com/apk/res-auto"
|
||||||
latin:keyWidth="@fraction/config_emoji_keyboard_key_width"
|
latin:keyWidth="@fraction/config_emoji_keyboard_key_width"
|
||||||
latin:keyLetterSize="90%p"
|
latin:keyLetterSize="@fraction/config_emoji_keyboard_key_letter_size"
|
||||||
|
latin:keyLabelSize="@fraction/config_emoji_keyboard_key_label_size"
|
||||||
latin:rowHeight="@fraction/config_emoji_keyboard_row_height"
|
latin:rowHeight="@fraction/config_emoji_keyboard_row_height"
|
||||||
>
|
>
|
||||||
<GridRows
|
<GridRows
|
||||||
|
|
|
@ -21,7 +21,8 @@
|
||||||
<Keyboard
|
<Keyboard
|
||||||
xmlns:latin="http://schemas.android.com/apk/res-auto"
|
xmlns:latin="http://schemas.android.com/apk/res-auto"
|
||||||
latin:keyWidth="@fraction/config_emoji_keyboard_key_width"
|
latin:keyWidth="@fraction/config_emoji_keyboard_key_width"
|
||||||
latin:keyLetterSize="90%p"
|
latin:keyLetterSize="@fraction/config_emoji_keyboard_key_letter_size"
|
||||||
|
latin:keyLabelSize="@fraction/config_emoji_keyboard_key_label_size"
|
||||||
latin:rowHeight="@fraction/config_emoji_keyboard_row_height"
|
latin:rowHeight="@fraction/config_emoji_keyboard_row_height"
|
||||||
>
|
>
|
||||||
<GridRows
|
<GridRows
|
||||||
|
|
|
@ -21,7 +21,8 @@
|
||||||
<Keyboard
|
<Keyboard
|
||||||
xmlns:latin="http://schemas.android.com/apk/res-auto"
|
xmlns:latin="http://schemas.android.com/apk/res-auto"
|
||||||
latin:keyWidth="@fraction/config_emoji_keyboard_key_width"
|
latin:keyWidth="@fraction/config_emoji_keyboard_key_width"
|
||||||
latin:keyLetterSize="90%p"
|
latin:keyLetterSize="@fraction/config_emoji_keyboard_key_letter_size"
|
||||||
|
latin:keyLabelSize="@fraction/config_emoji_keyboard_key_label_size"
|
||||||
latin:rowHeight="@fraction/config_emoji_keyboard_row_height"
|
latin:rowHeight="@fraction/config_emoji_keyboard_row_height"
|
||||||
>
|
>
|
||||||
<GridRows
|
<GridRows
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
xmlns:latin="http://schemas.android.com/apk/res-auto"
|
xmlns:latin="http://schemas.android.com/apk/res-auto"
|
||||||
latin:keyWidth="@fraction/config_emoji_keyboard_key_width"
|
latin:keyWidth="@fraction/config_emoji_keyboard_key_width"
|
||||||
latin:keyLetterSize="@fraction/config_emoji_keyboard_key_letter_size"
|
latin:keyLetterSize="@fraction/config_emoji_keyboard_key_letter_size"
|
||||||
latin:keyLabelSize="60%p"
|
latin:keyLabelSize="@fraction/config_emoji_keyboard_key_label_size"
|
||||||
latin:rowHeight="@fraction/config_emoji_keyboard_row_height"
|
latin:rowHeight="@fraction/config_emoji_keyboard_row_height"
|
||||||
>
|
>
|
||||||
<GridRows
|
<GridRows
|
||||||
|
|
26
app/src/main/res/xml/kbd_workman.xml
Normal file
26
app/src/main/res/xml/kbd_workman.xml
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
/*
|
||||||
|
**
|
||||||
|
** Copyright 2008, The Android Open Source Project
|
||||||
|
**
|
||||||
|
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
** you may not use this file except in compliance with the License.
|
||||||
|
** You may obtain a copy of the License at
|
||||||
|
**
|
||||||
|
** http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
**
|
||||||
|
** Unless required by applicable law or agreed to in writing, software
|
||||||
|
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
** See the License for the specific language governing permissions and
|
||||||
|
** limitations under the License.
|
||||||
|
*/
|
||||||
|
-->
|
||||||
|
|
||||||
|
<Keyboard
|
||||||
|
xmlns:latin="http://schemas.android.com/apk/res-auto"
|
||||||
|
>
|
||||||
|
<include
|
||||||
|
latin:keyboardLayout="@xml/rows_workman" />
|
||||||
|
</Keyboard>
|
|
@ -21,7 +21,8 @@
|
||||||
<merge xmlns:latin="http://schemas.android.com/apk/res-auto">
|
<merge xmlns:latin="http://schemas.android.com/apk/res-auto">
|
||||||
<!-- U+00A3: "£" POUND SIGN
|
<!-- U+00A3: "£" POUND SIGN
|
||||||
U+20AC: "€" EURO SIGN
|
U+20AC: "€" EURO SIGN
|
||||||
U+00A2: "¢" CENT SIGN -->
|
U+00A2: "¢" CENT SIGN
|
||||||
|
U+20BA: "₺" TURKISH LIRA SIGN -->
|
||||||
<key-style
|
<key-style
|
||||||
latin:styleName="currencyKeyStyle"
|
latin:styleName="currencyKeyStyle"
|
||||||
latin:keySpec="!text/keyspec_currency"
|
latin:keySpec="!text/keyspec_currency"
|
||||||
|
@ -39,4 +40,7 @@
|
||||||
<key-style
|
<key-style
|
||||||
latin:styleName="moreCurrency4KeyStyle"
|
latin:styleName="moreCurrency4KeyStyle"
|
||||||
latin:keySpec="¢" />
|
latin:keySpec="¢" />
|
||||||
|
<key-style
|
||||||
|
latin:styleName="moreCurrency5KeyStyle"
|
||||||
|
latin:keySpec="₺"/>
|
||||||
</merge>
|
</merge>
|
||||||
|
|
43
app/src/main/res/xml/keyboard_layout_set_workman.xml
Normal file
43
app/src/main/res/xml/keyboard_layout_set_workman.xml
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
/*
|
||||||
|
**
|
||||||
|
** Copyright 2012, The Android Open Source Project
|
||||||
|
**
|
||||||
|
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
** you may not use this file except in compliance with the License.
|
||||||
|
** You may obtain a copy of the License at
|
||||||
|
**
|
||||||
|
** http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
**
|
||||||
|
** Unless required by applicable law or agreed to in writing, software
|
||||||
|
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
** See the License for the specific language governing permissions and
|
||||||
|
** limitations under the License.
|
||||||
|
*/
|
||||||
|
-->
|
||||||
|
|
||||||
|
<KeyboardLayoutSet
|
||||||
|
xmlns:latin="http://schemas.android.com/apk/res-auto">
|
||||||
|
<Element
|
||||||
|
latin:elementName="alphabet"
|
||||||
|
latin:elementKeyboard="@xml/kbd_workman"
|
||||||
|
latin:enableProximityCharsCorrection="true"
|
||||||
|
latin:supportsSplitLayout="true" />
|
||||||
|
<Element
|
||||||
|
latin:elementName="symbols"
|
||||||
|
latin:elementKeyboard="@xml/kbd_symbols" />
|
||||||
|
<Element
|
||||||
|
latin:elementName="symbolsShifted"
|
||||||
|
latin:elementKeyboard="@xml/kbd_symbols_shift" />
|
||||||
|
<Element
|
||||||
|
latin:elementName="phone"
|
||||||
|
latin:elementKeyboard="@xml/kbd_phone" />
|
||||||
|
<Element
|
||||||
|
latin:elementName="phoneSymbols"
|
||||||
|
latin:elementKeyboard="@xml/kbd_phone_symbols" />
|
||||||
|
<Element
|
||||||
|
latin:elementName="number"
|
||||||
|
latin:elementKeyboard="@xml/kbd_number" />
|
||||||
|
</KeyboardLayoutSet>
|
|
@ -71,4 +71,10 @@
|
||||||
android:title="@string/voice_input"
|
android:title="@string/voice_input"
|
||||||
android:defaultValue="true"
|
android:defaultValue="true"
|
||||||
android:persistent="true" />
|
android:persistent="true" />
|
||||||
|
<CheckBoxPreference
|
||||||
|
android:key="pref_show_clipboard_key"
|
||||||
|
android:title="@string/show_clipboard_key"
|
||||||
|
android:summary="@string/show_clipboard_key_summary"
|
||||||
|
android:defaultValue="false"
|
||||||
|
android:persistent="true" />
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
|
74
app/src/main/res/xml/rowkeys_workman1.xml
Normal file
74
app/src/main/res/xml/rowkeys_workman1.xml
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
/*
|
||||||
|
**
|
||||||
|
** Copyright 2014, The Android Open Source Project
|
||||||
|
**
|
||||||
|
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
** you may not use this file except in compliance with the License.
|
||||||
|
** You may obtain a copy of the License at
|
||||||
|
**
|
||||||
|
** http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
**
|
||||||
|
** Unless required by applicable law or agreed to in writing, software
|
||||||
|
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
** See the License for the specific language governing permissions and
|
||||||
|
** limitations under the License.
|
||||||
|
*/
|
||||||
|
-->
|
||||||
|
|
||||||
|
<merge
|
||||||
|
xmlns:latin="http://schemas.android.com/apk/res-auto"
|
||||||
|
>
|
||||||
|
<Key
|
||||||
|
latin:keySpec="!text/keyspec_q"
|
||||||
|
latin:keyHintLabel="1"
|
||||||
|
latin:additionalMoreKeys="1"
|
||||||
|
latin:moreKeys="!text/morekeys_q" />
|
||||||
|
<Key
|
||||||
|
latin:keySpec="d"
|
||||||
|
latin:keyHintLabel="2"
|
||||||
|
latin:additionalMoreKeys="2"
|
||||||
|
latin:moreKeys="!text/morekeys_w" />
|
||||||
|
<Key
|
||||||
|
latin:keySpec="r"
|
||||||
|
latin:keyHintLabel="3"
|
||||||
|
latin:additionalMoreKeys="3"
|
||||||
|
latin:moreKeys="!text/morekeys_e" />
|
||||||
|
<Key
|
||||||
|
latin:keySpec="!text/keyspec_w"
|
||||||
|
latin:keyHintLabel="4"
|
||||||
|
latin:additionalMoreKeys="4"
|
||||||
|
latin:moreKeys="!text/morekeys_r" />
|
||||||
|
<Key
|
||||||
|
latin:keySpec="b"
|
||||||
|
latin:keyHintLabel="5"
|
||||||
|
latin:additionalMoreKeys="5"
|
||||||
|
latin:moreKeys="!text/morekeys_t" />
|
||||||
|
|
||||||
|
<Key
|
||||||
|
latin:keySpec="j"
|
||||||
|
latin:keyHintLabel="6"
|
||||||
|
latin:additionalMoreKeys="6"
|
||||||
|
latin:moreKeys="!text/morekeys_y" />
|
||||||
|
<Key
|
||||||
|
latin:keySpec="f"
|
||||||
|
latin:keyHintLabel="7"
|
||||||
|
latin:additionalMoreKeys="7"
|
||||||
|
latin:moreKeys="!text/morekeys_u" />
|
||||||
|
<Key
|
||||||
|
latin:keySpec="u"
|
||||||
|
latin:keyHintLabel="8"
|
||||||
|
latin:additionalMoreKeys="8"
|
||||||
|
latin:moreKeys="!text/morekeys_i" />
|
||||||
|
<Key
|
||||||
|
latin:keySpec="p"
|
||||||
|
latin:keyHintLabel="9"
|
||||||
|
latin:additionalMoreKeys="9"
|
||||||
|
latin:moreKeys="!text/morekeys_o" />
|
||||||
|
<Key
|
||||||
|
latin:keySpec=";"
|
||||||
|
latin:keyHintLabel="0"
|
||||||
|
latin:additionalMoreKeys="0" />
|
||||||
|
</merge>
|
71
app/src/main/res/xml/rowkeys_workman2.xml
Normal file
71
app/src/main/res/xml/rowkeys_workman2.xml
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
/*
|
||||||
|
**
|
||||||
|
** Copyright 2014, The Android Open Source Project
|
||||||
|
**
|
||||||
|
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
** you may not use this file except in compliance with the License.
|
||||||
|
** You may obtain a copy of the License at
|
||||||
|
**
|
||||||
|
** http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
**
|
||||||
|
** Unless required by applicable law or agreed to in writing, software
|
||||||
|
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
** See the License for the specific language governing permissions and
|
||||||
|
** limitations under the License.
|
||||||
|
*/
|
||||||
|
-->
|
||||||
|
|
||||||
|
<merge
|
||||||
|
xmlns:latin="http://schemas.android.com/apk/res-auto"
|
||||||
|
>
|
||||||
|
<Key
|
||||||
|
latin:keySpec="a"
|
||||||
|
latin:keyHintLabel="\@"
|
||||||
|
latin:additionalMoreKeys="\\@"
|
||||||
|
latin:moreKeys="!text/morekeys_a" />
|
||||||
|
<Key
|
||||||
|
latin:keySpec="s"
|
||||||
|
latin:keyHintLabel="#"
|
||||||
|
latin:additionalMoreKeys="#"
|
||||||
|
latin:moreKeys="!text/morekeys_s" />
|
||||||
|
<Key
|
||||||
|
latin:keySpec="h"
|
||||||
|
latin:keyHintLabel="$"
|
||||||
|
latin:additionalMoreKeys="$"
|
||||||
|
latin:moreKeys="!text/morekeys_d" />
|
||||||
|
<Key
|
||||||
|
latin:keySpec="t"
|
||||||
|
latin:keyHintLabel="%"
|
||||||
|
latin:additionalMoreKeys="%" />
|
||||||
|
<Key
|
||||||
|
latin:keySpec="g"
|
||||||
|
latin:keyHintLabel="&"
|
||||||
|
latin:additionalMoreKeys="&"
|
||||||
|
latin:moreKeys="!text/morekeys_g" />
|
||||||
|
|
||||||
|
<Key
|
||||||
|
latin:keySpec="!text/keyspec_y"
|
||||||
|
latin:keyHintLabel="-"
|
||||||
|
latin:additionalMoreKeys="-"
|
||||||
|
latin:moreKeys="!text/morekeys_h" />
|
||||||
|
<Key
|
||||||
|
latin:keySpec="n"
|
||||||
|
latin:keyHintLabel="+"
|
||||||
|
latin:additionalMoreKeys="+"
|
||||||
|
latin:moreKeys="!text/morekeys_j" />
|
||||||
|
<Key
|
||||||
|
latin:keySpec="e"
|
||||||
|
latin:keyHintLabel="("
|
||||||
|
latin:additionalMoreKeys="("
|
||||||
|
latin:moreKeys="!text/morekeys_k" />
|
||||||
|
<Key
|
||||||
|
latin:keySpec="o"
|
||||||
|
latin:keyHintLabel=")"
|
||||||
|
latin:additionalMoreKeys=")"
|
||||||
|
latin:moreKeys="!text/morekeys_l" />
|
||||||
|
<Key
|
||||||
|
latin:keySpec="i"/>
|
||||||
|
</merge>
|
58
app/src/main/res/xml/rowkeys_workman3.xml
Normal file
58
app/src/main/res/xml/rowkeys_workman3.xml
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
/*
|
||||||
|
**
|
||||||
|
** Copyright 2014, The Android Open Source Project
|
||||||
|
**
|
||||||
|
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
** you may not use this file except in compliance with the License.
|
||||||
|
** You may obtain a copy of the License at
|
||||||
|
**
|
||||||
|
** http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
**
|
||||||
|
** Unless required by applicable law or agreed to in writing, software
|
||||||
|
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
** See the License for the specific language governing permissions and
|
||||||
|
** limitations under the License.
|
||||||
|
*/
|
||||||
|
-->
|
||||||
|
|
||||||
|
<merge
|
||||||
|
xmlns:latin="http://schemas.android.com/apk/res-auto"
|
||||||
|
>
|
||||||
|
<Key
|
||||||
|
latin:keySpec="z"
|
||||||
|
latin:keyHintLabel="*"
|
||||||
|
latin:additionalMoreKeys="*"
|
||||||
|
latin:moreKeys="!text/morekeys_z" />
|
||||||
|
<Key
|
||||||
|
latin:keySpec="!text/keyspec_x"
|
||||||
|
latin:keyHintLabel="""
|
||||||
|
latin:additionalMoreKeys="""
|
||||||
|
latin:moreKeys="!text/morekeys_x" />
|
||||||
|
<Key
|
||||||
|
latin:keySpec="m"
|
||||||
|
latin:keyHintLabel="'"
|
||||||
|
latin:additionalMoreKeys="'"
|
||||||
|
latin:moreKeys="!text/morekeys_c" />
|
||||||
|
<Key
|
||||||
|
latin:keySpec="c"
|
||||||
|
latin:keyHintLabel=":"
|
||||||
|
latin:additionalMoreKeys=":"
|
||||||
|
latin:moreKeys="!text/morekeys_v" />
|
||||||
|
|
||||||
|
<Key
|
||||||
|
latin:keySpec="v"
|
||||||
|
latin:keyHintLabel=";"
|
||||||
|
latin:additionalMoreKeys=";" />
|
||||||
|
<Key
|
||||||
|
latin:keySpec="k"
|
||||||
|
latin:keyHintLabel="!"
|
||||||
|
latin:additionalMoreKeys="!"
|
||||||
|
latin:moreKeys="!text/morekeys_n" />
|
||||||
|
<Key
|
||||||
|
latin:keySpec="l"
|
||||||
|
latin:keyHintLabel="\?"
|
||||||
|
latin:additionalMoreKeys="\\?" />
|
||||||
|
</merge>
|
67
app/src/main/res/xml/rows_workman.xml
Normal file
67
app/src/main/res/xml/rows_workman.xml
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
/*
|
||||||
|
**
|
||||||
|
** Copyright 2010, The Android Open Source Project
|
||||||
|
**
|
||||||
|
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
** you may not use this file except in compliance with the License.
|
||||||
|
** You may obtain a copy of the License at
|
||||||
|
**
|
||||||
|
** http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
**
|
||||||
|
** Unless required by applicable law or agreed to in writing, software
|
||||||
|
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
** See the License for the specific language governing permissions and
|
||||||
|
** limitations under the License.
|
||||||
|
*/
|
||||||
|
-->
|
||||||
|
|
||||||
|
<merge
|
||||||
|
xmlns:latin="http://schemas.android.com/apk/res-auto"
|
||||||
|
>
|
||||||
|
<include
|
||||||
|
latin:keyboardLayout="@xml/key_styles_common" />
|
||||||
|
<switch>
|
||||||
|
<case
|
||||||
|
latin:numberRowEnabled="true"
|
||||||
|
>
|
||||||
|
<Row
|
||||||
|
latin:keyWidth="10%p"
|
||||||
|
>
|
||||||
|
<include
|
||||||
|
latin:keyboardLayout="@xml/rowkeys_symbols1" />
|
||||||
|
</Row>
|
||||||
|
</case>
|
||||||
|
</switch>
|
||||||
|
<Row
|
||||||
|
latin:keyWidth="10%p"
|
||||||
|
>
|
||||||
|
<include
|
||||||
|
latin:keyboardLayout="@xml/rowkeys_workman1" />
|
||||||
|
</Row>
|
||||||
|
<Row
|
||||||
|
latin:keyWidth="10%p"
|
||||||
|
>
|
||||||
|
<include
|
||||||
|
latin:keyboardLayout="@xml/rowkeys_workman2" />
|
||||||
|
</Row>
|
||||||
|
<Row
|
||||||
|
latin:keyWidth="10%p"
|
||||||
|
>
|
||||||
|
<Key
|
||||||
|
latin:keyStyle="shiftKeyStyle"
|
||||||
|
latin:keyWidth="15%p"
|
||||||
|
latin:visualInsetsRight="1%p" />
|
||||||
|
<include
|
||||||
|
latin:keyboardLayout="@xml/rowkeys_workman3" />
|
||||||
|
<Key
|
||||||
|
latin:keyStyle="deleteKeyStyle"
|
||||||
|
latin:keyWidth="fillRight"
|
||||||
|
latin:visualInsetsLeft="1%p" />
|
||||||
|
</Row>
|
||||||
|
<!-- Fourth row -->
|
||||||
|
<include
|
||||||
|
latin:keyboardLayout="@xml/row_qwerty4" />
|
||||||
|
</merge>
|
Loading…
Add table
Add a link
Reference in a new issue