Merge "Don't rely on the system locale for converting to/from bytes."

This commit is contained in:
Nick Kralevich
2010-03-10 13:11:46 -08:00
committed by Android (Google) Code Review
2 changed files with 41 additions and 11 deletions

View File

@@ -22,6 +22,7 @@ import android.net.LocalSocket;
import java.io.InputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
/**
@@ -57,12 +58,12 @@ public class KeyStore {
public byte[] get(byte[] key) {
ArrayList<byte[]> values = execute('g', key);
return (values == null || values.size() == 0) ? null : values.get(0);
return (values == null || values.isEmpty()) ? null : values.get(0);
}
public String get(String key) {
byte[] value = get(key.getBytes());
return (value == null) ? null : new String(value);
byte[] value = get(getBytes(key));
return (value == null) ? null : toString(value);
}
public boolean put(byte[] key, byte[] value) {
@@ -71,7 +72,7 @@ public class KeyStore {
}
public boolean put(String key, String value) {
return put(key.getBytes(), value.getBytes());
return put(getBytes(key), getBytes(value));
}
public boolean delete(byte[] key) {
@@ -80,7 +81,7 @@ public class KeyStore {
}
public boolean delete(String key) {
return delete(key.getBytes());
return delete(getBytes(key));
}
public boolean contains(byte[] key) {
@@ -89,7 +90,7 @@ public class KeyStore {
}
public boolean contains(String key) {
return contains(key.getBytes());
return contains(getBytes(key));
}
public byte[][] saw(byte[] prefix) {
@@ -98,13 +99,13 @@ public class KeyStore {
}
public String[] saw(String prefix) {
byte[][] values = saw(prefix.getBytes());
byte[][] values = saw(getBytes(prefix));
if (values == null) {
return null;
}
String[] strings = new String[values.length];
for (int i = 0; i < values.length; ++i) {
strings[i] = new String(values[i]);
strings[i] = toString(values[i]);
}
return strings;
}
@@ -120,7 +121,7 @@ public class KeyStore {
}
public boolean password(String oldPassword, String newPassword) {
return password(oldPassword.getBytes(), newPassword.getBytes());
return password(getBytes(oldPassword), getBytes(newPassword));
}
public boolean password(byte[] password) {
@@ -128,7 +129,7 @@ public class KeyStore {
}
public boolean password(String password) {
return password(password.getBytes());
return password(getBytes(password));
}
public boolean lock() {
@@ -142,7 +143,7 @@ public class KeyStore {
}
public boolean unlock(String password) {
return unlock(password.getBytes());
return unlock(getBytes(password));
}
public int getLastError() {
@@ -208,4 +209,22 @@ public class KeyStore {
}
return null;
}
private static byte[] getBytes(String string) {
try {
return string.getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
// will never happen
throw new RuntimeException(e);
}
}
private static String toString(byte[] bytes) {
try {
return new String(bytes, "UTF-8");
} catch (UnsupportedEncodingException e) {
// will never happen
throw new RuntimeException(e);
}
}
}

View File

@@ -39,6 +39,9 @@ public class KeyStoreTest extends ActivityUnitTestCase<Activity> {
private static final String TEST_KEYNAME2 = "testkey2";
private static final String TEST_KEYVALUE = "test value";
// "Hello, World" in Chinese
private static final String TEST_I18N = "\u4F60\u597D, \u4E16\u754C";
private KeyStore mKeyStore = null;
public KeyStoreTest() {
@@ -83,6 +86,14 @@ public class KeyStoreTest extends ActivityUnitTestCase<Activity> {
assertTrue(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE));
}
public void testI18n() throws Exception {
assertFalse(mKeyStore.put(TEST_I18N, TEST_I18N));
assertFalse(mKeyStore.contains(TEST_I18N));
mKeyStore.password(TEST_I18N);
assertTrue(mKeyStore.put(TEST_I18N, TEST_I18N));
assertTrue(mKeyStore.contains(TEST_I18N));
}
public void testDelete() throws Exception {
assertTrue(mKeyStore.delete(TEST_KEYNAME));
mKeyStore.password(TEST_PASSWD);