diff --git a/res/layout/emoji_pane.xml b/res/layout/emoji_pane.xml
index 6890e87..9b6943a 100644
--- a/res/layout/emoji_pane.xml
+++ b/res/layout/emoji_pane.xml
@@ -7,6 +7,15 @@
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
+
#229933
- #BDBDBD
- #202020
+ - #00FFFFFF
- @color/emoji_button_bg
- @color/key_label
diff --git a/res/xml/azerty.xml b/res/xml/azerty.xml
index cccd1e6..ab5dbbf 100644
--- a/res/xml/azerty.xml
+++ b/res/xml/azerty.xml
@@ -39,6 +39,6 @@
-
+
diff --git a/srcs/juloo.keyboard2/Emoji.java b/srcs/juloo.keyboard2/Emoji.java
index 064ee6c..68cb6ef 100644
--- a/srcs/juloo.keyboard2/Emoji.java
+++ b/srcs/juloo.keyboard2/Emoji.java
@@ -10,14 +10,21 @@ public class Emoji extends KeyValue
public static final int TYPE_UNCATEGORIZED = 4;
public static final int TYPE_ENCLOSED_CHARACTERS = 5;
+ private final String _emojiName;
private final String _desc;
protected Emoji(String name, String bytecode, String desc)
{
- super(name, bytecode, CHAR_NONE, EVENT_NONE, 0);
+ super(bytecode, bytecode, CHAR_NONE, EVENT_NONE, 0);
+ _emojiName = name;
_desc = desc;
}
+ public String getEmojiName()
+ {
+ return (_emojiName);
+ }
+
public String getDescription()
{
return (_desc);
diff --git a/srcs/juloo.keyboard2/EmojiGridView.java b/srcs/juloo.keyboard2/EmojiGridView.java
index fd94aee..ec02f58 100644
--- a/srcs/juloo.keyboard2/EmojiGridView.java
+++ b/srcs/juloo.keyboard2/EmojiGridView.java
@@ -1,7 +1,9 @@
package juloo.keyboard2;
import android.content.Context;
+import android.content.SharedPreferences;
import android.graphics.Typeface;
+import android.preference.PreferenceManager;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
@@ -10,41 +12,51 @@ import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.TextView;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Set;
+import java.util.HashSet;
public class EmojiGridView extends GridView
implements GridView.OnItemClickListener
{
+ public static final int TYPE_LAST_USE = -1;
+
public static final int COLUMN_WIDTH = 192;
public static final float EMOJI_SIZE = 32.f;
- private int _emojiType = Emoji.TYPE_EMOTICONS;
+ private static final String LAST_USE_PREF = "emoji_last_use";
+
+ private Emoji[] _emojiArray;
+ private HashMap _lastUsed;
/*
- ** TODO: save last emoji type
** TODO: adapt column width and emoji size
+ ** TODO: use ArraySet instead of Emoji[]
*/
public EmojiGridView(Context context, AttributeSet attrs)
{
super(context, attrs);
setOnItemClickListener(this);
setColumnWidth(COLUMN_WIDTH);
- setEmojiType(Emoji.TYPE_EMOTICONS);
+ loadLastUsed();
+ setEmojiType((_lastUsed.size() == 0) ? Emoji.TYPE_EMOTICONS : TYPE_LAST_USE);
}
- /*
- ** TODO: type (-1) for lastest used
- */
public void setEmojiType(int type)
{
- _emojiType = type;
- setAdapter(new EmojiViewAdpater((Keyboard2)getContext(), type));
+ _emojiArray = (type == TYPE_LAST_USE) ? getLastEmojis() : Emoji.getEmojisByType(type);
+ setAdapter(new EmojiViewAdpater((Keyboard2)getContext(), _emojiArray));
}
public void onItemClick(AdapterView> parent, View v, int pos, long id)
{
Keyboard2 main = (Keyboard2)getContext();
+ Integer used = _lastUsed.get(_emojiArray[pos]);
- main.handleKeyUp(Emoji.getEmojisByType(_emojiType)[pos], 0);
+ _lastUsed.put(_emojiArray[pos], (used == null) ? 1 : used.intValue() + 1);
+ main.handleKeyUp(_emojiArray[pos], 0);
}
@Override
@@ -54,6 +66,58 @@ public class EmojiGridView extends GridView
setNumColumns(getMeasuredWidth() / COLUMN_WIDTH);
}
+ @Override
+ public void onDetachedFromWindow()
+ {
+ saveLastUsed();
+ }
+
+ private Emoji[] getLastEmojis()
+ {
+ final HashMap map = _lastUsed;
+ Emoji[] array = new Emoji[map.size()];
+
+ map.keySet().toArray(array);
+ Arrays.sort(array, 0, array.length, new Comparator()
+ {
+ public int compare(Emoji a, Emoji b)
+ {
+ return (map.get(b).intValue() - map.get(a).intValue());
+ }
+ });
+ return (array);
+ }
+
+ private void saveLastUsed()
+ {
+ SharedPreferences.Editor edit = PreferenceManager.getDefaultSharedPreferences(getContext()).edit();
+ HashSet set = new HashSet();
+
+ for (Emoji emoji : _lastUsed.keySet())
+ set.add(String.valueOf(_lastUsed.get(emoji)) + "-" + emoji.getName());
+ edit.putStringSet(LAST_USE_PREF, set);
+ }
+
+ private void loadLastUsed()
+ {
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
+ Set lastUseSet = prefs.getStringSet(LAST_USE_PREF, null);
+
+ _lastUsed = new HashMap();
+ if (lastUseSet != null)
+ for (String emojiData : lastUseSet)
+ {
+ String[] emoji = emojiData.split("-", 1);
+
+ if (emoji.length != 2)
+ {
+ System.out.println("Warn: Bad emoji data: " + emojiData);
+ continue ;
+ }
+ _lastUsed.put((Emoji)KeyValue.getKeyByName(emoji[1]), Integer.getInteger(emoji[0]));
+ }
+ }
+
private static class EmojiView extends TextView
{
private static ViewGroup.LayoutParams _layoutParams = null;
@@ -63,6 +127,7 @@ public class EmojiGridView extends GridView
super(context);
setTextSize(EMOJI_SIZE);
setGravity(Gravity.CENTER);
+ setBackgroundColor(getResources().getColor(R.color.emoji_emoji_bg));
if (_layoutParams == null)
_layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT);
setLayoutParams(_layoutParams);
@@ -76,26 +141,26 @@ public class EmojiGridView extends GridView
private static class EmojiViewAdpater extends BaseAdapter
{
- private Keyboard2 _main;
+ private Keyboard2 _main;
- private Emoji[] _emojiSet = null;
+ private Emoji[] _emojiArray;
- public EmojiViewAdpater(Keyboard2 main, int type)
+ public EmojiViewAdpater(Keyboard2 main, Emoji[] emojiArray)
{
_main = main;
- _emojiSet = Emoji.getEmojisByType(type);
+ _emojiArray = emojiArray;
}
public int getCount()
{
- if (_emojiSet == null)
+ if (_emojiArray == null)
return (0);
- return (_emojiSet.length);
+ return (_emojiArray.length);
}
public Object getItem(int pos)
{
- return (_emojiSet[pos]);
+ return (_emojiArray[pos]);
}
public long getItemId(int pos)
@@ -109,7 +174,7 @@ public class EmojiGridView extends GridView
if (view == null)
view = new EmojiView(_main);
- view.setEmoji(_emojiSet[pos]);
+ view.setEmoji(_emojiArray[pos]);
return (view);
}
}
diff --git a/srcs/juloo.keyboard2/EmojiTypeButton.java b/srcs/juloo.keyboard2/EmojiTypeButton.java
index a645823..912d5be 100644
--- a/srcs/juloo.keyboard2/EmojiTypeButton.java
+++ b/srcs/juloo.keyboard2/EmojiTypeButton.java
@@ -33,6 +33,8 @@ public class EmojiTypeButton extends Button
public static int getTypeByString(String str)
{
// caca
+ if (str.equals("LAST_USE"))
+ return (EmojiGridView.TYPE_LAST_USE);
if (str.equals("EMOTICONS"))
return (Emoji.TYPE_EMOTICONS);
if (str.equals("DINGBATS"))
diff --git a/srcs/juloo.keyboard2/Keyboard2.java b/srcs/juloo.keyboard2/Keyboard2.java
index e1e3186..e180ae2 100644
--- a/srcs/juloo.keyboard2/Keyboard2.java
+++ b/srcs/juloo.keyboard2/Keyboard2.java
@@ -65,11 +65,6 @@ public class Keyboard2 extends InputMethodService
_keyboardView.reset_prefs();
}
- @Override
- public void onAppPrivateCommand(String command, Bundle data)
- {
- }
-
@Override
public void onConfigurationChanged(Configuration newConfig)
{
@@ -109,7 +104,11 @@ public class Keyboard2 extends InputMethodService
else if (eventCode == KeyValue.EVENT_SWITCH_NUMERIC)
_keyboardView.setKeyboard(_numericKeyboard);
else if (eventCode == KeyValue.EVENT_SWITCH_EMOJI)
- setInputView(getEmojiPane());
+ {
+ if (_emojiPane == null)
+ _emojiPane = (ViewGroup)getLayoutInflater().inflate(R.layout.emoji_pane, null);
+ setInputView(_emojiPane);
+ }
else if (eventCode == KeyValue.EVENT_SWITCH_BACK_EMOJI)
setInputView(_keyboardView);
else if ((flags & (KeyValue.FLAG_CTRL | KeyValue.FLAG_ALT)) != 0)
@@ -125,17 +124,10 @@ public class Keyboard2 extends InputMethodService
else
getCurrentInputConnection().commitText(key.getSymbol(flags), 1);
}
- else if (keyChar != KeyValue.CHAR_NONE)
+ else
sendKeyChar(keyChar);
}
- private ViewGroup getEmojiPane()
- {
- if (_emojiPane == null)
- _emojiPane = (ViewGroup)getLayoutInflater().inflate(R.layout.emoji_pane, null);
- return (_emojiPane);
- }
-
// private void handleDelKey(int before, int after)
// {
// CharSequence selection = getCurrentInputConnection().getSelectedText(0);