Merge "Log only 1 line per process when using OpenGLRenderer." into honeycomb
diff --git a/api/current.xml b/api/current.xml
index 52d48b6..9520f19 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -9926,6 +9926,28 @@
visibility="public"
>
</field>
+<field name="textEditSideNoPasteWindowLayout"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16843615"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="textEditSidePasteWindowLayout"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16843614"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
<field name="textFilterEnabled"
type="int"
transient="false"
@@ -234839,6 +234861,17 @@
visibility="public"
>
</method>
+<method name="getDisplayZoomControls"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
<method name="getDomStorageEnabled"
return="boolean"
abstract="false"
@@ -235333,6 +235366,19 @@
<parameter name="zoom" type="android.webkit.WebSettings.ZoomDensity">
</parameter>
</method>
+<method name="setDisplayZoomControls"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="enabled" type="boolean">
+</parameter>
+</method>
<method name="setDomStorageEnabled"
return="void"
abstract="false"
diff --git a/core/java/android/accounts/ChooseAccountActivity.java b/core/java/android/accounts/ChooseAccountActivity.java
index 0bbb6fc..293df78 100644
--- a/core/java/android/accounts/ChooseAccountActivity.java
+++ b/core/java/android/accounts/ChooseAccountActivity.java
@@ -15,23 +15,39 @@
*/
package android.accounts;
-import android.app.ListActivity;
+import android.app.Activity;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Parcelable;
-import android.widget.ArrayAdapter;
-import android.widget.ListView;
-import android.view.View;
import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
+import android.widget.ImageView;
+import android.widget.ListView;
+import android.widget.TextView;
+import com.android.internal.R;
+
+import java.util.HashMap;
/**
* @hide
*/
-public class ChooseAccountActivity extends ListActivity {
+public class ChooseAccountActivity extends Activity {
+
private static final String TAG = "AccountManager";
+
private Parcelable[] mAccounts = null;
private AccountManagerResponse mAccountManagerResponse = null;
private Bundle mResult;
+ private HashMap<String, AuthenticatorDescription> mTypeToAuthDescription
+ = new HashMap<String, AuthenticatorDescription>();
+
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -47,16 +63,51 @@
return;
}
- String[] mAccountNames = new String[mAccounts.length];
+ getAuthDescriptions();
+
+ AccountInfo[] mAccountInfos = new AccountInfo[mAccounts.length];
for (int i = 0; i < mAccounts.length; i++) {
- mAccountNames[i] = ((Account) mAccounts[i]).name;
+ mAccountInfos[i] = new AccountInfo(((Account) mAccounts[i]).name,
+ getDrawableForType(((Account) mAccounts[i]).type));
}
- // Use an existing ListAdapter that will map an array
- // of strings to TextViews
- setListAdapter(new ArrayAdapter<String>(this,
- android.R.layout.simple_list_item_1, mAccountNames));
- getListView().setTextFilterEnabled(true);
+ setContentView(R.layout.choose_account);
+
+ // Setup the list
+ ListView list = (ListView) findViewById(android.R.id.list);
+ // Use an existing ListAdapter that will map an array of strings to TextViews
+ list.setAdapter(new AccountArrayAdapter(this,
+ android.R.layout.simple_list_item_1, mAccountInfos));
+ list.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
+ list.setTextFilterEnabled(true);
+ list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
+ onListItemClick((ListView)parent, v, position, id);
+ }
+ });
+ }
+
+ private void getAuthDescriptions() {
+ for(AuthenticatorDescription desc : AccountManager.get(this).getAuthenticatorTypes()) {
+ mTypeToAuthDescription.put(desc.type, desc);
+ }
+ }
+
+ private Drawable getDrawableForType(String accountType) {
+ Drawable icon = null;
+ if(mTypeToAuthDescription.containsKey(accountType)) {
+ try {
+ AuthenticatorDescription desc = mTypeToAuthDescription.get(accountType);
+ Context authContext = createPackageContext(desc.packageName, 0);
+ icon = authContext.getResources().getDrawable(desc.iconId);
+ } catch (PackageManager.NameNotFoundException e) {
+ // Nothing we can do much here, just log
+ if (Log.isLoggable(TAG, Log.WARN)) {
+ Log.w(TAG, "No icon for account type " + accountType);
+ }
+ }
+ }
+ return icon;
}
protected void onListItemClick(ListView l, View v, int position, long id) {
@@ -79,4 +130,51 @@
}
super.finish();
}
+
+ private static class AccountInfo {
+ final String name;
+ final Drawable drawable;
+
+ AccountInfo(String name, Drawable drawable) {
+ this.name = name;
+ this.drawable = drawable;
+ }
+ }
+
+ private static class ViewHolder {
+ ImageView icon;
+ TextView text;
+ }
+
+ private static class AccountArrayAdapter extends ArrayAdapter<AccountInfo> {
+ private LayoutInflater mLayoutInflater;
+ private AccountInfo[] mInfos;
+
+ public AccountArrayAdapter(Context context, int textViewResourceId, AccountInfo[] infos) {
+ super(context, textViewResourceId, infos);
+ mInfos = infos;
+ mLayoutInflater = (LayoutInflater) context.getSystemService(
+ Context.LAYOUT_INFLATER_SERVICE);
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ ViewHolder holder;
+
+ if (convertView == null) {
+ convertView = mLayoutInflater.inflate(R.layout.choose_account_row, null);
+ holder = new ViewHolder();
+ holder.text = (TextView) convertView.findViewById(R.id.account_row_text);
+ holder.icon = (ImageView) convertView.findViewById(R.id.account_row_icon);
+ convertView.setTag(holder);
+ } else {
+ holder = (ViewHolder) convertView.getTag();
+ }
+
+ holder.text.setText(mInfos[position].name);
+ holder.icon.setImageDrawable(mInfos[position].drawable);
+
+ return convertView;
+ }
+ }
}
diff --git a/core/java/android/app/FragmentManager.java b/core/java/android/app/FragmentManager.java
index bce240f..e729805 100644
--- a/core/java/android/app/FragmentManager.java
+++ b/core/java/android/app/FragmentManager.java
@@ -332,7 +332,7 @@
* Container for fragments associated with an activity.
*/
final class FragmentManagerImpl extends FragmentManager {
- static boolean DEBUG = true;
+ static boolean DEBUG = false;
static final String TAG = "FragmentManager";
static final String TARGET_REQUEST_CODE_STATE_TAG = "android:target_req_state";
@@ -747,7 +747,7 @@
f.onActivityCreated(f.mSavedFragmentState);
if (!f.mCalled) {
throw new SuperNotCalledException("Fragment " + f
- + " did not call through to super.onReady()");
+ + " did not call through to super.onActivityCreated()");
}
f.mSavedFragmentState = null;
}
@@ -810,7 +810,7 @@
f.onDestroyView();
if (!f.mCalled) {
throw new SuperNotCalledException("Fragment " + f
- + " did not call through to super.onDestroyedView()");
+ + " did not call through to super.onDestroyView()");
}
if (f.mView != null && f.mContainer != null) {
Animator anim = null;
diff --git a/core/java/android/app/LoaderManager.java b/core/java/android/app/LoaderManager.java
index fc5f5fc..431be05 100644
--- a/core/java/android/app/LoaderManager.java
+++ b/core/java/android/app/LoaderManager.java
@@ -186,7 +186,7 @@
class LoaderManagerImpl extends LoaderManager {
static final String TAG = "LoaderManager";
- static boolean DEBUG = true;
+ static boolean DEBUG = false;
// These are the currently active loaders. A loader is here
// from the time its load is started until it has been explicitly
diff --git a/core/java/android/bluetooth/BluetoothHeadset.java b/core/java/android/bluetooth/BluetoothHeadset.java
index d5b0042..2959fc0 100644
--- a/core/java/android/bluetooth/BluetoothHeadset.java
+++ b/core/java/android/bluetooth/BluetoothHeadset.java
@@ -670,6 +670,26 @@
return false;
}
+ /**
+ * Send a AT command message to the headset.
+ * @param device Remote Bluetooth Device
+ * @param cmd The String to send.
+ * @hide
+ */
+ public void sendAtCommand(BluetoothDevice device, String command) {
+ if (DBG) log("sendAtCommand()");
+ if (mService != null && isEnabled() && isValidDevice(device)) {
+ try {
+ mService.sendAtCommand(device, command);
+ } catch (RemoteException e) {
+ Log.e(TAG, e.toString());
+ }
+ } else {
+ Log.w(TAG, "Proxy not attached to service");
+ if (DBG) Log.d(TAG, Log.getStackTraceString(new Throwable()));
+ }
+ }
+
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
if (DBG) Log.d(TAG, "Proxy object connected");
diff --git a/core/java/android/bluetooth/IBluetoothHeadset.aidl b/core/java/android/bluetooth/IBluetoothHeadset.aidl
index e952193..3c6cf77 100644
--- a/core/java/android/bluetooth/IBluetoothHeadset.aidl
+++ b/core/java/android/bluetooth/IBluetoothHeadset.aidl
@@ -50,4 +50,6 @@
boolean startVirtualVoiceCall(in BluetoothDevice device);
boolean stopVirtualVoiceCall(in BluetoothDevice device);
+
+ void sendAtCommand(in BluetoothDevice device, String urc);
}
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 6f23215..4f21265 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -1801,7 +1801,6 @@
SCREEN_BRIGHTNESS,
SCREEN_BRIGHTNESS_MODE,
VIBRATE_ON,
- NOTIFICATIONS_USE_RING_VOLUME,
MODE_RINGER,
MODE_RINGER_STREAMS_AFFECTED,
MUTE_STREAMS_AFFECTED,
diff --git a/core/java/android/text/method/Touch.java b/core/java/android/text/method/Touch.java
index 78cbdcf..a528044 100644
--- a/core/java/android/text/method/Touch.java
+++ b/core/java/android/text/method/Touch.java
@@ -77,24 +77,6 @@
}
/**
- * @hide
- * Returns the maximum scroll value in x.
- */
- public static int getMaxScrollX(TextView widget, Layout layout, int y) {
- int top = layout.getLineForVertical(y);
- int bottom = layout.getLineForVertical(y + widget.getHeight()
- - widget.getTotalPaddingTop() -widget.getTotalPaddingBottom());
- int left = Integer.MAX_VALUE;
- int right = 0;
- for (int i = top; i <= bottom; i++) {
- left = (int) Math.min(left, layout.getLineLeft(i));
- right = (int) Math.max(right, layout.getLineRight(i));
- }
- return right - left - widget.getWidth() - widget.getTotalPaddingLeft()
- - widget.getTotalPaddingRight();
- }
-
- /**
* Handles touch events for dragging. You may want to do other actions
* like moving the cursor on touch as well.
*/
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 811a633..469bbaa 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -1813,6 +1813,8 @@
private int mPrevWidth = -1;
private int mPrevHeight = -1;
+ private boolean mLastIsOpaque;
+
/**
* Convenience value to check for float values that are close enough to zero to be considered
* zero.
@@ -5117,7 +5119,16 @@
removeCallbacks(mPendingCheckForLongPress);
}
}
-
+
+ /**
+ * Remove the pending click action
+ */
+ private void removePerformClickCallback() {
+ if (mPerformClick != null) {
+ removeCallbacks(mPerformClick);
+ }
+ }
+
/**
* Remove the prepress detection timer.
*/
@@ -6717,7 +6728,7 @@
public void invalidate() {
invalidate(true);
}
-
+
/**
* This is where the invalidate() work actually happens. A full invalidate()
* causes the drawing cache to be invalidated, but this function can be called with
@@ -6734,8 +6745,11 @@
ViewDebug.trace(this, ViewDebug.HierarchyTraceType.INVALIDATE);
}
+ boolean opaque = isOpaque();
if ((mPrivateFlags & (DRAWN | HAS_BOUNDS)) == (DRAWN | HAS_BOUNDS) ||
- (invalidateCache && (mPrivateFlags & DRAWING_CACHE_VALID) == DRAWING_CACHE_VALID)) {
+ (invalidateCache && (mPrivateFlags & DRAWING_CACHE_VALID) == DRAWING_CACHE_VALID) ||
+ opaque != mLastIsOpaque) {
+ mLastIsOpaque = opaque;
mPrivateFlags &= ~DRAWN;
if (invalidateCache) {
mPrivateFlags &= ~DRAWING_CACHE_VALID;
@@ -7579,6 +7593,7 @@
removeUnsetPressCallback();
removeLongPressCallback();
+ removePerformClickCallback();
destroyDrawingCache();
diff --git a/core/java/android/view/ViewRoot.java b/core/java/android/view/ViewRoot.java
index 2c6ec71..ad101f8 100644
--- a/core/java/android/view/ViewRoot.java
+++ b/core/java/android/view/ViewRoot.java
@@ -710,8 +710,10 @@
// object is not initialized to its backing store, but soon it
// will be (assuming the window is visible).
attachInfo.mSurface = mSurface;
- attachInfo.mUse32BitDrawingCache = PixelFormat.formatHasAlpha(lp.format) ||
- lp.format == PixelFormat.RGBX_8888;
+ // We used to use the following condition to choose 32 bits drawing caches:
+ // PixelFormat.hasAlpha(lp.format) || lp.format == PixelFormat.RGBX_8888
+ // However, windows are now always 32 bits by default, so choose 32 bits
+ attachInfo.mUse32BitDrawingCache = true;
attachInfo.mHasWindowFocus = false;
attachInfo.mWindowVisibility = viewVisibility;
attachInfo.mRecomputeGlobalAttributes = false;
diff --git a/core/java/android/view/inputmethod/InputMethodSubtype.java b/core/java/android/view/inputmethod/InputMethodSubtype.java
index 39a0c19..ba425a6 100644
--- a/core/java/android/view/inputmethod/InputMethodSubtype.java
+++ b/core/java/android/view/inputmethod/InputMethodSubtype.java
@@ -22,13 +22,10 @@
import java.util.Arrays;
/**
- * Information given to an {@link InputMethod} about a client connecting
- * to it.
- */
-/**
- * InputMethodSubtype is a subtype contained in the input method. Subtype can describe
- * locales (e.g. en_US, fr_FR...) and modes (e.g. voice, keyboard...), and is used for
- * IME switch. The subtype allows the system to call the specified subtype of IME directly.
+ * This class is used to specify meta information of a subtype contained in an input method.
+ * Subtype can describe locale (e.g. en_US, fr_FR...) and mode (e.g. voice, keyboard...), and is
+ * used for IME switch and settings. The input method subtype allows the system to bring up the
+ * specified subtype of the designated input method directly.
*/
public final class InputMethodSubtype implements Parcelable {
private final int mSubtypeNameResId;
diff --git a/core/java/android/webkit/WebSettings.java b/core/java/android/webkit/WebSettings.java
index 518ba69..0bf0eab 100644
--- a/core/java/android/webkit/WebSettings.java
+++ b/core/java/android/webkit/WebSettings.java
@@ -571,7 +571,6 @@
* A combination of built in zoom controls enabled
* and on screen zoom controls disabled allows for pinch to zoom
* to work without the on screen controls
- * @hide
*/
public void setDisplayZoomControls(boolean enabled) {
mDisplayZoomControls = enabled;
@@ -580,7 +579,6 @@
/**
* Returns true if the on screen zoom buttons are being used.
- * @hide
*/
public boolean getDisplayZoomControls() {
return mDisplayZoomControls;
diff --git a/core/java/android/webkit/WebTextView.java b/core/java/android/webkit/WebTextView.java
index 72b0023..6e1a6fc 100644
--- a/core/java/android/webkit/WebTextView.java
+++ b/core/java/android/webkit/WebTextView.java
@@ -135,7 +135,6 @@
// Used to determine whether onFocusChanged was called as a result of
// calling remove().
private boolean mInsideRemove;
- private boolean mInPassword;
// Types used with setType. Keep in sync with CachedInput.h
private static final int NORMAL_TEXT_FIELD = 0;
@@ -374,18 +373,24 @@
}
/**
- * Ensure that the underlying textfield is lined up with the WebTextView.
+ * Ensure that the underlying text field/area is lined up with the WebTextView.
*/
private void lineUpScroll() {
Layout layout = getLayout();
if (mWebView != null && layout != null) {
- float maxScrollX = Touch.getMaxScrollX(this, layout, mScrollY);
- if (DebugFlags.WEB_TEXT_VIEW) {
- Log.v(LOGTAG, "onTouchEvent x=" + mScrollX + " y="
- + mScrollY + " maxX=" + maxScrollX);
+ if (mSingle) {
+ // textfields only need to be lined up horizontally.
+ float maxScrollX = layout.getLineRight(0) - getWidth();
+ if (DebugFlags.WEB_TEXT_VIEW) {
+ Log.v(LOGTAG, "onTouchEvent x=" + mScrollX + " y="
+ + mScrollY + " maxX=" + maxScrollX);
+ }
+ mWebView.scrollFocusedTextInputX(maxScrollX > 0 ?
+ mScrollX / maxScrollX : 0);
+ } else {
+ // textareas only need to be lined up vertically.
+ mWebView.scrollFocusedTextInputY(mScrollY);
}
- mWebView.scrollFocusedTextInput(maxScrollX > 0 ?
- mScrollX / maxScrollX : 0, mScrollY);
}
}
@@ -414,6 +419,7 @@
mLayout.getSpacingAdd(), false, null, ellipsisWidth,
lineHeight);
}
+ lineUpScroll();
}
/**
@@ -786,10 +792,8 @@
}
@Override
- public boolean bringPointIntoView(int offset) {
- if (mInPassword) {
- return getLayout() != null && super.bringPointIntoView(offset);
- }
+ public boolean requestRectangleOnScreen(Rect rectangle, boolean immediate) {
+ // Do nothing, since webkit will put the textfield on screen.
return true;
}
@@ -904,7 +908,6 @@
* @param inPassword True if the textfield is a password field.
*/
/* package */ void setInPassword(boolean inPassword) {
- mInPassword = inPassword;
if (inPassword) {
setInputType(EditorInfo.TYPE_CLASS_TEXT | EditorInfo.
TYPE_TEXT_VARIATION_WEB_PASSWORD);
@@ -1084,7 +1087,7 @@
*/
/* package */ void setTextAndKeepSelection(String text) {
mPreChange = text.toString();
- Editable edit = (Editable) getText();
+ Editable edit = getText();
int selStart = Selection.getSelectionStart(edit);
int selEnd = Selection.getSelectionEnd(edit);
mInSetTextAndKeepSelection = true;
@@ -1094,6 +1097,12 @@
if (selEnd > newLength) selEnd = newLength;
Selection.setSelection(edit, selStart, selEnd);
mInSetTextAndKeepSelection = false;
+ InputMethodManager imm = InputMethodManager.peekInstance();
+ if (imm != null && imm.isActive(this)) {
+ // Since the text has changed, do not allow the IME to replace the
+ // existing text as though it were a completion.
+ imm.restartInput(this);
+ }
updateCachedTextfield();
}
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index f5ad6fe..3102ee9 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -476,6 +476,7 @@
private static final int TOUCH_DRAG_LAYER_MODE = 9;
// Whether to forward the touch events to WebCore
+ // Can only be set by WebKit via JNI.
private boolean mForwardTouchEvents = false;
// Whether to prevent default during touch. The initial value depends on
@@ -5358,26 +5359,26 @@
+ " numPointers=" + ev.getPointerCount());
}
- // Always pass multi-touch event to WebKit first.
- // If WebKit doesn't consume it and set preventDefault to true,
- // WebView's private handler will handle it.
- if (ev.getPointerCount() > 1) {
- if (DebugFlags.WEB_VIEW) {
- Log.v(LOGTAG, "passing " + ev.getPointerCount() + " points to webkit");
+ int action = ev.getActionMasked();
+ if (ev.getPointerCount() > 1) { // Multi-touch
+ mIsHandlingMultiTouch = true;
+
+ // If WebKit already showed no interests in this sequence of events,
+ // WebView handles them directly.
+ if (mPreventDefault == PREVENT_DEFAULT_NO && action == MotionEvent.ACTION_MOVE) {
+ handleMultiTouchInWebView(ev);
+ } else {
+ passMultiTouchToWebKit(ev);
}
- if (!mIsHandlingMultiTouch) {
- mIsHandlingMultiTouch = true;
- }
- passMultiTouchToWebKit(ev);
return true;
- } else {
- // Skip ACTION_MOVE for single touch if it's still handling multi-touch.
- if (mIsHandlingMultiTouch && ev.getActionMasked() == MotionEvent.ACTION_MOVE) {
- return false;
- }
}
- return handleTouchEventCommon(ev, ev.getActionMasked(), Math.round(ev.getX()), Math.round(ev.getY()));
+ // Skip ACTION_MOVE for single touch if it's still handling multi-touch.
+ if (mIsHandlingMultiTouch && action == MotionEvent.ACTION_MOVE) {
+ return false;
+ }
+
+ return handleTouchEventCommon(ev, action, Math.round(ev.getX()), Math.round(ev.getY()));
}
/*
@@ -6616,23 +6617,34 @@
}
/**
- * Scroll the focused text field/area to match the WebTextView
+ * Scroll the focused text field to match the WebTextView
* @param xPercent New x position of the WebTextView from 0 to 1.
- * @param y New y position of the WebTextView in view coordinates
*/
- /*package*/ void scrollFocusedTextInput(float xPercent, int y) {
+ /*package*/ void scrollFocusedTextInputX(float xPercent) {
if (!inEditingMode() || mWebViewCore == null) {
return;
}
- mWebViewCore.sendMessage(EventHub.SCROLL_TEXT_INPUT,
- // Since this position is relative to the top of the text input
- // field, we do not need to take the title bar's height into
- // consideration.
- viewToContentDimension(y),
+ mWebViewCore.sendMessage(EventHub.SCROLL_TEXT_INPUT, 0,
new Float(xPercent));
}
/**
+ * Scroll the focused textarea vertically to match the WebTextView
+ * @param y New y position of the WebTextView in view coordinates
+ */
+ /* package */ void scrollFocusedTextInputY(int y) {
+ if (!inEditingMode()) {
+ return;
+ }
+ int xPos = viewToContentX((mWebTextView.getLeft() + mWebTextView.getRight()) / 2);
+ int yPos = viewToContentY((mWebTextView.getTop() + mWebTextView.getBottom()) / 2);
+ int layer = nativeScrollableLayer(xPos, yPos, null, null);
+ if (layer != 0) {
+ nativeScrollLayer(layer, 0, viewToContentDimension(y));
+ }
+ }
+
+ /**
* Set our starting point and time for a drag from the WebTextView.
*/
/*package*/ void initiateTextFieldDrag(float x, float y, long eventTime) {
@@ -7346,75 +7358,85 @@
if (mPreventDefault == PREVENT_DEFAULT_YES) {
mTouchHighlightRegion.setEmpty();
}
- } else if (msg.arg2 == 0) {
- // prevent default is not called in WebCore, so the
- // message needs to be reprocessed in UI
+ } else {
TouchEventData ted = (TouchEventData) msg.obj;
- if (ted.mPoints.length > 1) { // for multi-touch.
- handleMultiTouchInWebView(ted.mMotionEvent);
+ if (ted.mPoints.length > 1) { // multi-touch
+ if (ted.mAction == MotionEvent.ACTION_POINTER_UP) {
+ mIsHandlingMultiTouch = false;
+ }
+ if (msg.arg2 == 0) {
+ mPreventDefault = PREVENT_DEFAULT_NO;
+ handleMultiTouchInWebView(ted.mMotionEvent);
+ } else {
+ mPreventDefault = PREVENT_DEFAULT_YES;
+ }
break;
}
- // Following is for single touch.
- switch (ted.mAction) {
- case MotionEvent.ACTION_DOWN:
- mLastDeferTouchX = contentToViewX(ted.mPoints[0].x)
- - mScrollX;
- mLastDeferTouchY = contentToViewY(ted.mPoints[0].y)
- - mScrollY;
- mDeferTouchMode = TOUCH_INIT_MODE;
- break;
- case MotionEvent.ACTION_MOVE: {
- // no snapping in defer process
- int x = contentToViewX(ted.mPoints[0].x) - mScrollX;
- int y = contentToViewY(ted.mPoints[0].y) - mScrollY;
- if (mDeferTouchMode != TOUCH_DRAG_MODE) {
- mDeferTouchMode = TOUCH_DRAG_MODE;
- mLastDeferTouchX = x;
- mLastDeferTouchY = y;
- startScrollingLayer(x, y);
- startDrag();
+ // prevent default is not called in WebCore, so the
+ // message needs to be reprocessed in UI
+ if (msg.arg2 == 0) {
+ // Following is for single touch.
+ switch (ted.mAction) {
+ case MotionEvent.ACTION_DOWN:
+ mLastDeferTouchX = contentToViewX(ted.mPoints[0].x)
+ - mScrollX;
+ mLastDeferTouchY = contentToViewY(ted.mPoints[0].y)
+ - mScrollY;
+ mDeferTouchMode = TOUCH_INIT_MODE;
+ break;
+ case MotionEvent.ACTION_MOVE: {
+ // no snapping in defer process
+ int x = contentToViewX(ted.mPoints[0].x) - mScrollX;
+ int y = contentToViewY(ted.mPoints[0].y) - mScrollY;
+ if (mDeferTouchMode != TOUCH_DRAG_MODE) {
+ mDeferTouchMode = TOUCH_DRAG_MODE;
+ mLastDeferTouchX = x;
+ mLastDeferTouchY = y;
+ startScrollingLayer(x, y);
+ startDrag();
+ }
+ int deltaX = pinLocX((int) (mScrollX
+ + mLastDeferTouchX - x))
+ - mScrollX;
+ int deltaY = pinLocY((int) (mScrollY
+ + mLastDeferTouchY - y))
+ - mScrollY;
+ doDrag(deltaX, deltaY);
+ if (deltaX != 0) mLastDeferTouchX = x;
+ if (deltaY != 0) mLastDeferTouchY = y;
+ break;
}
- int deltaX = pinLocX((int) (mScrollX
- + mLastDeferTouchX - x))
- - mScrollX;
- int deltaY = pinLocY((int) (mScrollY
- + mLastDeferTouchY - y))
- - mScrollY;
- doDrag(deltaX, deltaY);
- if (deltaX != 0) mLastDeferTouchX = x;
- if (deltaY != 0) mLastDeferTouchY = y;
- break;
+ case MotionEvent.ACTION_UP:
+ case MotionEvent.ACTION_CANCEL:
+ if (mDeferTouchMode == TOUCH_DRAG_MODE) {
+ // no fling in defer process
+ mScroller.springBack(mScrollX, mScrollY, 0,
+ computeMaxScrollX(), 0,
+ computeMaxScrollY());
+ invalidate();
+ WebViewCore.resumePriority();
+ WebViewCore.resumeUpdatePicture(mWebViewCore);
+ }
+ mDeferTouchMode = TOUCH_DONE_MODE;
+ break;
+ case WebViewCore.ACTION_DOUBLETAP:
+ // doDoubleTap() needs mLastTouchX/Y as anchor
+ mLastTouchX = contentToViewX(ted.mPoints[0].x) - mScrollX;
+ mLastTouchY = contentToViewY(ted.mPoints[0].y) - mScrollY;
+ mZoomManager.handleDoubleTap(mLastTouchX, mLastTouchY);
+ mDeferTouchMode = TOUCH_DONE_MODE;
+ break;
+ case WebViewCore.ACTION_LONGPRESS:
+ HitTestResult hitTest = getHitTestResult();
+ if (hitTest != null && hitTest.mType
+ != HitTestResult.UNKNOWN_TYPE) {
+ performLongClick();
+ }
+ mDeferTouchMode = TOUCH_DONE_MODE;
+ break;
}
- case MotionEvent.ACTION_UP:
- case MotionEvent.ACTION_CANCEL:
- if (mDeferTouchMode == TOUCH_DRAG_MODE) {
- // no fling in defer process
- mScroller.springBack(mScrollX, mScrollY, 0,
- computeMaxScrollX(), 0,
- computeMaxScrollY());
- invalidate();
- WebViewCore.resumePriority();
- WebViewCore.resumeUpdatePicture(mWebViewCore);
- }
- mDeferTouchMode = TOUCH_DONE_MODE;
- break;
- case WebViewCore.ACTION_DOUBLETAP:
- // doDoubleTap() needs mLastTouchX/Y as anchor
- mLastTouchX = contentToViewX(ted.mPoints[0].x) - mScrollX;
- mLastTouchY = contentToViewY(ted.mPoints[0].y) - mScrollY;
- mZoomManager.handleDoubleTap(mLastTouchX, mLastTouchY);
- mDeferTouchMode = TOUCH_DONE_MODE;
- break;
- case WebViewCore.ACTION_LONGPRESS:
- HitTestResult hitTest = getHitTestResult();
- if (hitTest != null && hitTest.mType
- != HitTestResult.UNKNOWN_TYPE) {
- performLongClick();
- }
- mDeferTouchMode = TOUCH_DONE_MODE;
- break;
}
}
break;
@@ -7967,15 +7989,27 @@
}
}
- // called by JNI
+ /**
+ * Called by JNI to send a message to the webcore thread that the user
+ * touched the webpage.
+ * @param touchGeneration Generation number of the touch, to ignore touches
+ * after a new one has been generated.
+ * @param frame Pointer to the frame holding the node that was touched.
+ * @param node Pointer to the node touched.
+ * @param x x-position of the touch.
+ * @param y y-position of the touch.
+ * @param scrollY Only used when touching on a textarea. Otherwise, use -1.
+ * Tells how much the textarea is scrolled.
+ */
private void sendMotionUp(int touchGeneration,
- int frame, int node, int x, int y) {
+ int frame, int node, int x, int y, int scrollY) {
WebViewCore.TouchUpData touchUpData = new WebViewCore.TouchUpData();
touchUpData.mMoveGeneration = touchGeneration;
touchUpData.mFrame = frame;
touchUpData.mNode = node;
touchUpData.mX = x;
touchUpData.mY = y;
+ touchUpData.mScrollY = scrollY;
mWebViewCore.sendMessage(EventHub.TOUCH_UP, touchUpData);
}
@@ -8151,8 +8185,8 @@
* @hide This is only used by the webkit layout test.
*/
public void setDeferMultiTouch(boolean value) {
- mDeferMultitouch = value;
- Log.v(LOGTAG, "set mDeferMultitouch to " + value);
+ mDeferMultitouch = value;
+ Log.v(LOGTAG, "set mDeferMultitouch to " + value);
}
/**
@@ -8301,5 +8335,12 @@
// Returns a pointer to the scrollable LayerAndroid at the given point.
private native int nativeScrollableLayer(int x, int y, Rect scrollRect,
Rect scrollBounds);
- private native boolean nativeScrollLayer(int layer, int dx, int dy);
+ /**
+ * Scroll the specified layer.
+ * @param layer Id of the layer to scroll, as determined by nativeScrollableLayer.
+ * @param newX Destination x position to which to scroll.
+ * @param newY Destination y position to which to scroll.
+ * @return True if the layer is successfully scrolled.
+ */
+ private native boolean nativeScrollLayer(int layer, int newX, int newY);
}
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index 4fe1678..bb4441f 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -560,7 +560,7 @@
private native String nativeRetrieveImageSource(int x, int y);
private native void nativeTouchUp(int touchGeneration,
- int framePtr, int nodePtr, int x, int y);
+ int framePtr, int nodePtr, int x, int y, int scrollY);
private native boolean nativeHandleTouchEvent(int action, int[] idArray,
int[] xArray, int[] yArray, int count, int metaState);
@@ -790,6 +790,8 @@
int mNode;
int mX;
int mY;
+ // Used in the case of a scrolled textarea
+ int mScrollY;
}
static class TouchHighlightData {
@@ -1321,7 +1323,8 @@
TouchUpData touchUpData = (TouchUpData) msg.obj;
nativeTouchUp(touchUpData.mMoveGeneration,
touchUpData.mFrame, touchUpData.mNode,
- touchUpData.mX, touchUpData.mY);
+ touchUpData.mX, touchUpData.mY,
+ touchUpData.mScrollY);
break;
case TOUCH_EVENT: {
diff --git a/core/java/android/webkit/ZoomManager.java b/core/java/android/webkit/ZoomManager.java
index 9a050c5..b47fe86 100644
--- a/core/java/android/webkit/ZoomManager.java
+++ b/core/java/android/webkit/ZoomManager.java
@@ -232,12 +232,26 @@
}
private void setDefaultZoomScale(float defaultScale) {
+ final float originalDefault = mDefaultScale;
mDefaultScale = defaultScale;
mInvDefaultScale = 1 / defaultScale;
mDefaultMaxZoomScale = defaultScale * DEFAULT_MAX_ZOOM_SCALE_FACTOR;
mDefaultMinZoomScale = defaultScale * DEFAULT_MIN_ZOOM_SCALE_FACTOR;
- mMaxZoomScale = mDefaultMaxZoomScale;
- mMinZoomScale = mDefaultMinZoomScale;
+ if (originalDefault > 0.0 && mMaxZoomScale > 0.0) {
+ // Keeps max zoom scale when zoom density changes.
+ mMaxZoomScale = defaultScale / originalDefault * mMaxZoomScale;
+ } else {
+ mMaxZoomScale = mDefaultMaxZoomScale;
+ }
+ if (originalDefault > 0.0 && mMinZoomScale > 0.0) {
+ // Keeps min zoom scale when zoom density changes.
+ mMinZoomScale = defaultScale / originalDefault * mMinZoomScale;
+ } else {
+ mMinZoomScale = mDefaultMinZoomScale;
+ }
+ if (!exceedsMinScaleIncrement(mMinZoomScale, mMaxZoomScale)) {
+ mMaxZoomScale = mMinZoomScale;
+ }
}
public final float getScale() {
@@ -468,7 +482,7 @@
mTextWrapScale = scale;
}
- if (scale != mActualScale || force) {
+ if (exceedsMinScaleIncrement(scale, mActualScale) || force) {
float oldScale = mActualScale;
float oldInvScale = mInvActualScale;
diff --git a/core/java/android/widget/AdapterViewAnimator.java b/core/java/android/widget/AdapterViewAnimator.java
index 6eb06ad..e34a204 100644
--- a/core/java/android/widget/AdapterViewAnimator.java
+++ b/core/java/android/widget/AdapterViewAnimator.java
@@ -696,6 +696,8 @@
mWhichChild = 0;
showOnly(mWhichChild, true);
+ } else if (mOldItemCount != getCount()) {
+ showOnly(mWhichChild, true);
}
refreshChildren();
requestLayout();
diff --git a/core/java/android/widget/StackView.java b/core/java/android/widget/StackView.java
index 9ec4b74..03c073c 100644
--- a/core/java/android/widget/StackView.java
+++ b/core/java/android/widget/StackView.java
@@ -454,9 +454,13 @@
canvas.getClipBounds(stackInvalidateRect);
final int childCount = getChildCount();
for (int i = 0; i < childCount; i++) {
- LayoutParams lp = (LayoutParams) getChildAt(i).getLayoutParams();
+ final View child = getChildAt(i);
+ LayoutParams lp = (LayoutParams) child.getLayoutParams();
+ if ((lp.horizontalOffset == 0 && lp.verticalOffset == 0) ||
+ child.getAlpha() == 0f || child.getVisibility() != VISIBLE) {
+ lp.resetInvalidateRect();
+ }
stackInvalidateRect.union(lp.getInvalidateRect());
- lp.resetInvalidateRect();
}
canvas.save(Canvas.CLIP_SAVE_FLAG);
canvas.clipRect(stackInvalidateRect, Region.Op.UNION);
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index d09e52f..aac57ed 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -307,8 +307,8 @@
int mTextSelectHandleLeftRes;
int mTextSelectHandleRightRes;
int mTextSelectHandleRes;
- int mTextEditPasteWindowLayout;
- int mTextEditNoPasteWindowLayout;
+ int mTextEditPasteWindowLayout, mTextEditSidePasteWindowLayout;
+ int mTextEditNoPasteWindowLayout, mTextEditSideNoPasteWindowLayout;
Drawable mSelectHandleLeft;
Drawable mSelectHandleRight;
@@ -762,6 +762,14 @@
mTextEditNoPasteWindowLayout = a.getResourceId(attr, 0);
break;
+ case com.android.internal.R.styleable.TextView_textEditSidePasteWindowLayout:
+ mTextEditSidePasteWindowLayout = a.getResourceId(attr, 0);
+ break;
+
+ case com.android.internal.R.styleable.TextView_textEditSideNoPasteWindowLayout:
+ mTextEditSideNoPasteWindowLayout = a.getResourceId(attr, 0);
+ break;
+
case com.android.internal.R.styleable.TextView_textIsSelectable:
mTextIsSelectable = a.getBoolean(attr, false);
break;
@@ -4783,8 +4791,6 @@
return super.onKeyUp(keyCode, event);
}
- hideControllers();
-
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_CENTER:
mDPadCenterIsDown = false;
@@ -7118,6 +7124,13 @@
}
super.onFocusChanged(focused, direction, previouslyFocusedRect);
+
+ // After super.onFocusChanged so that this TextView is registered and can ask for the IME
+ // Showing the IME while focus is moved using the D-Pad is a bad idea, however this does
+ // not happen in that case (using the arrows on a bluetooth keyboard).
+ if (focused) {
+ onTouchFinished(null);
+ }
}
private int getLastTapPosition() {
@@ -7260,6 +7273,9 @@
return superResult;
}
+ final boolean touchIsFinished = action == MotionEvent.ACTION_UP && !mIgnoreActionUpEvent &&
+ isFocused();
+
if ((mMovement != null || onCheckIsTextEditor()) && isEnabled()
&& mText instanceof Spannable && mLayout != null) {
boolean handled = false;
@@ -7275,8 +7291,7 @@
handled |= mMovement.onTouchEvent(this, (Spannable) mText, event);
}
- if (mLinksClickable && mAutoLinkMask != 0 && mTextIsSelectable &&
- action == MotionEvent.ACTION_UP && !mIgnoreActionUpEvent && isFocused()) {
+ if (mLinksClickable && mAutoLinkMask != 0 && mTextIsSelectable && touchIsFinished) {
// The LinkMovementMethod which should handle taps on links has not been installed
// to support text selection. We reproduce its behavior here to open links.
ClickableSpan[] links = ((Spannable) mText).getSpans(getSelectionStart(),
@@ -7298,26 +7313,15 @@
mSelectionModifierCursorController.updatePosition();
}
}
- if (action == MotionEvent.ACTION_UP && !mIgnoreActionUpEvent && isFocused()) {
- InputMethodManager imm = (InputMethodManager)
- getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
+ if (touchIsFinished) {
CommitSelectionReceiver csr = null;
if (getSelectionStart() != oldSelStart || getSelectionEnd() != oldSelEnd ||
didTouchFocusSelect()) {
csr = new CommitSelectionReceiver(oldSelStart, oldSelEnd);
}
- if (!mTextIsSelectable) {
- // Show the IME, except when selecting in read-only text.
- handled |= imm.showSoftInput(this, 0, csr) && (csr != null);
- }
-
- stopSelectionActionMode();
- boolean selectAllGotFocus = mSelectAllOnFocus && mTouchFocusSelected;
- if (hasInsertionController() && !selectAllGotFocus) {
- getInsertionController().show();
- }
+ handled = onTouchFinished(csr);
}
}
@@ -7329,6 +7333,35 @@
return superResult;
}
+ /** Shows the IME if applicable, ends selection mode and displays the selection controller.
+ *
+ * This method is called at the end of a touch event, when the finger is lifted up.
+ * It is also called when the TextField gains focus indirectly through a dispatched event from
+ * one of its parents. We want to have the same behavior in that case.
+ *
+ * @param csr A (possibly null) callback called if the IME has been displayed
+ * @return true if the event was properly sent to the csr
+ */
+ private boolean onTouchFinished(CommitSelectionReceiver csr) {
+ boolean handled = false;
+
+ // Show the IME, except when selecting in read-only text.
+ if (!mTextIsSelectable) {
+ final InputMethodManager imm = (InputMethodManager)
+ getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
+
+ handled = imm.showSoftInput(this, 0, csr) && (csr != null);
+ }
+
+ stopSelectionActionMode();
+ boolean selectAllGotFocus = mSelectAllOnFocus && mTouchFocusSelected;
+ if (hasInsertionController() && !selectAllGotFocus) {
+ getInsertionController().show();
+ }
+
+ return handled;
+ }
+
private void prepareCursorControllers() {
boolean windowSupportsHandles = false;
@@ -8422,8 +8455,11 @@
private final PopupWindow mContainer;
private int mPositionX;
private int mPositionY;
- private View mPasteView, mNoPasteView;
-
+ private final View[] mPasteViews = new View[4];
+ private final int[] mPasteViewLayouts = new int[] {
+ mTextEditPasteWindowLayout, mTextEditNoPasteWindowLayout,
+ mTextEditSidePasteWindowLayout, mTextEditSideNoPasteWindowLayout };
+
public PastePopupMenu() {
mContainer = new PopupWindow(TextView.this.mContext, null,
com.android.internal.R.attr.textSelectHandleWindowStyle);
@@ -8435,12 +8471,16 @@
mContainer.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
}
- private void updateContent() {
- View view = canPaste() ? mPasteView : mNoPasteView;
+ private int viewIndex(boolean onTop) {
+ return (onTop ? 0 : 1<<1) + (canPaste() ? 0 : 1<<0);
+ }
+
+ private void updateContent(boolean onTop) {
+ final int viewIndex = viewIndex(onTop);
+ View view = mPasteViews[viewIndex];
if (view == null) {
- final int layout = canPaste() ? mTextEditPasteWindowLayout :
- mTextEditNoPasteWindowLayout;
+ final int layout = mPasteViewLayouts[viewIndex];
LayoutInflater inflater = (LayoutInflater)TextView.this.mContext.
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (inflater != null) {
@@ -8457,26 +8497,16 @@
view.measure(size, size);
view.setOnClickListener(this);
-
- if (canPaste()) mPasteView = view;
- else mNoPasteView = view;
+
+ mPasteViews[viewIndex] = view;
}
mContainer.setContentView(view);
}
public void show() {
- updateContent();
- final int[] coords = mTempCoords;
- TextView.this.getLocationInWindow(coords);
+ updateContent(true);
positionAtCursor();
- coords[0] += mPositionX;
- coords[1] += mPositionY;
- coords[0] = Math.max(0, coords[0]);
- final int screenWidth = mContext.getResources().getDisplayMetrics().widthPixels;
- coords[0] = Math.min(screenWidth - mContainer.getContentView().getMeasuredWidth(),
- coords[0]);
- mContainer.showAtLocation(TextView.this, Gravity.NO_GRAVITY, coords[0], coords[1]);
}
public void hide() {
@@ -8496,15 +8526,16 @@
}
void positionAtCursor() {
- final int offset = TextView.this.getSelectionStart();
View contentView = mContainer.getContentView();
- final int width = contentView.getMeasuredWidth();
- final int height = contentView.getMeasuredHeight();
+ int width = contentView.getMeasuredWidth();
+ int height = contentView.getMeasuredHeight();
+ final int offset = TextView.this.getSelectionStart();
final int line = mLayout.getLineForOffset(offset);
final int lineTop = mLayout.getLineTop(line);
+ float primaryHorizontal = mLayout.getPrimaryHorizontal(offset);
final Rect bounds = sCursorControllerTempRect;
- bounds.left = (int) (mLayout.getPrimaryHorizontal(offset) - width / 2.0f);
+ bounds.left = (int) (primaryHorizontal - width / 2.0f);
bounds.top = lineTop - height;
bounds.right = bounds.left + width;
@@ -8514,6 +8545,44 @@
mPositionX = bounds.left;
mPositionY = bounds.top;
+
+
+ final int[] coords = mTempCoords;
+ TextView.this.getLocationInWindow(coords);
+ coords[0] += mPositionX;
+ coords[1] += mPositionY;
+
+ final int screenWidth = mContext.getResources().getDisplayMetrics().widthPixels;
+ if (coords[1] < 0) {
+ updateContent(false);
+ // Update dimensions from new view
+ contentView = mContainer.getContentView();
+ width = contentView.getMeasuredWidth();
+ height = contentView.getMeasuredHeight();
+
+ // Vertical clipping, move under edited line and to the side of insertion cursor
+ // TODO bottom clipping in case there is no system bar
+ coords[1] += height;
+ final int lineBottom = mLayout.getLineBottom(line);
+ final int lineHeight = lineBottom - lineTop;
+ coords[1] += lineHeight;
+
+ // Move to right hand side of insertion cursor by default. TODO RTL text.
+ final Drawable handle = mContext.getResources().getDrawable(mTextSelectHandleRes);
+ final int handleHalfWidth = handle.getIntrinsicWidth() / 2;
+
+ if (primaryHorizontal + handleHalfWidth + width < screenWidth) {
+ coords[0] += handleHalfWidth + width / 2;
+ } else {
+ coords[0] -= handleHalfWidth + width / 2;
+ }
+ } else {
+ // Horizontal clipping
+ coords[0] = Math.max(0, coords[0]);
+ coords[0] = Math.min(screenWidth - width, coords[0]);
+ }
+
+ mContainer.showAtLocation(TextView.this, Gravity.NO_GRAVITY, coords[0], coords[1]);
}
}
@@ -8915,11 +8984,11 @@
hideDelayed();
getHandle().show();
removePastePopupCallback();
- if (canPaste()) {
- final long durationSinceCutOrCopy = SystemClock.uptimeMillis() - sLastCutOrCopyTime;
- if (durationSinceCutOrCopy < RECENT_CUT_COPY_DURATION) {
- delayBeforePaste = 0;
- }
+ final long durationSinceCutOrCopy = SystemClock.uptimeMillis() - sLastCutOrCopyTime;
+ if (durationSinceCutOrCopy < RECENT_CUT_COPY_DURATION) {
+ delayBeforePaste = 0;
+ }
+ if (delayBeforePaste == 0 || canPaste()) {
if (mPastePopupShower == null) {
mPastePopupShower = new Runnable() {
public void run() {
diff --git a/core/java/android/widget/Toast.java b/core/java/android/widget/Toast.java
index 6a7db1f0..bb23173 100644
--- a/core/java/android/widget/Toast.java
+++ b/core/java/android/widget/Toast.java
@@ -301,6 +301,8 @@
final Runnable mHide = new Runnable() {
public void run() {
handleHide();
+ // Don't do this in handleHide() because it is also invoked by handleShow()
+ mNextView = null;
}
};
@@ -407,7 +409,6 @@
}
mView = null;
- mNextView = null;
}
}
}
diff --git a/core/java/com/android/internal/view/menu/ActionMenuView.java b/core/java/com/android/internal/view/menu/ActionMenuView.java
index 8825c02..30d6878 100644
--- a/core/java/com/android/internal/view/menu/ActionMenuView.java
+++ b/core/java/com/android/internal/view/menu/ActionMenuView.java
@@ -22,6 +22,7 @@
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.Gravity;
+import android.view.SoundEffectConstants;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
@@ -328,6 +329,7 @@
return true;
}
+ playSoundEffect(SoundEffectConstants.CLICK);
showOverflowMenu();
return true;
}
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 9b890fa..25d3aca 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -1284,6 +1284,13 @@
android:description="@string/permlab_copyProtectedData"
android:protectionLevel="signature" />
+ <!-- Internal permission protecting access to the encryption methods
+ @hide
+ -->
+ <permission android:name="android.permission.CRYPT_KEEPER"
+ android:protectionLevel="signatureOrSystem" />
+
+
<!-- C2DM permission.
@hide Used internally.
-->
@@ -1334,7 +1341,9 @@
<activity android:name="android.accounts.ChooseAccountActivity"
android:excludeFromRecents="true"
- android:exported="true">
+ android:exported="true"
+ android:theme="@android:style/Theme.Holo.Dialog"
+ android:label="@string/choose_account_label">
</activity>
<activity android:name="android.accounts.GrantCredentialsPermissionActivity"
diff --git a/core/res/res/drawable-hdpi/btn_code_lock_default.png b/core/res/res/drawable-hdpi/btn_code_lock_default.png
index df3137f..4469ce0 100644
--- a/core/res/res/drawable-hdpi/btn_code_lock_default.png
+++ b/core/res/res/drawable-hdpi/btn_code_lock_default.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_code_lock_touched.png b/core/res/res/drawable-hdpi/btn_code_lock_touched.png
index bf9e46a..0410dd3 100644
--- a/core/res/res/drawable-hdpi/btn_code_lock_touched.png
+++ b/core/res/res/drawable-hdpi/btn_code_lock_touched.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_disabled_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_disabled_focused_holo_dark.9.png
index 8695c2c..3007a84 100644
--- a/core/res/res/drawable-hdpi/btn_default_disabled_focused_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_disabled_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_disabled_focused_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_disabled_focused_holo_light.9.png
index ea187fb..5a108454 100644
--- a/core/res/res/drawable-hdpi/btn_default_disabled_focused_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_disabled_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_disabled_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_disabled_holo_dark.9.png
index e54105d..bc35a36 100644
--- a/core/res/res/drawable-hdpi/btn_default_disabled_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_disabled_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_disabled_holo_light.9.png
index 0f1fa81..bc35a36 100644
--- a/core/res/res/drawable-hdpi/btn_default_disabled_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_focused_holo_dark.9.png
index 14e7608..f6380fa 100644
--- a/core/res/res/drawable-hdpi/btn_default_focused_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_focused_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_focused_holo_light.9.png
index e65dcea..f6380fa 100644
--- a/core/res/res/drawable-hdpi/btn_default_focused_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_normal_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_normal_holo_dark.9.png
index 3e83236..7016db1 100644
--- a/core/res/res/drawable-hdpi/btn_default_normal_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_normal_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_normal_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_normal_holo_light.9.png
index aa4b7ea..228af2e 100644
--- a/core/res/res/drawable-hdpi/btn_default_normal_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_normal_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_pressed_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_pressed_holo_dark.9.png
index f1eb741..bc3bfc2 100644
--- a/core/res/res/drawable-hdpi/btn_default_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_pressed_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_pressed_holo_light.9.png
index f1eb741..8a4759b 100644
--- a/core/res/res/drawable-hdpi/btn_default_pressed_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_small_disabled_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_small_disabled_focused_holo_dark.9.png
new file mode 100644
index 0000000..6781d79
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_default_small_disabled_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_small_disabled_focused_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_small_disabled_focused_holo_light.9.png
new file mode 100644
index 0000000..6781d79
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_default_small_disabled_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_small_disabled_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_small_disabled_holo_dark.9.png
new file mode 100644
index 0000000..c8460eb
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_default_small_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_small_disabled_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_small_disabled_holo_light.9.png
new file mode 100644
index 0000000..c8460eb
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_default_small_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_small_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_small_focused_holo_dark.9.png
new file mode 100644
index 0000000..a116400
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_default_small_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_small_focused_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_small_focused_holo_light.9.png
new file mode 100644
index 0000000..0b5c05bd
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_default_small_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_small_normal_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_small_normal_holo_dark.9.png
new file mode 100644
index 0000000..6a55b98
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_default_small_normal_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_small_normal_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_small_normal_holo_light.9.png
new file mode 100644
index 0000000..0371310
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_default_small_normal_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_small_pressed_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_small_pressed_holo_dark.9.png
new file mode 100644
index 0000000..4d05332
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_default_small_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_small_pressed_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_small_pressed_holo_light.9.png
new file mode 100644
index 0000000..4d05332
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_default_small_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_dialog_disable.png b/core/res/res/drawable-hdpi/btn_dialog_disable.png
old mode 100644
new mode 100755
index 2fc5d1a..4ff634b
--- a/core/res/res/drawable-hdpi/btn_dialog_disable.png
+++ b/core/res/res/drawable-hdpi/btn_dialog_disable.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_dialog_normal.png b/core/res/res/drawable-hdpi/btn_dialog_normal.png
old mode 100644
new mode 100755
index c4a1026..e0cc339
--- a/core/res/res/drawable-hdpi/btn_dialog_normal.png
+++ b/core/res/res/drawable-hdpi/btn_dialog_normal.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_dialog_pressed.png b/core/res/res/drawable-hdpi/btn_dialog_pressed.png
old mode 100644
new mode 100755
index 846f8bf..ed8e008
--- a/core/res/res/drawable-hdpi/btn_dialog_pressed.png
+++ b/core/res/res/drawable-hdpi/btn_dialog_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_dialog_selected.png b/core/res/res/drawable-hdpi/btn_dialog_selected.png
old mode 100644
new mode 100755
index 659c289..9b1a100
--- a/core/res/res/drawable-hdpi/btn_dialog_selected.png
+++ b/core/res/res/drawable-hdpi/btn_dialog_selected.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_off.png b/core/res/res/drawable-hdpi/btn_radio_off.png
old mode 100644
new mode 100755
index c0b14aa..48ee2ba
--- a/core/res/res/drawable-hdpi/btn_radio_off.png
+++ b/core/res/res/drawable-hdpi/btn_radio_off.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_off_pressed.png b/core/res/res/drawable-hdpi/btn_radio_off_pressed.png
old mode 100644
new mode 100755
index 3189581..5a4ad89
--- a/core/res/res/drawable-hdpi/btn_radio_off_pressed.png
+++ b/core/res/res/drawable-hdpi/btn_radio_off_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_off_selected.png b/core/res/res/drawable-hdpi/btn_radio_off_selected.png
old mode 100644
new mode 100755
index f337703..7d5c676
--- a/core/res/res/drawable-hdpi/btn_radio_off_selected.png
+++ b/core/res/res/drawable-hdpi/btn_radio_off_selected.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_on.png b/core/res/res/drawable-hdpi/btn_radio_on.png
old mode 100644
new mode 100755
index c90d2eb..2472c20
--- a/core/res/res/drawable-hdpi/btn_radio_on.png
+++ b/core/res/res/drawable-hdpi/btn_radio_on.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_on_pressed.png b/core/res/res/drawable-hdpi/btn_radio_on_pressed.png
old mode 100644
new mode 100755
index d79450b8..98d74ce
--- a/core/res/res/drawable-hdpi/btn_radio_on_pressed.png
+++ b/core/res/res/drawable-hdpi/btn_radio_on_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_on_selected.png b/core/res/res/drawable-hdpi/btn_radio_on_selected.png
old mode 100644
new mode 100755
index db50c43..b6ab46c
--- a/core/res/res/drawable-hdpi/btn_radio_on_selected.png
+++ b/core/res/res/drawable-hdpi/btn_radio_on_selected.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_dark.png
new file mode 100644
index 0000000..46deb0f
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_light.png b/core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_light.png
new file mode 100644
index 0000000..05ac2aa
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_dark.png
new file mode 100644
index 0000000..c2308d4
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_light.png b/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_light.png
new file mode 100644
index 0000000..38fc2b4
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_focused_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_off_focused_holo_dark.png
index 15feef1..5bd7993 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_focused_holo_light.png b/core/res/res/drawable-hdpi/btn_star_off_focused_holo_light.png
index 0cff364..54f156b 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_normal_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_off_normal_holo_dark.png
index f480729..c56b737 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_normal_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_normal_holo_light.png b/core/res/res/drawable-hdpi/btn_star_off_normal_holo_light.png
index 1c632e8..d610fc4 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_normal_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_dark.png
new file mode 100644
index 0000000..3117c23
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_light.png b/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_light.png
new file mode 100644
index 0000000..4bae941
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_dark.png
new file mode 100644
index 0000000..0bb267b
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_light.png b/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_light.png
new file mode 100644
index 0000000..96049ff
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_dark.png
new file mode 100644
index 0000000..4019c69
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_light.png b/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_light.png
new file mode 100644
index 0000000..5d61024
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_focused_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_on_focused_holo_dark.png
index 2dd3d77..a7762d9 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_focused_holo_light.png b/core/res/res/drawable-hdpi/btn_star_on_focused_holo_light.png
index 7b10118..aee8d2a 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_normal_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_on_normal_holo_dark.png
index 2f863bb..71c190d 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_normal_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_normal_holo_light.png b/core/res/res/drawable-hdpi/btn_star_on_normal_holo_light.png
index 1220c20..6d559c6 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_normal_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_dark.png
new file mode 100644
index 0000000..d14dafe
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_light.png b/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_light.png
new file mode 100644
index 0000000..a065173
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_disabled_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_disabled_focused_holo_dark.9.png
index 5a8c8e5..8f95407 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_off_disabled_focused_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_off_disabled_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_disabled_focused_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_disabled_focused_holo_light.9.png
index 2263153..408d3d7 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_off_disabled_focused_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_off_disabled_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_disabled_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_disabled_holo_dark.9.png
index dbfa16a..092fea0 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_off_disabled_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_off_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_disabled_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_disabled_holo_light.9.png
index 47a43e9..2e310a4 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_off_disabled_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_off_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_focused_holo_dark.9.png
index 2787a4b..127b7e2 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_off_focused_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_off_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_focused_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_focused_holo_light.9.png
index c8bf8b1..a5bde58 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_off_focused_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_off_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_normal_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_normal_holo_dark.9.png
index eb4f17a..e46c1af 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_off_normal_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_off_normal_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_normal_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_normal_holo_light.9.png
index 42b434c..8756b62 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_off_normal_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_off_normal_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_dark.9.png
index e362aa1..b5e1e9c 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_light.9.png
index cc61414..46ea0d6 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_disabled_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_disabled_focused_holo_dark.9.png
index 8b813b9..4593375 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_on_disabled_focused_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_on_disabled_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_disabled_focused_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_disabled_focused_holo_light.9.png
index 54686cd..4593375 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_on_disabled_focused_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_on_disabled_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_disabled_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_disabled_holo_dark.9.png
index 056f451..df2e203 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_on_disabled_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_on_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_disabled_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_disabled_holo_light.9.png
index 2c4a6dd..cd4d819 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_on_disabled_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_on_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_focused_holo_dark.9.png
index 127a9be..785a9d8 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_on_focused_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_on_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_focused_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_focused_holo_light.9.png
index 4853ef4..b1a190c 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_on_focused_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_on_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_normal_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_normal_holo_dark.9.png
index d767185..25a144b 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_on_normal_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_on_normal_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_normal_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_normal_holo_light.9.png
index 00e6105..1cf6fcd 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_on_normal_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_on_normal_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_dark.9.png
index 293cad3..126dc28 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_light.9.png
index ead4ccf..d4d3f41 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/expander_close_holo_dark.9.png b/core/res/res/drawable-hdpi/expander_close_holo_dark.9.png
new file mode 100644
index 0000000..6df00f2
--- /dev/null
+++ b/core/res/res/drawable-hdpi/expander_close_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/expander_close_holo_light.9.png b/core/res/res/drawable-hdpi/expander_close_holo_light.9.png
new file mode 100644
index 0000000..a63cdbb
--- /dev/null
+++ b/core/res/res/drawable-hdpi/expander_close_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/expander_open_holo_dark.9.png b/core/res/res/drawable-hdpi/expander_open_holo_dark.9.png
new file mode 100644
index 0000000..63015ec
--- /dev/null
+++ b/core/res/res/drawable-hdpi/expander_open_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/expander_open_holo_light.9.png b/core/res/res/drawable-hdpi/expander_open_holo_light.9.png
new file mode 100644
index 0000000..ca4dd76
--- /dev/null
+++ b/core/res/res/drawable-hdpi/expander_open_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/indicator_code_lock_point_area_default.png b/core/res/res/drawable-hdpi/indicator_code_lock_point_area_default.png
index 0102a61..c45b956 100644
--- a/core/res/res/drawable-hdpi/indicator_code_lock_point_area_default.png
+++ b/core/res/res/drawable-hdpi/indicator_code_lock_point_area_default.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/indicator_code_lock_point_area_green.png b/core/res/res/drawable-hdpi/indicator_code_lock_point_area_green.png
index 82ad8f7..b9fd0a4 100644
--- a/core/res/res/drawable-hdpi/indicator_code_lock_point_area_green.png
+++ b/core/res/res/drawable-hdpi/indicator_code_lock_point_area_green.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/indicator_code_lock_point_area_red.png b/core/res/res/drawable-hdpi/indicator_code_lock_point_area_red.png
index f9d0d33..94e947d 100644
--- a/core/res/res/drawable-hdpi/indicator_code_lock_point_area_red.png
+++ b/core/res/res/drawable-hdpi/indicator_code_lock_point_area_red.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_tab_bar_left_end_normal.9.png b/core/res/res/drawable-hdpi/jog_tab_bar_left_end_normal.9.png
index 109be42..b9ec237 100644
--- a/core/res/res/drawable-hdpi/jog_tab_bar_left_end_normal.9.png
+++ b/core/res/res/drawable-hdpi/jog_tab_bar_left_end_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_tab_bar_right_end_normal.9.png b/core/res/res/drawable-hdpi/jog_tab_bar_right_end_normal.9.png
index 030c9e9..30fcda5 100644
--- a/core/res/res/drawable-hdpi/jog_tab_bar_right_end_normal.9.png
+++ b/core/res/res/drawable-hdpi/jog_tab_bar_right_end_normal.9.png
Binary files differ
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
old mode 100644
new mode 100755
index 3499208..9599fb5
--- 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 differ
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
old mode 100644
new mode 100755
index 91eaec8..46d9ab3
--- 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 differ
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
old mode 100644
new mode 100755
index 8818b9e..6c0dc0a
--- 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 differ
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
old mode 100644
new mode 100755
index e5bc5f6..3f9fb8f
--- 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 differ
diff --git a/core/res/res/drawable-hdpi/jog_tab_left_normal.png b/core/res/res/drawable-hdpi/jog_tab_left_normal.png
index 5326c7c..d43c5e2 100644
--- a/core/res/res/drawable-hdpi/jog_tab_left_normal.png
+++ b/core/res/res/drawable-hdpi/jog_tab_left_normal.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_tab_left_pressed.png b/core/res/res/drawable-hdpi/jog_tab_left_pressed.png
old mode 100644
new mode 100755
index 7b906df..ec98790
--- a/core/res/res/drawable-hdpi/jog_tab_left_pressed.png
+++ b/core/res/res/drawable-hdpi/jog_tab_left_pressed.png
Binary files differ
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
old mode 100644
new mode 100755
index ea8c315..2861e8d
--- 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 differ
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
old mode 100644
new mode 100755
index aa0ceb9..e974bbc
--- 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 differ
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
old mode 100644
new mode 100755
index d772fb6..9647fa6
--- 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 differ
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
old mode 100644
new mode 100755
index 3cfeb67..ad878e1
--- 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 differ
diff --git a/core/res/res/drawable-hdpi/jog_tab_right_normal.png b/core/res/res/drawable-hdpi/jog_tab_right_normal.png
index da7726b..1eb4234 100644
--- a/core/res/res/drawable-hdpi/jog_tab_right_normal.png
+++ b/core/res/res/drawable-hdpi/jog_tab_right_normal.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_tab_right_pressed.png b/core/res/res/drawable-hdpi/jog_tab_right_pressed.png
old mode 100644
new mode 100755
index 450a325..647e802
--- a/core/res/res/drawable-hdpi/jog_tab_right_pressed.png
+++ b/core/res/res/drawable-hdpi/jog_tab_right_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/menu_dropdown_panel_holo_dark.9.png b/core/res/res/drawable-hdpi/menu_dropdown_panel_holo_dark.9.png
index ec91bd8..b0fba52 100644
--- a/core/res/res/drawable-hdpi/menu_dropdown_panel_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/menu_dropdown_panel_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/menu_dropdown_panel_holo_light.9.png b/core/res/res/drawable-hdpi/menu_dropdown_panel_holo_light.9.png
index 67c5950..3ef8935 100644
--- a/core/res/res/drawable-hdpi/menu_dropdown_panel_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/menu_dropdown_panel_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/text_edit_side_paste_window.9.png b/core/res/res/drawable-hdpi/text_edit_side_paste_window.9.png
new file mode 100644
index 0000000..7cd000b
--- /dev/null
+++ b/core/res/res/drawable-hdpi/text_edit_side_paste_window.9.png
Binary files differ
diff --git a/core/res/res/drawable-land-mdpi/jog_tab_target_gray.png b/core/res/res/drawable-land-mdpi/jog_tab_target_gray.png
new file mode 100644
index 0000000..1319b6e
--- /dev/null
+++ b/core/res/res/drawable-land-mdpi/jog_tab_target_gray.png
Binary files differ
diff --git a/core/res/res/drawable-land-mdpi/jog_tab_target_green.png b/core/res/res/drawable-land-mdpi/jog_tab_target_green.png
new file mode 100644
index 0000000..88a3f30
--- /dev/null
+++ b/core/res/res/drawable-land-mdpi/jog_tab_target_green.png
Binary files differ
diff --git a/core/res/res/drawable-land-mdpi/jog_tab_target_red.png b/core/res/res/drawable-land-mdpi/jog_tab_target_red.png
new file mode 100644
index 0000000..300c401
--- /dev/null
+++ b/core/res/res/drawable-land-mdpi/jog_tab_target_red.png
Binary files differ
diff --git a/core/res/res/drawable-land-mdpi/jog_tab_target_yellow.png b/core/res/res/drawable-land-mdpi/jog_tab_target_yellow.png
new file mode 100644
index 0000000..efa30ee
--- /dev/null
+++ b/core/res/res/drawable-land-mdpi/jog_tab_target_yellow.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_code_lock_default.png b/core/res/res/drawable-mdpi/btn_code_lock_default.png
index c2e0b05..f524317 100755
--- a/core/res/res/drawable-mdpi/btn_code_lock_default.png
+++ b/core/res/res/drawable-mdpi/btn_code_lock_default.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_code_lock_touched.png b/core/res/res/drawable-mdpi/btn_code_lock_touched.png
index 70e95a2..5cd436c 100755
--- a/core/res/res/drawable-mdpi/btn_code_lock_touched.png
+++ b/core/res/res/drawable-mdpi/btn_code_lock_touched.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_disabled_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_disabled_focused_holo_dark.9.png
index 537ac1a..ab5d68b 100644
--- a/core/res/res/drawable-mdpi/btn_default_disabled_focused_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_disabled_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_disabled_focused_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_disabled_focused_holo_light.9.png
index 947715c..9421b1b 100644
--- a/core/res/res/drawable-mdpi/btn_default_disabled_focused_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_disabled_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_disabled_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_disabled_holo_dark.9.png
index 8e34d33..a2c9b3f 100644
--- a/core/res/res/drawable-mdpi/btn_default_disabled_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_disabled_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_disabled_holo_light.9.png
index 8262a03..a2c9b3f 100644
--- a/core/res/res/drawable-mdpi/btn_default_disabled_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_focused_holo_dark.9.png
index 8cca841..02e3323 100644
--- a/core/res/res/drawable-mdpi/btn_default_focused_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_focused_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_focused_holo_light.9.png
index 5032ed1..02e3323 100644
--- a/core/res/res/drawable-mdpi/btn_default_focused_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_normal_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_normal_holo_dark.9.png
index d608e44e..5b05722 100644
--- a/core/res/res/drawable-mdpi/btn_default_normal_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_normal_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_normal_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_normal_holo_light.9.png
index 6ab589d..e7f1690 100644
--- a/core/res/res/drawable-mdpi/btn_default_normal_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_normal_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_pressed_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_pressed_holo_dark.9.png
index 40957ee..b49a583 100644
--- a/core/res/res/drawable-mdpi/btn_default_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_pressed_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_pressed_holo_light.9.png
index 40957ee..e6f1362 100644
--- a/core/res/res/drawable-mdpi/btn_default_pressed_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_small_disabled_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_small_disabled_focused_holo_dark.9.png
new file mode 100644
index 0000000..be14b35
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_default_small_disabled_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_small_disabled_focused_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_small_disabled_focused_holo_light.9.png
new file mode 100644
index 0000000..be14b35
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_default_small_disabled_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_small_disabled_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_small_disabled_holo_dark.9.png
new file mode 100644
index 0000000..dd12fcb
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_default_small_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_small_disabled_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_small_disabled_holo_light.9.png
new file mode 100644
index 0000000..dd12fcb
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_default_small_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_small_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_small_focused_holo_dark.9.png
new file mode 100644
index 0000000..bd9975c
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_default_small_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_small_focused_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_small_focused_holo_light.9.png
new file mode 100644
index 0000000..703e394
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_default_small_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_small_normal_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_small_normal_holo_dark.9.png
new file mode 100644
index 0000000..b77faadc
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_default_small_normal_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_small_normal_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_small_normal_holo_light.9.png
new file mode 100644
index 0000000..ead3f5e
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_default_small_normal_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_small_pressed_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_small_pressed_holo_dark.9.png
new file mode 100644
index 0000000..d460d0a
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_default_small_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_small_pressed_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_small_pressed_holo_light.9.png
new file mode 100644
index 0000000..d460d0a
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_default_small_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_dialog_disable.png b/core/res/res/drawable-mdpi/btn_dialog_disable.png
index f041cab..3de9895 100755
--- a/core/res/res/drawable-mdpi/btn_dialog_disable.png
+++ b/core/res/res/drawable-mdpi/btn_dialog_disable.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_dialog_normal.png b/core/res/res/drawable-mdpi/btn_dialog_normal.png
index a2d27fa..eca5828 100755
--- a/core/res/res/drawable-mdpi/btn_dialog_normal.png
+++ b/core/res/res/drawable-mdpi/btn_dialog_normal.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_dialog_pressed.png b/core/res/res/drawable-mdpi/btn_dialog_pressed.png
index 9c9922a..f9c4551 100755
--- a/core/res/res/drawable-mdpi/btn_dialog_pressed.png
+++ b/core/res/res/drawable-mdpi/btn_dialog_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_dialog_selected.png b/core/res/res/drawable-mdpi/btn_dialog_selected.png
index 7656de5..b0afd7f 100755
--- a/core/res/res/drawable-mdpi/btn_dialog_selected.png
+++ b/core/res/res/drawable-mdpi/btn_dialog_selected.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_off.png b/core/res/res/drawable-mdpi/btn_radio_off.png
index 407632b..cf76ace 100644
--- a/core/res/res/drawable-mdpi/btn_radio_off.png
+++ b/core/res/res/drawable-mdpi/btn_radio_off.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_off_pressed.png b/core/res/res/drawable-mdpi/btn_radio_off_pressed.png
index d6d8a9d..e03561a 100644
--- a/core/res/res/drawable-mdpi/btn_radio_off_pressed.png
+++ b/core/res/res/drawable-mdpi/btn_radio_off_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_off_selected.png b/core/res/res/drawable-mdpi/btn_radio_off_selected.png
index 53f3e87..b3aa94e 100644
--- a/core/res/res/drawable-mdpi/btn_radio_off_selected.png
+++ b/core/res/res/drawable-mdpi/btn_radio_off_selected.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_on.png b/core/res/res/drawable-mdpi/btn_radio_on.png
index 25a3ccc..5f978c0 100644
--- a/core/res/res/drawable-mdpi/btn_radio_on.png
+++ b/core/res/res/drawable-mdpi/btn_radio_on.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_on_pressed.png b/core/res/res/drawable-mdpi/btn_radio_on_pressed.png
index c904a35..a0636fe 100644
--- a/core/res/res/drawable-mdpi/btn_radio_on_pressed.png
+++ b/core/res/res/drawable-mdpi/btn_radio_on_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_on_selected.png b/core/res/res/drawable-mdpi/btn_radio_on_selected.png
index 78e1fc0..b510d47 100644
--- a/core/res/res/drawable-mdpi/btn_radio_on_selected.png
+++ b/core/res/res/drawable-mdpi/btn_radio_on_selected.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_disabled_focused_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_off_disabled_focused_holo_dark.png
new file mode 100644
index 0000000..8a12dfd
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_star_off_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_disabled_focused_holo_light.png b/core/res/res/drawable-mdpi/btn_star_off_disabled_focused_holo_light.png
new file mode 100644
index 0000000..baac95b
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_star_off_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_disabled_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_off_disabled_holo_dark.png
new file mode 100644
index 0000000..bc3f302
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_star_off_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_disabled_holo_light.png b/core/res/res/drawable-mdpi/btn_star_off_disabled_holo_light.png
new file mode 100644
index 0000000..2e2b37e
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_star_off_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_focused_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_off_focused_holo_dark.png
index 153e50d..a48684f 100644
--- a/core/res/res/drawable-mdpi/btn_star_off_focused_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_star_off_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_focused_holo_light.png b/core/res/res/drawable-mdpi/btn_star_off_focused_holo_light.png
index 379fd24..8c31c3b 100644
--- a/core/res/res/drawable-mdpi/btn_star_off_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_star_off_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_normal_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_off_normal_holo_dark.png
index fe35f1c..0415db7 100644
--- a/core/res/res/drawable-mdpi/btn_star_off_normal_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_star_off_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_normal_holo_light.png b/core/res/res/drawable-mdpi/btn_star_off_normal_holo_light.png
index 002237f..ec8e467 100644
--- a/core/res/res/drawable-mdpi/btn_star_off_normal_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_star_off_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_pressed_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_off_pressed_holo_dark.png
new file mode 100644
index 0000000..bf4c3ba
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_star_off_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_pressed_holo_light.png b/core/res/res/drawable-mdpi/btn_star_off_pressed_holo_light.png
new file mode 100644
index 0000000..0ec628e
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_star_off_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_disabled_focused_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_on_disabled_focused_holo_dark.png
new file mode 100644
index 0000000..f89e05d
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_star_on_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_disabled_focused_holo_light.png b/core/res/res/drawable-mdpi/btn_star_on_disabled_focused_holo_light.png
new file mode 100644
index 0000000..074737c
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_star_on_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_disabled_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_on_disabled_holo_dark.png
new file mode 100644
index 0000000..75643be
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_star_on_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_disabled_holo_light.png b/core/res/res/drawable-mdpi/btn_star_on_disabled_holo_light.png
new file mode 100644
index 0000000..9859fb5
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_star_on_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_focused_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_on_focused_holo_dark.png
index 0ad2583..3f496ba 100644
--- a/core/res/res/drawable-mdpi/btn_star_on_focused_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_star_on_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_focused_holo_light.png b/core/res/res/drawable-mdpi/btn_star_on_focused_holo_light.png
index ce7c3b4..046b079 100644
--- a/core/res/res/drawable-mdpi/btn_star_on_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_star_on_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_normal_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_on_normal_holo_dark.png
index ee93e88..76e86eb 100644
--- a/core/res/res/drawable-mdpi/btn_star_on_normal_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_star_on_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_normal_holo_light.png b/core/res/res/drawable-mdpi/btn_star_on_normal_holo_light.png
index 597fd9a..2b76297 100644
--- a/core/res/res/drawable-mdpi/btn_star_on_normal_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_star_on_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_pressed_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_on_pressed_holo_dark.png
new file mode 100644
index 0000000..6335a96
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_star_on_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_pressed_holo_light.png b/core/res/res/drawable-mdpi/btn_star_on_pressed_holo_light.png
new file mode 100644
index 0000000..97b0a0c
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_star_on_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_disabled_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_disabled_focused_holo_dark.9.png
index deecc51..a087fb3 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_off_disabled_focused_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_off_disabled_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_disabled_focused_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_disabled_focused_holo_light.9.png
index 76d4f05..4f0572b 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_off_disabled_focused_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_off_disabled_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_disabled_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_disabled_holo_dark.9.png
index 0ecd1ae..a0693778 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_off_disabled_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_off_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_disabled_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_disabled_holo_light.9.png
index a7015ee..bbb7eb7 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_off_disabled_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_off_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_focused_holo_dark.9.png
index 71949b2..0fc02cc 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_off_focused_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_off_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_focused_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_focused_holo_light.9.png
index 351f76b..eec3980 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_off_focused_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_off_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_normal_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_normal_holo_dark.9.png
index 44b9503..9732a84 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_off_normal_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_off_normal_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_normal_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_normal_holo_light.9.png
index d70a1fc5..043d35a 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_off_normal_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_off_normal_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_dark.9.png
index 5f9d2b1..0763b23 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_light.9.png
index 6723757..ba93aa3 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_disabled_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_disabled_focused_holo_dark.9.png
index 62b67a5..dcf4436 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_on_disabled_focused_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_on_disabled_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_disabled_focused_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_disabled_focused_holo_light.9.png
index b8418bc..dcf4436 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_on_disabled_focused_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_on_disabled_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_disabled_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_disabled_holo_dark.9.png
index f9a11a5..41c3bb0 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_on_disabled_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_on_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_disabled_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_disabled_holo_light.9.png
index e983c8a..d7c7d9f 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_on_disabled_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_on_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_focused_holo_dark.9.png
index ed8407b..d3d2575 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_on_focused_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_on_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_focused_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_focused_holo_light.9.png
index 31f36b7..7802e39 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_on_focused_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_on_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_normal_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_normal_holo_dark.9.png
index e023c44..8f46c38 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_on_normal_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_on_normal_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_normal_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_normal_holo_light.9.png
index e4008cf..a38eb12 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_on_normal_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_on_normal_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_dark.9.png
index 56e1157..a216e35 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_light.9.png
index 913aed5..c9af9b2 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/expander_close_holo_dark.9.png b/core/res/res/drawable-mdpi/expander_close_holo_dark.9.png
new file mode 100644
index 0000000..5ea5692
--- /dev/null
+++ b/core/res/res/drawable-mdpi/expander_close_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/expander_close_holo_light.9.png b/core/res/res/drawable-mdpi/expander_close_holo_light.9.png
new file mode 100644
index 0000000..7b9805b
--- /dev/null
+++ b/core/res/res/drawable-mdpi/expander_close_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/expander_open_holo_dark.9.png b/core/res/res/drawable-mdpi/expander_open_holo_dark.9.png
new file mode 100644
index 0000000..83cb653
--- /dev/null
+++ b/core/res/res/drawable-mdpi/expander_open_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/expander_open_holo_light.9.png b/core/res/res/drawable-mdpi/expander_open_holo_light.9.png
new file mode 100644
index 0000000..bc7a117
--- /dev/null
+++ b/core/res/res/drawable-mdpi/expander_open_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/indicator_code_lock_drag_direction_green_up.png b/core/res/res/drawable-mdpi/indicator_code_lock_drag_direction_green_up.png
index ef91dc4..7ddeba5 100644
--- a/core/res/res/drawable-mdpi/indicator_code_lock_drag_direction_green_up.png
+++ b/core/res/res/drawable-mdpi/indicator_code_lock_drag_direction_green_up.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/indicator_code_lock_drag_direction_red_up.png b/core/res/res/drawable-mdpi/indicator_code_lock_drag_direction_red_up.png
index f3d4204b..7201e58 100644
--- a/core/res/res/drawable-mdpi/indicator_code_lock_drag_direction_red_up.png
+++ b/core/res/res/drawable-mdpi/indicator_code_lock_drag_direction_red_up.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/indicator_code_lock_point_area_default.png b/core/res/res/drawable-mdpi/indicator_code_lock_point_area_default.png
index 4e88b37..8546c5f 100755
--- a/core/res/res/drawable-mdpi/indicator_code_lock_point_area_default.png
+++ b/core/res/res/drawable-mdpi/indicator_code_lock_point_area_default.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/indicator_code_lock_point_area_green.png b/core/res/res/drawable-mdpi/indicator_code_lock_point_area_green.png
index 8020846..a98a29a 100755
--- a/core/res/res/drawable-mdpi/indicator_code_lock_point_area_green.png
+++ b/core/res/res/drawable-mdpi/indicator_code_lock_point_area_green.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/indicator_code_lock_point_area_red.png b/core/res/res/drawable-mdpi/indicator_code_lock_point_area_red.png
index b7aee1ba..6d579cb 100755
--- a/core/res/res/drawable-mdpi/indicator_code_lock_point_area_red.png
+++ b/core/res/res/drawable-mdpi/indicator_code_lock_point_area_red.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_gray.9.png b/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_gray.9.png
index 4ce09fa..a6ee329 100644
--- a/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_gray.9.png
+++ b/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_gray.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_green.9.png b/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_green.9.png
index 9d7565f..386ed9d 100644
--- a/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_green.9.png
+++ b/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_green.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_red.9.png b/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_red.9.png
index d5f9bd8..0242a42 100644
--- a/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_red.9.png
+++ b/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_red.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_yellow.9.png b/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_yellow.9.png
index 5b9c5b4..b8c2e18 100644
--- a/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_yellow.9.png
+++ b/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_yellow.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_bar_right_end_pressed.9.png b/core/res/res/drawable-mdpi/jog_tab_bar_right_end_pressed.9.png
index f41750d..8bdfd84 100644
--- a/core/res/res/drawable-mdpi/jog_tab_bar_right_end_pressed.9.png
+++ b/core/res/res/drawable-mdpi/jog_tab_bar_right_end_pressed.9.png
Binary files differ
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
old mode 100644
new mode 100755
index e8544ff..3dce451
--- 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 differ
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
old mode 100644
new mode 100755
index d0ba8f8..829b146
--- 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 differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_left_confirm_red.png b/core/res/res/drawable-mdpi/jog_tab_left_confirm_red.png
index 5188c86..f2ceb2e 100644
--- a/core/res/res/drawable-mdpi/jog_tab_left_confirm_red.png
+++ b/core/res/res/drawable-mdpi/jog_tab_left_confirm_red.png
Binary files differ
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
old mode 100644
new mode 100755
index 861e17a..5a29262
--- 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 differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_left_normal.png b/core/res/res/drawable-mdpi/jog_tab_left_normal.png
old mode 100644
new mode 100755
index 7af1b85..eb91e97
--- a/core/res/res/drawable-mdpi/jog_tab_left_normal.png
+++ b/core/res/res/drawable-mdpi/jog_tab_left_normal.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_left_pressed.png b/core/res/res/drawable-mdpi/jog_tab_left_pressed.png
old mode 100644
new mode 100755
index b76e83e..9951992
--- a/core/res/res/drawable-mdpi/jog_tab_left_pressed.png
+++ b/core/res/res/drawable-mdpi/jog_tab_left_pressed.png
Binary files differ
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
old mode 100644
new mode 100755
index 814a50d..d446480
--- 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 differ
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
old mode 100644
new mode 100755
index cf157fc..96d7acb
--- 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 differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_right_confirm_red.png b/core/res/res/drawable-mdpi/jog_tab_right_confirm_red.png
index 74f2935..2e1e105 100644
--- a/core/res/res/drawable-mdpi/jog_tab_right_confirm_red.png
+++ b/core/res/res/drawable-mdpi/jog_tab_right_confirm_red.png
Binary files differ
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
old mode 100644
new mode 100755
index 6655731..8224c38
--- 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 differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_right_normal.png b/core/res/res/drawable-mdpi/jog_tab_right_normal.png
old mode 100644
new mode 100755
index 479c9a5..f2113f2
--- a/core/res/res/drawable-mdpi/jog_tab_right_normal.png
+++ b/core/res/res/drawable-mdpi/jog_tab_right_normal.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_right_pressed.png b/core/res/res/drawable-mdpi/jog_tab_right_pressed.png
old mode 100644
new mode 100755
index 454aaf2..65cd51e
--- a/core/res/res/drawable-mdpi/jog_tab_right_pressed.png
+++ b/core/res/res/drawable-mdpi/jog_tab_right_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/menu_dropdown_panel_holo_dark.9.png b/core/res/res/drawable-mdpi/menu_dropdown_panel_holo_dark.9.png
index 3b30ee0..923f92d 100644
--- a/core/res/res/drawable-mdpi/menu_dropdown_panel_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/menu_dropdown_panel_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/menu_dropdown_panel_holo_light.9.png b/core/res/res/drawable-mdpi/menu_dropdown_panel_holo_light.9.png
index 5a3e2b1..afada39 100644
--- a/core/res/res/drawable-mdpi/menu_dropdown_panel_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/menu_dropdown_panel_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/text_edit_side_paste_window.9.png b/core/res/res/drawable-mdpi/text_edit_side_paste_window.9.png
new file mode 100644
index 0000000..d87c35b
--- /dev/null
+++ b/core/res/res/drawable-mdpi/text_edit_side_paste_window.9.png
Binary files differ
diff --git a/core/res/res/drawable-nodpi/background_holo_dark.png b/core/res/res/drawable-nodpi/background_holo_dark.png
index f2ff75a..ea85a3f 100644
--- a/core/res/res/drawable-nodpi/background_holo_dark.png
+++ b/core/res/res/drawable-nodpi/background_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable/btn_default_small_holo_dark.xml b/core/res/res/drawable/btn_default_small_holo_dark.xml
new file mode 100644
index 0000000..a5f5d46
--- /dev/null
+++ b/core/res/res/drawable/btn_default_small_holo_dark.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_window_focused="false" android:state_enabled="true"
+ android:drawable="@drawable/btn_default_small_normal_holo_dark" />
+ <item android:state_window_focused="false" android:state_enabled="false"
+ android:drawable="@drawable/btn_default_small_disabled_holo_dark" />
+ <item android:state_pressed="true"
+ android:drawable="@drawable/btn_default_small_pressed_holo_dark" />
+ <item android:state_focused="true" android:state_enabled="true"
+ android:drawable="@drawable/btn_default_small_focused_holo_dark" />
+ <item android:state_enabled="true"
+ android:drawable="@drawable/btn_default_small_normal_holo_dark" />
+ <item android:state_focused="true"
+ android:drawable="@drawable/btn_default_small_disabled_focused_holo_dark" />
+ <item
+ android:drawable="@drawable/btn_default_small_disabled_holo_dark" />
+</selector>
diff --git a/core/res/res/drawable/btn_default_small_holo_light.xml b/core/res/res/drawable/btn_default_small_holo_light.xml
new file mode 100644
index 0000000..ed86f78
--- /dev/null
+++ b/core/res/res/drawable/btn_default_small_holo_light.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_window_focused="false" android:state_enabled="true"
+ android:drawable="@drawable/btn_default_small_normal_holo_light" />
+ <item android:state_window_focused="false" android:state_enabled="false"
+ android:drawable="@drawable/btn_default_small_disabled_holo_light" />
+ <item android:state_pressed="true"
+ android:drawable="@drawable/btn_default_small_pressed_holo_light" />
+ <item android:state_focused="true" android:state_enabled="true"
+ android:drawable="@drawable/btn_default_small_focused_holo_light" />
+ <item android:state_enabled="true"
+ android:drawable="@drawable/btn_default_small_normal_holo_light" />
+ <item android:state_focused="true"
+ android:drawable="@drawable/btn_default_small_disabled_focused_holo_light" />
+ <item
+ android:drawable="@drawable/btn_default_small_disabled_holo_light" />
+</selector>
diff --git a/core/res/res/drawable/btn_star_holo_dark.xml b/core/res/res/drawable/btn_star_holo_dark.xml
new file mode 100644
index 0000000..4aee68d
--- /dev/null
+++ b/core/res/res/drawable/btn_star_holo_dark.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_checked="false" android:state_window_focused="false"
+ android:drawable="@drawable/btn_star_off_normal_holo_dark" />
+ <item android:state_checked="true" android:state_window_focused="false"
+ android:drawable="@drawable/btn_star_on_normal_holo_dark" />
+ <item android:state_checked="true" android:state_window_focused="false"
+ android:state_enabled="false" android:drawable="@drawable/btn_star_on_disabled_holo_dark" />
+ <item android:state_checked="false" android:state_window_focused="false"
+ android:state_enabled="false" android:drawable="@drawable/btn_star_off_disabled_holo_dark" />
+
+ <item android:state_checked="true" android:state_pressed="true"
+ android:drawable="@drawable/btn_star_on_pressed_holo_dark" />
+ <item android:state_checked="false" android:state_pressed="true"
+ android:drawable="@drawable/btn_star_off_pressed_holo_dark" />
+
+ <item android:state_checked="true" android:state_focused="true"
+ android:drawable="@drawable/btn_star_on_focused_holo_dark" />
+ <item android:state_checked="false" android:state_focused="true"
+ android:drawable="@drawable/btn_star_off_focused_holo_dark" />
+
+ <item android:state_checked="true" android:state_focused="true" android:state_enabled="false"
+ android:drawable="@drawable/btn_star_on_disabled_focused_holo_dark" />
+ <item android:state_checked="true" android:state_focused="false" android:state_enabled="false"
+ android:drawable="@drawable/btn_star_on_disabled_holo_dark" />
+
+ <item android:state_checked="false" android:state_focused="true" android:state_enabled="false"
+ android:drawable="@drawable/btn_star_off_disabled_focused_holo_dark" />
+ <item android:state_checked="false" android:state_focused="false" android:state_enabled="false"
+ android:drawable="@drawable/btn_star_off_disabled_holo_dark" />
+
+ <item android:state_checked="false" android:drawable="@drawable/btn_star_off_normal_holo_dark" />
+ <item android:state_checked="true" android:drawable="@drawable/btn_star_on_normal_holo_dark" />
+</selector>
diff --git a/core/res/res/drawable/btn_star_holo_light.xml b/core/res/res/drawable/btn_star_holo_light.xml
new file mode 100644
index 0000000..ea911da
--- /dev/null
+++ b/core/res/res/drawable/btn_star_holo_light.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_checked="false" android:state_window_focused="false"
+ android:drawable="@drawable/btn_star_off_normal_holo_light" />
+ <item android:state_checked="true" android:state_window_focused="false"
+ android:drawable="@drawable/btn_star_on_normal_holo_light" />
+ <item android:state_checked="true" android:state_window_focused="false"
+ android:state_enabled="false" android:drawable="@drawable/btn_star_on_disabled_holo_light" />
+ <item android:state_checked="false" android:state_window_focused="false"
+ android:state_enabled="false" android:drawable="@drawable/btn_star_off_disabled_holo_light" />
+
+ <item android:state_checked="true" android:state_pressed="true"
+ android:drawable="@drawable/btn_star_on_pressed_holo_light" />
+ <item android:state_checked="false" android:state_pressed="true"
+ android:drawable="@drawable/btn_star_off_pressed_holo_light" />
+
+ <item android:state_checked="true" android:state_focused="true"
+ android:drawable="@drawable/btn_star_on_focused_holo_light" />
+ <item android:state_checked="false" android:state_focused="true"
+ android:drawable="@drawable/btn_star_off_focused_holo_light" />
+
+ <item android:state_checked="true" android:state_focused="true" android:state_enabled="false"
+ android:drawable="@drawable/btn_star_on_disabled_focused_holo_light" />
+ <item android:state_checked="true" android:state_focused="false" android:state_enabled="false"
+ android:drawable="@drawable/btn_star_on_disabled_holo_light" />
+
+ <item android:state_checked="false" android:state_focused="true" android:state_enabled="false"
+ android:drawable="@drawable/btn_star_off_disabled_focused_holo_light" />
+ <item android:state_checked="false" android:state_focused="false" android:state_enabled="false"
+ android:drawable="@drawable/btn_star_off_disabled_holo_light" />
+
+ <item android:state_checked="false" android:drawable="@drawable/btn_star_off_normal_holo_light" />
+ <item android:state_checked="true" android:drawable="@drawable/btn_star_on_normal_holo_light" />
+</selector>
diff --git a/core/res/res/drawable/expander_group_holo_dark.xml b/core/res/res/drawable/expander_group_holo_dark.xml
new file mode 100644
index 0000000..51a7290
--- /dev/null
+++ b/core/res/res/drawable/expander_group_holo_dark.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item
+ android:state_expanded="true"
+ android:drawable="@drawable/expander_open_holo_dark" />
+ <item
+ android:drawable="@drawable/expander_close_holo_dark" />
+</selector>
diff --git a/core/res/res/drawable/expander_group_holo_light.xml b/core/res/res/drawable/expander_group_holo_light.xml
new file mode 100644
index 0000000..0ce71a5
--- /dev/null
+++ b/core/res/res/drawable/expander_group_holo_light.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item
+ android:state_expanded="true"
+ android:drawable="@drawable/expander_open_holo_light" />
+ <item
+ android:drawable="@drawable/expander_close_holo_light" />
+</selector>
diff --git a/core/res/res/layout-xlarge/activity_list.xml b/core/res/res/layout-xlarge/activity_list.xml
index 9d6b8f5..ad485c1 100644
--- a/core/res/res/layout-xlarge/activity_list.xml
+++ b/core/res/res/layout-xlarge/activity_list.xml
@@ -32,15 +32,14 @@
<LinearLayout android:id="@+id/topPanel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:minHeight="48dip"
android:orientation="vertical">
<LinearLayout android:id="@+id/title_template"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
- android:gravity="center_vertical"
- android:layout_marginTop="8dip"
- android:layout_marginBottom="8dip"
+ android:gravity="center_vertical|left"
+ android:minHeight="60dip"
+ android:layout_marginLeft="32dip"
android:layout_marginRight="32dip">
<ImageView android:id="@+id/icon"
android:layout_width="wrap_content"
@@ -49,7 +48,7 @@
android:src="@null"
android:visibility="gone" />
<com.android.internal.widget.DialogTitle android:id="@+id/alertTitle"
- style="?android:attr/textAppearanceLarge"
+ style="?android:attr/textAppearanceMedium"
android:singleLine="true"
android:ellipsize="end"
android:layout_width="match_parent"
@@ -57,15 +56,19 @@
</LinearLayout>
<ImageView android:id="@+id/titleDivider"
android:layout_width="match_parent"
- android:layout_height="1dip"
+ android:layout_height="4dip"
+ android:layout_marginLeft="16dip"
+ android:layout_marginRight="16dip"
android:scaleType="fitXY"
android:gravity="fill_horizontal"
- android:src="@android:drawable/divider_horizontal_dark" />
+ android:src="@android:drawable/divider_strong_holo" />
<!-- If the client uses a customTitle, it will be added here. -->
</LinearLayout>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
+ android:layout_marginLeft="32dip"
+ android:layout_marginRight="32dip"
android:layout_height="0dip"
android:layout_weight="1">
@@ -86,23 +89,19 @@
/>
</FrameLayout>
- <ImageView
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:scaleType="fitXY"
- android:gravity="fill_horizontal"
- android:src="@android:drawable/divider_horizontal_dark" />
-
<LinearLayout android:id="@+id/buttonPanel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="54dip"
- android:orientation="vertical" >
+ android:orientation="vertical"
+ android:divider="?android:attr/dividerHorizontal"
+ android:showDividers="beginning"
+ android:dividerPadding="16dip">
<LinearLayout
+ style="?android:attr/buttonBarStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
- android:paddingTop="4dip"
android:paddingLeft="2dip"
android:paddingRight="2dip"
android:measureWithLargestChild="true">
@@ -111,20 +110,21 @@
android:layout_width="0dip"
android:layout_height="wrap_content"
android:orientation="horizontal"
- />
+ android:visibility="gone" />
<Button android:id="@+id/button1"
android:layout_width="0dip"
- android:layout_gravity="center"
+ android:layout_gravity="left"
android:layout_weight="1"
android:maxLines="2"
android:text="@string/cancel"
+ style="?android:attr/buttonBarButtonStyle"
android:layout_height="wrap_content" />
<LinearLayout android:id="@+id/rightSpacer"
android:layout_width="0dip"
android:layout_weight="0.25"
android:layout_height="wrap_content"
android:orientation="horizontal"
- />
+ android:visibility="gone" />
</LinearLayout>
</LinearLayout>
</com.android.internal.widget.WeightedLinearLayout>
diff --git a/core/res/res/layout/action_bar_title_item.xml b/core/res/res/layout/action_bar_title_item.xml
index 3864981..0cf4222 100644
--- a/core/res/res/layout/action_bar_title_item.xml
+++ b/core/res/res/layout/action_bar_title_item.xml
@@ -17,7 +17,8 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:orientation="vertical" >
+ android:orientation="vertical"
+ android:paddingRight="32dip" >
<TextView android:id="@+id/action_bar_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
diff --git a/core/res/res/layout/activity_list_item_2.xml b/core/res/res/layout/activity_list_item_2.xml
index e937d7b..3b84c733 100644
--- a/core/res/res/layout/activity_list_item_2.xml
+++ b/core/res/res/layout/activity_list_item_2.xml
@@ -18,8 +18,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
- android:textAppearance="?android:attr/textAppearanceLarge"
+ android:textAppearance="?android:attr/textAppearanceMedium"
android:gravity="center_vertical"
android:drawablePadding="14dip"
- android:paddingLeft="15dip"
- android:paddingRight="15dip" />
+ android:paddingLeft="16dip"
+ android:paddingRight="16dip" />
diff --git a/core/res/res/layout/choose_account.xml b/core/res/res/layout/choose_account.xml
new file mode 100644
index 0000000..c37a949
--- /dev/null
+++ b/core/res/res/layout/choose_account.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/* //device/apps/common/assets/res/layout/list_content.xml
+**
+** Copyright 2011, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:paddingLeft="16dip"
+ android:paddingRight="16dip">
+
+ <ListView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@android:id/list"
+ android:layout_width="match_parent"
+ android:layout_height="0dip"
+ android:layout_weight="1"
+ android:drawSelectorOnTop="false"
+ android:scrollbarAlwaysDrawVerticalTrack="true" />
+
+</LinearLayout>
diff --git a/core/res/res/layout/choose_account_row.xml b/core/res/res/layout/choose_account_row.xml
new file mode 100644
index 0000000..33764a3
--- /dev/null
+++ b/core/res/res/layout/choose_account_row.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:paddingLeft="16dip"
+ android:paddingRight="16dip"
+ android:orientation="horizontal" >
+
+ <ImageView android:id="@+id/account_row_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="fill_parent"
+ android:paddingRight="8dip" />
+
+ <TextView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/account_row_text"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:gravity="center_vertical"
+ android:minHeight="?android:attr/listPreferredItemHeight" />
+
+</LinearLayout>
\ No newline at end of file
diff --git a/core/res/res/layout/text_edit_side_no_paste_window.xml b/core/res/res/layout/text_edit_side_no_paste_window.xml
new file mode 100644
index 0000000..0ed3849
--- /dev/null
+++ b/core/res/res/layout/text_edit_side_no_paste_window.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content">
+
+ <TextView android:id="@+id/title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:paddingLeft="16dip"
+ android:paddingRight="16dip"
+ android:paddingTop="8dip"
+ android:paddingBottom="8dip"
+ android:drawableLeft="@android:drawable/ic_menu_paste_dark"
+ android:drawablePadding="8dip"
+ android:gravity="center"
+ android:textAppearance="?android:attr/textAppearanceMediumInverse"
+ android:textColor="@android:color/dim_foreground_dark_inverse_disabled"
+ android:background="@android:drawable/text_edit_side_paste_window"
+ android:text="@android:string/pasteDisabled"
+ android:layout_marginBottom="12dip"
+ />
+
+</LinearLayout>
diff --git a/core/res/res/layout/text_edit_side_paste_window.xml b/core/res/res/layout/text_edit_side_paste_window.xml
new file mode 100644
index 0000000..689a039
--- /dev/null
+++ b/core/res/res/layout/text_edit_side_paste_window.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content">
+
+ <TextView android:id="@+id/title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:paddingLeft="16dip"
+ android:paddingRight="16dip"
+ android:paddingTop="8dip"
+ android:paddingBottom="8dip"
+ android:drawableLeft="@android:drawable/ic_menu_paste_light"
+ android:drawablePadding="8dip"
+ android:gravity="center"
+ android:textAppearance="?android:attr/textAppearanceMediumInverse"
+ android:textColor="@android:color/black"
+ android:background="@android:drawable/text_edit_side_paste_window"
+ android:text="@android:string/paste"
+ android:layout_marginBottom="12dip"
+ />
+
+</LinearLayout>
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index fbd5b5e..e76692a 100755
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -649,6 +649,11 @@
<attr name="textEditPasteWindowLayout" format="reference" />
<!-- Variation of textEditPasteWindowLayout displayed when the clipboard is empty. -->
<attr name="textEditNoPasteWindowLayout" format="reference" />
+ <!-- Used instead of textEditPasteWindowLayout when the window is moved on the side of the
+ insertion cursor because it would be clipped if it were positioned on top. -->
+ <attr name="textEditSidePasteWindowLayout" format="reference" />
+ <!-- Variation of textEditSidePasteWindowLayout displayed when the clipboard is empty. -->
+ <attr name="textEditSideNoPasteWindowLayout" format="reference" />
<!-- Theme to use for dialogs spawned from this theme. -->
<attr name="dialogTheme" format="reference" />
@@ -2741,6 +2746,12 @@
<attr name="textEditPasteWindowLayout" />
<!-- Variation of textEditPasteWindowLayout displayed when the clipboard is empty. -->
<attr name="textEditNoPasteWindowLayout" />
+ <!-- Used instead of textEditPasteWindowLayout when the window is moved on the side of the
+ insertion cursor because it would be clipped if it were positioned on top. -->
+ <attr name="textEditSidePasteWindowLayout" />
+ <!-- Variation of textEditSidePasteWindowLayout displayed when the clipboard is empty. -->
+ <attr name="textEditSideNoPasteWindowLayout" />
+
<!-- Indicates that the content of a non-editable text can be selected. -->
<attr name="textIsSelectable" />
</declare-styleable>
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 786c4d0..e6552dfc 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -1633,6 +1633,8 @@
<public type="style" name="Widget.Holo.Light.CalendarView" />
<public type="style" name="Widget.DatePicker" />
<public type="style" name="Widget.Holo.DatePicker" />
+ <public type="attr" name="textEditSidePasteWindowLayout" />
+ <public type="attr" name="textEditSideNoPasteWindowLayout" />
<public type="string" name="selectTextMode" />
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 46e45db..496e254 100755
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -2684,4 +2684,7 @@
<string name="vpn_notification_title_disconnected"><xliff:g id="profilename" example="Home PPTP">%s</xliff:g> VPN disconnected</string>
<!-- Message of the VPN service notification: Hint to reconnect VPN [CHAR LIMIT=NONE] -->
<string name="vpn_notification_hint_disconnected">Touch to reconnect to a VPN.</string>
+
+ <!-- Choose Account Activity label -->
+ <string name="choose_account_label">Select an account</string>
</resources>
diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml
index 939e9ef..4d7e2ce 100644
--- a/core/res/res/values/styles.xml
+++ b/core/res/res/values/styles.xml
@@ -419,6 +419,8 @@
<item name="android:textSelectHandle">?android:attr/textSelectHandle</item>
<item name="android:textEditPasteWindowLayout">?android:attr/textEditPasteWindowLayout</item>
<item name="android:textEditNoPasteWindowLayout">?android:attr/textEditNoPasteWindowLayout</item>
+ <item name="android:textEditSidePasteWindowLayout">?android:attr/textEditSidePasteWindowLayout</item>
+ <item name="android:textEditSideNoPasteWindowLayout">?android:attr/textEditSideNoPasteWindowLayout</item>
</style>
<style name="Widget.TextView.ListSeparator">
@@ -1400,10 +1402,6 @@
<item name="android:textAppearance">?android:attr/textAppearanceMedium</item>
<item name="android:textColor">@android:color/primary_text_holo_dark</item>
<item name="android:minHeight">48dip</item>
- <item name="android:paddingLeft">32dip</item>
- <item name="android:paddingRight">32dip</item>
- <item name="android:paddingTop">4dip</item>
- <item name="android:paddingBottom">4dip</item>
</style>
<style name="Widget.Holo.Button.Borderless">
@@ -1411,14 +1409,10 @@
</style>
<style name="Widget.Holo.Button.Small">
- <item name="android:background">@android:drawable/btn_default_holo_dark</item>
+ <item name="android:background">@android:drawable/btn_default_small_holo_dark</item>
<item name="android:textAppearance">?android:attr/textAppearanceSmall</item>
<item name="android:textColor">@android:color/primary_text_holo_dark</item>
<item name="android:minHeight">48dip</item>
- <item name="android:paddingLeft">24dip</item>
- <item name="android:paddingRight">24dip</item>
- <item name="android:paddingTop">4dip</item>
- <item name="android:paddingBottom">4dip</item>
</style>
<style name="Widget.Holo.Button.Inset">
@@ -1432,8 +1426,6 @@
<item name="android:disabledAlpha">?android:attr/disabledAlpha</item>
<item name="android:textAppearance">?android:attr/textAppearanceSmall</item>
<item name="android:minHeight">48dip</item>
- <item name="android:paddingLeft">24dip</item>
- <item name="android:paddingRight">24dip</item>
</style>
<style name="Holo.ButtonBar" parent="ButtonBar">
@@ -1481,7 +1473,11 @@
<style name="Widget.Holo.EditText" parent="Widget.EditText">
</style>
- <style name="Widget.Holo.ExpandableListView" parent="Widget.ExpandableListView">
+ <style name="Widget.Holo.ExpandableListView" parent="Widget.Holo.ListView">
+ <item name="android:groupIndicator">@android:drawable/expander_group_holo_dark</item>
+ <item name="android:indicatorLeft">?android:attr/expandableListPreferredItemIndicatorLeft</item>
+ <item name="android:indicatorRight">?android:attr/expandableListPreferredItemIndicatorRight</item>
+ <item name="android:childDivider">?android:attr/listDivider</item>
</style>
<style name="Widget.Holo.ExpandableListView.White">
@@ -1648,6 +1644,7 @@
</style>
<style name="Widget.Holo.CompoundButton.Star" parent="Widget.CompoundButton.Star">
+ <item name="android:button">@android:drawable/btn_star_holo_dark</item>
</style>
<style name="Widget.Holo.TabWidget" parent="Widget.TabWidget">
@@ -1794,10 +1791,6 @@
<item name="android:textAppearance">?android:attr/textAppearanceMediumInverse</item>
<item name="android:textColor">@android:color/primary_text_holo_light</item>
<item name="android:minHeight">48dip</item>
- <item name="android:paddingLeft">32dip</item>
- <item name="android:paddingRight">32dip</item>
- <item name="android:paddingTop">4dip</item>
- <item name="android:paddingBottom">4dip</item>
</style>
<style name="Widget.Holo.Light.Button.Borderless">
@@ -1805,13 +1798,10 @@
</style>
<style name="Widget.Holo.Light.Button.Small">
+ <item name="android:background">@android:drawable/btn_default_small_holo_light</item>
<item name="android:textAppearance">?android:attr/textAppearanceSmall</item>
<item name="android:textColor">@android:color/primary_text_holo_light</item>
<item name="android:minHeight">48dip</item>
- <item name="android:paddingLeft">24dip</item>
- <item name="android:paddingRight">24dip</item>
- <item name="android:paddingTop">4dip</item>
- <item name="android:paddingBottom">4dip</item>
</style>
<style name="Widget.Holo.Light.Button.Inset">
@@ -1824,8 +1814,6 @@
<item name="android:disabledAlpha">?android:attr/disabledAlpha</item>
<item name="android:textAppearance">?android:attr/textAppearanceSmall</item>
<item name="android:minHeight">48dip</item>
- <item name="android:paddingLeft">24dip</item>
- <item name="android:paddingRight">24dip</item>
</style>
<style name="Holo.Light.ButtonBar" parent="Holo.ButtonBar">
@@ -1867,7 +1855,11 @@
<style name="Widget.Holo.Light.EditText" parent="Widget.Holo.EditText">
</style>
- <style name="Widget.Holo.Light.ExpandableListView" parent="Widget.ExpandableListView">
+ <style name="Widget.Holo.Light.ExpandableListView" parent="Widget.Holo.Light.ListView">
+ <item name="android:groupIndicator">@android:drawable/expander_group_holo_light</item>
+ <item name="android:indicatorLeft">?android:attr/expandableListPreferredItemIndicatorLeft</item>
+ <item name="android:indicatorRight">?android:attr/expandableListPreferredItemIndicatorRight</item>
+ <item name="android:childDivider">?android:attr/listDivider</item>
</style>
<style name="Widget.Holo.Light.ExpandableListView.White">
@@ -1997,6 +1989,7 @@
</style>
<style name="Widget.Holo.Light.CompoundButton.Star" parent="Widget.CompoundButton.Star">
+ <item name="android:button">@android:drawable/btn_star_holo_light</item>
</style>
<style name="Widget.Holo.Light.TabWidget" parent="Widget.Holo.TabWidget">
diff --git a/core/res/res/values/themes.xml b/core/res/res/values/themes.xml
index 2f8cffc..e6e23aa 100644
--- a/core/res/res/values/themes.xml
+++ b/core/res/res/values/themes.xml
@@ -174,6 +174,8 @@
<item name="textSelectHandleWindowStyle">@android:style/Widget.TextSelectHandle</item>
<item name="textEditPasteWindowLayout">@android:layout/text_edit_paste_window</item>
<item name="textEditNoPasteWindowLayout">@android:layout/text_edit_no_paste_window</item>
+ <item name="textEditSidePasteWindowLayout">@android:layout/text_edit_side_paste_window</item>
+ <item name="textEditSideNoPasteWindowLayout">@android:layout/text_edit_side_no_paste_window</item>
<!-- Widget styles -->
<item name="absListViewStyle">@android:style/Widget.AbsListView</item>
diff --git a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/ConnectivityManagerTestActivity.java b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/ConnectivityManagerTestActivity.java
index 3d5588c..fb8b5ce 100644
--- a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/ConnectivityManagerTestActivity.java
+++ b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/ConnectivityManagerTestActivity.java
@@ -78,7 +78,7 @@
public int mWifiState;
public NetworkInfo mWifiNetworkInfo;
public String mBssid;
- public String mPowerSsid = "GoogleGuest"; //Default power SSID
+ public String mPowerSsid = "opennet"; //Default power SSID
private Context mContext;
public boolean scanResultAvailable = false;
diff --git a/docs/html/guide/topics/fundamentals/fragments.jd b/docs/html/guide/topics/fundamentals/fragments.jd
index 0972805..9eceef1 100644
--- a/docs/html/guide/topics/fundamentals/fragments.jd
+++ b/docs/html/guide/topics/fundamentals/fragments.jd
@@ -9,7 +9,7 @@
<li>Fragments decompose application functionality and UI into reusable modules</li>
<li>Add multiple fragments to a screen to avoid switching activities</li>
<li>Fragments have their own lifecycle, state, and back stack</li>
- <li>Fragments require API Level HONEYCOMB or greater</li>
+ <li>Fragments require API Level "Honeycomb" or greater</li>
</ul>
<h2>In this document</h2>
@@ -59,12 +59,12 @@
which you can add or remove while the activity is running.</p>
<p>A fragment must always be embedded in an activity and the fragment's lifecycle is directly
-affected by the activity's lifecycle. For example, when the activity is paused, so are all
+affected by the host activity's lifecycle. For example, when the activity is paused, so are all
fragments in it, and when the activity is destroyed, so are all fragments. However, while an
activity is running (it is in the <em>resumed</em> <a
href="{@docRoot}guide/topics/fundamentals/activities.html#Lifecycle">lifecycle state</a>), you can
manipulate each fragment independently, such as add or remove them. When you perform such a
-fragment transaction, you can it to a back stack managed by the
+fragment transaction, you can also add it to a back stack that's managed by the
activity—each back stack entry in the activity is a record of the fragment transaction that
occurred. The back stack allows the user to reverse a fragment transaction (navigate backwards),
by pressing the BACK key.</p>
diff --git a/docs/html/guide/topics/graphics/animation.jd b/docs/html/guide/topics/graphics/animation.jd
index c977d51..83a4e1d 100644
--- a/docs/html/guide/topics/graphics/animation.jd
+++ b/docs/html/guide/topics/graphics/animation.jd
@@ -13,7 +13,7 @@
<li><a href="#object-animator">Animating with ObjectAnimator</a></li>
- <li><a href="#type-evaluator">Using the TypeEvaluator</a></li>
+ <li><a href="#type-evaluator">Using a TypeEvaluator</a></li>
<li><a href="#interpolators">Using interpolators</a></li>
@@ -60,7 +60,7 @@
<p>The Android system provides a flexible animation system that allows you to animate
almost anything, either programmatically or declaratively with XML. There are two
- animation systems that you can choose from: <a href="property-animation">property
+ animation systems that you can choose from: <a href="#property-animation">property
animation</a> and <a href="#view-animation">view animation</a>. You can use whichever
system that matches your needs, but use only one system for each object that you
are animating.</p>
@@ -91,7 +91,7 @@
<p>Most of the property animation system's features can be found in
{@link android.animation android.animation}. Because the
- <a href="#view-animation>view animation</a> system already
+ <a href="#view-animation">view animation</a> system already
defines many interpolators in {@link android.view.animation android.view.animation},
you will use those to define your animation's interpolation in the property animation
system as well.
@@ -163,7 +163,7 @@
<p>The Android system provides a set of common interpolators in
{@link android.view.animation android.view.animation}. If none of these suits your needs, you
can implement the {@link android.animation.TimeInterpolator} interface and create
- your own. See <a href="#interpolators">Interpolators</a> for more information on
+ your own. See <a href="#interpolators">Using interpolators</a> for more information on
how to write a custom interpolator.</p>
</dd>
</dl>
@@ -286,14 +286,13 @@
android.animation.AnimatorListenerAdapter} for just the {@link
android.animation.Animator.AnimatorListener#onAnimationEnd onAnimationEnd()}
callback:</p>
+
<pre>ValueAnimator fadeAnim = ObjectAnimator.ofFloat(newBall, "alpha", 1f, 0f);
fadeAnim.setDuration(250);
fadeAnim.addListener(new AnimatorListenerAdapter() {
public void onAnimationEnd(Animator animation) {
balls.remove(((ObjectAnimator)animation).getTarget());
-}
-
-</pre>
+}</pre>
<h3 id="object-animator">Animating with ObjectAnimator</h3>
@@ -308,11 +307,9 @@
<p>Instantiating an {@link android.animation.ObjectAnimator} is similar to a {@link
android.animation.ValueAnimator}, but you also specify the object and that object's
property (as a String) that you want to animate:</p>
- <pre>
-ObjectAnimator anim = ObjectAnimator.ofFloat(foo, "alpha", 0f, 1f);
+ <pre>ObjectAnimator anim = ObjectAnimator.ofFloat(foo, "alpha", 0f, 1f);
anim.setDuration(1000);
-anim.start();
-</pre>
+anim.start();</pre>
<p>To have the {@link android.animation.ObjectAnimator} update properties correctly,
you must do the following:</p>
@@ -355,7 +352,7 @@
</li>
</ul>
- <h3 id="type-evaluator">Using the TypeEvaluator</h3>
+ <h3 id="type-evaluator">Using a TypeEvaluator</h3>
<p>If you want to animate a type that is unknown to the Android system,
you can create your own evaluator by implementing the {@link
@@ -369,15 +366,13 @@
This allows the animator that you are using to return an
appropriate value for your animated property at the current point of the animation. The
{@link android.animation.FloatEvaluator} class demonstrates how to do this:</p>
- <pre>
-public class FloatEvaluator implements TypeEvaluator {
+ <pre>public class FloatEvaluator implements TypeEvaluator {
public Object evaluate(float fraction, Object startValue, Object endValue) {
float startFloat = ((Number) startValue).floatValue();
return startFloat + fraction * (((Number) endValue).floatValue() - startFloat);
}
-}
-</pre>
+}</pre>
<p class="note"><strong>Note:</strong> When {@link android.animation.ValueAnimator} (or
{@link android.animation.ObjectAnimator}) runs, it calculates a current elapsed
@@ -387,7 +382,7 @@
parameter, so you do not have to take into account the interpolator
when calculating animated values.</p>
- <h3 id="interpolators">Using Interpolators</h3>
+ <h3 id="interpolators">Using interpolators</h3>
<p>An interpolator define how specific values in an animation are
calculated as a function of time. For example, you can specify animations to happen
@@ -414,12 +409,12 @@
<p><strong>AccelerateDecelerateInterpolator</strong></p>
<pre>public float getInterpolation(float input) {
return (float)(Math.cos((input + 1) * Math.PI) / 2.0f) + 0.5f;
- }</pre>
+}</pre>
<p><strong>LinearInterpolator</strong></p>
<pre>public float getInterpolation(float input) {
return input;
- }</pre>
+}</pre>
<p>The following table represents the approximate values that are calculated by these
interpolators for an animation that lasts 1000ms:</p>
@@ -488,7 +483,7 @@
{@link android.view.animation.LinearInterpolator} between 200ms and 600ms and slower
between 600ms and 1000ms.</p>
- <h3 id="keyframes">Specifying Keyframes</h3>
+ <h3 id="keyframes">Specifying keyframes</h3>
<p>A {@link android.animation.Keyframe} object consists of a time/value pair that lets
you define a specific state at a specific time of an animation. Each keyframe can also
@@ -505,19 +500,18 @@
object, you can obtain an animator by passing in the {@link
android.animation.PropertyValuesHolder} object and the object to animate. The following
code snippet demonstrates how to do this:</p>
- <pre>
- Keyframe kf0 = Keyframe.ofFloat(0f, 0f);
- Keyframe kf1 = Keyframe.ofFloat(.9999f, 360f);
- Keyframe kf2 = Keyframe.ofFloat(1f, 0f);
- PropertyValuesHolder pvhRotation = PropertyValuesHolder.ofKeyframe("rotation", kf0, kf1, kf2);
- ObjectAnimator rotationAnim = ObjectAnimator.ofPropertyValuesHolder(target, pvhRotation)
- rotationAnim.setDuration(5000ms);
-
-</pre>For a more complete example on how to use keyframes, see the <a href=
+ <pre>Keyframe kf0 = Keyframe.ofFloat(0f, 0f);
+Keyframe kf1 = Keyframe.ofFloat(.9999f, 360f);
+Keyframe kf2 = Keyframe.ofFloat(1f, 0f);
+PropertyValuesHolder pvhRotation = PropertyValuesHolder.ofKeyframe("rotation", kf0, kf1, kf2);
+ObjectAnimator rotationAnim = ObjectAnimator.ofPropertyValuesHolder(target, pvhRotation)
+rotationAnim.setDuration(5000ms);
+</pre>
+<p>For a more complete example on how to use keyframes, see the <a href=
"{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/animation/MultiPropertyAnimation.html">
- MultiPropertyAnimation</a> sample in APIDemos.
+ MultiPropertyAnimation</a> sample in APIDemos.</p>
- <h3 id="choreography">Choreographing multiple animations with Animator Sets</h3>
+ <h3 id="choreography">Choreographing multiple animations with AnimatorSet</h3>
<p>In many cases, you want to play an animation that depends on when another animation
starts or finishes. The Android system lets you bundle animations together into an
@@ -559,7 +553,7 @@
<h3 id="declaring-xml">Declaring animations in XML</h3>
- <p>As with <a href="view-animation">view animation</a>, you can declare property animations with
+ <p>As with <a href="#view-animation">view animation</a>, you can declare property animations with
XML instead of doing it programmatically. The following Android classes also have XML
declaration support with the following XML tags:</p>
@@ -639,14 +633,13 @@
android:propertyName="y"
android:duration="500"
android:valueTo="300"
- android:valueType="int" >
- </set>
- <objectAnimator
- android:propertyName="alpha"
- android:duration="500"
- android:valueTo="0f"/>
- </set>
-</pre>
+ android:valueType="int"/>
+ </set>
+ <objectAnimator
+ android:propertyName="alpha"
+ android:duration="500"
+ android:valueTo="0f"/>
+</set></pre>
<p>In order to run this animation, you must inflate the XML resources in your code to
an {@link android.animation.AnimatorSet} object, and then set the target objects for all of
@@ -698,40 +691,38 @@
<p>The following XML from one of the ApiDemos is used to stretch, then simultaneously
spin and rotate a View object.</p>
- <pre>
-<set android:shareInterpolator="false">
- <scale
- android:interpolator="@android:anim/accelerate_decelerate_interpolator"
- android:fromXScale="1.0"
- android:toXScale="1.4"
- android:fromYScale="1.0"
- android:toYScale="0.6"
- android:pivotX="50%"
- android:pivotY="50%"
- android:fillAfter="false"
- android:duration="700" />
- <set android:interpolator="@android:anim/decelerate_interpolator">
- <scale
- android:fromXScale="1.4"
- android:toXScale="0.0"
- android:fromYScale="0.6"
- android:toYScale="0.0"
- android:pivotX="50%"
- android:pivotY="50%"
- android:startOffset="700"
- android:duration="400"
- android:fillBefore="false" />
- <rotate
- android:fromDegrees="0"
- android:toDegrees="-45"
- android:toYScale="0.0"
- android:pivotX="50%"
- android:pivotY="50%"
- android:startOffset="700"
- android:duration="400" />
- </set>
-</set>
-</pre>
+ <pre><set android:shareInterpolator="false">
+ <scale
+ android:interpolator="@android:anim/accelerate_decelerate_interpolator"
+ android:fromXScale="1.0"
+ android:toXScale="1.4"
+ android:fromYScale="1.0"
+ android:toYScale="0.6"
+ android:pivotX="50%"
+ android:pivotY="50%"
+ android:fillAfter="false"
+ android:duration="700" />
+ <set android:interpolator="@android:anim/decelerate_interpolator">
+ <scale
+ android:fromXScale="1.4"
+ android:toXScale="0.0"
+ android:fromYScale="0.6"
+ android:toYScale="0.0"
+ android:pivotX="50%"
+ android:pivotY="50%"
+ android:startOffset="700"
+ android:duration="400"
+ android:fillBefore="false" />
+ <rotate
+ android:fromDegrees="0"
+ android:toDegrees="-45"
+ android:toYScale="0.0"
+ android:pivotX="50%"
+ android:pivotY="50%"
+ android:startOffset="700"
+ android:duration="400" />
+ </set>
+</set></pre>
<p>Screen coordinates (not used in this example) are (0,0) at the upper left hand
corner, and increase as you go down and to the right.</p>
@@ -805,8 +796,7 @@
image to a View and then called to play. Here's an example Activity, in which the
animation is added to an {@link android.widget.ImageView} and then animated when the
screen is touched:</p>
- <pre>
-AnimationDrawable rocketAnimation;
+ <pre>AnimationDrawable rocketAnimation;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -823,8 +813,7 @@
return true;
}
return super.onTouchEvent(event);
-}
-</pre>
+}</pre>
<p>It's important to note that the <code>start()</code> method called on the
AnimationDrawable cannot be called during the <code>onCreate()</code> method of your
diff --git a/docs/html/sdk/android-3.0.jd b/docs/html/sdk/android-3.0.jd
index 6896f52..9ca6a04 100644
--- a/docs/html/sdk/android-3.0.jd
+++ b/docs/html/sdk/android-3.0.jd
@@ -1,4 +1,4 @@
-page.title=Android 3.0 Platform
+page.title=Android 3.0 Platform Preview
@jd:body
<div id="qv-wrapper">
@@ -28,11 +28,17 @@
</div>
</div>
-</p>API Level: <b>Honeycomb</b></p>
+<p><em>API Level:</em> <b>Honeycomb</b></p>
<p>For developers, the Android 3.0 preview is available as a downloadable component for the
-Android SDK. The downloadable platform includes an Android library and system image, as well as a
-set of emulator skins and more. The downloadable platform includes no external libraries.</p>
+Android SDK.</p>
+
+<p class="note"><strong>Note:</strong> Read the <a
+href="{@docRoot}sdk/preview/start.html">Getting Started</a> guide for important information
+about setting up your development environment and limitiations of the Android 3.0 preview.</p>
+
+
+
@@ -43,8 +49,6 @@
including new features and changes in the framework API since the previous version.</p>
-
-
<h3>Fragments</h3>
<p>A fragment is a new framework component that allows you to separate distinct elements of an
@@ -185,98 +189,63 @@
<p>New APIs now facilitate the ability for your application to implement drag and drop
functionality in the UI.</p>
-<p>To drag a {@link android.view.View} in your activity, call {@link android.view.View#startDrag
-startDrag()} on the object, providing a {@link android.content.ClipData} object that represents the
-information to drag, a {@link android.view.View.DragShadowBuilder} to facilitate the "shadow" that
-the user sees while dragging, and an {@link java.lang.Object} that can share information about the
-drag object with views that may receive the object. However, </p>
+<p>To begin dragging content in your activity, call {@link android.view.View#startDrag startDrag()}
+on a {@link android.view.View}, providing a {@link android.content.ClipData} object that represents
+the information to drag, a {@link android.view.View.DragShadowBuilder} to facilitate the "shadow"
+that the user sees while dragging, and an {@link java.lang.Object} that can share information about
+the drag object with views that may receive the object.</p>
<p>To accept a drag object (receive the "drop") in a
{@link android.view.View}, register the view with an {@link android.view.View.OnDragListener} by
calling {@link android.view.View#setOnDragListener setOnDragListener()}. When a drag event occurs on
the view, the system calls {@link android.view.View.OnDragListener#onDrag onDrag()} for the {@link
-android.view.View.OnDragListener}, which receives a {@link android.view.DragEvent} describing
-the type of event has occurred (such as "drag started", "drag ended", and "drop"). The receiving
-view can inquire the event type delivered to {@link
-android.view.View#onDragEvent onDragEvent()} by calling {@link
-android.view.DragEvent#getAction getAction()} on the {@link android.view.DragEvent}.</p>
+android.view.View.OnDragListener}, which receives a {@link android.view.DragEvent} describing the
+type of event has occurred (such as "drag started", "drag ended", and "drop"). During a drag
+operation, there is a stream of drag events, so the system calls {@link
+android.view.View.OnDragListener#onDrag onDrag()} repeatedly on the view. The receiving view can
+inquire the event type delivered to {@link android.view.View#onDragEvent onDragEvent()} by calling
+{@link android.view.DragEvent#getAction getAction()} on the {@link android.view.DragEvent}.</p>
-<p>Although a drag event may carry a {@link android.content.ClipData} object, drag and drop does
-not depend on the clipboard. The data being dragged is sent to the system as {@link
-android.content.ClipData} and the system sends it to {@link android.view.View} objects in the
-{@link android.view.DragEvent}. A drag and drop operation should never put the dragged data on the
-clipboard.</p>
+<p>Although a drag event may carry a {@link android.content.ClipData} object, this is not related
+to the system clipboard. The data being dragged is passed as a {@link
+android.content.ClipData} object to {@link android.view.View#startDrag startDrag()} and the system
+sends it to the receiving {@link android.view.View} in the {@link android.view.DragEvent} sent to
+{@link android.view.View.OnDragListener#onDrag onDrag()}. A drag and drop operation should never
+put the dragged data in the global system clipboard.</p>
-<h3>Multiple-choice selection for ListView and GridView</h3>
-
-<p>New {@link android.widget.AbsListView#CHOICE_MODE_MULTIPLE_MODAL} mode for {@link
-android.widget.AbsListView#setChoiceMode setChoiceMode()} allows for selecting multiple items
-from a {@link android.widget.ListView} and {@link android.widget.GridView}.</p>
-
-<p>To enable multiple-choice selection, call {@link
-android.widget.AbsListView#setChoiceMode setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL)} and register a
-{@link android.widget.AbsListView.MultiChoiceModeListener} with {@link
-android.widget.AbsListView#setMultiChoiceModeListener setMultiChoiceModeListener()}.</p>
-
-<p>When the user performs a long-press on an item, the Action Bar switches to the Multi-choice
-Action Mode. The system notifies the {@link android.widget.AbsListView.MultiChoiceModeListener}
-when items are selected by calling {@link
-android.widget.AbsListView.MultiChoiceModeListener#onItemCheckedStateChanged
-onItemCheckedStateChanged()}.</p>
-
-<p>For an example of multiple-choice selection, see the <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/List15.html">List15.java</a>
-class in the API Demos sample application.</p>
-
-
-
-
-<h3>Content loaders</h3>
-
-<p>New framework APIs facilitate asynchronous loading of data using the {@link
-android.content.Loader} class. You can use it in combination with UI components such as views and
-fragments to dynamically load data from background threads. The {@link
-android.content.CursorLoader} subclass is specially designed to help do so for data queried from
-a {@link android.content.ContentResolver}.</p>
-
-
-
-<h3>Extended app widgets</h3>
+<h3>App widgets</h3>
<p>App widgets can now be more interactive with scrolling list views, grid views, view flippers, and
a new 3D stack widget.</p>
-<p>Android 3.0 supports several new widget classes for App Widgets, including:</p>
-<ul>
- <li>{@link android.widget.GridView}</li>
- <li>{@link android.widget.ListView}</li>
- <li>{@link android.widget.StackView}</li>
- <li>{@link android.widget.ViewFlipper}</li>
- <li>{@link android.widget.AdapterViewFlipper}</li>
-</ul>
+<p>Android 3.0 supports several new widget classes for app widgets, including: {@link
+android.widget.GridView}, {@link android.widget.ListView}, {@link android.widget.StackView}, {@link
+android.widget.ViewFlipper}, and {@link android.widget.AdapterViewFlipper}.</p>
<p>You can use the new {@link android.widget.RemoteViewsService} to populate the new remote
collection views ({@link android.widget.GridView}, {@link android.widget.ListView}, and {@link
android.widget.StackView}).</p>
-<p>You can also use two new {@link android.appwidget.AppWidgetProviderInfo} fields. The {@link
+<p>{@link android.appwidget.AppWidgetProviderInfo} also supports two new fields: {@link
+android.appwidget.AppWidgetProviderInfo#autoAdvanceViewId} and {@link
+android.appwidget.AppWidgetProviderInfo#previewImage}. The {@link
android.appwidget.AppWidgetProviderInfo#autoAdvanceViewId} field lets you specify the view ID of the
app widget subview, which is auto-advanced by the app widget’s host. The
{@link android.appwidget.AppWidgetProviderInfo#previewImage} field specifies a preview of what the
App Widget looks like and is shown to the user from the widget picker. If this field is not
supplied, the app widget's icon is used for the preview.</p>
-<p>Android also provides a new widget preview tool (WidgetPreview), located in the SDK tools. The
-tool lets you take a screenshot of your app widget, which you can use to populate the customization
-tray.</p>
+<p>Android also provides a new widget preview tool (WidgetPreview), located in the SDK tools, to
+take a screenshot of your app widget, which you can use when specifying the {@link
+android.appwidget.AppWidgetProviderInfo#previewImage} field.</p>
-<h3>Extended status bar notifications</h3>
+<h3>Status bar notifications</h3>
<p>The {@link android.app.Notification} APIs have been extended to support more content-rich status
bar notifications, plus a new {@link android.app.Notification.Builder} class allows you to easily
@@ -296,9 +265,34 @@
-<h3>New animation framework</h3>
+<h3>Content loaders</h3>
-<p>An all new flexible animation framework that allows you to animate the properties of any object
+<p>New framework APIs facilitate asynchronous loading of data using the {@link
+android.content.Loader} class. You can use it in combination with UI components such as views and
+fragments to dynamically load data from background threads. The {@link
+android.content.CursorLoader} subclass is specially designed to help do so for data queried from
+a {@link android.content.ContentResolver}.</p>
+
+
+
+
+
+<h3>Bluetooth A2DP and headset APIs</h3>
+
+<p>Android now includes APIs for applications to verify the state of connected Bluetooth A2DP and
+headset profile devices. You can initialize the respective {@link
+android.bluetooth.BluetoothProfile} by calling {@link
+android.bluetooth.BluetoothAdapter#getProfileProxy getProfileProxy()} with either the {@link
+android.bluetooth.BluetoothProfile#A2DP} or {@link android.bluetooth.BluetoothProfile#HEADSET}
+profile constant and a {@link android.bluetooth.BluetoothProfile.ServiceListener} to receive
+callbacks when the client is connected or disconnected.</p>
+
+
+
+
+<h3>Animation framework</h3>
+
+<p>An all new flexible animation framework allows you to animate the properties of any object
(View, Drawable, Fragment, Object, anything). It allows you to define many aspects of an animation,
such as:</p>
<ul>
@@ -320,7 +314,21 @@
object or property that is animated as a result. It simply performs the calculations, and you must
listen for the updates and process the data with your own logic. The {@link
android.animation.ObjectAnimator} is a subclass of {@link android.animation.ValueAnimator} and
-allows you to set the object and property to animate, so you do not have to listen for updates.</p>
+allows you to set the object and property to animate, and it handles all animation work.
+That is, you give the {@link android.animation.ObjectAnimator} the object to animate, the
+property of the object to change over time, and a set of values to apply to the property over
+time in order to animate it, then start the animation.</p>
+
+<p>Additionally, the {@link android.animation.LayoutTransition} class enables automatic transition
+animations for changes you make to your activity layout. To enable transitions for a {@link
+android.view.ViewGroup}, create a {@link android.animation.LayoutTransition} object and set it on
+any {@link android.view.ViewGroup} by calling {@link
+android.view.ViewGroup#setLayoutTransition setLayoutTransition()}. This causes default
+animations to run whenever items are added to or removed from the group. To specify custom
+animations, call {@link android.animation.LayoutTransition#setAnimator setAnimator()} on the {@link
+android.animation.LayoutTransition} to provide a custom {@link android.animation.Animator},
+such as a {@link android.animation.ValueAnimator} or {@link android.animation.ObjectAnimator}
+discussed above.</p>
<p>For more information, see the <a
href="{@docRoot}guide/topics/graphics/animation.html">Animation</a> developer guide.</p>
@@ -328,73 +336,67 @@
-
-<h3>New widgets</h3>
+<h3>Extended UI framework</h3>
<ul>
-<li>{@link android.widget.AdapterViewAnimator}
-<p>Base class for an {@link android.widget.AdapterView} that performs animations when switching
-between its views.</p></li>
+ <li><b>Multiple-choice selection for ListView and GridView</b>
-<li>{@link android.widget.AdapterViewFlipper}
-<p>Simple {@link android.widget.ViewAnimator} that animates between two or more views that have
-been added to it. Only one child is shown at a time. If requested, it can automatically flip between
-each child at a regular interval.</p></li>
+<p>New {@link android.widget.AbsListView#CHOICE_MODE_MULTIPLE_MODAL} mode for {@link
+android.widget.AbsListView#setChoiceMode setChoiceMode()} allows for selecting multiple items
+from a {@link android.widget.ListView} and {@link android.widget.GridView}.</p>
-<li>{@link android.widget.CalendarView}
-<p>Allows users to select dates from a calendar and you can configure the range of dates
-available. A user can select a date by tapping on it and can scroll and fling
-the calendar to a desired date.</p></li>
+<p>To enable multiple-choice selection, call {@link
+android.widget.AbsListView#setChoiceMode setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL)} and register a
+{@link android.widget.AbsListView.MultiChoiceModeListener MultiChoiceModeListener} with {@link
+android.widget.AbsListView#setMultiChoiceModeListener setMultiChoiceModeListener()}.</p>
-<li>{@link android.widget.ListPopupWindow}
-<p>Anchors itself to a host view and displays a list of choices, such as for a list of
-suggestions when typing into an {@link android.widget.EditText} view.</p></li>
+<p>When the user performs a long-press on an item, the Action Bar switches to the Multi-choice
+Action Mode. The system notifies the {@link android.widget.AbsListView.MultiChoiceModeListener
+MultiChoiceModeListener} when items are selected by calling {@link
+android.widget.AbsListView.MultiChoiceModeListener#onItemCheckedStateChanged
+onItemCheckedStateChanged()}.</p>
-<li>{@link android.widget.NumberPicker}
-<p>Enables the user to select a number from a predefined range. The widget presents an
-input field and up and down buttons for selecting a number. Touching the input field shows a
-scroll wheel that allows the user to scroll through values or touch again to directly edit the
-current value. It also allows you to map from positions to strings, so that
-the corresponding string is displayed instead of the position index.</p></li>
+<p>For an example of multiple-choice selection, see the <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/List15.html">List15.
+java</a>
+class in the API Demos sample application.</p>
+ </li>
-<li>{@link android.widget.PopupMenu}
-<p>Displays a {@link android.view.Menu} in a modal popup window that's anchored to a view. The popup
-appears below the anchor view if there is room, or above it if there is not. If the IME (soft
-keyboard) is visible, the popup does not overlap it until it is touched.</p></li>
+
+ <li><b>New APIs to transform views</b>
+
+ <p>New APIs allow you to easily apply 2D and 3D transformations to {@link
+android.view.View}s in your activity layout, using a set of object properties that define the view's
+layout position, orientation, transparency and more.</p>
+ <p>New methods to set properties include: {@link android.view.View#setAlpha setAlpha()}, {@link
+android.view.View#setBottom setBottom()}, {@link android.view.View#setLeft setLeft()}, {@link
+android.view.View#setRight setRight()}, {@link android.view.View#setBottom setBottom()}, {@link
+android.view.View#setPivotX setPivotX()}, {@link android.view.View#setPivotY setPivotY()}, {@link
+android.view.View#setRotationX setRotationX()}, {@link android.view.View#setRotationY
+setRotationY()}, {@link android.view.View#setScaleX setScaleX()}, {@link android.view.View#setScaleY
+setScaleY()}, {@link android.view.View#setAlpha setAlpha()}, and others.</p>
-<li>{@link android.widget.SearchView}
-<p>Provides a search box that works in conjunction with a search provider (in the same manner as
-the traditional <a href="{@docRoot}guide/topics/search/search-dialog.html">search dialog</a>). It
-also displays recent query suggestions or custom suggestions as configured by the search
-provider. This widget is particularly useful for offering search in the Action Bar.</p></li>
+ <p>Some methods also have a corresponding XML attribute that you can specify in your layout
+file. Available attributes include: {@code translationX}, {@code translationY}, {@code rotation},
+{@code rotationX}, {@code rotationY}, {@code scaleX}, {@code scaleY}, {@code transformPivotX},
+{@code transformPivotY}, and {@code alpha}.</p>
-<li>{@link android.widget.StackView}
-<p>A view that displays its children in a 3D stack and allows users to discretely swipe through the
-children.</p></li>
+ <p>Using some of these new properties in combination with the new animation framework (discussed
+previously), you can easily create some fancy animations to your views. For example, to rotate a
+view on its y-axis, supply {@link android.animation.ObjectAnimator} with the {@link
+android.view.View}, the "rotationY" property, and the values to use:</p>
+<pre>
+ObjectAnimator animator = ObjectAnimator.ofFloat(myView, "rotationY", 0, 360);
+animator.setDuration(2000);
+animator.start();
+</pre>
+ </li>
-</ul>
+
+ <li><b>New holographic themes</b>
-
-
-
-
-<h3>Redesigned widgets</h3>
-
-<p>Android 3.0 offers an updated set of UI widgets that developers can use to quickly add new types
-of content to their applications. The new UI widgets are redesigned for use on larger screens such
-as tablets and incorporate the new holographic UI theme. Several new widget types are available,
-including a 3D stack, search box, a date/time picker, number picker, stack, calendar View etc.
-SearchView, PopupMenu, and others. Most of the redesigned widgets can now be used as remote views in
-homescreen widgets. Applications written for earlier versions can inherit the new widget designs and
-themes.</p>
-
-
-
-
-<h3>Holographic themes</h3>
-
-<p>The standard system widgets and overall look have been redesigned for use on larger screens
+ <p>The standard system widgets and overall look have been redesigned for use on larger screens
such as tablets and incorporate the new holographic UI theme. These style changes are applied
using the standard <a href="{@docRoot}guide/topics/ui/themes.html">style and theme</a> system.
Any application that targets the Android 3.0 platform inherit the holographic theme by default.
@@ -404,19 +406,63 @@
<p>To apply the holographic theme to individual activities or to inherit them in your own theme
definitions, you can use one of several new {@link android.R.style#Theme_Holo Theme.Holo}
themes.</p>
+ </li>
+
+
+ <li><b>New widgets</b>
+
+ <ul>
+ <li>{@link android.widget.AdapterViewAnimator}
+ <p>Base class for an {@link android.widget.AdapterView} that performs animations when switching
+ between its views.</p></li>
+
+ <li>{@link android.widget.AdapterViewFlipper}
+ <p>Simple {@link android.widget.ViewAnimator} that animates between two or more views that have
+ been added to it. Only one child is shown at a time. If requested, it can automatically flip
+ between
+ each child at a regular interval.</p></li>
+
+ <li>{@link android.widget.CalendarView}
+ <p>Allows users to select dates from a calendar and you can configure the range of dates
+ available. A user can select a date by tapping on it and can scroll and fling
+ the calendar to a desired date.</p></li>
+
+ <li>{@link android.widget.ListPopupWindow}
+ <p>Anchors itself to a host view and displays a list of choices, such as for a list of
+ suggestions when typing into an {@link android.widget.EditText} view.</p></li>
+
+ <li>{@link android.widget.NumberPicker}
+ <p>Enables the user to select a number from a predefined range. The widget presents an
+ input field and up and down buttons for selecting a number. Touching the input field shows a
+ scroll wheel that allows the user to scroll through values or touch again to directly edit the
+ current value. It also allows you to map from positions to strings, so that
+ the corresponding string is displayed instead of the position index.</p></li>
+
+ <li>{@link android.widget.PopupMenu}
+ <p>Displays a {@link android.view.Menu} in a modal popup window that's anchored to a view. The
+ popup
+ appears below the anchor view if there is room, or above it if there is not. If the IME (soft
+ keyboard) is visible, the popup does not overlap it until it is touched.</p></li>
+
+ <li>{@link android.widget.SearchView}
+ <p>Provides a search box that works in conjunction with a search provider (in the same manner as
+ the traditional <a href="{@docRoot}guide/topics/search/search-dialog.html">search dialog</a>).
+It
+ also displays recent query suggestions or custom suggestions as configured by the search
+ provider. This widget is particularly useful for offering search in the Action Bar.</p></li>
+
+ <li>{@link android.widget.StackView}
+ <p>A view that displays its children in a 3D stack and allows users to discretely swipe through
+ the
+ children.</p></li>
+
+ </ul>
+ </li>
+
+</ul>
-<h3>Bluetooth A2DP and headset APIs</h3>
-
-<p>Android now includes APIs for applications to verify the state of connected Bluetooth A2DP and
-headset profile devices. You can initialize the respective {@link
-android.bluetooth.BluetoothProfile} by calling {@link
-android.bluetooth.BluetoothAdapter#getProfileProxy getProfileProxy()} with either the {@link
-android.bluetooth.BluetoothProfile#A2DP} or {@link android.bluetooth.BluetoothProfile#HEADSET}
-profile constant and a {@link android.bluetooth.BluetoothProfile.ServiceListener} to receive
-callbacks when the client is connected or disconnected.</p>
-
<!--
<h3>WebKit</h3>
@@ -427,7 +473,7 @@
<h3>Graphics</h3>
<ul>
- <li><h4>Hardware accelerated 2D graphics</h4>
+ <li><b>Hardware accelerated 2D graphics</b>
<p>You can now enable the OpenGL renderer for your application by setting {@code
android:hardwareAccelerated="true"} in your manifest element's <a
@@ -439,7 +485,29 @@
<p>This flag helps applications by making them draw faster. This results in smoother animations,
smoother scrolling, and overall better performance and response to user interaction.</p></li>
- <li><h4>Renderscript 3D graphics engine</h4>
+
+ <li><b>View support for hardware and software layers</b>
+
+ <p>By default, a {@link android.view.View} has no layer specified. You can specify that the
+view be backed by either a hardware or software layer, specified by values {@link
+android.view.View#LAYER_TYPE_HARDWARE} and {@link android.view.View#LAYER_TYPE_SOFTWARE}, using
+{@link android.view.View#setLayerType setLayerType()} or the <a
+href="{@docRoot}reference/android/view/View.html#attr_android:layerType">{@code layerType}</a>
+attribute.</p>
+ <p>A hardware layer is backed by a hardware specific texture (generally Frame Buffer Objects or
+FBO on OpenGL hardware) and causes the view to be rendered using Android's hardware rendering
+pipeline, but only if hardware acceleration is turned on for the view hierarchy. When hardware
+acceleration is turned off, hardware layers behave exactly as software layers.</p>
+ <p>A software layer is backed by a bitmap and causes the view to be rendered using Android's
+software rendering pipeline, even if hardware acceleration is enabled. Software layers should be
+avoided when the affected view tree updates often. Every update will require to re-render the
+software layer, which can potentially be slow.</p>
+ <p>For more information, see the {@link android.view.View#LAYER_TYPE_HARDWARE} and {@link
+android.view.View#LAYER_TYPE_SOFTWARE} documentation.</p>
+ </li>
+
+
+ <li><b>Renderscript 3D graphics engine</b>
<p>Renderscript is a runtime 3D framework that provides both an API for building 3D scenes as well
as a special, platform-independent shader language for maximum performance. Using Renderscript, you
@@ -450,12 +518,11 @@
-
<h3>Media</h3>
<ul>
- <li><h4>Camcorder profiles</h4>
+ <li><b>Camcorder profiles</b>
<p>New {@link android.media.CamcorderProfile#hasProfile hasProfile()} method and several video
quality profiles, such as {@link android.media.CamcorderProfile#QUALITY_1080P}, {@link
@@ -463,27 +530,20 @@
android.media.CamcorderProfile#QUALITY_CIF}, and more, to determine the camcorder quality
profiles.</p></li>
- <li><h4>Time lapse video mode</h4>
+ <li><b>Time lapse video mode</b>
<p>Camcorder APIs now support the ability to record time lapse video. The {@link
android.media.MediaRecorder#setCaptureRate setCaptureRate()} sets the rate at which frames
should be captured.</p></li>
- <li><h4>Digital media file transfer</h4>
-
-<p>The platform includes built-in support for Media/Picture Transfer Protocol (MTP/PTP) over USB,
-which lets users easily transfer any type of media files between devices and to a host computer.
-Developers can take advantage of this to create applications that let users create or manage files
-that they may want to transfer across devices.</p></li>
-
- <li><h4>Digital Media File Transfer</h4>
+ <li><b>Digital media file transfer</b>
<p>The platform includes built-in support for Media/Picture Transfer Protocol (MTP/PTP) over USB,
which lets users easily transfer any type of media files between devices and to a host computer.
Developers can build on this support, creating applications that let users create or manage rich
media files that they may want to transfer or share across devices. </p></li>
- <li><h4>Digital rights management (DRM)</h4>
+ <li><b>Digital rights management (DRM)</b>
<p>New extensible digital rights management (DRM) framework for checking and enforcing digital
rights. It's implemented in two architectural layers:</p>
diff --git a/docs/html/sdk/preview/start.jd b/docs/html/sdk/preview/start.jd
index 7e816c1..88b6908 100644
--- a/docs/html/sdk/preview/start.jd
+++ b/docs/html/sdk/preview/start.jd
@@ -3,27 +3,10 @@
<p>Welcome to Android 3.0!</p>
-<p>Android 3.0 is the next major release of the Android platform and is optimized for tablet
-devices. We're offering a preview SDK so you can get a head-start developing
-applications for it or simply optimize your existing application for upcoming
-tablets.</p>
+<p>Android 3.0 is the next major release of the Android platform and is optimized for larger screen
+devices, particularly tablets. We're offering a preview SDK so you can get a head-start developing
+applications for it or simply test and optimize your existing application for upcoming devices.</p>
-
-<h3>What is the preview SDK?</h3>
-
-<p>The Android 3.0 preview SDK is an early look at the upcoming version of Android 3.0, for
-developers only.</p>
-
-<p>The preview SDK includes:</p>
-<ul>
- <li>An early Android 3.0 system image for use in the Android emulator</li>
- <li>An Android 3.0 library with non-final APIs</li>
- <li>A new WXGA emulator skin for an extra large Android Virtual Device</li>
- <li>New documentation for Android 3.0, including a complete API reference, new developer guides,
-and an API differences report between Android 3.0 and 2.3.</li>
-</ul>
-
-<div class="note">
<p><strong>Be aware that:</strong></p>
<ul>
<li>The APIs in the preview SDK are <strong>not final</strong>. Some APIs may change in behavior
@@ -36,7 +19,6 @@
developer guides for Android 3.0, you must install the Android 3.0 preview documentation from
the AVD and SDK Manager.</li>
</ul>
-</div>
@@ -46,18 +28,37 @@
<li><a href="#Setup">Set up the preview SDK</a></li>
<li>Then choose your app adventure:
<ol type="a">
- <li><a href="#Optimize">Optimize Your App for Tablets</a>
+ <li><a href="#Optimize">Optimize Your App for Tablets and Similar Devices</a>
<p>When you have an existing application and you want to maintain compatibility with
older versions of Android.</p>
</li>
- <li><a href="#Upgrade">Upgrade or Develop a New App for Tablets</a>
+ <li><a href="#Upgrade">Upgrade or Develop a New App for Tablets and Similar Devices</a>
<p>When you want to upgrade your application to use APIs introduced in Android 3.0 or
- create an all new application targeted to tablet devices.</p></li>
+ create a new application targeted to tablets and similar devices.</p></li>
</ol>
</li>
</ol>
-
+<h3>Android 3.0 samples</h3>
+<p>Many of the new APIs that are described in the <a href="{@docRoot}sdk/android-3.0.html#api">
+Android 3.0 Platform Preview</a> also have accompanying samples that help you understand the feature.
+The samples are located in <code><sdk_root>/samples/android-Honeycomb</code> and include
+the following:</p>
+<ul>
+ <li><a href="{@docRoot}resources/samples/Honeycomb-Gallery/index.html">Honeycomb Gallery</a> -
+ A demo application highlighting how to use some of the new APIs in Honeycomb, including fragments, the action bar,
+ drag and drop, transition animations, and a stack widget.</li>
+ <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/index.html#Fragment">Fragments</a>
+ <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/ActionBarMechanics.html">Action Bar</a></li>
+ <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/content/ClipboardSample.html">Clipboard</a></li>
+ <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/DragAndDropDemo.html">Drag and Drop</a></li>
+ <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/List15.html">
+ Multiple-choice selection for ListView and GridView</a></li>
+ <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html">Content Loaders</a></li>
+ <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/animation/index.html">Property Animation</a></li>
+ <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/SearchViewActionBar.html">Search View Widget</a></li>
+ <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/PopupMenu1.html">Popup Menu Widget</a></li>
+</ul>
<h2 id="Setup">Set Up the Preview SDK</h2>
@@ -81,16 +82,16 @@
</ol>
-<h3>About Emulator Performance</h3>
+<h3>About emulator performance</h3>
<p>Because the Android emulator must simulate the ARM instruction set architecture on your
computer and the WXGA screen is significantly larger than what the emulator
normally handles, emulator performance is much slower than usual.</p>
<p>We're working hard to resolve the performance issues and it will improve in future releases.
-Unfortunately, the emulator will perform slowly during your trial with the preview SDK. Please
-continue to use the emulator to evaluate your application's appearance and functionality on Android
-3.0.</p>
+Unfortunately, the emulator will perform slowly during your trial with the preview SDK. For the time
+being, the emulator is still best way to evaluate your application's appearance and functionality on
+Android 3.0.</p>
<p class="note"><strong>Tip:</strong> To improve the startup time for the emulator, enable
snapshots for the AVD when you create it with the SDK and AVD Manager (there's a checkbox in
@@ -101,19 +102,38 @@
snapshot</b> only for the first time you launch the AVD.</p>
+<h3>Known issues</h3>
-<h2 id="Optimize">Optimize Your Application for Tablets</h2>
+<p>The following known issues occur for Android 3.0 AVDs that are loaded in the emulator:</p>
+ <ul>
+ <li>You cannot take screenshots of an emulator screen. The Device Screen
+ Capture window displays <strong>Screen not available</strong>.</li>
+ <li>The emulator cannot receive incoming SMS messages.</li>
+ <li>GPS emulation is currently not supported.</li>
+ <li>When rotating the emulator screen by pressing Ctrl-F11, the screen turns green momentarily,
+then displays the normal interface.</li>
+ <li>In some circumstances, the emulator displays a rotated portrait screen while in landscape
+mode. To view the screen correctly, rotate the emulator to portrait mode by pressing Ctrl-F11 or
+turn off the auto-rotate setting in <strong>Settings > Screen > Auto-rotate screen</strong>.</li>
+ <li>The Dev Tools application sometimes crashes when trying to use the Package Browser
+feature.</li>
+ <li>On Ubuntu 10.04 64-bit machines, you cannot create an AVD that has an SD card.</li>
+ </ul>
+
+
+
+<h2 id="Optimize">Optimize Your Application for Tablets and Similar Devices</h2>
<p>If you've already developed an application for Android, there are a few things you can do
-to optimize it for a tablet experience, without changing the minimum platform version required (you
-don't need to change the manifest {@code minSdkVersion}).</p>
+to optimize it for a tablet-style experience, without changing the minimum platform version required
+(you don't need to change the manifest {@code minSdkVersion}).</p>
<p class="note"><strong>Note:</strong> All Android applications are forward-compatible, so
there's nothing you <em>have to</em> do—if your application is a good citizen of the Android
APIs, your app should work fine on devices running Android 3.0. However, in order to provide users
-a better experience when running your app on an Android 3.0 tablet, we recommend that you update
-your application to adapt to the new system theme and add optimize your application for larger
-screens.</p>
+a better experience when running your app on an Android 3.0 tablet or similar-size device, we
+recommend that you update your application to adapt to the new system theme and optimize your
+application for larger screens.</p>
<p>Here's what you can do to optimize your application for tablets running Android
3.0:</p>
@@ -188,10 +208,10 @@
-<h2 id="Upgrade">Upgrade or Develop a New App for Tablets</h2>
+<h2 id="Upgrade">Upgrade or Develop a New App for Tablets and Similar Devices</h2>
-<p>If you want to develop something truly for tablets running Android 3.0, then you need to use new
-APIs available in Android 3.0. This section introduces some of the new features that you
+<p>If you want to develop something truly for tablet-type devices running Android 3.0, then you need
+to use new APIs available in Android 3.0. This section introduces some of the new features that you
should use.</p>
<p>The first thing to do when you create a project with the Android 3.0 preview is set the <a
@@ -226,7 +246,7 @@
-<h3>Publishing your app for tablets only</h3>
+<h3>Publishing your app for tablet-type devices only</h3>
<p>Additionally, you should decide whether your application is for <em>only</em> tablet devices
(specifically, <em>xlarge</em> devices) or for devices of all sizes that may run Android 3.0.</p>
diff --git a/docs/html/sdk/sdk_toc.cs b/docs/html/sdk/sdk_toc.cs
index 226f880..7cf7b07 100644
--- a/docs/html/sdk/sdk_toc.cs
+++ b/docs/html/sdk/sdk_toc.cs
@@ -78,7 +78,7 @@
<ul>
<li class="toggle-list">
<div><a href="<?cs var:toroot ?>sdk/android-2.3.html">
- <span class="en">Android 2.3 Platform</span></a> <span class="new">new!</span></div>
+ <span class="en">Android 2.3 Platform</span></a></div>
<ul>
<li><a href="<?cs var:toroot ?>sdk/android-2.3-highlights.html">Platform Highlights</a></li>
<li><a href="<?cs var:toroot ?>sdk/api_diff/9/changes.html">API Differences Report »</a></li>
@@ -98,9 +98,8 @@
</li>
</ul>
<ul>
- <li><a href="<?cs var:toroot ?>sdk/tools-notes.html">SDK Tools, r8</a> <span class="new">new!</span></li>
- <li><a href="<?cs var:toroot ?>sdk/win-usb.html">Google USB Driver, r4</a> <span class="new">new!</span>
- </li>
+ <li><a href="<?cs var:toroot ?>sdk/tools-notes.html">SDK Tools, r9</a> <span class="new">new!</span></li>
+ <li><a href="<?cs var:toroot ?>sdk/win-usb.html">Google USB Driver, r4</a></li>
</ul>
</li>
<li>
@@ -115,7 +114,7 @@
<span style="display:none" class="zh-TW"></span>
</h2>
<ul>
- <li><a href="<?cs var:toroot ?>sdk/eclipse-adt.html">ADT 8.0.1
+ <li><a href="<?cs var:toroot ?>sdk/eclipse-adt.html">ADT 9.0.0
<span style="display:none" class="de"></span>
<span style="display:none" class="es"></span>
<span style="display:none" class="fr"></span>
@@ -137,7 +136,7 @@
<span style="display:none" class="zh-TW"></span>
</h2>
<ul>
- <li><a href="<?cs var:toroot ?>sdk/ndk/index.html">Android NDK, r5</a>
+ <li><a href="<?cs var:toroot ?>sdk/ndk/index.html">Android NDK, r5b</a>
<span class="new">new!</span></li>
<li><a href="<?cs var:toroot ?>sdk/ndk/overview.html">What is the NDK?</a></li>
</ul>
diff --git a/docs/html/sdk/tools-notes.jd b/docs/html/sdk/tools-notes.jd
index b832628..212d3c0 100644
--- a/docs/html/sdk/tools-notes.jd
+++ b/docs/html/sdk/tools-notes.jd
@@ -108,6 +108,9 @@
<li>Fixed the missing JAR file error that prevented <code>draw9patch</code> from running.</li>
<li>Fixed the Windows launch scripts <code>hierarchyviewer</code> and <code>ddms</code> to support
the new location of <code>adb</code>.</li>
+ <li>Known issues with emulator performance: Because the Android emulator must simulate the ARM
+instruction set architecture on your computer, emulator performance is slow. We're working hard to
+resolve the performance issues and it will improve in future releases.</li>
</ul>
</dd>
</dl>
diff --git a/graphics/java/android/graphics/Bitmap.java b/graphics/java/android/graphics/Bitmap.java
index e67ceed..2b4a410 100644
--- a/graphics/java/android/graphics/Bitmap.java
+++ b/graphics/java/android/graphics/Bitmap.java
@@ -165,10 +165,12 @@
}
/**
- * Free up the memory associated with this bitmap's pixels, and mark the
- * bitmap as "dead", meaning it will throw an exception if getPixels() or
- * setPixels() is called, and will draw nothing. This operation cannot be
- * reversed, so it should only be called if you are sure there are no
+ * Free the native object associated with this bitmap, and clear the
+ * reference to the pixel data. This will not free the pixel data synchronously;
+ * it simply allows it to be garbage collected if there are no other references.
+ * The bitmap is marked as "dead", meaning it will throw an exception if
+ * getPixels() or setPixels() is called, and will draw nothing. This operation
+ * cannot be reversed, so it should only be called if you are sure there are no
* further uses for the bitmap. This is an advanced call, and normally need
* not be called, since the normal GC process will free up this memory when
* there are no more references to this bitmap.
diff --git a/graphics/java/android/renderscript/Allocation.java b/graphics/java/android/renderscript/Allocation.java
index 74cdf80..3dcfe88 100644
--- a/graphics/java/android/renderscript/Allocation.java
+++ b/graphics/java/android/renderscript/Allocation.java
@@ -212,7 +212,7 @@
for (int ct=0; ct < d.length; ct++) {
i[ct] = d[ct].getID();
}
- copy1DRangeFrom(0, mType.getCount(), i);
+ copy1DRangeFromUnchecked(0, mType.getCount(), i);
}
private void validateBitmapFormat(Bitmap b) {
diff --git a/include/media/stagefright/OMXCodec.h b/include/media/stagefright/OMXCodec.h
index f8daa4f..3251c28 100644
--- a/include/media/stagefright/OMXCodec.h
+++ b/include/media/stagefright/OMXCodec.h
@@ -305,6 +305,8 @@
void restorePatchedDataPointer(BufferInfo *info);
+ status_t applyRotation();
+
OMXCodec(const OMXCodec &);
OMXCodec &operator=(const OMXCodec &);
};
diff --git a/include/media/stagefright/foundation/ADebug.h b/include/media/stagefright/foundation/ADebug.h
index eb5e494..450dcfe 100644
--- a/include/media/stagefright/foundation/ADebug.h
+++ b/include/media/stagefright/foundation/ADebug.h
@@ -75,7 +75,10 @@
#define CHECK_GE(x,y) CHECK_OP(x,y,GE,>=)
#define CHECK_GT(x,y) CHECK_OP(x,y,GT,>)
-#define TRESPASS() LOG_ALWAYS_FATAL("Should not be here.")
+#define TRESPASS() \
+ LOG_ALWAYS_FATAL( \
+ __FILE__ ":" LITERAL_TO_STRING(__LINE__) \
+ " Should not be here.");
} // namespace android
diff --git a/libs/rs/rsScriptC.cpp b/libs/rs/rsScriptC.cpp
index 1fceb66..eecfa16 100644
--- a/libs/rs/rsScriptC.cpp
+++ b/libs/rs/rsScriptC.cpp
@@ -475,7 +475,10 @@
s->mEnviroment.mIsThreadable = true;
- bccRegisterSymbolCallback(s->mBccScript, symbolLookup, s);
+ if (bccRegisterSymbolCallback(s->mBccScript, symbolLookup, s) != 0) {
+ LOGE("bcc: FAILS to register symbol callback");
+ return false;
+ }
if (bccReadBC(s->mBccScript,
resName,
diff --git a/media/java/android/media/videoeditor/MediaArtistNativeHelper.java b/media/java/android/media/videoeditor/MediaArtistNativeHelper.java
index c3862e2..122ad4e 100755
--- a/media/java/android/media/videoeditor/MediaArtistNativeHelper.java
+++ b/media/java/android/media/videoeditor/MediaArtistNativeHelper.java
@@ -1814,9 +1814,10 @@
private void onProgressUpdate(int taskId, int progress) {
if (mProcessingState == PROCESSING_EXPORT) {
if (mExportProgressListener != null) {
- if ((progress % 2) == 0) {
- mProgressToApp++;
- mExportProgressListener.onProgress(mVideoEditor, mOutputFilename, mProgressToApp);
+ if (mProgressToApp < progress) {
+ mExportProgressListener.onProgress(mVideoEditor, mOutputFilename, progress);
+ /* record previous progress */
+ mProgressToApp = progress;
}
}
}
diff --git a/media/java/android/media/videoeditor/VideoEditorImpl.java b/media/java/android/media/videoeditor/VideoEditorImpl.java
index 71c2624..885daf2 100755
--- a/media/java/android/media/videoeditor/VideoEditorImpl.java
+++ b/media/java/android/media/videoeditor/VideoEditorImpl.java
@@ -1776,7 +1776,7 @@
*/
int height = 480;
int width = 854;
- switch (getAspectRatio()) {
+ switch (mI.getAspectRatio()) {
case MediaProperties.ASPECT_RATIO_3_2:
width = 720;
break;
diff --git a/media/jni/android_media_MediaMetadataRetriever.cpp b/media/jni/android_media_MediaMetadataRetriever.cpp
index ec88bb2..3d7dbf9 100644
--- a/media/jni/android_media_MediaMetadataRetriever.cpp
+++ b/media/jni/android_media_MediaMetadataRetriever.cpp
@@ -22,9 +22,6 @@
#include <utils/Log.h>
#include <utils/threads.h>
#include <core/SkBitmap.h>
-#include <core/SkCanvas.h>
-#include <core/SkDevice.h>
-#include <core/SkScalar.h>
#include <media/mediametadataretriever.h>
#include <private/media/VideoFrame.h>
@@ -136,6 +133,61 @@
process_media_retriever_call(env, retriever->setDataSource(fd, offset, length), "java/lang/RuntimeException", "setDataSource failed");
}
+template<typename T>
+static void rotate0(T* dst, const T* src, size_t width, size_t height)
+{
+ memcpy(dst, src, width * height * sizeof(T));
+}
+
+template<typename T>
+static void rotate90(T* dst, const T* src, size_t width, size_t height)
+{
+ for (size_t i = 0; i < height; ++i) {
+ for (size_t j = 0; j < width; ++j) {
+ dst[j * height + height - 1 - i] = src[i * width + j];
+ }
+ }
+}
+
+template<typename T>
+static void rotate180(T* dst, const T* src, size_t width, size_t height)
+{
+ for (size_t i = 0; i < height; ++i) {
+ for (size_t j = 0; j < width; ++j) {
+ dst[(height - 1 - i) * width + width - 1 - j] = src[i * width + j];
+ }
+ }
+}
+
+template<typename T>
+static void rotate270(T* dst, const T* src, size_t width, size_t height)
+{
+ for (size_t i = 0; i < height; ++i) {
+ for (size_t j = 0; j < width; ++j) {
+ dst[(width - 1 - j) * height + i] = src[i * width + j];
+ }
+ }
+}
+
+template<typename T>
+static void rotate(T *dst, const T *src, size_t width, size_t height, int angle)
+{
+ switch (angle) {
+ case 0:
+ rotate0(dst, src, width, height);
+ break;
+ case 90:
+ rotate90(dst, src, width, height);
+ break;
+ case 180:
+ rotate180(dst, src, width, height);
+ break;
+ case 270:
+ rotate270(dst, src, width, height);
+ break;
+ }
+}
+
static jobject android_media_MediaMetadataRetriever_getFrameAtTime(JNIEnv *env, jobject thiz, jlong timeUs, jint option)
{
LOGV("getFrameAtTime: %lld us option: %d", timeUs, option);
@@ -166,30 +218,33 @@
fields.createConfigMethod,
SkBitmap::kRGB_565_Config);
+ size_t width, height;
+ if (videoFrame->mRotationAngle == 90 || videoFrame->mRotationAngle == 270) {
+ width = videoFrame->mDisplayHeight;
+ height = videoFrame->mDisplayWidth;
+ } else {
+ width = videoFrame->mDisplayWidth;
+ height = videoFrame->mDisplayHeight;
+ }
+
jobject jBitmap = env->CallStaticObjectMethod(
fields.bitmapClazz,
fields.createBitmapMethod,
- videoFrame->mDisplayWidth,
- videoFrame->mDisplayHeight,
+ width,
+ height,
config);
+
SkBitmap *bitmap =
(SkBitmap *) env->GetIntField(jBitmap, fields.nativeBitmap);
bitmap->lockPixels();
-
- memcpy((uint8_t*)bitmap->getPixels(),
- (uint8_t*)videoFrame + sizeof(VideoFrame), videoFrame->mSize);
-
+ rotate((uint16_t*)bitmap->getPixels(),
+ (uint16_t*)((char*)videoFrame + sizeof(VideoFrame)),
+ videoFrame->mDisplayWidth,
+ videoFrame->mDisplayHeight,
+ videoFrame->mRotationAngle);
bitmap->unlockPixels();
- if (videoFrame->mRotationAngle != 0) {
- SkDevice device(*bitmap);
- SkCanvas canvas(&device);
- canvas.rotate((SkScalar) (videoFrame->mRotationAngle * 1.0));
- canvas.drawBitmap(*bitmap, 0, 0);
- }
-
- LOGV("Return a new bitmap constructed with the rotation matrix");
return jBitmap;
}
@@ -288,22 +343,6 @@
jniThrowException(env, "java/lang/RuntimeException", "Can't find android/graphics/Bitmap");
return;
}
-#if USE_PRIVATE_NATIVE_BITMAP_CONSTUCTOR
- fields.bitmapConstructor = env->GetMethodID(fields.bitmapClazz, "<init>", "(I[BZ[BI)V");
- if (fields.bitmapConstructor == NULL) {
- jniThrowException(env, "java/lang/RuntimeException", "Can't find Bitmap constructor");
- return;
- }
- fields.createBitmapRotationMethod =
- env->GetStaticMethodID(fields.bitmapClazz, "createBitmap",
- "(Landroid/graphics/Bitmap;IIIILandroid/graphics/Matrix;Z)"
- "Landroid/graphics/Bitmap;");
- if (fields.createBitmapRotationMethod == NULL) {
- jniThrowException(env, "java/lang/RuntimeException",
- "Can't find Bitmap.createBitmap method");
- return;
- }
-#else
fields.createBitmapMethod =
env->GetStaticMethodID(fields.bitmapClazz, "createBitmap",
"(IILandroid/graphics/Bitmap$Config;)"
@@ -333,7 +372,6 @@
"Can't find Bitmap$Config.nativeToConfig(int) method");
return;
}
-#endif
}
static void android_media_MediaMetadataRetriever_native_setup(JNIEnv *env, jobject thiz)
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
index 93e5c14..369a3a8 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
@@ -40,9 +40,9 @@
mAnchorTimeRealUs(-1),
mFlushingAudio(false),
mFlushingVideo(false),
- mHasAudio(mAudioSink != NULL),
- mHasVideo(true),
- mSyncQueues(mHasAudio && mHasVideo),
+ mHasAudio(false),
+ mHasVideo(false),
+ mSyncQueues(false),
mPaused(false) {
}
@@ -360,6 +360,12 @@
int32_t audio;
CHECK(msg->findInt32("audio", &audio));
+ if (audio) {
+ mHasAudio = true;
+ } else {
+ mHasVideo = true;
+ }
+
if (dropBufferWhileFlushing(audio, msg)) {
return;
}
diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp
index 11ac56c..89b3dab 100644
--- a/media/libstagefright/AwesomePlayer.cpp
+++ b/media/libstagefright/AwesomePlayer.cpp
@@ -378,14 +378,11 @@
}
void AwesomePlayer::reset() {
- LOGI("reset");
-
Mutex::Autolock autoLock(mLock);
reset_l();
}
void AwesomePlayer::reset_l() {
- LOGI("reset_l");
mDisplayWidth = 0;
mDisplayHeight = 0;
@@ -411,10 +408,6 @@
}
}
- if (mFlags & PREPARING) {
- LOGI("waiting until preparation is completes.");
- }
-
while (mFlags & PREPARING) {
mPreparedCondition.wait(mLock);
}
@@ -438,8 +431,6 @@
}
mAudioSource.clear();
- LOGI("audio source cleared");
-
mTimeSource = NULL;
delete mAudioPlayer;
@@ -480,8 +471,6 @@
IPCThreadState::self()->flushCommands();
}
- LOGI("video source cleared");
-
mDurationUs = -1;
mFlags = 0;
mExtractorFlags = 0;
@@ -498,8 +487,6 @@
mFileSource.clear();
mBitrate = -1;
-
- LOGI("reset_l completed");
}
void AwesomePlayer::notifyListener_l(int msg, int ext1, int ext2) {
diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp
index d842f65..94694a3 100644
--- a/media/libstagefright/OMXCodec.cpp
+++ b/media/libstagefright/OMXCodec.cpp
@@ -1680,6 +1680,33 @@
return OK;
}
+status_t OMXCodec::applyRotation() {
+ sp<MetaData> meta = mSource->getFormat();
+
+ int32_t rotationDegrees;
+ if (!meta->findInt32(kKeyRotation, &rotationDegrees)) {
+ rotationDegrees = 0;
+ }
+
+ uint32_t transform;
+ switch (rotationDegrees) {
+ case 0: transform = 0; break;
+ case 90: transform = HAL_TRANSFORM_ROT_90; break;
+ case 180: transform = HAL_TRANSFORM_ROT_180; break;
+ case 270: transform = HAL_TRANSFORM_ROT_270; break;
+ default: transform = 0; break;
+ }
+
+ status_t err = OK;
+
+ if (transform) {
+ err = native_window_set_buffers_transform(
+ mNativeWindow.get(), transform);
+ }
+
+ return err;
+}
+
status_t OMXCodec::allocateOutputBuffersFromNativeWindow() {
// Get the number of buffers needed.
OMX_PARAM_PORTDEFINITIONTYPE def;
@@ -1713,6 +1740,11 @@
return err;
}
+ err = applyRotation();
+ if (err != OK) {
+ return err;
+ }
+
// Set up the native window.
// XXX TODO: Get the gralloc usage flags from the OMX plugin!
err = native_window_set_usage(
diff --git a/media/libstagefright/httplive/LiveSession.cpp b/media/libstagefright/httplive/LiveSession.cpp
index f20a4cb..c6c36e3 100644
--- a/media/libstagefright/httplive/LiveSession.cpp
+++ b/media/libstagefright/httplive/LiveSession.cpp
@@ -506,8 +506,21 @@
LOGE("This doesn't look like a transport stream...");
- mDataSource->queueEOS(ERROR_UNSUPPORTED);
- return;
+ mBandwidthItems.removeAt(bandwidthIndex);
+
+ if (mBandwidthItems.isEmpty()) {
+ mDataSource->queueEOS(ERROR_UNSUPPORTED);
+ return;
+ }
+
+ LOGI("Retrying with a different bandwidth stream.");
+
+ mLastPlaylistFetchTimeUs = -1;
+ bandwidthIndex = getBandwidthIndex();
+ mPrevBandwidthIndex = bandwidthIndex;
+ mSeqNumber = -1;
+
+ goto rinse_repeat;
}
if ((size_t)mPrevBandwidthIndex != bandwidthIndex) {
diff --git a/media/libstagefright/mpeg2ts/ATSParser.cpp b/media/libstagefright/mpeg2ts/ATSParser.cpp
index d8ab080..4335b99 100644
--- a/media/libstagefright/mpeg2ts/ATSParser.cpp
+++ b/media/libstagefright/mpeg2ts/ATSParser.cpp
@@ -75,6 +75,10 @@
struct ATSParser::Stream : public RefBase {
Stream(Program *program, unsigned elementaryPID, unsigned streamType);
+ unsigned type() const { return mStreamType; }
+ unsigned pid() const { return mElementaryPID; }
+ void setPID(unsigned pid) { mElementaryPID = pid; }
+
void parse(
unsigned payload_unit_start_indicator,
ABitReader *br);
@@ -95,6 +99,7 @@
sp<ABuffer> mBuffer;
sp<AnotherPacketSource> mSource;
bool mPayloadStarted;
+ DiscontinuityType mPendingDiscontinuity;
ElementaryStreamQueue mQueue;
@@ -107,6 +112,8 @@
void extractAACFrames(const sp<ABuffer> &buffer);
+ void deferDiscontinuity(DiscontinuityType type);
+
DISALLOW_EVIL_CONSTRUCTORS(Stream);
};
@@ -155,6 +162,11 @@
}
}
+struct StreamInfo {
+ unsigned mType;
+ unsigned mPID;
+};
+
void ATSParser::Program::parseProgramMap(ABitReader *br) {
unsigned table_id = br->getBits(8);
LOGV(" table_id = %u", table_id);
@@ -188,6 +200,8 @@
br->skipBits(program_info_length * 8); // skip descriptors
+ Vector<StreamInfo> infos;
+
// infoBytesRemaining is the number of bytes that make up the
// variable length section of ES_infos. It does not include the
// final CRC.
@@ -231,24 +245,48 @@
CHECK_EQ(info_bytes_remaining, 0u);
#endif
- ssize_t index = mStreams.indexOfKey(elementaryPID);
-#if 0 // XXX revisit
- CHECK_LT(index, 0);
- mStreams.add(elementaryPID,
- new Stream(this, elementaryPID, streamType));
-#else
- if (index < 0) {
- mStreams.add(elementaryPID,
- new Stream(this, elementaryPID, streamType));
- }
-#endif
+ StreamInfo info;
+ info.mType = streamType;
+ info.mPID = elementaryPID;
+ infos.push(info);
infoBytesRemaining -= 5 + ES_info_length;
}
CHECK_EQ(infoBytesRemaining, 0u);
-
MY_LOGV(" CRC = 0x%08x", br->getBits(32));
+
+ bool PIDsChanged = false;
+ for (size_t i = 0; i < infos.size(); ++i) {
+ StreamInfo &info = infos.editItemAt(i);
+
+ ssize_t index = mStreams.indexOfKey(info.mPID);
+
+ if (index >= 0 && mStreams.editValueAt(index)->type() != info.mType) {
+ LOGI("uh oh. stream PIDs have changed.");
+ PIDsChanged = true;
+ break;
+ }
+ }
+
+ if (PIDsChanged) {
+ mStreams.clear();
+ }
+
+ for (size_t i = 0; i < infos.size(); ++i) {
+ StreamInfo &info = infos.editItemAt(i);
+
+ ssize_t index = mStreams.indexOfKey(info.mPID);
+
+ if (index < 0) {
+ sp<Stream> stream = new Stream(this, info.mPID, info.mType);
+ mStreams.add(info.mPID, stream);
+
+ if (PIDsChanged) {
+ stream->signalDiscontinuity(DISCONTINUITY_FORMATCHANGE);
+ }
+ }
+ }
}
sp<MediaSource> ATSParser::Program::getSource(SourceType type) {
@@ -290,6 +328,7 @@
mStreamType(streamType),
mBuffer(new ABuffer(192 * 1024)),
mPayloadStarted(false),
+ mPendingDiscontinuity(DISCONTINUITY_NONE),
mQueue(streamType == 0x1b
? ElementaryStreamQueue::H264 : ElementaryStreamQueue::AAC) {
mBuffer->setRange(0, 0);
@@ -336,9 +375,13 @@
{
mQueue.clear(true);
- if (mStreamType == 0x1b && mSource != NULL) {
+ if (mStreamType == 0x1b) {
// Don't signal discontinuities on audio streams.
- mSource->queueDiscontinuity(type);
+ if (mSource != NULL) {
+ mSource->queueDiscontinuity(type);
+ } else {
+ deferDiscontinuity(type);
+ }
}
break;
}
@@ -352,6 +395,8 @@
if (mSource != NULL) {
mSource->queueDiscontinuity(type);
+ } else {
+ deferDiscontinuity(type);
}
break;
}
@@ -362,6 +407,13 @@
}
}
+void ATSParser::Stream::deferDiscontinuity(DiscontinuityType type) {
+ if (type > mPendingDiscontinuity) {
+ // Only upgrade discontinuities.
+ mPendingDiscontinuity = type;
+ }
+}
+
void ATSParser::Stream::signalEOS(status_t finalResult) {
if (mSource != NULL) {
mSource->signalEOS(finalResult);
@@ -558,6 +610,11 @@
LOGV("created source!");
mSource = new AnotherPacketSource(meta);
+ if (mPendingDiscontinuity != DISCONTINUITY_NONE) {
+ mSource->queueDiscontinuity(mPendingDiscontinuity);
+ mPendingDiscontinuity = DISCONTINUITY_NONE;
+ }
+
mSource->queueAccessUnit(accessUnit);
}
} else if (mQueue.getFormat() != NULL) {
diff --git a/media/libstagefright/mpeg2ts/ATSParser.h b/media/libstagefright/mpeg2ts/ATSParser.h
index fe31981..ec3be84 100644
--- a/media/libstagefright/mpeg2ts/ATSParser.h
+++ b/media/libstagefright/mpeg2ts/ATSParser.h
@@ -33,6 +33,7 @@
struct ATSParser : public RefBase {
enum DiscontinuityType {
+ DISCONTINUITY_NONE,
DISCONTINUITY_HTTPLIVE,
DISCONTINUITY_SEEK,
DISCONTINUITY_FORMATCHANGE
diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml
index 5981139..27c8aea 100644
--- a/packages/SettingsProvider/res/values/defaults.xml
+++ b/packages/SettingsProvider/res/values/defaults.xml
@@ -71,6 +71,9 @@
<string name="def_lock_sound" translatable="false">/system/media/audio/ui/Lock.ogg</string>
<string name="def_unlock_sound" translatable="false">/system/media/audio/ui/Unlock.ogg</string>
+ <!-- Notifications use ringer volume -->
+ <bool name="def_notifications_use_ring_volume">true</bool>
+
<!-- Default for Settings.System.VIBRATE_IN_SILENT -->
<bool name="def_vibrate_in_silent">true</bool>
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
index bc7473e..580113c 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
@@ -1168,6 +1168,11 @@
loadBooleanSetting(stmt, Settings.System.USE_PTP_INTERFACE,
R.bool.def_use_ptp_interface);
+
+ // Set notification volume to follow ringer volume by default
+ loadBooleanSetting(stmt, Settings.System.NOTIFICATIONS_USE_RING_VOLUME,
+ R.bool.def_notifications_use_ring_volume);
+
} finally {
if (stmt != null) stmt.close();
}
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_ime_default.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_ime_default.png
index 056e7e7..eb6eb0c 100644
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_ime_default.png
+++ b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_ime_default.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_ime_pressed.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_ime_pressed.png
index e6f2f34..11f66f5 100644
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_ime_pressed.png
+++ b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_ime_pressed.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_ime_default.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_ime_default.png
index e1d53bd..f907de7 100644
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_ime_default.png
+++ b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_ime_default.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_ime_pressed.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_ime_pressed.png
index 993ea55..36f8853 100644
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_ime_pressed.png
+++ b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_ime_pressed.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_menu_default.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_menu_default.png
index 91bc4ee..2490cdf 100644
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_menu_default.png
+++ b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_menu_default.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_menu_pressed.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_menu_pressed.png
index aa64de4..1affd8f 100644
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_menu_pressed.png
+++ b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_menu_pressed.png
Binary files differ
diff --git a/preloaded-classes b/preloaded-classes
index 6d5144f..ca2e6ed 100644
--- a/preloaded-classes
+++ b/preloaded-classes
@@ -7,11 +7,33 @@
android.accounts.Account$1
android.accounts.AccountManager
android.accounts.AccountManager$12
+android.accounts.AccountManagerFuture
android.accounts.IAccountManager
android.accounts.IAccountManager$Stub
android.accounts.IAccountManager$Stub$Proxy
+android.accounts.IAccountManagerResponse
+android.accounts.IAccountManagerResponse$Stub
+android.animation.Animator
+android.animation.Animator$AnimatorListener
+android.animation.FloatEvaluator
+android.animation.IntEvaluator
+android.animation.LayoutTransition$TransitionListener
+android.animation.PropertyValuesHolder
+android.animation.TimeInterpolator
+android.animation.TypeEvaluator
+android.animation.ValueAnimator
+android.animation.ValueAnimator$1
+android.animation.ValueAnimator$2
+android.animation.ValueAnimator$3
+android.animation.ValueAnimator$4
+android.animation.ValueAnimator$5
+android.app.ActionBar
+android.app.ActionBar$LayoutParams
android.app.Activity
+android.app.Activity$NonConfigurationInstances
+android.app.ActivityManager
android.app.ActivityManagerNative
+android.app.ActivityManagerNative$1
android.app.ActivityManagerProxy
android.app.ActivityThread
android.app.ActivityThread$1
@@ -19,6 +41,7 @@
android.app.ActivityThread$ActivityClientRecord
android.app.ActivityThread$AppBindData
android.app.ActivityThread$ApplicationThread
+android.app.ActivityThread$BindServiceData
android.app.ActivityThread$ContextCleanupInfo
android.app.ActivityThread$CreateServiceData
android.app.ActivityThread$GcIdler
@@ -31,35 +54,66 @@
android.app.ActivityThread$ServiceArgsData
android.app.ActivityThread$StopInfo
android.app.AlertDialog
+android.app.AlertDialog$Builder
android.app.AppGlobals
android.app.Application
android.app.ApplicationErrorReport$CrashInfo
android.app.ApplicationLoaders
+android.app.ApplicationPackageManager
+android.app.ApplicationPackageManager$ResourceName
android.app.ApplicationThreadNative
+android.app.BackStackRecord
android.app.ContextImpl
+android.app.ContextImpl$1
+android.app.ContextImpl$10
+android.app.ContextImpl$11
+android.app.ContextImpl$12
+android.app.ContextImpl$13
+android.app.ContextImpl$14
+android.app.ContextImpl$15
+android.app.ContextImpl$16
+android.app.ContextImpl$17
+android.app.ContextImpl$18
+android.app.ContextImpl$19
+android.app.ContextImpl$2
+android.app.ContextImpl$20
+android.app.ContextImpl$21
+android.app.ContextImpl$22
+android.app.ContextImpl$23
+android.app.ContextImpl$24
+android.app.ContextImpl$25
+android.app.ContextImpl$26
+android.app.ContextImpl$27
+android.app.ContextImpl$28
+android.app.ContextImpl$29
+android.app.ContextImpl$3
+android.app.ContextImpl$4
+android.app.ContextImpl$5
+android.app.ContextImpl$6
+android.app.ContextImpl$7
+android.app.ContextImpl$8
+android.app.ContextImpl$9
android.app.ContextImpl$ApplicationContentResolver
-android.app.ContextImpl$ApplicationPackageManager
-android.app.ContextImpl$ApplicationPackageManager$ResourceName
-android.app.ContextImpl$SharedPreferencesImpl
-android.app.ContextImpl$SharedPreferencesImpl$1
-android.app.ContextImpl$SharedPreferencesImpl$EditorImpl
-android.app.ContextImpl$SharedPreferencesImpl$EditorImpl$1
-android.app.ContextImpl$SharedPreferencesImpl$EditorImpl$2
-android.app.ContextImpl$SharedPreferencesImpl$MemoryCommitResult
+android.app.ContextImpl$ServiceFetcher
+android.app.ContextImpl$StaticServiceFetcher
android.app.Dialog
android.app.Dialog$1
android.app.Dialog$ListenersHandler
+android.app.Fragment
+android.app.FragmentManager
+android.app.FragmentManager$BackStackEntry
+android.app.FragmentManagerImpl
+android.app.FragmentManagerImpl$1
+android.app.FragmentTransaction
android.app.IActivityManager
android.app.IActivityManager$ContentProviderHolder
android.app.IActivityManager$ContentProviderHolder$1
+android.app.IAlarmManager
+android.app.IAlarmManager$Stub
+android.app.IAlarmManager$Stub$Proxy
android.app.IApplicationThread
android.app.IInstrumentationWatcher
android.app.IInstrumentationWatcher$Stub
-android.app.INotificationManager
-android.app.INotificationManager$Stub
-android.app.INotificationManager$Stub$Proxy
-android.app.ITransientNotification
-android.app.ITransientNotification$Stub
android.app.Instrumentation
android.app.IntentReceiverLeaked
android.app.ListActivity
@@ -67,20 +121,22 @@
android.app.LoadedApk$ReceiverDispatcher
android.app.LoadedApk$ReceiverDispatcher$Args
android.app.LoadedApk$ReceiverDispatcher$InnerReceiver
-android.app.LoadedApk$ServiceDispatcher$ConnectionInfo
-android.app.LoadedApk$ServiceDispatcher$DeathMonitor
-android.app.LoadedApk$ServiceDispatcher$RunConnection
android.app.LoadedApk$WarningContextClassLoader
android.app.NativeActivity
-android.app.NotificationManager
android.app.PendingIntent
android.app.PendingIntent$1
android.app.QueuedWork
android.app.ReceiverRestrictedContext
android.app.ResultInfo
android.app.ResultInfo$1
-android.app.SearchDialog
android.app.Service
+android.app.SharedPreferencesImpl
+android.app.SharedPreferencesImpl$1
+android.app.SharedPreferencesImpl$2
+android.app.SharedPreferencesImpl$EditorImpl
+android.app.SharedPreferencesImpl$EditorImpl$1
+android.app.SharedPreferencesImpl$EditorImpl$2
+android.app.SharedPreferencesImpl$MemoryCommitResult
android.app.backup.BackupDataInput
android.app.backup.BackupDataInput$EntityHeader
android.app.backup.BackupDataOutput
@@ -94,8 +150,8 @@
android.bluetooth.IBluetooth$Stub
android.bluetooth.IBluetoothA2dp
android.bluetooth.IBluetoothA2dp$Stub
-android.bluetooth.ScoSocket
android.content.BroadcastReceiver
+android.content.BroadcastReceiver$PendingResult
android.content.ComponentCallbacks
android.content.ComponentName
android.content.ComponentName$1
@@ -179,7 +235,6 @@
android.content.res.Resources$1
android.content.res.Resources$Theme
android.content.res.StringBlock
-android.content.res.StringBlock$StyleIDs
android.content.res.TypedArray
android.content.res.XmlBlock
android.content.res.XmlBlock$Parser
@@ -202,8 +257,9 @@
android.database.CursorWrapper
android.database.DataSetObservable
android.database.DataSetObserver
+android.database.DatabaseErrorHandler
android.database.DatabaseUtils
-android.database.DatabaseUtils$InsertHelper
+android.database.DefaultDatabaseErrorHandler
android.database.IBulkCursor
android.database.IContentObserver
android.database.IContentObserver$Stub
@@ -214,7 +270,8 @@
android.database.sqlite.SQLiteCursor
android.database.sqlite.SQLiteCursorDriver
android.database.sqlite.SQLiteDatabase
-android.database.sqlite.SQLiteDatabase$ActiveDatabases
+android.database.sqlite.SQLiteDatabase$1
+android.database.sqlite.SQLiteDatabase$CustomFunction
android.database.sqlite.SQLiteDebug
android.database.sqlite.SQLiteDebug$DbStats
android.database.sqlite.SQLiteDebug$PagerStats
@@ -237,13 +294,16 @@
android.graphics.AvoidXfermode
android.graphics.Bitmap
android.graphics.Bitmap$1
+android.graphics.Bitmap$BitmapFinalizer
android.graphics.Bitmap$Config
android.graphics.BitmapFactory
android.graphics.BitmapFactory$Options
+android.graphics.BitmapRegionDecoder
android.graphics.BitmapShader
android.graphics.BlurMaskFilter
android.graphics.Camera
android.graphics.Canvas
+android.graphics.Canvas$CanvasFinalizer
android.graphics.Canvas$EdgeType
android.graphics.Color
android.graphics.ColorFilter
@@ -294,13 +354,14 @@
android.graphics.RectF$1
android.graphics.Region
android.graphics.Region$1
+android.graphics.Region$Op
android.graphics.RegionIterator
android.graphics.Shader
android.graphics.Shader$TileMode
android.graphics.SumPathEffect
+android.graphics.SurfaceTexture
android.graphics.SweepGradient
android.graphics.TableMaskFilter
-android.graphics.TemporaryBuffer
android.graphics.Typeface
android.graphics.Xfermode
android.graphics.YuvImage
@@ -319,6 +380,7 @@
android.graphics.drawable.Drawable$Callback
android.graphics.drawable.Drawable$ConstantState
android.graphics.drawable.DrawableContainer
+android.graphics.drawable.DrawableContainer$1
android.graphics.drawable.DrawableContainer$DrawableContainerState
android.graphics.drawable.GradientDrawable
android.graphics.drawable.GradientDrawable$GradientState
@@ -328,29 +390,24 @@
android.graphics.drawable.LayerDrawable$LayerState
android.graphics.drawable.NinePatchDrawable
android.graphics.drawable.NinePatchDrawable$NinePatchState
-android.graphics.drawable.ShapeDrawable
-android.graphics.drawable.ShapeDrawable$ShapeState
+android.graphics.drawable.RotateDrawable
+android.graphics.drawable.RotateDrawable$RotateState
android.graphics.drawable.StateListDrawable
android.graphics.drawable.StateListDrawable$StateListState
android.graphics.drawable.TransitionDrawable
android.graphics.drawable.TransitionDrawable$TransitionState
-android.graphics.drawable.shapes.RectShape
-android.graphics.drawable.shapes.RoundRectShape
-android.graphics.drawable.shapes.Shape
-android.graphics.utils.BoundaryPatch
android.hardware.Camera
android.hardware.Camera$CameraInfo
android.hardware.SensorManager
android.inputmethodservice.ExtractEditText
-android.inputmethodservice.InputMethodService
android.location.GpsSatellite
android.location.GpsStatus
android.location.GpsStatus$1
android.location.ILocationManager
android.location.ILocationManager$Stub
android.location.ILocationManager$Stub$Proxy
+android.location.Location
android.location.LocationManager
-android.media.AmrInputStream
android.media.AudioFormat
android.media.AudioManager
android.media.AudioManager$1
@@ -361,19 +418,10 @@
android.media.AudioTrack
android.media.CamcorderProfile
android.media.DecoderCapabilities
-android.media.ExifInterface
android.media.IAudioFocusDispatcher
android.media.IAudioFocusDispatcher$Stub
-android.media.IAudioService
-android.media.IAudioService$Stub
-android.media.IAudioService$Stub$Proxy
android.media.JetPlayer
android.media.MediaPlayer
-android.media.MediaPlayer$OnCompletionListener
-android.media.MediaPlayer$OnErrorListener
-android.media.MediaPlayer$OnPreparedListener
-android.media.MediaScanner
-android.media.SoundPool
android.media.ToneGenerator
android.net.ConnectivityManager
android.net.Credentials
@@ -392,6 +440,9 @@
android.net.NetworkInfo$DetailedState
android.net.NetworkInfo$State
android.net.NetworkUtils
+android.net.Proxy
+android.net.ProxyProperties
+android.net.ProxyProperties$1
android.net.TrafficStats
android.net.Uri
android.net.Uri$1
@@ -399,19 +450,15 @@
android.net.Uri$AbstractPart
android.net.Uri$Builder
android.net.Uri$HierarchicalUri
-android.net.Uri$OpaqueUri
android.net.Uri$Part
android.net.Uri$Part$EmptyPart
android.net.Uri$PathPart
android.net.Uri$PathSegments
android.net.Uri$PathSegmentsBuilder
android.net.Uri$StringUri
-android.net.WebAddress
-android.net.http.AndroidHttpClient
-android.net.http.AndroidHttpClient$1
-android.net.http.EventHandler
-android.net.http.HttpsConnection
android.net.wifi.WifiNative
+android.nfc.NdefMessage
+android.nfc.NdefRecord
android.opengl.ETC1
android.opengl.GLES10
android.opengl.GLES10Ext
@@ -422,7 +469,14 @@
android.opengl.Matrix
android.opengl.Visibility
android.os.AsyncTask$1
+android.os.AsyncTask$2
+android.os.AsyncTask$3
android.os.AsyncTask$AsyncTaskResult
+android.os.AsyncTask$InternalHandler
+android.os.AsyncTask$SerialExecutor
+android.os.AsyncTask$SerialExecutor$1
+android.os.AsyncTask$Status
+android.os.AsyncTask$WorkerRunnable
android.os.Binder
android.os.BinderProxy
android.os.Build
@@ -471,12 +525,26 @@
android.os.StrictMode
android.os.StrictMode$1
android.os.StrictMode$2
+android.os.StrictMode$3
+android.os.StrictMode$4
+android.os.StrictMode$5
+android.os.StrictMode$6
+android.os.StrictMode$7
+android.os.StrictMode$8
android.os.StrictMode$AndroidBlockGuardPolicy
android.os.StrictMode$AndroidBlockGuardPolicy$1
+android.os.StrictMode$AndroidCloseGuardReporter
+android.os.StrictMode$InstanceCountViolation
android.os.StrictMode$LogStackTrace
+android.os.StrictMode$Span
android.os.StrictMode$StrictModeDiskReadViolation
android.os.StrictMode$StrictModeDiskWriteViolation
+android.os.StrictMode$StrictModeViolation
+android.os.StrictMode$ThreadPolicy
+android.os.StrictMode$ThreadSpanState
android.os.StrictMode$ViolationInfo
+android.os.StrictMode$VmPolicy
+android.os.StrictMode$VmPolicy$Builder
android.os.SystemClock
android.os.SystemProperties
android.os.UEventObserver
@@ -494,7 +562,6 @@
android.server.BluetoothA2dpService
android.server.BluetoothEventLoop
android.server.BluetoothService
-android.telephony.PhoneNumberUtils
android.telephony.TelephonyManager
android.text.AndroidBidi
android.text.AndroidCharacter
@@ -513,6 +580,7 @@
android.text.Layout
android.text.Layout$Alignment
android.text.Layout$Directions
+android.text.MeasuredText
android.text.NoCopySpan
android.text.NoCopySpan$Concrete
android.text.PackedIntVector
@@ -530,7 +598,7 @@
android.text.Spanned
android.text.SpannedString
android.text.StaticLayout
-android.text.Styled
+android.text.TextLine
android.text.TextPaint
android.text.TextUtils
android.text.TextUtils$1
@@ -540,32 +608,32 @@
android.text.format.Time
android.text.method.ArrowKeyMovementMethod
android.text.method.BaseKeyListener
+android.text.method.BaseMovementMethod
android.text.method.KeyListener
android.text.method.MetaKeyKeyListener
android.text.method.MovementMethod
-android.text.method.QwertyKeyListener
android.text.method.ReplacementTransformationMethod
+android.text.method.ReplacementTransformationMethod$ReplacementCharSequence
+android.text.method.ReplacementTransformationMethod$SpannedReplacementCharSequence
android.text.method.SingleLineTransformationMethod
android.text.method.TextKeyListener
android.text.method.TextKeyListener$Capitalize
android.text.method.TransformationMethod
android.text.style.AlignmentSpan
android.text.style.CharacterStyle
-android.text.style.ClickableSpan
android.text.style.LeadingMarginSpan
android.text.style.LineBackgroundSpan
android.text.style.LineHeightSpan
android.text.style.MetricAffectingSpan
android.text.style.ParagraphStyle
android.text.style.ReplacementSpan
-android.text.style.StyleSpan
-android.text.style.URLSpan
android.text.style.UpdateAppearance
android.text.style.UpdateLayout
android.text.style.WrapTogetherSpan
android.util.AndroidException
android.util.AndroidRuntimeException
android.util.AttributeSet
+android.util.DebugUtils
android.util.DisplayMetrics
android.util.EventLog
android.util.EventLog$Event
@@ -581,7 +649,9 @@
android.util.Poolable
android.util.PoolableManager
android.util.Pools
+android.util.Singleton
android.util.SparseArray
+android.util.SparseBooleanArray
android.util.SparseIntArray
android.util.StateSet
android.util.SynchronizedPool
@@ -590,13 +660,26 @@
android.view.AbsSavedState
android.view.AbsSavedState$1
android.view.AbsSavedState$2
+android.view.ActionMode
+android.view.ActionMode$Callback
android.view.ContextMenu
android.view.ContextMenu$ContextMenuInfo
android.view.ContextThemeWrapper
android.view.Display
+android.view.FallbackEventHandler
android.view.FocusFinder
android.view.FocusFinder$1
+android.view.FocusFinder$SequentialFocusComparator
+android.view.GLES20Canvas
+android.view.GLES20Canvas$CanvasFinalizer
android.view.Gravity
+android.view.HardwareCanvas
+android.view.HardwareRenderer
+android.view.HardwareRenderer$Gl20Renderer
+android.view.HardwareRenderer$GlRenderer
+android.view.HardwareRenderer$GlRenderer$ComponentSizeChooser
+android.view.HardwareRenderer$GlRenderer$EglConfigChooser
+android.view.HardwareRenderer$HardwareDrawCallbacks
android.view.IWindow
android.view.IWindow$Stub
android.view.IWindowManager
@@ -614,15 +697,17 @@
android.view.InputQueue$Callback
android.view.InputQueue$FinishedCallback
android.view.KeyCharacterMap
-android.view.KeyCharacterMap$KeyData
+android.view.KeyCharacterMap$FallbackAction
android.view.KeyEvent
android.view.KeyEvent$1
android.view.KeyEvent$Callback
android.view.KeyEvent$DispatcherState
android.view.LayoutInflater
android.view.LayoutInflater$Factory
-android.view.LayoutInflater$Filter
+android.view.LayoutInflater$Factory2
android.view.Menu
+android.view.MenuInflater
+android.view.MenuInflater$MenuState
android.view.MenuItem
android.view.MotionEvent
android.view.MotionEvent$1
@@ -633,6 +718,10 @@
android.view.SurfaceHolder$Callback
android.view.SurfaceHolder$Callback2
android.view.SurfaceSession
+android.view.SurfaceView
+android.view.SurfaceView$1
+android.view.SurfaceView$2
+android.view.SurfaceView$3
android.view.VelocityTracker
android.view.VelocityTracker$1
android.view.VelocityTracker$Pointer
@@ -645,6 +734,8 @@
android.view.View$MeasureSpec
android.view.View$OnClickListener
android.view.View$OnCreateContextMenuListener
+android.view.View$OnFocusChangeListener
+android.view.View$OnKeyListener
android.view.View$OnLongClickListener
android.view.View$OnTouchListener
android.view.View$PerformClick
@@ -653,9 +744,10 @@
android.view.ViewConfiguration
android.view.ViewDebug
android.view.ViewGroup
+android.view.ViewGroup$3
android.view.ViewGroup$LayoutParams
android.view.ViewGroup$MarginLayoutParams
-android.view.ViewGroup$OnHierarchyChangeListener
+android.view.ViewGroup$TouchTarget
android.view.ViewManager
android.view.ViewParent
android.view.ViewRoot
@@ -664,11 +756,12 @@
android.view.ViewRoot$InputMethodCallback
android.view.ViewRoot$ResizedInfo
android.view.ViewRoot$RunQueue
+android.view.ViewRoot$RunQueue$HandlerAction
android.view.ViewRoot$TrackballAxis
android.view.ViewRoot$W
+android.view.ViewStub
android.view.ViewTreeObserver
android.view.ViewTreeObserver$InternalInsetsInfo
-android.view.ViewTreeObserver$OnGlobalFocusChangeListener
android.view.ViewTreeObserver$OnGlobalLayoutListener
android.view.ViewTreeObserver$OnPreDrawListener
android.view.ViewTreeObserver$OnScrollChangedListener
@@ -704,38 +797,36 @@
android.view.inputmethod.EditorInfo
android.view.inputmethod.EditorInfo$1
android.view.inputmethod.ExtractedText
-android.view.inputmethod.ExtractedText$1
android.view.inputmethod.ExtractedTextRequest
+android.view.inputmethod.ExtractedTextRequest$1
android.view.inputmethod.InputConnection
android.view.inputmethod.InputMethodManager
android.view.inputmethod.InputMethodManager$1
android.view.inputmethod.InputMethodManager$ControlledInputConnectionWrapper
android.view.inputmethod.InputMethodManager$H
-android.webkit.BrowserFrame
-android.webkit.GeolocationPermissions
-android.webkit.HTML5VideoViewProxy
-android.webkit.JWebCoreJavaBridge
android.webkit.LoadListener
-android.webkit.MockGeolocation
android.webkit.PluginManager
-android.webkit.WebBackForwardList
-android.webkit.WebHistoryItem
-android.webkit.WebIconDatabase
-android.webkit.WebSettings
-android.webkit.WebSettings$TextSize
-android.webkit.WebStorage
android.webkit.WebView
+android.webkit.WebView$HitTestResult
android.webkit.WebViewCore
+android.webkit.WebViewCore$TouchUpData
android.widget.AbsListView
android.widget.AbsListView$2
+android.widget.AbsListView$AdapterDataSetObserver
android.widget.AbsListView$LayoutParams
+android.widget.AbsListView$OnScrollListener
android.widget.AbsListView$RecycleBin
+android.widget.AbsListView$SavedState
+android.widget.AbsListView$SavedState$1
android.widget.AbsSpinner
-android.widget.AbsoluteLayout
+android.widget.AbsSpinner$RecycleBin
android.widget.Adapter
android.widget.AdapterView
android.widget.AdapterView$AdapterDataSetObserver
android.widget.AdapterView$OnItemClickListener
+android.widget.AdapterView$OnItemSelectedListener
+android.widget.AdapterViewAnimator
+android.widget.ArrayAdapter
android.widget.AutoCompleteTextView
android.widget.BaseAdapter
android.widget.Button
@@ -744,13 +835,14 @@
android.widget.CompoundButton
android.widget.EdgeGlow
android.widget.EditText
+android.widget.ExpandableListView
+android.widget.Filter
android.widget.Filter$FilterListener
android.widget.Filterable
android.widget.FrameLayout
android.widget.FrameLayout$LayoutParams
android.widget.Gallery
android.widget.GridView
-android.widget.HorizontalScrollView
android.widget.ImageButton
android.widget.ImageView
android.widget.ImageView$ScaleType
@@ -758,11 +850,14 @@
android.widget.LinearLayout$LayoutParams
android.widget.ListAdapter
android.widget.ListPopupWindow
+android.widget.ListPopupWindow$ListSelectorHider
+android.widget.ListPopupWindow$PopupScrollListener
+android.widget.ListPopupWindow$PopupTouchInterceptor
+android.widget.ListPopupWindow$ResizePopupRunnable
android.widget.ListView
android.widget.ListView$ArrowScrollFocusResult
-android.widget.NumberPicker
android.widget.OverScroller
-android.widget.OverScroller$MagneticOverScroller
+android.widget.OverScroller$SplineOverScroller
android.widget.PopupWindow
android.widget.PopupWindow$1
android.widget.ProgressBar
@@ -771,41 +866,33 @@
android.widget.RelativeLayout$DependencyGraph$Node
android.widget.RelativeLayout$DependencyGraph$Node$1
android.widget.RelativeLayout$LayoutParams
-android.widget.RemoteViews
-android.widget.RemoteViews$1
-android.widget.RemoteViews$Action
-android.widget.RemoteViews$ReflectionAction
+android.widget.RemoteViewsAdapter$RemoteAdapterConnectionCallback
android.widget.ScrollBarDrawable
android.widget.ScrollView
+android.widget.Scroller
android.widget.SpinnerAdapter
-android.widget.TabHost
+android.widget.Switch
android.widget.TabWidget
android.widget.TableLayout
android.widget.TableRow
android.widget.TextView
android.widget.TextView$3
-android.widget.TextView$Blink
android.widget.TextView$BufferType
android.widget.TextView$ChangeWatcher
android.widget.TextView$CharWrapper
-android.widget.TextView$CursorController
android.widget.TextView$Drawables
-android.widget.TextView$HandleView
-android.widget.TextView$InsertionPointCursorController
-android.widget.TextView$InsertionPointCursorController$1
-android.widget.TextView$SelectionModifierCursorController
-android.widget.TextView$SelectionModifierCursorController$1
-android.widget.Toast
-android.widget.Toast$TN
-android.widget.Toast$TN$1
-android.widget.Toast$TN$2
-android.widget.ViewAnimator
-android.widget.ZoomButton
-android.widget.ZoomControls
+android.widget.TextView$InputContentType
+android.widget.TextView$OnEditorActionListener
+android.widget.TextView$SavedState
+android.widget.TextView$SavedState$1
com.android.internal.R$styleable
+com.android.internal.app.ActionBarImpl
+com.android.internal.app.ActionBarImpl$1
+com.android.internal.app.ActionBarImpl$2
+com.android.internal.app.ActionBarImpl$3
+com.android.internal.app.ActionBarImpl$4
com.android.internal.app.AlertController
com.android.internal.app.AlertController$1
-com.android.internal.app.AlertController$AlertParams
com.android.internal.app.AlertController$ButtonHandler
com.android.internal.appwidget.IAppWidgetService
com.android.internal.appwidget.IAppWidgetService$Stub
@@ -828,11 +915,13 @@
com.android.internal.os.ZygoteInit$MethodAndArgsCaller
com.android.internal.policy.IPolicy
com.android.internal.policy.PolicyManager
+com.android.internal.policy.impl.PhoneFallbackEventHandler
com.android.internal.policy.impl.PhoneLayoutInflater
com.android.internal.policy.impl.PhoneWindow
com.android.internal.policy.impl.PhoneWindow$1
-com.android.internal.policy.impl.PhoneWindow$ContextMenuCallback
+com.android.internal.policy.impl.PhoneWindow$2
com.android.internal.policy.impl.PhoneWindow$DecorView
+com.android.internal.policy.impl.PhoneWindow$DialogMenuCallback
com.android.internal.policy.impl.PhoneWindow$PanelFeatureState
com.android.internal.policy.impl.PhoneWindow$PanelFeatureState$SavedState
com.android.internal.policy.impl.PhoneWindow$PanelFeatureState$SavedState$1
@@ -844,10 +933,13 @@
com.android.internal.util.ArrayUtils
com.android.internal.util.FastXmlSerializer
com.android.internal.util.XmlUtils
+com.android.internal.view.BaseIWindow
com.android.internal.view.IInputConnectionWrapper
com.android.internal.view.IInputConnectionWrapper$MyHandler
com.android.internal.view.IInputContext
com.android.internal.view.IInputContext$Stub
+com.android.internal.view.IInputContextCallback
+com.android.internal.view.IInputContextCallback$Stub
com.android.internal.view.IInputMethodCallback
com.android.internal.view.IInputMethodCallback$Stub
com.android.internal.view.IInputMethodClient
@@ -861,32 +953,32 @@
com.android.internal.view.InputBindResult
com.android.internal.view.InputBindResult$1
com.android.internal.view.RootViewSurfaceTaker
-com.android.internal.view.menu.ContextMenuBuilder
-com.android.internal.view.menu.IconMenuItemView
-com.android.internal.view.menu.IconMenuView
+com.android.internal.view.menu.ActionMenuItem
+com.android.internal.view.menu.ActionMenuView
+com.android.internal.view.menu.ActionMenuView$1
+com.android.internal.view.menu.ActionMenuView$OverflowMenuButton
com.android.internal.view.menu.MenuBuilder
com.android.internal.view.menu.MenuBuilder$Callback
+com.android.internal.view.menu.MenuBuilder$ItemInvoker
+com.android.internal.view.menu.MenuBuilder$MenuType
com.android.internal.view.menu.MenuItemImpl
-com.android.internal.view.menu.SubMenuBuilder
-com.android.internal.widget.ContactHeaderWidget
+com.android.internal.view.menu.MenuView
+com.android.internal.widget.ActionBarContainer
+com.android.internal.widget.ActionBarContextView
+com.android.internal.widget.ActionBarView
+com.android.internal.widget.ActionBarView$1
+com.android.internal.widget.ActionBarView$2
com.android.internal.widget.DialogTitle
-com.android.internal.widget.WeightedLinearLayout
com.android.server.Watchdog
com.google.android.collect.Lists
com.google.android.collect.Maps
+com.google.android.gles_jni.EGLConfigImpl
+com.google.android.gles_jni.EGLContextImpl
+com.google.android.gles_jni.EGLDisplayImpl
com.google.android.gles_jni.EGLImpl
+com.google.android.gles_jni.EGLSurfaceImpl
com.google.android.gles_jni.GLImpl
-com.ibm.icu4jni.charset.CharsetDecoderICU
-com.ibm.icu4jni.charset.CharsetEncoderICU
-com.ibm.icu4jni.charset.CharsetICU
-com.ibm.icu4jni.charset.NativeConverter
-com.ibm.icu4jni.common.ErrorCode
-com.ibm.icu4jni.text.NativeBreakIterator
-com.ibm.icu4jni.text.NativeCollation
-com.ibm.icu4jni.text.NativeDecimalFormat
-com.ibm.icu4jni.text.NativeDecimalFormat$FieldPositionIterator
-com.ibm.icu4jni.util.ICU
-com.ibm.icu4jni.util.LocaleData
+com.google.i18n.phonenumbers.PhoneNumberUtil
dalvik.system.BlockGuard
dalvik.system.BlockGuard$1
dalvik.system.BlockGuard$2
@@ -894,6 +986,9 @@
dalvik.system.BlockGuard$Policy
dalvik.system.BlockGuard$WrappedFileSystem
dalvik.system.BlockGuard$WrappedNetworkSystem
+dalvik.system.CloseGuard
+dalvik.system.CloseGuard$DefaultReporter
+dalvik.system.CloseGuard$Reporter
dalvik.system.DalvikLogHandler
dalvik.system.DalvikLogging
dalvik.system.DexFile
@@ -905,7 +1000,6 @@
dalvik.system.VMStack
dalvik.system.Zygote
java.beans.PropertyChangeEvent
-java.beans.PropertyChangeListener
java.beans.PropertyChangeSupport
java.io.BufferedInputStream
java.io.BufferedReader
@@ -929,12 +1023,7 @@
java.io.InputStream
java.io.InputStreamReader
java.io.InterruptedIOException
-java.io.ObjectInput
-java.io.ObjectInputStream
-java.io.ObjectOutput
-java.io.ObjectOutputStream
java.io.ObjectStreamClass
-java.io.ObjectStreamConstants
java.io.ObjectStreamField
java.io.OutputStream
java.io.OutputStreamWriter
@@ -955,10 +1044,10 @@
java.lang.CaseMapper
java.lang.CharSequence
java.lang.Character
-java.lang.Character$UnicodeBlock
java.lang.Class
java.lang.ClassCache
java.lang.ClassCache$EnumComparator
+java.lang.ClassCastException
java.lang.ClassLoader
java.lang.ClassLoader$SystemClassLoader
java.lang.ClassNotFoundException
@@ -968,6 +1057,7 @@
java.lang.Enum
java.lang.Error
java.lang.Exception
+java.lang.ExceptionInInitializerError
java.lang.Float
java.lang.IllegalArgumentException
java.lang.IllegalStateException
@@ -984,7 +1074,6 @@
java.lang.Math
java.lang.NoClassDefFoundError
java.lang.NoSuchMethodException
-java.lang.NullPointerException
java.lang.Number
java.lang.NumberFormatException
java.lang.Object
@@ -1011,8 +1100,6 @@
java.lang.Thread$State
java.lang.Thread$UncaughtExceptionHandler
java.lang.ThreadGroup
-java.lang.ThreadGroup$ChildrenGroupsLock
-java.lang.ThreadGroup$ChildrenThreadsLock
java.lang.ThreadLocal
java.lang.ThreadLocal$Values
java.lang.Throwable
@@ -1065,9 +1152,12 @@
java.net.NetPermission
java.net.NetworkInterface
java.net.Proxy
+java.net.Proxy$Type
+java.net.ProxySelector
+java.net.ProxySelectorImpl
java.net.Socket
-java.net.Socket$ConnectLock
java.net.SocketAddress
+java.net.SocketException
java.net.SocketImpl
java.net.SocketImplFactory
java.net.SocketOptions
@@ -1077,27 +1167,25 @@
java.net.URL
java.net.URLConnection
java.net.URLConnection$DefaultContentHandler
+java.net.URLEncoder
java.net.URLStreamHandler
-java.net.UnknownHostException
java.nio.BaseByteBuffer
java.nio.Buffer
-java.nio.BufferFactory
java.nio.ByteBuffer
java.nio.ByteOrder
java.nio.CharArrayBuffer
java.nio.CharBuffer
java.nio.CharSequenceAdapter
java.nio.DirectByteBuffer
-java.nio.DirectByteBuffer$SafeAddress
+java.nio.FileChannelImpl
+java.nio.FileChannelImpl$1
java.nio.HeapByteBuffer
-java.nio.MappedByteBuffer
-java.nio.MappedByteBufferAdapter
java.nio.NIOAccess
-java.nio.ReadOnlyDirectByteBuffer
+java.nio.NioUtils
java.nio.ReadWriteCharArrayBuffer
java.nio.ReadWriteDirectByteBuffer
java.nio.ReadWriteHeapByteBuffer
-java.nio.ShortToByteBufferAdapter
+java.nio.WriteOnlyFileChannel
java.nio.channels.ByteChannel
java.nio.channels.Channel
java.nio.channels.FileChannel
@@ -1121,6 +1209,7 @@
java.security.AccessController
java.security.BasicPermission
java.security.Guard
+java.security.Key
java.security.KeyStore
java.security.KeyStore$1
java.security.KeyStoreSpi
@@ -1147,6 +1236,7 @@
java.security.cert.TrustAnchor
java.security.cert.X509Certificate
java.security.cert.X509Extension
+java.security.spec.KeySpec
java.text.DateFormat
java.text.DateFormatSymbols
java.text.DecimalFormat
@@ -1164,6 +1254,7 @@
java.util.AbstractQueue
java.util.AbstractSequentialList
java.util.AbstractSet
+java.util.ArrayDeque
java.util.ArrayList
java.util.ArrayList$ArrayListIterator
java.util.Arrays
@@ -1175,6 +1266,7 @@
java.util.Collections$EmptyList
java.util.Collections$EmptyMap
java.util.Collections$EmptySet
+java.util.Collections$SingletonList
java.util.Collections$UnmodifiableCollection
java.util.Collections$UnmodifiableCollection$1
java.util.Collections$UnmodifiableList
@@ -1190,7 +1282,6 @@
java.util.EnumMap
java.util.EnumSet
java.util.Enumeration
-java.util.EventListener
java.util.EventObject
java.util.Formattable
java.util.Formatter
@@ -1253,8 +1344,6 @@
java.util.TreeMap$Bound$3
java.util.TreeMap$EntrySet
java.util.TreeMap$EntrySet$1
-java.util.TreeMap$KeySet
-java.util.TreeMap$KeySet$1
java.util.TreeMap$MapIterator
java.util.TreeMap$Node
java.util.TreeMap$Relation
@@ -1263,14 +1352,13 @@
java.util.Vector$1
java.util.WeakHashMap
java.util.WeakHashMap$Entry
-java.util.WeakHashMap$Entry$Type
-java.util.WeakHashMap$HashIterator
java.util.concurrent.AbstractExecutorService
java.util.concurrent.BlockingQueue
java.util.concurrent.Callable
java.util.concurrent.ConcurrentLinkedQueue
java.util.concurrent.ConcurrentLinkedQueue$Node
java.util.concurrent.CopyOnWriteArrayList
+java.util.concurrent.CopyOnWriteArrayList$CowIterator
java.util.concurrent.CountDownLatch
java.util.concurrent.CountDownLatch$Sync
java.util.concurrent.Executor
@@ -1298,7 +1386,9 @@
java.util.concurrent.TimeUnit$5
java.util.concurrent.TimeUnit$6
java.util.concurrent.TimeUnit$7
+java.util.concurrent.atomic.AtomicBoolean
java.util.concurrent.atomic.AtomicInteger
+java.util.concurrent.atomic.AtomicReference
java.util.concurrent.atomic.UnsafeAccess
java.util.concurrent.locks.AbstractOwnableSynchronizer
java.util.concurrent.locks.AbstractQueuedSynchronizer
@@ -1307,10 +1397,16 @@
java.util.concurrent.locks.Condition
java.util.concurrent.locks.Lock
java.util.concurrent.locks.LockSupport
+java.util.concurrent.locks.ReadWriteLock
java.util.concurrent.locks.ReentrantLock
java.util.concurrent.locks.ReentrantLock$FairSync
java.util.concurrent.locks.ReentrantLock$NonfairSync
java.util.concurrent.locks.ReentrantLock$Sync
+java.util.concurrent.locks.ReentrantReadWriteLock
+java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock
+java.util.concurrent.locks.ReentrantReadWriteLock$Sync
+java.util.concurrent.locks.ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter
+java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock
java.util.concurrent.locks.UnsafeAccess
java.util.jar.Attributes
java.util.jar.Attributes$Name
@@ -1344,18 +1440,20 @@
java.util.zip.CRC32
java.util.zip.Checksum
java.util.zip.Deflater
-java.util.zip.GZIPInputStream
java.util.zip.Inflater
java.util.zip.InflaterInputStream
java.util.zip.ZipConstants
java.util.zip.ZipEntry
-java.util.zip.ZipEntry$LittleEndianReader
java.util.zip.ZipFile
java.util.zip.ZipFile$2
java.util.zip.ZipFile$RAFStream
java.util.zip.ZipFile$ZipInflaterInputStream
javax.microedition.khronos.egl.EGL
javax.microedition.khronos.egl.EGL10
+javax.microedition.khronos.egl.EGLConfig
+javax.microedition.khronos.egl.EGLContext
+javax.microedition.khronos.egl.EGLDisplay
+javax.microedition.khronos.egl.EGLSurface
javax.microedition.khronos.opengles.GL
javax.microedition.khronos.opengles.GL10
javax.microedition.khronos.opengles.GL10Ext
@@ -1383,13 +1481,36 @@
javax.net.ssl.X509KeyManager
javax.net.ssl.X509TrustManager
javax.security.auth.x500.X500Principal
+libcore.base.CollectionUtils
+libcore.base.CollectionUtils$1
+libcore.base.CollectionUtils$1$1
+libcore.base.EmptyArray
libcore.base.Objects
+libcore.base.Streams
+libcore.icu.CharsetDecoderICU
+libcore.icu.CharsetEncoderICU
+libcore.icu.CharsetICU
+libcore.icu.ErrorCode
+libcore.icu.ICU
+libcore.icu.LocaleData
+libcore.icu.NativeBreakIterator
+libcore.icu.NativeCollation
+libcore.icu.NativeConverter
+libcore.icu.NativeDecimalFormat
+libcore.icu.NativeDecimalFormat$FieldPositionIterator
libcore.icu.NativeIDN
libcore.icu.NativeNormalizer
libcore.icu.NativePluralRules
libcore.icu.TimeZones
libcore.icu.TimeZones$CachedTimeZones
+libcore.io.BufferIterator
+libcore.io.HeapBufferIterator
libcore.io.IoUtils
+libcore.io.MemoryMappedFile
+libcore.io.NioBufferIterator
+libcore.math.MathUtils
+libcore.net.MimeUtils
+libcore.net.RawSocket
org.apache.commons.logging.Log
org.apache.commons.logging.LogFactory
org.apache.commons.logging.impl.Jdk14Logger
@@ -1416,19 +1537,12 @@
org.apache.harmony.luni.net.SocketOutputStream
org.apache.harmony.luni.platform.IFileSystem
org.apache.harmony.luni.platform.INetworkSystem
-org.apache.harmony.luni.platform.MappedPlatformAddress
org.apache.harmony.luni.platform.OSFileSystem
org.apache.harmony.luni.platform.OSMemory
org.apache.harmony.luni.platform.OSNetworkSystem
org.apache.harmony.luni.platform.Platform
-org.apache.harmony.luni.platform.PlatformAddress
-org.apache.harmony.luni.platform.PlatformAddressFactory
-org.apache.harmony.luni.platform.RuntimeMemorySpy
-org.apache.harmony.luni.platform.RuntimeMemorySpy$AddressWrapper
org.apache.harmony.luni.util.FloatingPointParser
-org.apache.harmony.luni.util.InputStreamHelper
-org.apache.harmony.luni.util.InputStreamHelper$1
-org.apache.harmony.luni.util.InputStreamHelper$ExposedByteArrayInputStream
+org.apache.harmony.luni.util.FloatingPointParser$StringExponentPair
org.apache.harmony.luni.util.PriviAction
org.apache.harmony.luni.util.TwoKeyHashMap
org.apache.harmony.luni.util.TwoKeyHashMap$Entry
@@ -1436,15 +1550,6 @@
org.apache.harmony.luni.util.TwoKeyHashMap$ValueIteratorImpl
org.apache.harmony.luni.util.TwoKeyHashMap$ValuesCollectionImpl
org.apache.harmony.luni.util.Util
-org.apache.harmony.nio.FileChannelFactory
-org.apache.harmony.nio.internal.DirectBuffer
-org.apache.harmony.nio.internal.FileChannelImpl
-org.apache.harmony.nio.internal.FileLockImpl
-org.apache.harmony.nio.internal.FileChannelImpl$RepositioningLock
-org.apache.harmony.nio.internal.LockManager
-org.apache.harmony.nio.internal.LockManager$1
-org.apache.harmony.nio.internal.ReadOnlyFileChannel
-org.apache.harmony.nio.internal.WriteOnlyFileChannel
org.apache.harmony.security.Util
org.apache.harmony.security.asn1.ASN1Any
org.apache.harmony.security.asn1.ASN1Choice
@@ -1470,6 +1575,8 @@
org.apache.harmony.security.asn1.BerInputStream
org.apache.harmony.security.asn1.DerInputStream
org.apache.harmony.security.fortress.Engine
+org.apache.harmony.security.fortress.Engine$ServiceCacheEntry
+org.apache.harmony.security.fortress.Engine$SpiAndProvider
org.apache.harmony.security.fortress.SecurityAccess
org.apache.harmony.security.fortress.SecurityUtils
org.apache.harmony.security.fortress.Services
@@ -1520,7 +1627,6 @@
org.apache.harmony.xnet.provider.jsse.ClientSessionContext
org.apache.harmony.xnet.provider.jsse.DefaultSSLContextImpl
org.apache.harmony.xnet.provider.jsse.IndexedPKIXParameters
-org.apache.harmony.xnet.provider.jsse.IndexedPKIXParameters$Bytes
org.apache.harmony.xnet.provider.jsse.JSSEProvider
org.apache.harmony.xnet.provider.jsse.JSSEProvider$1
org.apache.harmony.xnet.provider.jsse.KeyManagerFactoryImpl
@@ -1543,7 +1649,6 @@
org.apache.http.ConnectionReuseStrategy
org.apache.http.FormattedHeader
org.apache.http.Header
-org.apache.http.HeaderElement
org.apache.http.HeaderElementIterator
org.apache.http.HeaderIterator
org.apache.http.HttpClientConnection
@@ -1560,7 +1665,6 @@
org.apache.http.HttpResponseFactory
org.apache.http.HttpResponseInterceptor
org.apache.http.HttpVersion
-org.apache.http.NameValuePair
org.apache.http.ProtocolVersion
org.apache.http.ReasonPhraseCatalog
org.apache.http.RequestLine
@@ -1577,8 +1681,6 @@
org.apache.http.client.ResponseHandler
org.apache.http.client.UserTokenHandler
org.apache.http.client.methods.AbortableHttpRequest
-org.apache.http.client.methods.HttpEntityEnclosingRequestBase
-org.apache.http.client.methods.HttpPost
org.apache.http.client.methods.HttpRequestBase
org.apache.http.client.methods.HttpUriRequest
org.apache.http.client.params.HttpClientParams
@@ -1650,7 +1752,6 @@
org.apache.http.impl.client.DefaultRequestDirector
org.apache.http.impl.client.DefaultTargetAuthenticationHandler
org.apache.http.impl.client.DefaultUserTokenHandler
-org.apache.http.impl.client.EntityEnclosingRequestWrapper
org.apache.http.impl.client.RequestWrapper
org.apache.http.impl.client.RoutedRequest
org.apache.http.impl.conn.AbstractClientConnAdapter
@@ -1658,10 +1759,11 @@
org.apache.http.impl.conn.AbstractPooledConnAdapter
org.apache.http.impl.conn.DefaultClientConnection
org.apache.http.impl.conn.DefaultClientConnectionOperator
-org.apache.http.impl.conn.DefaultHttpRoutePlanner
org.apache.http.impl.conn.DefaultResponseParser
org.apache.http.impl.conn.IdleConnectionHandler
org.apache.http.impl.conn.IdleConnectionHandler$TimeValues
+org.apache.http.impl.conn.ProxySelectorRoutePlanner
+org.apache.http.impl.conn.ProxySelectorRoutePlanner$1
org.apache.http.impl.conn.tsccm.AbstractConnPool
org.apache.http.impl.conn.tsccm.BasicPoolEntry
org.apache.http.impl.conn.tsccm.BasicPoolEntryRef
@@ -1689,7 +1791,6 @@
org.apache.http.impl.io.AbstractSessionInputBuffer
org.apache.http.impl.io.AbstractSessionOutputBuffer
org.apache.http.impl.io.ContentLengthInputStream
-org.apache.http.impl.io.ContentLengthOutputStream
org.apache.http.impl.io.HttpRequestWriter
org.apache.http.impl.io.HttpTransportMetricsImpl
org.apache.http.impl.io.SocketInputBuffer
@@ -1701,14 +1802,12 @@
org.apache.http.io.SessionOutputBuffer
org.apache.http.message.AbstractHttpMessage
org.apache.http.message.BasicHeader
-org.apache.http.message.BasicHeaderElement
org.apache.http.message.BasicHeaderElementIterator
org.apache.http.message.BasicHeaderValueParser
org.apache.http.message.BasicHttpResponse
org.apache.http.message.BasicLineFormatter
org.apache.http.message.BasicLineParser
org.apache.http.message.BasicListHeaderIterator
-org.apache.http.message.BasicNameValuePair
org.apache.http.message.BasicRequestLine
org.apache.http.message.BasicStatusLine
org.apache.http.message.BufferedHeader
@@ -1803,12 +1902,12 @@
org.bouncycastle.asn1.x509.X509Name
org.bouncycastle.asn1.x509.X509NameElementList
org.bouncycastle.asn1.x509.X509ObjectIdentifiers
+org.bouncycastle.asn1.x9.X9ObjectIdentifiers
org.bouncycastle.crypto.Digest
org.bouncycastle.crypto.ExtendedDigest
org.bouncycastle.crypto.Mac
org.bouncycastle.crypto.digests.OpenSSLDigest
org.bouncycastle.crypto.digests.OpenSSLDigest$SHA1
-org.bouncycastle.crypto.engines.AESFastEngine
org.bouncycastle.crypto.macs.HMac
org.bouncycastle.jce.ProviderConfigurationPermission
org.bouncycastle.jce.interfaces.BCKeyStore
@@ -1824,10 +1923,10 @@
org.bouncycastle.jce.provider.PKIXCertPathValidatorSpi
org.bouncycastle.jce.provider.ProviderUtil
org.bouncycastle.jce.provider.X509CertificateObject
+org.bouncycastle.jce.provider.asymmetric.ECMappings
org.bouncycastle.jce.provider.symmetric.AESMappings
org.bouncycastle.util.Strings
org.bouncycastle.util.io.Streams
-org.ccil.cowan.tagsoup.Parser
org.xml.sax.Attributes
org.xml.sax.ContentHandler
org.xml.sax.Locator
diff --git a/services/java/com/android/server/DevicePolicyManagerService.java b/services/java/com/android/server/DevicePolicyManagerService.java
index 8a9e351..b2d534b 100644
--- a/services/java/com/android/server/DevicePolicyManagerService.java
+++ b/services/java/com/android/server/DevicePolicyManagerService.java
@@ -53,6 +53,7 @@
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.SystemClock;
+import android.os.SystemProperties;
import android.provider.Settings;
import android.util.PrintWriterPrinter;
import android.util.Printer;
@@ -1925,7 +1926,14 @@
* {@link DevicePolicyManager#ENCRYPTION_STATUS_ACTIVE}.
*/
private int getEncryptionStatus() {
- return DevicePolicyManager.ENCRYPTION_STATUS_UNSUPPORTED;
+ String status = SystemProperties.get("ro.crypto.state", "unsupported");
+ if ("encrypted".equalsIgnoreCase(status)) {
+ return DevicePolicyManager.ENCRYPTION_STATUS_ACTIVE;
+ } else if ("unencrypted".equalsIgnoreCase(status)) {
+ return DevicePolicyManager.ENCRYPTION_STATUS_INACTIVE;
+ } else {
+ return DevicePolicyManager.ENCRYPTION_STATUS_UNSUPPORTED;
+ }
}
/**
diff --git a/services/java/com/android/server/InputMethodManagerService.java b/services/java/com/android/server/InputMethodManagerService.java
index 945e714..b5cc5aa 100644
--- a/services/java/com/android/server/InputMethodManagerService.java
+++ b/services/java/com/android/server/InputMethodManagerService.java
@@ -564,19 +564,35 @@
}
}
+ private HashMap<InputMethodInfo, List<InputMethodSubtype>>
+ getExplicitlyOrImplicitlyEnabledInputMethodsAndSubtypeListLocked() {
+ HashMap<InputMethodInfo, List<InputMethodSubtype>> enabledInputMethodAndSubtypes =
+ new HashMap<InputMethodInfo, List<InputMethodSubtype>>();
+ for (InputMethodInfo imi: getEnabledInputMethodList()) {
+ enabledInputMethodAndSubtypes.put(
+ imi, getEnabledInputMethodSubtypeListLocked(imi, true));
+ }
+ return enabledInputMethodAndSubtypes;
+ }
+
+ public List<InputMethodSubtype> getEnabledInputMethodSubtypeListLocked(InputMethodInfo imi,
+ boolean allowsImplicitlySelectedSubtypes) {
+ if (imi == null && mCurMethodId != null) {
+ imi = mMethodMap.get(mCurMethodId);
+ }
+ final List<InputMethodSubtype> enabledSubtypes =
+ mSettings.getEnabledInputMethodSubtypeListLocked(imi);
+ if (!allowsImplicitlySelectedSubtypes || enabledSubtypes.size() > 0) {
+ return enabledSubtypes;
+ } else {
+ return getApplicableSubtypesLocked(mRes, getSubtypes(imi));
+ }
+ }
+
public List<InputMethodSubtype> getEnabledInputMethodSubtypeList(InputMethodInfo imi,
boolean allowsImplicitlySelectedSubtypes) {
synchronized (mMethodMap) {
- if (imi == null && mCurMethodId != null) {
- imi = mMethodMap.get(mCurMethodId);
- }
- final List<InputMethodSubtype> enabledSubtypes =
- mSettings.getEnabledInputMethodSubtypeListLocked(imi);
- if (!allowsImplicitlySelectedSubtypes || enabledSubtypes.size() > 0) {
- return enabledSubtypes;
- } else {
- return getApplicableSubtypesLocked(mRes, getSubtypes(imi));
- }
+ return getEnabledInputMethodSubtypeListLocked(imi, allowsImplicitlySelectedSubtypes);
}
}
@@ -1680,75 +1696,53 @@
if (DEBUG) Slog.v(TAG, "Current IME: " + lastInputMethodId);
synchronized (mMethodMap) {
- final List<Pair<InputMethodInfo, ArrayList<String>>> immis =
- mSettings.getEnabledInputMethodAndSubtypeHashCodeListLocked();
- int N = immis.size();
-
- // Add applicable subtypes if no subtype for each IME is enabled.
- for (int i = 0; i < N; ++i) {
- InputMethodInfo imi = immis.get(i).first;
- ArrayList<String> subtypes = immis.get(i).second;
- if (subtypes != null && subtypes.size() == 0) {
- ArrayList<InputMethodSubtype> applicableSubtypes =
- getApplicableSubtypesLocked(mRes, getSubtypes(imi));
- final int numSubtypes = applicableSubtypes.size();
- for (int j = 0; j < numSubtypes; ++j) {
- subtypes.add(String.valueOf(applicableSubtypes.get(j).hashCode()));
- }
- }
- }
-
- ArrayList<Integer> subtypeIds = new ArrayList<Integer>();
-
+ final HashMap<InputMethodInfo, List<InputMethodSubtype>> immis =
+ getExplicitlyOrImplicitlyEnabledInputMethodsAndSubtypeListLocked();
if (immis == null || immis.size() == 0) {
return;
}
hideInputMethodMenuLocked();
-
final Map<CharSequence, Pair<InputMethodInfo, Integer>> imMap =
new TreeMap<CharSequence, Pair<InputMethodInfo, Integer>>(Collator.getInstance());
- for (int i = 0; i < N; ++i) {
- InputMethodInfo property = immis.get(i).first;
- final ArrayList<String> enabledSubtypeIds = immis.get(i).second;
+ for (InputMethodInfo imi: immis.keySet()) {
+ if (imi == null) continue;
+ List<InputMethodSubtype> explicitlyOrImplicitlyEnabledSubtypeList = immis.get(imi);
HashSet<String> enabledSubtypeSet = new HashSet<String>();
- for (String s : enabledSubtypeIds) {
- enabledSubtypeSet.add(s);
+ for (InputMethodSubtype subtype: explicitlyOrImplicitlyEnabledSubtypeList) {
+ enabledSubtypeSet.add(String.valueOf(subtype.hashCode()));
}
- if (property == null) {
- continue;
- }
- CharSequence label = property.loadLabel(pm);
+ ArrayList<InputMethodSubtype> subtypes = getSubtypes(imi);
+ CharSequence label = imi.loadLabel(pm);
if (showSubtypes && enabledSubtypeSet.size() > 0) {
- final int subtypeCount = property.getSubtypeCount();
+ final int subtypeCount = imi.getSubtypeCount();
for (int j = 0; j < subtypeCount; ++j) {
- InputMethodSubtype subtype = property.getSubtypeAt(j);
+ InputMethodSubtype subtype = imi.getSubtypeAt(j);
if (enabledSubtypeSet.contains(String.valueOf(subtype.hashCode()))) {
CharSequence title;
int nameResId = subtype.getNameResId();
String mode = subtype.getMode();
if (nameResId != 0) {
- title = pm.getText(property.getPackageName(), nameResId,
- property.getServiceInfo().applicationInfo);
+ title = pm.getText(imi.getPackageName(), nameResId,
+ imi.getServiceInfo().applicationInfo);
} else {
CharSequence language = subtype.getLocale();
// TODO: Use more friendly Title and UI
title = label + "," + (mode == null ? "" : mode) + ","
+ (language == null ? "" : language);
}
- imMap.put(title, new Pair<InputMethodInfo, Integer>(property, j));
+ imMap.put(title, new Pair<InputMethodInfo, Integer>(imi, j));
}
}
} else {
imMap.put(label,
- new Pair<InputMethodInfo, Integer>(property, NOT_A_SUBTYPE_ID));
- subtypeIds.add(0);
+ new Pair<InputMethodInfo, Integer>(imi, NOT_A_SUBTYPE_ID));
}
}
- N = imMap.size();
+ final int N = imMap.size();
mItems = imMap.keySet().toArray(new CharSequence[N]);
mIms = new InputMethodInfo[N];
mSubtypeIds = new int[N];
@@ -2361,7 +2355,7 @@
}
}
- public List<Pair<String, ArrayList<String>>> getEnabledInputMethodsAndSubtypeListLocked() {
+ private List<Pair<String, ArrayList<String>>> getEnabledInputMethodsAndSubtypeListLocked() {
ArrayList<Pair<String, ArrayList<String>>> imsList
= new ArrayList<Pair<String, ArrayList<String>>>();
final String enabledInputMethodsStr = getEnabledInputMethodsStr();
@@ -2501,7 +2495,7 @@
for (Pair<String, String> ime: subtypeHistory) {
if (ime.first.equals(imeId)) {
if (DEBUG) {
- Slog.v(TAG, "Subtype found in the history: " + imeId
+ Slog.v(TAG, "Subtype found in the history: " + imeId + ", "
+ ime.second);
}
// We should break here
@@ -2509,6 +2503,9 @@
break;
}
}
+ if (DEBUG) {
+ Slog.v(TAG, "Add subtype to the history: " + imeId + ", " + subtypeId);
+ }
saveSubtypeHistory(subtypeHistory, imeId, subtypeId);
}
@@ -2548,7 +2545,7 @@
enabledImes, imeInTheHistory, subtypeInTheHistory);
if (!TextUtils.isEmpty(subtypeHashCode)) {
if (DEBUG) {
- Slog.d(TAG, "Enabled subtype found in the history:" + subtypeHashCode);
+ Slog.d(TAG, "Enabled subtype found in the history: " + subtypeHashCode);
}
return new Pair<String, String>(imeInTheHistory, subtypeHashCode);
}
diff --git a/services/java/com/android/server/MountService.java b/services/java/com/android/server/MountService.java
index d6804f9..7440f52 100644
--- a/services/java/com/android/server/MountService.java
+++ b/services/java/com/android/server/MountService.java
@@ -19,6 +19,7 @@
import com.android.internal.app.IMediaContainerService;
import com.android.server.am.ActivityManagerService;
+import android.Manifest;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
@@ -618,7 +619,7 @@
Slog.w(TAG, "Failed to get share availability");
}
/*
- * Now that we've done our initialization, release
+ * Now that we've done our initialization, release
* the hounds!
*/
mReady = true;
@@ -1237,7 +1238,7 @@
waitForReady();
return doGetVolumeShared(Environment.getExternalStorageDirectory().getPath(), "ums");
}
-
+
/**
* @return state of the volume at the specified mount point
*/
@@ -1407,7 +1408,7 @@
return rc;
}
-
+
public int mountSecureContainer(String id, String key, int ownerUid) {
validatePermission(android.Manifest.permission.ASEC_MOUNT_UNMOUNT);
waitForReady();
@@ -1495,7 +1496,7 @@
synchronized (mAsecMountSet) {
/*
- * Because a mounted container has active internal state which cannot be
+ * Because a mounted container has active internal state which cannot be
* changed while active, we must ensure both ids are not currently mounted.
*/
if (mAsecMountSet.contains(oldId) || mAsecMountSet.contains(newId)) {
@@ -1635,7 +1636,8 @@
throw new IllegalArgumentException("password cannot be null");
}
- // TODO: Enforce a permission
+ mContext.enforceCallingOrSelfPermission(Manifest.permission.CRYPT_KEEPER,
+ "no permission to access the crypt keeper");
waitForReady();
@@ -1644,13 +1646,30 @@
}
try {
- mConnector.doCommand(String.format("cryptfs checkpw %s", password));
+ ArrayList<String> rsp = mConnector.doCommand("cryptfs checkpw " + password);
+ String []tok = rsp.get(0).split(" ");
+
+ if (tok == null || tok.length != 2) {
+ return -1;
+ }
+
+ int code = Integer.parseInt(tok[1]);
+
+ if (code == 0) {
+ // Decrypt was successful. Post a delayed message before restarting in order
+ // to let the UI to clear itself
+ mHandler.postDelayed(new Runnable() {
+ public void run() {
+ mConnector.doCommand(String.format("cryptfs restart"));
+ }
+ }, 2000); // 2 seconds
+ }
+
+ return code;
} catch (NativeDaemonConnectorException e) {
// Decryption failed
return e.getCode();
}
-
- return 0;
}
public int encryptStorage(String password) {
@@ -1658,16 +1677,17 @@
throw new IllegalArgumentException("password cannot be null");
}
- // TODO: Enforce a permission
+ mContext.enforceCallingOrSelfPermission(Manifest.permission.CRYPT_KEEPER,
+ "no permission to access the crypt keeper");
waitForReady();
if (DEBUG_EVENTS) {
- Slog.i(TAG, "decrypting storage...");
+ Slog.i(TAG, "encrypting storage...");
}
try {
- mConnector.doCommand(String.format("cryptfs enablecrypto wipe %s", password));
+ mConnector.doCommand(String.format("cryptfs enablecrypto inplace %s", password));
} catch (NativeDaemonConnectorException e) {
// Encryption failed
return e.getCode();
diff --git a/services/java/com/android/server/ScreenRotationAnimation.java b/services/java/com/android/server/ScreenRotationAnimation.java
index 2ad9cbe..bef64b3 100644
--- a/services/java/com/android/server/ScreenRotationAnimation.java
+++ b/services/java/com/android/server/ScreenRotationAnimation.java
@@ -23,6 +23,8 @@
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PixelFormat;
+import android.graphics.PorterDuff;
+import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.util.DisplayMetrics;
import android.util.Slog;
@@ -132,9 +134,11 @@
}
if (screenshot != null) {
- c.drawBitmap(screenshot, 0, 0, new Paint(0));
+ Paint paint = new Paint(0);
+ paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));
+ c.drawBitmap(screenshot, 0, 0, paint);
} else {
- c.drawColor(Color.GREEN);
+ c.drawColor(Color.GREEN, PorterDuff.Mode.SRC);
}
mSurface.unlockCanvasAndPost(c);
diff --git a/services/java/com/android/server/WindowManagerService.java b/services/java/com/android/server/WindowManagerService.java
index 2af291d..d2a1786 100644
--- a/services/java/com/android/server/WindowManagerService.java
+++ b/services/java/com/android/server/WindowManagerService.java
@@ -680,6 +680,7 @@
// stop intercepting input
mDragState.unregister();
+ mInputMonitor.setUpdateInputWindowsNeededLw();
mInputMonitor.updateInputWindowsLw();
// Retain the parameters of any deferred rotation operation so
@@ -2401,7 +2402,8 @@
boolean focusChanged = false;
if (win.canReceiveKeys()) {
- focusChanged = updateFocusedWindowLocked(UPDATE_FOCUS_WILL_ASSIGN_LAYERS);
+ focusChanged = updateFocusedWindowLocked(UPDATE_FOCUS_WILL_ASSIGN_LAYERS,
+ false /*updateInputWindows*/);
if (focusChanged) {
imMayMove = false;
}
@@ -2418,9 +2420,10 @@
//dump();
if (focusChanged) {
- finishUpdateFocusedWindowAfterAssignLayersLocked();
+ finishUpdateFocusedWindowAfterAssignLayersLocked(false /*updateInputWindows*/);
}
-
+ mInputMonitor.updateInputWindowsLw();
+
if (localLOGV) Slog.v(
TAG, "New client " + client.asBinder()
+ ": window=" + win);
@@ -2496,8 +2499,10 @@
win.mExiting = true;
win.mRemoveOnExit = true;
mLayoutNeeded = true;
- updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES);
+ updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES,
+ false /*updateInputWindows*/);
performLayoutAndPlaceSurfacesLocked();
+ mInputMonitor.updateInputWindowsLw();
if (win.mAppToken != null) {
win.mAppToken.updateReportedVisibilityLocked();
}
@@ -2515,7 +2520,7 @@
&& updateOrientationFromAppTokensLocked(false)) {
mH.sendEmptyMessage(H.SEND_NEW_CONFIGURATION);
}
- updateFocusedWindowLocked(UPDATE_FOCUS_NORMAL);
+ updateFocusedWindowLocked(UPDATE_FOCUS_NORMAL, true /*updateInputWindows*/);
Binder.restoreCallingIdentity(origId);
}
@@ -2613,6 +2618,7 @@
}
}
+ mInputMonitor.setUpdateInputWindowsNeededLw();
mInputMonitor.updateInputWindowsLw();
}
@@ -2863,6 +2869,7 @@
outSurface.release();
}
} catch (Exception e) {
+ mInputMonitor.setUpdateInputWindowsNeededLw();
mInputMonitor.updateInputWindowsLw();
Slog.w(TAG, "Exception thrown when creating surface for client "
@@ -2950,7 +2957,8 @@
if (focusMayChange) {
//System.out.println("Focus may change: " + win.mAttrs.getTitle());
- if (updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES)) {
+ if (updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES,
+ false /*updateInputWindows*/)) {
imMayMove = false;
}
//System.out.println("Relayout " + win + ": focus=" + mCurrentFocus);
@@ -3006,6 +3014,7 @@
inTouchMode = mInTouchMode;
+ mInputMonitor.setUpdateInputWindowsNeededLw();
mInputMonitor.updateInputWindowsLw();
}
@@ -3378,7 +3387,8 @@
if (changed) {
mLayoutNeeded = true;
performLayoutAndPlaceSurfacesLocked();
- updateFocusedWindowLocked(UPDATE_FOCUS_NORMAL);
+ updateFocusedWindowLocked(UPDATE_FOCUS_NORMAL,
+ false /*updateInputWindows*/);
}
if (delayed) {
@@ -3388,6 +3398,7 @@
}
}
+ mInputMonitor.setUpdateInputWindowsNeededLw();
mInputMonitor.updateInputWindowsLw();
} else {
Slog.w(TAG, "Attempted to remove non-existing token: " + token);
@@ -3707,7 +3718,7 @@
if (moveFocusNow && changed) {
final long origId = Binder.clearCallingIdentity();
- updateFocusedWindowLocked(UPDATE_FOCUS_NORMAL);
+ updateFocusedWindowLocked(UPDATE_FOCUS_NORMAL, true /*updateInputWindows*/);
Binder.restoreCallingIdentity(origId);
}
}
@@ -3882,7 +3893,8 @@
ttoken.updateLayers();
}
- updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES);
+ updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES,
+ true /*updateInputWindows*/);
mLayoutNeeded = true;
performLayoutAndPlaceSurfacesLocked();
Binder.restoreCallingIdentity(origId);
@@ -4042,12 +4054,13 @@
if (changed) {
mLayoutNeeded = true;
+ mInputMonitor.setUpdateInputWindowsNeededLw();
if (performLayout) {
- updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES);
+ updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES,
+ false /*updateInputWindows*/);
performLayoutAndPlaceSurfacesLocked();
- } else {
- mInputMonitor.updateInputWindowsLw();
}
+ mInputMonitor.updateInputWindowsLw();
}
}
@@ -4302,7 +4315,7 @@
if (mFocusedApp == wtoken) {
if (DEBUG_FOCUS) Slog.v(TAG, "Removing focused app token:" + wtoken);
mFocusedApp = null;
- updateFocusedWindowLocked(UPDATE_FOCUS_NORMAL);
+ updateFocusedWindowLocked(UPDATE_FOCUS_NORMAL, true /*updateInputWindows*/);
mInputMonitor.setFocusedAppLw(null);
}
} else {
@@ -4481,9 +4494,11 @@
reAddAppWindowsLocked(findWindowOffsetLocked(index), wtoken);
if (DEBUG_REORDER) Slog.v(TAG, "Final window list:");
if (DEBUG_REORDER) dumpWindowsLocked();
- updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES);
+ updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES,
+ false /*updateInputWindows*/);
mLayoutNeeded = true;
performLayoutAndPlaceSurfacesLocked();
+ mInputMonitor.updateInputWindowsLw();
}
Binder.restoreCallingIdentity(origId);
}
@@ -4520,11 +4535,13 @@
pos = reAddAppWindowsLocked(pos, wtoken);
if (updateFocusAndLayout) {
- if (!updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES)) {
+ if (!updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES,
+ false /*updateInputWindows*/)) {
assignLayersLocked();
}
mLayoutNeeded = true;
performLayoutAndPlaceSurfacesLocked();
+ mInputMonitor.updateInputWindowsLw();
}
}
@@ -4550,11 +4567,13 @@
}
}
- if (!updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES)) {
+ if (!updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES,
+ false /*updateInputWindows*/)) {
assignLayersLocked();
}
mLayoutNeeded = true;
performLayoutAndPlaceSurfacesLocked();
+ mInputMonitor.updateInputWindowsLw();
//dump();
}
@@ -5797,6 +5816,9 @@
// When true, input dispatch proceeds normally. Otherwise all events are dropped.
private boolean mInputDispatchEnabled = true;
+ // When true, need to call updateInputWindowsLw().
+ private boolean mUpdateInputWindowsNeeded = true;
+
// Temporary list of windows information to provide to the input dispatcher.
private InputWindowList mTempInputWindows = new InputWindowList();
@@ -5891,8 +5913,17 @@
inputWindow.touchableRegion.setEmpty();
}
+ public void setUpdateInputWindowsNeededLw() {
+ mUpdateInputWindowsNeeded = true;
+ }
+
/* Updates the cached window information provided to the input dispatcher. */
public void updateInputWindowsLw() {
+ if (!mUpdateInputWindowsNeeded) {
+ return;
+ }
+ mUpdateInputWindowsNeeded = false;
+
// Populate the input window list with information about all of the windows that
// could potentially receive input.
// As an optimization, we could try to prune the list of windows but this turns
@@ -6021,7 +6052,7 @@
/* Called when the current input focus changes.
* Layer assignment is assumed to be complete by the time this is called.
*/
- public void setInputFocusLw(WindowState newWindow) {
+ public void setInputFocusLw(WindowState newWindow, boolean updateInputWindows) {
if (DEBUG_INPUT) {
Slog.d(TAG, "Input focus has changed to " + newWindow);
}
@@ -6033,9 +6064,13 @@
// forgets to resume.
newWindow.mToken.paused = false;
}
-
+
mInputFocus = newWindow;
- updateInputWindowsLw();
+ setUpdateInputWindowsNeededLw();
+
+ if (updateInputWindows) {
+ updateInputWindowsLw();
+ }
}
}
@@ -6062,6 +6097,7 @@
}
window.paused = true;
+ setUpdateInputWindowsNeededLw();
updateInputWindowsLw();
}
}
@@ -6073,6 +6109,7 @@
}
window.paused = false;
+ setUpdateInputWindowsNeededLw();
updateInputWindowsLw();
}
}
@@ -6549,12 +6586,14 @@
// the actual drag event dispatch stuff in the dragstate
mDragState.register();
+ mInputMonitor.setUpdateInputWindowsNeededLw();
mInputMonitor.updateInputWindowsLw();
if (!mInputManager.transferTouchFocus(callingWin.mInputChannel,
mDragState.mServerChannel)) {
Slog.e(TAG, "Unable to transfer touch focus");
mDragState.unregister();
mDragState = null;
+ mInputMonitor.setUpdateInputWindowsNeededLw();
mInputMonitor.updateInputWindowsLw();
return false;
}
@@ -9151,6 +9190,7 @@
// !!! TODO: ANR the app that has failed to start the drag in time
if (mDragState != null) {
mDragState.unregister();
+ mInputMonitor.setUpdateInputWindowsNeededLw();
mInputMonitor.updateInputWindowsLw();
mDragState.reset();
mDragState = null;
@@ -9441,7 +9481,7 @@
}
}
- private final int performLayoutLockedInner(boolean initial) {
+ private final int performLayoutLockedInner(boolean initial, boolean updateInputWindows) {
if (!mLayoutNeeded) {
return 0;
}
@@ -9549,7 +9589,10 @@
}
// Window frames may have changed. Tell the input dispatcher about it.
- mInputMonitor.updateInputWindowsLw();
+ mInputMonitor.setUpdateInputWindowsNeededLw();
+ if (updateInputWindows) {
+ mInputMonitor.updateInputWindowsLw();
+ }
return mPolicy.finishLayoutLw();
}
@@ -9570,7 +9613,8 @@
if (mFocusMayChange) {
mFocusMayChange = false;
- updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES);
+ updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES,
+ false /*updateInputWindows*/);
}
// Initialize state of exiting tokens.
@@ -9646,7 +9690,7 @@
// FIRST LOOP: Perform a layout, if needed.
if (repeats < 4) {
- changes = performLayoutLockedInner(repeats == 0);
+ changes = performLayoutLockedInner(repeats == 0, false /*updateInputWindows*/);
if (changes != 0) {
continue;
}
@@ -10103,7 +10147,8 @@
if (!moveInputMethodWindowsIfNeededLocked(true)) {
assignLayersLocked();
}
- updateFocusedWindowLocked(UPDATE_FOCUS_PLACING_SURFACES);
+ updateFocusedWindowLocked(UPDATE_FOCUS_PLACING_SURFACES,
+ false /*updateInputWindows*/);
mFocusMayChange = false;
}
}
@@ -10212,7 +10257,8 @@
if (mFocusMayChange) {
mFocusMayChange = false;
- if (updateFocusedWindowLocked(UPDATE_FOCUS_PLACING_SURFACES)) {
+ if (updateFocusedWindowLocked(UPDATE_FOCUS_PLACING_SURFACES,
+ false /*updateInputWindows*/)) {
changes |= PhoneWindowManager.FINISH_LAYOUT_REDO_ANIM;
adjResult = 0;
}
@@ -10224,8 +10270,6 @@
if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "*** ANIM STEP: changes=0x"
+ Integer.toHexString(changes));
-
- mInputMonitor.updateInputWindowsLw();
} while (changes != 0);
// THIRD LOOP: Update the surfaces of all windows.
@@ -10679,8 +10723,6 @@
Slog.e(TAG, "Unhandled exception in Window Manager", e);
}
- mInputMonitor.updateInputWindowsLw();
-
Surface.closeTransaction();
if (SHOW_TRANSACTIONS) Slog.i(TAG, "<<< CLOSE TRANSACTION performLayoutAndPlaceSurfaces");
@@ -10810,6 +10852,8 @@
requestAnimationLocked(currentTime+(1000/60)-SystemClock.uptimeMillis());
}
+ // Finally update all input windows now that the window changes have stabilized.
+ mInputMonitor.setUpdateInputWindowsNeededLw();
mInputMonitor.updateInputWindowsLw();
setHoldScreenLocked(holdScreen != null);
@@ -10988,7 +11032,7 @@
}
}
- private boolean updateFocusedWindowLocked(int mode) {
+ private boolean updateFocusedWindowLocked(int mode, boolean updateInputWindows) {
WindowState newFocus = computeFocusedWindowLocked();
if (mCurrentFocus != newFocus) {
// This check makes sure that we don't already have the focus
@@ -11009,7 +11053,7 @@
mLayoutNeeded = true;
}
if (mode == UPDATE_FOCUS_PLACING_SURFACES) {
- performLayoutLockedInner(true);
+ performLayoutLockedInner(true /*initial*/, updateInputWindows);
} else if (mode == UPDATE_FOCUS_WILL_PLACE_SURFACES) {
// Client will do the layout, but we need to assign layers
// for handleNewWindowLocked() below.
@@ -11020,15 +11064,15 @@
if (mode != UPDATE_FOCUS_WILL_ASSIGN_LAYERS) {
// If we defer assigning layers, then the caller is responsible for
// doing this part.
- finishUpdateFocusedWindowAfterAssignLayersLocked();
+ finishUpdateFocusedWindowAfterAssignLayersLocked(updateInputWindows);
}
return true;
}
return false;
}
- private void finishUpdateFocusedWindowAfterAssignLayersLocked() {
- mInputMonitor.setInputFocusLw(mCurrentFocus);
+ private void finishUpdateFocusedWindowAfterAssignLayersLocked(boolean updateInputWindows) {
+ mInputMonitor.setInputFocusLw(mCurrentFocus, updateInputWindows);
}
private WindowState computeFocusedWindowLocked() {
diff --git a/tests/CoreTests/android/core/URLTest.java b/tests/CoreTests/android/core/URLTest.java
deleted file mode 100644
index 5efcd5b..0000000
--- a/tests/CoreTests/android/core/URLTest.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.core;
-
-import android.test.suitebuilder.annotation.Suppress;
-import junit.framework.TestCase;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.net.HttpURLConnection;
-import java.net.ServerSocket;
-import java.net.Socket;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.HashMap;
-import java.util.Map;
-
-public class URLTest extends TestCase {
-
- private static void get(String u) throws IOException {
- URL url = new URL(u);
- URLConnection cn = url.openConnection();
- cn.connect();
-// System.out.println("Content-Type: " + cn.getContentType());
-// System.out.println("Content-Length: " + cn.getContentLength());
-
- InputStream stream = cn.getInputStream();
- if (stream == null) {
- throw new RuntimeException("stream is null");
- }
- byte[] data = new byte[1024];
- stream.read(data);
-
-// if (true) {
-// System.out.print("data=");
-// System.out.write(data);
-// System.out.println();
-// }
-
-// System.out.println("Content-Type: " + cn.getContentType());
-// System.out.print("data:");
-// System.out.write(data);
-// System.out.println();
-
- assertTrue(new String(data).indexOf("<html>") >= 0);
- }
-
- @Suppress
- public void testGetHTTP() throws Exception {
- get("http://www.google.com");
- }
-
- @Suppress
- public void testGetHTTPS() throws Exception {
- get("https://www.fortify.net/cgi/ssl_2.pl");
- }
-
- /**
- * Dummy HTTP server class for testing keep-alive behavior. Listens a
- * single time and responds to a given number of requests on the same
- * socket. Then closes the socket.
- */
- private static class DummyServer implements Runnable {
-
- private int keepAliveCount;
- private Map<String, String> headers = new HashMap<String, String>();
-
- public DummyServer(int keepAliveCount) {
- this.keepAliveCount = keepAliveCount;
- }
-
- public void run() {
- try {
- ServerSocket server = new ServerSocket(8182);
- Socket socket = server.accept();
-
- InputStream input = socket.getInputStream();
- BufferedReader reader = new BufferedReader(new InputStreamReader(input));
- try {
- for (int i = 0; i < keepAliveCount; i++) {
- reader.readLine();
- headers.clear();
- while (true) {
- String header = reader.readLine();
- if (header.length() == 0) {
- break;
- }
- int colon = header.indexOf(":");
- String key = header.substring(0, colon);
- String value = header.substring(colon + 1).trim();
- headers.put(key, value);
- }
-
- OutputStream output = socket.getOutputStream();
- PrintWriter writer = new PrintWriter(output);
-
- try {
- writer.println("HTTP/1.1 200 OK");
- String body = "Hello, Android world #" + i + "!";
- writer.println("Content-Length: " + body.length());
- writer.println("");
- writer.print(body);
- writer.flush();
- } finally {
- writer.close();
- }
- }
- } finally {
- reader.close();
- }
- socket.close();
- server.close();
- } catch (Exception ex) {
- throw new RuntimeException(ex);
- }
- }
- }
-
- /**
- * Does a request to the given URL, reads and returns the result.
- */
- private String request(URL url) throws Exception {
- URLConnection connection = url.openConnection();
- connection.connect();
-
- InputStream input = connection.getInputStream();
- BufferedReader reader = new BufferedReader(new InputStreamReader(input));
- try {
- return reader.readLine();
- } finally {
- reader.close();
- }
- }
-
- /**
- * Test case for HTTP keep-alive behavior.
- */
- @Suppress
- public void testGetKeepAlive() throws Exception {
- new Thread(new DummyServer(3)).start();
- Thread.sleep(100);
-
- // We expect the request to work three times, then it fails.
- URL url = new URL("http://localhost:8182");
- assertEquals("Hello, Android world #0!", request(url));
- assertEquals("Hello, Android world #1!", request(url));
- assertEquals("Hello, Android world #2!", request(url));
-
- try {
- request(url);
- fail("ConnectException expected.");
- } catch (Exception ex) {
- // Ok.
- }
- }
-
- @Suppress
- public void testUserAgentHeader() throws Exception {
- DummyServer server = new DummyServer(1);
- new Thread(server).start();
- Thread.sleep(100);
-
- // We expect the request to work three times, then it fails.
- request(new URL("http://localhost:8182"));
-
- String userAgent = server.headers.get("User-Agent");
- assertTrue("Unexpected User-Agent: " + userAgent, userAgent.matches(
- "Dalvik/[\\d.]+ \\(Linux; U; Android \\w+(;.*)?( Build/\\w+)?\\)"));
- }
-
- /**
- * Regression for issue 1001814.
- */
- @Suppress
- public void testHttpConnectionTimeout() throws Exception {
- int timeout = 5000;
- HttpURLConnection cn = null;
- long start = 0;
- try {
- start = System.currentTimeMillis();
- URL url = new URL("http://123.123.123.123");
- cn = (HttpURLConnection) url.openConnection();
- cn.setConnectTimeout(5000);
- cn.connect();
- fail("should have thrown an exception");
- } catch (IOException ioe) {
- long delay = System.currentTimeMillis() - start;
- if (Math.abs(timeout - delay) > 1000) {
- fail("Timeout was not accurate. it needed " + delay +
- " instead of " + timeout + "miliseconds");
- }
- } finally {
- if (cn != null) {
- cn.disconnect();
- }
- }
- }
-
- /**
- * Regression test for issue 1158780 where using '{' and '}' in an URL threw
- * an NPE. The RI accepts this URL and returns the status 404.
- */
- @Suppress
- public void testMalformedUrl() throws Exception {
- URL url = new URL("http://www.google.com/cgi-bin/myscript?g={United+States}+Borders+Mexico+{Climate+change}+Marketing+{Automotive+industry}+News+Health+Internet");
- HttpURLConnection conn = (HttpURLConnection)url.openConnection();
- int status = conn.getResponseCode();
- android.util.Log.d("URLTest", "status: " + status);
- }
-}
diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/WebViewEventSender.java b/tests/DumpRenderTree/src/com/android/dumprendertree/WebViewEventSender.java
index 383d782..17345ae 100644
--- a/tests/DumpRenderTree/src/com/android/dumprendertree/WebViewEventSender.java
+++ b/tests/DumpRenderTree/src/com/android/dumprendertree/WebViewEventSender.java
@@ -357,11 +357,11 @@
}
private int contentsToWindowX(int x) {
- return (int) (x * mWebView.getScale()) - mWebView.getScrollX();
+ return Math.round(x * mWebView.getScale()) - mWebView.getScrollX();
}
private int contentsToWindowY(int y) {
- return (int) (y * mWebView.getScale()) - mWebView.getScrollY();
+ return Math.round(y * mWebView.getScale()) - mWebView.getScrollY();
}
private WebView mWebView = null;
diff --git a/tests/DumpRenderTree2/src/com/android/dumprendertree2/EventSenderImpl.java b/tests/DumpRenderTree2/src/com/android/dumprendertree2/EventSenderImpl.java
index d425734..af22039 100644
--- a/tests/DumpRenderTree2/src/com/android/dumprendertree2/EventSenderImpl.java
+++ b/tests/DumpRenderTree2/src/com/android/dumprendertree2/EventSenderImpl.java
@@ -73,8 +73,8 @@
}
private Point createViewPointFromContentCoordinates(int x, int y) {
- return new Point((int)(x * mWebView.getScale()) - mWebView.getScrollX(),
- (int)(y * mWebView.getScale()) - mWebView.getScrollY());
+ return new Point(Math.round(x * mWebView.getScale()) - mWebView.getScrollX(),
+ Math.round(y * mWebView.getScale()) - mWebView.getScrollY());
}
public static class TouchPoint {
diff --git a/tools/preload/Record.java b/tools/preload/Record.java
index 9d45a26..2f2ffaf 100644
--- a/tools/preload/Record.java
+++ b/tools/preload/Record.java
@@ -30,6 +30,8 @@
"com.google.android.apps.maps\\u003Adriveabout",
"com.google.android.apps.maps:LocationFriendService",
"com.google.android.apps.maps\\u003ALocationFriendService",
+ "com.google.android.apps.maps:NetworkLocationService",
+ "com.google.android.apps.maps\\u003ANetworkLocationService",
};
enum Type {
@@ -69,7 +71,7 @@
/** Record time (ns). */
final long time;
-
+
/** Source file line# */
int sourceLineNumber;
@@ -91,7 +93,7 @@
for (int i = 0; i < REPLACE_CLASSES.length; i+= 2) {
line = line.replace(REPLACE_CLASSES[i], REPLACE_CLASSES[i+1]);
}
-
+
line = line.substring(1);
String[] parts = line.split(":");
@@ -106,12 +108,12 @@
time = Long.parseLong(parts[6]);
}
-
+
/**
* Decode any escaping that may have been written to the log line.
- *
+ *
* Supports unicode-style escaping: \\uXXXX = character in hex
- *
+ *
* @param rawField the field as it was written into the log
* @result the same field with any escaped characters replaced
*/
@@ -122,11 +124,11 @@
String before = result.substring(0, offset);
String escaped = result.substring(offset+2, offset+6);
String after = result.substring(offset+6);
-
+
result = String.format("%s%c%s", before, Integer.parseInt(escaped, 16), after);
- // find another but don't recurse
- offset = result.indexOf("\\u", offset + 1);
+ // find another but don't recurse
+ offset = result.indexOf("\\u", offset + 1);
}
return result;
}
@@ -135,13 +137,13 @@
* Converts a VM-style name to a language-style name.
*/
String vmTypeToLanguage(String typeName) {
- // if the typename is (null), just return it as-is. This is probably in dexopt and
+ // if the typename is (null), just return it as-is. This is probably in dexopt and
// will be discarded anyway. NOTE: This corresponds to the case in dalvik/vm/oo/Class.c
// where dvmLinkClass() returns false and we clean up and exit.
if ("(null)".equals(typeName)) {
return typeName;
}
-
+
if (!typeName.startsWith("L") || !typeName.endsWith(";") ) {
throw new AssertionError("Bad name: " + typeName + " in line " + sourceLineNumber);
}