From dfccb7883425392290f5bf9afc845bae776320e9 Mon Sep 17 00:00:00 2001 From: "David A. Madore" Date: Sun, 25 Apr 2010 21:54:54 +0200 Subject: List layout: display characters differently from their labels. This is done by making UnicodeCharacter implement Map so as to use it in a SimpleAdapter, but really, this is ugly. --- .../android/unicodeMap/UnicodeCharacter.java | 85 +++++++++++++++++++++- .../android/unicodeMap/UnicodeListActivity.java | 4 +- .../android/unicodeMap/UnicodeMapActivity.java | 2 +- 3 files changed, 88 insertions(+), 3 deletions(-) (limited to 'src/org') diff --git a/src/org/madore/android/unicodeMap/UnicodeCharacter.java b/src/org/madore/android/unicodeMap/UnicodeCharacter.java index 11d8d3e..7fad75d 100644 --- a/src/org/madore/android/unicodeMap/UnicodeCharacter.java +++ b/src/org/madore/android/unicodeMap/UnicodeCharacter.java @@ -1,13 +1,14 @@ package org.madore.android.unicodeMap; import java.util.Arrays; +import java.util.Collection; import java.util.Set; import java.util.Map; import java.util.EnumSet; import java.util.HashMap; import java.util.Formatter; -public class UnicodeCharacter { +public class UnicodeCharacter implements Map { enum Category { UPPERCASE_LETTER("Lu", Character.UPPERCASE_LETTER), @@ -97,6 +98,20 @@ public class UnicodeCharacter { return name; } + public String getChar() { + return new String(Character.toChars(codePoint)); + } + + public String getLabel() { + StringBuilder s = new StringBuilder(); + Formatter fmt = new Formatter(s); + if ( codePoint < 0x10000 ) + fmt.format("U+%04X %s", codePoint, name); + else + fmt.format("U+%X %s", codePoint, name); + return new String(s); + } + public boolean isPrintable() { return printable.contains(this.category); } @@ -116,4 +131,72 @@ public class UnicodeCharacter { return new String(s); } + public final static String KEY_CHAR = "char"; + public final static String KEY_LABEL = "label"; + + public void clear() { + throw new UnsupportedOperationException(); + } + + public boolean containsKey(Object key) { + throw new UnsupportedOperationException(); + } + + public boolean containsValue(Object value) { + throw new UnsupportedOperationException(); + } + + public Set> entrySet() { + throw new UnsupportedOperationException(); + } + + public boolean equals(Object o) { + throw new UnsupportedOperationException(); + } + + public String get(Object key) { + if ( key == null ) + throw new NullPointerException(); + else if ( key instanceof String && key.equals(KEY_CHAR) ) + return getChar(); + else if ( key instanceof String && key.equals(KEY_LABEL) ) + return getLabel(); + else if ( key instanceof String ) + return null; + else + throw new ClassCastException(); + } + + public int hashCode() { + throw new UnsupportedOperationException(); + } + + public boolean isEmpty() { + throw new UnsupportedOperationException(); + } + + public Set keySet() { + throw new UnsupportedOperationException(); + } + + public String put(String key, String value) { + throw new UnsupportedOperationException(); + } + + public void putAll(Map t) { + throw new UnsupportedOperationException(); + } + + public String remove(Object key) { + throw new UnsupportedOperationException(); + } + + public int size() { + throw new UnsupportedOperationException(); + } + + public Collection values() { + throw new UnsupportedOperationException(); + } + } diff --git a/src/org/madore/android/unicodeMap/UnicodeListActivity.java b/src/org/madore/android/unicodeMap/UnicodeListActivity.java index a08dbe2..2e37d6f 100644 --- a/src/org/madore/android/unicodeMap/UnicodeListActivity.java +++ b/src/org/madore/android/unicodeMap/UnicodeListActivity.java @@ -35,7 +35,9 @@ public final class UnicodeListActivity extends ListActivity { list.add(ch); final ClipboardManager cmgr = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE); - setListAdapter(new ArrayAdapter(this, R.layout.list_item, list)); + setListAdapter(new SimpleAdapter(this, list, R.layout.list_item, + new String[] { "char", "label" }, + new int[] { R.id.charText, R.id.labelText })); final Button btn = (Button) findViewById(R.id.button); final EditText txt = (EditText) findViewById(R.id.edit); btn.setOnClickListener(new View.OnClickListener() { diff --git a/src/org/madore/android/unicodeMap/UnicodeMapActivity.java b/src/org/madore/android/unicodeMap/UnicodeMapActivity.java index de026de..7ef9b68 100644 --- a/src/org/madore/android/unicodeMap/UnicodeMapActivity.java +++ b/src/org/madore/android/unicodeMap/UnicodeMapActivity.java @@ -237,7 +237,7 @@ public final class UnicodeMapActivity extends ListActivity { }; thr.start(); } - setListAdapter(new ArrayAdapter(this, R.layout.list_item, list)); + setListAdapter(new ArrayAdapter(this, R.layout.map_item, list)); ListView lv = getListView(); lv.setTextFilterEnabled(true); lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { -- cgit v1.2.3