diff options
Diffstat (limited to 'core')
481 files changed, 2143 insertions, 2228 deletions
diff --git a/core/java/android/animation/ValueAnimator.java b/core/java/android/animation/ValueAnimator.java index f7460c4..f7460c4 100755..100644 --- a/core/java/android/animation/ValueAnimator.java +++ b/core/java/android/animation/ValueAnimator.java diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index e96b475..d6ddeb6 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -2539,12 +2539,16 @@ public class Activity extends ContextThemeWrapper * Activity don't need to deal with feature codes. */ public boolean onMenuItemSelected(int featureId, MenuItem item) { + CharSequence titleCondensed = item.getTitleCondensed(); + switch (featureId) { case Window.FEATURE_OPTIONS_PANEL: // Put event logging here so it gets called even if subclass // doesn't call through to superclass's implmeentation of each // of these methods below - EventLog.writeEvent(50000, 0, item.getTitleCondensed()); + if(titleCondensed != null) { + EventLog.writeEvent(50000, 0, titleCondensed.toString()); + } if (onOptionsItemSelected(item)) { return true; } @@ -2562,7 +2566,9 @@ public class Activity extends ContextThemeWrapper return false; case Window.FEATURE_CONTEXT_MENU: - EventLog.writeEvent(50000, 1, item.getTitleCondensed()); + if(titleCondensed != null) { + EventLog.writeEvent(50000, 1, titleCondensed.toString()); + } if (onContextItemSelected(item)) { return true; } diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java index 61b2067..fe7338b 100644 --- a/core/java/android/app/ActivityManagerNative.java +++ b/core/java/android/app/ActivityManagerNative.java @@ -1147,6 +1147,7 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM IActivityController watcher = IActivityController.Stub.asInterface( data.readStrongBinder()); setActivityController(watcher); + reply.writeNoException(); return true; } diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index d62372c..22fd9a9 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -113,6 +113,7 @@ import java.util.TimeZone; import java.util.regex.Pattern; import libcore.io.DropBox; +import libcore.io.EventLogger; import libcore.io.IoUtils; import dalvik.system.CloseGuard; @@ -4491,6 +4492,8 @@ public final class ActivityThread { + "snatched provider from the jaws of death"); } prc.removePending = false; + // There is a race! It fails to remove the message, which + // will be handled in completeRemoveProvider(). mH.removeMessages(H.REMOVE_PROVIDER, prc); } else { unstableDelta = 0; @@ -4670,6 +4673,11 @@ public final class ActivityThread { return; } + // More complicated race!! Some client managed to acquire the + // provider and release it before the removal was completed. + // Continue the removal, and abort the next remove message. + prc.removePending = false; + final IBinder jBinder = prc.holder.provider.asBinder(); ProviderRefCount existingPrc = mProviderRefCountMap.get(jBinder); if (existingPrc == prc) { @@ -4980,6 +4988,13 @@ public final class ActivityThread { } } + private static class EventLoggingReporter implements EventLogger.Reporter { + @Override + public void report (int code, Object... list) { + EventLog.writeEvent(code, list); + } + } + private class DropBoxReporter implements DropBox.Reporter { private DropBoxManager dropBox; @@ -5009,6 +5024,9 @@ public final class ActivityThread { Environment.initForCurrentUser(); + // Set the reporter for event logging in libcore + EventLogger.setReporter(new EventLoggingReporter()); + Process.setArgV0("<pre-initialized>"); Looper.prepareMainLooper(); diff --git a/core/java/android/app/DownloadManager.java b/core/java/android/app/DownloadManager.java index 6cf4dd0..32e40ee 100644 --- a/core/java/android/app/DownloadManager.java +++ b/core/java/android/app/DownloadManager.java @@ -499,7 +499,7 @@ public class DownloadManager { " already exists and is not a directory"); } } else { - if (!file.mkdir()) { + if (!file.mkdirs()) { throw new IllegalStateException("Unable to create directory: "+ file.getAbsolutePath()); } diff --git a/core/java/android/app/IAlarmManager.aidl b/core/java/android/app/IAlarmManager.aidl index edb40ed..edb40ed 100755..100644 --- a/core/java/android/app/IAlarmManager.aidl +++ b/core/java/android/app/IAlarmManager.aidl diff --git a/core/java/android/app/IThumbnailReceiver.aidl b/core/java/android/app/IThumbnailReceiver.aidl index 7943f2c..7943f2c 100755..100644 --- a/core/java/android/app/IThumbnailReceiver.aidl +++ b/core/java/android/app/IThumbnailReceiver.aidl diff --git a/core/java/android/app/LoaderManager.java b/core/java/android/app/LoaderManager.java index fd0f0bf..267555a 100644 --- a/core/java/android/app/LoaderManager.java +++ b/core/java/android/app/LoaderManager.java @@ -833,6 +833,7 @@ class LoaderManagerImpl extends LoaderManager { for (int i = mLoaders.size()-1; i >= 0; i--) { mLoaders.valueAt(i).destroy(); } + mLoaders.clear(); } if (DEBUG) Log.v(TAG, "Destroying Inactive in " + this); diff --git a/core/java/android/app/PendingIntent.java b/core/java/android/app/PendingIntent.java index 5c75aff..2897ee0 100644 --- a/core/java/android/app/PendingIntent.java +++ b/core/java/android/app/PendingIntent.java @@ -289,7 +289,7 @@ public final class PendingIntent implements Parcelable { /** * Like {@link #getActivity(Context, int, Intent, int)}, but allows an - * array of Intents to be supplied. The first Intent in the array is + * array of Intents to be supplied. The last Intent in the array is * taken as the primary key for the PendingIntent, like the single Intent * given to {@link #getActivity(Context, int, Intent, int)}. Upon sending * the resulting PendingIntent, all of the Intents are started in the same @@ -335,7 +335,7 @@ public final class PendingIntent implements Parcelable { /** * Like {@link #getActivity(Context, int, Intent, int)}, but allows an - * array of Intents to be supplied. The first Intent in the array is + * array of Intents to be supplied. The last Intent in the array is * taken as the primary key for the PendingIntent, like the single Intent * given to {@link #getActivity(Context, int, Intent, int)}. Upon sending * the resulting PendingIntent, all of the Intents are started in the same diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index 4c0eba0..4c0eba0 100755..100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java diff --git a/core/java/android/appwidget/AppWidgetProvider.java b/core/java/android/appwidget/AppWidgetProvider.java index edf142b..edf142b 100755..100644 --- a/core/java/android/appwidget/AppWidgetProvider.java +++ b/core/java/android/appwidget/AppWidgetProvider.java diff --git a/core/java/android/bluetooth/BluetoothA2dp.java b/core/java/android/bluetooth/BluetoothA2dp.java index 6fdf3b4..6fdf3b4 100755..100644 --- a/core/java/android/bluetooth/BluetoothA2dp.java +++ b/core/java/android/bluetooth/BluetoothA2dp.java diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java index 6367e16..6367e16 100755..100644 --- a/core/java/android/bluetooth/BluetoothAdapter.java +++ b/core/java/android/bluetooth/BluetoothAdapter.java diff --git a/core/java/android/bluetooth/BluetoothDevice.java b/core/java/android/bluetooth/BluetoothDevice.java index 4cc22b4..4cc22b4 100755..100644 --- a/core/java/android/bluetooth/BluetoothDevice.java +++ b/core/java/android/bluetooth/BluetoothDevice.java diff --git a/core/java/android/bluetooth/BluetoothHeadset.java b/core/java/android/bluetooth/BluetoothHeadset.java index 793d798..793d798 100755..100644 --- a/core/java/android/bluetooth/BluetoothHeadset.java +++ b/core/java/android/bluetooth/BluetoothHeadset.java diff --git a/core/java/android/bluetooth/BluetoothInputDevice.java b/core/java/android/bluetooth/BluetoothInputDevice.java index db7e424..db7e424 100755..100644 --- a/core/java/android/bluetooth/BluetoothInputDevice.java +++ b/core/java/android/bluetooth/BluetoothInputDevice.java diff --git a/core/java/android/bluetooth/BluetoothPbap.java b/core/java/android/bluetooth/BluetoothPbap.java index b5280e5..b5280e5 100755..100644 --- a/core/java/android/bluetooth/BluetoothPbap.java +++ b/core/java/android/bluetooth/BluetoothPbap.java diff --git a/core/java/android/bluetooth/BluetoothProfile.java b/core/java/android/bluetooth/BluetoothProfile.java index 1920efa..1920efa 100755..100644 --- a/core/java/android/bluetooth/BluetoothProfile.java +++ b/core/java/android/bluetooth/BluetoothProfile.java diff --git a/core/java/android/bluetooth/IBluetoothInputDevice.aidl b/core/java/android/bluetooth/IBluetoothInputDevice.aidl index 1ebb9ca..1ebb9ca 100755..100644 --- a/core/java/android/bluetooth/IBluetoothInputDevice.aidl +++ b/core/java/android/bluetooth/IBluetoothInputDevice.aidl diff --git a/core/java/android/bluetooth/IBluetoothManager.aidl b/core/java/android/bluetooth/IBluetoothManager.aidl index ed8777c..ed8777c 100755..100644 --- a/core/java/android/bluetooth/IBluetoothManager.aidl +++ b/core/java/android/bluetooth/IBluetoothManager.aidl diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java index 9e406d4..bde4d2b 100644 --- a/core/java/android/content/ContentResolver.java +++ b/core/java/android/content/ContentResolver.java @@ -518,7 +518,7 @@ public abstract class ContentResolver { * ContentProvider.openFile}. * @return Returns a new ParcelFileDescriptor pointing to the file. You * own this descriptor and are responsible for closing it when done. - * @throws FileNotFoundException Throws FileNotFoundException of no + * @throws FileNotFoundException Throws FileNotFoundException if no * file exists under the URI or the mode is invalid. * @see #openAssetFileDescriptor(Uri, String) */ @@ -1049,9 +1049,9 @@ public abstract class ContentResolver { if (!SCHEME_CONTENT.equals(uri.getScheme())) { return null; } - String auth = uri.getAuthority(); + final String auth = uri.getAuthority(); if (auth != null) { - return acquireProvider(mContext, uri.getAuthority()); + return acquireProvider(mContext, auth); } return null; } @@ -1068,9 +1068,9 @@ public abstract class ContentResolver { if (!SCHEME_CONTENT.equals(uri.getScheme())) { return null; } - String auth = uri.getAuthority(); + final String auth = uri.getAuthority(); if (auth != null) { - return acquireExistingProvider(mContext, uri.getAuthority()); + return acquireExistingProvider(mContext, auth); } return null; } diff --git a/core/java/android/content/IIntentReceiver.aidl b/core/java/android/content/IIntentReceiver.aidl index 3d92723..3d92723 100755..100644 --- a/core/java/android/content/IIntentReceiver.aidl +++ b/core/java/android/content/IIntentReceiver.aidl diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java index cf0603e..89b1bbd 100644 --- a/core/java/android/content/Intent.java +++ b/core/java/android/content/Intent.java @@ -1950,7 +1950,7 @@ public class Intent implements Parcelable, Cloneable { /** * Broadcast Action: External media is present, but not mounted at its mount point. - * The path to the mount point for the removed media is contained in the Intent.mData field. + * The path to the mount point for the unmounted media is contained in the Intent.mData field. */ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) public static final String ACTION_MEDIA_UNMOUNTED = "android.intent.action.MEDIA_UNMOUNTED"; @@ -1971,7 +1971,7 @@ public class Intent implements Parcelable, Cloneable { /** * Broadcast Action: External media is present and mounted at its mount point. - * The path to the mount point for the removed media is contained in the Intent.mData field. + * The path to the mount point for the mounted media is contained in the Intent.mData field. * The Intent contains an extra with name "read-only" and Boolean value to indicate if the * media was mounted read only. */ @@ -2002,7 +2002,7 @@ public class Intent implements Parcelable, Cloneable { /** * Broadcast Action: External media is present but cannot be mounted. - * The path to the mount point for the removed media is contained in the Intent.mData field. + * The path to the mount point for the unmountable media is contained in the Intent.mData field. */ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) public static final String ACTION_MEDIA_UNMOUNTABLE = "android.intent.action.MEDIA_UNMOUNTABLE"; diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java index 32cc7fd..02401dc 100644 --- a/core/java/android/content/pm/ApplicationInfo.java +++ b/core/java/android/content/pm/ApplicationInfo.java @@ -398,6 +398,15 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { public String[] resourceDirs; /** + * String retrieved from the seinfo tag found in selinux policy. This value + * is useful in setting an SELinux security context on the process as well + * as its data directory. + * + * {@hide} + */ + public String seinfo; + + /** * Paths to all shared libraries this application is linked against. This * field is only set if the {@link PackageManager#GET_SHARED_LIBRARY_FILES * PackageManager.GET_SHARED_LIBRARY_FILES} flag was used when retrieving @@ -477,6 +486,9 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { if (resourceDirs != null) { pw.println(prefix + "resourceDirs=" + resourceDirs); } + if (seinfo != null) { + pw.println(prefix + "seinfo=" + seinfo); + } pw.println(prefix + "dataDir=" + dataDir); if (sharedLibraryFiles != null) { pw.println(prefix + "sharedLibraryFiles=" + sharedLibraryFiles); @@ -544,6 +556,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { publicSourceDir = orig.publicSourceDir; nativeLibraryDir = orig.nativeLibraryDir; resourceDirs = orig.resourceDirs; + seinfo = orig.seinfo; sharedLibraryFiles = orig.sharedLibraryFiles; dataDir = orig.dataDir; uid = orig.uid; @@ -583,6 +596,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { dest.writeString(publicSourceDir); dest.writeString(nativeLibraryDir); dest.writeStringArray(resourceDirs); + dest.writeString(seinfo); dest.writeStringArray(sharedLibraryFiles); dest.writeString(dataDir); dest.writeInt(uid); @@ -621,6 +635,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { publicSourceDir = source.readString(); nativeLibraryDir = source.readString(); resourceDirs = source.readStringArray(); + seinfo = source.readString(); sharedLibraryFiles = source.readStringArray(); dataDir = source.readString(); uid = source.readInt(); diff --git a/core/java/android/content/res/Configuration.aidl b/core/java/android/content/res/Configuration.aidl index bb7f2dd..bb7f2dd 100755..100644 --- a/core/java/android/content/res/Configuration.aidl +++ b/core/java/android/content/res/Configuration.aidl diff --git a/core/java/android/content/res/ObbInfo.aidl b/core/java/android/content/res/ObbInfo.aidl index 636ad6a..636ad6a 100755..100644 --- a/core/java/android/content/res/ObbInfo.aidl +++ b/core/java/android/content/res/ObbInfo.aidl diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java index b316f23..0404a84 100755..100644 --- a/core/java/android/content/res/Resources.java +++ b/core/java/android/content/res/Resources.java @@ -232,11 +232,13 @@ public class Resources { } /** - * Return the character sequence associated with a particular resource ID for a particular - * numerical quantity. - * - * <p>See <a href="{@docRoot}guide/topics/resources/string-resource.html#Plurals">String - * Resources</a> for more on quantity strings. + * Returns the character sequence necessary for grammatically correct pluralization + * of the given resource ID for the given quantity. + * Note that the character sequence is selected based solely on grammatical necessity, + * and that such rules differ between languages. Do not assume you know which string + * will be returned for a given quantity. See + * <a href="{@docRoot}guide/topics/resources/string-resource.html#Plurals">String Resources</a> + * for more detail. * * @param id The desired resource identifier, as generated by the aapt * tool. This integer encodes the package, type, and resource @@ -344,14 +346,17 @@ public class Resources { } /** - * Return the string value associated with a particular resource ID for a particular - * numerical quantity, substituting the format arguments as defined in - * {@link java.util.Formatter} and {@link java.lang.String#format}. It will be - * stripped of any styled text information. - * {@more} - * - * <p>See <a href="{@docRoot}guide/topics/resources/string-resource.html#Plurals">String - * Resources</a> for more on quantity strings. + * Formats the string necessary for grammatically correct pluralization + * of the given resource ID for the given quantity, using the given arguments. + * Note that the string is selected based solely on grammatical necessity, + * and that such rules differ between languages. Do not assume you know which string + * will be returned for a given quantity. See + * <a href="{@docRoot}guide/topics/resources/string-resource.html#Plurals">String Resources</a> + * for more detail. + * + * <p>Substitution of format arguments works as if using + * {@link java.util.Formatter} and {@link java.lang.String#format}. + * The resulting string will be stripped of any styled text information. * * @param id The desired resource identifier, as generated by the aapt * tool. This integer encodes the package, type, and resource @@ -372,11 +377,13 @@ public class Resources { } /** - * Return the string value associated with a particular resource ID for a particular - * numerical quantity. - * - * <p>See <a href="{@docRoot}guide/topics/resources/string-resource.html#Plurals">String - * Resources</a> for more on quantity strings. + * Returns the string necessary for grammatically correct pluralization + * of the given resource ID for the given quantity. + * Note that the string is selected based solely on grammatical necessity, + * and that such rules differ between languages. Do not assume you know which string + * will be returned for a given quantity. See + * <a href="{@docRoot}guide/topics/resources/string-resource.html#Plurals">String Resources</a> + * for more detail. * * @param id The desired resource identifier, as generated by the aapt * tool. This integer encodes the package, type, and resource diff --git a/core/java/android/database/IContentObserver.aidl b/core/java/android/database/IContentObserver.aidl index 13aff05..13aff05 100755..100644 --- a/core/java/android/database/IContentObserver.aidl +++ b/core/java/android/database/IContentObserver.aidl diff --git a/core/java/android/database/sqlite/SQLiteConnection.java b/core/java/android/database/sqlite/SQLiteConnection.java index 6f7c1f3..0017c46 100644 --- a/core/java/android/database/sqlite/SQLiteConnection.java +++ b/core/java/android/database/sqlite/SQLiteConnection.java @@ -216,6 +216,13 @@ public final class SQLiteConnection implements CancellationSignal.OnCancelListen setJournalSizeLimit(); setAutoCheckpointInterval(); setLocaleFromConfiguration(); + + // Register custom functions. + final int functionCount = mConfiguration.customFunctions.size(); + for (int i = 0; i < functionCount; i++) { + SQLiteCustomFunction function = mConfiguration.customFunctions.get(i); + nativeRegisterCustomFunction(mConnectionPtr, function); + } } private void dispose(boolean finalized) { @@ -974,7 +981,7 @@ public final class SQLiteConnection implements CancellationSignal.OnCancelListen if (count != statement.mNumParameters) { throw new SQLiteBindOrColumnIndexOutOfRangeException( "Expected " + statement.mNumParameters + " bind arguments but " - + bindArgs.length + " were provided."); + + count + " were provided."); } if (count == 0) { return; diff --git a/core/java/android/database/sqlite/SQLiteDatabase.java b/core/java/android/database/sqlite/SQLiteDatabase.java index e2d44f2..60ccc61 100644 --- a/core/java/android/database/sqlite/SQLiteDatabase.java +++ b/core/java/android/database/sqlite/SQLiteDatabase.java @@ -1481,6 +1481,9 @@ public final class SQLiteDatabase extends SQLiteClosable { * @param table the table to delete from * @param whereClause the optional WHERE clause to apply when deleting. * Passing null will delete all rows. + * @param whereArgs You may include ?s in the where clause, which + * will be replaced by the values from whereArgs. The values + * will be bound as Strings. * @return the number of rows affected if a whereClause is passed in, 0 * otherwise. To remove all rows and get a count pass "1" as the * whereClause. @@ -1508,6 +1511,9 @@ public final class SQLiteDatabase extends SQLiteClosable { * valid value that will be translated to NULL. * @param whereClause the optional WHERE clause to apply when updating. * Passing null will update all rows. + * @param whereArgs You may include ?s in the where clause, which + * will be replaced by the values from whereArgs. The values + * will be bound as Strings. * @return the number of rows affected */ public int update(String table, ContentValues values, String whereClause, String[] whereArgs) { @@ -1522,6 +1528,9 @@ public final class SQLiteDatabase extends SQLiteClosable { * valid value that will be translated to NULL. * @param whereClause the optional WHERE clause to apply when updating. * Passing null will update all rows. + * @param whereArgs You may include ?s in the where clause, which + * will be replaced by the values from whereArgs. The values + * will be bound as Strings. * @param conflictAlgorithm for update conflict resolver * @return the number of rows affected */ diff --git a/core/java/android/database/sqlite/SQLiteSession.java b/core/java/android/database/sqlite/SQLiteSession.java index beb5b3a..d80ab1f 100644 --- a/core/java/android/database/sqlite/SQLiteSession.java +++ b/core/java/android/database/sqlite/SQLiteSession.java @@ -926,7 +926,7 @@ public final class SQLiteSession { } private void throwIfNestedTransaction() { - if (mTransactionStack == null && mTransactionStack.mParent != null) { + if (hasNestedTransaction()) { throw new IllegalStateException("Cannot perform this operation because " + "a nested transaction is in progress."); } diff --git a/core/java/android/ddm/package.html b/core/java/android/ddm/package.html index 1c9bf9d..1c9bf9d 100755..100644 --- a/core/java/android/ddm/package.html +++ b/core/java/android/ddm/package.html diff --git a/core/java/android/debug/package.html b/core/java/android/debug/package.html index c9f96a6..c9f96a6 100755..100644 --- a/core/java/android/debug/package.html +++ b/core/java/android/debug/package.html diff --git a/core/java/android/gesture/Gesture.java b/core/java/android/gesture/Gesture.java index c6a2a87..c6a2a87 100755..100644 --- a/core/java/android/gesture/Gesture.java +++ b/core/java/android/gesture/Gesture.java diff --git a/core/java/android/gesture/GestureOverlayView.java b/core/java/android/gesture/GestureOverlayView.java index b6c260f..b6c260f 100755..100644 --- a/core/java/android/gesture/GestureOverlayView.java +++ b/core/java/android/gesture/GestureOverlayView.java diff --git a/core/java/android/gesture/GestureUtils.java b/core/java/android/gesture/GestureUtils.java index dd221fc..dd221fc 100755..100644 --- a/core/java/android/gesture/GestureUtils.java +++ b/core/java/android/gesture/GestureUtils.java diff --git a/core/java/android/gesture/Instance.java b/core/java/android/gesture/Instance.java index 02a6519..02a6519 100755..100644 --- a/core/java/android/gesture/Instance.java +++ b/core/java/android/gesture/Instance.java diff --git a/core/java/android/gesture/Learner.java b/core/java/android/gesture/Learner.java index a105652..a105652 100755..100644 --- a/core/java/android/gesture/Learner.java +++ b/core/java/android/gesture/Learner.java diff --git a/core/java/android/gesture/Prediction.java b/core/java/android/gesture/Prediction.java index ce6ad57..ce6ad57 100755..100644 --- a/core/java/android/gesture/Prediction.java +++ b/core/java/android/gesture/Prediction.java diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java index a300776..483e9de 100644 --- a/core/java/android/hardware/Camera.java +++ b/core/java/android/hardware/Camera.java @@ -2338,7 +2338,7 @@ public class Camera { } /** - * Sets the maximum and maximum preview fps. This controls the rate of + * Sets the minimum and maximum preview fps. This controls the rate of * preview frames received in {@link PreviewCallback}. The minimum and * maximum preview fps must be one of the elements from {@link * #getSupportedPreviewFpsRange}. diff --git a/core/java/android/hardware/SystemSensorManager.java b/core/java/android/hardware/SystemSensorManager.java index 0204e94..7375e7d 100644 --- a/core/java/android/hardware/SystemSensorManager.java +++ b/core/java/android/hardware/SystemSensorManager.java @@ -373,7 +373,8 @@ public class SystemSensorManager extends SensorManager { for (Sensor s : l.getSensors()) { disableSensorLocked(s); } - } else if (l.removeSensor(sensor) == 0) { + // Check if the ListenerDelegate has the sensor it is trying to unregister. + } else if (l.hasSensor(sensor) && l.removeSensor(sensor) == 0) { // if we have no more sensors enabled on this listener, // take it off the list. sListeners.remove(i); diff --git a/core/java/android/hardware/input/InputManager.java b/core/java/android/hardware/input/InputManager.java index 262d87d..262d87d 100755..100644 --- a/core/java/android/hardware/input/InputManager.java +++ b/core/java/android/hardware/input/InputManager.java diff --git a/core/java/android/net/SSLCertificateSocketFactory.java b/core/java/android/net/SSLCertificateSocketFactory.java index 846443d..2a2f7cf 100644 --- a/core/java/android/net/SSLCertificateSocketFactory.java +++ b/core/java/android/net/SSLCertificateSocketFactory.java @@ -23,6 +23,7 @@ import java.net.InetAddress; import java.net.Socket; import java.net.SocketException; import java.security.KeyManagementException; +import java.security.PrivateKey; import java.security.cert.X509Certificate; import javax.net.SocketFactory; import javax.net.ssl.HostnameVerifier; @@ -88,6 +89,7 @@ public class SSLCertificateSocketFactory extends SSLSocketFactory { private TrustManager[] mTrustManagers = null; private KeyManager[] mKeyManagers = null; private byte[] mNpnProtocols = null; + private PrivateKey mChannelIdPrivateKey = null; private final int mHandshakeTimeoutMillis; private final SSLClientSessionCache mSessionCache; @@ -319,6 +321,20 @@ public class SSLCertificateSocketFactory extends SSLSocketFactory { } /** + * Sets the private key to be used for TLS Channel ID by connections made by this + * factory. + * + * @param privateKey private key (enables TLS Channel ID) or {@code null} for no key (disables + * TLS Channel ID). The private key has to be an Elliptic Curve (EC) key based on the + * NIST P-256 curve (aka SECG secp256r1 or ANSI X9.62 prime256v1). + * + * @hide + */ + public void setChannelIdPrivateKey(PrivateKey privateKey) { + mChannelIdPrivateKey = privateKey; + } + + /** * Enables <a href="http://tools.ietf.org/html/rfc5077#section-3.2">session ticket</a> * support on the given socket. * @@ -378,6 +394,7 @@ public class SSLCertificateSocketFactory extends SSLSocketFactory { OpenSSLSocketImpl s = (OpenSSLSocketImpl) getDelegate().createSocket(k, host, port, close); s.setNpnProtocols(mNpnProtocols); s.setHandshakeTimeout(mHandshakeTimeoutMillis); + s.setChannelIdPrivateKey(mChannelIdPrivateKey); if (mSecure) { verifyHostname(s, host); } @@ -397,6 +414,7 @@ public class SSLCertificateSocketFactory extends SSLSocketFactory { OpenSSLSocketImpl s = (OpenSSLSocketImpl) getDelegate().createSocket(); s.setNpnProtocols(mNpnProtocols); s.setHandshakeTimeout(mHandshakeTimeoutMillis); + s.setChannelIdPrivateKey(mChannelIdPrivateKey); return s; } @@ -414,6 +432,7 @@ public class SSLCertificateSocketFactory extends SSLSocketFactory { addr, port, localAddr, localPort); s.setNpnProtocols(mNpnProtocols); s.setHandshakeTimeout(mHandshakeTimeoutMillis); + s.setChannelIdPrivateKey(mChannelIdPrivateKey); return s; } @@ -429,6 +448,7 @@ public class SSLCertificateSocketFactory extends SSLSocketFactory { OpenSSLSocketImpl s = (OpenSSLSocketImpl) getDelegate().createSocket(addr, port); s.setNpnProtocols(mNpnProtocols); s.setHandshakeTimeout(mHandshakeTimeoutMillis); + s.setChannelIdPrivateKey(mChannelIdPrivateKey); return s; } @@ -445,6 +465,7 @@ public class SSLCertificateSocketFactory extends SSLSocketFactory { host, port, localAddr, localPort); s.setNpnProtocols(mNpnProtocols); s.setHandshakeTimeout(mHandshakeTimeoutMillis); + s.setChannelIdPrivateKey(mChannelIdPrivateKey); if (mSecure) { verifyHostname(s, host); } @@ -462,6 +483,7 @@ public class SSLCertificateSocketFactory extends SSLSocketFactory { OpenSSLSocketImpl s = (OpenSSLSocketImpl) getDelegate().createSocket(host, port); s.setNpnProtocols(mNpnProtocols); s.setHandshakeTimeout(mHandshakeTimeoutMillis); + s.setChannelIdPrivateKey(mChannelIdPrivateKey); if (mSecure) { verifyHostname(s, host); } diff --git a/core/java/android/net/Uri.aidl b/core/java/android/net/Uri.aidl index 6bd3be5..6bd3be5 100755..100644 --- a/core/java/android/net/Uri.aidl +++ b/core/java/android/net/Uri.aidl diff --git a/core/java/android/net/http/AndroidHttpClient.java b/core/java/android/net/http/AndroidHttpClient.java index c534e58..fabe018 100644 --- a/core/java/android/net/http/AndroidHttpClient.java +++ b/core/java/android/net/http/AndroidHttpClient.java @@ -66,8 +66,7 @@ import android.util.Log; /** * Implementation of the Apache {@link DefaultHttpClient} that is configured with - * reasonable default settings and registered schemes for Android, and - * also lets the user add {@link HttpRequestInterceptor} classes. + * reasonable default settings and registered schemes for Android. * Don't create this directly, use the {@link #newInstance} factory method. * * <p>This client processes cookies but does not retain them by default. diff --git a/core/java/android/net/http/SslCertificate.java b/core/java/android/net/http/SslCertificate.java index fe6d4eb..5b60c0d 100644 --- a/core/java/android/net/http/SslCertificate.java +++ b/core/java/android/net/http/SslCertificate.java @@ -334,9 +334,11 @@ public class SslCertificate { /** * A distinguished name helper class: a 3-tuple of: - * - common name (CN), - * - organization (O), - * - organizational unit (OU) + * <ul> + * <li>the most specific common name (CN)</li> + * <li>the most specific organization (O)</li> + * <li>the most specific organizational unit (OU)</li> + * <ul> */ public class DName { /** @@ -360,8 +362,15 @@ public class SslCertificate { private String mUName; /** - * Creates a new distinguished name - * @param dName The distinguished name + * Creates a new {@code DName} from a string. The attributes + * are assumed to come in most significant to least + * significant order which is true of human readable values + * returned by methods such as {@code X500Principal.getName()}. + * Be aware that the underlying sources of distinguished names + * such as instances of {@code X509Certificate} are encoded in + * least significant to most significant order, so make sure + * the value passed here has the expected ordering of + * attributes. */ public DName(String dName) { if (dName != null) { @@ -374,18 +383,24 @@ public class SslCertificate { for (int i = 0; i < oid.size(); i++) { if (oid.elementAt(i).equals(X509Name.CN)) { - mCName = (String) val.elementAt(i); + if (mCName == null) { + mCName = (String) val.elementAt(i); + } continue; } if (oid.elementAt(i).equals(X509Name.O)) { - mOName = (String) val.elementAt(i); - continue; + if (mOName == null) { + mOName = (String) val.elementAt(i); + continue; + } } if (oid.elementAt(i).equals(X509Name.OU)) { - mUName = (String) val.elementAt(i); - continue; + if (mUName == null) { + mUName = (String) val.elementAt(i); + continue; + } } } } catch (IllegalArgumentException ex) { @@ -402,21 +417,21 @@ public class SslCertificate { } /** - * @return The Common-name (CN) component of this name + * @return The most specific Common-name (CN) component of this name */ public String getCName() { return mCName != null ? mCName : ""; } /** - * @return The Organization (O) component of this name + * @return The most specific Organization (O) component of this name */ public String getOName() { return mOName != null ? mOName : ""; } /** - * @return The Organizational Unit (OU) component of this name + * @return The most specific Organizational Unit (OU) component of this name */ public String getUName() { return mUName != null ? mUName : ""; diff --git a/core/java/android/net/http/package.html b/core/java/android/net/http/package.html index a81cbce..a81cbce 100755..100644 --- a/core/java/android/net/http/package.html +++ b/core/java/android/net/http/package.html diff --git a/core/java/android/net/package.html b/core/java/android/net/package.html index 47c57e6..47c57e6 100755..100644 --- a/core/java/android/net/package.html +++ b/core/java/android/net/package.html diff --git a/core/java/android/os/CommonTimeUtils.java b/core/java/android/os/CommonTimeUtils.java index 9081ee4..20755d9 100644 --- a/core/java/android/os/CommonTimeUtils.java +++ b/core/java/android/os/CommonTimeUtils.java @@ -19,6 +19,7 @@ import java.net.InetAddress; import java.net.Inet4Address; import java.net.Inet6Address; import java.net.InetSocketAddress; +import java.util.Locale; import static libcore.io.OsConstants.*; class CommonTimeUtils { @@ -192,10 +193,11 @@ class CommonTimeUtils { if (AF_INET == type) { int addr = reply.readInt(); port = reply.readInt(); - addrStr = String.format("%d.%d.%d.%d", (addr >> 24) & 0xFF, - (addr >> 16) & 0xFF, - (addr >> 8) & 0xFF, - addr & 0xFF); + addrStr = String.format(Locale.US, "%d.%d.%d.%d", + (addr >> 24) & 0xFF, + (addr >> 16) & 0xFF, + (addr >> 8) & 0xFF, + addr & 0xFF); } else if (AF_INET6 == type) { int addr1 = reply.readInt(); int addr2 = reply.readInt(); @@ -207,11 +209,11 @@ class CommonTimeUtils { int flowinfo = reply.readInt(); int scope_id = reply.readInt(); - addrStr = String.format("[%04X:%04X:%04X:%04X:%04X:%04X:%04X:%04X]", - (addr1 >> 16) & 0xFFFF, addr1 & 0xFFFF, - (addr2 >> 16) & 0xFFFF, addr2 & 0xFFFF, - (addr3 >> 16) & 0xFFFF, addr3 & 0xFFFF, - (addr4 >> 16) & 0xFFFF, addr4 & 0xFFFF); + addrStr = String.format(Locale.US, "[%04X:%04X:%04X:%04X:%04X:%04X:%04X:%04X]", + (addr1 >> 16) & 0xFFFF, addr1 & 0xFFFF, + (addr2 >> 16) & 0xFFFF, addr2 & 0xFFFF, + (addr3 >> 16) & 0xFFFF, addr3 & 0xFFFF, + (addr4 >> 16) & 0xFFFF, addr4 & 0xFFFF); } if (null != addrStr) { diff --git a/core/java/android/os/Debug.java b/core/java/android/os/Debug.java index e50c948..2e77237 100644 --- a/core/java/android/os/Debug.java +++ b/core/java/android/os/Debug.java @@ -45,7 +45,7 @@ import dalvik.system.VMDebug; /** - * Provides various debugging functions for Android applications, including + * Provides various debugging methods for Android applications, including * tracing and allocation counts. * <p><strong>Logging Trace Files</strong></p> * <p>Debug can create log files that give details about an application, such as @@ -130,7 +130,7 @@ public final class Debug public int otherSharedDirty; /** @hide */ - public static final int NUM_OTHER_STATS = 9; + public static final int NUM_OTHER_STATS = 10; private int[] otherStats = new int[NUM_OTHER_STATS*3]; @@ -177,15 +177,16 @@ public final class Debug /* @hide */ public static String getOtherLabel(int which) { switch (which) { - case 0: return "Cursor"; - case 1: return "Ashmem"; - case 2: return "Other dev"; - case 3: return ".so mmap"; - case 4: return ".jar mmap"; - case 5: return ".apk mmap"; - case 6: return ".ttf mmap"; - case 7: return ".dex mmap"; - case 8: return "Other mmap"; + case 0: return "Stack"; + case 1: return "Cursor"; + case 2: return "Ashmem"; + case 3: return "Other dev"; + case 4: return ".so mmap"; + case 5: return ".jar mmap"; + case 6: return ".apk mmap"; + case 7: return ".ttf mmap"; + case 8: return ".dex mmap"; + case 9: return "Other mmap"; default: return "????"; } } @@ -554,16 +555,19 @@ href="{@docRoot}guide/developing/tools/traceview.html">Traceview: A Graphical Lo /** * Start counting the number and aggregate size of memory allocations. * - * <p>The {@link #startAllocCounting() start} function resets the counts and enables counting. - * The {@link #stopAllocCounting() stop} function disables the counting so that the analysis - * code doesn't cause additional allocations. The various <code>get</code> functions return - * the specified value. And the various <code>reset</code> functions reset the specified + * <p>The {@link #startAllocCounting() start} method resets the counts and enables counting. + * The {@link #stopAllocCounting() stop} method disables the counting so that the analysis + * code doesn't cause additional allocations. The various <code>get</code> methods return + * the specified value. And the various <code>reset</code> methods reset the specified * count.</p> * - * <p>Counts are kept for the system as a whole and for each thread. + * <p>Counts are kept for the system as a whole (global) and for each thread. * The per-thread counts for threads other than the current thread * are not cleared by the "reset" or "start" calls.</p> + * + * @deprecated Accurate counting is a burden on the runtime and may be removed. */ + @Deprecated public static void startAllocCounting() { VMDebug.startAllocCounting(); } @@ -577,211 +581,269 @@ href="{@docRoot}guide/developing/tools/traceview.html">Traceview: A Graphical Lo VMDebug.stopAllocCounting(); } + /** + * Returns the global count of objects allocated by the runtime between a + * {@link #startAllocCounting() start} and {@link #stopAllocCounting() stop}. + */ public static int getGlobalAllocCount() { return VMDebug.getAllocCount(VMDebug.KIND_GLOBAL_ALLOCATED_OBJECTS); } + + /** + * Clears the global count of objects allocated. + * @see #getGlobalAllocCount() + */ + public static void resetGlobalAllocCount() { + VMDebug.resetAllocCount(VMDebug.KIND_GLOBAL_ALLOCATED_OBJECTS); + } + + /** + * Returns the global size, in bytes, of objects allocated by the runtime between a + * {@link #startAllocCounting() start} and {@link #stopAllocCounting() stop}. + */ public static int getGlobalAllocSize() { return VMDebug.getAllocCount(VMDebug.KIND_GLOBAL_ALLOCATED_BYTES); } + + /** + * Clears the global size of objects allocated. + * @see #getGlobalAllocCountSize() + */ + public static void resetGlobalAllocSize() { + VMDebug.resetAllocCount(VMDebug.KIND_GLOBAL_ALLOCATED_BYTES); + } + + /** + * Returns the global count of objects freed by the runtime between a + * {@link #startAllocCounting() start} and {@link #stopAllocCounting() stop}. + */ public static int getGlobalFreedCount() { return VMDebug.getAllocCount(VMDebug.KIND_GLOBAL_FREED_OBJECTS); } + + /** + * Clears the global count of objects freed. + * @see #getGlobalFreedCount() + */ + public static void resetGlobalFreedCount() { + VMDebug.resetAllocCount(VMDebug.KIND_GLOBAL_FREED_OBJECTS); + } + + /** + * Returns the global size, in bytes, of objects freed by the runtime between a + * {@link #startAllocCounting() start} and {@link #stopAllocCounting() stop}. + */ public static int getGlobalFreedSize() { return VMDebug.getAllocCount(VMDebug.KIND_GLOBAL_FREED_BYTES); } + + /** + * Clears the global size of objects freed. + * @see #getGlobalFreedSize() + */ + public static void resetGlobalFreedSize() { + VMDebug.resetAllocCount(VMDebug.KIND_GLOBAL_FREED_BYTES); + } + + /** + * Returns the number of non-concurrent GC invocations between a + * {@link #startAllocCounting() start} and {@link #stopAllocCounting() stop}. + */ + public static int getGlobalGcInvocationCount() { + return VMDebug.getAllocCount(VMDebug.KIND_GLOBAL_GC_INVOCATIONS); + } + + /** + * Clears the count of non-concurrent GC invocations. + * @see #getGlobalGcInvocationCount() + */ + public static void resetGlobalGcInvocationCount() { + VMDebug.resetAllocCount(VMDebug.KIND_GLOBAL_GC_INVOCATIONS); + } + + /** + * Returns the number of classes successfully initialized (ie those that executed without + * throwing an exception) between a {@link #startAllocCounting() start} and + * {@link #stopAllocCounting() stop}. + */ public static int getGlobalClassInitCount() { - /* number of classes that have been successfully initialized */ return VMDebug.getAllocCount(VMDebug.KIND_GLOBAL_CLASS_INIT_COUNT); } + + /** + * Clears the count of classes initialized. + * @see #getGlobalClassInitCount() + */ + public static void resetGlobalClassInitCount() { + VMDebug.resetAllocCount(VMDebug.KIND_GLOBAL_CLASS_INIT_COUNT); + } + + /** + * Returns the time spent successfully initializing classes between a + * {@link #startAllocCounting() start} and {@link #stopAllocCounting() stop}. + */ public static int getGlobalClassInitTime() { /* cumulative elapsed time for class initialization, in usec */ return VMDebug.getAllocCount(VMDebug.KIND_GLOBAL_CLASS_INIT_TIME); } /** - * Returns the global count of external allocation requests. The - * external allocation tracking feature was removed in Honeycomb. - * This method exists for compatibility and always returns 0. - * - * @deprecated This method is now obsolete. + * Clears the count of time spent initializing classes. + * @see #getGlobalClassInitTime() */ - @Deprecated - public static int getGlobalExternalAllocCount() { - return 0; + public static void resetGlobalClassInitTime() { + VMDebug.resetAllocCount(VMDebug.KIND_GLOBAL_CLASS_INIT_TIME); } /** - * Returns the global count of bytes externally allocated. The - * external allocation tracking feature was removed in Honeycomb. * This method exists for compatibility and always returns 0. - * * @deprecated This method is now obsolete. */ @Deprecated - public static int getGlobalExternalAllocSize() { + public static int getGlobalExternalAllocCount() { return 0; } /** - * Returns the global count of freed external allocation requests. - * The external allocation tracking feature was removed in - * Honeycomb. This method exists for compatibility and always - * returns 0. - * + * This method exists for compatibility and has no effect. * @deprecated This method is now obsolete. */ @Deprecated - public static int getGlobalExternalFreedCount() { - return 0; - } + public static void resetGlobalExternalAllocSize() {} /** - * Returns the global count of freed bytes from external - * allocation requests. The external allocation tracking feature - * was removed in Honeycomb. This method exists for compatibility - * and always returns 0. - * + * This method exists for compatibility and has no effect. * @deprecated This method is now obsolete. */ @Deprecated - public static int getGlobalExternalFreedSize() { - return 0; - } - - public static int getGlobalGcInvocationCount() { - return VMDebug.getAllocCount(VMDebug.KIND_GLOBAL_GC_INVOCATIONS); - } - public static int getThreadAllocCount() { - return VMDebug.getAllocCount(VMDebug.KIND_THREAD_ALLOCATED_OBJECTS); - } - public static int getThreadAllocSize() { - return VMDebug.getAllocCount(VMDebug.KIND_THREAD_ALLOCATED_BYTES); - } + public static void resetGlobalExternalAllocCount() {} /** - * Returns the count of external allocation requests made by the - * current thread. The external allocation tracking feature was - * removed in Honeycomb. This method exists for compatibility and - * always returns 0. - * + * This method exists for compatibility and always returns 0. * @deprecated This method is now obsolete. */ @Deprecated - public static int getThreadExternalAllocCount() { + public static int getGlobalExternalAllocSize() { return 0; } /** - * Returns the global count of bytes externally allocated. The - * external allocation tracking feature was removed in Honeycomb. * This method exists for compatibility and always returns 0. - * * @deprecated This method is now obsolete. */ @Deprecated - public static int getThreadExternalAllocSize() { + public static int getGlobalExternalFreedCount() { return 0; } - public static int getThreadGcInvocationCount() { - return VMDebug.getAllocCount(VMDebug.KIND_THREAD_GC_INVOCATIONS); - } - - public static void resetGlobalAllocCount() { - VMDebug.resetAllocCount(VMDebug.KIND_GLOBAL_ALLOCATED_OBJECTS); - } - public static void resetGlobalAllocSize() { - VMDebug.resetAllocCount(VMDebug.KIND_GLOBAL_ALLOCATED_BYTES); - } - public static void resetGlobalFreedCount() { - VMDebug.resetAllocCount(VMDebug.KIND_GLOBAL_FREED_OBJECTS); - } - public static void resetGlobalFreedSize() { - VMDebug.resetAllocCount(VMDebug.KIND_GLOBAL_FREED_BYTES); - } - public static void resetGlobalClassInitCount() { - VMDebug.resetAllocCount(VMDebug.KIND_GLOBAL_CLASS_INIT_COUNT); - } - public static void resetGlobalClassInitTime() { - VMDebug.resetAllocCount(VMDebug.KIND_GLOBAL_CLASS_INIT_TIME); - } - /** - * Resets the global count of external allocation requests. The - * external allocation tracking feature was removed in Honeycomb. * This method exists for compatibility and has no effect. - * * @deprecated This method is now obsolete. */ @Deprecated - public static void resetGlobalExternalAllocCount() {} + public static void resetGlobalExternalFreedCount() {} /** - * Resets the global count of bytes externally allocated. The - * external allocation tracking feature was removed in Honeycomb. * This method exists for compatibility and has no effect. - * * @deprecated This method is now obsolete. */ @Deprecated - public static void resetGlobalExternalAllocSize() {} + public static int getGlobalExternalFreedSize() { + return 0; + } /** - * Resets the global count of freed external allocations. The - * external allocation tracking feature was removed in Honeycomb. * This method exists for compatibility and has no effect. - * * @deprecated This method is now obsolete. */ @Deprecated - public static void resetGlobalExternalFreedCount() {} + public static void resetGlobalExternalFreedSize() {} /** - * Resets the global count counter of freed bytes from external - * allocations. The external allocation tracking feature was - * removed in Honeycomb. This method exists for compatibility and - * has no effect. - * - * @deprecated This method is now obsolete. + * Returns the thread-local count of objects allocated by the runtime between a + * {@link #startAllocCounting() start} and {@link #stopAllocCounting() stop}. */ - @Deprecated - public static void resetGlobalExternalFreedSize() {} - - public static void resetGlobalGcInvocationCount() { - VMDebug.resetAllocCount(VMDebug.KIND_GLOBAL_GC_INVOCATIONS); + public static int getThreadAllocCount() { + return VMDebug.getAllocCount(VMDebug.KIND_THREAD_ALLOCATED_OBJECTS); } + + /** + * Clears the thread-local count of objects allocated. + * @see #getThreadAllocCount() + */ public static void resetThreadAllocCount() { VMDebug.resetAllocCount(VMDebug.KIND_THREAD_ALLOCATED_OBJECTS); } + + /** + * Returns the thread-local size of objects allocated by the runtime between a + * {@link #startAllocCounting() start} and {@link #stopAllocCounting() stop}. + * @return The allocated size in bytes. + */ + public static int getThreadAllocSize() { + return VMDebug.getAllocCount(VMDebug.KIND_THREAD_ALLOCATED_BYTES); + } + + /** + * Clears the thread-local count of objects allocated. + * @see #getThreadAllocSize() + */ public static void resetThreadAllocSize() { VMDebug.resetAllocCount(VMDebug.KIND_THREAD_ALLOCATED_BYTES); } /** - * Resets the count of external allocation requests made by the - * current thread. The external allocation tracking feature was - * removed in Honeycomb. This method exists for compatibility and - * has no effect. - * + * This method exists for compatibility and has no effect. + * @deprecated This method is now obsolete. + */ + @Deprecated + public static int getThreadExternalAllocCount() { + return 0; + } + + /** + * This method exists for compatibility and has no effect. * @deprecated This method is now obsolete. */ @Deprecated public static void resetThreadExternalAllocCount() {} /** - * Resets the count of bytes externally allocated by the current - * thread. The external allocation tracking feature was removed - * in Honeycomb. This method exists for compatibility and has no - * effect. - * + * This method exists for compatibility and has no effect. + * @deprecated This method is now obsolete. + */ + @Deprecated + public static int getThreadExternalAllocSize() { + return 0; + } + + /** + * This method exists for compatibility and has no effect. * @deprecated This method is now obsolete. */ @Deprecated public static void resetThreadExternalAllocSize() {} + /** + * Returns the number of thread-local non-concurrent GC invocations between a + * {@link #startAllocCounting() start} and {@link #stopAllocCounting() stop}. + */ + public static int getThreadGcInvocationCount() { + return VMDebug.getAllocCount(VMDebug.KIND_THREAD_GC_INVOCATIONS); + } + + /** + * Clears the thread-local count of non-concurrent GC invocations. + * @see #getThreadGcInvocationCount() + */ public static void resetThreadGcInvocationCount() { VMDebug.resetAllocCount(VMDebug.KIND_THREAD_GC_INVOCATIONS); } + + /** + * Clears all the global and thread-local memory allocation counters. + * @see #startAllocCounting() + */ public static void resetAllCounts() { VMDebug.resetAllocCount(VMDebug.KIND_ALL_COUNTS); } @@ -1380,7 +1442,7 @@ href="{@docRoot}guide/developing/tools/traceview.html">Traceview: A Graphical Lo } /** - * @return a String describing the immediate caller of the calling function. + * @return a String describing the immediate caller of the calling method. * {@hide} */ public static String getCaller() { diff --git a/core/java/android/os/IHardwareService.aidl b/core/java/android/os/IHardwareService.aidl index 38abfc0..38abfc0 100755..100644 --- a/core/java/android/os/IHardwareService.aidl +++ b/core/java/android/os/IHardwareService.aidl diff --git a/core/java/android/os/IVibratorService.aidl b/core/java/android/os/IVibratorService.aidl index 2c2fe8a..2c2fe8a 100755..100644 --- a/core/java/android/os/IVibratorService.aidl +++ b/core/java/android/os/IVibratorService.aidl diff --git a/core/java/android/os/TokenWatcher.java b/core/java/android/os/TokenWatcher.java index 9b3a2d6..9b3a2d6 100755..100644 --- a/core/java/android/os/TokenWatcher.java +++ b/core/java/android/os/TokenWatcher.java diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java index 965d38d..965d38d 100755..100644 --- a/core/java/android/provider/ContactsContract.java +++ b/core/java/android/provider/ContactsContract.java diff --git a/core/java/android/provider/MediaStore.java b/core/java/android/provider/MediaStore.java index 0e7ab52..cb6300f 100644 --- a/core/java/android/provider/MediaStore.java +++ b/core/java/android/provider/MediaStore.java @@ -1324,6 +1324,18 @@ public final class MediaStore { } public static final class Media implements AudioColumns { + + private static final String[] EXTERNAL_PATHS; + + static { + String secondary_storage = System.getenv("SECONDARY_STORAGE"); + if (secondary_storage != null) { + EXTERNAL_PATHS = secondary_storage.split(":"); + } else { + EXTERNAL_PATHS = new String[0]; + } + } + /** * Get the content:// style URI for the audio media table on the * given volume. @@ -1337,6 +1349,12 @@ public final class MediaStore { } public static Uri getContentUriForPath(String path) { + for (String ep : EXTERNAL_PATHS) { + if (path.startsWith(ep)) { + return EXTERNAL_CONTENT_URI; + } + } + return (path.startsWith(Environment.getExternalStorageDirectory().getPath()) ? EXTERNAL_CONTENT_URI : INTERNAL_CONTENT_URI); } diff --git a/core/java/android/security/IKeystoreService.java b/core/java/android/security/IKeystoreService.java new file mode 100644 index 0000000..a890d9b --- /dev/null +++ b/core/java/android/security/IKeystoreService.java @@ -0,0 +1,542 @@ +/* + * Copyright (C) 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. + */ + +package android.security; + +import android.os.Binder; +import android.os.IBinder; +import android.os.IInterface; +import android.os.Parcel; +import android.os.RemoteException; + +/** + * This must be kept manually in sync with system/security/keystore until AIDL + * can generate both Java and C++ bindings. + * + * @hide + */ +public interface IKeystoreService extends IInterface { + public static abstract class Stub extends Binder implements IKeystoreService { + private static class Proxy implements IKeystoreService { + private final IBinder mRemote; + + Proxy(IBinder remote) { + mRemote = remote; + } + + public IBinder asBinder() { + return mRemote; + } + + public String getInterfaceDescriptor() { + return DESCRIPTOR; + } + + public int test() throws RemoteException { + Parcel _data = Parcel.obtain(); + Parcel _reply = Parcel.obtain(); + int _result; + try { + _data.writeInterfaceToken(DESCRIPTOR); + mRemote.transact(Stub.TRANSACTION_test, _data, _reply, 0); + _reply.readException(); + _result = _reply.readInt(); + } finally { + _reply.recycle(); + _data.recycle(); + } + return _result; + } + + public byte[] get(String name) throws RemoteException { + Parcel _data = Parcel.obtain(); + Parcel _reply = Parcel.obtain(); + byte[] _result; + try { + _data.writeInterfaceToken(DESCRIPTOR); + _data.writeString(name); + mRemote.transact(Stub.TRANSACTION_get, _data, _reply, 0); + _reply.readException(); + _result = _reply.createByteArray(); + } finally { + _reply.recycle(); + _data.recycle(); + } + return _result; + } + + public int insert(String name, byte[] item, int uid) throws RemoteException { + Parcel _data = Parcel.obtain(); + Parcel _reply = Parcel.obtain(); + int _result; + try { + _data.writeInterfaceToken(DESCRIPTOR); + _data.writeString(name); + _data.writeByteArray(item); + _data.writeInt(uid); + mRemote.transact(Stub.TRANSACTION_insert, _data, _reply, 0); + _reply.readException(); + _result = _reply.readInt(); + } finally { + _reply.recycle(); + _data.recycle(); + } + return _result; + } + + public int del(String name, int uid) throws RemoteException { + Parcel _data = Parcel.obtain(); + Parcel _reply = Parcel.obtain(); + int _result; + try { + _data.writeInterfaceToken(DESCRIPTOR); + _data.writeString(name); + _data.writeInt(uid); + mRemote.transact(Stub.TRANSACTION_del, _data, _reply, 0); + _reply.readException(); + _result = _reply.readInt(); + } finally { + _reply.recycle(); + _data.recycle(); + } + return _result; + } + + public int exist(String name, int uid) throws RemoteException { + Parcel _data = Parcel.obtain(); + Parcel _reply = Parcel.obtain(); + int _result; + try { + _data.writeInterfaceToken(DESCRIPTOR); + _data.writeString(name); + _data.writeInt(uid); + mRemote.transact(Stub.TRANSACTION_exist, _data, _reply, 0); + _reply.readException(); + _result = _reply.readInt(); + } finally { + _reply.recycle(); + _data.recycle(); + } + return _result; + } + + public String[] saw(String name, int uid) throws RemoteException { + Parcel _data = Parcel.obtain(); + Parcel _reply = Parcel.obtain(); + String[] _result; + try { + _data.writeInterfaceToken(DESCRIPTOR); + _data.writeString(name); + _data.writeInt(uid); + mRemote.transact(Stub.TRANSACTION_saw, _data, _reply, 0); + _reply.readException(); + int size = _reply.readInt(); + _result = new String[size]; + for (int i = 0; i < size; i++) { + _result[i] = _reply.readString(); + } + int _ret = _reply.readInt(); + if (_ret != 1) { + return null; + } + } finally { + _reply.recycle(); + _data.recycle(); + } + return _result; + } + + @Override + public int reset() throws RemoteException { + Parcel _data = Parcel.obtain(); + Parcel _reply = Parcel.obtain(); + int _result; + try { + _data.writeInterfaceToken(DESCRIPTOR); + mRemote.transact(Stub.TRANSACTION_reset, _data, _reply, 0); + _reply.readException(); + _result = _reply.readInt(); + } finally { + _reply.recycle(); + _data.recycle(); + } + return _result; + } + + public int password(String password) throws RemoteException { + Parcel _data = Parcel.obtain(); + Parcel _reply = Parcel.obtain(); + int _result; + try { + _data.writeInterfaceToken(DESCRIPTOR); + _data.writeString(password); + mRemote.transact(Stub.TRANSACTION_password, _data, _reply, 0); + _reply.readException(); + _result = _reply.readInt(); + } finally { + _reply.recycle(); + _data.recycle(); + } + return _result; + } + + public int lock() throws RemoteException { + Parcel _data = Parcel.obtain(); + Parcel _reply = Parcel.obtain(); + int _result; + try { + _data.writeInterfaceToken(DESCRIPTOR); + mRemote.transact(Stub.TRANSACTION_lock, _data, _reply, 0); + _reply.readException(); + _result = _reply.readInt(); + } finally { + _reply.recycle(); + _data.recycle(); + } + return _result; + } + + public int unlock(String password) throws RemoteException { + Parcel _data = Parcel.obtain(); + Parcel _reply = Parcel.obtain(); + int _result; + try { + _data.writeInterfaceToken(DESCRIPTOR); + _data.writeString(password); + mRemote.transact(Stub.TRANSACTION_unlock, _data, _reply, 0); + _reply.readException(); + _result = _reply.readInt(); + } finally { + _reply.recycle(); + _data.recycle(); + } + return _result; + } + + @Override + public int zero() throws RemoteException { + Parcel _data = Parcel.obtain(); + Parcel _reply = Parcel.obtain(); + int _result; + try { + _data.writeInterfaceToken(DESCRIPTOR); + mRemote.transact(Stub.TRANSACTION_zero, _data, _reply, 0); + _reply.readException(); + _result = _reply.readInt(); + } finally { + _reply.recycle(); + _data.recycle(); + } + return _result; + } + + public int generate(String name, int uid) throws RemoteException { + Parcel _data = Parcel.obtain(); + Parcel _reply = Parcel.obtain(); + int _result; + try { + _data.writeInterfaceToken(DESCRIPTOR); + _data.writeString(name); + _data.writeInt(uid); + mRemote.transact(Stub.TRANSACTION_generate, _data, _reply, 0); + _reply.readException(); + _result = _reply.readInt(); + } finally { + _reply.recycle(); + _data.recycle(); + } + return _result; + } + + public int import_key(String name, byte[] data, int uid) throws RemoteException { + Parcel _data = Parcel.obtain(); + Parcel _reply = Parcel.obtain(); + int _result; + try { + _data.writeInterfaceToken(DESCRIPTOR); + _data.writeString(name); + _data.writeByteArray(data); + _data.writeInt(uid); + mRemote.transact(Stub.TRANSACTION_import, _data, _reply, 0); + _reply.readException(); + _result = _reply.readInt(); + } finally { + _reply.recycle(); + _data.recycle(); + } + return _result; + } + + public byte[] sign(String name, byte[] data) throws RemoteException { + Parcel _data = Parcel.obtain(); + Parcel _reply = Parcel.obtain(); + byte[] _result; + try { + _data.writeInterfaceToken(DESCRIPTOR); + _data.writeString(name); + _data.writeByteArray(data); + mRemote.transact(Stub.TRANSACTION_sign, _data, _reply, 0); + _reply.readException(); + _result = _reply.createByteArray(); + } finally { + _reply.recycle(); + _data.recycle(); + } + return _result; + } + + public int verify(String name, byte[] data, byte[] signature) throws RemoteException { + Parcel _data = Parcel.obtain(); + Parcel _reply = Parcel.obtain(); + int _result; + try { + _data.writeInterfaceToken(DESCRIPTOR); + _data.writeString(name); + _data.writeByteArray(data); + _data.writeByteArray(signature); + mRemote.transact(Stub.TRANSACTION_verify, _data, _reply, 0); + _reply.readException(); + _result = _reply.readInt(); + } finally { + _reply.recycle(); + _data.recycle(); + } + return _result; + } + + public byte[] get_pubkey(String name) throws RemoteException { + Parcel _data = Parcel.obtain(); + Parcel _reply = Parcel.obtain(); + byte[] _result; + try { + _data.writeInterfaceToken(DESCRIPTOR); + _data.writeString(name); + mRemote.transact(Stub.TRANSACTION_get_pubkey, _data, _reply, 0); + _reply.readException(); + _result = _reply.createByteArray(); + } finally { + _reply.recycle(); + _data.recycle(); + } + return _result; + } + + public int del_key(String name, int uid) throws RemoteException { + Parcel _data = Parcel.obtain(); + Parcel _reply = Parcel.obtain(); + int _result; + try { + _data.writeInterfaceToken(DESCRIPTOR); + _data.writeString(name); + _data.writeInt(uid); + mRemote.transact(Stub.TRANSACTION_del_key, _data, _reply, 0); + _reply.readException(); + _result = _reply.readInt(); + } finally { + _reply.recycle(); + _data.recycle(); + } + return _result; + } + + public int grant(String name, int granteeUid) throws RemoteException { + Parcel _data = Parcel.obtain(); + Parcel _reply = Parcel.obtain(); + int _result; + try { + _data.writeInterfaceToken(DESCRIPTOR); + _data.writeString(name); + _data.writeInt(granteeUid); + mRemote.transact(Stub.TRANSACTION_grant, _data, _reply, 0); + _reply.readException(); + _result = _reply.readInt(); + } finally { + _reply.recycle(); + _data.recycle(); + } + return _result; + } + + public int ungrant(String name, int granteeUid) throws RemoteException { + Parcel _data = Parcel.obtain(); + Parcel _reply = Parcel.obtain(); + int _result; + try { + _data.writeInterfaceToken(DESCRIPTOR); + _data.writeString(name); + _data.writeInt(granteeUid); + mRemote.transact(Stub.TRANSACTION_ungrant, _data, _reply, 0); + _reply.readException(); + _result = _reply.readInt(); + } finally { + _reply.recycle(); + _data.recycle(); + } + return _result; + } + + @Override + public long getmtime(String name) throws RemoteException { + Parcel _data = Parcel.obtain(); + Parcel _reply = Parcel.obtain(); + long _result; + try { + _data.writeInterfaceToken(DESCRIPTOR); + _data.writeString(name); + mRemote.transact(Stub.TRANSACTION_getmtime, _data, _reply, 0); + _reply.readException(); + _result = _reply.readLong(); + } finally { + _reply.recycle(); + _data.recycle(); + } + return _result; + } + + @Override + public int duplicate(String srcKey, int srcUid, String destKey, int destUid) + throws RemoteException { + Parcel _data = Parcel.obtain(); + Parcel _reply = Parcel.obtain(); + int _result; + try { + _data.writeInterfaceToken(DESCRIPTOR); + _data.writeString(srcKey); + _data.writeInt(srcUid); + _data.writeString(destKey); + _data.writeInt(destUid); + mRemote.transact(Stub.TRANSACTION_duplicate, _data, _reply, 0); + _reply.readException(); + _result = _reply.readInt(); + } finally { + _reply.recycle(); + _data.recycle(); + } + return _result; + } + } + + private static final String DESCRIPTOR = "android.security.keystore"; + + static final int TRANSACTION_test = IBinder.FIRST_CALL_TRANSACTION + 0; + static final int TRANSACTION_get = IBinder.FIRST_CALL_TRANSACTION + 1; + static final int TRANSACTION_insert = IBinder.FIRST_CALL_TRANSACTION + 2; + static final int TRANSACTION_del = IBinder.FIRST_CALL_TRANSACTION + 3; + static final int TRANSACTION_exist = IBinder.FIRST_CALL_TRANSACTION + 4; + static final int TRANSACTION_saw = IBinder.FIRST_CALL_TRANSACTION + 5; + static final int TRANSACTION_reset = IBinder.FIRST_CALL_TRANSACTION + 6; + static final int TRANSACTION_password = IBinder.FIRST_CALL_TRANSACTION + 7; + static final int TRANSACTION_lock = IBinder.FIRST_CALL_TRANSACTION + 8; + static final int TRANSACTION_unlock = IBinder.FIRST_CALL_TRANSACTION + 9; + static final int TRANSACTION_zero = IBinder.FIRST_CALL_TRANSACTION + 10; + static final int TRANSACTION_generate = IBinder.FIRST_CALL_TRANSACTION + 11; + static final int TRANSACTION_import = IBinder.FIRST_CALL_TRANSACTION + 12; + static final int TRANSACTION_sign = IBinder.FIRST_CALL_TRANSACTION + 13; + static final int TRANSACTION_verify = IBinder.FIRST_CALL_TRANSACTION + 14; + static final int TRANSACTION_get_pubkey = IBinder.FIRST_CALL_TRANSACTION + 15; + static final int TRANSACTION_del_key = IBinder.FIRST_CALL_TRANSACTION + 16; + static final int TRANSACTION_grant = IBinder.FIRST_CALL_TRANSACTION + 17; + static final int TRANSACTION_ungrant = IBinder.FIRST_CALL_TRANSACTION + 18; + static final int TRANSACTION_getmtime = IBinder.FIRST_CALL_TRANSACTION + 19; + static final int TRANSACTION_duplicate = IBinder.FIRST_CALL_TRANSACTION + 20; + + /** + * Cast an IBinder object into an IKeystoreService interface, generating + * a proxy if needed. + */ + public static IKeystoreService asInterface(IBinder obj) { + if (obj == null) { + return null; + } + IInterface iin = obj.queryLocalInterface(DESCRIPTOR); + if (iin != null && iin instanceof IKeystoreService) { + return (IKeystoreService) iin; + } + return new IKeystoreService.Stub.Proxy(obj); + } + + /** Construct the stub at attach it to the interface. */ + public Stub() { + attachInterface(this, DESCRIPTOR); + } + + public IBinder asBinder() { + return this; + } + + @Override + public boolean onTransact(int code, Parcel data, Parcel reply, int flags) + throws RemoteException { + switch (code) { + case INTERFACE_TRANSACTION: { + reply.writeString(DESCRIPTOR); + return true; + } + case TRANSACTION_test: { + data.enforceInterface(DESCRIPTOR); + int resultCode = test(); + reply.writeNoException(); + reply.writeInt(resultCode); + return true; + } + } + return super.onTransact(code, data, reply, flags); + } + } + + public int test() throws RemoteException; + + public byte[] get(String name) throws RemoteException; + + public int insert(String name, byte[] item, int uid) throws RemoteException; + + public int del(String name, int uid) throws RemoteException; + + public int exist(String name, int uid) throws RemoteException; + + public String[] saw(String name, int uid) throws RemoteException; + + public int reset() throws RemoteException; + + public int password(String password) throws RemoteException; + + public int lock() throws RemoteException; + + public int unlock(String password) throws RemoteException; + + public int zero() throws RemoteException; + + public int generate(String name, int uid) throws RemoteException; + + public int import_key(String name, byte[] data, int uid) throws RemoteException; + + public byte[] sign(String name, byte[] data) throws RemoteException; + + public int verify(String name, byte[] data, byte[] signature) throws RemoteException; + + public byte[] get_pubkey(String name) throws RemoteException; + + public int del_key(String name, int uid) throws RemoteException; + + public int grant(String name, int granteeUid) throws RemoteException; + + public int ungrant(String name, int granteeUid) throws RemoteException; + + public long getmtime(String name) throws RemoteException; + + public int duplicate(String srcKey, int srcUid, String destKey, int destUid) + throws RemoteException; +} diff --git a/core/java/android/server/package.html b/core/java/android/server/package.html index c9f96a6..c9f96a6 100755..100644 --- a/core/java/android/server/package.html +++ b/core/java/android/server/package.html diff --git a/core/java/android/speech/tts/ITextToSpeechCallback.aidl b/core/java/android/speech/tts/ITextToSpeechCallback.aidl index f0287d4..f0287d4 100755..100644 --- a/core/java/android/speech/tts/ITextToSpeechCallback.aidl +++ b/core/java/android/speech/tts/ITextToSpeechCallback.aidl diff --git a/core/java/android/speech/tts/TextToSpeech.java b/core/java/android/speech/tts/TextToSpeech.java index 5e367cb..5e367cb 100755..100644 --- a/core/java/android/speech/tts/TextToSpeech.java +++ b/core/java/android/speech/tts/TextToSpeech.java diff --git a/core/java/android/text/format/DateFormat.java b/core/java/android/text/format/DateFormat.java index 3c984b5..50b1a29 100644 --- a/core/java/android/text/format/DateFormat.java +++ b/core/java/android/text/format/DateFormat.java @@ -31,179 +31,85 @@ import java.util.Locale; import java.util.TimeZone; import java.text.SimpleDateFormat; +import libcore.icu.LocaleData; + /** - Utility class for producing strings with formatted date/time. - - <p> - Most callers should avoid supplying their own format strings to this - class' {@code format} methods and rely on the correctly localized ones - supplied by the system. This class' factory methods return - appropriately-localized {@link java.text.DateFormat} instances, suitable - for both formatting and parsing dates. For the canonical documentation - of format strings, see {@link java.text.SimpleDateFormat}. - </p> - <p> - The format methods in this class takes as inputs a format string and a representation of a date/time. - The format string controls how the output is generated. - This class only supports a subset of the full Unicode specification. - Use {@link java.text.SimpleDateFormat} if you need more. - Formatting characters may be repeated in order to get more detailed representations - of that field. For instance, the format character 'M' is used to - represent the month. Depending on how many times that character is repeated - you get a different representation. - </p> - <p> - For the month of September:<br/> - M -> 9<br/> - MM -> 09<br/> - MMM -> Sep<br/> - MMMM -> September - </p> - <p> - The effects of the duplication vary depending on the nature of the field. - See the notes on the individual field formatters for details. For purely numeric - fields such as <code>HOUR</code> adding more copies of the designator will - zero-pad the value to that number of characters. - </p> - <p> - For 7 minutes past the hour:<br/> - m -> 7<br/> - mm -> 07<br/> - mmm -> 007<br/> - mmmm -> 0007 - </p> - <p> - Examples for April 6, 1970 at 3:23am:<br/> - "MM/dd/yy h:mmaa" -> "04/06/70 3:23am"<br/> - "MMM dd, yyyy h:mmaa" -> "Apr 6, 1970 3:23am"<br/> - "MMMM dd, yyyy h:mmaa" -> "April 6, 1970 3:23am"<br/> - "E, MMMM dd, yyyy h:mmaa" -> "Mon, April 6, 1970 3:23am&<br/> - "EEEE, MMMM dd, yyyy h:mmaa" -> "Monday, April 6, 1970 3:23am"<br/> - "'Noteworthy day: 'M/d/yy" -> "Noteworthy day: 4/6/70" + * Utility class for producing strings with formatted date/time. + * + * <p>Most callers should avoid supplying their own format strings to this + * class' {@code format} methods and rely on the correctly localized ones + * supplied by the system. This class' factory methods return + * appropriately-localized {@link java.text.DateFormat} instances, suitable + * for both formatting and parsing dates. For the canonical documentation + * of format strings, see {@link java.text.SimpleDateFormat}. + * + * <p>The {@code format} methods in this class implement a subset of Unicode + * <a href="http://www.unicode.org/reports/tr35/#Date_Format_Patterns">UTS #35</a> patterns. + * The subset currently supported by this class includes the following format characters: + * {@code acdEHhLKkLMmsyz}. Up to API level 17, only {@code adEhkMmszy} were supported. + * Note that this class incorrectly implements {@code k} as if it were {@code H} for backwards + * compatibility. + * + * <p>See {@link java.text.SimpleDateFormat} for more documentation + * about patterns, or if you need a more complete or correct implementation. + * Note that the non-{@code format} methods in this class are implemented by + * {@code SimpleDateFormat}. */ - public class DateFormat { - /** - Text in the format string that should be copied verbatim rather that - interpreted as formatting codes must be surrounded by the <code>QUOTE</code> - character. If you need to embed a literal <code>QUOTE</code> character in - the output text then use two in a row. - */ + /** @deprecated Use a literal {@code '} instead. */ + @Deprecated public static final char QUOTE = '\''; - - /** - This designator indicates whether the <code>HOUR</code> field is before - or after noon. The output is lower-case. - - Examples: - a -> a or p - aa -> am or pm - */ + + /** @deprecated Use a literal {@code 'a'} instead. */ + @Deprecated public static final char AM_PM = 'a'; - /** - This designator indicates whether the <code>HOUR</code> field is before - or after noon. The output is capitalized. - - Examples: - A -> A or P - AA -> AM or PM - */ + /** @deprecated Use a literal {@code 'a'} instead; 'A' was always equivalent to 'a'. */ + @Deprecated public static final char CAPITAL_AM_PM = 'A'; - /** - This designator indicates the day of the month. - - Examples for the 9th of the month: - d -> 9 - dd -> 09 - */ + /** @deprecated Use a literal {@code 'd'} instead. */ + @Deprecated public static final char DATE = 'd'; - /** - This designator indicates the name of the day of the week. - - Examples for Sunday: - E -> Sun - EEEE -> Sunday - */ + /** @deprecated Use a literal {@code 'E'} instead. */ + @Deprecated public static final char DAY = 'E'; - /** - This designator indicates the hour of the day in 12 hour format. - - Examples for 3pm: - h -> 3 - hh -> 03 - */ + /** @deprecated Use a literal {@code 'h'} instead. */ + @Deprecated public static final char HOUR = 'h'; /** - This designator indicates the hour of the day in 24 hour format. - - Example for 3pm: - k -> 15 - - Examples for midnight: - k -> 0 - kk -> 00 + * @deprecated Use a literal {@code 'H'} (for compatibility with {@link SimpleDateFormat} + * and Unicode) or {@code 'k'} (for compatibility with Android releases up to and including + * Jelly Bean MR-1) instead. Note that the two are incompatible. */ + @Deprecated public static final char HOUR_OF_DAY = 'k'; - /** - This designator indicates the minute of the hour. - - Examples for 7 minutes past the hour: - m -> 7 - mm -> 07 - */ + /** @deprecated Use a literal {@code 'm'} instead. */ + @Deprecated public static final char MINUTE = 'm'; - /** - This designator indicates the month of the year. See also - {@link #STANDALONE_MONTH}. - - Examples for September: - M -> 9 - MM -> 09 - MMM -> Sep - MMMM -> September - */ + /** @deprecated Use a literal {@code 'M'} instead. */ + @Deprecated public static final char MONTH = 'M'; - /** - This designator indicates the standalone month of the year, - necessary in some format strings in some languages. For - example, Russian distinguishes between the "June" in - "June" and that in "June 2010". - */ + /** @deprecated Use a literal {@code 'L'} instead. */ + @Deprecated public static final char STANDALONE_MONTH = 'L'; - /** - This designator indicates the seconds of the minute. - - Examples for 7 seconds past the minute: - s -> 7 - ss -> 07 - */ + /** @deprecated Use a literal {@code 's'} instead. */ + @Deprecated public static final char SECONDS = 's'; - /** - This designator indicates the offset of the timezone from GMT. - - Example for US/Pacific timezone: - z -> -0800 - zz -> PST - */ + /** @deprecated Use a literal {@code 'z'} instead. */ + @Deprecated public static final char TIME_ZONE = 'z'; - /** - This designator indicates the year. - - Examples for 2006 - y -> 06 - yyyy -> 2006 - */ + /** @deprecated Use a literal {@code 'y'} instead. */ + @Deprecated public static final char YEAR = 'y'; @@ -231,8 +137,7 @@ public class DateFormat { } java.text.DateFormat natural = - java.text.DateFormat.getTimeInstance( - java.text.DateFormat.LONG, locale); + java.text.DateFormat.getTimeInstance(java.text.DateFormat.LONG, locale); if (natural instanceof SimpleDateFormat) { SimpleDateFormat sdf = (SimpleDateFormat) natural; @@ -265,20 +170,22 @@ public class DateFormat { * @return the {@link java.text.DateFormat} object that properly formats the time. */ public static java.text.DateFormat getTimeFormat(Context context) { - boolean b24 = is24HourFormat(context); - int res; - - if (b24) { - res = R.string.twenty_four_hour_time_format; - } else { - res = R.string.twelve_hour_time_format; - } + return new java.text.SimpleDateFormat(getTimeFormatString(context)); + } - return new java.text.SimpleDateFormat(context.getString(res)); + /** + * Returns a String pattern that can be used to format the time according + * to the current locale and the user's 12-/24-hour clock preference. + * @param context the application context + * @hide + */ + public static String getTimeFormatString(Context context) { + LocaleData d = LocaleData.get(context.getResources().getConfiguration().locale); + return is24HourFormat(context) ? d.timeFormat24 : d.timeFormat12; } /** - * Returns a {@link java.text.DateFormat} object that can format the date + * Returns a {@link java.text.DateFormat} object that can format the date * in short form (such as 12/31/1999) according * to the current locale and the user's date-order preference. * @param context the application context @@ -303,7 +210,6 @@ public class DateFormat { public static java.text.DateFormat getDateFormatForSetting(Context context, String value) { String format = getDateFormatStringForSetting(context, value); - return new java.text.SimpleDateFormat(format); } @@ -347,10 +253,10 @@ public class DateFormat { value = context.getString(R.string.numeric_date_format); return value; } - + /** * Returns a {@link java.text.DateFormat} object that can format the date - * in long form (such as December 31, 1999) for the current locale. + * in long form (such as {@code Monday, January 3, 2000}) for the current locale. * @param context the application context * @return the {@link java.text.DateFormat} object that formats the date in long form. */ @@ -360,7 +266,7 @@ public class DateFormat { /** * Returns a {@link java.text.DateFormat} object that can format the date - * in medium form (such as Dec. 31, 1999) for the current locale. + * in medium form (such as {@code Jan 3, 2000}) for the current locale. * @param context the application context * @return the {@link java.text.DateFormat} object that formats the date in long form. */ @@ -370,13 +276,13 @@ public class DateFormat { /** * Gets the current date format stored as a char array. The array will contain - * 3 elements ({@link #DATE}, {@link #MONTH}, and {@link #YEAR}) in the order + * 3 elements ({@link #DATE}, {@link #MONTH}, and {@link #YEAR}) in the order * specified by the user's format preference. Note that this order is * only appropriate for all-numeric dates; spelled-out (MEDIUM and LONG) * dates will generally contain other punctuation, spaces, or words, * not just the day, month, and year, and not necessarily in the same * order returned here. - */ + */ public static char[] getDateFormatOrder(Context context) { char[] order = new char[] {DATE, MONTH, YEAR}; String value = getDateFormatString(context); @@ -406,7 +312,7 @@ public class DateFormat { } return order; } - + private static String getDateFormatString(Context context) { String value = Settings.System.getString(context.getContentResolver(), Settings.System.DATE_FORMAT); @@ -415,7 +321,7 @@ public class DateFormat { } /** - * Given a format string and a time in milliseconds since Jan 1, 1970 GMT, returns a + * Given a format string and a time in milliseconds since Jan 1, 1970 GMT, returns a * CharSequence containing the requested date. * @param inFormat the format string, as described in {@link android.text.format.DateFormat} * @param inTimeInMillis in milliseconds since Jan 1, 1970 GMT @@ -433,22 +339,20 @@ public class DateFormat { * @return a {@link CharSequence} containing the requested text */ public static CharSequence format(CharSequence inFormat, Date inDate) { - Calendar c = new GregorianCalendar(); - + Calendar c = new GregorianCalendar(); c.setTime(inDate); - return format(inFormat, c); } /** * Indicates whether the specified format string contains seconds. - * + * * Always returns false if the input format is null. - * + * * @param inFormat the format string, as described in {@link android.text.format.DateFormat} - * + * * @return true if the format string contains {@link #SECONDS}, false otherwise - * + * * @hide */ public static boolean hasSeconds(CharSequence inFormat) { @@ -503,24 +407,23 @@ public class DateFormat { } /** - * Given a format string and a {@link java.util.Calendar} object, returns a CharSequence + * Given a format string and a {@link java.util.Calendar} object, returns a CharSequence * containing the requested date. * @param inFormat the format string, as described in {@link android.text.format.DateFormat} * @param inDate the date to format * @return a {@link CharSequence} containing the requested text */ public static CharSequence format(CharSequence inFormat, Calendar inDate) { - SpannableStringBuilder s = new SpannableStringBuilder(inFormat); - int c; - int count; + SpannableStringBuilder s = new SpannableStringBuilder(inFormat); + int count; + + LocaleData localeData = LocaleData.get(Locale.getDefault()); int len = inFormat.length(); for (int i = 0; i < len; i += count) { - int temp; - count = 1; - c = s.charAt(i); + int c = s.charAt(i); if (c == QUOTE) { count = appendQuotedText(s, i, len); @@ -533,102 +436,105 @@ public class DateFormat { } String replacement; - switch (c) { - case AM_PM: - replacement = DateUtils.getAMPMString(inDate.get(Calendar.AM_PM)); + case 'A': + case 'a': + replacement = localeData.amPm[inDate.get(Calendar.AM_PM) - Calendar.AM]; break; - - case CAPITAL_AM_PM: - //FIXME: this is the same as AM_PM? no capital? - replacement = DateUtils.getAMPMString(inDate.get(Calendar.AM_PM)); - break; - - case DATE: + case 'd': replacement = zeroPad(inDate.get(Calendar.DATE), count); break; - - case DAY: - temp = inDate.get(Calendar.DAY_OF_WEEK); - replacement = DateUtils.getDayOfWeekString(temp, - count < 4 ? - DateUtils.LENGTH_MEDIUM : - DateUtils.LENGTH_LONG); + case 'c': + case 'E': + replacement = getDayOfWeekString(localeData, + inDate.get(Calendar.DAY_OF_WEEK), count, c); break; - - case HOUR: - temp = inDate.get(Calendar.HOUR); - - if (0 == temp) - temp = 12; - - replacement = zeroPad(temp, count); + case 'K': // hour in am/pm (0-11) + case 'h': // hour in am/pm (1-12) + { + int hour = inDate.get(Calendar.HOUR); + if (c == 'h' && hour == 0) { + hour = 12; + } + replacement = zeroPad(hour, count); + } break; - - case HOUR_OF_DAY: - replacement = zeroPad(inDate.get(Calendar.HOUR_OF_DAY), count); + case 'H': // hour in day (0-23) + case 'k': // hour in day (1-24) [but see note below] + { + int hour = inDate.get(Calendar.HOUR_OF_DAY); + // Historically on Android 'k' was interpreted as 'H', which wasn't + // implemented, so pretty much all callers that want to format 24-hour + // times are abusing 'k'. http://b/8359981. + if (false && c == 'k' && hour == 0) { + hour = 24; + } + replacement = zeroPad(hour, count); + } break; - - case MINUTE: - replacement = zeroPad(inDate.get(Calendar.MINUTE), count); + case 'L': + case 'M': + replacement = getMonthString(localeData, + inDate.get(Calendar.MONTH), count, c); break; - - case MONTH: - case STANDALONE_MONTH: - replacement = getMonthString(inDate, count, c); + case 'm': + replacement = zeroPad(inDate.get(Calendar.MINUTE), count); break; - - case SECONDS: + case 's': replacement = zeroPad(inDate.get(Calendar.SECOND), count); break; - - case TIME_ZONE: - replacement = getTimeZoneString(inDate, count); + case 'y': + replacement = getYearString(inDate.get(Calendar.YEAR), count); break; - - case YEAR: - replacement = getYearString(inDate, count); + case 'z': + replacement = getTimeZoneString(inDate, count); break; - default: replacement = null; break; } - + if (replacement != null) { s.replace(i, i + count, replacement); count = replacement.length(); // CARE: count is used in the for loop above len = s.length(); } } - - if (inFormat instanceof Spanned) + + if (inFormat instanceof Spanned) { return new SpannedString(s); - else + } else { return s.toString(); + } } - - private static String getMonthString(Calendar inDate, int count, int kind) { - boolean standalone = (kind == STANDALONE_MONTH); - int month = inDate.get(Calendar.MONTH); - - if (count >= 4) { - return standalone - ? DateUtils.getStandaloneMonthString(month, DateUtils.LENGTH_LONG) - : DateUtils.getMonthString(month, DateUtils.LENGTH_LONG); + + private static String getDayOfWeekString(LocaleData ld, int day, int count, int kind) { + boolean standalone = (kind == 'c'); + if (count == 5) { + return standalone ? ld.tinyStandAloneWeekdayNames[day] : ld.tinyWeekdayNames[day]; + } else if (count == 4) { + return standalone ? ld.longStandAloneWeekdayNames[day] : ld.longWeekdayNames[day]; + } else { + return standalone ? ld.shortStandAloneWeekdayNames[day] : ld.shortWeekdayNames[day]; + } + } + + private static String getMonthString(LocaleData ld, int month, int count, int kind) { + boolean standalone = (kind == 'L'); + if (count == 5) { + return standalone ? ld.tinyStandAloneMonthNames[month] : ld.tinyMonthNames[month]; + } else if (count == 4) { + return standalone ? ld.longStandAloneMonthNames[month] : ld.longMonthNames[month]; } else if (count == 3) { - return standalone - ? DateUtils.getStandaloneMonthString(month, DateUtils.LENGTH_MEDIUM) - : DateUtils.getMonthString(month, DateUtils.LENGTH_MEDIUM); + return standalone ? ld.shortStandAloneMonthNames[month] : ld.shortMonthNames[month]; } else { // Calendar.JANUARY == 0, so add 1 to month. return zeroPad(month+1, count); } } - + private static String getTimeZoneString(Calendar inDate, int count) { TimeZone tz = inDate.getTimeZone(); - if (count < 2) { // FIXME: shouldn't this be <= 2 ? return formatZoneOffset(inDate.get(Calendar.DST_OFFSET) + inDate.get(Calendar.ZONE_OFFSET), @@ -657,13 +563,12 @@ public class DateFormat { tb.append(zeroPad(minutes, 2)); return tb.toString(); } - - private static String getYearString(Calendar inDate, int count) { - int year = inDate.get(Calendar.YEAR); + + private static String getYearString(int year, int count) { return (count <= 2) ? zeroPad(year % 100, 2) : String.format(Locale.getDefault(), "%d", year); } - + private static int appendQuotedText(SpannableStringBuilder s, int i, int len) { if (i + 1 < len && s.charAt(i + 1) == QUOTE) { s.delete(i, i + 1); diff --git a/core/java/android/text/format/DateUtils.java b/core/java/android/text/format/DateUtils.java index bcce61d..5a88cf6 100644 --- a/core/java/android/text/format/DateUtils.java +++ b/core/java/android/text/format/DateUtils.java @@ -39,15 +39,9 @@ public class DateUtils { private static final Object sLock = new Object(); private static Configuration sLastConfig; - private static java.text.DateFormat sStatusTimeFormat; private static String sElapsedFormatMMSS; private static String sElapsedFormatHMMSS; - private static final String FAST_FORMAT_HMMSS = "%1$d:%2$02d:%3$02d"; - private static final String FAST_FORMAT_MMSS = "%1$02d:%2$02d"; - private static final char TIME_SEPARATOR = ':'; - - public static final long SECOND_IN_MILLIS = 1000; public static final long MINUTE_IN_MILLIS = SECOND_IN_MILLIS * 60; public static final long HOUR_IN_MILLIS = MINUTE_IN_MILLIS * 60; @@ -100,14 +94,14 @@ public class DateUtils // translated. /** * This is not actually the preferred 24-hour date format in all locales. - * @deprecated use {@link java.text.SimpleDateFormat} instead. + * @deprecated Use {@link java.text.SimpleDateFormat} instead. */ @Deprecated public static final String HOUR_MINUTE_24 = "%H:%M"; public static final String MONTH_FORMAT = "%B"; /** * This is not actually a useful month name in all locales. - * @deprecated use {@link java.text.SimpleDateFormat} instead. + * @deprecated Use {@link java.text.SimpleDateFormat} instead. */ @Deprecated public static final String ABBREV_MONTH_FORMAT = "%b"; @@ -123,7 +117,7 @@ public class DateUtils // The index is constructed from a bit-wise OR of the boolean values: // {showTime, showYear, showWeekDay}. For example, if showYear and // showWeekDay are both true, then the index would be 3. - /** @deprecated do not use. */ + /** @deprecated Do not use. */ public static final int sameYearTable[] = { com.android.internal.R.string.same_year_md1_md2, com.android.internal.R.string.same_year_wday1_md1_wday2_md2, @@ -150,7 +144,7 @@ public class DateUtils // The index is constructed from a bit-wise OR of the boolean values: // {showTime, showYear, showWeekDay}. For example, if showYear and // showWeekDay are both true, then the index would be 3. - /** @deprecated do not use. */ + /** @deprecated Do not use. */ public static final int sameMonthTable[] = { com.android.internal.R.string.same_month_md1_md2, com.android.internal.R.string.same_month_wday1_md1_wday2_md2, @@ -177,7 +171,7 @@ public class DateUtils * * @more <p> * e.g. "Sunday" or "January" - * @deprecated use {@link java.text.SimpleDateFormat} instead. + * @deprecated Use {@link java.text.SimpleDateFormat} instead. */ @Deprecated public static final int LENGTH_LONG = 10; @@ -188,7 +182,7 @@ public class DateUtils * * @more <p> * e.g. "Sun" or "Jan" - * @deprecated use {@link java.text.SimpleDateFormat} instead. + * @deprecated Use {@link java.text.SimpleDateFormat} instead. */ @Deprecated public static final int LENGTH_MEDIUM = 20; @@ -200,7 +194,7 @@ public class DateUtils * <p>e.g. "Su" or "Jan" * <p>In most languages, the results returned for LENGTH_SHORT will be the same as * the results returned for {@link #LENGTH_MEDIUM}. - * @deprecated use {@link java.text.SimpleDateFormat} instead. + * @deprecated Use {@link java.text.SimpleDateFormat} instead. */ @Deprecated public static final int LENGTH_SHORT = 30; @@ -209,7 +203,7 @@ public class DateUtils * Request an even shorter abbreviated version of the name. * Do not use this. Currently this will always return the same result * as {@link #LENGTH_SHORT}. - * @deprecated use {@link java.text.SimpleDateFormat} instead. + * @deprecated Use {@link java.text.SimpleDateFormat} instead. */ @Deprecated public static final int LENGTH_SHORTER = 40; @@ -221,7 +215,7 @@ public class DateUtils * <p>e.g. "S", "T", "T" or "J" * <p>In some languages, the results returned for LENGTH_SHORTEST will be the same as * the results returned for {@link #LENGTH_SHORT}. - * @deprecated use {@link java.text.SimpleDateFormat} instead. + * @deprecated Use {@link java.text.SimpleDateFormat} instead. */ @Deprecated public static final int LENGTH_SHORTEST = 50; @@ -237,7 +231,7 @@ public class DateUtils * Undefined lengths will return {@link #LENGTH_MEDIUM} * but may return something different in the future. * @throws IndexOutOfBoundsException if the dayOfWeek is out of bounds. - * @deprecated use {@link java.text.SimpleDateFormat} instead. + * @deprecated Use {@link java.text.SimpleDateFormat} instead. */ @Deprecated public static String getDayOfWeekString(int dayOfWeek, int abbrev) { @@ -259,7 +253,7 @@ public class DateUtils * @param ampm Either {@link Calendar#AM Calendar.AM} or {@link Calendar#PM Calendar.PM}. * @throws IndexOutOfBoundsException if the ampm is out of bounds. * @return Localized version of "AM" or "PM". - * @deprecated use {@link java.text.SimpleDateFormat} instead. + * @deprecated Use {@link java.text.SimpleDateFormat} instead. */ @Deprecated public static String getAMPMString(int ampm) { @@ -275,14 +269,10 @@ public class DateUtils * Undefined lengths will return {@link #LENGTH_MEDIUM} * but may return something different in the future. * @return Localized month of the year. - * @deprecated use {@link java.text.SimpleDateFormat} instead. + * @deprecated Use {@link java.text.SimpleDateFormat} instead. */ @Deprecated public static String getMonthString(int month, int abbrev) { - // Note that here we use d.shortMonthNames for MEDIUM, SHORT and SHORTER. - // This is a shortcut to not spam the translators with too many variations - // of the same string. If we find that in a language the distinction - // is necessary, we can can add more without changing this API. LocaleData d = LocaleData.get(Locale.getDefault()); String[] names; switch (abbrev) { @@ -297,41 +287,6 @@ public class DateUtils } /** - * Return a localized string for the month of the year, for - * contexts where the month is not formatted together with - * a day of the month. - * - * @param month One of {@link Calendar#JANUARY Calendar.JANUARY}, - * {@link Calendar#FEBRUARY Calendar.FEBRUARY}, etc. - * @param abbrev One of {@link #LENGTH_LONG}, {@link #LENGTH_MEDIUM}, - * or {@link #LENGTH_SHORTEST}. - * Undefined lengths will return {@link #LENGTH_MEDIUM} - * but may return something different in the future. - * @return Localized month of the year. - * @hide Pending API council approval - * @deprecated use {@link java.text.SimpleDateFormat} instead. - */ - @Deprecated - public static String getStandaloneMonthString(int month, int abbrev) { - // Note that here we use d.shortMonthNames for MEDIUM, SHORT and SHORTER. - // This is a shortcut to not spam the translators with too many variations - // of the same string. If we find that in a language the distinction - // is necessary, we can can add more without changing this API. - LocaleData d = LocaleData.get(Locale.getDefault()); - String[] names; - switch (abbrev) { - case LENGTH_LONG: names = d.longStandAloneMonthNames; - break; - case LENGTH_MEDIUM: names = d.shortMonthNames; break; - case LENGTH_SHORT: names = d.shortMonthNames; break; - case LENGTH_SHORTER: names = d.shortMonthNames; break; - case LENGTH_SHORTEST: names = d.tinyMonthNames; break; - default: names = d.shortMonthNames; break; - } - return names[month]; - } - - /** * Returns a string describing the elapsed time since startTime. * @param startTime some time in the past. * @return a String object containing the elapsed time. @@ -434,20 +389,7 @@ public class DateUtils } } } else if (duration < WEEK_IN_MILLIS && minResolution < WEEK_IN_MILLIS) { - count = getNumberOfDaysPassed(time, now); - if (past) { - if (abbrevRelative) { - resId = com.android.internal.R.plurals.abbrev_num_days_ago; - } else { - resId = com.android.internal.R.plurals.num_days_ago; - } - } else { - if (abbrevRelative) { - resId = com.android.internal.R.plurals.abbrev_in_num_days; - } else { - resId = com.android.internal.R.plurals.in_num_days; - } - } + return getRelativeDayString(r, time, now); } else { // We know that we won't be showing the time, so it is safe to pass // in a null context. @@ -459,24 +401,6 @@ public class DateUtils } /** - * Returns the number of days passed between two dates. - * - * @param date1 first date - * @param date2 second date - * @return number of days passed between to dates. - */ - private synchronized static long getNumberOfDaysPassed(long date1, long date2) { - if (sThenTime == null) { - sThenTime = new Time(); - } - sThenTime.set(date1); - int day1 = Time.getJulianDay(date1, sThenTime.gmtoff); - sThenTime.set(date2); - int day2 = Time.getJulianDay(date2, sThenTime.gmtoff); - return Math.abs(day2 - day1); - } - - /** * Return string describing the elapsed time since startTime formatted like * "[relative time/date], [time]". * <p> @@ -534,28 +458,29 @@ public class DateUtils * today this function returns "Today", if the day was a week ago it returns "7 days ago", and * if the day is in 2 weeks it returns "in 14 days". * - * @param r the resources to get the strings from + * @param r the resources * @param day the relative day to describe in UTC milliseconds * @param today the current time in UTC milliseconds - * @return a formatting string */ private static final String getRelativeDayString(Resources r, long day, long today) { + Locale locale = r.getConfiguration().locale; + if (locale == null) { + locale = Locale.getDefault(); + } + + // TODO: use TimeZone.getOffset instead. Time startTime = new Time(); startTime.set(day); + int startDay = Time.getJulianDay(day, startTime.gmtoff); + Time currentTime = new Time(); currentTime.set(today); - - int startDay = Time.getJulianDay(day, startTime.gmtoff); int currentDay = Time.getJulianDay(today, currentTime.gmtoff); int days = Math.abs(currentDay - startDay); boolean past = (today > day); // TODO: some locales name other days too, such as de_DE's "Vorgestern" (today - 2). - Locale locale = r.getConfiguration().locale; - if (locale == null) { - locale = Locale.getDefault(); - } if (days == 1) { if (past) { return LocaleData.get(locale).yesterday; @@ -588,25 +513,12 @@ public class DateUtils Configuration cfg = r.getConfiguration(); if (sLastConfig == null || !sLastConfig.equals(cfg)) { sLastConfig = cfg; - sStatusTimeFormat = java.text.DateFormat.getTimeInstance(java.text.DateFormat.SHORT); sElapsedFormatMMSS = r.getString(com.android.internal.R.string.elapsed_time_short_format_mm_ss); sElapsedFormatHMMSS = r.getString(com.android.internal.R.string.elapsed_time_short_format_h_mm_ss); } } /** - * Format a time so it appears like it would in the status bar clock. - * @deprecated use {@link #DateFormat.getTimeFormat(Context)} instead. - * @hide - */ - public static final CharSequence timeString(long millis) { - synchronized (sLock) { - initFormatStringsLocked(); - return sStatusTimeFormat.format(millis); - } - } - - /** * Return given duration in a human-friendly format. For example, "4 * minutes" or "1 second". Returns only largest meaningful unit of time, * from seconds up to hours. @@ -640,19 +552,18 @@ public class DateUtils } /** - * Formats an elapsed time in the form "MM:SS" or "H:MM:SS" - * for display on the call-in-progress screen. + * Formats an elapsed time in a format like "MM:SS" or "H:MM:SS" (using a form + * suited to the current locale), similar to that used on the call-in-progress + * screen. * - * @param recycle {@link StringBuilder} to recycle, if possible + * @param recycle {@link StringBuilder} to recycle, or null to use a temporary one. * @param elapsedSeconds the elapsed time in seconds. */ public static String formatElapsedTime(StringBuilder recycle, long elapsedSeconds) { - initFormatStrings(); - + // Break the elapsed seconds into hours, minutes, and seconds. long hours = 0; long minutes = 0; long seconds = 0; - if (elapsedSeconds >= 3600) { hours = elapsedSeconds / 3600; elapsedSeconds -= hours * 3600; @@ -663,70 +574,23 @@ public class DateUtils } seconds = elapsedSeconds; - String result; - if (hours > 0) { - return formatElapsedTime(recycle, sElapsedFormatHMMSS, hours, minutes, seconds); - } else { - return formatElapsedTime(recycle, sElapsedFormatMMSS, minutes, seconds); - } - } - - private static void append(StringBuilder sb, long value, boolean pad, char zeroDigit) { - if (value < 10) { - if (pad) { - sb.append(zeroDigit); - } - } else { - sb.append((char) (zeroDigit + (value / 10))); - } - sb.append((char) (zeroDigit + (value % 10))); - } - - /** - * Fast formatting of h:mm:ss. - */ - private static String formatElapsedTime(StringBuilder recycle, String format, long hours, - long minutes, long seconds) { - if (FAST_FORMAT_HMMSS.equals(format)) { - char zeroDigit = LocaleData.get(Locale.getDefault()).zeroDigit; - - StringBuilder sb = recycle; - if (sb == null) { - sb = new StringBuilder(8); - } else { - sb.setLength(0); - } - append(sb, hours, false, zeroDigit); - sb.append(TIME_SEPARATOR); - append(sb, minutes, true, zeroDigit); - sb.append(TIME_SEPARATOR); - append(sb, seconds, true, zeroDigit); - return sb.toString(); + // Create a StringBuilder if we weren't given one to recycle. + // TODO: if we cared, we could have a thread-local temporary StringBuilder. + StringBuilder sb = recycle; + if (sb == null) { + sb = new StringBuilder(8); } else { - return String.format(format, hours, minutes, seconds); + sb.setLength(0); } - } - /** - * Fast formatting of mm:ss. - */ - private static String formatElapsedTime(StringBuilder recycle, String format, long minutes, - long seconds) { - if (FAST_FORMAT_MMSS.equals(format)) { - char zeroDigit = LocaleData.get(Locale.getDefault()).zeroDigit; - - StringBuilder sb = recycle; - if (sb == null) { - sb = new StringBuilder(8); - } else { - sb.setLength(0); - } - append(sb, minutes, false, zeroDigit); - sb.append(TIME_SEPARATOR); - append(sb, seconds, true, zeroDigit); - return sb.toString(); + // Format the broken-down time in a locale-appropriate way. + // TODO: use icu4c when http://unicode.org/cldr/trac/ticket/3407 is fixed. + Formatter f = new Formatter(sb, Locale.getDefault()); + initFormatStrings(); + if (hours > 0) { + return f.format(sElapsedFormatHMMSS, hours, minutes, seconds).toString(); } else { - return String.format(format, minutes, seconds); + return f.format(sElapsedFormatMMSS, minutes, seconds).toString(); } } @@ -768,18 +632,6 @@ public class DateUtils } /** - * @hide - * @deprecated use {@link android.text.format.Time} - */ - public static Calendar newCalendar(boolean zulu) - { - if (zulu) - return Calendar.getInstance(TimeZone.getTimeZone("GMT")); - - return Calendar.getInstance(); - } - - /** * @return true if the supplied when is today else false */ public static boolean isToday(long when) { @@ -797,127 +649,6 @@ public class DateUtils } /** - * @hide - * @deprecated use {@link android.text.format.Time} - * Return true if this date string is local time - */ - public static boolean isUTC(String s) - { - if (s.length() == 16 && s.charAt(15) == 'Z') { - return true; - } - if (s.length() == 9 && s.charAt(8) == 'Z') { - // XXX not sure if this case possible/valid - return true; - } - return false; - } - - /** - * Return a string containing the date and time in RFC2445 format. - * Ensures that the time is written in UTC. The Calendar class doesn't - * really help out with this, so this is slower than it ought to be. - * - * @param cal the date and time to write - * @hide - * @deprecated use {@link android.text.format.Time} - */ - public static String writeDateTime(Calendar cal) - { - TimeZone tz = TimeZone.getTimeZone("GMT"); - GregorianCalendar c = new GregorianCalendar(tz); - c.setTimeInMillis(cal.getTimeInMillis()); - return writeDateTime(c, true); - } - - /** - * Return a string containing the date and time in RFC2445 format. - * - * @param cal the date and time to write - * @param zulu If the calendar is in UTC, pass true, and a Z will - * be written at the end as per RFC2445. Otherwise, the time is - * considered in localtime. - * @hide - * @deprecated use {@link android.text.format.Time} - */ - public static String writeDateTime(Calendar cal, boolean zulu) - { - StringBuilder sb = new StringBuilder(); - sb.ensureCapacity(16); - if (zulu) { - sb.setLength(16); - sb.setCharAt(15, 'Z'); - } else { - sb.setLength(15); - } - return writeDateTime(cal, sb); - } - - /** - * Return a string containing the date and time in RFC2445 format. - * - * @param cal the date and time to write - * @param sb a StringBuilder to use. It is assumed that setLength - * has already been called on sb to the appropriate length - * which is sb.setLength(zulu ? 16 : 15) - * @hide - * @deprecated use {@link android.text.format.Time} - */ - public static String writeDateTime(Calendar cal, StringBuilder sb) - { - int n; - - n = cal.get(Calendar.YEAR); - sb.setCharAt(3, (char)('0'+n%10)); - n /= 10; - sb.setCharAt(2, (char)('0'+n%10)); - n /= 10; - sb.setCharAt(1, (char)('0'+n%10)); - n /= 10; - sb.setCharAt(0, (char)('0'+n%10)); - - n = cal.get(Calendar.MONTH) + 1; - sb.setCharAt(5, (char)('0'+n%10)); - n /= 10; - sb.setCharAt(4, (char)('0'+n%10)); - - n = cal.get(Calendar.DAY_OF_MONTH); - sb.setCharAt(7, (char)('0'+n%10)); - n /= 10; - sb.setCharAt(6, (char)('0'+n%10)); - - sb.setCharAt(8, 'T'); - - n = cal.get(Calendar.HOUR_OF_DAY); - sb.setCharAt(10, (char)('0'+n%10)); - n /= 10; - sb.setCharAt(9, (char)('0'+n%10)); - - n = cal.get(Calendar.MINUTE); - sb.setCharAt(12, (char)('0'+n%10)); - n /= 10; - sb.setCharAt(11, (char)('0'+n%10)); - - n = cal.get(Calendar.SECOND); - sb.setCharAt(14, (char)('0'+n%10)); - n /= 10; - sb.setCharAt(13, (char)('0'+n%10)); - - return sb.toString(); - } - - /** - * @hide - * @deprecated use {@link android.text.format.Time} - */ - public static void assign(Calendar lval, Calendar rval) - { - // there should be a faster way. - lval.clear(); - lval.setTimeInMillis(rval.getTimeInMillis()); - } - - /** * Formats a date or a time range according to the local conventions. * <p> * Note that this is a convenience method. Using it involves creating an @@ -1149,30 +880,34 @@ public class DateUtils // computation below that'd otherwise be thrown out. boolean isInstant = (startMillis == endMillis); - Time startDate; + Calendar startCalendar, endCalendar; + Time startDate = new Time(); if (timeZone != null) { - startDate = new Time(timeZone); + startCalendar = Calendar.getInstance(TimeZone.getTimeZone(timeZone)); } else if (useUTC) { - startDate = new Time(Time.TIMEZONE_UTC); + startCalendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")); } else { - startDate = new Time(); + startCalendar = Calendar.getInstance(); } - startDate.set(startMillis); + startCalendar.setTimeInMillis(startMillis); + setTimeFromCalendar(startDate, startCalendar); - Time endDate; + Time endDate = new Time(); int dayDistance; if (isInstant) { endDate = startDate; dayDistance = 0; } else { if (timeZone != null) { - endDate = new Time(timeZone); + endCalendar = Calendar.getInstance(TimeZone.getTimeZone(timeZone)); } else if (useUTC) { - endDate = new Time(Time.TIMEZONE_UTC); + endCalendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")); } else { - endDate = new Time(); + endCalendar = Calendar.getInstance(); } - endDate.set(endMillis); + endCalendar.setTimeInMillis(endMillis); + setTimeFromCalendar(endDate, endCalendar); + int startJulianDay = Time.getJulianDay(startMillis, startDate.gmtoff); int endJulianDay = Time.getJulianDay(endMillis, endDate.gmtoff); dayDistance = endJulianDay - startJulianDay; @@ -1515,6 +1250,20 @@ public class DateUtils return formatter.format(fullFormat, timeString, startWeekDayString, dateString); } + private static void setTimeFromCalendar(Time t, Calendar c) { + t.hour = c.get(Calendar.HOUR_OF_DAY); + t.minute = c.get(Calendar.MINUTE); + t.month = c.get(Calendar.MONTH); + t.monthDay = c.get(Calendar.DAY_OF_MONTH); + t.second = c.get(Calendar.SECOND); + t.weekDay = c.get(Calendar.DAY_OF_WEEK) - 1; + t.year = c.get(Calendar.YEAR); + t.yearDay = c.get(Calendar.DAY_OF_YEAR); + t.isDst = (c.get(Calendar.DST_OFFSET) != 0) ? 1 : 0; + t.gmtoff = c.get(Calendar.ZONE_OFFSET) + c.get(Calendar.DST_OFFSET); + t.timezone = c.getTimeZone().getID(); + } + /** * Formats a date or a time according to the local conventions. There are * lots of options that allow the caller to control, for example, if the diff --git a/core/java/android/text/format/Formatter.java b/core/java/android/text/format/Formatter.java index 121c6f2..9c98b98 100644 --- a/core/java/android/text/format/Formatter.java +++ b/core/java/android/text/format/Formatter.java @@ -95,16 +95,12 @@ public final class Formatter { } /** - * Returns a string in the canonical IP format ###.###.###.### from a packed integer containing - * the IP address. The IP address is expected to be in little-endian format (LSB first). That - * is, 0x01020304 will return "4.3.2.1". + * Returns a string in the canonical IPv4 format ###.###.###.### from a packed integer + * containing the IP address. The IPv4 address is expected to be in little-endian + * format (LSB first). That is, 0x01020304 will return "4.3.2.1". * - * @param ipv4Address the IP address as a packed integer with LSB first. - * @return string with canonical IP address format. - * - * @deprecated this method doesn't support IPv6 addresses. Prefer {@link - * java.net.InetAddress#getHostAddress()}, which supports both IPv4 and - * IPv6 addresses. + * @deprecated Use {@link java.net.InetAddress#getHostAddress()}, which supports both IPv4 and + * IPv6 addresses. This method does not support IPv6 addresses. */ @Deprecated public static String formatIpAddress(int ipv4Address) { diff --git a/core/java/android/text/format/Time.java b/core/java/android/text/format/Time.java index 200b57b..5ef86b1 100644 --- a/core/java/android/text/format/Time.java +++ b/core/java/android/text/format/Time.java @@ -411,6 +411,9 @@ public class Time { * @throws android.util.TimeFormatException if s cannot be parsed. */ public boolean parse(String s) { + if (s == null) { + throw new NullPointerException("time string is null"); + } if (nativeParse(s)) { timezone = TIMEZONE_UTC; return true; diff --git a/core/java/android/util/FloatMath.java b/core/java/android/util/FloatMath.java index 9556223..0ffd5bd 100644 --- a/core/java/android/util/FloatMath.java +++ b/core/java/android/util/FloatMath.java @@ -17,12 +17,10 @@ package android.util; /** - * Math routines similar to those found in {@link java.lang.Math}. Performs - * computations on {@code float} values directly without incurring the overhead - * of conversions to and from {@code double}. - * - * <p>On one platform, {@code FloatMath.sqrt(100)} executes in one third of the - * time required by {@code java.lang.Math.sqrt(100)}.</p> + * Math routines similar to those found in {@link java.lang.Math}. On + * versions of Android with a JIT, these are significantly slower than + * the equivalent {@code Math} functions, which should be used in preference + * to these. */ public class FloatMath { diff --git a/core/java/android/util/Patterns.java b/core/java/android/util/Patterns.java index 152827d..9522112 100644 --- a/core/java/android/util/Patterns.java +++ b/core/java/android/util/Patterns.java @@ -169,10 +169,10 @@ public class Patterns { * </ul> */ public static final Pattern PHONE - = Pattern.compile( // sdd = space, dot, or dash - "(\\+[0-9]+[\\- \\.]*)?" // +<digits><sdd>* - + "(\\([0-9]+\\)[\\- \\.]*)?" // (<digits>)<sdd>* - + "([0-9][0-9\\- \\.][0-9\\- \\.]+[0-9])"); // <digit><digit|sdd>+<digit> + = Pattern.compile( // sdd = space, dot, or dash + "(\\+[0-9]+[\\- \\.]*)?" // +<digits><sdd>* + + "(\\([0-9]+\\)[\\- \\.]*)?" // (<digits>)<sdd>* + + "([0-9][0-9\\- \\.]+[0-9])"); // <digit><digit|sdd>+<digit> /** * Convenience method to take all of the non-null matching groups in a diff --git a/core/java/android/util/PropertyValueModel.java b/core/java/android/util/PropertyValueModel.java deleted file mode 100755 index eb9c47d..0000000 --- a/core/java/android/util/PropertyValueModel.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright (C) 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. - */ - -package android.util; - -/** - * A value model for a {@link Property property} of a host object. This class can be used for - * both reflective and non-reflective property implementations. - * - * @param <H> the host type, where the host is the object that holds this property - * @param <T> the value type - * - * @see Property - * @see ValueModel - */ -public class PropertyValueModel<H, T> extends ValueModel<T> { - private final H mHost; - private final Property<H, T> mProperty; - - private PropertyValueModel(H host, Property<H, T> property) { - mProperty = property; - mHost = host; - } - - /** - * Returns the host. - * - * @return the host - */ - public H getHost() { - return mHost; - } - - /** - * Returns the property. - * - * @return the property - */ - public Property<H, T> getProperty() { - return mProperty; - } - - @Override - public Class<T> getType() { - return mProperty.getType(); - } - - @Override - public T get() { - return mProperty.get(mHost); - } - - @Override - public void set(T value) { - mProperty.set(mHost, value); - } - - /** - * Return an appropriate PropertyValueModel for this host and property. - * - * @param host the host - * @param property the property - * @return the value model - */ - public static <H, T> PropertyValueModel<H, T> of(H host, Property<H, T> property) { - return new PropertyValueModel<H, T>(host, property); - } - - /** - * Return a PropertyValueModel for this {@code host} and a - * reflective property, constructed from this {@code propertyType} and {@code propertyName}. - * - * @param host - * @param propertyType the property type - * @param propertyName the property name - * @return a value model with this host and a reflective property with this type and name - * - * @see Property#of - */ - public static <H, T> PropertyValueModel<H, T> of(H host, Class<T> propertyType, - String propertyName) { - return of(host, Property.of((Class<H>) host.getClass(), propertyType, propertyName)); - } - - private static Class getNullaryMethodReturnType(Class c, String name) { - try { - return c.getMethod(name).getReturnType(); - } catch (NoSuchMethodException e) { - return null; - } - } - - private static Class getFieldType(Class c, String name) { - try { - return c.getField(name).getType(); - } catch (NoSuchFieldException e) { - return null; - } - } - - private static String capitalize(String name) { - if (name.isEmpty()) { - return name; - } - return Character.toUpperCase(name.charAt(0)) + name.substring(1); - } - - /** - * Return a PropertyValueModel for this {@code host} and and {@code propertyName}. - * - * @param host the host - * @param propertyName the property name - * @return a value model with this host and a reflective property with this name - */ - public static PropertyValueModel of(Object host, String propertyName) { - Class clazz = host.getClass(); - String suffix = capitalize(propertyName); - Class propertyType = getNullaryMethodReturnType(clazz, "get" + suffix); - if (propertyType == null) { - propertyType = getNullaryMethodReturnType(clazz, "is" + suffix); - } - if (propertyType == null) { - propertyType = getFieldType(clazz, propertyName); - } - if (propertyType == null) { - throw new NoSuchPropertyException(propertyName); - } - return of(host, propertyType, propertyName); - } -} diff --git a/core/java/android/util/ValueModel.java b/core/java/android/util/ValueModel.java deleted file mode 100755 index 4789682..0000000 --- a/core/java/android/util/ValueModel.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (C) 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. - */ - -package android.util; - -/** - * A ValueModel is an abstraction for a 'slot' or place in memory in which a value - * may be stored and retrieved. A common implementation of ValueModel is a regular property of - * an object, whose value may be retrieved by calling the appropriate <em>getter</em> - * method and set by calling the corresponding <em>setter</em> method. - * - * @param <T> the value type - * - * @see PropertyValueModel - */ -public abstract class ValueModel<T> { - /** - * The empty model should be used in place of {@code null} to indicate that a - * model has not been set. The empty model has no value and does nothing when it is set. - */ - public static final ValueModel EMPTY = new ValueModel() { - @Override - public Class getType() { - return Object.class; - } - - @Override - public Object get() { - return null; - } - - @Override - public void set(Object value) { - - } - }; - - protected ValueModel() { - } - - /** - * Returns the type of this property. - * - * @return the property type - */ - public abstract Class<T> getType(); - - /** - * Returns the value of this property. - * - * @return the property value - */ - public abstract T get(); - - /** - * Sets the value of this property. - * - * @param value the new value for this property - */ - public abstract void set(T value); -}
\ No newline at end of file diff --git a/core/java/android/view/InputDevice.java b/core/java/android/view/InputDevice.java index 3bb9c01..3bb9c01 100755..100644 --- a/core/java/android/view/InputDevice.java +++ b/core/java/android/view/InputDevice.java diff --git a/core/java/android/view/InputEvent.java b/core/java/android/view/InputEvent.java index ef810a3..ef810a3 100755..100644 --- a/core/java/android/view/InputEvent.java +++ b/core/java/android/view/InputEvent.java diff --git a/core/java/android/view/KeyEvent.java b/core/java/android/view/KeyEvent.java index c2a3e58..c2a3e58 100755..100644 --- a/core/java/android/view/KeyEvent.java +++ b/core/java/android/view/KeyEvent.java diff --git a/core/java/android/view/OrientationEventListener.java b/core/java/android/view/OrientationEventListener.java index cd48a4f..cd48a4f 100755..100644 --- a/core/java/android/view/OrientationEventListener.java +++ b/core/java/android/view/OrientationEventListener.java diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index f05371a..0d2141f 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -8071,8 +8071,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, // in onHoverEvent. // Note that onGenericMotionEvent will be called by default when // onHoverEvent returns false (refer to dispatchGenericMotionEvent). - dispatchGenericMotionEventInternal(event); - return true; + return dispatchGenericMotionEventInternal(event); } return false; diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 58e6fbe..3b91e00 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -3751,6 +3751,12 @@ public final class ViewRootImpl implements ViewParent, if (mView.dispatchUnhandledMove(focused, direction)) { return EVENT_HANDLED; } + } else { + // find the best view to give focus to in this non-touch-mode with no-focus + View v = focusSearch(null, direction); + if (v != null && v.requestFocus(direction)) { + return EVENT_HANDLED; + } } } } diff --git a/core/java/android/view/ViewStub.java b/core/java/android/view/ViewStub.java index 69a26c2..a5dc3ae 100644 --- a/core/java/android/view/ViewStub.java +++ b/core/java/android/view/ViewStub.java @@ -212,7 +212,8 @@ public final class ViewStub extends View { /** * When visibility is set to {@link #VISIBLE} or {@link #INVISIBLE}, * {@link #inflate()} is invoked and this StubbedView is replaced in its parent - * by the inflated layout resource. + * by the inflated layout resource. After that calls to this function are passed + * through to the inflated view. * * @param visibility One of {@link #VISIBLE}, {@link #INVISIBLE}, or {@link #GONE}. * diff --git a/core/java/android/view/WindowManager.aidl b/core/java/android/view/WindowManager.aidl index 556dc72..556dc72 100755..100644 --- a/core/java/android/view/WindowManager.aidl +++ b/core/java/android/view/WindowManager.aidl diff --git a/core/java/android/view/WindowOrientationListener.java b/core/java/android/view/WindowOrientationListener.java index 4c34dd4..bf77c67 100755..100644 --- a/core/java/android/view/WindowOrientationListener.java +++ b/core/java/android/view/WindowOrientationListener.java @@ -98,6 +98,7 @@ public abstract class WindowOrientationListener { if (LOG) { Log.d(TAG, "WindowOrientationListener enabled"); } + mSensorEventListener.reset(); mSensorManager.registerListener(mSensorEventListener, mSensor, mRate); mEnabled = true; } diff --git a/core/java/android/view/animation/package.html b/core/java/android/view/animation/package.html index 87c99bb..87c99bb 100755..100644 --- a/core/java/android/view/animation/package.html +++ b/core/java/android/view/animation/package.html diff --git a/core/java/android/webkit/BrowserFrame.java b/core/java/android/webkit/BrowserFrame.java index 4dbca23..023dfa8 100644 --- a/core/java/android/webkit/BrowserFrame.java +++ b/core/java/android/webkit/BrowserFrame.java @@ -56,8 +56,8 @@ import java.util.Map; import java.util.Set; import org.apache.harmony.security.provider.cert.X509CertImpl; -import org.apache.harmony.xnet.provider.jsse.OpenSSLDSAPrivateKey; -import org.apache.harmony.xnet.provider.jsse.OpenSSLRSAPrivateKey; +import org.apache.harmony.xnet.provider.jsse.OpenSSLKey; +import org.apache.harmony.xnet.provider.jsse.OpenSSLKeyHolder; class BrowserFrame extends Handler { @@ -1129,13 +1129,10 @@ class BrowserFrame extends Handler { if (table.IsAllowed(hostAndPort)) { // previously allowed PrivateKey pkey = table.PrivateKey(hostAndPort); - if (pkey instanceof OpenSSLRSAPrivateKey) { + if (pkey instanceof OpenSSLKeyHolder) { + OpenSSLKey sslKey = ((OpenSSLKeyHolder) pkey).getOpenSSLKey(); nativeSslClientCert(handle, - ((OpenSSLRSAPrivateKey)pkey).getPkeyContext(), - table.CertificateChain(hostAndPort)); - } else if (pkey instanceof OpenSSLDSAPrivateKey) { - nativeSslClientCert(handle, - ((OpenSSLDSAPrivateKey)pkey).getPkeyContext(), + sslKey.getPkeyContext(), table.CertificateChain(hostAndPort)); } else { nativeSslClientCert(handle, @@ -1327,7 +1324,7 @@ class BrowserFrame extends Handler { private native void nativeSslCertErrorCancel(int handle, int certError); native void nativeSslClientCert(int handle, - int ctx, + long ctx, byte[][] asn1DerEncodedCertificateChain); native void nativeSslClientCert(int handle, diff --git a/core/java/android/webkit/ClientCertRequestHandler.java b/core/java/android/webkit/ClientCertRequestHandler.java index 6570a9b8..f5a60f6 100644 --- a/core/java/android/webkit/ClientCertRequestHandler.java +++ b/core/java/android/webkit/ClientCertRequestHandler.java @@ -21,8 +21,8 @@ import java.security.PrivateKey; import java.security.cert.CertificateEncodingException; import java.security.cert.X509Certificate; import org.apache.harmony.xnet.provider.jsse.NativeCrypto; -import org.apache.harmony.xnet.provider.jsse.OpenSSLDSAPrivateKey; -import org.apache.harmony.xnet.provider.jsse.OpenSSLRSAPrivateKey; +import org.apache.harmony.xnet.provider.jsse.OpenSSLKey; +import org.apache.harmony.xnet.provider.jsse.OpenSSLKeyHolder; /** * ClientCertRequestHandler: class responsible for handling client @@ -56,14 +56,11 @@ public final class ClientCertRequestHandler extends Handler { byte[][] chainBytes = NativeCrypto.encodeCertificates(chain); mTable.Allow(mHostAndPort, privateKey, chainBytes); - if (privateKey instanceof OpenSSLRSAPrivateKey) { - setSslClientCertFromCtx(((OpenSSLRSAPrivateKey)privateKey).getPkeyContext(), - chainBytes); - } else if (privateKey instanceof OpenSSLDSAPrivateKey) { - setSslClientCertFromCtx(((OpenSSLDSAPrivateKey)privateKey).getPkeyContext(), - chainBytes); + if (privateKey instanceof OpenSSLKeyHolder) { + OpenSSLKey pkey = ((OpenSSLKeyHolder) privateKey).getOpenSSLKey(); + setSslClientCertFromCtx(pkey.getPkeyContext(), chainBytes); } else { - setSslClientCertFromPKCS8(privateKey.getEncoded(),chainBytes); + setSslClientCertFromPKCS8(privateKey.getEncoded(), chainBytes); } } catch (CertificateEncodingException e) { post(new Runnable() { @@ -78,7 +75,7 @@ public final class ClientCertRequestHandler extends Handler { /** * Proceed with the specified private key bytes and client certificate chain. */ - private void setSslClientCertFromCtx(final int ctx, final byte[][] chainBytes) { + private void setSslClientCertFromCtx(final long ctx, final byte[][] chainBytes) { post(new Runnable() { public void run() { mBrowserFrame.nativeSslClientCert(mHandle, ctx, chainBytes); diff --git a/core/java/android/webkit/DeviceMotionService.java b/core/java/android/webkit/DeviceMotionService.java index 9121429..9121429 100755..100644 --- a/core/java/android/webkit/DeviceMotionService.java +++ b/core/java/android/webkit/DeviceMotionService.java diff --git a/core/java/android/webkit/DeviceOrientationService.java b/core/java/android/webkit/DeviceOrientationService.java index a4d240d..a4d240d 100755..100644 --- a/core/java/android/webkit/DeviceOrientationService.java +++ b/core/java/android/webkit/DeviceOrientationService.java diff --git a/core/java/android/webkit/FindActionModeCallback.java b/core/java/android/webkit/FindActionModeCallback.java index 1a4ccfa..6a627e1 100644 --- a/core/java/android/webkit/FindActionModeCallback.java +++ b/core/java/android/webkit/FindActionModeCallback.java @@ -152,7 +152,7 @@ class FindActionModeCallback implements ActionMode.Callback, TextWatcher, mActiveMatchIndex = matchIndex; updateMatchesString(); } else { - mMatches.setVisibility(View.INVISIBLE); + mMatches.setVisibility(View.GONE); mNumberOfMatches = 0; } } diff --git a/core/java/android/webkit/GeolocationPermissions.java b/core/java/android/webkit/GeolocationPermissions.java index 9c0f754..9c0f754 100755..100644 --- a/core/java/android/webkit/GeolocationPermissions.java +++ b/core/java/android/webkit/GeolocationPermissions.java diff --git a/core/java/android/webkit/GeolocationPermissionsClassic.java b/core/java/android/webkit/GeolocationPermissionsClassic.java index 8a9df39..8a9df39 100755..100644 --- a/core/java/android/webkit/GeolocationPermissionsClassic.java +++ b/core/java/android/webkit/GeolocationPermissionsClassic.java diff --git a/core/java/android/webkit/GeolocationService.java b/core/java/android/webkit/GeolocationService.java index 225053b..225053b 100755..100644 --- a/core/java/android/webkit/GeolocationService.java +++ b/core/java/android/webkit/GeolocationService.java diff --git a/core/java/android/webkit/HTML5Audio.java b/core/java/android/webkit/HTML5Audio.java index fc5df2d..684ec07 100644 --- a/core/java/android/webkit/HTML5Audio.java +++ b/core/java/android/webkit/HTML5Audio.java @@ -54,14 +54,15 @@ class HTML5Audio extends Handler // The private status of the view that created this player private IsPrivateBrowsingEnabledGetter mIsPrivateBrowsingEnabledGetter; - private static int IDLE = 0; - private static int INITIALIZED = 1; - private static int PREPARED = 2; - private static int STARTED = 4; - private static int COMPLETE = 5; - private static int PAUSED = 6; - private static int STOPPED = -2; - private static int ERROR = -1; + private static int IDLE = 0; + private static int INITIALIZED = 1; + private static int PREPARED = 2; + private static int STARTED = 4; + private static int COMPLETE = 5; + private static int PAUSED = 6; + private static int PAUSED_TRANSITORILY = 7; + private static int STOPPED = -2; + private static int ERROR = -1; private int mState = IDLE; @@ -247,7 +248,7 @@ class HTML5Audio extends Handler // resume playback if (mMediaPlayer == null) { resetMediaPlayer(); - } else if (mState != ERROR && !mMediaPlayer.isPlaying()) { + } else if (mState == PAUSED_TRANSITORILY && !mMediaPlayer.isPlaying()) { mMediaPlayer.start(); mState = STARTED; } @@ -265,7 +266,9 @@ class HTML5Audio extends Handler case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK: // Lost focus for a short time, but we have to stop // playback. - if (mState != ERROR && mMediaPlayer.isPlaying()) pause(); + if (mState != ERROR && mMediaPlayer.isPlaying()) { + pause(PAUSED_TRANSITORILY); + } break; } } @@ -298,12 +301,16 @@ class HTML5Audio extends Handler } private void pause() { + pause(PAUSED); + } + + private void pause(int state) { if (mState == STARTED) { if (mTimer != null) { mTimer.purge(); } mMediaPlayer.pause(); - mState = PAUSED; + mState = state; } } diff --git a/core/java/android/webkit/WebCoreThreadWatchdog.java b/core/java/android/webkit/WebCoreThreadWatchdog.java index a22e6e8..c27bb5f 100644 --- a/core/java/android/webkit/WebCoreThreadWatchdog.java +++ b/core/java/android/webkit/WebCoreThreadWatchdog.java @@ -270,7 +270,7 @@ class WebCoreThreadWatchdog implements Runnable { SUBSEQUENT_TIMEOUT_PERIOD); } }) - .setIcon(android.R.drawable.ic_dialog_alert) + .setIconAttribute(android.R.attr.alertDialogIcon) .show(); } } diff --git a/core/java/android/webkit/WebViewClassic.java b/core/java/android/webkit/WebViewClassic.java index ae56e6b..4db9f6c 100644 --- a/core/java/android/webkit/WebViewClassic.java +++ b/core/java/android/webkit/WebViewClassic.java @@ -1258,6 +1258,40 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc mAutoFillData = new WebViewCore.AutoFillData(); mEditTextScroller = new Scroller(context); + + // Calculate channel distance + calculateChannelDistance(context); + } + + /** + * Calculate sChannelDistance based on the screen information. + * @param context A Context object used to access application assets. + */ + private void calculateChannelDistance(Context context) { + // The channel distance is adjusted for density and screen size + final DisplayMetrics metrics = context.getResources().getDisplayMetrics(); + final double screenSize = Math.hypot((double)(metrics.widthPixels/metrics.densityDpi), + (double)(metrics.heightPixels/metrics.densityDpi)); + if (screenSize < 3.0) { + sChannelDistance = 16; + } else if (screenSize < 5.0) { + sChannelDistance = 22; + } else if (screenSize < 7.0) { + sChannelDistance = 28; + } else { + sChannelDistance = 34; + } + sChannelDistance = (int)(sChannelDistance * metrics.density); + if (sChannelDistance < 16) sChannelDistance = 16; + + if (DebugFlags.WEB_VIEW) { + Log.v(LOGTAG, "sChannelDistance : " + sChannelDistance + + ", density : " + metrics.density + + ", screenSize : " + screenSize + + ", metrics.heightPixels : " + metrics.heightPixels + + ", metrics.widthPixels : " + metrics.widthPixels + + ", metrics.densityDpi : " + metrics.densityDpi); + } } // WebViewProvider bindings @@ -5382,7 +5416,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc ClipData clipData = cm.getPrimaryClip(); if (clipData != null) { ClipData.Item clipItem = clipData.getItemAt(0); - CharSequence pasteText = clipItem.getText(); + CharSequence pasteText = clipItem.coerceToText(mContext); if (mInputConnection != null) { mInputConnection.replaceSelection(pasteText); } @@ -5715,32 +5749,13 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc } return mWebViewPrivate.super_dispatchKeyEvent(event); } - - /* - * Here is the snap align logic: - * 1. If it starts nearly horizontally or vertically, snap align; - * 2. If there is a dramitic direction change, let it go; - * - * Adjustable parameters. Angle is the radians on a unit circle, limited - * to quadrant 1. Values range from 0f (horizontal) to PI/2 (vertical) - */ - private static final float HSLOPE_TO_START_SNAP = .25f; - private static final float HSLOPE_TO_BREAK_SNAP = .4f; - private static final float VSLOPE_TO_START_SNAP = 1.25f; - private static final float VSLOPE_TO_BREAK_SNAP = .95f; - /* - * These values are used to influence the average angle when entering - * snap mode. If is is the first movement entering snap, we set the average - * to the appropriate ideal. If the user is entering into snap after the - * first movement, then we average the average angle with these values. - */ - private static final float ANGLE_VERT = 2f; - private static final float ANGLE_HORIZ = 0f; - /* - * The modified moving average weight. - * Formula: MAV[t]=MAV[t-1] + (P[t]-MAV[t-1])/n - */ - private static final float MMA_WEIGHT_N = 5; + + private static final int SNAP_BOUND = 16; + private static int sChannelDistance = 16; + private int mFirstTouchX = -1; // the first touched point + private int mFirstTouchY = -1; + private int mDistanceX = 0; + private int mDistanceY = 0; private boolean inFullScreenMode() { return mFullScreenHolder != null; @@ -5830,12 +5845,6 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc } } - private float calculateDragAngle(int dx, int dy) { - dx = Math.abs(dx); - dy = Math.abs(dy); - return (float) Math.atan2(dy, dx); - } - /* * Common code for single touch and multi-touch. * (x, y) denotes current focus point, which is the touch point for single touch @@ -5861,6 +5870,12 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc switch (action) { case MotionEvent.ACTION_DOWN: { mConfirmMove = false; + + // Channel Scrolling + mFirstTouchX = x; + mFirstTouchY = y; + mDistanceX = mDistanceY = 0; + if (!mEditTextScroller.isFinished()) { mEditTextScroller.abortAnimation(); } @@ -5998,20 +6013,16 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc break; } - // Only lock dragging to one axis if we don't have a scale in progress. - // Scaling implies free-roaming movement. Note this is only ever a question - // if mZoomManager.supportsPanDuringZoom() is true. - mAverageAngle = calculateDragAngle(deltaX, deltaY); - if (detector == null || !detector.isInProgress()) { - // if it starts nearly horizontal or vertical, enforce it - if (mAverageAngle < HSLOPE_TO_START_SNAP) { - mSnapScrollMode = SNAP_X; - mSnapPositive = deltaX > 0; - mAverageAngle = ANGLE_HORIZ; - } else if (mAverageAngle > VSLOPE_TO_START_SNAP) { + if ((detector == null || !detector.isInProgress()) + && SNAP_NONE == mSnapScrollMode) { + int ax = Math.abs(x - mFirstTouchX); + int ay = Math.abs(y - mFirstTouchY); + if (ax < SNAP_BOUND && ay < SNAP_BOUND) { + break; + } else if (ax < SNAP_BOUND) { mSnapScrollMode = SNAP_Y; - mSnapPositive = deltaY > 0; - mAverageAngle = ANGLE_VERT; + } else if (ay < SNAP_BOUND) { + mSnapScrollMode = SNAP_X; } } @@ -6030,31 +6041,21 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc if (deltaX == 0 && deltaY == 0) { keepScrollBarsVisible = true; } else { - mAverageAngle += - (calculateDragAngle(deltaX, deltaY) - mAverageAngle) - / MMA_WEIGHT_N; - if (mSnapScrollMode != SNAP_NONE) { - if (mSnapScrollMode == SNAP_Y) { - // radical change means getting out of snap mode - if (mAverageAngle < VSLOPE_TO_BREAK_SNAP) { - mSnapScrollMode = SNAP_NONE; - } - } + if (mSnapScrollMode == SNAP_X || mSnapScrollMode == SNAP_Y) { + mDistanceX += Math.abs(deltaX); + mDistanceY += Math.abs(deltaY); if (mSnapScrollMode == SNAP_X) { - // radical change means getting out of snap mode - if (mAverageAngle > HSLOPE_TO_BREAK_SNAP) { + if (mDistanceY > sChannelDistance) { mSnapScrollMode = SNAP_NONE; - } + } else if (mDistanceX > sChannelDistance) { + mDistanceX = mDistanceY = 0; } } else { - if (mAverageAngle < HSLOPE_TO_START_SNAP) { - mSnapScrollMode = SNAP_X; - mSnapPositive = deltaX > 0; - mAverageAngle = (mAverageAngle + ANGLE_HORIZ) / 2; - } else if (mAverageAngle > VSLOPE_TO_START_SNAP) { - mSnapScrollMode = SNAP_Y; - mSnapPositive = deltaY > 0; - mAverageAngle = (mAverageAngle + ANGLE_VERT) / 2; + if (mDistanceX > sChannelDistance) { + mSnapScrollMode = SNAP_NONE; + } else if (mDistanceY > sChannelDistance) { + mDistanceX = mDistanceY = 0; + } } } if (mSnapScrollMode != SNAP_NONE) { @@ -6089,6 +6090,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc break; } case MotionEvent.ACTION_UP: { + mFirstTouchX = mFirstTouchY = -1; if (mIsEditingText && mSelectionStarted) { endScrollEdit(); mPrivateHandler.sendEmptyMessageDelayed(SCROLL_HANDLE_INTO_VIEW, @@ -8366,8 +8368,10 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc mListBoxDialog.setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { + if (mWebViewCore != null) { mWebViewCore.sendMessage( EventHub.SINGLE_LISTBOX_CHOICE, -2, 0); + } mListBoxDialog = null; } }); diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java index 3fb3ec6..c35b768 100644 --- a/core/java/android/webkit/WebViewCore.java +++ b/core/java/android/webkit/WebViewCore.java @@ -1278,6 +1278,7 @@ public final class WebViewCore { mBrowserFrame = null; mSettings.onDestroyed(); mNativeClass = 0; + WebCoreThreadWatchdog.unregisterWebView(mWebViewClassic); mWebViewClassic = null; } break; @@ -1982,7 +1983,6 @@ public final class WebViewCore { mEventHub.sendMessageAtFrontOfQueue( Message.obtain(null, EventHub.DESTROY)); mEventHub.blockMessages(); - WebCoreThreadWatchdog.unregisterWebView(mWebViewClassic); } } diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index 33a8531..57bf0d3 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -2637,7 +2637,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te if (mTouchModeReset != null) { removeCallbacks(mTouchModeReset); - mTouchModeReset = null; + mTouchModeReset.run(); } mIsAttached = false; } @@ -3416,6 +3416,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te mTouchModeReset = new Runnable() { @Override public void run() { + mTouchModeReset = null; mTouchMode = TOUCH_MODE_REST; child.setPressed(false); setPressed(false); diff --git a/core/java/android/widget/AppSecurityPermissions.java b/core/java/android/widget/AppSecurityPermissions.java index 06dadb0..06dadb0 100755..100644 --- a/core/java/android/widget/AppSecurityPermissions.java +++ b/core/java/android/widget/AppSecurityPermissions.java diff --git a/core/java/android/widget/CheckBox.java b/core/java/android/widget/CheckBox.java index 41ab5f2..f1804f8 100644 --- a/core/java/android/widget/CheckBox.java +++ b/core/java/android/widget/CheckBox.java @@ -20,7 +20,6 @@ import android.content.Context; import android.util.AttributeSet; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityNodeInfo; -import android.util.ValueModel; /** @@ -56,9 +55,7 @@ import android.util.ValueModel; * {@link android.R.styleable#View View Attributes} * </p> */ -public class CheckBox extends CompoundButton implements ValueEditor<Boolean> { - private ValueModel<Boolean> mValueModel = ValueModel.EMPTY; - +public class CheckBox extends CompoundButton { public CheckBox(Context context) { this(context, null); } @@ -82,22 +79,4 @@ public class CheckBox extends CompoundButton implements ValueEditor<Boolean> { super.onInitializeAccessibilityNodeInfo(info); info.setClassName(CheckBox.class.getName()); } - - @Override - public ValueModel<Boolean> getValueModel() { - return mValueModel; - } - - @Override - public void setValueModel(ValueModel<Boolean> valueModel) { - mValueModel = valueModel; - setChecked(mValueModel.get()); - } - - @Override - public boolean performClick() { - boolean handled = super.performClick(); - mValueModel.set(isChecked()); - return handled; - } } diff --git a/core/java/android/widget/DateTimeView.java b/core/java/android/widget/DateTimeView.java index 6e6e4af..af6bbcb 100644 --- a/core/java/android/widget/DateTimeView.java +++ b/core/java/android/widget/DateTimeView.java @@ -189,15 +189,7 @@ public class DateTimeView extends TextView { } private DateFormat getTimeFormat() { - int res; - Context context = getContext(); - if (android.text.format.DateFormat.is24HourFormat(context)) { - res = R.string.twenty_four_hour_time_format; - } else { - res = R.string.twelve_hour_time_format; - } - String format = context.getString(res); - return new SimpleDateFormat(format); + return android.text.format.DateFormat.getTimeFormat(getContext()); } private DateFormat getDateFormat() { diff --git a/core/java/android/widget/DigitalClock.java b/core/java/android/widget/DigitalClock.java index c6b6dd6..b6c1e5b 100644 --- a/core/java/android/widget/DigitalClock.java +++ b/core/java/android/widget/DigitalClock.java @@ -39,8 +39,6 @@ public class DigitalClock extends TextView { // proportional fonts don't shake rendering Calendar mCalendar; - private final static String m12 = "h:mm:ss aa"; - private final static String m24 = "k:mm:ss"; @SuppressWarnings("FieldCanBeLocal") // We must keep a reference to this observer private FormatChangeObserver mFormatChangeObserver; @@ -102,19 +100,8 @@ public class DigitalClock extends TextView { mTickerStopped = true; } - /** - * Pulls 12/24 mode from system settings - */ - private boolean get24HourMode() { - return android.text.format.DateFormat.is24HourFormat(getContext()); - } - private void setFormat() { - if (get24HourMode()) { - mFormat = m24; - } else { - mFormat = m12; - } + mFormat = DateFormat.getTimeFormatString(getContext()); } private class FormatChangeObserver extends ContentObserver { diff --git a/core/java/android/widget/EditText.java b/core/java/android/widget/EditText.java index ec81214..57e51c2 100644 --- a/core/java/android/widget/EditText.java +++ b/core/java/android/widget/EditText.java @@ -17,7 +17,6 @@ package android.widget; import android.content.Context; -import android.graphics.Rect; import android.text.Editable; import android.text.Selection; import android.text.Spannable; @@ -25,7 +24,6 @@ import android.text.TextUtils; import android.text.method.ArrowKeyMovementMethod; import android.text.method.MovementMethod; import android.util.AttributeSet; -import android.util.ValueModel; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityNodeInfo; @@ -49,9 +47,7 @@ import android.view.accessibility.AccessibilityNodeInfo; * {@link android.R.styleable#TextView TextView Attributes}, * {@link android.R.styleable#View View Attributes} */ -public class EditText extends TextView implements ValueEditor<CharSequence> { - private ValueModel<CharSequence> mValueModel = ValueModel.EMPTY; - +public class EditText extends TextView { public EditText(Context context) { this(context, null); } @@ -132,21 +128,4 @@ public class EditText extends TextView implements ValueEditor<CharSequence> { super.onInitializeAccessibilityNodeInfo(info); info.setClassName(EditText.class.getName()); } - - @Override - public ValueModel<CharSequence> getValueModel() { - return mValueModel; - } - - @Override - public void setValueModel(ValueModel<CharSequence> valueModel) { - mValueModel = valueModel; - setText(mValueModel.get()); - } - - @Override - void sendAfterTextChanged(Editable text) { - super.sendAfterTextChanged(text); - mValueModel.set(text); - } } diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java index 30d022c..8892316 100644 --- a/core/java/android/widget/Editor.java +++ b/core/java/android/widget/Editor.java @@ -2696,23 +2696,14 @@ public class Editor { TypedArray styledAttributes = mTextView.getContext().obtainStyledAttributes( com.android.internal.R.styleable.SelectionModeDrawables); - boolean allowText = mTextView.getContext().getResources().getBoolean( - com.android.internal.R.bool.config_allowActionMenuItemTextWithIcon); - mode.setTitle(mTextView.getContext().getString( com.android.internal.R.string.textSelectionCABTitle)); mode.setSubtitle(null); mode.setTitleOptionalHint(true); - int selectAllIconId = 0; // No icon by default - if (!allowText) { - // Provide an icon, text will not be displayed on smaller screens. - selectAllIconId = styledAttributes.getResourceId( - R.styleable.SelectionModeDrawables_actionModeSelectAllDrawable, 0); - } - menu.add(0, TextView.ID_SELECT_ALL, 0, com.android.internal.R.string.selectAll). - setIcon(selectAllIconId). + setIcon(styledAttributes.getResourceId( + R.styleable.SelectionModeDrawables_actionModeSelectAllDrawable, 0)). setAlphabeticShortcut('a'). setShowAsAction( MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT); diff --git a/core/java/android/widget/HeaderViewListAdapter.java b/core/java/android/widget/HeaderViewListAdapter.java index e2a269e..0685e61 100644 --- a/core/java/android/widget/HeaderViewListAdapter.java +++ b/core/java/android/widget/HeaderViewListAdapter.java @@ -79,7 +79,8 @@ public class HeaderViewListAdapter implements WrapperListAdapter, Filterable { } public boolean isEmpty() { - return mAdapter == null || mAdapter.isEmpty(); + return (mAdapter == null || mAdapter.isEmpty()) + && getFootersCount() + getHeadersCount() == 0; } private boolean areAllListInfosSelectable(ArrayList<ListView.FixedViewInfo> infos) { diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java index 03507b5..4436fbb 100644 --- a/core/java/android/widget/ListView.java +++ b/core/java/android/widget/ListView.java @@ -2429,7 +2429,9 @@ public class ListView extends AbsListView { View selectedView = getSelectedView(); int selectedPos = mSelectedPosition; - int nextSelectedPosition = lookForSelectablePositionOnScreen(direction); + int nextSelectedPosition = (direction == View.FOCUS_DOWN) ? + lookForSelectablePosition(selectedPos + 1, true) : + lookForSelectablePosition(selectedPos - 1, false); int amountToScroll = amountToScroll(direction, nextSelectedPosition); // if we are moving focus, we may OVERRIDE the default behavior @@ -2641,14 +2643,18 @@ public class ListView extends AbsListView { final int listBottom = getHeight() - mListPadding.bottom; final int listTop = mListPadding.top; - final int numChildren = getChildCount(); + int numChildren = getChildCount(); if (direction == View.FOCUS_DOWN) { int indexToMakeVisible = numChildren - 1; if (nextSelectedPosition != INVALID_POSITION) { indexToMakeVisible = nextSelectedPosition - mFirstPosition; } - + while (numChildren <= indexToMakeVisible) { + // Child to view is not attached yet. + addViewBelow(getChildAt(numChildren - 1), mFirstPosition + numChildren - 1); + numChildren++; + } final int positionToMakeVisible = mFirstPosition + indexToMakeVisible; final View viewToMakeVisible = getChildAt(indexToMakeVisible); @@ -2682,6 +2688,12 @@ public class ListView extends AbsListView { if (nextSelectedPosition != INVALID_POSITION) { indexToMakeVisible = nextSelectedPosition - mFirstPosition; } + while (indexToMakeVisible < 0) { + // Child to view is not attached yet. + addViewAbove(getChildAt(0), mFirstPosition); + mFirstPosition--; + indexToMakeVisible = nextSelectedPosition - mFirstPosition; + } final int positionToMakeVisible = mFirstPosition + indexToMakeVisible; final View viewToMakeVisible = getChildAt(indexToMakeVisible); int goalTop = listTop; @@ -2981,11 +2993,9 @@ public class ListView extends AbsListView { while (first.getBottom() < listTop) { AbsListView.LayoutParams layoutParams = (LayoutParams) first.getLayoutParams(); if (recycleBin.shouldRecycleViewType(layoutParams.viewType)) { - detachViewFromParent(first); recycleBin.addScrapView(first, mFirstPosition); - } else { - removeViewInLayout(first); } + detachViewFromParent(first); first = getChildAt(0); mFirstPosition++; } @@ -3012,11 +3022,9 @@ public class ListView extends AbsListView { while (last.getTop() > listBottom) { AbsListView.LayoutParams layoutParams = (LayoutParams) last.getLayoutParams(); if (recycleBin.shouldRecycleViewType(layoutParams.viewType)) { - detachViewFromParent(last); recycleBin.addScrapView(last, mFirstPosition+lastIndex); - } else { - removeViewInLayout(last); } + detachViewFromParent(last); last = getChildAt(--lastIndex); } } diff --git a/core/java/android/widget/NumberPicker.java b/core/java/android/widget/NumberPicker.java index 74ded18..2ac5a12 100644 --- a/core/java/android/widget/NumberPicker.java +++ b/core/java/android/widget/NumberPicker.java @@ -1969,8 +1969,10 @@ public class NumberPicker extends LinearLayout { * Ensure the user can't type in a value greater than the max * allowed. We have to allow less than min as the user might * want to delete some numbers and then type a new number. + * And prevent multiple-"0" that exceeds the length of upper + * bound number. */ - if (val > mMaxValue) { + if (val > mMaxValue || result.length() > String.valueOf(mMaxValue).length()) { return ""; } else { return filtered; diff --git a/core/java/android/widget/SeekBar.java b/core/java/android/widget/SeekBar.java index a6486a8..2737f94 100644 --- a/core/java/android/widget/SeekBar.java +++ b/core/java/android/widget/SeekBar.java @@ -18,7 +18,6 @@ package android.widget; import android.content.Context; import android.util.AttributeSet; -import android.util.ValueModel; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityNodeInfo; @@ -34,7 +33,7 @@ import android.view.accessibility.AccessibilityNodeInfo; * * @attr ref android.R.styleable#SeekBar_thumb */ -public class SeekBar extends AbsSeekBar implements ValueEditor<Integer> { +public class SeekBar extends AbsSeekBar { /** * A callback that notifies clients when the progress level has been @@ -70,9 +69,8 @@ public class SeekBar extends AbsSeekBar implements ValueEditor<Integer> { void onStopTrackingTouch(SeekBar seekBar); } - private ValueModel<Integer> mValueModel = ValueModel.EMPTY; private OnSeekBarChangeListener mOnSeekBarChangeListener; - + public SeekBar(Context context) { this(context, null); } @@ -91,23 +89,9 @@ public class SeekBar extends AbsSeekBar implements ValueEditor<Integer> { if (mOnSeekBarChangeListener != null) { mOnSeekBarChangeListener.onProgressChanged(this, getProgress(), fromUser); - if (fromUser) { - mValueModel.set(getProgress()); - } } } - @Override - public ValueModel<Integer> getValueModel() { - return mValueModel; - } - - @Override - public void setValueModel(ValueModel<Integer> valueModel) { - mValueModel = valueModel; - setProgress(mValueModel.get()); - } - /** * Sets a listener to receive notifications of changes to the SeekBar's progress level. Also * provides notifications of when the user starts and stops a touch gesture within the SeekBar. diff --git a/core/java/android/widget/TextClock.java b/core/java/android/widget/TextClock.java index 290d9b5..2f08253 100644 --- a/core/java/android/widget/TextClock.java +++ b/core/java/android/widget/TextClock.java @@ -36,21 +36,24 @@ import com.android.internal.R; import java.util.Calendar; import java.util.TimeZone; +import libcore.icu.LocaleData; + import static android.view.ViewDebug.ExportedProperty; import static android.widget.RemoteViews.*; /** * <p><code>TextClock</code> can display the current date and/or time as * a formatted string.</p> - * + * * <p>This view honors the 24-hour format system setting. As such, it is * possible and recommended to provide two different formatting patterns: * one to display the date/time in 24-hour mode and one to display the - * date/time in 12-hour mode.</p> - * + * date/time in 12-hour mode. Most callers will want to use the defaults, + * though, which will be appropriate for the user's locale.</p> + * * <p>It is possible to determine whether the system is currently in * 24-hour mode by calling {@link #is24HourModeEnabled()}.</p> - * + * * <p>The rules used by this widget to decide how to format the date and * time are the following:</p> * <ul> @@ -58,22 +61,24 @@ import static android.widget.RemoteViews.*; * <ul> * <li>Use the value returned by {@link #getFormat24Hour()} when non-null</li> * <li>Otherwise, use the value returned by {@link #getFormat12Hour()} when non-null</li> - * <li>Otherwise, use {@link #DEFAULT_FORMAT_24_HOUR}</li> + * <li>Otherwise, use a default value appropriate for the user's locale, such as {@code h:mm a}</li> * </ul> * </li> * <li>In 12-hour mode: * <ul> * <li>Use the value returned by {@link #getFormat12Hour()} when non-null</li> * <li>Otherwise, use the value returned by {@link #getFormat24Hour()} when non-null</li> - * <li>Otherwise, use {@link #DEFAULT_FORMAT_12_HOUR}</li> + * <li>Otherwise, use a default value appropriate for the user's locale, such as {@code HH:mm}</li> * </ul> * </li> * </ul> - * + * * <p>The {@link CharSequence} instances used as formatting patterns when calling either * {@link #setFormat24Hour(CharSequence)} or {@link #setFormat12Hour(CharSequence)} can - * contain styling information. To do so, use a {@link android.text.Spanned} object.</p> - * + * contain styling information. To do so, use a {@link android.text.Spanned} object. + * Note that if you customize these strings, it is your responsibility to supply strings + * appropriate for formatting dates and/or times in the user's locale.</p> + * * @attr ref android.R.styleable#TextClock_format12Hour * @attr ref android.R.styleable#TextClock_format24Hour * @attr ref android.R.styleable#TextClock_timeZone @@ -81,32 +86,34 @@ import static android.widget.RemoteViews.*; @RemoteView public class TextClock extends TextView { /** - * The default formatting pattern in 12-hour mode. This pattenr is used + * The default formatting pattern in 12-hour mode. This pattern is used * if {@link #setFormat12Hour(CharSequence)} is called with a null pattern * or if no pattern was specified when creating an instance of this class. - * + * * This default pattern shows only the time, hours and minutes, and an am/pm * indicator. * * @see #setFormat12Hour(CharSequence) * @see #getFormat12Hour() + * @deprecated Let the system use locale-appropriate defaults instead. */ - public static final CharSequence DEFAULT_FORMAT_12_HOUR = "h:mm aa"; + public static final CharSequence DEFAULT_FORMAT_12_HOUR = "h:mm a"; /** - * The default formatting pattern in 24-hour mode. This pattenr is used + * The default formatting pattern in 24-hour mode. This pattern is used * if {@link #setFormat24Hour(CharSequence)} is called with a null pattern * or if no pattern was specified when creating an instance of this class. * * This default pattern shows only the time, hours and minutes. - * - * @see #setFormat24Hour(CharSequence) - * @see #getFormat24Hour() + * + * @see #setFormat24Hour(CharSequence) + * @see #getFormat24Hour() + * @deprecated Let the system use locale-appropriate defaults instead. */ - public static final CharSequence DEFAULT_FORMAT_24_HOUR = "k:mm"; + public static final CharSequence DEFAULT_FORMAT_24_HOUR = "H:mm"; - private CharSequence mFormat12 = DEFAULT_FORMAT_12_HOUR; - private CharSequence mFormat24 = DEFAULT_FORMAT_24_HOUR; + private CharSequence mFormat12; + private CharSequence mFormat24; @ExportedProperty private CharSequence mFormat; @@ -158,7 +165,7 @@ public class TextClock extends TextView { * Creates a new clock using the default patterns * {@link #DEFAULT_FORMAT_24_HOUR} and {@link #DEFAULT_FORMAT_12_HOUR} * respectively for the 24-hour and 12-hour modes. - * + * * @param context The Context the view is running in, through which it can * access the current theme, resources, etc. */ @@ -171,7 +178,7 @@ public class TextClock extends TextView { /** * Creates a new clock inflated from XML. This object's properties are * intialized from the attributes specified in XML. - * + * * This constructor uses a default style of 0, so the only attribute values * applied are those in the Context's Theme and the given AttributeSet. * @@ -201,14 +208,8 @@ public class TextClock extends TextView { TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TextClock, defStyle, 0); try { - CharSequence format; - - format = a.getText(R.styleable.TextClock_format12Hour); - mFormat12 = format == null ? DEFAULT_FORMAT_12_HOUR : format; - - format = a.getText(R.styleable.TextClock_format24Hour); - mFormat24 = format == null ? DEFAULT_FORMAT_24_HOUR : format; - + mFormat12 = a.getText(R.styleable.TextClock_format12Hour); + mFormat24 = a.getText(R.styleable.TextClock_format24Hour); mTimeZone = a.getString(R.styleable.TextClock_timeZone); } finally { a.recycle(); @@ -218,6 +219,16 @@ public class TextClock extends TextView { } private void init() { + if (mFormat12 == null || mFormat24 == null) { + LocaleData ld = LocaleData.get(getContext().getResources().getConfiguration().locale); + if (mFormat12 == null) { + mFormat12 = ld.timeFormat12; + } + if (mFormat24 == null) { + mFormat24 = ld.timeFormat24; + } + } + createTime(mTimeZone); // Wait until onAttachedToWindow() to handle the ticker chooseFormat(false); @@ -235,11 +246,11 @@ public class TextClock extends TextView { * Returns the formatting pattern used to display the date and/or time * in 12-hour mode. The formatting pattern syntax is described in * {@link DateFormat}. - * + * * @return A {@link CharSequence} or null. - * - * @see #setFormat12Hour(CharSequence) - * @see #is24HourModeEnabled() + * + * @see #setFormat12Hour(CharSequence) + * @see #is24HourModeEnabled() */ @ExportedProperty public CharSequence getFormat12Hour() { @@ -257,12 +268,12 @@ public class TextClock extends TextView { * {@link #DEFAULT_FORMAT_12_HOUR} will be used instead. * * @param format A date/time formatting pattern as described in {@link DateFormat} - * + * * @see #getFormat12Hour() * @see #is24HourModeEnabled() * @see #DEFAULT_FORMAT_12_HOUR * @see DateFormat - * + * * @attr ref android.R.styleable#TextClock_format12Hour */ @RemotableViewMethod @@ -292,7 +303,7 @@ public class TextClock extends TextView { * Specifies the formatting pattern used to display the date and/or time * in 24-hour mode. The formatting pattern syntax is described in * {@link DateFormat}. - * + * * If this pattern is set to null, {@link #getFormat12Hour()} will be used * even in 24-hour mode. If both 24-hour and 12-hour formatting patterns * are set to null, {@link #DEFAULT_FORMAT_24_HOUR} and @@ -301,7 +312,7 @@ public class TextClock extends TextView { * @param format A date/time formatting pattern as described in {@link DateFormat} * * @see #getFormat24Hour() - * @see #is24HourModeEnabled() + * @see #is24HourModeEnabled() * @see #DEFAULT_FORMAT_24_HOUR * @see DateFormat * @@ -317,22 +328,22 @@ public class TextClock extends TextView { /** * Indicates whether the system is currently using the 24-hour mode. - * + * * When the system is in 24-hour mode, this view will use the pattern * returned by {@link #getFormat24Hour()}. In 12-hour mode, the pattern * returned by {@link #getFormat12Hour()} is used instead. - * + * * If either one of the formats is null, the other format is used. If * both formats are null, the default values {@link #DEFAULT_FORMAT_12_HOUR} * and {@link #DEFAULT_FORMAT_24_HOUR} are used instead. - * + * * @return true if time should be displayed in 24-hour format, false if it * should be displayed in 12-hour format. - * + * * @see #setFormat12Hour(CharSequence) - * @see #getFormat12Hour() + * @see #getFormat12Hour() * @see #setFormat24Hour(CharSequence) - * @see #getFormat24Hour() + * @see #getFormat24Hour() */ public boolean is24HourModeEnabled() { return DateFormat.is24HourFormat(getContext()); @@ -340,13 +351,13 @@ public class TextClock extends TextView { /** * Indicates which time zone is currently used by this view. - * + * * @return The ID of the current time zone or null if the default time zone, * as set by the user, must be used * * @see TimeZone * @see java.util.TimeZone#getAvailableIDs() - * @see #setTimeZone(String) + * @see #setTimeZone(String) */ public String getTimeZone() { return mTimeZone; @@ -378,7 +389,7 @@ public class TextClock extends TextView { /** * Selects either one of {@link #getFormat12Hour()} or {@link #getFormat24Hour()} * depending on whether the user has selected 24-hour format. - * + * * Calling this method does not schedule or unschedule the time ticker. */ private void chooseFormat() { @@ -388,17 +399,19 @@ public class TextClock extends TextView { /** * Selects either one of {@link #getFormat12Hour()} or {@link #getFormat24Hour()} * depending on whether the user has selected 24-hour format. - * + * * @param handleTicker true if calling this method should schedule/unschedule the * time ticker, false otherwise */ private void chooseFormat(boolean handleTicker) { final boolean format24Requested = is24HourModeEnabled(); + LocaleData ld = LocaleData.get(getContext().getResources().getConfiguration().locale); + if (format24Requested) { - mFormat = abc(mFormat24, mFormat12, DEFAULT_FORMAT_24_HOUR); + mFormat = abc(mFormat24, mFormat12, ld.timeFormat24); } else { - mFormat = abc(mFormat12, mFormat24, DEFAULT_FORMAT_12_HOUR); + mFormat = abc(mFormat12, mFormat24, ld.timeFormat12); } boolean hadSeconds = mHasSeconds; diff --git a/core/java/android/widget/ValueEditor.java b/core/java/android/widget/ValueEditor.java deleted file mode 100755 index 2b91abf..0000000 --- a/core/java/android/widget/ValueEditor.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 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. - */ - -package android.widget; - -import android.util.ValueModel; - -/** - * An interface for editors of simple values. Classes implementing this interface are normally - * UI controls (subclasses of {@link android.view.View View}) that can provide a suitable - * user interface to display and edit values of the specified type. This interface is - * intended to describe editors for simple types, like {@code boolean}, {@code int} or - * {@code String}, where the values themselves are immutable. - * <p> - * For example, {@link android.widget.CheckBox CheckBox} implements - * this interface for the Boolean type as it is capable of providing an appropriate - * mechanism for displaying and changing the value of a Boolean property. - * - * @param <T> the value type that this editor supports - */ -public interface ValueEditor<T> { - /** - * Return the last value model that was set. If no value model has been set, the editor - * should return the value {@link android.util.ValueModel#EMPTY}. - * - * @return the value model - */ - public ValueModel<T> getValueModel(); - - /** - * Sets the value model for this editor. When the value model is set, the editor should - * retrieve the value from the value model, using {@link android.util.ValueModel#get()}, - * and set its internal state accordingly. Likewise, when the editor's internal state changes - * it should update the value model by calling {@link android.util.ValueModel#set(T)} - * with the appropriate value. - * - * @param valueModel the new value model for this editor. - */ - public void setValueModel(ValueModel<T> valueModel); -} diff --git a/core/java/com/android/internal/app/IMediaContainerService.aidl b/core/java/com/android/internal/app/IMediaContainerService.aidl index 03d3b22..03d3b22 100755..100644 --- a/core/java/com/android/internal/app/IMediaContainerService.aidl +++ b/core/java/com/android/internal/app/IMediaContainerService.aidl diff --git a/core/java/com/android/internal/app/IUsageStats.aidl b/core/java/com/android/internal/app/IUsageStats.aidl index 1ea7409..1ea7409 100755..100644 --- a/core/java/com/android/internal/app/IUsageStats.aidl +++ b/core/java/com/android/internal/app/IUsageStats.aidl diff --git a/core/java/com/android/internal/app/NetInitiatedActivity.java b/core/java/com/android/internal/app/NetInitiatedActivity.java index e1166f1..e1166f1 100755..100644 --- a/core/java/com/android/internal/app/NetInitiatedActivity.java +++ b/core/java/com/android/internal/app/NetInitiatedActivity.java diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java index e63c57f..c22cd26 100644 --- a/core/java/com/android/internal/app/ResolverActivity.java +++ b/core/java/com/android/internal/app/ResolverActivity.java @@ -35,7 +35,6 @@ import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; import android.os.PatternMatcher; -import android.os.Process; import android.os.RemoteException; import android.os.UserHandle; import android.util.Log; @@ -64,6 +63,7 @@ import java.util.Set; */ public class ResolverActivity extends AlertActivity implements AdapterView.OnItemClickListener { private static final String TAG = "ResolverActivity"; + private static final boolean DEBUG = false; private int mLaunchedFromUid; private ResolveListAdapter mAdapter; @@ -323,7 +323,7 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte || (!"file".equals(data.getScheme()) && !"content".equals(data.getScheme()))) { filter.addDataScheme(data.getScheme()); - + // Look through the resolved filter to determine which part // of it matched the original Intent. Iterator<IntentFilter.AuthorityEntry> aIt = ri.filter.authoritiesIterator(); @@ -402,7 +402,6 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte private final int mLaunchedFromUid; private final LayoutInflater mInflater; - private List<ResolveInfo> mCurrentResolveList; private List<DisplayResolveInfo> mList; public ResolveListAdapter(Context context, Intent intent, @@ -413,6 +412,7 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte mBaseResolveList = rList; mLaunchedFromUid = launchedFromUid; mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + mList = new ArrayList<DisplayResolveInfo>(); rebuildList(); } @@ -420,22 +420,23 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte final int oldItemCount = getCount(); rebuildList(); notifyDataSetChanged(); - if (mList.size() <= 0) { + final int newItemCount = getCount(); + if (newItemCount == 0) { // We no longer have any items... just finish the activity. finish(); - } - - final int newItemCount = getCount(); - if (newItemCount != oldItemCount) { + } else if (newItemCount != oldItemCount) { resizeGrid(); } } private void rebuildList() { + List<ResolveInfo> currentResolveList; + + mList.clear(); if (mBaseResolveList != null) { - mCurrentResolveList = mBaseResolveList; + currentResolveList = mBaseResolveList; } else { - mCurrentResolveList = mPm.queryIntentActivities( + currentResolveList = mPm.queryIntentActivities( mIntent, PackageManager.MATCH_DEFAULT_ONLY | (mAlwaysUseOption ? PackageManager.GET_RESOLVED_FILTER : 0)); // Filter out any activities that the launched uid does not @@ -443,36 +444,36 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte // list of resolved activities, because that only happens when // we are being subclassed, so we can safely launch whatever // they gave us. - if (mCurrentResolveList != null) { - for (int i=mCurrentResolveList.size()-1; i >= 0; i--) { - ActivityInfo ai = mCurrentResolveList.get(i).activityInfo; + if (currentResolveList != null) { + for (int i=currentResolveList.size()-1; i >= 0; i--) { + ActivityInfo ai = currentResolveList.get(i).activityInfo; int granted = ActivityManager.checkComponentPermission( ai.permission, mLaunchedFromUid, ai.applicationInfo.uid, ai.exported); if (granted != PackageManager.PERMISSION_GRANTED) { // Access not allowed! - mCurrentResolveList.remove(i); + currentResolveList.remove(i); } } } } int N; - if ((mCurrentResolveList != null) && ((N = mCurrentResolveList.size()) > 0)) { + if ((currentResolveList != null) && ((N = currentResolveList.size()) > 0)) { // Only display the first matches that are either of equal // priority or have asked to be default options. - ResolveInfo r0 = mCurrentResolveList.get(0); + ResolveInfo r0 = currentResolveList.get(0); for (int i=1; i<N; i++) { - ResolveInfo ri = mCurrentResolveList.get(i); - if (false) Log.v( + ResolveInfo ri = currentResolveList.get(i); + if (DEBUG) Log.v( "ResolveListActivity", r0.activityInfo.name + "=" + r0.priority + "/" + r0.isDefault + " vs " + ri.activityInfo.name + "=" + ri.priority + "/" + ri.isDefault); - if (r0.priority != ri.priority || + if (r0.priority != ri.priority || r0.isDefault != ri.isDefault) { while (i < N) { - mCurrentResolveList.remove(i); + currentResolveList.remove(i); N--; } } @@ -480,11 +481,8 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte if (N > 1) { ResolveInfo.DisplayNameComparator rComparator = new ResolveInfo.DisplayNameComparator(mPm); - Collections.sort(mCurrentResolveList, rComparator); + Collections.sort(currentResolveList, rComparator); } - - mList = new ArrayList<DisplayResolveInfo>(); - // First put the initial items at the top. if (mInitialIntents != null) { for (int i=0; i<mInitialIntents.length; i++) { @@ -512,10 +510,10 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte ri.loadLabel(getPackageManager()), null, ii)); } } - + // Check for applications with same name and use application name or // package name if necessary - r0 = mCurrentResolveList.get(0); + r0 = currentResolveList.get(0); int start = 0; CharSequence r0Label = r0.loadLabel(mPm); mShowExtended = false; @@ -523,7 +521,7 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte if (r0Label == null) { r0Label = r0.activityInfo.packageName; } - ResolveInfo ri = mCurrentResolveList.get(i); + ResolveInfo ri = currentResolveList.get(i); CharSequence riLabel = ri.loadLabel(mPm); if (riLabel == null) { riLabel = ri.activityInfo.packageName; @@ -531,13 +529,13 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte if (riLabel.equals(r0Label)) { continue; } - processGroup(mCurrentResolveList, start, (i-1), r0, r0Label); + processGroup(currentResolveList, start, (i-1), r0, r0Label); r0 = ri; r0Label = riLabel; start = i; } // Process last group - processGroup(mCurrentResolveList, start, (N-1), r0, r0Label); + processGroup(currentResolveList, start, (N-1), r0, r0Label); } } @@ -589,18 +587,10 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte } public ResolveInfo resolveInfoForPosition(int position) { - if (mList == null) { - return null; - } - return mList.get(position).ri; } public Intent intentForPosition(int position) { - if (mList == null) { - return null; - } - DisplayResolveInfo dri = mList.get(position); Intent intent = new Intent(dri.origIntent != null @@ -614,11 +604,11 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte } public int getCount() { - return mList != null ? mList.size() : 0; + return mList.size(); } public Object getItem(int position) { - return position; + return mList.get(position); } public long getItemId(int position) { diff --git a/core/java/com/android/internal/backup/LocalTransport.java b/core/java/com/android/internal/backup/LocalTransport.java index eed3e67..eb2d1fe 100644 --- a/core/java/com/android/internal/backup/LocalTransport.java +++ b/core/java/com/android/internal/backup/LocalTransport.java @@ -27,6 +27,7 @@ import android.content.pm.PackageManager.NameNotFoundException; import android.os.Environment; import android.os.ParcelFileDescriptor; import android.os.RemoteException; +import android.os.SELinux; import android.util.Log; import com.android.org.bouncycastle.util.encoders.Base64; @@ -64,6 +65,10 @@ public class LocalTransport extends IBackupTransport.Stub { public LocalTransport(Context context) { mContext = context; + mDataDir.mkdirs(); + if (!SELinux.restorecon(mDataDir)) { + Log.e(TAG, "SELinux restorecon failed for " + mDataDir); + } } public Intent configurationIntent() { diff --git a/core/java/com/android/internal/os/PkgUsageStats.aidl b/core/java/com/android/internal/os/PkgUsageStats.aidl index 8305271..8305271 100755..100644 --- a/core/java/com/android/internal/os/PkgUsageStats.aidl +++ b/core/java/com/android/internal/os/PkgUsageStats.aidl diff --git a/core/java/com/android/internal/os/PkgUsageStats.java b/core/java/com/android/internal/os/PkgUsageStats.java index 8c2c405..8c2c405 100755..100644 --- a/core/java/com/android/internal/os/PkgUsageStats.java +++ b/core/java/com/android/internal/os/PkgUsageStats.java diff --git a/core/java/com/android/internal/os/SamplingProfilerIntegration.java b/core/java/com/android/internal/os/SamplingProfilerIntegration.java index df0fcd9..6429aa4 100644 --- a/core/java/com/android/internal/os/SamplingProfilerIntegration.java +++ b/core/java/com/android/internal/os/SamplingProfilerIntegration.java @@ -106,7 +106,7 @@ public class SamplingProfilerIntegration { } ThreadGroup group = Thread.currentThread().getThreadGroup(); - SamplingProfiler.ThreadSet threadSet = SamplingProfiler.newThreadGroupTheadSet(group); + SamplingProfiler.ThreadSet threadSet = SamplingProfiler.newThreadGroupThreadSet(group); samplingProfiler = new SamplingProfiler(samplingProfilerDepth, threadSet); samplingProfiler.start(samplingProfilerMilliseconds); startMillis = System.currentTimeMillis(); diff --git a/core/java/com/android/internal/util/AsyncChannel.java b/core/java/com/android/internal/util/AsyncChannel.java index 5093b4d..52281d9 100644 --- a/core/java/com/android/internal/util/AsyncChannel.java +++ b/core/java/com/android/internal/util/AsyncChannel.java @@ -180,6 +180,9 @@ public class AsyncChannel { /** CMD_FULLY_CONNECTED refused because a connection already exists*/ public static final int STATUS_FULL_CONNECTION_REFUSED_ALREADY_CONNECTED = 3; + /** Error indicating abnormal termination of destination messenger */ + public static final int STATUS_REMOTE_DISCONNECTION = 4; + /** Service connection */ private AsyncChannelConnection mConnection; @@ -195,6 +198,9 @@ public class AsyncChannel { /** Messenger for destination */ private Messenger mDstMessenger; + /** Death Monitor for destination messenger */ + private DeathMonitor mDeathMonitor; + /** * AsyncChannel constructor */ @@ -434,6 +440,7 @@ public class AsyncChannel { mSrcHandler = null; mSrcMessenger = null; mDstMessenger = null; + mDeathMonitor = null; mConnection = null; } @@ -457,6 +464,10 @@ public class AsyncChannel { if (mSrcHandler != null) { replyDisconnected(STATUS_SUCCESSFUL); } + // Unlink only when bindService isn't used + if (mConnection == null && mDstMessenger != null && mDeathMonitor!= null) { + mDstMessenger.getBinder().unlinkToDeath(mDeathMonitor, 0); + } } /** @@ -832,6 +843,21 @@ public class AsyncChannel { msg.arg1 = status; msg.obj = this; msg.replyTo = mDstMessenger; + + /* + * Link to death only when bindService isn't used. + */ + if (mConnection == null) { + mDeathMonitor = new DeathMonitor(); + try { + mDstMessenger.getBinder().linkToDeath(mDeathMonitor, 0); + } catch (RemoteException e) { + mDeathMonitor = null; + // Override status to indicate failure + msg.arg1 = STATUS_BINDING_UNSUCCESSFUL; + } + } + mSrcHandler.sendMessage(msg); } @@ -877,4 +903,15 @@ public class AsyncChannel { private static void log(String s) { Slog.d(TAG, s); } + + private final class DeathMonitor implements IBinder.DeathRecipient { + + DeathMonitor() { + } + + public void binderDied() { + replyDisconnected(STATUS_REMOTE_DISCONNECTION); + } + + } } diff --git a/core/java/com/android/internal/view/menu/MenuItemImpl.java b/core/java/com/android/internal/view/menu/MenuItemImpl.java index 9f7441d..7189610 100644 --- a/core/java/com/android/internal/view/menu/MenuItemImpl.java +++ b/core/java/com/android/internal/view/menu/MenuItemImpl.java @@ -93,6 +93,7 @@ public final class MenuItemImpl implements MenuItem { */ private ContextMenuInfo mMenuInfo; + private static String sLanguage; private static String sPrependShortcutLabel; private static String sEnterShortcutLabel; private static String sDeleteShortcutLabel; @@ -114,7 +115,9 @@ public final class MenuItemImpl implements MenuItem { MenuItemImpl(MenuBuilder menu, int group, int id, int categoryOrder, int ordering, CharSequence title, int showAsAction) { - if (sPrependShortcutLabel == null) { + String lang = menu.getContext().getResources().getConfiguration().locale.toString(); + if (sPrependShortcutLabel == null || !lang.equals(sLanguage)) { + sLanguage = lang; // This is instantiated from the UI thread, so no chance of sync issues sPrependShortcutLabel = menu.getContext().getResources().getString( com.android.internal.R.string.prepend_shortcut_label); diff --git a/core/jni/Android.mk b/core/jni/Android.mk index 3ca085b..d8f20c1 100644 --- a/core/jni/Android.mk +++ b/core/jni/Android.mk @@ -11,14 +11,6 @@ else LOCAL_CFLAGS += -DPACKED="" endif -ifeq ($(WITH_JIT),true) - LOCAL_CFLAGS += -DWITH_JIT -endif - -ifneq ($(USE_CUSTOM_RUNTIME_HEAP_MAX),) - LOCAL_CFLAGS += -DCUSTOM_RUNTIME_HEAP_MAX=$(USE_CUSTOM_RUNTIME_HEAP_MAX) -endif - ifeq ($(USE_OPENGL_RENDERER),true) LOCAL_CFLAGS += -DUSE_OPENGL_RENDERER endif @@ -200,6 +192,7 @@ LOCAL_SHARED_LIBRARIES := \ libETC1 \ libhardware \ libhardware_legacy \ + libselinux \ libsonivox \ libcrypto \ libssl \ @@ -213,12 +206,6 @@ LOCAL_SHARED_LIBRARIES := \ libharfbuzz \ libz -ifeq ($(HAVE_SELINUX),true) -LOCAL_C_INCLUDES += external/libselinux/include -LOCAL_SHARED_LIBRARIES += libselinux -LOCAL_CFLAGS += -DHAVE_SELINUX -endif # HAVE_SELINUX - ifeq ($(USE_OPENGL_RENDERER),true) LOCAL_SHARED_LIBRARIES += libhwui endif diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp index 9820e60..94324f8 100644 --- a/core/jni/AndroidRuntime.cpp +++ b/core/jni/AndroidRuntime.cpp @@ -465,9 +465,7 @@ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv) kEMDefault, kEMIntPortable, kEMIntFast, -#if defined(WITH_JIT) kEMJitCompiler, -#endif } executionMode = kEMDefault; @@ -487,10 +485,8 @@ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv) executionMode = kEMIntPortable; } else if (strcmp(propBuf, "int:fast") == 0) { executionMode = kEMIntFast; -#if defined(WITH_JIT) } else if (strcmp(propBuf, "int:jit") == 0) { executionMode = kEMJitCompiler; -#endif } property_get("dalvik.vm.stack-trace-file", stackTraceFileBuf, ""); @@ -660,7 +656,6 @@ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv) mOptions.add(opt); } -#if defined(WITH_JIT) /* Force interpreter-only mode for selected opcodes. Eg "1-0a,3c,f1-ff" */ char jitOpBuf[sizeof("-Xjitop:") + PROPERTY_VALUE_MAX]; property_get("dalvik.vm.jit.op", propBuf, ""); @@ -680,7 +675,6 @@ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv) opt.optionString = jitMethodBuf; mOptions.add(opt); } -#endif if (executionMode == kEMIntPortable) { opt.optionString = "-Xint:portable"; @@ -688,11 +682,9 @@ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv) } else if (executionMode == kEMIntFast) { opt.optionString = "-Xint:fast"; mOptions.add(opt); -#if defined(WITH_JIT) } else if (executionMode == kEMJitCompiler) { opt.optionString = "-Xint:jit"; mOptions.add(opt); -#endif } if (checkDexSum) { diff --git a/core/jni/android_database_SQLiteConnection.cpp b/core/jni/android_database_SQLiteConnection.cpp index c9cf2fa..f70f0d1 100644 --- a/core/jni/android_database_SQLiteConnection.cpp +++ b/core/jni/android_database_SQLiteConnection.cpp @@ -706,7 +706,7 @@ static jlong nativeExecuteForCursorWindow(JNIEnv* env, jclass clazz, } CopyRowResult cpr = copyRow(env, window, statement, numColumns, startPos, addedRows); - if (cpr == CPR_FULL && addedRows && startPos + addedRows < requiredPos) { + if (cpr == CPR_FULL && addedRows && startPos + addedRows <= requiredPos) { // We filled the window before we got to the one row that we really wanted. // Clear the window and start filling it again from here. // TODO: Would be nicer if we could progressively replace earlier rows. diff --git a/core/jni/android_ddm_DdmHandleNativeHeap.cpp b/core/jni/android_ddm_DdmHandleNativeHeap.cpp index 42d408d..f5eaf94 100644 --- a/core/jni/android_ddm_DdmHandleNativeHeap.cpp +++ b/core/jni/android_ddm_DdmHandleNativeHeap.cpp @@ -2,16 +2,16 @@ ** ** Copyright 2006, 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 +** 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 +** 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 +** 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. */ @@ -23,20 +23,17 @@ #include <android_runtime/AndroidRuntime.h> #include <utils/Log.h> +#include <utils/String8.h> #include <fcntl.h> #include <errno.h> #include <sys/types.h> #include <sys/stat.h> -#if defined(__arm__) -extern "C" void get_malloc_leak_info(uint8_t** info, size_t* overallSize, - size_t* infoSize, size_t* totalMemory, size_t* backtraceSize); - -extern "C" void free_malloc_leak_info(uint8_t* info); -#endif +extern "C" void get_malloc_leak_info(uint8_t** info, size_t* overallSize, + size_t* infoSize, size_t* totalMemory, size_t* backtraceSize); -#define MAPS_FILE_SIZE 65 * 1024 +extern "C" void free_malloc_leak_info(uint8_t* info); struct Header { size_t mapSize; @@ -48,96 +45,57 @@ struct Header { namespace android { +static void ReadFile(const char* path, String8& s) { + int fd = open(path, O_RDONLY); + if (fd != -1) { + char bytes[1024]; + ssize_t byteCount; + while ((byteCount = TEMP_FAILURE_RETRY(read(fd, bytes, sizeof(bytes)))) > 0) { + s.append(bytes, byteCount); + } + close(fd); + } +} + /* - * Retrieve the native heap information and the info from /proc/<self>/maps, + * Retrieve the native heap information and the info from /proc/self/maps, * copy them into a byte[] with a "struct Header" that holds data offsets, * and return the array. */ -static jbyteArray getLeakInfo(JNIEnv *env, jobject clazz) -{ -#if defined(__arm__) - // get the info in /proc/[pid]/map +static jbyteArray DdmHandleNativeHeap_getLeakInfo(JNIEnv* env, jobject) { Header header; memset(&header, 0, sizeof(header)); - pid_t pid = getpid(); - - char path[FILENAME_MAX]; - sprintf(path, "/proc/%d/maps", pid); - - struct stat sb; - int ret = stat(path, &sb); - - uint8_t* mapsFile = NULL; - if (ret == 0) { - mapsFile = (uint8_t*)malloc(MAPS_FILE_SIZE); - int fd = open(path, O_RDONLY); - - if (mapsFile != NULL && fd != -1) { - int amount = 0; - do { - uint8_t* ptr = mapsFile + header.mapSize; - amount = read(fd, ptr, MAPS_FILE_SIZE); - if (amount <= 0) { - if (errno != EINTR) - break; - else - continue; - } - header.mapSize += amount; - } while (header.mapSize < MAPS_FILE_SIZE); - - ALOGD("**** read %d bytes from '%s'", (int) header.mapSize, path); - } - } + String8 maps; + ReadFile("/proc/self/maps", maps); + header.mapSize = maps.size(); uint8_t* allocBytes; - get_malloc_leak_info(&allocBytes, &header.allocSize, &header.allocInfoSize, - &header.totalMemory, &header.backtraceSize); + get_malloc_leak_info(&allocBytes, &header.allocSize, &header.allocInfoSize, + &header.totalMemory, &header.backtraceSize); - jbyte* bytes = NULL; - jbyte* ptr = NULL; - jbyteArray array = env->NewByteArray(sizeof(Header) + header.mapSize + header.allocSize); - if (array == NULL) { - goto done; - } - - bytes = env->GetByteArrayElements(array, NULL); - ptr = bytes; - -// ALOGD("*** mapSize: %d allocSize: %d allocInfoSize: %d totalMemory: %d", -// header.mapSize, header.allocSize, header.allocInfoSize, header.totalMemory); + ALOGD("*** mapSize: %d allocSize: %d allocInfoSize: %d totalMemory: %d", + header.mapSize, header.allocSize, header.allocInfoSize, header.totalMemory); - memcpy(ptr, &header, sizeof(header)); - ptr += sizeof(header); - - if (header.mapSize > 0 && mapsFile != NULL) { - memcpy(ptr, mapsFile, header.mapSize); - ptr += header.mapSize; + jbyteArray array = env->NewByteArray(sizeof(Header) + header.mapSize + header.allocSize); + if (array != NULL) { + env->SetByteArrayRegion(array, 0, + sizeof(header), reinterpret_cast<jbyte*>(&header)); + env->SetByteArrayRegion(array, sizeof(header), + maps.size(), reinterpret_cast<const jbyte*>(maps.string())); + env->SetByteArrayRegion(array, sizeof(header) + maps.size(), + header.allocSize, reinterpret_cast<jbyte*>(allocBytes)); } - - memcpy(ptr, allocBytes, header.allocSize); - env->ReleaseByteArrayElements(array, bytes, 0); -done: - if (mapsFile != NULL) { - free(mapsFile); - } - // free the info up! free_malloc_leak_info(allocBytes); - return array; -#else - return NULL; -#endif } static JNINativeMethod method_table[] = { - { "getLeakInfo", "()[B", (void*)getLeakInfo }, + { "getLeakInfo", "()[B", (void*) DdmHandleNativeHeap_getLeakInfo }, }; -int register_android_ddm_DdmHandleNativeHeap(JNIEnv *env) -{ +int register_android_ddm_DdmHandleNativeHeap(JNIEnv* env) { return AndroidRuntime::registerNativeMethods(env, "android/ddm/DdmHandleNativeHeap", method_table, NELEM(method_table)); } diff --git a/core/jni/android_emoji_EmojiFactory.cpp b/core/jni/android_emoji_EmojiFactory.cpp index a658561..4383997 100644 --- a/core/jni/android_emoji_EmojiFactory.cpp +++ b/core/jni/android_emoji_EmojiFactory.cpp @@ -3,8 +3,7 @@ #define LOG_TAG "EmojiFactory_jni" #include <utils/Log.h> -#include <utils/String8.h> -#include <utils/String16.h> +#include <ScopedUtfChars.h> #include "EmojiFactory.h" #include <nativehelper/JNIHelp.h> @@ -125,16 +124,13 @@ static jobject android_emoji_EmojiFactory_newInstance( return NULL; } - const jchar* jchars = env->GetStringChars(name, NULL); - jsize len = env->GetStringLength(name); - String8 str(String16(jchars, len)); + ScopedUtfChars nameUtf(env, name); - EmojiFactory *factory = gCaller->TryCallGetImplementation(str.string()); + EmojiFactory *factory = gCaller->TryCallGetImplementation(nameUtf.c_str()); // EmojiFactory *factory = EmojiFactory::GetImplementation(str.string()); if (NULL == factory) { return NULL; } - env->ReleaseStringChars(name, jchars); return create_java_EmojiFactory(env, factory, name); } @@ -151,8 +147,8 @@ static jobject android_emoji_EmojiFactory_newAvailableInstance( if (NULL == factory) { return NULL; } - String16 name_16(String8(factory->Name())); - jstring jname = env->NewString(name_16.string(), name_16.size()); + + jstring jname = env->NewStringUTF(factory->Name()); if (NULL == jname) { return NULL; } diff --git a/core/jni/android_media_JetPlayer.cpp b/core/jni/android_media_JetPlayer.cpp index a785f52..5795aba 100644 --- a/core/jni/android_media_JetPlayer.cpp +++ b/core/jni/android_media_JetPlayer.cpp @@ -130,9 +130,10 @@ android_media_JetPlayer_loadFromFile(JNIEnv *env, jobject thiz, jstring path) { JetPlayer *lpJet = (JetPlayer *)env->GetIntField( thiz, javaJetPlayerFields.nativePlayerInJavaObj); - if (lpJet == NULL ) { + if (lpJet == NULL) { jniThrowException(env, "java/lang/IllegalStateException", "Unable to retrieve JetPlayer pointer for openFile()"); + return JNI_FALSE; } // set up event callback function @@ -166,9 +167,10 @@ android_media_JetPlayer_loadFromFileD(JNIEnv *env, jobject thiz, { JetPlayer *lpJet = (JetPlayer *)env->GetIntField( thiz, javaJetPlayerFields.nativePlayerInJavaObj); - if (lpJet == NULL ) { + if (lpJet == NULL) { jniThrowException(env, "java/lang/IllegalStateException", "Unable to retrieve JetPlayer pointer for openFile()"); + return JNI_FALSE; } // set up event callback function @@ -195,9 +197,10 @@ android_media_JetPlayer_closeFile(JNIEnv *env, jobject thiz) { JetPlayer *lpJet = (JetPlayer *)env->GetIntField( thiz, javaJetPlayerFields.nativePlayerInJavaObj); - if (lpJet == NULL ) { + if (lpJet == NULL) { jniThrowException(env, "java/lang/IllegalStateException", "Unable to retrieve JetPlayer pointer for closeFile()"); + return JNI_FALSE; } if (lpJet->closeFile()==EAS_SUCCESS) { @@ -216,9 +219,10 @@ android_media_JetPlayer_play(JNIEnv *env, jobject thiz) { JetPlayer *lpJet = (JetPlayer *)env->GetIntField( thiz, javaJetPlayerFields.nativePlayerInJavaObj); - if (lpJet == NULL ) { + if (lpJet == NULL) { jniThrowException(env, "java/lang/IllegalStateException", "Unable to retrieve JetPlayer pointer for play()"); + return JNI_FALSE; } EAS_RESULT result = lpJet->play(); @@ -239,9 +243,10 @@ android_media_JetPlayer_pause(JNIEnv *env, jobject thiz) { JetPlayer *lpJet = (JetPlayer *)env->GetIntField( thiz, javaJetPlayerFields.nativePlayerInJavaObj); - if (lpJet == NULL ) { + if (lpJet == NULL) { jniThrowException(env, "java/lang/IllegalStateException", "Unable to retrieve JetPlayer pointer for pause()"); + return JNI_FALSE; } EAS_RESULT result = lpJet->pause(); @@ -268,9 +273,10 @@ android_media_JetPlayer_queueSegment(JNIEnv *env, jobject thiz, { JetPlayer *lpJet = (JetPlayer *)env->GetIntField( thiz, javaJetPlayerFields.nativePlayerInJavaObj); - if (lpJet == NULL ) { + if (lpJet == NULL) { jniThrowException(env, "java/lang/IllegalStateException", "Unable to retrieve JetPlayer pointer for queueSegment()"); + return JNI_FALSE; } EAS_RESULT result @@ -294,9 +300,10 @@ android_media_JetPlayer_queueSegmentMuteArray(JNIEnv *env, jobject thiz, { JetPlayer *lpJet = (JetPlayer *)env->GetIntField( thiz, javaJetPlayerFields.nativePlayerInJavaObj); - if (lpJet == NULL ) { + if (lpJet == NULL) { jniThrowException(env, "java/lang/IllegalStateException", "Unable to retrieve JetPlayer pointer for queueSegmentMuteArray()"); + return JNI_FALSE; } EAS_RESULT result=EAS_FAILURE; @@ -339,9 +346,10 @@ android_media_JetPlayer_setMuteFlags(JNIEnv *env, jobject thiz, { JetPlayer *lpJet = (JetPlayer *)env->GetIntField( thiz, javaJetPlayerFields.nativePlayerInJavaObj); - if (lpJet == NULL ) { + if (lpJet == NULL) { jniThrowException(env, "java/lang/IllegalStateException", "Unable to retrieve JetPlayer pointer for setMuteFlags()"); + return JNI_FALSE; } EAS_RESULT result; @@ -363,9 +371,10 @@ android_media_JetPlayer_setMuteArray(JNIEnv *env, jobject thiz, { JetPlayer *lpJet = (JetPlayer *)env->GetIntField( thiz, javaJetPlayerFields.nativePlayerInJavaObj); - if (lpJet == NULL ) { + if (lpJet == NULL) { jniThrowException(env, "java/lang/IllegalStateException", "Unable to retrieve JetPlayer pointer for setMuteArray()"); + return JNI_FALSE; } EAS_RESULT result=EAS_FAILURE; @@ -408,9 +417,10 @@ android_media_JetPlayer_setMuteFlag(JNIEnv *env, jobject thiz, { JetPlayer *lpJet = (JetPlayer *)env->GetIntField( thiz, javaJetPlayerFields.nativePlayerInJavaObj); - if (lpJet == NULL ) { + if (lpJet == NULL) { jniThrowException(env, "java/lang/IllegalStateException", "Unable to retrieve JetPlayer pointer for setMuteFlag()"); + return JNI_FALSE; } EAS_RESULT result; @@ -433,9 +443,10 @@ android_media_JetPlayer_triggerClip(JNIEnv *env, jobject thiz, jint clipId) { JetPlayer *lpJet = (JetPlayer *)env->GetIntField( thiz, javaJetPlayerFields.nativePlayerInJavaObj); - if (lpJet == NULL ) { + if (lpJet == NULL) { jniThrowException(env, "java/lang/IllegalStateException", "Unable to retrieve JetPlayer pointer for triggerClip()"); + return JNI_FALSE; } EAS_RESULT result; @@ -457,9 +468,10 @@ android_media_JetPlayer_clearQueue(JNIEnv *env, jobject thiz) { JetPlayer *lpJet = (JetPlayer *)env->GetIntField( thiz, javaJetPlayerFields.nativePlayerInJavaObj); - if (lpJet == NULL ) { + if (lpJet == NULL) { jniThrowException(env, "java/lang/IllegalStateException", "Unable to retrieve JetPlayer pointer for clearQueue()"); + return JNI_FALSE; } EAS_RESULT result = lpJet->clearQueue(); diff --git a/core/jni/android_media_ToneGenerator.cpp b/core/jni/android_media_ToneGenerator.cpp index da6f1ed..de29b28 100644 --- a/core/jni/android_media_ToneGenerator.cpp +++ b/core/jni/android_media_ToneGenerator.cpp @@ -103,6 +103,7 @@ static void android_media_ToneGenerator_native_setup(JNIEnv *env, jobject thiz, if (!lpToneGen->isInited()) { ALOGE("ToneGenerator init failed"); jniThrowRuntimeException(env, "Init failed"); + delete lpToneGen; return; } diff --git a/core/jni/android_os_Debug.cpp b/core/jni/android_os_Debug.cpp index 6724f36..2883c10 100644 --- a/core/jni/android_os_Debug.cpp +++ b/core/jni/android_os_Debug.cpp @@ -43,6 +43,7 @@ enum { HEAP_UNKNOWN, HEAP_DALVIK, HEAP_NATIVE, + HEAP_STACK, HEAP_CURSOR, HEAP_ASHMEM, HEAP_UNKNOWN_DEV, @@ -109,7 +110,7 @@ static jlong android_os_Debug_getNativeHeapAllocatedSize(JNIEnv *env, jobject cl static jlong android_os_Debug_getNativeHeapFreeSize(JNIEnv *env, jobject clazz) { -#ifdef HAVE_MALLOC_H +#ifdef HAVE_MALLOC_H struct mallinfo info = mallinfo(); return (jlong) info.fordblks; #else @@ -159,10 +160,13 @@ static void read_mapinfo(FILE *fp, stats_t* stats) name = line + name_pos; nameLen = strlen(name); - if (strstr(name, "[heap]") == name) { + if ((strstr(name, "[heap]") == name) || + (strstr(name, "/dev/ashmem/libc malloc") == name)) { whichHeap = HEAP_NATIVE; } else if (strstr(name, "/dev/ashmem/dalvik-") == name) { whichHeap = HEAP_DALVIK; + } else if (strstr(name, "[stack") == name) { + whichHeap = HEAP_STACK; } else if (strstr(name, "/dev/ashmem/CursorWindow") == name) { whichHeap = HEAP_CURSOR; } else if (strstr(name, "/dev/ashmem/") == name) { @@ -177,7 +181,8 @@ static void read_mapinfo(FILE *fp, stats_t* stats) whichHeap = HEAP_APK; } else if (nameLen > 4 && strcmp(name+nameLen-4, ".ttf") == 0) { whichHeap = HEAP_TTF; - } else if (nameLen > 4 && strcmp(name+nameLen-4, ".dex") == 0) { + } else if ((nameLen > 4 && strcmp(name+nameLen-4, ".dex") == 0) || + (nameLen > 5 && strcmp(name+nameLen-5, ".odex") == 0)) { whichHeap = HEAP_DEX; } else if (nameLen > 0) { whichHeap = HEAP_UNKNOWN_MAP; @@ -189,7 +194,7 @@ static void read_mapinfo(FILE *fp, stats_t* stats) //ALOGI("native=%d dalvik=%d sqlite=%d: %s\n", isNativeHeap, isDalvikHeap, // isSqliteHeap, line); - + while (true) { if (fgets(line, 1024, fp) == 0) { done = true; @@ -231,7 +236,7 @@ static void load_maps(int pid, stats_t* stats) { char tmp[128]; FILE *fp; - + sprintf(tmp, "/proc/%d/smaps", pid); fp = fopen(tmp, "r"); if (fp == 0) return; @@ -245,7 +250,7 @@ static void android_os_Debug_getDirtyPagesPid(JNIEnv *env, jobject clazz, { stats_t stats[_NUM_HEAP]; memset(&stats, 0, sizeof(stats)); - + load_maps(pid, stats); for (int i=_NUM_CORE_HEAP; i<_NUM_HEAP; i++) { @@ -259,9 +264,9 @@ static void android_os_Debug_getDirtyPagesPid(JNIEnv *env, jobject clazz, env->SetIntField(object, stat_fields[i].privateDirty_field, stats[i].privateDirty); env->SetIntField(object, stat_fields[i].sharedDirty_field, stats[i].sharedDirty); } - + jintArray otherIntArray = (jintArray)env->GetObjectField(object, otherStats_field); - + jint* otherArray = (jint*)env->GetPrimitiveArrayCritical(otherIntArray, 0); if (otherArray == NULL) { return; @@ -326,7 +331,7 @@ static jint read_binder_stat(const char* stat) char compare[128]; int len = snprintf(compare, 128, "proc %d", getpid()); - + // loop until we have the block that represents this process do { if (fgets(line, 1024, fp) == 0) { @@ -334,15 +339,15 @@ static jint read_binder_stat(const char* stat) } } while (strncmp(compare, line, len)); - // now that we have this process, read until we find the stat that we are looking for + // now that we have this process, read until we find the stat that we are looking for len = snprintf(compare, 128, " %s: ", stat); - + do { if (fgets(line, 1024, fp) == 0) { return -1; } } while (strncmp(compare, line, len)); - + // we have the line, now increment the line ptr to the value char* ptr = line + len; return atoi(ptr); @@ -508,7 +513,7 @@ static void android_os_Debug_dumpNativeHeap(JNIEnv* env, jobject clazz, jobject fileDescriptor) { if (fileDescriptor == NULL) { - jniThrowNullPointerException(env, NULL); + jniThrowNullPointerException(env, "fd == null"); return; } int origFd = jniGetFDFromFileDescriptor(env, fileDescriptor); @@ -545,7 +550,7 @@ static void android_os_Debug_dumpNativeBacktraceToFile(JNIEnv* env, jobject claz jint pid, jstring fileName) { if (fileName == NULL) { - jniThrowNullPointerException(env, NULL); + jniThrowNullPointerException(env, "file == null"); return; } const jchar* str = env->GetStringCritical(fileName, 0); @@ -609,6 +614,19 @@ int register_android_os_Debug(JNIEnv *env) { jclass clazz = env->FindClass("android/os/Debug$MemoryInfo"); + // Sanity check the number of other statistics expected in Java matches here. + jfieldID numOtherStats_field = env->GetStaticFieldID(clazz, "NUM_OTHER_STATS", "I"); + jint numOtherStats = env->GetStaticIntField(clazz, numOtherStats_field); + int expectedNumOtherStats = _NUM_HEAP - _NUM_CORE_HEAP; + if (numOtherStats != expectedNumOtherStats) { + jniThrowExceptionFmt(env, "java/lang/RuntimeException", + "android.os.Debug.Meminfo.NUM_OTHER_STATS=%d expected %d", + numOtherStats, expectedNumOtherStats); + return JNI_ERR; + } + + otherStats_field = env->GetFieldID(clazz, "otherStats", "[I"); + for (int i=0; i<_NUM_CORE_HEAP; i++) { stat_fields[i].pss_field = env->GetFieldID(clazz, stat_field_names[i].pss_name, "I"); @@ -618,8 +636,6 @@ int register_android_os_Debug(JNIEnv *env) env->GetFieldID(clazz, stat_field_names[i].sharedDirty_name, "I"); } - otherStats_field = env->GetFieldID(clazz, "otherStats", "[I"); - return jniRegisterNativeMethods(env, "android/os/Debug", gMethods, NELEM(gMethods)); } diff --git a/core/jni/android_os_SELinux.cpp b/core/jni/android_os_SELinux.cpp index e813c38..0a97f39 100644 --- a/core/jni/android_os_SELinux.cpp +++ b/core/jni/android_os_SELinux.cpp @@ -20,486 +20,410 @@ #include "JNIHelp.h" #include "jni.h" #include "android_runtime/AndroidRuntime.h" -#ifdef HAVE_SELINUX #include "selinux/selinux.h" #include "selinux/android.h" -#endif #include <errno.h> +#include <ScopedLocalRef.h> +#include <ScopedUtfChars.h> +#include <UniquePtr.h> namespace android { - static jboolean isSELinuxDisabled = true; - - static void throw_NullPointerException(JNIEnv *env, const char* msg) { - jclass clazz; - clazz = env->FindClass("java/lang/NullPointerException"); - env->ThrowNew(clazz, msg); - } +struct SecurityContext_Delete { + void operator()(security_context_t p) const { + freecon(p); + } +}; +typedef UniquePtr<char[], SecurityContext_Delete> Unique_SecurityContext; - /* - * Function: isSELinuxEnabled - * Purpose: checks whether SELinux is enabled/disbaled - * Parameters: none - * Return value : true (enabled) or false (disabled) - * Exceptions: none - */ - static jboolean isSELinuxEnabled(JNIEnv *env, jobject classz) { +static jboolean isSELinuxDisabled = true; +/* + * Function: isSELinuxEnabled + * Purpose: checks whether SELinux is enabled/disbaled + * Parameters: none + * Return value : true (enabled) or false (disabled) + * Exceptions: none + */ +static jboolean isSELinuxEnabled(JNIEnv *env, jobject) { return !isSELinuxDisabled; - } - - /* - * Function: isSELinuxEnforced - * Purpose: return the current SELinux enforce mode - * Parameters: none - * Return value: true (enforcing) or false (permissive) - * Exceptions: none - */ - static jboolean isSELinuxEnforced(JNIEnv *env, jobject clazz) { -#ifdef HAVE_SELINUX +} + +/* + * Function: isSELinuxEnforced + * Purpose: return the current SELinux enforce mode + * Parameters: none + * Return value: true (enforcing) or false (permissive) + * Exceptions: none + */ +static jboolean isSELinuxEnforced(JNIEnv *env, jobject) { return (security_getenforce() == 1) ? true : false; -#else - return false; -#endif - } - - /* - * Function: setSELinuxEnforce - * Purpose: set the SE Linux enforcing mode - * Parameters: true (enforcing) or false (permissive) - * Return value: true (success) or false (fail) - * Exceptions: none - */ - static jboolean setSELinuxEnforce(JNIEnv *env, jobject clazz, jboolean value) { -#ifdef HAVE_SELINUX - if (isSELinuxDisabled) - return false; - - int enforce = (value) ? 1 : 0; +} + +/* + * Function: setSELinuxEnforce + * Purpose: set the SE Linux enforcing mode + * Parameters: true (enforcing) or false (permissive) + * Return value: true (success) or false (fail) + * Exceptions: none + */ +static jboolean setSELinuxEnforce(JNIEnv *env, jobject, jboolean value) { + if (isSELinuxDisabled) { + return false; + } + + int enforce = value ? 1 : 0; return (security_setenforce(enforce) != -1) ? true : false; -#else - return false; -#endif - } - - /* - * Function: getPeerCon - * Purpose: retrieves security context of peer socket - * Parameters: - * fileDescriptor: peer socket file as a FileDescriptor object - * Returns: jstring representing the security_context of socket or NULL if error - * Exceptions: NullPointerException if fileDescriptor object is NULL - */ - static jstring getPeerCon(JNIEnv *env, jobject clazz, jobject fileDescriptor) { -#ifdef HAVE_SELINUX - if (isSELinuxDisabled) - return NULL; +} - if (fileDescriptor == NULL) { - throw_NullPointerException(env, "Trying to check security context of a null peer socket."); - return NULL; +/* + * Function: getPeerCon + * Purpose: retrieves security context of peer socket + * Parameters: + * fileDescriptor: peer socket file as a FileDescriptor object + * Returns: jstring representing the security_context of socket or NULL if error + * Exceptions: NullPointerException if fileDescriptor object is NULL + */ +static jstring getPeerCon(JNIEnv *env, jobject, jobject fileDescriptor) { + if (isSELinuxDisabled) { + return NULL; } - security_context_t context = NULL; - jstring securityString = NULL; + if (fileDescriptor == NULL) { + jniThrowNullPointerException(env, + "Trying to check security context of a null peer socket."); + return NULL; + } int fd = jniGetFDFromFileDescriptor(env, fileDescriptor); - if (env->ExceptionOccurred() != NULL) { - ALOGE("There was an issue with retrieving the file descriptor"); - goto bail; + ALOGE("getPeerCon => getFD for %p failed", fileDescriptor); + return NULL; } - if (getpeercon(fd, &context) == -1) - goto bail; + security_context_t tmp; + int ret = getpeercon(fd, &tmp); + Unique_SecurityContext context(tmp); - ALOGV("getPeerCon: Successfully retrived context of peer socket '%s'", context); + ScopedLocalRef<jstring> contextStr(env, NULL); + if (ret != -1) { + contextStr.reset(env->NewStringUTF(context.get())); + } - securityString = env->NewStringUTF(context); + ALOGV("getPeerCon(%d) => %s", fd, contextStr.get()); + return contextStr.release(); +} - bail: - if (context != NULL) - freecon(context); +/* + * Function: setFSCreateCon + * Purpose: set security context used for creating a new file system object + * Parameters: + * context: security_context_t representing the new context of a file system object, + * set to NULL to return to the default policy behavior + * Returns: true on success, false on error + * Exception: none + */ +static jboolean setFSCreateCon(JNIEnv *env, jobject, jstring contextStr) { + if (isSELinuxDisabled) { + return false; + } - return securityString; -#else - return NULL; -#endif - } + UniquePtr<ScopedUtfChars> context; + const char* context_c_str = NULL; + if (contextStr != NULL) { + context.reset(new ScopedUtfChars(env, contextStr)); + context_c_str = context->c_str(); + if (context_c_str == NULL) { + return false; + } + } - /* - * Function: setFSCreateCon - * Purpose: set security context used for creating a new file system object - * Parameters: - * context: security_context_t representing the new context of a file system object, - * set to NULL to return to the default policy behavior - * Returns: true on success, false on error - * Exception: none - */ - static jboolean setFSCreateCon(JNIEnv *env, jobject clazz, jstring context) { -#ifdef HAVE_SELINUX - if (isSELinuxDisabled) - return false; + int ret = setfscreatecon(const_cast<char *>(context_c_str)); - char * securityContext = NULL; - const char *constant_securityContext = NULL; + ALOGV("setFSCreateCon(%s) => %d", context_c_str, ret); - if (context != NULL) { - constant_securityContext = env->GetStringUTFChars(context, NULL); + return (ret == 0) ? true : false; +} - // GetStringUTFChars returns const char * yet setfscreatecon needs char * - securityContext = const_cast<char *>(constant_securityContext); +/* + * Function: setFileCon + * Purpose: set the security context of a file object + * Parameters: + * path: the location of the file system object + * context: the new security context of the file system object + * Returns: true on success, false on error + * Exception: NullPointerException is thrown if either path or context strign are NULL + */ +static jboolean setFileCon(JNIEnv *env, jobject, jstring pathStr, jstring contextStr) { + if (isSELinuxDisabled) { + return false; } - int ret; - if ((ret = setfscreatecon(securityContext)) == -1) - goto bail; + ScopedUtfChars path(env, pathStr); + if (path.c_str() == NULL) { + return false; + } - ALOGV("setFSCreateCon: set new security context to '%s' ", context == NULL ? "default", context); + ScopedUtfChars context(env, contextStr); + if (context.c_str() == NULL) { + return false; + } - bail: - if (constant_securityContext != NULL) - env->ReleaseStringUTFChars(context, constant_securityContext); + // GetStringUTFChars returns const char * yet setfilecon needs char * + char *tmp = const_cast<char *>(context.c_str()); + int ret = setfilecon(path.c_str(), tmp); + ALOGV("setFileCon(%s, %s) => %d", path.c_str(), context.c_str(), ret); return (ret == 0) ? true : false; -#else - return false; -#endif - } - - /* - * Function: setFileCon - * Purpose: set the security context of a file object - * Parameters: - * path: the location of the file system object - * con: the new security context of the file system object - * Returns: true on success, false on error - * Exception: NullPointerException is thrown if either path or context strign are NULL - */ - static jboolean setFileCon(JNIEnv *env, jobject clazz, jstring path, jstring con) { -#ifdef HAVE_SELINUX - if (isSELinuxDisabled) - return false; - - if (path == NULL) { - throw_NullPointerException(env, "Trying to change the security context of a NULL file object."); - return false; - } - - if (con == NULL) { - throw_NullPointerException(env, "Trying to set the security context of a file object with NULL."); - return false; - } - - const char *objectPath = env->GetStringUTFChars(path, NULL); - const char *constant_con = env->GetStringUTFChars(con, NULL); +} - // GetStringUTFChars returns const char * yet setfilecon needs char * - char *newCon = const_cast<char *>(constant_con); +/* + * Function: getFileCon + * Purpose: retrieves the context associated with the given path in the file system + * Parameters: + * path: given path in the file system + * Returns: + * string representing the security context string of the file object + * the string may be NULL if an error occured + * Exceptions: NullPointerException if the path object is null + */ +static jstring getFileCon(JNIEnv *env, jobject, jstring pathStr) { + if (isSELinuxDisabled) { + return NULL; + } - int ret; - if ((ret = setfilecon(objectPath, newCon)) == -1) - goto bail; + ScopedUtfChars path(env, pathStr); + if (path.c_str() == NULL) { + return NULL; + } - ALOGV("setFileCon: Succesfully set security context '%s' for '%s'", newCon, objectPath); + security_context_t tmp; + int ret = getfilecon(path.c_str(), &tmp); + Unique_SecurityContext context(tmp); - bail: - env->ReleaseStringUTFChars(path, objectPath); - env->ReleaseStringUTFChars(con, constant_con); - return (ret == 0) ? true : false; -#else - return false; -#endif - } - - /* - * Function: getFileCon - * Purpose: retrieves the context associated with the given path in the file system - * Parameters: - * path: given path in the file system - * Returns: - * string representing the security context string of the file object - * the string may be NULL if an error occured - * Exceptions: NullPointerException if the path object is null - */ - static jstring getFileCon(JNIEnv *env, jobject clazz, jstring path) { -#ifdef HAVE_SELINUX - if (isSELinuxDisabled) - return NULL; - - if (path == NULL) { - throw_NullPointerException(env, "Trying to check security context of a null path."); - return NULL; - } - - const char *objectPath = env->GetStringUTFChars(path, NULL); - - security_context_t context = NULL; - jstring securityString = NULL; - - if (getfilecon(objectPath, &context) == -1) - goto bail; - - ALOGV("getFileCon: Successfully retrived context '%s' for file '%s'", context, objectPath); - - securityString = env->NewStringUTF(context); - - bail: - if (context != NULL) - freecon(context); - - env->ReleaseStringUTFChars(path, objectPath); - - return securityString; -#else - return NULL; -#endif - } - - /* - * Function: getCon - * Purpose: Get the context of the current process. - * Parameters: none - * Returns: a jstring representing the security context of the process, - * the jstring may be NULL if there was an error - * Exceptions: none - */ - static jstring getCon(JNIEnv *env, jobject clazz) { -#ifdef HAVE_SELINUX - if (isSELinuxDisabled) - return NULL; - - security_context_t context = NULL; - jstring securityString = NULL; - - if (getcon(&context) == -1) - goto bail; - - ALOGV("getCon: Successfully retrieved context '%s'", context); - - securityString = env->NewStringUTF(context); - - bail: - if (context != NULL) - freecon(context); - - return securityString; -#else - return NULL; -#endif - } - - /* - * Function: getPidCon - * Purpose: Get the context of a process identified by its pid - * Parameters: - * pid: a jint representing the process - * Returns: a jstring representing the security context of the pid, - * the jstring may be NULL if there was an error - * Exceptions: none - */ - static jstring getPidCon(JNIEnv *env, jobject clazz, jint pid) { -#ifdef HAVE_SELINUX - if (isSELinuxDisabled) - return NULL; - - security_context_t context = NULL; - jstring securityString = NULL; - - pid_t checkPid = (pid_t)pid; - - if (getpidcon(checkPid, &context) == -1) - goto bail; - - ALOGV("getPidCon: Successfully retrived context '%s' for pid '%d'", context, checkPid); - - securityString = env->NewStringUTF(context); - - bail: - if (context != NULL) - freecon(context); - - return securityString; -#else - return NULL; -#endif - } - - /* - * Function: getBooleanNames - * Purpose: Gets a list of the SELinux boolean names. - * Parameters: None - * Returns: an array of strings containing the SELinux boolean names. - * returns NULL string on error - * Exceptions: None - */ - static jobjectArray getBooleanNames(JNIEnv *env, JNIEnv clazz) { -#ifdef HAVE_SELINUX - if (isSELinuxDisabled) - return NULL; + ScopedLocalRef<jstring> securityString(env, NULL); + if (ret != -1) { + securityString.reset(env->NewStringUTF(context.get())); + } + + ALOGV("getFileCon(%s) => %s", path.c_str(), context.get()); + return securityString.release(); +} + +/* + * Function: getCon + * Purpose: Get the context of the current process. + * Parameters: none + * Returns: a jstring representing the security context of the process, + * the jstring may be NULL if there was an error + * Exceptions: none + */ +static jstring getCon(JNIEnv *env, jobject) { + if (isSELinuxDisabled) { + return NULL; + } + + security_context_t tmp; + int ret = getcon(&tmp); + Unique_SecurityContext context(tmp); + + ScopedLocalRef<jstring> securityString(env, NULL); + if (ret != -1) { + securityString.reset(env->NewStringUTF(context.get())); + } + + ALOGV("getCon() => %s", context.get()); + return securityString.release(); +} + +/* + * Function: getPidCon + * Purpose: Get the context of a process identified by its pid + * Parameters: + * pid: a jint representing the process + * Returns: a jstring representing the security context of the pid, + * the jstring may be NULL if there was an error + * Exceptions: none + */ +static jstring getPidCon(JNIEnv *env, jobject, jint pid) { + if (isSELinuxDisabled) { + return NULL; + } + + security_context_t tmp; + int ret = getpidcon(static_cast<pid_t>(pid), &tmp); + Unique_SecurityContext context(tmp); + + ScopedLocalRef<jstring> securityString(env, NULL); + if (ret != -1) { + securityString.reset(env->NewStringUTF(context.get())); + } + + ALOGV("getPidCon(%d) => %s", pid, context.get()); + return securityString.release(); +} + +/* + * Function: getBooleanNames + * Purpose: Gets a list of the SELinux boolean names. + * Parameters: None + * Returns: an array of strings containing the SELinux boolean names. + * returns NULL string on error + * Exceptions: None + */ +static jobjectArray getBooleanNames(JNIEnv *env, JNIEnv) { + if (isSELinuxDisabled) { + return NULL; + } char **list; - int i, len, ret; - jclass stringClass; - jobjectArray stringArray = NULL; - - if (security_get_boolean_names(&list, &len) == -1) - return NULL; - - stringClass = env->FindClass("java/lang/String"); - stringArray = env->NewObjectArray(len, stringClass, env->NewStringUTF("")); - for (i = 0; i < len; i++) { - jstring obj; - obj = env->NewStringUTF(list[i]); - env->SetObjectArrayElement(stringArray, i, obj); - env->DeleteLocalRef(obj); - free(list[i]); + int len; + if (security_get_boolean_names(&list, &len) == -1) { + return NULL; + } + + jclass stringClass = env->FindClass("java/lang/String"); + jobjectArray stringArray = env->NewObjectArray(len, stringClass, NULL); + for (int i = 0; i < len; i++) { + ScopedLocalRef<jstring> obj(env, env->NewStringUTF(list[i])); + env->SetObjectArrayElement(stringArray, i, obj.get()); + free(list[i]); } free(list); return stringArray; -#else - return NULL; -#endif - } - - /* - * Function: getBooleanValue - * Purpose: Gets the value for the given SELinux boolean name. - * Parameters: - * String: The name of the SELinux boolean. - * Returns: a boolean: (true) boolean is set or (false) it is not. - * Exceptions: None - */ - static jboolean getBooleanValue(JNIEnv *env, jobject clazz, jstring name) { -#ifdef HAVE_SELINUX - if (isSELinuxDisabled) - return false; - - const char *boolean_name; - int ret; - - if (name == NULL) - return false; - boolean_name = env->GetStringUTFChars(name, NULL); - ret = security_get_boolean_active(boolean_name); - env->ReleaseStringUTFChars(name, boolean_name); +} + +/* + * Function: getBooleanValue + * Purpose: Gets the value for the given SELinux boolean name. + * Parameters: + * String: The name of the SELinux boolean. + * Returns: a boolean: (true) boolean is set or (false) it is not. + * Exceptions: None + */ +static jboolean getBooleanValue(JNIEnv *env, jobject, jstring nameStr) { + if (isSELinuxDisabled) { + return false; + } + + if (nameStr == NULL) { + return false; + } + + ScopedUtfChars name(env, nameStr); + int ret = security_get_boolean_active(name.c_str()); + + ALOGV("getBooleanValue(%s) => %d", name.c_str(), ret); return (ret == 1) ? true : false; -#else - return false; -#endif - } - - /* - * Function: setBooleanNames - * Purpose: Sets the value for the given SELinux boolean name. - * Parameters: - * String: The name of the SELinux boolean. - * Boolean: The new value of the SELinux boolean. - * Returns: a boolean indicating whether or not the operation succeeded. - * Exceptions: None - */ - static jboolean setBooleanValue(JNIEnv *env, jobject clazz, jstring name, jboolean value) { -#ifdef HAVE_SELINUX - if (isSELinuxDisabled) - return false; - - const char *boolean_name = NULL; - int ret; - - if (name == NULL) - return false; - boolean_name = env->GetStringUTFChars(name, NULL); - ret = security_set_boolean(boolean_name, (value) ? 1 : 0); - env->ReleaseStringUTFChars(name, boolean_name); - if (ret) - return false; - - if (security_commit_booleans() == -1) - return false; +} + +/* + * Function: setBooleanNames + * Purpose: Sets the value for the given SELinux boolean name. + * Parameters: + * String: The name of the SELinux boolean. + * Boolean: The new value of the SELinux boolean. + * Returns: a boolean indicating whether or not the operation succeeded. + * Exceptions: None + */ +static jboolean setBooleanValue(JNIEnv *env, jobject, jstring nameStr, jboolean value) { + if (isSELinuxDisabled) { + return false; + } + + if (nameStr == NULL) { + return false; + } + + ScopedUtfChars name(env, nameStr); + int ret = security_set_boolean(name.c_str(), value ? 1 : 0); + if (ret) { + return false; + } + + if (security_commit_booleans() == -1) { + return false; + } return true; -#else - return false; -#endif - } - - /* - * Function: checkSELinuxAccess - * Purpose: Check permissions between two security contexts. - * Parameters: scon: subject security context as a string - * tcon: object security context as a string - * tclass: object's security class name as a string - * perm: permission name as a string - * Returns: boolean: (true) if permission was granted, (false) otherwise - * Exceptions: None - */ - static jboolean checkSELinuxAccess(JNIEnv *env, jobject clazz, jstring scon, jstring tcon, jstring tclass, jstring perm) { -#ifdef HAVE_SELINUX - if (isSELinuxDisabled) - return true; - - int accessGranted = -1; - - const char *const_scon, *const_tcon, *mytclass, *myperm; - char *myscon, *mytcon; - - if (scon == NULL || tcon == NULL || tclass == NULL || perm == NULL) - goto bail; - - const_scon = env->GetStringUTFChars(scon, NULL); - const_tcon = env->GetStringUTFChars(tcon, NULL); - mytclass = env->GetStringUTFChars(tclass, NULL); - myperm = env->GetStringUTFChars(perm, NULL); - - // selinux_check_access needs char* for some - myscon = const_cast<char *>(const_scon); - mytcon = const_cast<char *>(const_tcon); - - accessGranted = selinux_check_access(myscon, mytcon, mytclass, myperm, NULL); - - ALOGV("selinux_check_access returned %d", accessGranted); - - env->ReleaseStringUTFChars(scon, const_scon); - env->ReleaseStringUTFChars(tcon, const_tcon); - env->ReleaseStringUTFChars(tclass, mytclass); - env->ReleaseStringUTFChars(perm, myperm); - - bail: +} + +/* + * Function: checkSELinuxAccess + * Purpose: Check permissions between two security contexts. + * Parameters: subjectContextStr: subject security context as a string + * objectContextStr: object security context as a string + * objectClassStr: object's security class name as a string + * permissionStr: permission name as a string + * Returns: boolean: (true) if permission was granted, (false) otherwise + * Exceptions: None + */ +static jboolean checkSELinuxAccess(JNIEnv *env, jobject, jstring subjectContextStr, + jstring objectContextStr, jstring objectClassStr, jstring permissionStr) { + if (isSELinuxDisabled) { + return true; + } + + ScopedUtfChars subjectContext(env, subjectContextStr); + if (subjectContext.c_str() == NULL) { + return false; + } + + ScopedUtfChars objectContext(env, objectContextStr); + if (objectContext.c_str() == NULL) { + return false; + } + + ScopedUtfChars objectClass(env, objectClassStr); + if (objectClass.c_str() == NULL) { + return false; + } + + ScopedUtfChars permission(env, permissionStr); + if (permission.c_str() == NULL) { + return false; + } + + char *tmp1 = const_cast<char *>(subjectContext.c_str()); + char *tmp2 = const_cast<char *>(objectContext.c_str()); + int accessGranted = selinux_check_access(tmp1, tmp2, objectClass.c_str(), permission.c_str(), + NULL); + + ALOGV("checkSELinuxAccess(%s, %s, %s, %s) => %d", subjectContext.c_str(), objectContext.c_str(), + objectClass.c_str(), permission.c_str(), accessGranted); + return (accessGranted == 0) ? true : false; +} -#else - return true; -#endif - } - - /* - * Function: native_restorecon - * Purpose: restore default SELinux security context - * Parameters: pathname: the pathname for the file to be relabeled - * Returns: boolean: (true) file label successfully restored, (false) otherwise - * Exceptions: none - */ - static jboolean native_restorecon(JNIEnv *env, jobject clazz, jstring pathname) { -#ifdef HAVE_SELINUX - if (isSELinuxDisabled) - return true; - - const char *file = const_cast<char *>(env->GetStringUTFChars(pathname, NULL)); - int ret = selinux_android_restorecon(file); - env->ReleaseStringUTFChars(pathname, file); - return (ret == 0); -#else - return true; -#endif - } +/* + * Function: native_restorecon + * Purpose: restore default SELinux security context + * Parameters: pathname: the pathname for the file to be relabeled + * Returns: boolean: (true) file label successfully restored, (false) otherwise + * Exceptions: none + */ +static jboolean native_restorecon(JNIEnv *env, jobject, jstring pathnameStr) { + if (isSELinuxDisabled) { + return true; + } - /* - * JNI registration. - */ - static JNINativeMethod method_table[] = { + ScopedUtfChars pathname(env, pathnameStr); + if (pathname.c_str() == NULL) { + ALOGV("restorecon(%p) => threw exception", pathname); + return false; + } + int ret = selinux_android_restorecon(pathname.c_str()); + ALOGV("restorecon(%s) => %d", pathname.c_str(), ret); + return (ret == 0); +} + +/* + * JNI registration. + */ +static JNINativeMethod method_table[] = { /* name, signature, funcPtr */ { "checkSELinuxAccess" , "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z" , (void*)checkSELinuxAccess }, { "getBooleanNames" , "()[Ljava/lang/String;" , (void*)getBooleanNames }, @@ -515,27 +439,25 @@ namespace android { { "setFileContext" , "(Ljava/lang/String;Ljava/lang/String;)Z" , (void*)setFileCon }, { "setFSCreateContext" , "(Ljava/lang/String;)Z" , (void*)setFSCreateCon }, { "setSELinuxEnforce" , "(Z)Z" , (void*)setSELinuxEnforce}, - }; +}; - static int log_callback(int type, const char *fmt, ...) { +static int log_callback(int type, const char *fmt, ...) { va_list ap; va_start(ap, fmt); LOG_PRI_VA(ANDROID_LOG_ERROR, "SELinux", fmt, ap); va_end(ap); return 0; - } +} - int register_android_os_SELinux(JNIEnv *env) { -#ifdef HAVE_SELINUX +int register_android_os_SELinux(JNIEnv *env) { union selinux_callback cb; cb.func_log = log_callback; selinux_set_callback(SELINUX_CB_LOG, cb); isSELinuxDisabled = (is_selinux_enabled() != 1) ? true : false; -#endif - return AndroidRuntime::registerNativeMethods( - env, "android/os/SELinux", - method_table, NELEM(method_table)); - } + return AndroidRuntime::registerNativeMethods(env, "android/os/SELinux", method_table, + NELEM(method_table)); +} + } diff --git a/core/jni/android_text_format_Time.cpp b/core/jni/android_text_format_Time.cpp index 0a59ae7..aa2c5f39 100644 --- a/core/jni/android_text_format_Time.cpp +++ b/core/jni/android_text_format_Time.cpp @@ -23,6 +23,7 @@ #include "jni.h" #include "utils/misc.h" #include "android_runtime/AndroidRuntime.h" +#include "ScopedStringChars.h" #include "TimeUtils.h" #include <nativehelper/JNIHelp.h> #include <cutils/tztime.h> @@ -71,11 +72,10 @@ static inline bool java2time(JNIEnv* env, Time* t, jobject o) t->t.tm_gmtoff = env->GetLongField(o, g_gmtoffField); bool allDay = env->GetBooleanField(o, g_allDayField); if (allDay && - ((t->t.tm_sec !=0) || (t->t.tm_min != 0) || (t->t.tm_hour != 0))) { - char msg[100]; - sprintf(msg, "allDay is true but sec, min, hour are not 0."); - jniThrowException(env, "java/lang/IllegalArgumentException", msg); - return false; + ((t->t.tm_sec !=0) || (t->t.tm_min != 0) || (t->t.tm_hour != 0))) { + jniThrowException(env, "java/lang/IllegalArgumentException", + "allDay is true but sec, min, hour are not 0."); + return false; } return true; } @@ -313,7 +313,7 @@ static jstring android_text_format_Time_format(JNIEnv* env, jobject This, static jstring android_text_format_Time_toString(JNIEnv* env, jobject This) { Time t; - if (!java2time(env, &t, This)) return env->NewStringUTF("");; + if (!java2time(env, &t, This)) return env->NewStringUTF(""); ACQUIRE_TIMEZONE(This, t) String8 r = t.toString(); @@ -365,32 +365,30 @@ static void android_text_format_Time_set(JNIEnv* env, jobject This, jlong millis // ============================================================================ // Just do this here because it's not worth recreating the strings -static int get_char(JNIEnv* env, const jchar *s, int spos, int mul, - bool *thrown) +static int get_char(JNIEnv* env, const ScopedStringChars& s, int spos, int mul, + bool* thrown) { jchar c = s[spos]; if (c >= '0' && c <= '9') { return (c - '0') * mul; } else { if (!*thrown) { - char msg[100]; - sprintf(msg, "Parse error at pos=%d", spos); - jniThrowException(env, "android/util/TimeFormatException", msg); + jniThrowExceptionFmt(env, "android/util/TimeFormatException", + "Parse error at pos=%d", spos); *thrown = true; } return 0; } } -static bool check_char(JNIEnv* env, const jchar *s, int spos, jchar expected) +static bool check_char(JNIEnv* env, const ScopedStringChars& s, int spos, jchar expected) { jchar c = s[spos]; if (c != expected) { - char msg[100]; - sprintf(msg, "Unexpected character 0x%02x at pos=%d. Expected %c.", c, spos, - expected); - jniThrowException(env, "android/util/TimeFormatException", msg); - return false; + jniThrowExceptionFmt(env, "android/util/TimeFormatException", + "Unexpected character 0x%02x at pos=%d. Expected %c.", + c, spos, expected); + return false; } return true; } @@ -399,20 +397,19 @@ static bool check_char(JNIEnv* env, const jchar *s, int spos, jchar expected) static jboolean android_text_format_Time_parse(JNIEnv* env, jobject This, jstring strObj) { jsize len = env->GetStringLength(strObj); - const jchar *s = env->GetStringChars(strObj, NULL); + if (len < 8) { + jniThrowException(env, "android/util/TimeFormatException", + "String too short -- expected at least 8 characters."); + return false; + } - bool thrown = false; - int n; jboolean inUtc = false; - if (len < 8) { - char msg[100]; - sprintf(msg, "String too short -- expected at least 8 characters."); - jniThrowException(env, "android/util/TimeFormatException", msg); - return false; - } + ScopedStringChars s(env, strObj); // year + int n; + bool thrown = false; n = get_char(env, s, 0, 1000, &thrown); n += get_char(env, s, 1, 100, &thrown); n += get_char(env, s, 2, 10, &thrown); @@ -459,7 +456,7 @@ static jboolean android_text_format_Time_parse(JNIEnv* env, jobject This, jstrin if (len > 15) { // Z if (!check_char(env, s, 15, 'Z')) return false; - inUtc = true; + inUtc = true; } } else { env->SetBooleanField(This, g_allDayField, JNI_TRUE); @@ -472,8 +469,7 @@ static jboolean android_text_format_Time_parse(JNIEnv* env, jobject This, jstrin env->SetIntField(This, g_ydayField, 0); env->SetIntField(This, g_isdstField, -1); env->SetLongField(This, g_gmtoffField, 0); - - env->ReleaseStringChars(strObj, s); + return inUtc; } @@ -482,19 +478,19 @@ static jboolean android_text_format_Time_parse3339(JNIEnv* env, jstring strObj) { jsize len = env->GetStringLength(strObj); - const jchar *s = env->GetStringChars(strObj, NULL); - - bool thrown = false; - int n; - jboolean inUtc = false; - if (len < 10) { jniThrowException(env, "android/util/TimeFormatException", - "Time input is too short; must be at least 10 characters"); + "String too short --- expected at least 10 characters."); return false; } + jboolean inUtc = false; + + ScopedStringChars s(env, strObj); + // year + int n; + bool thrown = false; n = get_char(env, s, 0, 1000, &thrown); n += get_char(env, s, 1, 100, &thrown); n += get_char(env, s, 2, 10, &thrown); @@ -525,28 +521,28 @@ static jboolean android_text_format_Time_parse3339(JNIEnv* env, // T if (!check_char(env, s, 10, 'T')) return false; - env->SetBooleanField(This, g_allDayField, JNI_FALSE); + env->SetBooleanField(This, g_allDayField, JNI_FALSE); // hour n = get_char(env, s, 11, 10, &thrown); n += get_char(env, s, 12, 1, &thrown); if (thrown) return false; - int hour = n; + int hour = n; // env->SetIntField(This, g_hourField, n); - - // : - if (!check_char(env, s, 13, ':')) return false; - // minute + // : + if (!check_char(env, s, 13, ':')) return false; + + // minute n = get_char(env, s, 14, 10, &thrown); n += get_char(env, s, 15, 1, &thrown); if (thrown) return false; - int minute = n; + int minute = n; // env->SetIntField(This, g_minField, n); - // : - if (!check_char(env, s, 16, ':')) return false; + // : + if (!check_char(env, s, 16, ':')) return false; - // second + // second n = get_char(env, s, 17, 10, &thrown); n += get_char(env, s, 18, 1, &thrown); if (thrown) return false; @@ -566,64 +562,63 @@ static jboolean android_text_format_Time_parse3339(JNIEnv* env, if (len > tz_index) { char c = s[tz_index]; - // NOTE: the offset is meant to be subtracted to get from local time - // to UTC. we therefore use 1 for '-' and -1 for '+'. - switch (c) { - case 'Z': - // Zulu time -- UTC - offset = 0; - break; - case '-': + // NOTE: the offset is meant to be subtracted to get from local time + // to UTC. we therefore use 1 for '-' and -1 for '+'. + switch (c) { + case 'Z': + // Zulu time -- UTC + offset = 0; + break; + case '-': offset = 1; - break; - case '+': + break; + case '+': offset = -1; - break; - default: - char msg[100]; - sprintf(msg, "Unexpected character 0x%02x at position %d. Expected + or -", - c, tz_index); - jniThrowException(env, "android/util/TimeFormatException", msg); - return false; - } + break; + default: + jniThrowExceptionFmt(env, "android/util/TimeFormatException", + "Unexpected character 0x%02x at position %d. Expected + or -", + c, tz_index); + return false; + } inUtc = true; - if (offset != 0) { - if (len < tz_index + 6) { - char msg[100]; - sprintf(msg, "Unexpected length; should be %d characters", tz_index + 6); - jniThrowException(env, "android/util/TimeFormatException", msg); - return false; - } - - // hour - n = get_char(env, s, tz_index + 1, 10, &thrown); - n += get_char(env, s, tz_index + 2, 1, &thrown); - if (thrown) return false; - n *= offset; - hour += n; - - // : - if (!check_char(env, s, tz_index + 3, ':')) return false; - - // minute - n = get_char(env, s, tz_index + 4, 10, &thrown); - n += get_char(env, s, tz_index + 5, 1, &thrown); - if (thrown) return false; - n *= offset; - minute += n; - } - } - env->SetIntField(This, g_hourField, hour); + if (offset != 0) { + if (len < tz_index + 6) { + jniThrowExceptionFmt(env, "android/util/TimeFormatException", + "Unexpected length; should be %d characters", + tz_index + 6); + return false; + } + + // hour + n = get_char(env, s, tz_index + 1, 10, &thrown); + n += get_char(env, s, tz_index + 2, 1, &thrown); + if (thrown) return false; + n *= offset; + hour += n; + + // : + if (!check_char(env, s, tz_index + 3, ':')) return false; + + // minute + n = get_char(env, s, tz_index + 4, 10, &thrown); + n += get_char(env, s, tz_index + 5, 1, &thrown); + if (thrown) return false; + n *= offset; + minute += n; + } + } + env->SetIntField(This, g_hourField, hour); env->SetIntField(This, g_minField, minute); - if (offset != 0) { - // we need to normalize after applying the hour and minute offsets - android_text_format_Time_normalize(env, This, false /* use isdst */); - // The timezone is set to UTC in the calling Java code. - } + if (offset != 0) { + // we need to normalize after applying the hour and minute offsets + android_text_format_Time_normalize(env, This, false /* use isdst */); + // The timezone is set to UTC in the calling Java code. + } } else { - env->SetBooleanField(This, g_allDayField, JNI_TRUE); + env->SetBooleanField(This, g_allDayField, JNI_TRUE); env->SetIntField(This, g_hourField, 0); env->SetIntField(This, g_minField, 0); env->SetIntField(This, g_secField, 0); @@ -633,8 +628,7 @@ static jboolean android_text_format_Time_parse3339(JNIEnv* env, env->SetIntField(This, g_ydayField, 0); env->SetIntField(This, g_isdstField, -1); env->SetLongField(This, g_gmtoffField, 0); - - env->ReleaseStringChars(strObj, s); + return inUtc; } diff --git a/core/jni/android_util_EventLog.cpp b/core/jni/android_util_EventLog.cpp index a3981ce..6ee504d 100644 --- a/core/jni/android_util_EventLog.cpp +++ b/core/jni/android_util_EventLog.cpp @@ -71,8 +71,8 @@ static jint android_util_EventLog_writeEvent_String(JNIEnv* env, jobject clazz, // Don't throw NPE -- I feel like it's sort of mean for a logging function // to be all crashy if you pass in NULL -- but make the NULL value explicit. const char *str = value != NULL ? env->GetStringUTFChars(value, NULL) : "NULL"; - jint len = strlen(str); - const int max = sizeof(buf) - sizeof(len) - 2; // Type byte, final newline + uint32_t len = strlen(str); + size_t max = sizeof(buf) - sizeof(len) - 2; // Type byte, final newline if (len > max) len = max; buf[0] = EVENT_TYPE_STRING; diff --git a/core/jni/android_util_StringBlock.cpp b/core/jni/android_util_StringBlock.cpp index 28746ce..463d3c0 100644 --- a/core/jni/android_util_StringBlock.cpp +++ b/core/jni/android_util_StringBlock.cpp @@ -52,6 +52,7 @@ static jint android_content_StringBlock_nativeCreate(JNIEnv* env, jobject clazz, if (osb == NULL || osb->getError() != NO_ERROR) { jniThrowException(env, "java/lang/IllegalArgumentException", NULL); + delete osb; return 0; } diff --git a/core/jni/android_view_DisplayEventReceiver.cpp b/core/jni/android_view_DisplayEventReceiver.cpp index 3d9d005..64fb27b 100644 --- a/core/jni/android_view_DisplayEventReceiver.cpp +++ b/core/jni/android_view_DisplayEventReceiver.cpp @@ -62,7 +62,7 @@ private: bool mWaitingForVsync; virtual int handleEvent(int receiveFd, int events, void* data); - bool readLastVsyncMessage(nsecs_t* outTimestamp, int32_t* id, uint32_t* outCount); + bool processPendingEvents(nsecs_t* outTimestamp, int32_t* id, uint32_t* outCount); void dispatchVsync(nsecs_t timestamp, int32_t id, uint32_t count); void dispatchHotplug(nsecs_t timestamp, int32_t id, bool connected); }; @@ -111,7 +111,7 @@ status_t NativeDisplayEventReceiver::scheduleVsync() { nsecs_t vsyncTimestamp; int32_t vsyncDisplayId; uint32_t vsyncCount; - readLastVsyncMessage(&vsyncTimestamp, &vsyncDisplayId, &vsyncCount); + processPendingEvents(&vsyncTimestamp, &vsyncDisplayId, &vsyncCount); status_t status = mReceiver.requestNextVsync(); if (status) { @@ -141,43 +141,47 @@ int NativeDisplayEventReceiver::handleEvent(int receiveFd, int events, void* dat nsecs_t vsyncTimestamp; int32_t vsyncDisplayId; uint32_t vsyncCount; - if (!readLastVsyncMessage(&vsyncTimestamp, &vsyncDisplayId, &vsyncCount)) { - ALOGV("receiver %p ~ Woke up but there was no vsync pulse!", this); - return 1; // keep the callback, did not obtain a vsync pulse + if (processPendingEvents(&vsyncTimestamp, &vsyncDisplayId, &vsyncCount)) { + ALOGV("receiver %p ~ Vsync pulse: timestamp=%lld, id=%d, count=%d", + this, vsyncTimestamp, vsyncDisplayId, vsyncCount); + mWaitingForVsync = false; + dispatchVsync(vsyncTimestamp, vsyncDisplayId, vsyncCount); } - ALOGV("receiver %p ~ Vsync pulse: timestamp=%lld, id=%d, count=%d", - this, vsyncTimestamp, vsyncDisplayId, vsyncCount); - mWaitingForVsync = false; - - dispatchVsync(vsyncTimestamp, vsyncDisplayId, vsyncCount); return 1; // keep the callback } -bool NativeDisplayEventReceiver::readLastVsyncMessage( +bool NativeDisplayEventReceiver::processPendingEvents( nsecs_t* outTimestamp, int32_t* outId, uint32_t* outCount) { + bool gotVsync = false; DisplayEventReceiver::Event buf[EVENT_BUFFER_SIZE]; ssize_t n; while ((n = mReceiver.getEvents(buf, EVENT_BUFFER_SIZE)) > 0) { ALOGV("receiver %p ~ Read %d events.", this, int(n)); - while (n-- > 0) { - const DisplayEventReceiver::Event& ev = buf[n]; - if (ev.header.type == DisplayEventReceiver::DISPLAY_EVENT_VSYNC) { + for (ssize_t i = 0; i < n; i++) { + const DisplayEventReceiver::Event& ev = buf[i]; + switch (ev.header.type) { + case DisplayEventReceiver::DISPLAY_EVENT_VSYNC: + // Later vsync events will just overwrite the info from earlier + // ones. That's fine, we only care about the most recent. + gotVsync = true; *outTimestamp = ev.header.timestamp; *outId = ev.header.id; *outCount = ev.vsync.count; - return true; // stop at last vsync in the buffer - } - - if (ev.header.type == DisplayEventReceiver::DISPLAY_EVENT_HOTPLUG) { + break; + case DisplayEventReceiver::DISPLAY_EVENT_HOTPLUG: dispatchHotplug(ev.header.timestamp, ev.header.id, ev.hotplug.connected); + break; + default: + ALOGW("receiver %p ~ ignoring unknown event type %#x", this, ev.header.type); + break; } } } if (n < 0) { ALOGW("Failed to get events from display event receiver, status=%d", status_t(n)); } - return false; + return gotVsync; } void NativeDisplayEventReceiver::dispatchVsync(nsecs_t timestamp, int32_t id, uint32_t count) { diff --git a/core/jni/com_android_internal_os_ZygoteInit.cpp b/core/jni/com_android_internal_os_ZygoteInit.cpp index 7e5dede..83d6df1 100644 --- a/core/jni/com_android_internal_os_ZygoteInit.cpp +++ b/core/jni/com_android_internal_os_ZygoteInit.cpp @@ -27,12 +27,8 @@ #include <JNIHelp.h> #include "android_runtime/AndroidRuntime.h" -#include <linux/capability.h> -#include <linux/prctl.h> +#include <sys/capability.h> #include <sys/prctl.h> -extern "C" int capget(cap_user_header_t hdrp, cap_user_data_t datap); -extern "C" int capset(cap_user_header_t hdrp, const cap_user_data_t datap); - namespace android { diff --git a/core/res/res/drawable-en-hdpi/sym_keyboard_delete.png b/core/res/res/drawable-en-hdpi/sym_keyboard_delete.png Binary files differindex 569369e..569369e 100755..100644 --- a/core/res/res/drawable-en-hdpi/sym_keyboard_delete.png +++ b/core/res/res/drawable-en-hdpi/sym_keyboard_delete.png diff --git a/core/res/res/drawable-hdpi/btn_circle_disable.png b/core/res/res/drawable-hdpi/btn_circle_disable.png Binary files differindex 39652a8..39652a8 100755..100644 --- a/core/res/res/drawable-hdpi/btn_circle_disable.png +++ b/core/res/res/drawable-hdpi/btn_circle_disable.png diff --git a/core/res/res/drawable-hdpi/btn_circle_disable_focused.png b/core/res/res/drawable-hdpi/btn_circle_disable_focused.png Binary files differindex 1aa7ffe..1aa7ffe 100755..100644 --- a/core/res/res/drawable-hdpi/btn_circle_disable_focused.png +++ b/core/res/res/drawable-hdpi/btn_circle_disable_focused.png diff --git a/core/res/res/drawable-hdpi/btn_circle_normal.png b/core/res/res/drawable-hdpi/btn_circle_normal.png Binary files differindex 6011219..6011219 100755..100644 --- a/core/res/res/drawable-hdpi/btn_circle_normal.png +++ b/core/res/res/drawable-hdpi/btn_circle_normal.png diff --git a/core/res/res/drawable-hdpi/btn_circle_pressed.png b/core/res/res/drawable-hdpi/btn_circle_pressed.png Binary files differindex 4942e50..4942e50 100755..100644 --- a/core/res/res/drawable-hdpi/btn_circle_pressed.png +++ b/core/res/res/drawable-hdpi/btn_circle_pressed.png diff --git a/core/res/res/drawable-hdpi/btn_circle_selected.png b/core/res/res/drawable-hdpi/btn_circle_selected.png Binary files differindex fe49a40..fe49a40 100755..100644 --- a/core/res/res/drawable-hdpi/btn_circle_selected.png +++ b/core/res/res/drawable-hdpi/btn_circle_selected.png diff --git a/core/res/res/drawable-hdpi/btn_close_normal.png b/core/res/res/drawable-hdpi/btn_close_normal.png Binary files differindex 47f11e5..47f11e5 100755..100644 --- a/core/res/res/drawable-hdpi/btn_close_normal.png +++ b/core/res/res/drawable-hdpi/btn_close_normal.png diff --git a/core/res/res/drawable-hdpi/btn_close_pressed.png b/core/res/res/drawable-hdpi/btn_close_pressed.png Binary files differindex 5b96b4e..5b96b4e 100755..100644 --- a/core/res/res/drawable-hdpi/btn_close_pressed.png +++ b/core/res/res/drawable-hdpi/btn_close_pressed.png diff --git a/core/res/res/drawable-hdpi/btn_close_selected.png b/core/res/res/drawable-hdpi/btn_close_selected.png Binary files differindex e27d684..e27d684 100755..100644 --- a/core/res/res/drawable-hdpi/btn_close_selected.png +++ b/core/res/res/drawable-hdpi/btn_close_selected.png diff --git a/core/res/res/drawable-hdpi/btn_default_normal.9.png b/core/res/res/drawable-hdpi/btn_default_normal.9.png Binary files differindex 803651b..803651b 100755..100644 --- a/core/res/res/drawable-hdpi/btn_default_normal.9.png +++ b/core/res/res/drawable-hdpi/btn_default_normal.9.png diff --git a/core/res/res/drawable-hdpi/btn_default_normal_disable.9.png b/core/res/res/drawable-hdpi/btn_default_normal_disable.9.png Binary files differindex f4f01c7..f4f01c7 100755..100644 --- a/core/res/res/drawable-hdpi/btn_default_normal_disable.9.png +++ b/core/res/res/drawable-hdpi/btn_default_normal_disable.9.png diff --git a/core/res/res/drawable-hdpi/btn_default_normal_disable_focused.9.png b/core/res/res/drawable-hdpi/btn_default_normal_disable_focused.9.png Binary files differindex 5376db2..5376db2 100755..100644 --- a/core/res/res/drawable-hdpi/btn_default_normal_disable_focused.9.png +++ b/core/res/res/drawable-hdpi/btn_default_normal_disable_focused.9.png diff --git a/core/res/res/drawable-hdpi/btn_default_pressed.9.png b/core/res/res/drawable-hdpi/btn_default_pressed.9.png Binary files differindex 4312c27..4312c27 100755..100644 --- a/core/res/res/drawable-hdpi/btn_default_pressed.9.png +++ b/core/res/res/drawable-hdpi/btn_default_pressed.9.png diff --git a/core/res/res/drawable-hdpi/btn_default_selected.9.png b/core/res/res/drawable-hdpi/btn_default_selected.9.png Binary files differindex 06b7790..06b7790 100755..100644 --- a/core/res/res/drawable-hdpi/btn_default_selected.9.png +++ b/core/res/res/drawable-hdpi/btn_default_selected.9.png diff --git a/core/res/res/drawable-hdpi/btn_default_small_normal.9.png b/core/res/res/drawable-hdpi/btn_default_small_normal.9.png Binary files differindex 6d3ea9a..6d3ea9a 100755..100644 --- a/core/res/res/drawable-hdpi/btn_default_small_normal.9.png +++ b/core/res/res/drawable-hdpi/btn_default_small_normal.9.png diff --git a/core/res/res/drawable-hdpi/btn_default_small_normal_disable.9.png b/core/res/res/drawable-hdpi/btn_default_small_normal_disable.9.png Binary files differindex 2646ba0..2646ba0 100755..100644 --- a/core/res/res/drawable-hdpi/btn_default_small_normal_disable.9.png +++ b/core/res/res/drawable-hdpi/btn_default_small_normal_disable.9.png diff --git a/core/res/res/drawable-hdpi/btn_default_small_normal_disable_focused.9.png b/core/res/res/drawable-hdpi/btn_default_small_normal_disable_focused.9.png Binary files differindex 013210c..013210c 100755..100644 --- a/core/res/res/drawable-hdpi/btn_default_small_normal_disable_focused.9.png +++ b/core/res/res/drawable-hdpi/btn_default_small_normal_disable_focused.9.png diff --git a/core/res/res/drawable-hdpi/btn_default_small_pressed.9.png b/core/res/res/drawable-hdpi/btn_default_small_pressed.9.png Binary files differindex 24cefd4..24cefd4 100755..100644 --- a/core/res/res/drawable-hdpi/btn_default_small_pressed.9.png +++ b/core/res/res/drawable-hdpi/btn_default_small_pressed.9.png diff --git a/core/res/res/drawable-hdpi/btn_default_small_selected.9.png b/core/res/res/drawable-hdpi/btn_default_small_selected.9.png Binary files differindex bedbceb..bedbceb 100755..100644 --- a/core/res/res/drawable-hdpi/btn_default_small_selected.9.png +++ b/core/res/res/drawable-hdpi/btn_default_small_selected.9.png diff --git a/core/res/res/drawable-hdpi/btn_dialog_disable.png b/core/res/res/drawable-hdpi/btn_dialog_disable.png Binary files differindex 4ff634b..4ff634b 100755..100644 --- a/core/res/res/drawable-hdpi/btn_dialog_disable.png +++ b/core/res/res/drawable-hdpi/btn_dialog_disable.png diff --git a/core/res/res/drawable-hdpi/btn_dialog_normal.png b/core/res/res/drawable-hdpi/btn_dialog_normal.png Binary files differindex e0cc339..e0cc339 100755..100644 --- a/core/res/res/drawable-hdpi/btn_dialog_normal.png +++ b/core/res/res/drawable-hdpi/btn_dialog_normal.png diff --git a/core/res/res/drawable-hdpi/btn_dialog_pressed.png b/core/res/res/drawable-hdpi/btn_dialog_pressed.png Binary files differindex ed8e008..ed8e008 100755..100644 --- a/core/res/res/drawable-hdpi/btn_dialog_pressed.png +++ b/core/res/res/drawable-hdpi/btn_dialog_pressed.png diff --git a/core/res/res/drawable-hdpi/btn_dialog_selected.png b/core/res/res/drawable-hdpi/btn_dialog_selected.png Binary files differindex 9b1a100..9b1a100 100755..100644 --- a/core/res/res/drawable-hdpi/btn_dialog_selected.png +++ b/core/res/res/drawable-hdpi/btn_dialog_selected.png diff --git a/core/res/res/drawable-hdpi/btn_dropdown_normal.9.png b/core/res/res/drawable-hdpi/btn_dropdown_normal.9.png Binary files differindex f10402f..f10402f 100755..100644 --- a/core/res/res/drawable-hdpi/btn_dropdown_normal.9.png +++ b/core/res/res/drawable-hdpi/btn_dropdown_normal.9.png diff --git a/core/res/res/drawable-hdpi/btn_dropdown_pressed.9.png b/core/res/res/drawable-hdpi/btn_dropdown_pressed.9.png Binary files differindex 366c6e0..366c6e0 100755..100644 --- a/core/res/res/drawable-hdpi/btn_dropdown_pressed.9.png +++ b/core/res/res/drawable-hdpi/btn_dropdown_pressed.9.png diff --git a/core/res/res/drawable-hdpi/btn_dropdown_selected.9.png b/core/res/res/drawable-hdpi/btn_dropdown_selected.9.png Binary files differindex f063c8d..f063c8d 100755..100644 --- a/core/res/res/drawable-hdpi/btn_dropdown_selected.9.png +++ b/core/res/res/drawable-hdpi/btn_dropdown_selected.9.png diff --git a/core/res/res/drawable-hdpi/btn_radio_off.png b/core/res/res/drawable-hdpi/btn_radio_off.png Binary files differindex 48ee2ba..48ee2ba 100755..100644 --- a/core/res/res/drawable-hdpi/btn_radio_off.png +++ b/core/res/res/drawable-hdpi/btn_radio_off.png diff --git a/core/res/res/drawable-hdpi/btn_radio_off_pressed.png b/core/res/res/drawable-hdpi/btn_radio_off_pressed.png Binary files differindex 5a4ad89..5a4ad89 100755..100644 --- a/core/res/res/drawable-hdpi/btn_radio_off_pressed.png +++ b/core/res/res/drawable-hdpi/btn_radio_off_pressed.png diff --git a/core/res/res/drawable-hdpi/btn_radio_off_selected.png b/core/res/res/drawable-hdpi/btn_radio_off_selected.png Binary files differindex 7d5c676..7d5c676 100755..100644 --- a/core/res/res/drawable-hdpi/btn_radio_off_selected.png +++ b/core/res/res/drawable-hdpi/btn_radio_off_selected.png diff --git a/core/res/res/drawable-hdpi/btn_radio_on.png b/core/res/res/drawable-hdpi/btn_radio_on.png Binary files differindex 2472c20..2472c20 100755..100644 --- a/core/res/res/drawable-hdpi/btn_radio_on.png +++ b/core/res/res/drawable-hdpi/btn_radio_on.png diff --git a/core/res/res/drawable-hdpi/btn_radio_on_pressed.png b/core/res/res/drawable-hdpi/btn_radio_on_pressed.png Binary files differindex 98d74ce..98d74ce 100755..100644 --- a/core/res/res/drawable-hdpi/btn_radio_on_pressed.png +++ b/core/res/res/drawable-hdpi/btn_radio_on_pressed.png diff --git a/core/res/res/drawable-hdpi/btn_radio_on_selected.png b/core/res/res/drawable-hdpi/btn_radio_on_selected.png Binary files differindex b6ab46c..b6ab46c 100755..100644 --- a/core/res/res/drawable-hdpi/btn_radio_on_selected.png +++ b/core/res/res/drawable-hdpi/btn_radio_on_selected.png diff --git a/core/res/res/drawable-hdpi/contact_header_bg.9.png b/core/res/res/drawable-hdpi/contact_header_bg.9.png Binary files differindex 981b2e9..981b2e9 100755..100644 --- a/core/res/res/drawable-hdpi/contact_header_bg.9.png +++ b/core/res/res/drawable-hdpi/contact_header_bg.9.png diff --git a/core/res/res/drawable-hdpi/ic_btn_round_more_disabled.png b/core/res/res/drawable-hdpi/ic_btn_round_more_disabled.png Binary files differindex 3f1176f..3f1176f 100755..100644 --- a/core/res/res/drawable-hdpi/ic_btn_round_more_disabled.png +++ b/core/res/res/drawable-hdpi/ic_btn_round_more_disabled.png diff --git a/core/res/res/drawable-hdpi/ic_btn_round_more_normal.png b/core/res/res/drawable-hdpi/ic_btn_round_more_normal.png Binary files differindex 8abda4d..8abda4d 100755..100644 --- a/core/res/res/drawable-hdpi/ic_btn_round_more_normal.png +++ b/core/res/res/drawable-hdpi/ic_btn_round_more_normal.png diff --git a/core/res/res/drawable-hdpi/ic_contact_picture_2.png b/core/res/res/drawable-hdpi/ic_contact_picture_2.png Binary files differindex 5e65276..5e65276 100755..100644 --- a/core/res/res/drawable-hdpi/ic_contact_picture_2.png +++ b/core/res/res/drawable-hdpi/ic_contact_picture_2.png diff --git a/core/res/res/drawable-hdpi/ic_contact_picture_3.png b/core/res/res/drawable-hdpi/ic_contact_picture_3.png Binary files differindex a8ec1e1..a8ec1e1 100755..100644 --- a/core/res/res/drawable-hdpi/ic_contact_picture_3.png +++ b/core/res/res/drawable-hdpi/ic_contact_picture_3.png diff --git a/core/res/res/drawable-hdpi/ic_jog_dial_sound_off.png b/core/res/res/drawable-hdpi/ic_jog_dial_sound_off.png Binary files differindex d73db48..d73db48 100755..100644 --- a/core/res/res/drawable-hdpi/ic_jog_dial_sound_off.png +++ b/core/res/res/drawable-hdpi/ic_jog_dial_sound_off.png diff --git a/core/res/res/drawable-hdpi/ic_jog_dial_sound_on.png b/core/res/res/drawable-hdpi/ic_jog_dial_sound_on.png Binary files differindex 90da6e3..90da6e3 100755..100644 --- a/core/res/res/drawable-hdpi/ic_jog_dial_sound_on.png +++ b/core/res/res/drawable-hdpi/ic_jog_dial_sound_on.png diff --git a/core/res/res/drawable-hdpi/ic_jog_dial_unlock.png b/core/res/res/drawable-hdpi/ic_jog_dial_unlock.png Binary files differindex a9af1af..a9af1af 100755..100644 --- a/core/res/res/drawable-hdpi/ic_jog_dial_unlock.png +++ b/core/res/res/drawable-hdpi/ic_jog_dial_unlock.png diff --git a/core/res/res/drawable-hdpi/ic_settings_language.png b/core/res/res/drawable-hdpi/ic_settings_language.png Binary files differindex f635b2e..f635b2e 100755..100644 --- a/core/res/res/drawable-hdpi/ic_settings_language.png +++ b/core/res/res/drawable-hdpi/ic_settings_language.png diff --git a/core/res/res/drawable-hdpi/jog_dial_arrow_long_left_green.png b/core/res/res/drawable-hdpi/jog_dial_arrow_long_left_green.png Binary files differindex f19811e..f19811e 100755..100644 --- a/core/res/res/drawable-hdpi/jog_dial_arrow_long_left_green.png +++ b/core/res/res/drawable-hdpi/jog_dial_arrow_long_left_green.png diff --git a/core/res/res/drawable-hdpi/jog_dial_arrow_long_left_yellow.png b/core/res/res/drawable-hdpi/jog_dial_arrow_long_left_yellow.png Binary files differindex 0596035..0596035 100755..100644 --- a/core/res/res/drawable-hdpi/jog_dial_arrow_long_left_yellow.png +++ b/core/res/res/drawable-hdpi/jog_dial_arrow_long_left_yellow.png diff --git a/core/res/res/drawable-hdpi/jog_dial_arrow_long_middle_yellow.png b/core/res/res/drawable-hdpi/jog_dial_arrow_long_middle_yellow.png Binary files differindex 3ab2723..3ab2723 100755..100644 --- a/core/res/res/drawable-hdpi/jog_dial_arrow_long_middle_yellow.png +++ b/core/res/res/drawable-hdpi/jog_dial_arrow_long_middle_yellow.png diff --git a/core/res/res/drawable-hdpi/jog_dial_arrow_long_right_red.png b/core/res/res/drawable-hdpi/jog_dial_arrow_long_right_red.png Binary files differindex dd6899f..dd6899f 100755..100644 --- a/core/res/res/drawable-hdpi/jog_dial_arrow_long_right_red.png +++ b/core/res/res/drawable-hdpi/jog_dial_arrow_long_right_red.png diff --git a/core/res/res/drawable-hdpi/jog_dial_arrow_long_right_yellow.png b/core/res/res/drawable-hdpi/jog_dial_arrow_long_right_yellow.png Binary files differindex 27151e0..27151e0 100755..100644 --- a/core/res/res/drawable-hdpi/jog_dial_arrow_long_right_yellow.png +++ b/core/res/res/drawable-hdpi/jog_dial_arrow_long_right_yellow.png diff --git a/core/res/res/drawable-hdpi/jog_dial_arrow_short_left.png b/core/res/res/drawable-hdpi/jog_dial_arrow_short_left.png Binary files differindex 66d49bb..66d49bb 100755..100644 --- a/core/res/res/drawable-hdpi/jog_dial_arrow_short_left.png +++ b/core/res/res/drawable-hdpi/jog_dial_arrow_short_left.png diff --git a/core/res/res/drawable-hdpi/jog_dial_arrow_short_left_and_right.png b/core/res/res/drawable-hdpi/jog_dial_arrow_short_left_and_right.png Binary files differindex c47e176..c47e176 100755..100644 --- a/core/res/res/drawable-hdpi/jog_dial_arrow_short_left_and_right.png +++ b/core/res/res/drawable-hdpi/jog_dial_arrow_short_left_and_right.png diff --git a/core/res/res/drawable-hdpi/jog_dial_arrow_short_right.png b/core/res/res/drawable-hdpi/jog_dial_arrow_short_right.png Binary files differindex f5ea157..f5ea157 100755..100644 --- a/core/res/res/drawable-hdpi/jog_dial_arrow_short_right.png +++ b/core/res/res/drawable-hdpi/jog_dial_arrow_short_right.png diff --git a/core/res/res/drawable-hdpi/jog_dial_bg.png b/core/res/res/drawable-hdpi/jog_dial_bg.png Binary files differindex 8adbfd8..8adbfd8 100755..100644 --- a/core/res/res/drawable-hdpi/jog_dial_bg.png +++ b/core/res/res/drawable-hdpi/jog_dial_bg.png diff --git a/core/res/res/drawable-hdpi/jog_dial_dimple.png b/core/res/res/drawable-hdpi/jog_dial_dimple.png Binary files differindex 0eaea91..0eaea91 100755..100644 --- a/core/res/res/drawable-hdpi/jog_dial_dimple.png +++ b/core/res/res/drawable-hdpi/jog_dial_dimple.png diff --git a/core/res/res/drawable-hdpi/jog_tab_left_confirm_gray.png b/core/res/res/drawable-hdpi/jog_tab_left_confirm_gray.png Binary files differindex 9599fb5..9599fb5 100755..100644 --- a/core/res/res/drawable-hdpi/jog_tab_left_confirm_gray.png +++ b/core/res/res/drawable-hdpi/jog_tab_left_confirm_gray.png diff --git a/core/res/res/drawable-hdpi/jog_tab_left_confirm_green.png b/core/res/res/drawable-hdpi/jog_tab_left_confirm_green.png Binary files differindex 46d9ab3..46d9ab3 100755..100644 --- a/core/res/res/drawable-hdpi/jog_tab_left_confirm_green.png +++ b/core/res/res/drawable-hdpi/jog_tab_left_confirm_green.png diff --git a/core/res/res/drawable-hdpi/jog_tab_left_confirm_red.png b/core/res/res/drawable-hdpi/jog_tab_left_confirm_red.png Binary files differindex 6c0dc0a..6c0dc0a 100755..100644 --- a/core/res/res/drawable-hdpi/jog_tab_left_confirm_red.png +++ b/core/res/res/drawable-hdpi/jog_tab_left_confirm_red.png diff --git a/core/res/res/drawable-hdpi/jog_tab_left_confirm_yellow.png b/core/res/res/drawable-hdpi/jog_tab_left_confirm_yellow.png Binary files differindex 3f9fb8f..3f9fb8f 100755..100644 --- a/core/res/res/drawable-hdpi/jog_tab_left_confirm_yellow.png +++ b/core/res/res/drawable-hdpi/jog_tab_left_confirm_yellow.png diff --git a/core/res/res/drawable-hdpi/jog_tab_left_pressed.png b/core/res/res/drawable-hdpi/jog_tab_left_pressed.png Binary files differindex ec98790..ec98790 100755..100644 --- a/core/res/res/drawable-hdpi/jog_tab_left_pressed.png +++ b/core/res/res/drawable-hdpi/jog_tab_left_pressed.png diff --git a/core/res/res/drawable-hdpi/jog_tab_right_confirm_gray.png b/core/res/res/drawable-hdpi/jog_tab_right_confirm_gray.png Binary files differindex 2861e8d..2861e8d 100755..100644 --- a/core/res/res/drawable-hdpi/jog_tab_right_confirm_gray.png +++ b/core/res/res/drawable-hdpi/jog_tab_right_confirm_gray.png diff --git a/core/res/res/drawable-hdpi/jog_tab_right_confirm_green.png b/core/res/res/drawable-hdpi/jog_tab_right_confirm_green.png Binary files differindex e974bbc..e974bbc 100755..100644 --- a/core/res/res/drawable-hdpi/jog_tab_right_confirm_green.png +++ b/core/res/res/drawable-hdpi/jog_tab_right_confirm_green.png diff --git a/core/res/res/drawable-hdpi/jog_tab_right_confirm_red.png b/core/res/res/drawable-hdpi/jog_tab_right_confirm_red.png Binary files differindex 9647fa6..9647fa6 100755..100644 --- a/core/res/res/drawable-hdpi/jog_tab_right_confirm_red.png +++ b/core/res/res/drawable-hdpi/jog_tab_right_confirm_red.png diff --git a/core/res/res/drawable-hdpi/jog_tab_right_confirm_yellow.png b/core/res/res/drawable-hdpi/jog_tab_right_confirm_yellow.png Binary files differindex ad878e1..ad878e1 100755..100644 --- a/core/res/res/drawable-hdpi/jog_tab_right_confirm_yellow.png +++ b/core/res/res/drawable-hdpi/jog_tab_right_confirm_yellow.png diff --git a/core/res/res/drawable-hdpi/jog_tab_right_pressed.png b/core/res/res/drawable-hdpi/jog_tab_right_pressed.png Binary files differindex 647e802..647e802 100755..100644 --- a/core/res/res/drawable-hdpi/jog_tab_right_pressed.png +++ b/core/res/res/drawable-hdpi/jog_tab_right_pressed.png diff --git a/core/res/res/drawable-hdpi/progressbar_indeterminate1.png b/core/res/res/drawable-hdpi/progressbar_indeterminate1.png Binary files differindex 197b34d..197b34d 100755..100644 --- a/core/res/res/drawable-hdpi/progressbar_indeterminate1.png +++ b/core/res/res/drawable-hdpi/progressbar_indeterminate1.png diff --git a/core/res/res/drawable-hdpi/progressbar_indeterminate2.png b/core/res/res/drawable-hdpi/progressbar_indeterminate2.png Binary files differindex c6cf008..c6cf008 100755..100644 --- a/core/res/res/drawable-hdpi/progressbar_indeterminate2.png +++ b/core/res/res/drawable-hdpi/progressbar_indeterminate2.png diff --git a/core/res/res/drawable-hdpi/progressbar_indeterminate3.png b/core/res/res/drawable-hdpi/progressbar_indeterminate3.png Binary files differindex bf129e0..bf129e0 100755..100644 --- a/core/res/res/drawable-hdpi/progressbar_indeterminate3.png +++ b/core/res/res/drawable-hdpi/progressbar_indeterminate3.png diff --git a/core/res/res/drawable-hdpi/stat_notify_more.png b/core/res/res/drawable-hdpi/stat_notify_more.png Binary files differindex f54b3d4..f54b3d4 100755..100644 --- a/core/res/res/drawable-hdpi/stat_notify_more.png +++ b/core/res/res/drawable-hdpi/stat_notify_more.png diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_10.png b/core/res/res/drawable-hdpi/stat_sys_battery_10.png Binary files differindex 4486553..4486553 100755..100644 --- a/core/res/res/drawable-hdpi/stat_sys_battery_10.png +++ b/core/res/res/drawable-hdpi/stat_sys_battery_10.png diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_20.png b/core/res/res/drawable-hdpi/stat_sys_battery_20.png Binary files differindex c8f9c92..c8f9c92 100755..100644 --- a/core/res/res/drawable-hdpi/stat_sys_battery_20.png +++ b/core/res/res/drawable-hdpi/stat_sys_battery_20.png diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_40.png b/core/res/res/drawable-hdpi/stat_sys_battery_40.png Binary files differindex 441bbfb..441bbfb 100755..100644 --- a/core/res/res/drawable-hdpi/stat_sys_battery_40.png +++ b/core/res/res/drawable-hdpi/stat_sys_battery_40.png diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_60.png b/core/res/res/drawable-hdpi/stat_sys_battery_60.png Binary files differindex d9467ed..d9467ed 100755..100644 --- a/core/res/res/drawable-hdpi/stat_sys_battery_60.png +++ b/core/res/res/drawable-hdpi/stat_sys_battery_60.png diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_80.png b/core/res/res/drawable-hdpi/stat_sys_battery_80.png Binary files differindex e3f4805..e3f4805 100755..100644 --- a/core/res/res/drawable-hdpi/stat_sys_battery_80.png +++ b/core/res/res/drawable-hdpi/stat_sys_battery_80.png diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim1.png b/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim1.png Binary files differindex 997feb3..997feb3 100755..100644 --- a/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim1.png +++ b/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim1.png diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim2.png b/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim2.png Binary files differindex 426a66b..426a66b 100755..100644 --- a/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim2.png +++ b/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim2.png diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim3.png b/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim3.png Binary files differindex 21582ca..21582ca 100755..100644 --- a/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim3.png +++ b/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim3.png diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim4.png b/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim4.png Binary files differindex 8a94763..8a94763 100755..100644 --- a/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim4.png +++ b/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim4.png diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim5.png b/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim5.png Binary files differindex fad0d65..fad0d65 100755..100644 --- a/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim5.png +++ b/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim5.png diff --git a/core/res/res/drawable-hdpi/stat_sys_phone_call.png b/core/res/res/drawable-hdpi/stat_sys_phone_call.png Binary files differindex 9b5f075..9b5f075 100755..100644 --- a/core/res/res/drawable-hdpi/stat_sys_phone_call.png +++ b/core/res/res/drawable-hdpi/stat_sys_phone_call.png diff --git a/core/res/res/drawable-hdpi/stat_sys_phone_call_forward.png b/core/res/res/drawable-hdpi/stat_sys_phone_call_forward.png Binary files differindex 032f8f1..032f8f1 100755..100644 --- a/core/res/res/drawable-hdpi/stat_sys_phone_call_forward.png +++ b/core/res/res/drawable-hdpi/stat_sys_phone_call_forward.png diff --git a/core/res/res/drawable-hdpi/stat_sys_phone_call_on_hold.png b/core/res/res/drawable-hdpi/stat_sys_phone_call_on_hold.png Binary files differindex 5b0a68d..5b0a68d 100755..100644 --- a/core/res/res/drawable-hdpi/stat_sys_phone_call_on_hold.png +++ b/core/res/res/drawable-hdpi/stat_sys_phone_call_on_hold.png diff --git a/core/res/res/drawable-hdpi/stat_sys_r_signal_3_cdma.png b/core/res/res/drawable-hdpi/stat_sys_r_signal_3_cdma.png Binary files differindex a3a6b6c..a3a6b6c 100755..100644 --- a/core/res/res/drawable-hdpi/stat_sys_r_signal_3_cdma.png +++ b/core/res/res/drawable-hdpi/stat_sys_r_signal_3_cdma.png diff --git a/core/res/res/drawable-hdpi/stat_sys_ra_signal_0_cdma.png b/core/res/res/drawable-hdpi/stat_sys_ra_signal_0_cdma.png Binary files differindex a2fa547..a2fa547 100755..100644 --- a/core/res/res/drawable-hdpi/stat_sys_ra_signal_0_cdma.png +++ b/core/res/res/drawable-hdpi/stat_sys_ra_signal_0_cdma.png diff --git a/core/res/res/drawable-hdpi/stat_sys_ra_signal_1_cdma.png b/core/res/res/drawable-hdpi/stat_sys_ra_signal_1_cdma.png Binary files differindex 17c8681..17c8681 100755..100644 --- a/core/res/res/drawable-hdpi/stat_sys_ra_signal_1_cdma.png +++ b/core/res/res/drawable-hdpi/stat_sys_ra_signal_1_cdma.png diff --git a/core/res/res/drawable-hdpi/stat_sys_ra_signal_2_cdma.png b/core/res/res/drawable-hdpi/stat_sys_ra_signal_2_cdma.png Binary files differindex 4a21fb6..4a21fb6 100755..100644 --- a/core/res/res/drawable-hdpi/stat_sys_ra_signal_2_cdma.png +++ b/core/res/res/drawable-hdpi/stat_sys_ra_signal_2_cdma.png diff --git a/core/res/res/drawable-hdpi/stat_sys_ra_signal_4_cdma.png b/core/res/res/drawable-hdpi/stat_sys_ra_signal_4_cdma.png Binary files differindex 5729f7d..5729f7d 100755..100644 --- a/core/res/res/drawable-hdpi/stat_sys_ra_signal_4_cdma.png +++ b/core/res/res/drawable-hdpi/stat_sys_ra_signal_4_cdma.png diff --git a/core/res/res/drawable-hdpi/stat_sys_signal_0_cdma.png b/core/res/res/drawable-hdpi/stat_sys_signal_0_cdma.png Binary files differindex af43e00..af43e00 100755..100644 --- a/core/res/res/drawable-hdpi/stat_sys_signal_0_cdma.png +++ b/core/res/res/drawable-hdpi/stat_sys_signal_0_cdma.png diff --git a/core/res/res/drawable-hdpi/stat_sys_signal_1_cdma.png b/core/res/res/drawable-hdpi/stat_sys_signal_1_cdma.png Binary files differindex 4ffe421..4ffe421 100755..100644 --- a/core/res/res/drawable-hdpi/stat_sys_signal_1_cdma.png +++ b/core/res/res/drawable-hdpi/stat_sys_signal_1_cdma.png diff --git a/core/res/res/drawable-hdpi/stat_sys_signal_2_cdma.png b/core/res/res/drawable-hdpi/stat_sys_signal_2_cdma.png Binary files differindex 6f27b96..6f27b96 100755..100644 --- a/core/res/res/drawable-hdpi/stat_sys_signal_2_cdma.png +++ b/core/res/res/drawable-hdpi/stat_sys_signal_2_cdma.png diff --git a/core/res/res/drawable-hdpi/stat_sys_signal_3_cdma.png b/core/res/res/drawable-hdpi/stat_sys_signal_3_cdma.png Binary files differindex ddc46b0..ddc46b0 100755..100644 --- a/core/res/res/drawable-hdpi/stat_sys_signal_3_cdma.png +++ b/core/res/res/drawable-hdpi/stat_sys_signal_3_cdma.png diff --git a/core/res/res/drawable-hdpi/stat_sys_signal_4_cdma.png b/core/res/res/drawable-hdpi/stat_sys_signal_4_cdma.png Binary files differindex fb3cfe9..fb3cfe9 100755..100644 --- a/core/res/res/drawable-hdpi/stat_sys_signal_4_cdma.png +++ b/core/res/res/drawable-hdpi/stat_sys_signal_4_cdma.png diff --git a/core/res/res/drawable-hdpi/stat_sys_signal_evdo_0.png b/core/res/res/drawable-hdpi/stat_sys_signal_evdo_0.png Binary files differindex b697ca4..b697ca4 100755..100644 --- a/core/res/res/drawable-hdpi/stat_sys_signal_evdo_0.png +++ b/core/res/res/drawable-hdpi/stat_sys_signal_evdo_0.png diff --git a/core/res/res/drawable-hdpi/stat_sys_signal_evdo_1.png b/core/res/res/drawable-hdpi/stat_sys_signal_evdo_1.png Binary files differindex a61de4d..a61de4d 100755..100644 --- a/core/res/res/drawable-hdpi/stat_sys_signal_evdo_1.png +++ b/core/res/res/drawable-hdpi/stat_sys_signal_evdo_1.png diff --git a/core/res/res/drawable-hdpi/stat_sys_signal_evdo_2.png b/core/res/res/drawable-hdpi/stat_sys_signal_evdo_2.png Binary files differindex 62e0393..62e0393 100755..100644 --- a/core/res/res/drawable-hdpi/stat_sys_signal_evdo_2.png +++ b/core/res/res/drawable-hdpi/stat_sys_signal_evdo_2.png diff --git a/core/res/res/drawable-hdpi/stat_sys_signal_evdo_3.png b/core/res/res/drawable-hdpi/stat_sys_signal_evdo_3.png Binary files differindex 09eae9d..09eae9d 100755..100644 --- a/core/res/res/drawable-hdpi/stat_sys_signal_evdo_3.png +++ b/core/res/res/drawable-hdpi/stat_sys_signal_evdo_3.png diff --git a/core/res/res/drawable-hdpi/stat_sys_signal_evdo_4.png b/core/res/res/drawable-hdpi/stat_sys_signal_evdo_4.png Binary files differindex 4012ac5..4012ac5 100755..100644 --- a/core/res/res/drawable-hdpi/stat_sys_signal_evdo_4.png +++ b/core/res/res/drawable-hdpi/stat_sys_signal_evdo_4.png diff --git a/core/res/res/drawable-hdpi/stat_sys_vp_phone_call.png b/core/res/res/drawable-hdpi/stat_sys_vp_phone_call.png Binary files differindex 83e8ead..83e8ead 100755..100644 --- a/core/res/res/drawable-hdpi/stat_sys_vp_phone_call.png +++ b/core/res/res/drawable-hdpi/stat_sys_vp_phone_call.png diff --git a/core/res/res/drawable-hdpi/stat_sys_vp_phone_call_on_hold.png b/core/res/res/drawable-hdpi/stat_sys_vp_phone_call_on_hold.png Binary files differindex 9731c46..9731c46 100755..100644 --- a/core/res/res/drawable-hdpi/stat_sys_vp_phone_call_on_hold.png +++ b/core/res/res/drawable-hdpi/stat_sys_vp_phone_call_on_hold.png diff --git a/core/res/res/drawable-hdpi/sym_keyboard_feedback_delete.png b/core/res/res/drawable-hdpi/sym_keyboard_feedback_delete.png Binary files differindex ca76375..ca76375 100755..100644 --- a/core/res/res/drawable-hdpi/sym_keyboard_feedback_delete.png +++ b/core/res/res/drawable-hdpi/sym_keyboard_feedback_delete.png diff --git a/core/res/res/drawable-hdpi/sym_keyboard_feedback_return.png b/core/res/res/drawable-hdpi/sym_keyboard_feedback_return.png Binary files differindex ae57299..ae57299 100755..100644 --- a/core/res/res/drawable-hdpi/sym_keyboard_feedback_return.png +++ b/core/res/res/drawable-hdpi/sym_keyboard_feedback_return.png diff --git a/core/res/res/drawable-hdpi/sym_keyboard_feedback_shift.png b/core/res/res/drawable-hdpi/sym_keyboard_feedback_shift.png Binary files differindex 4db31c8..4db31c8 100755..100644 --- a/core/res/res/drawable-hdpi/sym_keyboard_feedback_shift.png +++ b/core/res/res/drawable-hdpi/sym_keyboard_feedback_shift.png diff --git a/core/res/res/drawable-hdpi/sym_keyboard_feedback_shift_locked.png b/core/res/res/drawable-hdpi/sym_keyboard_feedback_shift_locked.png Binary files differindex 3fd5659..3fd5659 100755..100644 --- a/core/res/res/drawable-hdpi/sym_keyboard_feedback_shift_locked.png +++ b/core/res/res/drawable-hdpi/sym_keyboard_feedback_shift_locked.png diff --git a/core/res/res/drawable-hdpi/sym_keyboard_feedback_space.png b/core/res/res/drawable-hdpi/sym_keyboard_feedback_space.png Binary files differindex 98266ee..98266ee 100755..100644 --- a/core/res/res/drawable-hdpi/sym_keyboard_feedback_space.png +++ b/core/res/res/drawable-hdpi/sym_keyboard_feedback_space.png diff --git a/core/res/res/drawable-hdpi/sym_keyboard_return.png b/core/res/res/drawable-hdpi/sym_keyboard_return.png Binary files differindex 58505c5..58505c5 100755..100644 --- a/core/res/res/drawable-hdpi/sym_keyboard_return.png +++ b/core/res/res/drawable-hdpi/sym_keyboard_return.png diff --git a/core/res/res/drawable-hdpi/sym_keyboard_shift.png b/core/res/res/drawable-hdpi/sym_keyboard_shift.png Binary files differindex 8149081..8149081 100755..100644 --- a/core/res/res/drawable-hdpi/sym_keyboard_shift.png +++ b/core/res/res/drawable-hdpi/sym_keyboard_shift.png diff --git a/core/res/res/drawable-hdpi/sym_keyboard_shift_locked.png b/core/res/res/drawable-hdpi/sym_keyboard_shift_locked.png Binary files differindex 31ca277..31ca277 100755..100644 --- a/core/res/res/drawable-hdpi/sym_keyboard_shift_locked.png +++ b/core/res/res/drawable-hdpi/sym_keyboard_shift_locked.png diff --git a/core/res/res/drawable-hdpi/sym_keyboard_space.png b/core/res/res/drawable-hdpi/sym_keyboard_space.png Binary files differindex 3e98b30..3e98b30 100755..100644 --- a/core/res/res/drawable-hdpi/sym_keyboard_space.png +++ b/core/res/res/drawable-hdpi/sym_keyboard_space.png diff --git a/core/res/res/drawable-hdpi/textfield_default.9.png b/core/res/res/drawable-hdpi/textfield_default.9.png Binary files differindex f7b6e99..f7b6e99 100755..100644 --- a/core/res/res/drawable-hdpi/textfield_default.9.png +++ b/core/res/res/drawable-hdpi/textfield_default.9.png diff --git a/core/res/res/drawable-hdpi/textfield_disabled.9.png b/core/res/res/drawable-hdpi/textfield_disabled.9.png Binary files differindex 3011502..3011502 100755..100644 --- a/core/res/res/drawable-hdpi/textfield_disabled.9.png +++ b/core/res/res/drawable-hdpi/textfield_disabled.9.png diff --git a/core/res/res/drawable-hdpi/textfield_disabled_selected.9.png b/core/res/res/drawable-hdpi/textfield_disabled_selected.9.png Binary files differindex e0f82eb..e0f82eb 100755..100644 --- a/core/res/res/drawable-hdpi/textfield_disabled_selected.9.png +++ b/core/res/res/drawable-hdpi/textfield_disabled_selected.9.png diff --git a/core/res/res/drawable-hdpi/textfield_selected.9.png b/core/res/res/drawable-hdpi/textfield_selected.9.png Binary files differindex cf2cae3..cf2cae3 100755..100644 --- a/core/res/res/drawable-hdpi/textfield_selected.9.png +++ b/core/res/res/drawable-hdpi/textfield_selected.9.png diff --git a/core/res/res/drawable-ldpi/tab_focus_bar_left.9.png b/core/res/res/drawable-ldpi/tab_focus_bar_left.9.png Binary files differindex 0ee8347..0ee8347 100755..100644 --- a/core/res/res/drawable-ldpi/tab_focus_bar_left.9.png +++ b/core/res/res/drawable-ldpi/tab_focus_bar_left.9.png diff --git a/core/res/res/drawable-ldpi/tab_focus_bar_right.9.png b/core/res/res/drawable-ldpi/tab_focus_bar_right.9.png Binary files differindex 0ee8347..0ee8347 100755..100644 --- a/core/res/res/drawable-ldpi/tab_focus_bar_right.9.png +++ b/core/res/res/drawable-ldpi/tab_focus_bar_right.9.png diff --git a/core/res/res/drawable-ldpi/tab_press_bar_left.9.png b/core/res/res/drawable-ldpi/tab_press_bar_left.9.png Binary files differindex ee129ba..ee129ba 100755..100644 --- a/core/res/res/drawable-ldpi/tab_press_bar_left.9.png +++ b/core/res/res/drawable-ldpi/tab_press_bar_left.9.png diff --git a/core/res/res/drawable-ldpi/tab_press_bar_right.9.png b/core/res/res/drawable-ldpi/tab_press_bar_right.9.png Binary files differindex ee129ba..ee129ba 100755..100644 --- a/core/res/res/drawable-ldpi/tab_press_bar_right.9.png +++ b/core/res/res/drawable-ldpi/tab_press_bar_right.9.png diff --git a/core/res/res/drawable-ldpi/tab_selected_bar_left.9.png b/core/res/res/drawable-ldpi/tab_selected_bar_left.9.png Binary files differindex 03bcc13..03bcc13 100755..100644 --- a/core/res/res/drawable-ldpi/tab_selected_bar_left.9.png +++ b/core/res/res/drawable-ldpi/tab_selected_bar_left.9.png diff --git a/core/res/res/drawable-ldpi/tab_selected_bar_right.9.png b/core/res/res/drawable-ldpi/tab_selected_bar_right.9.png Binary files differindex f228445..f228445 100755..100644 --- a/core/res/res/drawable-ldpi/tab_selected_bar_right.9.png +++ b/core/res/res/drawable-ldpi/tab_selected_bar_right.9.png diff --git a/core/res/res/drawable-mdpi/btn_check_buttonless_off.png b/core/res/res/drawable-mdpi/btn_check_buttonless_off.png Binary files differindex f8972fc..f8972fc 100755..100644 --- a/core/res/res/drawable-mdpi/btn_check_buttonless_off.png +++ b/core/res/res/drawable-mdpi/btn_check_buttonless_off.png diff --git a/core/res/res/drawable-mdpi/btn_check_buttonless_on.png b/core/res/res/drawable-mdpi/btn_check_buttonless_on.png Binary files differindex a10a37a..a10a37a 100755..100644 --- a/core/res/res/drawable-mdpi/btn_check_buttonless_on.png +++ b/core/res/res/drawable-mdpi/btn_check_buttonless_on.png diff --git a/core/res/res/drawable-mdpi/btn_dialog_disable.png b/core/res/res/drawable-mdpi/btn_dialog_disable.png Binary files differindex 3de9895..3de9895 100755..100644 --- a/core/res/res/drawable-mdpi/btn_dialog_disable.png +++ b/core/res/res/drawable-mdpi/btn_dialog_disable.png diff --git a/core/res/res/drawable-mdpi/btn_dialog_normal.png b/core/res/res/drawable-mdpi/btn_dialog_normal.png Binary files differindex eca5828..eca5828 100755..100644 --- a/core/res/res/drawable-mdpi/btn_dialog_normal.png +++ b/core/res/res/drawable-mdpi/btn_dialog_normal.png diff --git a/core/res/res/drawable-mdpi/btn_dialog_pressed.png b/core/res/res/drawable-mdpi/btn_dialog_pressed.png Binary files differindex f9c4551..f9c4551 100755..100644 --- a/core/res/res/drawable-mdpi/btn_dialog_pressed.png +++ b/core/res/res/drawable-mdpi/btn_dialog_pressed.png diff --git a/core/res/res/drawable-mdpi/btn_dialog_selected.png b/core/res/res/drawable-mdpi/btn_dialog_selected.png Binary files differindex b0afd7f..b0afd7f 100755..100644 --- a/core/res/res/drawable-mdpi/btn_dialog_selected.png +++ b/core/res/res/drawable-mdpi/btn_dialog_selected.png diff --git a/core/res/res/drawable-mdpi/btn_erase_default.9.png b/core/res/res/drawable-mdpi/btn_erase_default.9.png Binary files differindex c3bf60c..c3bf60c 100755..100644 --- a/core/res/res/drawable-mdpi/btn_erase_default.9.png +++ b/core/res/res/drawable-mdpi/btn_erase_default.9.png diff --git a/core/res/res/drawable-mdpi/btn_erase_pressed.9.png b/core/res/res/drawable-mdpi/btn_erase_pressed.9.png Binary files differindex 727aafe..727aafe 100755..100644 --- a/core/res/res/drawable-mdpi/btn_erase_pressed.9.png +++ b/core/res/res/drawable-mdpi/btn_erase_pressed.9.png diff --git a/core/res/res/drawable-mdpi/btn_erase_selected.9.png b/core/res/res/drawable-mdpi/btn_erase_selected.9.png Binary files differindex c6bd020..c6bd020 100755..100644 --- a/core/res/res/drawable-mdpi/btn_erase_selected.9.png +++ b/core/res/res/drawable-mdpi/btn_erase_selected.9.png diff --git a/core/res/res/drawable-mdpi/btn_keyboard_key_pressed.9.png b/core/res/res/drawable-mdpi/btn_keyboard_key_pressed.9.png Binary files differindex 39b9314..39b9314 100755..100644 --- a/core/res/res/drawable-mdpi/btn_keyboard_key_pressed.9.png +++ b/core/res/res/drawable-mdpi/btn_keyboard_key_pressed.9.png diff --git a/core/res/res/drawable-mdpi/btn_media_player.9.png b/core/res/res/drawable-mdpi/btn_media_player.9.png Binary files differindex 3ec3f68..3ec3f68 100755..100644 --- a/core/res/res/drawable-mdpi/btn_media_player.9.png +++ b/core/res/res/drawable-mdpi/btn_media_player.9.png diff --git a/core/res/res/drawable-mdpi/btn_media_player_disabled.9.png b/core/res/res/drawable-mdpi/btn_media_player_disabled.9.png Binary files differindex e74335b..e74335b 100755..100644 --- a/core/res/res/drawable-mdpi/btn_media_player_disabled.9.png +++ b/core/res/res/drawable-mdpi/btn_media_player_disabled.9.png diff --git a/core/res/res/drawable-mdpi/btn_media_player_disabled_selected.9.png b/core/res/res/drawable-mdpi/btn_media_player_disabled_selected.9.png Binary files differindex 2c6517f..2c6517f 100755..100644 --- a/core/res/res/drawable-mdpi/btn_media_player_disabled_selected.9.png +++ b/core/res/res/drawable-mdpi/btn_media_player_disabled_selected.9.png diff --git a/core/res/res/drawable-mdpi/btn_media_player_pressed.9.png b/core/res/res/drawable-mdpi/btn_media_player_pressed.9.png Binary files differindex 40bee47..40bee47 100755..100644 --- a/core/res/res/drawable-mdpi/btn_media_player_pressed.9.png +++ b/core/res/res/drawable-mdpi/btn_media_player_pressed.9.png diff --git a/core/res/res/drawable-mdpi/btn_media_player_selected.9.png b/core/res/res/drawable-mdpi/btn_media_player_selected.9.png Binary files differindex 28d809f..28d809f 100755..100644 --- a/core/res/res/drawable-mdpi/btn_media_player_selected.9.png +++ b/core/res/res/drawable-mdpi/btn_media_player_selected.9.png diff --git a/core/res/res/drawable-mdpi/btn_star_big_off.png b/core/res/res/drawable-mdpi/btn_star_big_off.png Binary files differindex 7e9342b..7e9342b 100755..100644 --- a/core/res/res/drawable-mdpi/btn_star_big_off.png +++ b/core/res/res/drawable-mdpi/btn_star_big_off.png diff --git a/core/res/res/drawable-mdpi/btn_star_big_off_disable.png b/core/res/res/drawable-mdpi/btn_star_big_off_disable.png Binary files differindex 066d920..066d920 100755..100644 --- a/core/res/res/drawable-mdpi/btn_star_big_off_disable.png +++ b/core/res/res/drawable-mdpi/btn_star_big_off_disable.png diff --git a/core/res/res/drawable-mdpi/btn_star_big_off_disable_focused.png b/core/res/res/drawable-mdpi/btn_star_big_off_disable_focused.png Binary files differindex 1855d2c..1855d2c 100755..100644 --- a/core/res/res/drawable-mdpi/btn_star_big_off_disable_focused.png +++ b/core/res/res/drawable-mdpi/btn_star_big_off_disable_focused.png diff --git a/core/res/res/drawable-mdpi/btn_star_big_off_pressed.png b/core/res/res/drawable-mdpi/btn_star_big_off_pressed.png Binary files differindex f1b8912..f1b8912 100755..100644 --- a/core/res/res/drawable-mdpi/btn_star_big_off_pressed.png +++ b/core/res/res/drawable-mdpi/btn_star_big_off_pressed.png diff --git a/core/res/res/drawable-mdpi/btn_star_big_off_selected.png b/core/res/res/drawable-mdpi/btn_star_big_off_selected.png Binary files differindex 0be64c4..0be64c4 100755..100644 --- a/core/res/res/drawable-mdpi/btn_star_big_off_selected.png +++ b/core/res/res/drawable-mdpi/btn_star_big_off_selected.png diff --git a/core/res/res/drawable-mdpi/btn_star_big_on.png b/core/res/res/drawable-mdpi/btn_star_big_on.png Binary files differindex a9bdb05..a9bdb05 100755..100644 --- a/core/res/res/drawable-mdpi/btn_star_big_on.png +++ b/core/res/res/drawable-mdpi/btn_star_big_on.png diff --git a/core/res/res/drawable-mdpi/btn_star_big_on_disable.png b/core/res/res/drawable-mdpi/btn_star_big_on_disable.png Binary files differindex 5e65a2f..5e65a2f 100755..100644 --- a/core/res/res/drawable-mdpi/btn_star_big_on_disable.png +++ b/core/res/res/drawable-mdpi/btn_star_big_on_disable.png diff --git a/core/res/res/drawable-mdpi/btn_star_big_on_disable_focused.png b/core/res/res/drawable-mdpi/btn_star_big_on_disable_focused.png Binary files differindex de57571..de57571 100755..100644 --- a/core/res/res/drawable-mdpi/btn_star_big_on_disable_focused.png +++ b/core/res/res/drawable-mdpi/btn_star_big_on_disable_focused.png diff --git a/core/res/res/drawable-mdpi/btn_star_big_on_pressed.png b/core/res/res/drawable-mdpi/btn_star_big_on_pressed.png Binary files differindex 159a84b..159a84b 100755..100644 --- a/core/res/res/drawable-mdpi/btn_star_big_on_pressed.png +++ b/core/res/res/drawable-mdpi/btn_star_big_on_pressed.png diff --git a/core/res/res/drawable-mdpi/btn_star_big_on_selected.png b/core/res/res/drawable-mdpi/btn_star_big_on_selected.png Binary files differindex 0592d51..0592d51 100755..100644 --- a/core/res/res/drawable-mdpi/btn_star_big_on_selected.png +++ b/core/res/res/drawable-mdpi/btn_star_big_on_selected.png diff --git a/core/res/res/drawable-mdpi/dialog_divider_horizontal_light.9.png b/core/res/res/drawable-mdpi/dialog_divider_horizontal_light.9.png Binary files differindex b69619b..b69619b 100755..100644 --- a/core/res/res/drawable-mdpi/dialog_divider_horizontal_light.9.png +++ b/core/res/res/drawable-mdpi/dialog_divider_horizontal_light.9.png diff --git a/core/res/res/drawable-mdpi/frame_gallery_thumb.9.png b/core/res/res/drawable-mdpi/frame_gallery_thumb.9.png Binary files differindex 804f6f3..804f6f3 100755..100644 --- a/core/res/res/drawable-mdpi/frame_gallery_thumb.9.png +++ b/core/res/res/drawable-mdpi/frame_gallery_thumb.9.png diff --git a/core/res/res/drawable-mdpi/frame_gallery_thumb_pressed.9.png b/core/res/res/drawable-mdpi/frame_gallery_thumb_pressed.9.png Binary files differindex e1ffa06..e1ffa06 100755..100644 --- a/core/res/res/drawable-mdpi/frame_gallery_thumb_pressed.9.png +++ b/core/res/res/drawable-mdpi/frame_gallery_thumb_pressed.9.png diff --git a/core/res/res/drawable-mdpi/frame_gallery_thumb_selected.9.png b/core/res/res/drawable-mdpi/frame_gallery_thumb_selected.9.png Binary files differindex 8bae932..8bae932 100755..100644 --- a/core/res/res/drawable-mdpi/frame_gallery_thumb_selected.9.png +++ b/core/res/res/drawable-mdpi/frame_gallery_thumb_selected.9.png diff --git a/core/res/res/drawable-mdpi/gallery_selected_default.9.png b/core/res/res/drawable-mdpi/gallery_selected_default.9.png Binary files differindex 22122b2..22122b2 100755..100644 --- a/core/res/res/drawable-mdpi/gallery_selected_default.9.png +++ b/core/res/res/drawable-mdpi/gallery_selected_default.9.png diff --git a/core/res/res/drawable-mdpi/gallery_selected_focused.9.png b/core/res/res/drawable-mdpi/gallery_selected_focused.9.png Binary files differindex 1332745..1332745 100755..100644 --- a/core/res/res/drawable-mdpi/gallery_selected_focused.9.png +++ b/core/res/res/drawable-mdpi/gallery_selected_focused.9.png diff --git a/core/res/res/drawable-mdpi/gallery_selected_pressed.9.png b/core/res/res/drawable-mdpi/gallery_selected_pressed.9.png Binary files differindex 306e543..306e543 100755..100644 --- a/core/res/res/drawable-mdpi/gallery_selected_pressed.9.png +++ b/core/res/res/drawable-mdpi/gallery_selected_pressed.9.png diff --git a/core/res/res/drawable-mdpi/gallery_unselected_default.9.png b/core/res/res/drawable-mdpi/gallery_unselected_default.9.png Binary files differindex 0df06fa..0df06fa 100755..100644 --- a/core/res/res/drawable-mdpi/gallery_unselected_default.9.png +++ b/core/res/res/drawable-mdpi/gallery_unselected_default.9.png diff --git a/core/res/res/drawable-mdpi/ic_dialog_info.png b/core/res/res/drawable-mdpi/ic_dialog_info.png Binary files differindex e8b0229..e8b0229 100755..100644 --- a/core/res/res/drawable-mdpi/ic_dialog_info.png +++ b/core/res/res/drawable-mdpi/ic_dialog_info.png diff --git a/core/res/res/drawable-mdpi/ic_dialog_time.png b/core/res/res/drawable-mdpi/ic_dialog_time.png Binary files differindex dffec29..dffec29 100755..100644 --- a/core/res/res/drawable-mdpi/ic_dialog_time.png +++ b/core/res/res/drawable-mdpi/ic_dialog_time.png diff --git a/core/res/res/drawable-mdpi/ic_jog_dial_unlock.png b/core/res/res/drawable-mdpi/ic_jog_dial_unlock.png Binary files differindex e697d91..e697d91 100755..100644 --- a/core/res/res/drawable-mdpi/ic_jog_dial_unlock.png +++ b/core/res/res/drawable-mdpi/ic_jog_dial_unlock.png diff --git a/core/res/res/drawable-mdpi/ic_lock_idle_charging.png b/core/res/res/drawable-mdpi/ic_lock_idle_charging.png Binary files differindex 20d6320..20d6320 100755..100644 --- a/core/res/res/drawable-mdpi/ic_lock_idle_charging.png +++ b/core/res/res/drawable-mdpi/ic_lock_idle_charging.png diff --git a/core/res/res/drawable-mdpi/ic_lock_idle_lock.png b/core/res/res/drawable-mdpi/ic_lock_idle_lock.png Binary files differindex 0206aee..0206aee 100755..100644 --- a/core/res/res/drawable-mdpi/ic_lock_idle_lock.png +++ b/core/res/res/drawable-mdpi/ic_lock_idle_lock.png diff --git a/core/res/res/drawable-mdpi/ic_lock_idle_low_battery.png b/core/res/res/drawable-mdpi/ic_lock_idle_low_battery.png Binary files differindex bb96782..bb96782 100755..100644 --- a/core/res/res/drawable-mdpi/ic_lock_idle_low_battery.png +++ b/core/res/res/drawable-mdpi/ic_lock_idle_low_battery.png diff --git a/core/res/res/drawable-mdpi/ic_media_video_poster.png b/core/res/res/drawable-mdpi/ic_media_video_poster.png Binary files differindex f457f23..f457f23 100755..100644 --- a/core/res/res/drawable-mdpi/ic_media_video_poster.png +++ b/core/res/res/drawable-mdpi/ic_media_video_poster.png diff --git a/core/res/res/drawable-mdpi/ic_menu_add.png b/core/res/res/drawable-mdpi/ic_menu_add.png Binary files differindex 361c7c4..361c7c4 100755..100644 --- a/core/res/res/drawable-mdpi/ic_menu_add.png +++ b/core/res/res/drawable-mdpi/ic_menu_add.png diff --git a/core/res/res/drawable-mdpi/ic_menu_agenda.png b/core/res/res/drawable-mdpi/ic_menu_agenda.png Binary files differindex c63a12bf..c63a12bf 100755..100644 --- a/core/res/res/drawable-mdpi/ic_menu_agenda.png +++ b/core/res/res/drawable-mdpi/ic_menu_agenda.png diff --git a/core/res/res/drawable-mdpi/ic_menu_allfriends.png b/core/res/res/drawable-mdpi/ic_menu_allfriends.png Binary files differindex 45256d1..45256d1 100755..100644 --- a/core/res/res/drawable-mdpi/ic_menu_allfriends.png +++ b/core/res/res/drawable-mdpi/ic_menu_allfriends.png diff --git a/core/res/res/drawable-mdpi/ic_menu_camera.png b/core/res/res/drawable-mdpi/ic_menu_camera.png Binary files differindex f8cf93c..f8cf93c 100755..100644 --- a/core/res/res/drawable-mdpi/ic_menu_camera.png +++ b/core/res/res/drawable-mdpi/ic_menu_camera.png diff --git a/core/res/res/drawable-mdpi/ic_menu_crop.png b/core/res/res/drawable-mdpi/ic_menu_crop.png Binary files differindex 30e40cf..30e40cf 100755..100644 --- a/core/res/res/drawable-mdpi/ic_menu_crop.png +++ b/core/res/res/drawable-mdpi/ic_menu_crop.png diff --git a/core/res/res/drawable-mdpi/ic_menu_day.png b/core/res/res/drawable-mdpi/ic_menu_day.png Binary files differindex 88bc348..88bc348 100755..100644 --- a/core/res/res/drawable-mdpi/ic_menu_day.png +++ b/core/res/res/drawable-mdpi/ic_menu_day.png diff --git a/core/res/res/drawable-mdpi/ic_menu_delete.png b/core/res/res/drawable-mdpi/ic_menu_delete.png Binary files differindex e2c8700..e2c8700 100755..100644 --- a/core/res/res/drawable-mdpi/ic_menu_delete.png +++ b/core/res/res/drawable-mdpi/ic_menu_delete.png diff --git a/core/res/res/drawable-mdpi/ic_menu_directions.png b/core/res/res/drawable-mdpi/ic_menu_directions.png Binary files differindex d10e0b1..d10e0b1 100755..100644 --- a/core/res/res/drawable-mdpi/ic_menu_directions.png +++ b/core/res/res/drawable-mdpi/ic_menu_directions.png diff --git a/core/res/res/drawable-mdpi/ic_menu_edit.png b/core/res/res/drawable-mdpi/ic_menu_edit.png Binary files differindex d0314e9..d0314e9 100755..100644 --- a/core/res/res/drawable-mdpi/ic_menu_edit.png +++ b/core/res/res/drawable-mdpi/ic_menu_edit.png diff --git a/core/res/res/drawable-mdpi/ic_menu_gallery.png b/core/res/res/drawable-mdpi/ic_menu_gallery.png Binary files differindex d3a0200..d3a0200 100755..100644 --- a/core/res/res/drawable-mdpi/ic_menu_gallery.png +++ b/core/res/res/drawable-mdpi/ic_menu_gallery.png diff --git a/core/res/res/drawable-mdpi/ic_menu_info_details.png b/core/res/res/drawable-mdpi/ic_menu_info_details.png Binary files differindex 18b15b5..18b15b5 100755..100644 --- a/core/res/res/drawable-mdpi/ic_menu_info_details.png +++ b/core/res/res/drawable-mdpi/ic_menu_info_details.png diff --git a/core/res/res/drawable-mdpi/ic_menu_manage.png b/core/res/res/drawable-mdpi/ic_menu_manage.png Binary files differindex 8d3a9fa..8d3a9fa 100755..100644 --- a/core/res/res/drawable-mdpi/ic_menu_manage.png +++ b/core/res/res/drawable-mdpi/ic_menu_manage.png diff --git a/core/res/res/drawable-mdpi/ic_menu_month.png b/core/res/res/drawable-mdpi/ic_menu_month.png Binary files differindex ff201df..ff201df 100755..100644 --- a/core/res/res/drawable-mdpi/ic_menu_month.png +++ b/core/res/res/drawable-mdpi/ic_menu_month.png diff --git a/core/res/res/drawable-mdpi/ic_menu_my_calendar.png b/core/res/res/drawable-mdpi/ic_menu_my_calendar.png Binary files differindex 991dfb0..991dfb0 100755..100644 --- a/core/res/res/drawable-mdpi/ic_menu_my_calendar.png +++ b/core/res/res/drawable-mdpi/ic_menu_my_calendar.png diff --git a/core/res/res/drawable-mdpi/ic_menu_mylocation.png b/core/res/res/drawable-mdpi/ic_menu_mylocation.png Binary files differindex 2a61a97..2a61a97 100755..100644 --- a/core/res/res/drawable-mdpi/ic_menu_mylocation.png +++ b/core/res/res/drawable-mdpi/ic_menu_mylocation.png diff --git a/core/res/res/drawable-mdpi/ic_menu_rotate.png b/core/res/res/drawable-mdpi/ic_menu_rotate.png Binary files differindex 35fa56d..35fa56d 100755..100644 --- a/core/res/res/drawable-mdpi/ic_menu_rotate.png +++ b/core/res/res/drawable-mdpi/ic_menu_rotate.png diff --git a/core/res/res/drawable-mdpi/ic_menu_search.png b/core/res/res/drawable-mdpi/ic_menu_search.png Binary files differindex 5d3155e..5d3155e 100755..100644 --- a/core/res/res/drawable-mdpi/ic_menu_search.png +++ b/core/res/res/drawable-mdpi/ic_menu_search.png diff --git a/core/res/res/drawable-mdpi/ic_menu_search_holo_dark.png b/core/res/res/drawable-mdpi/ic_menu_search_holo_dark.png Binary files differindex 5d3155e..5d3155e 100755..100644 --- a/core/res/res/drawable-mdpi/ic_menu_search_holo_dark.png +++ b/core/res/res/drawable-mdpi/ic_menu_search_holo_dark.png diff --git a/core/res/res/drawable-mdpi/ic_menu_send.png b/core/res/res/drawable-mdpi/ic_menu_send.png Binary files differindex 06b4717..06b4717 100755..100644 --- a/core/res/res/drawable-mdpi/ic_menu_send.png +++ b/core/res/res/drawable-mdpi/ic_menu_send.png diff --git a/core/res/res/drawable-mdpi/ic_menu_set_as.png b/core/res/res/drawable-mdpi/ic_menu_set_as.png Binary files differindex 98cc305..98cc305 100755..100644 --- a/core/res/res/drawable-mdpi/ic_menu_set_as.png +++ b/core/res/res/drawable-mdpi/ic_menu_set_as.png diff --git a/core/res/res/drawable-mdpi/ic_menu_share.png b/core/res/res/drawable-mdpi/ic_menu_share.png Binary files differindex d89ca5f..d89ca5f 100755..100644 --- a/core/res/res/drawable-mdpi/ic_menu_share.png +++ b/core/res/res/drawable-mdpi/ic_menu_share.png diff --git a/core/res/res/drawable-mdpi/ic_menu_sort_by_size.png b/core/res/res/drawable-mdpi/ic_menu_sort_by_size.png Binary files differindex 19e8d1b..19e8d1b 100755..100644 --- a/core/res/res/drawable-mdpi/ic_menu_sort_by_size.png +++ b/core/res/res/drawable-mdpi/ic_menu_sort_by_size.png diff --git a/core/res/res/drawable-mdpi/ic_menu_star.png b/core/res/res/drawable-mdpi/ic_menu_star.png Binary files differindex 0c22fe8..0c22fe8 100755..100644 --- a/core/res/res/drawable-mdpi/ic_menu_star.png +++ b/core/res/res/drawable-mdpi/ic_menu_star.png diff --git a/core/res/res/drawable-mdpi/ic_menu_today.png b/core/res/res/drawable-mdpi/ic_menu_today.png Binary files differindex 8c248ae..8c248ae 100755..100644 --- a/core/res/res/drawable-mdpi/ic_menu_today.png +++ b/core/res/res/drawable-mdpi/ic_menu_today.png diff --git a/core/res/res/drawable-mdpi/ic_menu_upload.png b/core/res/res/drawable-mdpi/ic_menu_upload.png Binary files differindex 9e8459a..9e8459a 100755..100644 --- a/core/res/res/drawable-mdpi/ic_menu_upload.png +++ b/core/res/res/drawable-mdpi/ic_menu_upload.png diff --git a/core/res/res/drawable-mdpi/ic_menu_upload_you_tube.png b/core/res/res/drawable-mdpi/ic_menu_upload_you_tube.png Binary files differindex a67c409..a67c409 100755..100644 --- a/core/res/res/drawable-mdpi/ic_menu_upload_you_tube.png +++ b/core/res/res/drawable-mdpi/ic_menu_upload_you_tube.png diff --git a/core/res/res/drawable-mdpi/ic_menu_view.png b/core/res/res/drawable-mdpi/ic_menu_view.png Binary files differindex 082810d..082810d 100755..100644 --- a/core/res/res/drawable-mdpi/ic_menu_view.png +++ b/core/res/res/drawable-mdpi/ic_menu_view.png diff --git a/core/res/res/drawable-mdpi/ic_menu_week.png b/core/res/res/drawable-mdpi/ic_menu_week.png Binary files differindex e11e5f1..e11e5f1 100755..100644 --- a/core/res/res/drawable-mdpi/ic_menu_week.png +++ b/core/res/res/drawable-mdpi/ic_menu_week.png diff --git a/core/res/res/drawable-mdpi/ic_popup_reminder.png b/core/res/res/drawable-mdpi/ic_popup_reminder.png Binary files differindex af15279..af15279 100755..100644 --- a/core/res/res/drawable-mdpi/ic_popup_reminder.png +++ b/core/res/res/drawable-mdpi/ic_popup_reminder.png diff --git a/core/res/res/drawable-mdpi/ic_search_category_default.png b/core/res/res/drawable-mdpi/ic_search_category_default.png Binary files differindex 94446db..94446db 100755..100644 --- a/core/res/res/drawable-mdpi/ic_search_category_default.png +++ b/core/res/res/drawable-mdpi/ic_search_category_default.png diff --git a/core/res/res/drawable-mdpi/indicator_input_error.png b/core/res/res/drawable-mdpi/indicator_input_error.png Binary files differindex 775e417..775e417 100755..100644 --- a/core/res/res/drawable-mdpi/indicator_input_error.png +++ b/core/res/res/drawable-mdpi/indicator_input_error.png diff --git a/core/res/res/drawable-mdpi/jog_dial_arrow_long_left_green.png b/core/res/res/drawable-mdpi/jog_dial_arrow_long_left_green.png Binary files differindex 334a8e0..334a8e0 100755..100644 --- a/core/res/res/drawable-mdpi/jog_dial_arrow_long_left_green.png +++ b/core/res/res/drawable-mdpi/jog_dial_arrow_long_left_green.png diff --git a/core/res/res/drawable-mdpi/jog_dial_arrow_long_left_yellow.png b/core/res/res/drawable-mdpi/jog_dial_arrow_long_left_yellow.png Binary files differindex 2e011ca..2e011ca 100755..100644 --- a/core/res/res/drawable-mdpi/jog_dial_arrow_long_left_yellow.png +++ b/core/res/res/drawable-mdpi/jog_dial_arrow_long_left_yellow.png diff --git a/core/res/res/drawable-mdpi/jog_dial_arrow_long_middle_yellow.png b/core/res/res/drawable-mdpi/jog_dial_arrow_long_middle_yellow.png Binary files differindex 323745e..323745e 100755..100644 --- a/core/res/res/drawable-mdpi/jog_dial_arrow_long_middle_yellow.png +++ b/core/res/res/drawable-mdpi/jog_dial_arrow_long_middle_yellow.png diff --git a/core/res/res/drawable-mdpi/jog_dial_arrow_long_right_red.png b/core/res/res/drawable-mdpi/jog_dial_arrow_long_right_red.png Binary files differindex 1e97c9a..1e97c9a 100755..100644 --- a/core/res/res/drawable-mdpi/jog_dial_arrow_long_right_red.png +++ b/core/res/res/drawable-mdpi/jog_dial_arrow_long_right_red.png diff --git a/core/res/res/drawable-mdpi/jog_dial_arrow_long_right_yellow.png b/core/res/res/drawable-mdpi/jog_dial_arrow_long_right_yellow.png Binary files differindex 3536e58..3536e58 100755..100644 --- a/core/res/res/drawable-mdpi/jog_dial_arrow_long_right_yellow.png +++ b/core/res/res/drawable-mdpi/jog_dial_arrow_long_right_yellow.png diff --git a/core/res/res/drawable-mdpi/jog_dial_arrow_short_left.png b/core/res/res/drawable-mdpi/jog_dial_arrow_short_left.png Binary files differindex 4a4ab3ae..4a4ab3ae 100755..100644 --- a/core/res/res/drawable-mdpi/jog_dial_arrow_short_left.png +++ b/core/res/res/drawable-mdpi/jog_dial_arrow_short_left.png diff --git a/core/res/res/drawable-mdpi/jog_dial_arrow_short_left_and_right.png b/core/res/res/drawable-mdpi/jog_dial_arrow_short_left_and_right.png Binary files differindex 987cfa7..987cfa7 100755..100644 --- a/core/res/res/drawable-mdpi/jog_dial_arrow_short_left_and_right.png +++ b/core/res/res/drawable-mdpi/jog_dial_arrow_short_left_and_right.png diff --git a/core/res/res/drawable-mdpi/jog_dial_arrow_short_right.png b/core/res/res/drawable-mdpi/jog_dial_arrow_short_right.png Binary files differindex ee79875..ee79875 100755..100644 --- a/core/res/res/drawable-mdpi/jog_dial_arrow_short_right.png +++ b/core/res/res/drawable-mdpi/jog_dial_arrow_short_right.png diff --git a/core/res/res/drawable-mdpi/jog_dial_bg.png b/core/res/res/drawable-mdpi/jog_dial_bg.png Binary files differindex 2f8f24d..2f8f24d 100755..100644 --- a/core/res/res/drawable-mdpi/jog_dial_bg.png +++ b/core/res/res/drawable-mdpi/jog_dial_bg.png diff --git a/core/res/res/drawable-mdpi/jog_dial_dimple.png b/core/res/res/drawable-mdpi/jog_dial_dimple.png Binary files differindex 85d3a43..85d3a43 100755..100644 --- a/core/res/res/drawable-mdpi/jog_dial_dimple.png +++ b/core/res/res/drawable-mdpi/jog_dial_dimple.png diff --git a/core/res/res/drawable-mdpi/jog_tab_left_confirm_gray.png b/core/res/res/drawable-mdpi/jog_tab_left_confirm_gray.png Binary files differindex 3dce451..3dce451 100755..100644 --- a/core/res/res/drawable-mdpi/jog_tab_left_confirm_gray.png +++ b/core/res/res/drawable-mdpi/jog_tab_left_confirm_gray.png diff --git a/core/res/res/drawable-mdpi/jog_tab_left_confirm_green.png b/core/res/res/drawable-mdpi/jog_tab_left_confirm_green.png Binary files differindex 829b146..829b146 100755..100644 --- a/core/res/res/drawable-mdpi/jog_tab_left_confirm_green.png +++ b/core/res/res/drawable-mdpi/jog_tab_left_confirm_green.png diff --git a/core/res/res/drawable-mdpi/jog_tab_left_confirm_yellow.png b/core/res/res/drawable-mdpi/jog_tab_left_confirm_yellow.png Binary files differindex 5a29262..5a29262 100755..100644 --- a/core/res/res/drawable-mdpi/jog_tab_left_confirm_yellow.png +++ b/core/res/res/drawable-mdpi/jog_tab_left_confirm_yellow.png diff --git a/core/res/res/drawable-mdpi/jog_tab_left_normal.png b/core/res/res/drawable-mdpi/jog_tab_left_normal.png Binary files differindex eb91e97..eb91e97 100755..100644 --- a/core/res/res/drawable-mdpi/jog_tab_left_normal.png +++ b/core/res/res/drawable-mdpi/jog_tab_left_normal.png diff --git a/core/res/res/drawable-mdpi/jog_tab_left_pressed.png b/core/res/res/drawable-mdpi/jog_tab_left_pressed.png Binary files differindex 9951992..9951992 100755..100644 --- a/core/res/res/drawable-mdpi/jog_tab_left_pressed.png +++ b/core/res/res/drawable-mdpi/jog_tab_left_pressed.png diff --git a/core/res/res/drawable-mdpi/jog_tab_right_confirm_gray.png b/core/res/res/drawable-mdpi/jog_tab_right_confirm_gray.png Binary files differindex d446480..d446480 100755..100644 --- a/core/res/res/drawable-mdpi/jog_tab_right_confirm_gray.png +++ b/core/res/res/drawable-mdpi/jog_tab_right_confirm_gray.png diff --git a/core/res/res/drawable-mdpi/jog_tab_right_confirm_green.png b/core/res/res/drawable-mdpi/jog_tab_right_confirm_green.png Binary files differindex 96d7acb..96d7acb 100755..100644 --- a/core/res/res/drawable-mdpi/jog_tab_right_confirm_green.png +++ b/core/res/res/drawable-mdpi/jog_tab_right_confirm_green.png diff --git a/core/res/res/drawable-mdpi/jog_tab_right_confirm_yellow.png b/core/res/res/drawable-mdpi/jog_tab_right_confirm_yellow.png Binary files differindex 8224c38..8224c38 100755..100644 --- a/core/res/res/drawable-mdpi/jog_tab_right_confirm_yellow.png +++ b/core/res/res/drawable-mdpi/jog_tab_right_confirm_yellow.png diff --git a/core/res/res/drawable-mdpi/jog_tab_right_normal.png b/core/res/res/drawable-mdpi/jog_tab_right_normal.png Binary files differindex f2113f2..f2113f2 100755..100644 --- a/core/res/res/drawable-mdpi/jog_tab_right_normal.png +++ b/core/res/res/drawable-mdpi/jog_tab_right_normal.png diff --git a/core/res/res/drawable-mdpi/jog_tab_right_pressed.png b/core/res/res/drawable-mdpi/jog_tab_right_pressed.png Binary files differindex 65cd51e..65cd51e 100755..100644 --- a/core/res/res/drawable-mdpi/jog_tab_right_pressed.png +++ b/core/res/res/drawable-mdpi/jog_tab_right_pressed.png diff --git a/core/res/res/drawable-mdpi/keyboard_key_feedback_more_background.9.png b/core/res/res/drawable-mdpi/keyboard_key_feedback_more_background.9.png Binary files differindex 29aa285..29aa285 100755..100644 --- a/core/res/res/drawable-mdpi/keyboard_key_feedback_more_background.9.png +++ b/core/res/res/drawable-mdpi/keyboard_key_feedback_more_background.9.png diff --git a/core/res/res/drawable-mdpi/numberpicker_down_disabled.9.png b/core/res/res/drawable-mdpi/numberpicker_down_disabled.9.png Binary files differindex 596294b..596294b 100755..100644 --- a/core/res/res/drawable-mdpi/numberpicker_down_disabled.9.png +++ b/core/res/res/drawable-mdpi/numberpicker_down_disabled.9.png diff --git a/core/res/res/drawable-mdpi/numberpicker_down_disabled_focused.9.png b/core/res/res/drawable-mdpi/numberpicker_down_disabled_focused.9.png Binary files differindex 662cffd..662cffd 100755..100644 --- a/core/res/res/drawable-mdpi/numberpicker_down_disabled_focused.9.png +++ b/core/res/res/drawable-mdpi/numberpicker_down_disabled_focused.9.png diff --git a/core/res/res/drawable-mdpi/numberpicker_down_normal.9.png b/core/res/res/drawable-mdpi/numberpicker_down_normal.9.png Binary files differindex f17e8f9..f17e8f9 100755..100644 --- a/core/res/res/drawable-mdpi/numberpicker_down_normal.9.png +++ b/core/res/res/drawable-mdpi/numberpicker_down_normal.9.png diff --git a/core/res/res/drawable-mdpi/numberpicker_down_pressed.9.png b/core/res/res/drawable-mdpi/numberpicker_down_pressed.9.png Binary files differindex 777bcf5..777bcf5 100755..100644 --- a/core/res/res/drawable-mdpi/numberpicker_down_pressed.9.png +++ b/core/res/res/drawable-mdpi/numberpicker_down_pressed.9.png diff --git a/core/res/res/drawable-mdpi/numberpicker_down_selected.9.png b/core/res/res/drawable-mdpi/numberpicker_down_selected.9.png Binary files differindex b45db62..b45db62 100755..100644 --- a/core/res/res/drawable-mdpi/numberpicker_down_selected.9.png +++ b/core/res/res/drawable-mdpi/numberpicker_down_selected.9.png diff --git a/core/res/res/drawable-mdpi/numberpicker_input_disabled.9.png b/core/res/res/drawable-mdpi/numberpicker_input_disabled.9.png Binary files differindex f73658e..f73658e 100755..100644 --- a/core/res/res/drawable-mdpi/numberpicker_input_disabled.9.png +++ b/core/res/res/drawable-mdpi/numberpicker_input_disabled.9.png diff --git a/core/res/res/drawable-mdpi/numberpicker_input_normal.9.png b/core/res/res/drawable-mdpi/numberpicker_input_normal.9.png Binary files differindex 8032ada..8032ada 100755..100644 --- a/core/res/res/drawable-mdpi/numberpicker_input_normal.9.png +++ b/core/res/res/drawable-mdpi/numberpicker_input_normal.9.png diff --git a/core/res/res/drawable-mdpi/numberpicker_input_pressed.9.png b/core/res/res/drawable-mdpi/numberpicker_input_pressed.9.png Binary files differindex 30d8d5f..30d8d5f 100755..100644 --- a/core/res/res/drawable-mdpi/numberpicker_input_pressed.9.png +++ b/core/res/res/drawable-mdpi/numberpicker_input_pressed.9.png diff --git a/core/res/res/drawable-mdpi/numberpicker_input_selected.9.png b/core/res/res/drawable-mdpi/numberpicker_input_selected.9.png Binary files differindex 874f18f..874f18f 100755..100644 --- a/core/res/res/drawable-mdpi/numberpicker_input_selected.9.png +++ b/core/res/res/drawable-mdpi/numberpicker_input_selected.9.png diff --git a/core/res/res/drawable-mdpi/numberpicker_up_disabled.9.png b/core/res/res/drawable-mdpi/numberpicker_up_disabled.9.png Binary files differindex 327b0b5..327b0b5 100755..100644 --- a/core/res/res/drawable-mdpi/numberpicker_up_disabled.9.png +++ b/core/res/res/drawable-mdpi/numberpicker_up_disabled.9.png diff --git a/core/res/res/drawable-mdpi/numberpicker_up_disabled_focused.9.png b/core/res/res/drawable-mdpi/numberpicker_up_disabled_focused.9.png Binary files differindex 4c96680..4c96680 100755..100644 --- a/core/res/res/drawable-mdpi/numberpicker_up_disabled_focused.9.png +++ b/core/res/res/drawable-mdpi/numberpicker_up_disabled_focused.9.png diff --git a/core/res/res/drawable-mdpi/numberpicker_up_normal.9.png b/core/res/res/drawable-mdpi/numberpicker_up_normal.9.png Binary files differindex dcd26e0..dcd26e0 100755..100644 --- a/core/res/res/drawable-mdpi/numberpicker_up_normal.9.png +++ b/core/res/res/drawable-mdpi/numberpicker_up_normal.9.png diff --git a/core/res/res/drawable-mdpi/numberpicker_up_pressed.9.png b/core/res/res/drawable-mdpi/numberpicker_up_pressed.9.png Binary files differindex 7dac778..7dac778 100755..100644 --- a/core/res/res/drawable-mdpi/numberpicker_up_pressed.9.png +++ b/core/res/res/drawable-mdpi/numberpicker_up_pressed.9.png diff --git a/core/res/res/drawable-mdpi/numberpicker_up_selected.9.png b/core/res/res/drawable-mdpi/numberpicker_up_selected.9.png Binary files differindex 35dae8e..35dae8e 100755..100644 --- a/core/res/res/drawable-mdpi/numberpicker_up_selected.9.png +++ b/core/res/res/drawable-mdpi/numberpicker_up_selected.9.png diff --git a/core/res/res/drawable-mdpi/scrollbar_handle_horizontal.9.png b/core/res/res/drawable-mdpi/scrollbar_handle_horizontal.9.png Binary files differindex 8584d1f..8584d1f 100755..100644 --- a/core/res/res/drawable-mdpi/scrollbar_handle_horizontal.9.png +++ b/core/res/res/drawable-mdpi/scrollbar_handle_horizontal.9.png diff --git a/core/res/res/drawable-mdpi/scrollbar_handle_vertical.9.png b/core/res/res/drawable-mdpi/scrollbar_handle_vertical.9.png Binary files differindex 331a05d..331a05d 100755..100644 --- a/core/res/res/drawable-mdpi/scrollbar_handle_vertical.9.png +++ b/core/res/res/drawable-mdpi/scrollbar_handle_vertical.9.png diff --git a/core/res/res/drawable-mdpi/search_plate.9.png b/core/res/res/drawable-mdpi/search_plate.9.png Binary files differindex 8c42f10..8c42f10 100755..100644 --- a/core/res/res/drawable-mdpi/search_plate.9.png +++ b/core/res/res/drawable-mdpi/search_plate.9.png diff --git a/core/res/res/drawable-mdpi/spinner_black_20.png b/core/res/res/drawable-mdpi/spinner_black_20.png Binary files differindex 86d7a20..86d7a20 100755..100644 --- a/core/res/res/drawable-mdpi/spinner_black_20.png +++ b/core/res/res/drawable-mdpi/spinner_black_20.png diff --git a/core/res/res/drawable-mdpi/sym_keyboard_feedback_shift_locked.png b/core/res/res/drawable-mdpi/sym_keyboard_feedback_shift_locked.png Binary files differindex 7194b30..7194b30 100755..100644 --- a/core/res/res/drawable-mdpi/sym_keyboard_feedback_shift_locked.png +++ b/core/res/res/drawable-mdpi/sym_keyboard_feedback_shift_locked.png diff --git a/core/res/res/drawable-mdpi/tab_focus.9.png b/core/res/res/drawable-mdpi/tab_focus.9.png Binary files differindex d9bcc57..d9bcc57 100755..100644 --- a/core/res/res/drawable-mdpi/tab_focus.9.png +++ b/core/res/res/drawable-mdpi/tab_focus.9.png diff --git a/core/res/res/drawable-mdpi/tab_focus_bar_left.9.png b/core/res/res/drawable-mdpi/tab_focus_bar_left.9.png Binary files differindex 2536d94..2536d94 100755..100644 --- a/core/res/res/drawable-mdpi/tab_focus_bar_left.9.png +++ b/core/res/res/drawable-mdpi/tab_focus_bar_left.9.png diff --git a/core/res/res/drawable-mdpi/tab_focus_bar_right.9.png b/core/res/res/drawable-mdpi/tab_focus_bar_right.9.png Binary files differindex 2536d94..2536d94 100755..100644 --- a/core/res/res/drawable-mdpi/tab_focus_bar_right.9.png +++ b/core/res/res/drawable-mdpi/tab_focus_bar_right.9.png diff --git a/core/res/res/drawable-mdpi/tab_press.9.png b/core/res/res/drawable-mdpi/tab_press.9.png Binary files differindex 3332660..3332660 100755..100644 --- a/core/res/res/drawable-mdpi/tab_press.9.png +++ b/core/res/res/drawable-mdpi/tab_press.9.png diff --git a/core/res/res/drawable-mdpi/tab_press_bar_left.9.png b/core/res/res/drawable-mdpi/tab_press_bar_left.9.png Binary files differindex d2c75e3..d2c75e3 100755..100644 --- a/core/res/res/drawable-mdpi/tab_press_bar_left.9.png +++ b/core/res/res/drawable-mdpi/tab_press_bar_left.9.png diff --git a/core/res/res/drawable-mdpi/tab_press_bar_right.9.png b/core/res/res/drawable-mdpi/tab_press_bar_right.9.png Binary files differindex d2c75e3..d2c75e3 100755..100644 --- a/core/res/res/drawable-mdpi/tab_press_bar_right.9.png +++ b/core/res/res/drawable-mdpi/tab_press_bar_right.9.png diff --git a/core/res/res/drawable-mdpi/tab_selected_bar_left.9.png b/core/res/res/drawable-mdpi/tab_selected_bar_left.9.png Binary files differindex d20f3a2..d20f3a2 100755..100644 --- a/core/res/res/drawable-mdpi/tab_selected_bar_left.9.png +++ b/core/res/res/drawable-mdpi/tab_selected_bar_left.9.png diff --git a/core/res/res/drawable-mdpi/tab_selected_bar_right.9.png b/core/res/res/drawable-mdpi/tab_selected_bar_right.9.png Binary files differindex d20f3a2..d20f3a2 100755..100644 --- a/core/res/res/drawable-mdpi/tab_selected_bar_right.9.png +++ b/core/res/res/drawable-mdpi/tab_selected_bar_right.9.png diff --git a/core/res/res/drawable-mdpi/textfield_search_default.9.png b/core/res/res/drawable-mdpi/textfield_search_default.9.png Binary files differindex 7dc5b27..7dc5b27 100755..100644 --- a/core/res/res/drawable-mdpi/textfield_search_default.9.png +++ b/core/res/res/drawable-mdpi/textfield_search_default.9.png diff --git a/core/res/res/drawable-mdpi/textfield_search_selected.9.png b/core/res/res/drawable-mdpi/textfield_search_selected.9.png Binary files differindex a9fd3b2..a9fd3b2 100755..100644 --- a/core/res/res/drawable-mdpi/textfield_search_selected.9.png +++ b/core/res/res/drawable-mdpi/textfield_search_selected.9.png diff --git a/core/res/res/drawable-mdpi/toast_frame.9.png b/core/res/res/drawable-mdpi/toast_frame.9.png Binary files differindex b9105de..b9105de 100755..100644 --- a/core/res/res/drawable-mdpi/toast_frame.9.png +++ b/core/res/res/drawable-mdpi/toast_frame.9.png diff --git a/core/res/res/layout/app_perms_summary.xml b/core/res/res/layout/app_perms_summary.xml index b8d93ac..b8d93ac 100755..100644 --- a/core/res/res/layout/app_perms_summary.xml +++ b/core/res/res/layout/app_perms_summary.xml diff --git a/core/res/res/layout/keyguard_screen_sim_pin_portrait.xml b/core/res/res/layout/keyguard_screen_sim_pin_portrait.xml index 20c2142..4c42a17 100644 --- a/core/res/res/layout/keyguard_screen_sim_pin_portrait.xml +++ b/core/res/res/layout/keyguard_screen_sim_pin_portrait.xml @@ -33,7 +33,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" - android:singleLine="true" android:textAppearance="?android:attr/textAppearanceLarge"/> <!-- Carrier info --> diff --git a/core/res/res/layout/search_view.xml b/core/res/res/layout/search_view.xml index a281fcc..29c0576 100644 --- a/core/res/res/layout/search_view.xml +++ b/core/res/res/layout/search_view.xml @@ -45,6 +45,7 @@ android:layout_height="match_parent" android:layout_gravity="center_vertical" android:src="?android:attr/searchViewSearchIcon" + android:focusable="true" android:contentDescription="@string/searchview_description_search" /> diff --git a/core/res/res/raw/fallbackring.ogg b/core/res/res/raw/fallbackring.ogg Binary files differindex a9adeb8..a9adeb8 100755..100644 --- a/core/res/res/raw/fallbackring.ogg +++ b/core/res/res/raw/fallbackring.ogg diff --git a/core/res/res/values-af/donottranslate-cldr.xml b/core/res/res/values-af/donottranslate-cldr.xml index 77b7f7c..ca693b6 100644 --- a/core/res/res/values-af/donottranslate-cldr.xml +++ b/core/res/res/values-af/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%Y/%m/%d</string> <string name="numeric_date_format">yyyy/MM/dd</string> <string name="numeric_date_template">"%s/%s/%s"</string> diff --git a/core/res/res/values-am/donottranslate-cldr.xml b/core/res/res/values-am/donottranslate-cldr.xml index b3b76f9..a7cb1c7 100644 --- a/core/res/res/values-am/donottranslate-cldr.xml +++ b/core/res/res/values-am/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%d/%m/%Y</string> <string name="numeric_date_format">dd/MM/yyyy</string> <string name="numeric_date_template">"%s/%s/%s"</string> diff --git a/core/res/res/values-ar-rEG/donottranslate-cldr.xml b/core/res/res/values-ar-rEG/donottranslate-cldr.xml index 155480d..7480756 100644 --- a/core/res/res/values-ar-rEG/donottranslate-cldr.xml +++ b/core/res/res/values-ar-rEG/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%-e/%-m/%Y</string> <string name="numeric_date_format">d/M/yyyy</string> <string name="numeric_date_template">"%s/%s/%s"</string> diff --git a/core/res/res/values-ar/donottranslate-cldr.xml b/core/res/res/values-ar/donottranslate-cldr.xml index 135963b..44d8a26 100644 --- a/core/res/res/values-ar/donottranslate-cldr.xml +++ b/core/res/res/values-ar/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%-e/%-m/%Y</string> <string name="numeric_date_format">d/M/yyyy</string> <string name="numeric_date_template">"%s/%s/%s"</string> diff --git a/core/res/res/values-be/donottranslate-cldr.xml b/core/res/res/values-be/donottranslate-cldr.xml index a346c83..926b4bb 100644 --- a/core/res/res/values-be/donottranslate-cldr.xml +++ b/core/res/res/values-be/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k.%M</string> <string name="hour_minute_ampm">%-l.%M %p</string> <string name="hour_minute_cap_ampm">%-l.%M %p</string> - <string name="twelve_hour_time_format">h.mm a</string> - <string name="twenty_four_hour_time_format">H.mm</string> <string name="numeric_date">%-e.%-m.%Y</string> <string name="numeric_date_format">d.M.yyyy</string> <string name="numeric_date_template">"%s.%s.%s"</string> diff --git a/core/res/res/values-bg/donottranslate-cldr.xml b/core/res/res/values-bg/donottranslate-cldr.xml index 9c1ae2c..e7ad610 100644 --- a/core/res/res/values-bg/donottranslate-cldr.xml +++ b/core/res/res/values-bg/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%d.%m.%Y</string> <string name="numeric_date_format">dd.MM.yyyy</string> <string name="numeric_date_template">"%s.%s.%s"</string> diff --git a/core/res/res/values-ca/donottranslate-cldr.xml b/core/res/res/values-ca/donottranslate-cldr.xml index 84e7e79..0872125 100644 --- a/core/res/res/values-ca/donottranslate-cldr.xml +++ b/core/res/res/values-ca/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%d/%m/%Y</string> <string name="numeric_date_format">dd/MM/yyyy</string> <string name="numeric_date_template">"%s/%s/%s"</string> diff --git a/core/res/res/values-cs/donottranslate-cldr.xml b/core/res/res/values-cs/donottranslate-cldr.xml index ff7902d..bbf42f0 100644 --- a/core/res/res/values-cs/donottranslate-cldr.xml +++ b/core/res/res/values-cs/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%-e. %-m. %Y</string> <string name="numeric_date_format">d. M. yyyy</string> <string name="numeric_date_template">"%s. %s. %s"</string> diff --git a/core/res/res/values-da/donottranslate-cldr.xml b/core/res/res/values-da/donottranslate-cldr.xml index d5b9878..427fd0c 100644 --- a/core/res/res/values-da/donottranslate-cldr.xml +++ b/core/res/res/values-da/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%H:%M</string> <string name="hour_minute_ampm">%-l.%M %p</string> <string name="hour_minute_cap_ampm">%-l.%M %^p</string> - <string name="twelve_hour_time_format">h.mm a</string> - <string name="twenty_four_hour_time_format">HH:mm</string> <string name="numeric_date">%d/%m/%Y</string> <string name="numeric_date_format">dd/MM/yyyy</string> <string name="numeric_date_template">"%s/%s/%s"</string> diff --git a/core/res/res/values-de/donottranslate-cldr.xml b/core/res/res/values-de/donottranslate-cldr.xml index 9bdd8a3..850fe26 100644 --- a/core/res/res/values-de/donottranslate-cldr.xml +++ b/core/res/res/values-de/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%d.%m.%Y</string> <string name="numeric_date_format">dd.MM.yyyy</string> <string name="numeric_date_template">"%s.%s.%s"</string> diff --git a/core/res/res/values-el/donottranslate-cldr.xml b/core/res/res/values-el/donottranslate-cldr.xml index a0c69b5..dfa199d 100644 --- a/core/res/res/values-el/donottranslate-cldr.xml +++ b/core/res/res/values-el/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%d/%m/%Y</string> <string name="numeric_date_format">dd/MM/yyyy</string> <string name="numeric_date_template">"%s/%s/%s"</string> diff --git a/core/res/res/values-en-rAU/donottranslate-cldr.xml b/core/res/res/values-en-rAU/donottranslate-cldr.xml index 947fe92..7ccff4d 100644 --- a/core/res/res/values-en-rAU/donottranslate-cldr.xml +++ b/core/res/res/values-en-rAU/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%H:%M</string> <string name="hour_minute_ampm">%-l:%M%p</string> <string name="hour_minute_cap_ampm">%-l:%M%^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">HH:mm</string> <string name="numeric_date">%-e/%m/%Y</string> <string name="numeric_date_format">d/MM/yyyy</string> <string name="numeric_date_template">"%s/%s/%s"</string> diff --git a/core/res/res/values-en-rCA/donottranslate-cldr.xml b/core/res/res/values-en-rCA/donottranslate-cldr.xml index 1845f28..21e9b7e 100644 --- a/core/res/res/values-en-rCA/donottranslate-cldr.xml +++ b/core/res/res/values-en-rCA/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%H:%M</string> <string name="hour_minute_ampm">%-l:%M%p</string> <string name="hour_minute_cap_ampm">%-l:%M%^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">HH:mm</string> <string name="numeric_date">%Y-%m-%d</string> <string name="numeric_date_format">yyyy-MM-dd</string> <string name="numeric_date_template">"%s-%s-%s"</string> diff --git a/core/res/res/values-en-rGB/donottranslate-cldr.xml b/core/res/res/values-en-rGB/donottranslate-cldr.xml index a10dfa50..22a8e41 100644 --- a/core/res/res/values-en-rGB/donottranslate-cldr.xml +++ b/core/res/res/values-en-rGB/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%H:%M</string> <string name="hour_minute_ampm">%-l:%M%p</string> <string name="hour_minute_cap_ampm">%-l:%M%^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">HH:mm</string> <string name="numeric_date">%d/%m/%Y</string> <string name="numeric_date_format">dd/MM/yyyy</string> <string name="numeric_date_template">"%s/%s/%s"</string> diff --git a/core/res/res/values-en-rIE/donottranslate-cldr.xml b/core/res/res/values-en-rIE/donottranslate-cldr.xml index 65cab99..c88d86c 100644 --- a/core/res/res/values-en-rIE/donottranslate-cldr.xml +++ b/core/res/res/values-en-rIE/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%H:%M</string> <string name="hour_minute_ampm">%-l:%M%p</string> <string name="hour_minute_cap_ampm">%-l:%M%^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">HH:mm</string> <string name="numeric_date">%d/%m/%Y</string> <string name="numeric_date_format">dd/MM/yyyy</string> <string name="numeric_date_template">"%s/%s/%s"</string> diff --git a/core/res/res/values-en-rIN/donottranslate-cldr.xml b/core/res/res/values-en-rIN/donottranslate-cldr.xml index 48942fe..3b7a0ca 100644 --- a/core/res/res/values-en-rIN/donottranslate-cldr.xml +++ b/core/res/res/values-en-rIN/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%H:%M</string> <string name="hour_minute_ampm">%-l:%M%p</string> <string name="hour_minute_cap_ampm">%-l:%M%^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">HH:mm</string> <string name="numeric_date">%d/%m/%Y</string> <string name="numeric_date_format">dd/MM/yyyy</string> <string name="numeric_date_template">"%s/%s/%s"</string> diff --git a/core/res/res/values-en-rNZ/donottranslate-cldr.xml b/core/res/res/values-en-rNZ/donottranslate-cldr.xml index 117dda8..9156376 100644 --- a/core/res/res/values-en-rNZ/donottranslate-cldr.xml +++ b/core/res/res/values-en-rNZ/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%H:%M</string> <string name="hour_minute_ampm">%-l:%M%p</string> <string name="hour_minute_cap_ampm">%-l:%M%^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">HH:mm</string> <string name="numeric_date">%-e/%m/%Y</string> <string name="numeric_date_format">d/MM/yyyy</string> <string name="numeric_date_template">"%s/%s/%s"</string> diff --git a/core/res/res/values-en-rUS/donottranslate-cldr.xml b/core/res/res/values-en-rUS/donottranslate-cldr.xml index 0587c16..4d37d47 100644 --- a/core/res/res/values-en-rUS/donottranslate-cldr.xml +++ b/core/res/res/values-en-rUS/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%H:%M</string> <string name="hour_minute_ampm">%-l:%M%p</string> <string name="hour_minute_cap_ampm">%-l:%M%^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">HH:mm</string> <string name="numeric_date">%-m/%-e/%Y</string> <string name="numeric_date_format">M/d/yyyy</string> <string name="numeric_date_template">"%s/%s/%s"</string> diff --git a/core/res/res/values-en-rZA/donottranslate-cldr.xml b/core/res/res/values-en-rZA/donottranslate-cldr.xml index 48ebc6e..5ae38c1 100644 --- a/core/res/res/values-en-rZA/donottranslate-cldr.xml +++ b/core/res/res/values-en-rZA/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%H:%M</string> <string name="hour_minute_ampm">%-l:%M%p</string> <string name="hour_minute_cap_ampm">%-l:%M%^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">HH:mm</string> <string name="numeric_date">%Y/%m/%d</string> <string name="numeric_date_format">yyyy/MM/dd</string> <string name="numeric_date_template">"%s/%s/%s"</string> diff --git a/core/res/res/values-es-rUS/donottranslate-cldr.xml b/core/res/res/values-es-rUS/donottranslate-cldr.xml index 9224786..2339066 100644 --- a/core/res/res/values-es-rUS/donottranslate-cldr.xml +++ b/core/res/res/values-es-rUS/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%-m/%-e/%Y</string> <string name="numeric_date_format">M/d/yyyy</string> <string name="numeric_date_template">"%s/%s/%s"</string> diff --git a/core/res/res/values-es/donottranslate-cldr.xml b/core/res/res/values-es/donottranslate-cldr.xml index 0a680b6..dd8a8fa 100644 --- a/core/res/res/values-es/donottranslate-cldr.xml +++ b/core/res/res/values-es/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%d/%m/%Y</string> <string name="numeric_date_format">dd/MM/yyyy</string> <string name="numeric_date_template">"%s/%s/%s"</string> diff --git a/core/res/res/values-et/donottranslate-cldr.xml b/core/res/res/values-et/donottranslate-cldr.xml index bf269dd..912df10 100644 --- a/core/res/res/values-et/donottranslate-cldr.xml +++ b/core/res/res/values-et/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%d.%m.%Y</string> <string name="numeric_date_format">dd.MM.yyyy</string> <string name="numeric_date_template">"%s.%s.%s"</string> diff --git a/core/res/res/values-fa/donottranslate-cldr.xml b/core/res/res/values-fa/donottranslate-cldr.xml index 402311a..e1c8fec 100644 --- a/core/res/res/values-fa/donottranslate-cldr.xml +++ b/core/res/res/values-fa/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%Y/%-m/%-e</string> <string name="numeric_date_format">yyyy/M/d</string> <string name="numeric_date_template">"%s/%s/%s"</string> diff --git a/core/res/res/values-fi-rFI/donottranslate-cldr.xml b/core/res/res/values-fi-rFI/donottranslate-cldr.xml index 04f0a77..32b7803 100644 --- a/core/res/res/values-fi-rFI/donottranslate-cldr.xml +++ b/core/res/res/values-fi-rFI/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k.%M</string> <string name="hour_minute_ampm">%-l.%M %p</string> <string name="hour_minute_cap_ampm">%-l.%M %^p</string> - <string name="twelve_hour_time_format">h.mm a</string> - <string name="twenty_four_hour_time_format">H.mm</string> <string name="numeric_date">%-e.%-m.%Y</string> <string name="numeric_date_format">d.M.yyyy</string> <string name="numeric_date_template">"%s.%s.%s"</string> diff --git a/core/res/res/values-fi/donottranslate-cldr.xml b/core/res/res/values-fi/donottranslate-cldr.xml index 543595f..df6f78f 100644 --- a/core/res/res/values-fi/donottranslate-cldr.xml +++ b/core/res/res/values-fi/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k.%M</string> <string name="hour_minute_ampm">%-l.%M %p</string> <string name="hour_minute_cap_ampm">%-l.%M %^p</string> - <string name="twelve_hour_time_format">h.mm a</string> - <string name="twenty_four_hour_time_format">H.mm</string> <string name="numeric_date">%-e.%-m.%Y</string> <string name="numeric_date_format">d.M.yyyy</string> <string name="numeric_date_template">"%s.%s.%s"</string> diff --git a/core/res/res/values-fr/donottranslate-cldr.xml b/core/res/res/values-fr/donottranslate-cldr.xml index ff10aec..5698514 100644 --- a/core/res/res/values-fr/donottranslate-cldr.xml +++ b/core/res/res/values-fr/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%d/%m/%Y</string> <string name="numeric_date_format">dd/MM/yyyy</string> <string name="numeric_date_template">"%s/%s/%s"</string> diff --git a/core/res/res/values-hi-rIN/donottranslate-cldr.xml b/core/res/res/values-hi-rIN/donottranslate-cldr.xml index 5371e15..72b89c2 100644 --- a/core/res/res/values-hi-rIN/donottranslate-cldr.xml +++ b/core/res/res/values-hi-rIN/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%-e-%-m-%Y</string> <string name="numeric_date_format">d-M-yyyy</string> <string name="numeric_date_template">"%s-%s-%s"</string> diff --git a/core/res/res/values-hi/donottranslate-cldr.xml b/core/res/res/values-hi/donottranslate-cldr.xml index 8043169..3e6138e 100644 --- a/core/res/res/values-hi/donottranslate-cldr.xml +++ b/core/res/res/values-hi/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%-e-%-m-%Y</string> <string name="numeric_date_format">d-M-yyyy</string> <string name="numeric_date_template">"%s-%s-%s"</string> diff --git a/core/res/res/values-hr-rHR/donottranslate-cldr.xml b/core/res/res/values-hr-rHR/donottranslate-cldr.xml index 57e0572..d6d20e7 100644 --- a/core/res/res/values-hr-rHR/donottranslate-cldr.xml +++ b/core/res/res/values-hr-rHR/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%-e.%-m.%Y.</string> <string name="numeric_date_format">d.M.yyyy.</string> <string name="numeric_date_template">"%s.%s.%s."</string> diff --git a/core/res/res/values-hr/donottranslate-cldr.xml b/core/res/res/values-hr/donottranslate-cldr.xml index 9e4b225..8703981 100644 --- a/core/res/res/values-hr/donottranslate-cldr.xml +++ b/core/res/res/values-hr/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%-e.%-m.%Y.</string> <string name="numeric_date_format">d.M.yyyy.</string> <string name="numeric_date_template">"%s.%s.%s."</string> diff --git a/core/res/res/values-hu-rHU/donottranslate-cldr.xml b/core/res/res/values-hu-rHU/donottranslate-cldr.xml index 5f4b8aa..59eb75a 100644 --- a/core/res/res/values-hu-rHU/donottranslate-cldr.xml +++ b/core/res/res/values-hu-rHU/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%H:%M</string> <string name="hour_minute_ampm">%p %-l:%M</string> <string name="hour_minute_cap_ampm">%^p %-l:%M</string> - <string name="twelve_hour_time_format">a h:mm</string> - <string name="twenty_four_hour_time_format">HH:mm</string> <string name="numeric_date">%Y.%m.%d.</string> <string name="numeric_date_format">yyyy.MM.dd.</string> <string name="numeric_date_template">"%s.%s.%s."</string> diff --git a/core/res/res/values-hu/donottranslate-cldr.xml b/core/res/res/values-hu/donottranslate-cldr.xml index c925b82..525b0c0 100644 --- a/core/res/res/values-hu/donottranslate-cldr.xml +++ b/core/res/res/values-hu/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%H:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">HH:mm</string> <string name="numeric_date">%Y.%m.%d.</string> <string name="numeric_date_format">yyyy.MM.dd.</string> <string name="numeric_date_template">"%s.%s.%s."</string> diff --git a/core/res/res/values-in-rID/donottranslate-cldr.xml b/core/res/res/values-in-rID/donottranslate-cldr.xml index 8b13bcf..aedc2c7 100644 --- a/core/res/res/values-in-rID/donottranslate-cldr.xml +++ b/core/res/res/values-in-rID/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%d/%m/%Y</string> <string name="numeric_date_format">dd/MM/yyyy</string> <string name="numeric_date_template">"%s/%s/%s"</string> diff --git a/core/res/res/values-in/donottranslate-cldr.xml b/core/res/res/values-in/donottranslate-cldr.xml index 6e9bba4..7371132 100644 --- a/core/res/res/values-in/donottranslate-cldr.xml +++ b/core/res/res/values-in/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%d/%m/%Y</string> <string name="numeric_date_format">dd/MM/yyyy</string> <string name="numeric_date_template">"%s/%s/%s"</string> diff --git a/core/res/res/values-it/donottranslate-cldr.xml b/core/res/res/values-it/donottranslate-cldr.xml index 9ff27e8..b06e73d 100644 --- a/core/res/res/values-it/donottranslate-cldr.xml +++ b/core/res/res/values-it/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%H:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">HH:mm</string> <string name="numeric_date">%d/%m/%Y</string> <string name="numeric_date_format">dd/MM/yyyy</string> <string name="numeric_date_template">"%s/%s/%s"</string> diff --git a/core/res/res/values-iw/donottranslate-cldr.xml b/core/res/res/values-iw/donottranslate-cldr.xml index 631c059..037251e 100644 --- a/core/res/res/values-iw/donottranslate-cldr.xml +++ b/core/res/res/values-iw/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%d/%m/%Y</string> <string name="numeric_date_format">dd/MM/yyyy</string> <string name="numeric_date_template">"%s/%s/%s"</string> diff --git a/core/res/res/values-ja/donottranslate-cldr.xml b/core/res/res/values-ja/donottranslate-cldr.xml index 1c1d55f..f2cdbba 100644 --- a/core/res/res/values-ja/donottranslate-cldr.xml +++ b/core/res/res/values-ja/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M%p</string> <string name="hour_minute_cap_ampm">%-l:%M%^p</string> - <string name="twelve_hour_time_format">h:mma</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%Y/%m/%d</string> <string name="numeric_date_format">yyyy/MM/dd</string> <string name="numeric_date_template">"%s/%s/%s"</string> diff --git a/core/res/res/values-ko/donottranslate-cldr.xml b/core/res/res/values-ko/donottranslate-cldr.xml index 59b975f..29d7982 100644 --- a/core/res/res/values-ko/donottranslate-cldr.xml +++ b/core/res/res/values-ko/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%p %-l:%M</string> <string name="hour_minute_cap_ampm">%p %-l:%M</string> - <string name="twelve_hour_time_format">a h:mm</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%Y. %-m. %-e.</string> <string name="numeric_date_format">yyyy. M. d.</string> <string name="numeric_date_template">"%s. %s. %s."</string> diff --git a/core/res/res/values-lt-rLT/donottranslate-cldr.xml b/core/res/res/values-lt-rLT/donottranslate-cldr.xml index 6cf6098..19ae2ea 100644 --- a/core/res/res/values-lt-rLT/donottranslate-cldr.xml +++ b/core/res/res/values-lt-rLT/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%Y-%m-%d</string> <string name="numeric_date_format">yyyy-MM-dd</string> <string name="numeric_date_template">"%s-%s-%s"</string> diff --git a/core/res/res/values-lt/donottranslate-cldr.xml b/core/res/res/values-lt/donottranslate-cldr.xml index b1a94f3..0683d46 100644 --- a/core/res/res/values-lt/donottranslate-cldr.xml +++ b/core/res/res/values-lt/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%Y-%m-%d</string> <string name="numeric_date_format">yyyy-MM-dd</string> <string name="numeric_date_template">"%s-%s-%s"</string> diff --git a/core/res/res/values-lv-rLV/donottranslate-cldr.xml b/core/res/res/values-lv-rLV/donottranslate-cldr.xml index 3922f6b..eb74fa3 100644 --- a/core/res/res/values-lv-rLV/donottranslate-cldr.xml +++ b/core/res/res/values-lv-rLV/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%H:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">HH:mm</string> <string name="numeric_date">%d.%m.%Y</string> <string name="numeric_date_format">dd.MM.yyyy</string> <string name="numeric_date_template">"%s.%s.%s"</string> diff --git a/core/res/res/values-lv/donottranslate-cldr.xml b/core/res/res/values-lv/donottranslate-cldr.xml index ec768bc..cd55478 100644 --- a/core/res/res/values-lv/donottranslate-cldr.xml +++ b/core/res/res/values-lv/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%H:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">HH:mm</string> <string name="numeric_date">%d.%m.%Y</string> <string name="numeric_date_format">dd.MM.yyyy</string> <string name="numeric_date_template">"%s.%s.%s"</string> diff --git a/core/res/res/values-mcc208-mnc01/config.xml b/core/res/res/values-mcc208-mnc01/config.xml index c1489b1..c1489b1 100755..100644 --- a/core/res/res/values-mcc208-mnc01/config.xml +++ b/core/res/res/values-mcc208-mnc01/config.xml diff --git a/core/res/res/values-mcc208-mnc10/config.xml b/core/res/res/values-mcc208-mnc10/config.xml index 99cc599..99cc599 100755..100644 --- a/core/res/res/values-mcc208-mnc10/config.xml +++ b/core/res/res/values-mcc208-mnc10/config.xml diff --git a/core/res/res/values-mcc214-mnc03/config.xml b/core/res/res/values-mcc214-mnc03/config.xml index 02f1475..02f1475 100755..100644 --- a/core/res/res/values-mcc214-mnc03/config.xml +++ b/core/res/res/values-mcc214-mnc03/config.xml diff --git a/core/res/res/values-mcc214-mnc07/config.xml b/core/res/res/values-mcc214-mnc07/config.xml index 4e3fa16..4e3fa16 100755..100644 --- a/core/res/res/values-mcc214-mnc07/config.xml +++ b/core/res/res/values-mcc214-mnc07/config.xml diff --git a/core/res/res/values-mcc222-mnc01/config.xml b/core/res/res/values-mcc222-mnc01/config.xml index 6bb1196..6bb1196 100755..100644 --- a/core/res/res/values-mcc222-mnc01/config.xml +++ b/core/res/res/values-mcc222-mnc01/config.xml diff --git a/core/res/res/values-mcc222-mnc10/config.xml b/core/res/res/values-mcc222-mnc10/config.xml index 24dd71c..24dd71c 100755..100644 --- a/core/res/res/values-mcc222-mnc10/config.xml +++ b/core/res/res/values-mcc222-mnc10/config.xml diff --git a/core/res/res/values-mcc234-mnc33/config.xml b/core/res/res/values-mcc234-mnc33/config.xml index d79d212..d79d212 100755..100644 --- a/core/res/res/values-mcc234-mnc33/config.xml +++ b/core/res/res/values-mcc234-mnc33/config.xml diff --git a/core/res/res/values-mcc286/config.xml b/core/res/res/values-mcc286/config.xml index d99d051..d99d051 100755..100644 --- a/core/res/res/values-mcc286/config.xml +++ b/core/res/res/values-mcc286/config.xml diff --git a/core/res/res/values-mcc302-mnc370/config.xml b/core/res/res/values-mcc302-mnc370/config.xml index b1d363f..b1d363f 100755..100644 --- a/core/res/res/values-mcc302-mnc370/config.xml +++ b/core/res/res/values-mcc302-mnc370/config.xml diff --git a/core/res/res/values-mcc302-mnc660/config.xml b/core/res/res/values-mcc302-mnc660/config.xml index 37853cf..37853cf 100755..100644 --- a/core/res/res/values-mcc302-mnc660/config.xml +++ b/core/res/res/values-mcc302-mnc660/config.xml diff --git a/core/res/res/values-mcc302-mnc720/config.xml b/core/res/res/values-mcc302-mnc720/config.xml index 40ef939..40ef939 100755..100644 --- a/core/res/res/values-mcc302-mnc720/config.xml +++ b/core/res/res/values-mcc302-mnc720/config.xml diff --git a/core/res/res/values-mcc340-mnc01/config.xml b/core/res/res/values-mcc340-mnc01/config.xml index fb71f3bc..fb71f3bc 100755..100644 --- a/core/res/res/values-mcc340-mnc01/config.xml +++ b/core/res/res/values-mcc340-mnc01/config.xml diff --git a/core/res/res/values-ms/donottranslate-cldr.xml b/core/res/res/values-ms/donottranslate-cldr.xml index a5843ff..7c02f3f 100644 --- a/core/res/res/values-ms/donottranslate-cldr.xml +++ b/core/res/res/values-ms/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%d/%m/%Y</string> <string name="numeric_date_format">dd/MM/yyyy</string> <string name="numeric_date_template">"%s/%s/%s"</string> diff --git a/core/res/res/values-nb/donottranslate-cldr.xml b/core/res/res/values-nb/donottranslate-cldr.xml index 8eb1ff6..6d343ca 100644 --- a/core/res/res/values-nb/donottranslate-cldr.xml +++ b/core/res/res/values-nb/donottranslate-cldr.xml @@ -1,17 +1,15 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="hour_minute_24">%H.%M</string> - <string name="hour_minute_ampm">%-l.%M %p</string> - <string name="hour_minute_cap_ampm">%-l.%M %^p</string> - <string name="twelve_hour_time_format">h.mm a</string> - <string name="twenty_four_hour_time_format">HH.mm</string> + <string name="hour_minute_24">%H:%M</string> + <string name="hour_minute_ampm">%-l:%M %p</string> + <string name="hour_minute_cap_ampm">%-l:%M %^p</string> <string name="numeric_date">%d.%m.%Y</string> <string name="numeric_date_format">dd.MM.yyyy</string> <string name="numeric_date_template">"%s.%s.%s"</string> <string name="month_day_year">%-e. %B %Y</string> - <string name="time_of_day">%H.%M.%S</string> - <string name="date_and_time">%H.%M.%S %-e. %b %Y</string> + <string name="time_of_day">%H:%M:%S</string> + <string name="date_and_time">%H:%M:%S %-e. %b %Y</string> <string name="date_time">%2$s %1$s</string> <string name="time_date">%1$s %3$s</string> <string name="abbrev_month_day_year">%-e. %b %Y</string> diff --git a/core/res/res/values-nl/donottranslate-cldr.xml b/core/res/res/values-nl/donottranslate-cldr.xml index 1495a48..54e7e39 100644 --- a/core/res/res/values-nl/donottranslate-cldr.xml +++ b/core/res/res/values-nl/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%H:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">HH:mm</string> <string name="numeric_date">%d-%m-%Y</string> <string name="numeric_date_format">dd-MM-yyyy</string> <string name="numeric_date_template">"%s-%s-%s"</string> diff --git a/core/res/res/values-pl/donottranslate-cldr.xml b/core/res/res/values-pl/donottranslate-cldr.xml index 53f0c36..91c98ea 100644 --- a/core/res/res/values-pl/donottranslate-cldr.xml +++ b/core/res/res/values-pl/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%d.%m.%Y</string> <string name="numeric_date_format">dd.MM.yyyy</string> <string name="numeric_date_template">"%s.%s.%s"</string> diff --git a/core/res/res/values-pt-rPT/donottranslate-cldr.xml b/core/res/res/values-pt-rPT/donottranslate-cldr.xml index 26d8371..60787a9 100644 --- a/core/res/res/values-pt-rPT/donottranslate-cldr.xml +++ b/core/res/res/values-pt-rPT/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-kh%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H\'h\'mm</string> <string name="numeric_date">%d/%m/%Y</string> <string name="numeric_date_format">dd/MM/yyyy</string> <string name="numeric_date_template">"%s/%s/%s"</string> diff --git a/core/res/res/values-pt/donottranslate-cldr.xml b/core/res/res/values-pt/donottranslate-cldr.xml index c3e6c29..d5fee19 100644 --- a/core/res/res/values-pt/donottranslate-cldr.xml +++ b/core/res/res/values-pt/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-kh%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H\'h\'mm</string> <string name="numeric_date">%d/%m/%Y</string> <string name="numeric_date_format">dd/MM/yyyy</string> <string name="numeric_date_template">"%s/%s/%s"</string> diff --git a/core/res/res/values-rm/donottranslate-cldr.xml b/core/res/res/values-rm/donottranslate-cldr.xml index e6f0df2..32e1170 100644 --- a/core/res/res/values-rm/donottranslate-cldr.xml +++ b/core/res/res/values-rm/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%d.%m.%Y</string> <string name="numeric_date_format">dd.MM.yyyy</string> <string name="numeric_date_template">"%s.%s.%s"</string> diff --git a/core/res/res/values-ro-rRO/donottranslate-cldr.xml b/core/res/res/values-ro-rRO/donottranslate-cldr.xml index 7056803..1233f4e 100644 --- a/core/res/res/values-ro-rRO/donottranslate-cldr.xml +++ b/core/res/res/values-ro-rRO/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%d.%m.%Y</string> <string name="numeric_date_format">dd.MM.yyyy</string> <string name="numeric_date_template">"%s.%s.%s"</string> diff --git a/core/res/res/values-ro/donottranslate-cldr.xml b/core/res/res/values-ro/donottranslate-cldr.xml index 935c6af..f80a944 100644 --- a/core/res/res/values-ro/donottranslate-cldr.xml +++ b/core/res/res/values-ro/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%d.%m.%Y</string> <string name="numeric_date_format">dd.MM.yyyy</string> <string name="numeric_date_template">"%s.%s.%s"</string> diff --git a/core/res/res/values-ru/donottranslate-cldr.xml b/core/res/res/values-ru/donottranslate-cldr.xml index 03c64ab..4e315eb 100644 --- a/core/res/res/values-ru/donottranslate-cldr.xml +++ b/core/res/res/values-ru/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%d.%m.%Y</string> <string name="numeric_date_format">dd.MM.yyyy</string> <string name="numeric_date_template">"%s.%s.%s"</string> diff --git a/core/res/res/values-sk-rSK/donottranslate-cldr.xml b/core/res/res/values-sk-rSK/donottranslate-cldr.xml index 651c58c..94dca66 100644 --- a/core/res/res/values-sk-rSK/donottranslate-cldr.xml +++ b/core/res/res/values-sk-rSK/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%H:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">HH:mm</string> <string name="numeric_date">%-e. %-m. %Y</string> <string name="numeric_date_format">d. M. yyyy</string> <string name="numeric_date_template">"%s. %s. %s"</string> diff --git a/core/res/res/values-sk/donottranslate-cldr.xml b/core/res/res/values-sk/donottranslate-cldr.xml index 48c644a..9eeb133 100644 --- a/core/res/res/values-sk/donottranslate-cldr.xml +++ b/core/res/res/values-sk/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%H:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">HH:mm</string> <string name="numeric_date">%-e.%-m.%Y</string> <string name="numeric_date_format">d.M.yyyy</string> <string name="numeric_date_template">"%s.%s.%s"</string> diff --git a/core/res/res/values-sl-rSI/donottranslate-cldr.xml b/core/res/res/values-sl-rSI/donottranslate-cldr.xml index 84fffbd..6cf9bd6 100644 --- a/core/res/res/values-sl-rSI/donottranslate-cldr.xml +++ b/core/res/res/values-sl-rSI/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%-e. %m. %Y</string> <string name="numeric_date_format">d. MM. yyyy</string> <string name="numeric_date_template">"%s. %s. %s"</string> diff --git a/core/res/res/values-sl/donottranslate-cldr.xml b/core/res/res/values-sl/donottranslate-cldr.xml index 137ed3f..49d36fd 100644 --- a/core/res/res/values-sl/donottranslate-cldr.xml +++ b/core/res/res/values-sl/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%-e. %m. %Y</string> <string name="numeric_date_format">d. MM. yyyy</string> <string name="numeric_date_template">"%s. %s. %s"</string> diff --git a/core/res/res/values-sr-rRS/donottranslate-cldr.xml b/core/res/res/values-sr-rRS/donottranslate-cldr.xml index 996c75e..3f88960 100644 --- a/core/res/res/values-sr-rRS/donottranslate-cldr.xml +++ b/core/res/res/values-sr-rRS/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%H.%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">HH.mm</string> <string name="numeric_date">%-e.%-m.%Y.</string> <string name="numeric_date_format">d.M.yyyy.</string> <string name="numeric_date_template">"%s.%s.%s."</string> diff --git a/core/res/res/values-sr/donottranslate-cldr.xml b/core/res/res/values-sr/donottranslate-cldr.xml index 7fca1a2..ca3cb08 100644 --- a/core/res/res/values-sr/donottranslate-cldr.xml +++ b/core/res/res/values-sr/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%H.%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">HH.mm</string> <string name="numeric_date">%-e.%-m.%Y.</string> <string name="numeric_date_format">d.M.yyyy.</string> <string name="numeric_date_template">"%s.%s.%s."</string> diff --git a/core/res/res/values-sv/donottranslate-cldr.xml b/core/res/res/values-sv/donottranslate-cldr.xml index 64c83f2..46b9f9d 100644 --- a/core/res/res/values-sv/donottranslate-cldr.xml +++ b/core/res/res/values-sv/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%d-%m-%Y</string> <string name="numeric_date_format">dd-MM-yyyy</string> <string name="numeric_date_template">"%s-%s-%s"</string> diff --git a/core/res/res/values-sw/donottranslate-cldr.xml b/core/res/res/values-sw/donottranslate-cldr.xml index a7a5150..e0625e9 100644 --- a/core/res/res/values-sw/donottranslate-cldr.xml +++ b/core/res/res/values-sw/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%Y/%m/%d</string> <string name="numeric_date_format">yyyy/MM/dd</string> <string name="numeric_date_template">"%s/%s/%s"</string> diff --git a/core/res/res/values-th-rTH/donottranslate-cldr.xml b/core/res/res/values-th-rTH/donottranslate-cldr.xml index 2517143..94ec23d 100644 --- a/core/res/res/values-th-rTH/donottranslate-cldr.xml +++ b/core/res/res/values-th-rTH/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%-e/%-m/%Y</string> <string name="numeric_date_format">d/M/yyyy</string> <string name="numeric_date_template">"%s/%s/%s"</string> diff --git a/core/res/res/values-th/donottranslate-cldr.xml b/core/res/res/values-th/donottranslate-cldr.xml index 7ab4191..b42656a 100644 --- a/core/res/res/values-th/donottranslate-cldr.xml +++ b/core/res/res/values-th/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%-e/%-m/%Y</string> <string name="numeric_date_format">d/M/yyyy</string> <string name="numeric_date_template">"%s/%s/%s"</string> diff --git a/core/res/res/values-tl/donottranslate-cldr.xml b/core/res/res/values-tl/donottranslate-cldr.xml index 4545fb5..970a538 100644 --- a/core/res/res/values-tl/donottranslate-cldr.xml +++ b/core/res/res/values-tl/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%Y-%m-%d</string> <string name="numeric_date_format">yyyy-MM-dd</string> <string name="numeric_date_template">"%s-%s-%s"</string> diff --git a/core/res/res/values-tr/donottranslate-cldr.xml b/core/res/res/values-tr/donottranslate-cldr.xml index 1ab4ff7..a0ee370 100644 --- a/core/res/res/values-tr/donottranslate-cldr.xml +++ b/core/res/res/values-tr/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%H:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">HH:mm</string> <string name="numeric_date">%d %m %Y</string> <string name="numeric_date_format">dd MM yyyy</string> <string name="numeric_date_template">"%s %s %s"</string> diff --git a/core/res/res/values-uk-rUA/donottranslate-cldr.xml b/core/res/res/values-uk-rUA/donottranslate-cldr.xml index f7ca458..5cb41f4 100644 --- a/core/res/res/values-uk-rUA/donottranslate-cldr.xml +++ b/core/res/res/values-uk-rUA/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%d.%m.%Y</string> <string name="numeric_date_format">dd.MM.yyyy</string> <string name="numeric_date_template">"%s.%s.%s"</string> diff --git a/core/res/res/values-uk/donottranslate-cldr.xml b/core/res/res/values-uk/donottranslate-cldr.xml index 51c2cb5..f2a61da 100644 --- a/core/res/res/values-uk/donottranslate-cldr.xml +++ b/core/res/res/values-uk/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%d.%m.%Y</string> <string name="numeric_date_format">dd.MM.yyyy</string> <string name="numeric_date_template">"%s.%s.%s"</string> diff --git a/core/res/res/values-vi-rVN/donottranslate-cldr.xml b/core/res/res/values-vi-rVN/donottranslate-cldr.xml index a385015..307dab2 100644 --- a/core/res/res/values-vi-rVN/donottranslate-cldr.xml +++ b/core/res/res/values-vi-rVN/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%d/%m/%Y</string> <string name="numeric_date_format">dd/MM/yyyy</string> <string name="numeric_date_template">"%s/%s/%s"</string> diff --git a/core/res/res/values-vi/donottranslate-cldr.xml b/core/res/res/values-vi/donottranslate-cldr.xml index 977e021..f4d5dc3 100644 --- a/core/res/res/values-vi/donottranslate-cldr.xml +++ b/core/res/res/values-vi/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%d/%m/%Y</string> <string name="numeric_date_format">dd/MM/yyyy</string> <string name="numeric_date_template">"%s/%s/%s"</string> diff --git a/core/res/res/values-zh-rCN/donottranslate-cldr.xml b/core/res/res/values-zh-rCN/donottranslate-cldr.xml index b34b8b3..6ac384a 100644 --- a/core/res/res/values-zh-rCN/donottranslate-cldr.xml +++ b/core/res/res/values-zh-rCN/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%p %-l:%M</string> <string name="hour_minute_cap_ampm">%p %-l:%M</string> - <string name="twelve_hour_time_format">a h:mm</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%Y-%-m-%-e</string> <string name="numeric_date_format">yyyy-M-d</string> <string name="numeric_date_template">"%s-%s-%s"</string> diff --git a/core/res/res/values-zh-rTW/donottranslate-cldr.xml b/core/res/res/values-zh-rTW/donottranslate-cldr.xml index 869705e..42faa83 100644 --- a/core/res/res/values-zh-rTW/donottranslate-cldr.xml +++ b/core/res/res/values-zh-rTW/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%p %-l:%M</string> <string name="hour_minute_cap_ampm">%p %-l:%M</string> - <string name="twelve_hour_time_format">a h:mm</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%Y/%-m/%-e</string> <string name="numeric_date_format">yyyy/M/d</string> <string name="numeric_date_template">"%s/%s/%s"</string> diff --git a/core/res/res/values-zu/donottranslate-cldr.xml b/core/res/res/values-zu/donottranslate-cldr.xml index 97b179b..703823c 100644 --- a/core/res/res/values-zu/donottranslate-cldr.xml +++ b/core/res/res/values-zu/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%-k:%M</string> <string name="hour_minute_ampm">%-l:%M %p</string> <string name="hour_minute_cap_ampm">%-l:%M %^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">H:mm</string> <string name="numeric_date">%Y-%m-%d</string> <string name="numeric_date_format">yyyy-MM-dd</string> <string name="numeric_date_template">"%s-%s-%s"</string> diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index 05130a1..c0d5136 100755..100644 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -3050,12 +3050,12 @@ <!-- Specifies the formatting pattern used to show the time and/or date in 12-hour mode. Please refer to {@link android.text.format.DateFormat} for a complete description of accepted formatting patterns. - The default pattern is "h:mm aa". --> + The default pattern is a locale-appropriate equivalent of "h:mm a". --> <attr name="format12Hour" format="string"/> <!-- Specifies the formatting pattern used to show the time and/or date in 24-hour mode. Please refer to {@link android.text.format.DateFormat} for a complete description of accepted formatting patterns. - The default pattern is "k:mm". --> + The default pattern is a locale-appropriate equivalent of "H:mm". --> <attr name="format24Hour" format="string"/> <!-- Specifies the time zone to use. When this attribute is specified, the TextClock will ignore the time zone of the system. To use the user's diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index cb7804c..354a0f4 100755..100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -277,8 +277,6 @@ <!-- Boolean indicating whether the wifi chipset has dual frequency band support --> <bool translatable="false" name="config_wifi_dual_band_support">false</bool> - <!-- Boolean indicating whether the wifi chipset has p2p support --> - <bool translatable="false" name="config_wifi_p2p_support">false</bool> <!-- Device type information conforming to Annex B format in WiFi Direct specification. The default represents a dual-mode smartphone --> <string translatable="false" name="config_wifi_p2p_device_type">10-0050F204-5</string> diff --git a/core/res/res/values/donottranslate-cldr.xml b/core/res/res/values/donottranslate-cldr.xml index 0587c16..4d37d47 100644 --- a/core/res/res/values/donottranslate-cldr.xml +++ b/core/res/res/values/donottranslate-cldr.xml @@ -4,8 +4,6 @@ <string name="hour_minute_24">%H:%M</string> <string name="hour_minute_ampm">%-l:%M%p</string> <string name="hour_minute_cap_ampm">%-l:%M%^p</string> - <string name="twelve_hour_time_format">h:mm a</string> - <string name="twenty_four_hour_time_format">HH:mm</string> <string name="numeric_date">%-m/%-e/%Y</string> <string name="numeric_date_format">M/d/yyyy</string> <string name="numeric_date_template">"%s/%s/%s"</string> diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index 99fbf95..cb8d0e5 100755..100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -2272,6 +2272,8 @@ <!-- Accessibility description sent when user completes drawing a pattern. [CHAR LIMIT=NONE] --> <string name="lockscreen_access_pattern_detected">Pattern completed</string> + <!-- Accessibility description sent when user changes the current lock screen widget. [CHAR_LIMIT=none] --> + <string name="keyguard_accessibility_widget_changed">%1$s. Widget %2$d of %3$d.</string> <!-- Accessibility description of the add widget button. [CHAR_LIMIT=none] --> <string name="keyguard_accessibility_add_widget">Add widget.</string> <!-- Accessibility description of the empty sidget slot (place holder for a new widget). [CHAR_LIMIT=none] --> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 391320b..caeccb5 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -810,8 +810,6 @@ <java-symbol type="string" name="time_picker_separator" /> <java-symbol type="string" name="time_wday" /> <java-symbol type="string" name="time_wday_date" /> - <java-symbol type="string" name="twelve_hour_time_format" /> - <java-symbol type="string" name="twenty_four_hour_time_format" /> <java-symbol type="string" name="upload_file" /> <java-symbol type="string" name="user_switched" /> <java-symbol type="string" name="volume_alarm" /> @@ -1354,7 +1352,6 @@ <java-symbol type="id" name="sliding_layout" /> <java-symbol type="id" name="keyguard_add_widget" /> <java-symbol type="id" name="keyguard_add_widget_view" /> - <java-symbol type="id" name="sliding_layout" /> <java-symbol type="id" name="multi_pane_challenge" /> <java-symbol type="id" name="keyguard_user_selector" /> <java-symbol type="id" name="key_enter" /> diff --git a/core/res/res/xml-land/password_kbd_qwerty.xml b/core/res/res/xml-land/password_kbd_qwerty.xml index 988f9ff..988f9ff 100755..100644 --- a/core/res/res/xml-land/password_kbd_qwerty.xml +++ b/core/res/res/xml-land/password_kbd_qwerty.xml diff --git a/core/res/res/xml-land/password_kbd_qwerty_shifted.xml b/core/res/res/xml-land/password_kbd_qwerty_shifted.xml index 4941946..4941946 100755..100644 --- a/core/res/res/xml-land/password_kbd_qwerty_shifted.xml +++ b/core/res/res/xml-land/password_kbd_qwerty_shifted.xml diff --git a/core/res/res/xml-mdpi/password_kbd_qwerty.xml b/core/res/res/xml-mdpi/password_kbd_qwerty.xml index 265d7dc..265d7dc 100755..100644 --- a/core/res/res/xml-mdpi/password_kbd_qwerty.xml +++ b/core/res/res/xml-mdpi/password_kbd_qwerty.xml diff --git a/core/res/res/xml-mdpi/password_kbd_qwerty_shifted.xml b/core/res/res/xml-mdpi/password_kbd_qwerty_shifted.xml index 7379f69..7379f69 100755..100644 --- a/core/res/res/xml-mdpi/password_kbd_qwerty_shifted.xml +++ b/core/res/res/xml-mdpi/password_kbd_qwerty_shifted.xml diff --git a/core/res/res/xml-xlarge/password_kbd_numeric.xml b/core/res/res/xml-xlarge/password_kbd_numeric.xml index b2704f6..b2704f6 100755..100644 --- a/core/res/res/xml-xlarge/password_kbd_numeric.xml +++ b/core/res/res/xml-xlarge/password_kbd_numeric.xml diff --git a/core/res/res/xml-xlarge/password_kbd_qwerty.xml b/core/res/res/xml-xlarge/password_kbd_qwerty.xml index 76b6019..76b6019 100755..100644 --- a/core/res/res/xml-xlarge/password_kbd_qwerty.xml +++ b/core/res/res/xml-xlarge/password_kbd_qwerty.xml diff --git a/core/res/res/xml-xlarge/password_kbd_qwerty_shifted.xml b/core/res/res/xml-xlarge/password_kbd_qwerty_shifted.xml index 35c3142..35c3142 100755..100644 --- a/core/res/res/xml-xlarge/password_kbd_qwerty_shifted.xml +++ b/core/res/res/xml-xlarge/password_kbd_qwerty_shifted.xml diff --git a/core/res/res/xml-xlarge/password_kbd_symbols.xml b/core/res/res/xml-xlarge/password_kbd_symbols.xml index 106dd6e..106dd6e 100755..100644 --- a/core/res/res/xml-xlarge/password_kbd_symbols.xml +++ b/core/res/res/xml-xlarge/password_kbd_symbols.xml diff --git a/core/res/res/xml-xlarge/password_kbd_symbols_shift.xml b/core/res/res/xml-xlarge/password_kbd_symbols_shift.xml index 1233f78..1233f78 100755..100644 --- a/core/res/res/xml-xlarge/password_kbd_symbols_shift.xml +++ b/core/res/res/xml-xlarge/password_kbd_symbols_shift.xml diff --git a/core/res/res/xml/apns.xml b/core/res/res/xml/apns.xml index 8c7245c..249b598 100644 --- a/core/res/res/xml/apns.xml +++ b/core/res/res/xml/apns.xml @@ -20,6 +20,6 @@ <!-- If you edit this version, also edit the version in the partner-supplied apns-conf.xml configuration file --> -<apns version="7"> +<apns version="8"> </apns> diff --git a/core/res/res/xml/kg_password_kbd_numeric.xml b/core/res/res/xml/kg_password_kbd_numeric.xml index 93b32af..93b32af 100755..100644 --- a/core/res/res/xml/kg_password_kbd_numeric.xml +++ b/core/res/res/xml/kg_password_kbd_numeric.xml diff --git a/core/res/res/xml/password_kbd_extension.xml b/core/res/res/xml/password_kbd_extension.xml index e8d61fe..e8d61fe 100755..100644 --- a/core/res/res/xml/password_kbd_extension.xml +++ b/core/res/res/xml/password_kbd_extension.xml diff --git a/core/res/res/xml/password_kbd_numeric.xml b/core/res/res/xml/password_kbd_numeric.xml index 7593ad8..7593ad8 100755..100644 --- a/core/res/res/xml/password_kbd_numeric.xml +++ b/core/res/res/xml/password_kbd_numeric.xml diff --git a/core/res/res/xml/password_kbd_qwerty.xml b/core/res/res/xml/password_kbd_qwerty.xml index dfe581e..dfe581e 100755..100644 --- a/core/res/res/xml/password_kbd_qwerty.xml +++ b/core/res/res/xml/password_kbd_qwerty.xml diff --git a/core/res/res/xml/password_kbd_qwerty_shifted.xml b/core/res/res/xml/password_kbd_qwerty_shifted.xml index 1366c58..1366c58 100755..100644 --- a/core/res/res/xml/password_kbd_qwerty_shifted.xml +++ b/core/res/res/xml/password_kbd_qwerty_shifted.xml diff --git a/core/res/res/xml/password_kbd_symbols.xml b/core/res/res/xml/password_kbd_symbols.xml index 5876b0d..5876b0d 100755..100644 --- a/core/res/res/xml/password_kbd_symbols.xml +++ b/core/res/res/xml/password_kbd_symbols.xml diff --git a/core/res/res/xml/password_kbd_symbols_shift.xml b/core/res/res/xml/password_kbd_symbols_shift.xml index ee83544..ee83544 100755..100644 --- a/core/res/res/xml/password_kbd_symbols_shift.xml +++ b/core/res/res/xml/password_kbd_symbols_shift.xml diff --git a/core/tests/ConnectivityManagerTest/assets/accesspoints.xml b/core/tests/ConnectivityManagerTest/assets/accesspoints.xml index 5e3252c..5e3252c 100755..100644 --- a/core/tests/ConnectivityManagerTest/assets/accesspoints.xml +++ b/core/tests/ConnectivityManagerTest/assets/accesspoints.xml diff --git a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/AccessPointParserHelper.java b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/AccessPointParserHelper.java index a6057de..0461c0b 100644 --- a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/AccessPointParserHelper.java +++ b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/AccessPointParserHelper.java @@ -28,6 +28,7 @@ import android.net.wifi.WifiConfiguration.AuthAlgorithm; import android.net.wifi.WifiConfiguration.IpAssignment; import android.net.wifi.WifiConfiguration.KeyMgmt; import android.net.wifi.WifiConfiguration.ProxySettings; +import android.net.wifi.WifiEnterpriseConfig; import android.net.LinkAddress; import android.net.LinkProperties; import android.net.RouteInfo; @@ -67,7 +68,6 @@ import java.util.List; * networkprefixlength. */ public class AccessPointParserHelper { - private static final String KEYSTORE_SPACE = "keystore://"; private static final String TAG = "AccessPointParserHelper"; static final int NONE = 0; static final int WEP = 1; @@ -212,14 +212,11 @@ public class AccessPointParserHelper { config.allowedKeyManagement.set(KeyMgmt.WPA_EAP); config.allowedKeyManagement.set(KeyMgmt.IEEE8021X); // Initialize other fields. - config.phase2.setValue(""); - config.ca_cert.setValue(""); - config.client_cert.setValue(""); - config.engine.setValue(""); - config.engine_id.setValue(""); - config.key_id.setValue(""); - config.identity.setValue(""); - config.anonymous_identity.setValue(""); + config.enterpriseConfig.setPhase2Method(WifiEnterpriseConfig.Phase2.NONE); + config.enterpriseConfig.setCaCertificateAlias(""); + config.enterpriseConfig.setClientCertificateAlias(""); + config.enterpriseConfig.setIdentity(""); + config.enterpriseConfig.setAnonymousIdentity(""); break; default: throw new SAXException(); @@ -246,7 +243,7 @@ public class AccessPointParserHelper { config.preSharedKey = '"' + passwordStr + '"'; } } else if (securityType == EAP) { - config.password.setValue(passwordStr); + config.enterpriseConfig.setPassword(passwordStr); } else { throw new SAXException(); } @@ -257,33 +254,46 @@ public class AccessPointParserHelper { if (!validateEapValue(eapValue)) { throw new SAXException(); } - config.eap.setValue(eapValue); + if (eapValue.equals("TLS")) { + config.enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.TLS); + } else if (eapValue.equals("TTLS")) { + config.enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.TTLS); + } else if (eapValue.equals("PEAP")) { + config.enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.PEAP); + } eap = false; } if (phase2) { String phase2Value = new String(ch, start, length); - config.phase2.setValue("auth=" + phase2Value); + if (phase2Value.equals("PAP")) { + config.enterpriseConfig.setPhase2Method(WifiEnterpriseConfig.Phase2.PAP); + } else if (phase2Value.equals("MSCHAP")) { + config.enterpriseConfig.setPhase2Method(WifiEnterpriseConfig.Phase2.MSCHAP); + } else if (phase2Value.equals("MSCHAPV2")) { + config.enterpriseConfig.setPhase2Method(WifiEnterpriseConfig.Phase2.MSCHAPV2); + } else if (phase2Value.equals("GTC")) { + config.enterpriseConfig.setPhase2Method(WifiEnterpriseConfig.Phase2.GTC); + } phase2 = false; } if (identity) { String identityValue = new String(ch, start, length); - config.identity.setValue(identityValue); + config.enterpriseConfig.setIdentity(identityValue); identity = false; } if (anonymousidentity) { String anonyId = new String(ch, start, length); - config.anonymous_identity.setValue(anonyId); + config.enterpriseConfig.setAnonymousIdentity(anonyId); anonymousidentity = false; } if (cacert) { String cacertValue = new String(ch, start, length); - // need to install the credentail to "keystore://" - config.ca_cert.setValue(KEYSTORE_SPACE); + config.enterpriseConfig.setCaCertificateAlias(cacertValue); cacert = false; } if (usercert) { String usercertValue = new String(ch, start, length); - config.client_cert.setValue(KEYSTORE_SPACE); + config.enterpriseConfig.setClientCertificateAlias(usercertValue); usercert = false; } if (ip) { diff --git a/core/tests/coretests/src/android/content/pm/AppCacheTest.java b/core/tests/coretests/src/android/content/pm/AppCacheTest.java index aae55e8..aae55e8 100755..100644 --- a/core/tests/coretests/src/android/content/pm/AppCacheTest.java +++ b/core/tests/coretests/src/android/content/pm/AppCacheTest.java diff --git a/core/tests/coretests/src/android/content/pm/PackageManagerTests.java b/core/tests/coretests/src/android/content/pm/PackageManagerTests.java index 04f8009..04f8009 100755..100644 --- a/core/tests/coretests/src/android/content/pm/PackageManagerTests.java +++ b/core/tests/coretests/src/android/content/pm/PackageManagerTests.java diff --git a/core/tests/coretests/src/android/net/http/SslCertificateTest.java b/core/tests/coretests/src/android/net/http/SslCertificateTest.java index 147816b..6a30c6c 100644 --- a/core/tests/coretests/src/android/net/http/SslCertificateTest.java +++ b/core/tests/coretests/src/android/net/http/SslCertificateTest.java @@ -45,11 +45,70 @@ public class SslCertificateTest extends TestCase { @LargeTest public void testSslCertificateWithEmptyIssuer() throws Exception { - CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509"); - X509Certificate x509Certificate = (X509Certificate) - certificateFactory.generateCertificate(new ByteArrayInputStream(Issue1597Certificate.getBytes())); - assertEquals(x509Certificate.getIssuerDN().getName(), ""); + X509Certificate x509Certificate = generateCertificate(Issue1597Certificate); + assertEquals("", x509Certificate.getSubjectDN().getName()); SslCertificate sslCertificate = new SslCertificate(x509Certificate); - assertEquals(sslCertificate.getIssuedBy().getDName(), ""); + assertEquals("", sslCertificate.getIssuedBy().getDName()); } + + /** + * Problematic certificate from Issue 41662 + * http://code.google.com/p/android/issues/detail?id=41662 + */ + private static final String Issue41662Certificate = + "-----BEGIN CERTIFICATE-----\n"+ + "MIIG6jCCBdKgAwIBAgIESPx/LDANBgkqhkiG9w0BAQUFADCBrjESMBAGCgmSJomT\n"+ + "8ixkARkWAnJzMRUwEwYKCZImiZPyLGQBGRYFcG9zdGExEjAQBgoJkiaJk/IsZAEZ\n"+ + "FgJjYTEWMBQGA1UEAxMNQ29uZmlndXJhdGlvbjERMA8GA1UEAxMIU2VydmljZXMx\n"+ + "HDAaBgNVBAMTE1B1YmxpYyBLZXkgU2VydmljZXMxDDAKBgNVBAMTA0FJQTEWMBQG\n"+ + "A1UEAxMNUG9zdGEgQ0EgUm9vdDAeFw0wODEwMjAxNDExMzBaFw0yODEwMTQyMjAw\n"+ + "MDBaMIGrMRIwEAYKCZImiZPyLGQBGRYCcnMxFTATBgoJkiaJk/IsZAEZFgVwb3N0\n"+ + "YTESMBAGCgmSJomT8ixkARkWAmNhMRYwFAYDVQQDEw1Db25maWd1cmF0aW9uMREw\n"+ + "DwYDVQQDEwhTZXJ2aWNlczEcMBoGA1UEAxMTUHVibGljIEtleSBTZXJ2aWNlczEM\n"+ + "MAoGA1UEAxMDQUlBMRMwEQYDVQQDEwpQb3N0YSBDQSAxMIIBIjANBgkqhkiG9w0B\n"+ + "AQEFAAOCAQ8AMIIBCgKCAQEAl5msW5MdLW/2aDlezrjU3jW58MKrcMPHs2szlGdL\n"+ + "nsAcSyYFF1JbyA8iuqLp7mhvcTz9m4jK82XBz/1mPq8wJMU9ekGnLhgbKLGKXRBA\n"+ + "sY9wzCvwpweQV6ui4vr2eOkS1j9Mk7ikatH8tNiIzkNrTj3npDpZv1w4G37iwtpb\n"+ + "yjg+lkNIDY2nWV9roBsAZM8Lvbyi4vxP41YEQZ3hxaGGG0/RKHbugvGatgckxfin\n"+ + "4gpFG2mDhS9uafGgqnLHLwpxgBbi3g6+2TsxOKatTxwxx9/4MND1GjhxKTjDNYPl\n"+ + "5JHUvr9fcvQMxP21/jbO4EsCWG+F38R90kT37hFL3l1qiQIDAQABo4IDDzCCAwsw\n"+ + "DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgcwGA1UdIASBxDCBwTCB\n"+ + "vgYLKwYBBAH6OAoyAQEwga4wMAYIKwYBBQUHAgEWJGh0dHA6Ly93d3cuY2EucG9z\n"+ + "dGEucnMvZG9rdW1lbnRhY2lqYTB6BggrBgEFBQcCAjBuGmxPdm8gamUgZWxla3Ry\n"+ + "b25za2kgc2VydGlmaWthdCBpemRhdmFja29nIChwcm9kdWtjaW9ub2cpIENBIHNl\n"+ + "cnZlcmEgU2VydGlmaWthY2lvbm9nIHRlbGEgUG9zdGU6ICJQb3N0YSBDQSAxIi4w\n"+ + "ggG8BgNVHR8EggGzMIIBrzCByaCBxqCBw6SBwDCBvTESMBAGCgmSJomT8ixkARkW\n"+ + "AnJzMRUwEwYKCZImiZPyLGQBGRYFcG9zdGExEjAQBgoJkiaJk/IsZAEZFgJjYTEW\n"+ + "MBQGA1UEAxMNQ29uZmlndXJhdGlvbjERMA8GA1UEAxMIU2VydmljZXMxHDAaBgNV\n"+ + "BAMTE1B1YmxpYyBLZXkgU2VydmljZXMxDDAKBgNVBAMTA0FJQTEWMBQGA1UEAxMN\n"+ + "UG9zdGEgQ0EgUm9vdDENMAsGA1UEAxMEQ1JMMTCB4KCB3aCB2oaBo2xkYXA6Ly9s\n"+ + "ZGFwLmNhLnBvc3RhLnJzL2NuPVBvc3RhJTIwQ0ElMjBSb290LGNuPUFJQSxjbj1Q\n"+ + "dWJsaWMlMjBLZXklMjBTZXJ2aWNlcyxjbj1TZXJ2aWNlcyxjbj1Db25maWd1cmF0\n"+ + "aW9uLGRjPWNhLGRjPXBvc3RhLGRjPXJzP2NlcnRpZmljYXRlUmV2b2NhdGlvbkxp\n"+ + "c3QlM0JiaW5hcnmGMmh0dHA6Ly9zZXJ0aWZpa2F0aS5jYS5wb3N0YS5ycy9jcmwv\n"+ + "UG9zdGFDQVJvb3QuY3JsMB8GA1UdIwQYMBaAFPLLjeI17xBDxNp7yvrriQOhIq+4\n"+ + "MB0GA1UdDgQWBBQuZ6cm1uhncOeq+pAsMLzXYWUfhjAZBgkqhkiG9n0HQQAEDDAK\n"+ + "GwRWNy4xAwIAgTANBgkqhkiG9w0BAQUFAAOCAQEAjpmoaebsvfjgwgCYArou/s8k\n"+ + "Tr50TUdcJYxAYmCFQp531E1F+qUCWM/7bZApqByR3+EUz8goI5O2Cp/6ISxTR1HC\n"+ + "Dn71ESg7/c8Bs2Obx0LGYPnlRPvw7LH31dYXpj4EMNAamhOfBXgY2htXHCd7daIe\n"+ + "thvNkqWGDzmcoaGw/2BMNadlYkdXxudDBaiPDFm27yR7fPRibjxwkQVknzFezX/y\n"+ + "46j+20LoGJ/IpneT209XzytiaqtZBy3yqz2qImVDqvn5doHw63LOUqt8vfDS1sbd\n"+ + "zi3acAmPK1nERdCMJYJEEGNiGbkbw2cghwLw/4eYGXlj1VLXD3GU42uBr8QftA==\n"+ + "-----END CERTIFICATE-----\n"; + + @LargeTest + public void testSslCertificateWithMultipleCN() throws Exception { + X509Certificate x509Certificate = generateCertificate(Issue41662Certificate); + String dn = x509Certificate.getSubjectDN().getName(); + assertTrue(dn, dn.contains("Posta CA 1")); + assertTrue(dn, dn.contains("Configuration")); + SslCertificate sslCertificate = new SslCertificate(x509Certificate); + assertEquals(dn, "Posta CA 1", sslCertificate.getIssuedTo().getCName()); + } + + private static X509Certificate generateCertificate(String pem) throws Exception { + CertificateFactory cf = CertificateFactory.getInstance("X.509"); + return (X509Certificate) cf.generateCertificate(new ByteArrayInputStream(pem.getBytes())); + } + } diff --git a/core/tests/coretests/src/android/os/storage/AsecTests.java b/core/tests/coretests/src/android/os/storage/AsecTests.java index abb8eae..abb8eae 100755..100644 --- a/core/tests/coretests/src/android/os/storage/AsecTests.java +++ b/core/tests/coretests/src/android/os/storage/AsecTests.java diff --git a/core/tests/coretests/src/android/text/format/DateUtilsTest.java b/core/tests/coretests/src/android/text/format/DateUtilsTest.java index cf42bb1..c5f6236 100644 --- a/core/tests/coretests/src/android/text/format/DateUtilsTest.java +++ b/core/tests/coretests/src/android/text/format/DateUtilsTest.java @@ -21,8 +21,9 @@ import android.test.suitebuilder.annotation.SmallTest; import junit.framework.TestCase; public class DateUtilsTest extends TestCase { + // This test is not in CTS because formatDuration is @hidden. @SmallTest - public void testFormatDurationSeconds() throws Exception { + public void test_formatDuration_seconds() throws Exception { assertEquals("0 seconds", DateUtils.formatDuration(0)); assertEquals("0 seconds", DateUtils.formatDuration(1)); assertEquals("0 seconds", DateUtils.formatDuration(499)); @@ -31,16 +32,18 @@ public class DateUtilsTest extends TestCase { assertEquals("2 seconds", DateUtils.formatDuration(1500)); } + // This test is not in CTS because formatDuration is @hidden. @SmallTest - public void testFormatDurationMinutes() throws Exception { + public void test_formatDuration_Minutes() throws Exception { assertEquals("59 seconds", DateUtils.formatDuration(59000)); assertEquals("60 seconds", DateUtils.formatDuration(59500)); assertEquals("1 minute", DateUtils.formatDuration(60000)); assertEquals("2 minutes", DateUtils.formatDuration(120000)); } + // This test is not in CTS because formatDuration is @hidden. @SmallTest - public void testFormatDurationHours() throws Exception { + public void test_formatDuration_Hours() throws Exception { assertEquals("59 minutes", DateUtils.formatDuration(3540000)); assertEquals("1 hour", DateUtils.formatDuration(3600000)); assertEquals("48 hours", DateUtils.formatDuration(172800000)); diff --git a/core/tests/coretests/src/android/util/PatternsTest.java b/core/tests/coretests/src/android/util/PatternsTest.java index 9519b9f..ebdbb0e 100644 --- a/core/tests/coretests/src/android/util/PatternsTest.java +++ b/core/tests/coretests/src/android/util/PatternsTest.java @@ -156,6 +156,8 @@ public class PatternsTest extends TestCase { "Me: 16505551212 this\n", "Me: 6505551212 this\n", "Me: 5551212 this\n", + "Me: 2211 this\n", + "Me: 112 this\n", "Me: 1-650-555-1212 this\n", "Me: (650) 555-1212 this\n", diff --git a/core/tests/coretests/src/android/webkit/WebkitTest.java b/core/tests/coretests/src/android/webkit/WebkitTest.java index 17b4088..4685e3c 100644 --- a/core/tests/coretests/src/android/webkit/WebkitTest.java +++ b/core/tests/coretests/src/android/webkit/WebkitTest.java @@ -52,7 +52,7 @@ public class WebkitTest extends AndroidTestCase { date.setTime(time); c.setTime(date); index = dateSorter.getIndex(time); - Log.i(LOGTAG, "time: " + DateFormat.format("yyyy/MM/dd kk:mm:ss", c).toString() + + Log.i(LOGTAG, "time: " + DateFormat.format("yyyy/MM/dd HH:mm:ss", c).toString() + " " + index + " " + dateSorter.getLabel(index)); } } diff --git a/core/tests/coretests/src/android/widget/listview/focus/ListWithEditTextHeaderTest.java b/core/tests/coretests/src/android/widget/listview/focus/ListWithEditTextHeaderTest.java index b9051e9..532b9d1 100644 --- a/core/tests/coretests/src/android/widget/listview/focus/ListWithEditTextHeaderTest.java +++ b/core/tests/coretests/src/android/widget/listview/focus/ListWithEditTextHeaderTest.java @@ -22,6 +22,7 @@ import android.test.TouchUtils; import android.test.suitebuilder.annotation.LargeTest; import android.test.suitebuilder.annotation.MediumTest; import android.view.KeyEvent; +import android.view.View; import android.widget.AbsListView; import android.widget.ListView; import android.widget.listview.ListWithEditTextHeader; @@ -63,4 +64,22 @@ public class ListWithEditTextHeaderTest extends ActivityInstrumentationTestCase2 assertTrue("header does not have focus", mListView.getChildAt(0).isFocused()); assertEquals("something is selected", AbsListView.INVALID_POSITION, mListView.getSelectedItemPosition()); } + + @LargeTest + public void testScrollingDoesNotDetachHeaderViewFromWindow() { + View header = mListView.getChildAt(0); + assertNotNull("header is not attached to a window (?!)", header.getWindowToken()); + + // Scroll header off the screen and back onto the screen + int numItemsOnScreen = mListView.getChildCount(); + for (int i = 0; i < numItemsOnScreen; i++) { + sendKeys(KeyEvent.KEYCODE_DPAD_DOWN); + } + for (int i = 0; i < numItemsOnScreen; i++) { + sendKeys(KeyEvent.KEYCODE_DPAD_UP); + } + + // Make sure the header was not accidentally left detached from its window + assertNotNull("header has lost its window", header.getWindowToken()); + } } |
