diff options
124 files changed, 773 insertions, 480 deletions
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index a48924e9fa8a..2baad625a9cd 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -23,7 +23,6 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.IntentSender; -import android.content.pm.ManifestDigest; import android.content.res.Resources; import android.content.res.XmlResourceParser; import android.graphics.drawable.Drawable; @@ -1090,10 +1089,6 @@ public abstract class PackageManager { public static final String EXTRA_VERIFICATION_INSTALL_FLAGS = "android.content.pm.extra.VERIFICATION_INSTALL_FLAGS"; - /** {@hide} */ - // TODO: enable this for userdebug and eng builds; see 6389556 - public static final boolean DEFAULT_ENFORCE_READ_EXTERNAL_STORAGE = false; - /** * Retrieve overall information about an application package that is * installed on the system. diff --git a/core/java/android/os/Trace.java b/core/java/android/os/Trace.java index 911183d496d8..c0240fe1f939 100644 --- a/core/java/android/os/Trace.java +++ b/core/java/android/os/Trace.java @@ -38,6 +38,7 @@ public final class Trace { public static final long TRACE_TAG_ACTIVITY_MANAGER = 1L << 6; public static final long TRACE_TAG_SYNC_MANAGER = 1L << 7; public static final long TRACE_TAG_AUDIO = 1L << 8; + public static final long TRACE_TAG_VIDEO = 1L << 9; public static final int TRACE_FLAGS_START_BIT = 1; public static final String[] TRACE_TAGS = { diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 497e66e86305..ea3cab44477c 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -4253,6 +4253,10 @@ public final class Settings { /** Timeout for package verification. {@hide} */ public static final String PACKAGE_VERIFIER_TIMEOUT = "verifier_timeout"; + /** {@hide} */ + public static final String + READ_EXTERNAL_STORAGE_ENFORCED_DEFAULT = "read_external_storage_enforced_default"; + /** * Duration in milliseconds before pre-authorized URIs for the contacts * provider should expire. diff --git a/core/java/android/text/DynamicLayout.java b/core/java/android/text/DynamicLayout.java index dc58ef27280e..d909362357ed 100644 --- a/core/java/android/text/DynamicLayout.java +++ b/core/java/android/text/DynamicLayout.java @@ -35,6 +35,7 @@ import java.lang.ref.WeakReference; public class DynamicLayout extends Layout { private static final int PRIORITY = 128; + private static final int BLOCK_MINIMUM_CHARACTER_LENGTH = 400; /** * Make a layout for the specified text that will be updated as @@ -117,10 +118,6 @@ public class DynamicLayout extends Layout mObjects = new PackedObjectVector<Directions>(1); - mBlockEndLines = new int[] { 0 }; - mBlockIndices = new int[] { INVALID_BLOCK_INDEX }; - mNumberOfBlocks = 1; - mIncludePad = includepad; /* @@ -170,7 +167,6 @@ public class DynamicLayout extends Layout mObjects.insertAt(0, dirs); // Update from 0 characters to whatever the real text is - reflow(base, 0, 0, base.length()); if (base instanceof Spannable) { @@ -295,14 +291,12 @@ public class DynamicLayout extends Layout // the very end of the buffer, then we already have a line that // starts there, so disregard the blank line. - if (where + after != len && - reflowed.getLineStart(n - 1) == where + after) + if (where + after != len && reflowed.getLineStart(n - 1) == where + after) n--; // remove affected lines from old layout mInts.deleteAt(startline, endline - startline); mObjects.deleteAt(startline, endline - startline); - updateBlocks(startline, endline - 1, n); // adjust offsets in layout for new height and offsets @@ -362,6 +356,8 @@ public class DynamicLayout extends Layout mObjects.insertAt(startline + i, objects); } + updateBlocks(startline, endline - 1, n); + synchronized (sLock) { sStaticLayout = reflowed; reflowed.finish(); @@ -369,6 +365,62 @@ public class DynamicLayout extends Layout } /** + * Create the initial block structure, cutting the text into blocks of at least + * BLOCK_MINIMUM_CHARACTER_SIZE characters, aligned on the ends of paragraphs. + */ + private void createBlocks() { + int offset = BLOCK_MINIMUM_CHARACTER_LENGTH; + mNumberOfBlocks = 0; + final CharSequence text = mDisplay; + + while (true) { + offset = TextUtils.indexOf(text, '\n', offset); + if (offset < 0) { + addBlockAtOffset(text.length()); + break; + } else { + addBlockAtOffset(offset); + offset += BLOCK_MINIMUM_CHARACTER_LENGTH; + } + } + + // mBlockIndices and mBlockEndLines should have the same length + mBlockIndices = new int[mBlockEndLines.length]; + for (int i = 0; i < mBlockEndLines.length; i++) { + mBlockIndices[i] = INVALID_BLOCK_INDEX; + } + } + + /** + * Create a new block, ending at the specified character offset. + * A block will actually be created only if has at least one line, i.e. this offset is + * not on the end line of the previous block. + */ + private void addBlockAtOffset(int offset) { + final int line = getLineForOffset(offset); + + if (mBlockEndLines == null) { + // Initial creation of the array, no test on previous block ending line + mBlockEndLines = new int[ArrayUtils.idealIntArraySize(1)]; + mBlockEndLines[mNumberOfBlocks] = line; + mNumberOfBlocks++; + return; + } + + final int previousBlockEndLine = mBlockEndLines[mNumberOfBlocks - 1]; + if (line > previousBlockEndLine) { + if (mNumberOfBlocks == mBlockEndLines.length) { + // Grow the array if needed + int[] blockEndLines = new int[ArrayUtils.idealIntArraySize(mNumberOfBlocks + 1)]; + System.arraycopy(mBlockEndLines, 0, blockEndLines, 0, mNumberOfBlocks); + mBlockEndLines = blockEndLines; + } + mBlockEndLines[mNumberOfBlocks] = line; + mNumberOfBlocks++; + } + } + + /** * This method is called every time the layout is reflowed after an edition. * It updates the internal block data structure. The text is split in blocks * of contiguous lines, with at least one block for the entire text. @@ -388,6 +440,11 @@ public class DynamicLayout extends Layout * @hide */ void updateBlocks(int startLine, int endLine, int newLineCount) { + if (mBlockEndLines == null) { + createBlocks(); + return; + } + int firstBlock = -1; int lastBlock = -1; for (int i = 0; i < mNumberOfBlocks; i++) { diff --git a/core/java/android/view/Surface.java b/core/java/android/view/Surface.java index 1011d7a1bb53..a9687683a6ed 100644 --- a/core/java/android/view/Surface.java +++ b/core/java/android/view/Surface.java @@ -511,7 +511,7 @@ public class Surface implements Parcelable { /** @hide */ public native void setFlags(int flags, int mask); /** @hide */ - public native void setActiveRect(Rect activeRect); + public native void setWindowCrop(Rect crop); diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index b4478bf972ef..4d13e8ab3f36 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -2135,6 +2135,13 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal */ static final int VIEW_IS_ANIMATING_TRANSFORM = 0x10000000; + /** + * Flag indicating whether a view failed the quickReject() check in draw(). This condition + * is used to check whether later changes to the view's transform should invalidate the + * view to force the quickReject test to run again. + */ + static final int VIEW_QUICK_REJECTED = 0x20000000; + /* End of masks for mPrivateFlags2 */ static final int DRAG_MASK = DRAG_CAN_ACCEPT | DRAG_HOVERED; @@ -5577,7 +5584,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal "unmatched pair of setHasTransientState calls"); } if ((hasTransientState && mTransientStateCount == 1) || - (hasTransientState && mTransientStateCount == 0)) { + (!hasTransientState && mTransientStateCount == 0)) { // update flag if we've just incremented up from 0 or decremented down to 0 mPrivateFlags2 = (mPrivateFlags2 & ~HAS_TRANSIENT_STATE) | (hasTransientState ? HAS_TRANSIENT_STATE : 0); @@ -8567,6 +8574,10 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal if (mDisplayList != null) { mDisplayList.setCameraDistance(-Math.abs(distance) / dpi); } + if ((mPrivateFlags2 & VIEW_QUICK_REJECTED) == VIEW_QUICK_REJECTED) { + // View was rejected last time it was drawn by its parent; this may have changed + invalidateParentIfNeeded(); + } } /** @@ -8609,6 +8620,10 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal if (mDisplayList != null) { mDisplayList.setRotation(rotation); } + if ((mPrivateFlags2 & VIEW_QUICK_REJECTED) == VIEW_QUICK_REJECTED) { + // View was rejected last time it was drawn by its parent; this may have changed + invalidateParentIfNeeded(); + } } } @@ -8656,6 +8671,10 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal if (mDisplayList != null) { mDisplayList.setRotationY(rotationY); } + if ((mPrivateFlags2 & VIEW_QUICK_REJECTED) == VIEW_QUICK_REJECTED) { + // View was rejected last time it was drawn by its parent; this may have changed + invalidateParentIfNeeded(); + } } } @@ -8703,6 +8722,10 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal if (mDisplayList != null) { mDisplayList.setRotationX(rotationX); } + if ((mPrivateFlags2 & VIEW_QUICK_REJECTED) == VIEW_QUICK_REJECTED) { + // View was rejected last time it was drawn by its parent; this may have changed + invalidateParentIfNeeded(); + } } } @@ -8742,6 +8765,10 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal if (mDisplayList != null) { mDisplayList.setScaleX(scaleX); } + if ((mPrivateFlags2 & VIEW_QUICK_REJECTED) == VIEW_QUICK_REJECTED) { + // View was rejected last time it was drawn by its parent; this may have changed + invalidateParentIfNeeded(); + } } } @@ -8781,6 +8808,10 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal if (mDisplayList != null) { mDisplayList.setScaleY(scaleY); } + if ((mPrivateFlags2 & VIEW_QUICK_REJECTED) == VIEW_QUICK_REJECTED) { + // View was rejected last time it was drawn by its parent; this may have changed + invalidateParentIfNeeded(); + } } } @@ -8828,6 +8859,10 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal if (mDisplayList != null) { mDisplayList.setPivotX(pivotX); } + if ((mPrivateFlags2 & VIEW_QUICK_REJECTED) == VIEW_QUICK_REJECTED) { + // View was rejected last time it was drawn by its parent; this may have changed + invalidateParentIfNeeded(); + } } } @@ -8874,6 +8909,10 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal if (mDisplayList != null) { mDisplayList.setPivotY(pivotY); } + if ((mPrivateFlags2 & VIEW_QUICK_REJECTED) == VIEW_QUICK_REJECTED) { + // View was rejected last time it was drawn by its parent; this may have changed + invalidateParentIfNeeded(); + } } } @@ -9032,6 +9071,10 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal } mBackgroundSizeChanged = true; invalidateParentIfNeeded(); + if ((mPrivateFlags2 & VIEW_QUICK_REJECTED) == VIEW_QUICK_REJECTED) { + // View was rejected last time it was drawn by its parent; this may have changed + invalidateParentIfNeeded(); + } } } @@ -9101,6 +9144,10 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal } mBackgroundSizeChanged = true; invalidateParentIfNeeded(); + if ((mPrivateFlags2 & VIEW_QUICK_REJECTED) == VIEW_QUICK_REJECTED) { + // View was rejected last time it was drawn by its parent; this may have changed + invalidateParentIfNeeded(); + } } } @@ -9164,6 +9211,10 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal } mBackgroundSizeChanged = true; invalidateParentIfNeeded(); + if ((mPrivateFlags2 & VIEW_QUICK_REJECTED) == VIEW_QUICK_REJECTED) { + // View was rejected last time it was drawn by its parent; this may have changed + invalidateParentIfNeeded(); + } } } @@ -9224,6 +9275,10 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal } mBackgroundSizeChanged = true; invalidateParentIfNeeded(); + if ((mPrivateFlags2 & VIEW_QUICK_REJECTED) == VIEW_QUICK_REJECTED) { + // View was rejected last time it was drawn by its parent; this may have changed + invalidateParentIfNeeded(); + } } } @@ -9308,6 +9363,10 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal if (mDisplayList != null) { mDisplayList.setTranslationX(translationX); } + if ((mPrivateFlags2 & VIEW_QUICK_REJECTED) == VIEW_QUICK_REJECTED) { + // View was rejected last time it was drawn by its parent; this may have changed + invalidateParentIfNeeded(); + } } } @@ -9345,6 +9404,10 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal if (mDisplayList != null) { mDisplayList.setTranslationY(translationY); } + if ((mPrivateFlags2 & VIEW_QUICK_REJECTED) == VIEW_QUICK_REJECTED) { + // View was rejected last time it was drawn by its parent; this may have changed + invalidateParentIfNeeded(); + } } } @@ -12816,8 +12879,10 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal if (!concatMatrix && canvas.quickReject(mLeft, mTop, mRight, mBottom, Canvas.EdgeType.BW) && (mPrivateFlags & DRAW_ANIMATION) == 0) { + mPrivateFlags2 |= VIEW_QUICK_REJECTED; return more; } + mPrivateFlags2 &= ~VIEW_QUICK_REJECTED; if (hardwareAccelerated) { // Clear INVALIDATED flag to allow invalidation to occur during rendering, but diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 1fcb2c3561d2..131071917469 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -263,7 +263,6 @@ public final class ViewRootImpl implements ViewParent, final Rect mPendingVisibleInsets = new Rect(); final Rect mPendingContentInsets = new Rect(); final Rect mPendingSystemInsets = new Rect(); - final Rect mActiveRect = new Rect(); final ViewTreeObserver.InternalInsetsInfo mLastGivenInsets = new ViewTreeObserver.InternalInsetsInfo(); @@ -1698,14 +1697,6 @@ public final class ViewRootImpl implements ViewParent, } } - if (activeRectChanged && mSurface.isValid()) { - mActiveRect.set(attachInfo.mSystemInsets.left, attachInfo.mSystemInsets.top, - mWidth - attachInfo.mSystemInsets.right, - mHeight - attachInfo.mSystemInsets.bottom); - //Log.i(TAG, "Active rect " + mWindowAttributes.getTitle() + ": " + mActiveRect); - mSurface.setActiveRect(mActiveRect); - } - final boolean didLayout = layoutRequested && !mStopped; boolean triggerGlobalLayoutListener = didLayout || attachInfo.mRecomputeGlobalAttributes; diff --git a/core/java/android/webkit/HTML5VideoFullScreen.java b/core/java/android/webkit/HTML5VideoFullScreen.java index ea8f316a814f..62bc502b79e2 100644 --- a/core/java/android/webkit/HTML5VideoFullScreen.java +++ b/core/java/android/webkit/HTML5VideoFullScreen.java @@ -323,7 +323,9 @@ public class HTML5VideoFullScreen extends HTML5VideoView @Override public void showControllerInFullScreen() { - mMediaController.show(0); + if (mMediaController != null) { + mMediaController.show(0); + } } // Other listeners functions: diff --git a/core/java/android/webkit/WebViewInputDispatcher.java b/core/java/android/webkit/WebViewInputDispatcher.java index 95414359f372..9328d8c04010 100644 --- a/core/java/android/webkit/WebViewInputDispatcher.java +++ b/core/java/android/webkit/WebViewInputDispatcher.java @@ -334,6 +334,7 @@ final class WebViewInputDispatcher { DispatchEvent d = obtainDispatchEventLocked(eventToEnqueue, eventType, 0, webKitXOffset, webKitYOffset, webKitScale); + updateStateTrackersLocked(d, event); enqueueEventLocked(d); } return true; @@ -787,7 +788,6 @@ final class WebViewInputDispatcher { flags = d.mFlags; - updateStateTrackersLocked(d, event); if (event == d.mEvent) { d.mEvent = null; // retain ownership of event, don't recycle it yet } diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index c4e1bf5391d7..3b4ec7dfaf07 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -6317,6 +6317,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te if (mTransientStateViews == null) { mTransientStateViews = new SparseArray<View>(); } + scrap.dispatchStartTemporaryDetach(); mTransientStateViews.put(position, scrap); } return; diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java index 4b7ec9ab2c3e..16490e8a0c01 100644 --- a/core/java/android/widget/Editor.java +++ b/core/java/android/widget/Editor.java @@ -16,6 +16,9 @@ package android.widget; +import com.android.internal.util.ArrayUtils; +import com.android.internal.widget.EditableInputConnection; + import android.R; import android.content.ClipData; import android.content.ClipData.Item; @@ -70,10 +73,10 @@ import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; -import android.view.ViewConfiguration; -import android.view.ViewGroup; import android.view.View.DragShadowBuilder; import android.view.View.OnClickListener; +import android.view.ViewConfiguration; +import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.view.ViewParent; import android.view.ViewTreeObserver; @@ -85,12 +88,12 @@ import android.view.inputmethod.ExtractedTextRequest; import android.view.inputmethod.InputConnection; import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView.OnItemClickListener; +import android.widget.Editor.InputContentType; +import android.widget.Editor.InputMethodState; +import android.widget.Editor.SelectionModifierCursorController; import android.widget.TextView.Drawables; import android.widget.TextView.OnEditorActionListener; -import com.android.internal.util.ArrayUtils; -import com.android.internal.widget.EditableInputConnection; - import java.text.BreakIterator; import java.util.Arrays; import java.util.Comparator; @@ -102,6 +105,8 @@ import java.util.HashMap; * @hide */ public class Editor { + private static final String TAG = "Editor"; + static final int BLINK = 500; private static final float[] TEMP_POSITION = new float[2]; private static int DRAG_SHADOW_MAX_TEXT_LENGTH = 20; @@ -151,6 +156,8 @@ public class Editor { boolean mInBatchEditControllers; boolean mShowSoftInputOnFocus = true; + boolean mPreserveDetachedSelection; + boolean mTemporaryDetach; SuggestionsPopupWindow mSuggestionsPopupWindow; SuggestionRangeSpan mSuggestionRangeSpan; @@ -190,6 +197,7 @@ public class Editor { showError(); mShowErrorAfterAttach = false; } + mTemporaryDetach = false; final ViewTreeObserver observer = mTextView.getViewTreeObserver(); // No need to create the controller. @@ -198,10 +206,22 @@ public class Editor { observer.addOnTouchModeChangeListener(mInsertionPointCursorController); } if (mSelectionModifierCursorController != null) { + mSelectionModifierCursorController.resetTouchOffsets(); observer.addOnTouchModeChangeListener(mSelectionModifierCursorController); } updateSpellCheckSpans(0, mTextView.getText().length(), true /* create the spell checker if needed */); + + if (mTextView.hasTransientState() && + mTextView.getSelectionStart() != mTextView.getSelectionEnd()) { + // Since transient state is reference counted make sure it stays matched + // with our own calls to it for managing selection. + // The action mode callback will set this back again when/if the action mode starts. + mTextView.setHasTransientState(false); + + // We had an active selection from before, start the selection mode. + startSelectionActionMode(); + } } void onDetachedFromWindow() { @@ -234,7 +254,10 @@ public class Editor { mSpellChecker = null; } + mPreserveDetachedSelection = true; hideControllers(); + mPreserveDetachedSelection = false; + mTemporaryDetach = false; } private void showError() { @@ -877,7 +900,9 @@ public class Editor { hideControllers(); Selection.setSelection((Spannable) mTextView.getText(), selStart, selEnd); } else { + if (mTemporaryDetach) mPreserveDetachedSelection = true; hideControllers(); + if (mTemporaryDetach) mPreserveDetachedSelection = false; downgradeEasyCorrectionSpans(); } @@ -2679,6 +2704,7 @@ public class Editor { if (menu.hasVisibleItems() || mode.getCustomView() != null) { getSelectionController().show(); + mTextView.setHasTransientState(true); return true; } else { return false; @@ -2707,7 +2733,17 @@ public class Editor { if (mCustomSelectionActionModeCallback != null) { mCustomSelectionActionModeCallback.onDestroyActionMode(mode); } - Selection.setSelection((Spannable) mTextView.getText(), mTextView.getSelectionEnd()); + + /* + * If we're ending this mode because we're detaching from a window, + * we still have selection state to preserve. Don't clear it, we'll + * bring back the selection mode when (if) we get reattached. + */ + if (!mPreserveDetachedSelection) { + Selection.setSelection((Spannable) mTextView.getText(), + mTextView.getSelectionEnd()); + mTextView.setHasTransientState(false); + } if (mSelectionModifierCursorController != null) { mSelectionModifierCursorController.hide(); diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 098a034b2e64..56eca01fb00b 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -7257,10 +7257,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener // usually because this instance is an editable field in a list if (!mDispatchTemporaryDetach) mTemporaryDetach = true; - // Because of View recycling in ListView, there is no easy way to know when a TextView with - // selection becomes visible again. Until a better solution is found, stop text selection - // mode (if any) as soon as this TextView is recycled. - if (mEditor != null) mEditor.hideControllers(); + // Tell the editor that we are temporarily detached. It can use this to preserve + // selection state as needed. + if (mEditor != null) mEditor.mTemporaryDetach = true; } @Override @@ -7269,6 +7268,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener // Only track when onStartTemporaryDetach() is called directly, // usually because this instance is an editable field in a list if (!mDispatchTemporaryDetach) mTemporaryDetach = false; + if (mEditor != null) mEditor.mTemporaryDetach = false; } @Override diff --git a/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java b/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java index 1fb60416c92c..d6ffba25a759 100644 --- a/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java +++ b/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java @@ -181,23 +181,37 @@ public class MultiWaveView extends View { mAlwaysTrackFinger = a.getBoolean(R.styleable.MultiWaveView_alwaysTrackFinger, false); mGravity = a.getInt(R.styleable.MultiWaveView_gravity, Gravity.TOP); - // Read chevron animation drawables - final int chevrons[] = { R.styleable.MultiWaveView_leftChevronDrawable, - R.styleable.MultiWaveView_rightChevronDrawable, - R.styleable.MultiWaveView_topChevronDrawable, - R.styleable.MultiWaveView_bottomChevronDrawable - }; - - for (int chevron : chevrons) { - TypedValue typedValue = a.peekValue(chevron); - for (int i = 0; i < mFeedbackCount; i++) { - mChevronDrawables.add( - typedValue != null ? new TargetDrawable(res, typedValue.resourceId) : null); + // Read array of chevron drawables + TypedValue outValue = new TypedValue(); + if (a.getValue(R.styleable.MultiWaveView_chevronDrawables, outValue)) { + ArrayList<TargetDrawable> chevrons = loadDrawableArray(outValue.resourceId); + for (int i = 0; i < chevrons.size(); i++) { + final TargetDrawable chevron = chevrons.get(i); + for (int k = 0; k < mFeedbackCount; k++) { + mChevronDrawables.add(chevron == null ? null : new TargetDrawable(chevron)); + } + } + } + + // Support old-style chevron specification if new specification not found + if (mChevronDrawables.size() == 0) { + final int chevronResIds[] = { + R.styleable.MultiWaveView_rightChevronDrawable, + R.styleable.MultiWaveView_topChevronDrawable, + R.styleable.MultiWaveView_leftChevronDrawable, + R.styleable.MultiWaveView_bottomChevronDrawable + }; + + for (int i = 0; i < chevronResIds.length; i++) { + TypedValue typedValue = a.peekValue(chevronResIds[i]); + for (int k = 0; k < mFeedbackCount; k++) { + mChevronDrawables.add( + typedValue != null ? new TargetDrawable(res, typedValue.resourceId) : null); + } } } // Read array of target drawables - TypedValue outValue = new TypedValue(); if (a.getValue(R.styleable.MultiWaveView_targetDrawables, outValue)) { internalSetTargetResources(outValue.resourceId); } @@ -318,23 +332,24 @@ public class MultiWaveView extends View { * mFeedbackCount items in the order: left, right, top, bottom. */ private void startChevronAnimation() { - final float r = mHandleDrawable.getWidth() * 0.4f; - final float chevronAnimationDistance = mOuterRadius * 0.9f / 2.0f; - final float from[][] = { - { -r, 0}, // left - { +r, 0}, // right - {0, -r}, // top - {0, +r} }; // bottom - final float to[][] = { - { -chevronAnimationDistance, 0}, // left - { chevronAnimationDistance, 0}, // right - { 0, -chevronAnimationDistance}, // top - { 0, +chevronAnimationDistance} }; // bottom - + final float chevronStartDistance = mHandleDrawable.getWidth() * 0.8f; + final float chevronStopDistance = mOuterRadius * 0.9f / 2.0f; mChevronAnimations.clear(); final float startScale = 0.5f; final float endScale = 2.0f; - for (int direction = 0; direction < 4; direction++) { + + final int directionCount = mFeedbackCount > 0 ? mChevronDrawables.size()/mFeedbackCount : 0; + + // Add an animation for all chevron drawables. There are mFeedbackCount drawables + // in each direction and directionCount directions. + for (int direction = 0; direction < directionCount; direction++) { + double angle = 2.0 * Math.PI * direction / directionCount; + final float sx = (float) Math.cos(angle); + final float sy = 0.0f - (float) Math.sin(angle); + final float[] xrange = new float[] + {sx * chevronStartDistance, sx * chevronStopDistance}; + final float[] yrange = new float[] + {sy * chevronStartDistance, sy * chevronStopDistance}; for (int count = 0; count < mFeedbackCount; count++) { int delay = count * CHEVRON_INCREMENTAL_DELAY; final TargetDrawable icon = mChevronDrawables.get(direction*mFeedbackCount + count); @@ -344,8 +359,8 @@ public class MultiWaveView extends View { mChevronAnimations.add(Tweener.to(icon, CHEVRON_ANIMATION_DURATION, "ease", mChevronAnimationInterpolator, "delay", delay, - "x", new float[] { from[direction][0], to[direction][0] }, - "y", new float[] { from[direction][1], to[direction][1] }, + "x", xrange, + "y", yrange, "alpha", new float[] {1.0f, 0.0f}, "scaleX", new float[] {startScale, endScale}, "scaleY", new float[] {startScale, endScale}, @@ -529,22 +544,31 @@ public class MultiWaveView extends View { } } - private void internalSetTargetResources(int resourceId) { + private ArrayList<TargetDrawable> loadDrawableArray(int resourceId) { Resources res = getContext().getResources(); TypedArray array = res.obtainTypedArray(resourceId); - int count = array.length(); - ArrayList<TargetDrawable> targetDrawables = new ArrayList<TargetDrawable>(count); + final int count = array.length(); + ArrayList<TargetDrawable> drawables = new ArrayList<TargetDrawable>(count); + for (int i = 0; i < count; i++) { + TypedValue value = array.peekValue(i); + TargetDrawable target = new TargetDrawable(res, value != null ? value.resourceId : 0); + drawables.add(target); + } + array.recycle(); + return drawables; + } + + private void internalSetTargetResources(int resourceId) { + mTargetDrawables = loadDrawableArray(resourceId); + mTargetResourceId = resourceId; + final int count = mTargetDrawables.size(); int maxWidth = mHandleDrawable.getWidth(); int maxHeight = mHandleDrawable.getHeight(); for (int i = 0; i < count; i++) { - TypedValue value = array.peekValue(i); - TargetDrawable target= new TargetDrawable(res, value != null ? value.resourceId : 0); - targetDrawables.add(target); + TargetDrawable target = mTargetDrawables.get(i); maxWidth = Math.max(maxWidth, target.getWidth()); maxHeight = Math.max(maxHeight, target.getHeight()); } - mTargetResourceId = resourceId; - mTargetDrawables = targetDrawables; if (mMaxTargetWidth != maxWidth || mMaxTargetHeight != maxHeight) { mMaxTargetWidth = maxWidth; mMaxTargetHeight = maxHeight; @@ -553,7 +577,6 @@ public class MultiWaveView extends View { updateTargetPositions(mWaveCenterX, mWaveCenterY); updateChevronPositions(mWaveCenterX, mWaveCenterY); } - array.recycle(); } /** diff --git a/core/java/com/android/internal/widget/multiwaveview/TargetDrawable.java b/core/java/com/android/internal/widget/multiwaveview/TargetDrawable.java index 0269819b7583..6392093c4434 100644 --- a/core/java/com/android/internal/widget/multiwaveview/TargetDrawable.java +++ b/core/java/com/android/internal/widget/multiwaveview/TargetDrawable.java @@ -85,6 +85,14 @@ public class TargetDrawable { setState(STATE_INACTIVE); } + public TargetDrawable(TargetDrawable other) { + mResourceId = other.mResourceId; + // Mutate the drawable so we can animate shared drawable properties. + mDrawable = other.mDrawable != null ? other.mDrawable.mutate() : null; + resizeDrawables(); + setState(STATE_INACTIVE); + } + public void setState(int [] state) { if (mDrawable instanceof StateListDrawable) { StateListDrawable d = (StateListDrawable) mDrawable; diff --git a/core/jni/android_os_Parcel.cpp b/core/jni/android_os_Parcel.cpp index 3dfaac39dec4..858ec79addcc 100644 --- a/core/jni/android_os_Parcel.cpp +++ b/core/jni/android_os_Parcel.cpp @@ -61,7 +61,10 @@ namespace android { static struct parcel_offsets_t { + jclass clazz; jfieldID mNativePtr; + jmethodID obtain; + jmethodID recycle; } gParcelOffsets; Parcel* parcelForJavaObject(JNIEnv* env, jobject obj) @@ -76,6 +79,16 @@ Parcel* parcelForJavaObject(JNIEnv* env, jobject obj) return NULL; } +jobject createJavaParcelObject(JNIEnv* env) +{ + return env->CallStaticObjectMethod(gParcelOffsets.clazz, gParcelOffsets.obtain); +} + +void recycleJavaParcelObject(JNIEnv* env, jobject parcelObj) +{ + env->CallVoidMethod(parcelObj, gParcelOffsets.recycle); +} + static jint android_os_Parcel_dataSize(JNIEnv* env, jclass clazz, jint nativePtr) { Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr); @@ -665,8 +678,11 @@ int register_android_os_Parcel(JNIEnv* env) clazz = env->FindClass(kParcelPathName); LOG_FATAL_IF(clazz == NULL, "Unable to find class android.os.Parcel"); - gParcelOffsets.mNativePtr - = env->GetFieldID(clazz, "mNativePtr", "I"); + gParcelOffsets.clazz = (jclass) env->NewGlobalRef(clazz); + gParcelOffsets.mNativePtr = env->GetFieldID(clazz, "mNativePtr", "I"); + gParcelOffsets.obtain = env->GetStaticMethodID(clazz, "obtain", + "()Landroid/os/Parcel;"); + gParcelOffsets.recycle = env->GetMethodID(clazz, "recycle", "()V"); return AndroidRuntime::registerNativeMethods( env, kParcelPathName, diff --git a/core/jni/android_os_Parcel.h b/core/jni/android_os_Parcel.h index 65f3819ef867..1db523a77ffd 100644 --- a/core/jni/android_os_Parcel.h +++ b/core/jni/android_os_Parcel.h @@ -23,5 +23,7 @@ namespace android { // Conversion from Java Parcel Object to C++ Parcel instance. // Note: does not type checking; must guarantee jobject is a Java Parcel extern Parcel* parcelForJavaObject(JNIEnv* env, jobject obj); +extern jobject createJavaParcelObject(JNIEnv* env); +extern void recycleJavaParcelObject(JNIEnv* env, jobject object); } diff --git a/core/jni/android_view_Surface.cpp b/core/jni/android_view_Surface.cpp index 8c4c42abbe9b..5739cbeb1cbf 100644 --- a/core/jni/android_view_Surface.cpp +++ b/core/jni/android_view_Surface.cpp @@ -345,32 +345,6 @@ static inline SkBitmap::Config convertPixelFormat(PixelFormat format) } } -static void Surface_setActiveRect(JNIEnv* env, jobject thiz, jobject activeRect) -{ - const sp<Surface>& surface(getSurface(env, thiz)); - if (!Surface::isValid(surface)) { - doThrowIAE(env); - return; - } - - android_native_rect_t nativeRect; - if (activeRect) { - nativeRect.left = env->GetIntField(activeRect, ro.l); - nativeRect.top = env->GetIntField(activeRect, ro.t); - nativeRect.right = env->GetIntField(activeRect, ro.r); - nativeRect.bottom= env->GetIntField(activeRect, ro.b); - } else { - doThrowIAE(env, "activeRect may not be null"); - return; - } - - int err = native_window_set_active_rect(surface.get(), &nativeRect); - if (err != NO_ERROR) { - doThrowRE(env, String8::format( - "Surface::setActiveRect returned an error: %d", err).string()); - } -} - static jobject Surface_lockCanvas(JNIEnv* env, jobject clazz, jobject dirtyRect) { const sp<Surface>& surface(getSurface(env, clazz)); @@ -773,6 +747,28 @@ static void Surface_setFreezeTint( } } +static void Surface_setWindowCrop(JNIEnv* env, jobject thiz, jobject crop) +{ + const sp<SurfaceControl>& surface(getSurfaceControl(env, thiz)); + if (surface == 0) return; + + Rect nativeCrop; + if (crop) { + nativeCrop.left = env->GetIntField(crop, ro.l); + nativeCrop.top = env->GetIntField(crop, ro.t); + nativeCrop.right = env->GetIntField(crop, ro.r); + nativeCrop.bottom= env->GetIntField(crop, ro.b); + } else { + nativeCrop.left = nativeCrop.top = nativeCrop.right = + nativeCrop.bottom = 0; + } + + status_t err = surface->setCrop(nativeCrop); + if (err<0 && err!=NO_INIT) { + doThrowIAE(env); + } +} + // ---------------------------------------------------------------------------- static void Surface_copyFrom( @@ -915,7 +911,7 @@ static JNINativeMethod gSurfaceMethods[] = { {"readFromParcel", "(Landroid/os/Parcel;)V", (void*)Surface_readFromParcel }, {"writeToParcel", "(Landroid/os/Parcel;I)V", (void*)Surface_writeToParcel }, {"isConsumerRunningBehind", "()Z", (void*)Surface_isConsumerRunningBehind }, - {"setActiveRect", "(Landroid/graphics/Rect;)V", (void*)Surface_setActiveRect }, + {"setWindowCrop", "(Landroid/graphics/Rect;)V", (void*)Surface_setWindowCrop }, }; void nativeClassInit(JNIEnv* env, jclass clazz) diff --git a/core/res/res/drawable-hdpi/progress_bg_holo_dark.9.png b/core/res/res/drawable-hdpi/progress_bg_holo_dark.9.png Binary files differindex 310c368e7a68..877fd2b5d6a3 100644 --- a/core/res/res/drawable-hdpi/progress_bg_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/progress_bg_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/progress_bg_holo_light.9.png b/core/res/res/drawable-hdpi/progress_bg_holo_light.9.png Binary files differindex 70cb7fc7e0bc..3f12166d259d 100644 --- a/core/res/res/drawable-hdpi/progress_bg_holo_light.9.png +++ b/core/res/res/drawable-hdpi/progress_bg_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/progress_primary_holo_dark.9.png b/core/res/res/drawable-hdpi/progress_primary_holo_dark.9.png Binary files differindex 1c269205e874..b73abba7dab9 100644 --- a/core/res/res/drawable-hdpi/progress_primary_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/progress_primary_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/progress_primary_holo_light.9.png b/core/res/res/drawable-hdpi/progress_primary_holo_light.9.png Binary files differindex 1c269205e874..2f76a22648d1 100644 --- a/core/res/res/drawable-hdpi/progress_primary_holo_light.9.png +++ b/core/res/res/drawable-hdpi/progress_primary_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/progress_secondary_holo_dark.9.png b/core/res/res/drawable-hdpi/progress_secondary_holo_dark.9.png Binary files differindex 40d0d1645cbf..a75d0dd5b619 100644 --- a/core/res/res/drawable-hdpi/progress_secondary_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/progress_secondary_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/progress_secondary_holo_light.9.png b/core/res/res/drawable-hdpi/progress_secondary_holo_light.9.png Binary files differindex 40d0d1645cbf..955b70807663 100644 --- a/core/res/res/drawable-hdpi/progress_secondary_holo_light.9.png +++ b/core/res/res/drawable-hdpi/progress_secondary_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/scrubber_control_disabled_holo.png b/core/res/res/drawable-hdpi/scrubber_control_disabled_holo.png Binary files differindex 167d7d3f159f..370242a9e321 100644 --- a/core/res/res/drawable-hdpi/scrubber_control_disabled_holo.png +++ b/core/res/res/drawable-hdpi/scrubber_control_disabled_holo.png diff --git a/core/res/res/drawable-hdpi/scrubber_control_focused_holo.png b/core/res/res/drawable-hdpi/scrubber_control_focused_holo.png Binary files differindex 4048260c76a8..eea2c3e89ff0 100644 --- a/core/res/res/drawable-hdpi/scrubber_control_focused_holo.png +++ b/core/res/res/drawable-hdpi/scrubber_control_focused_holo.png diff --git a/core/res/res/drawable-hdpi/scrubber_control_normal_holo.png b/core/res/res/drawable-hdpi/scrubber_control_normal_holo.png Binary files differindex 90e9c9c9142f..3c98ee9b65b6 100644 --- a/core/res/res/drawable-hdpi/scrubber_control_normal_holo.png +++ b/core/res/res/drawable-hdpi/scrubber_control_normal_holo.png diff --git a/core/res/res/drawable-hdpi/scrubber_control_pressed_holo.png b/core/res/res/drawable-hdpi/scrubber_control_pressed_holo.png Binary files differindex 4a3e57c8c845..4dc8999de6c2 100644 --- a/core/res/res/drawable-hdpi/scrubber_control_pressed_holo.png +++ b/core/res/res/drawable-hdpi/scrubber_control_pressed_holo.png diff --git a/core/res/res/drawable-hdpi/scrubber_primary_holo.9.png b/core/res/res/drawable-hdpi/scrubber_primary_holo.9.png Binary files differindex 0d13f7142a92..260a0a54ccf2 100644 --- a/core/res/res/drawable-hdpi/scrubber_primary_holo.9.png +++ b/core/res/res/drawable-hdpi/scrubber_primary_holo.9.png diff --git a/core/res/res/drawable-hdpi/scrubber_secondary_holo.9.png b/core/res/res/drawable-hdpi/scrubber_secondary_holo.9.png Binary files differindex b39d83166976..09f2d585488c 100644 --- a/core/res/res/drawable-hdpi/scrubber_secondary_holo.9.png +++ b/core/res/res/drawable-hdpi/scrubber_secondary_holo.9.png diff --git a/core/res/res/drawable-hdpi/scrubber_track_holo_dark.9.png b/core/res/res/drawable-hdpi/scrubber_track_holo_dark.9.png Binary files differindex c997bf0299fc..0c0ccda79df9 100644 --- a/core/res/res/drawable-hdpi/scrubber_track_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/scrubber_track_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/scrubber_track_holo_light.9.png b/core/res/res/drawable-hdpi/scrubber_track_holo_light.9.png Binary files differindex b2a22dcdb285..90528b1307e3 100644 --- a/core/res/res/drawable-hdpi/scrubber_track_holo_light.9.png +++ b/core/res/res/drawable-hdpi/scrubber_track_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/progress_bg_holo_dark.9.png b/core/res/res/drawable-mdpi/progress_bg_holo_dark.9.png Binary files differindex 3d946e545d1e..155e5464e32f 100644 --- a/core/res/res/drawable-mdpi/progress_bg_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/progress_bg_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/progress_bg_holo_light.9.png b/core/res/res/drawable-mdpi/progress_bg_holo_light.9.png Binary files differindex 4bb22f0e10e6..780b4b2560ef 100644 --- a/core/res/res/drawable-mdpi/progress_bg_holo_light.9.png +++ b/core/res/res/drawable-mdpi/progress_bg_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/progress_primary_holo_dark.9.png b/core/res/res/drawable-mdpi/progress_primary_holo_dark.9.png Binary files differindex ab8ec6984417..b86f4b51dd14 100644 --- a/core/res/res/drawable-mdpi/progress_primary_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/progress_primary_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/progress_primary_holo_light.9.png b/core/res/res/drawable-mdpi/progress_primary_holo_light.9.png Binary files differindex ab8ec6984417..6fb944577346 100644 --- a/core/res/res/drawable-mdpi/progress_primary_holo_light.9.png +++ b/core/res/res/drawable-mdpi/progress_primary_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/progress_secondary_holo_dark.9.png b/core/res/res/drawable-mdpi/progress_secondary_holo_dark.9.png Binary files differindex 7274274b178b..5651a7a1c3ca 100644 --- a/core/res/res/drawable-mdpi/progress_secondary_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/progress_secondary_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/progress_secondary_holo_light.9.png b/core/res/res/drawable-mdpi/progress_secondary_holo_light.9.png Binary files differindex 7274274b178b..9104cf94b5a7 100644 --- a/core/res/res/drawable-mdpi/progress_secondary_holo_light.9.png +++ b/core/res/res/drawable-mdpi/progress_secondary_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/scrubber_control_disabled_holo.png b/core/res/res/drawable-mdpi/scrubber_control_disabled_holo.png Binary files differindex 351d5393e5d9..630a450967d9 100644 --- a/core/res/res/drawable-mdpi/scrubber_control_disabled_holo.png +++ b/core/res/res/drawable-mdpi/scrubber_control_disabled_holo.png diff --git a/core/res/res/drawable-mdpi/scrubber_control_focused_holo.png b/core/res/res/drawable-mdpi/scrubber_control_focused_holo.png Binary files differindex e6072ee3133d..c9e4796c79ae 100644 --- a/core/res/res/drawable-mdpi/scrubber_control_focused_holo.png +++ b/core/res/res/drawable-mdpi/scrubber_control_focused_holo.png diff --git a/core/res/res/drawable-mdpi/scrubber_control_normal_holo.png b/core/res/res/drawable-mdpi/scrubber_control_normal_holo.png Binary files differindex 79682c16729a..fb96f4b460bf 100644 --- a/core/res/res/drawable-mdpi/scrubber_control_normal_holo.png +++ b/core/res/res/drawable-mdpi/scrubber_control_normal_holo.png diff --git a/core/res/res/drawable-mdpi/scrubber_control_pressed_holo.png b/core/res/res/drawable-mdpi/scrubber_control_pressed_holo.png Binary files differindex ba53c0b8923b..30e18cd3d2e2 100644 --- a/core/res/res/drawable-mdpi/scrubber_control_pressed_holo.png +++ b/core/res/res/drawable-mdpi/scrubber_control_pressed_holo.png diff --git a/core/res/res/drawable-mdpi/scrubber_primary_holo.9.png b/core/res/res/drawable-mdpi/scrubber_primary_holo.9.png Binary files differindex 7cbf2f2ccd78..a7910d68ea79 100644 --- a/core/res/res/drawable-mdpi/scrubber_primary_holo.9.png +++ b/core/res/res/drawable-mdpi/scrubber_primary_holo.9.png diff --git a/core/res/res/drawable-mdpi/scrubber_secondary_holo.9.png b/core/res/res/drawable-mdpi/scrubber_secondary_holo.9.png Binary files differindex 81772a851b53..985b62e5be5f 100644 --- a/core/res/res/drawable-mdpi/scrubber_secondary_holo.9.png +++ b/core/res/res/drawable-mdpi/scrubber_secondary_holo.9.png diff --git a/core/res/res/drawable-mdpi/scrubber_track_holo_dark.9.png b/core/res/res/drawable-mdpi/scrubber_track_holo_dark.9.png Binary files differindex b8037a36f032..b91a4ee731a9 100644 --- a/core/res/res/drawable-mdpi/scrubber_track_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/scrubber_track_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/scrubber_track_holo_light.9.png b/core/res/res/drawable-mdpi/scrubber_track_holo_light.9.png Binary files differindex 76df16ffd5a4..359ae4a1b75a 100644 --- a/core/res/res/drawable-mdpi/scrubber_track_holo_light.9.png +++ b/core/res/res/drawable-mdpi/scrubber_track_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/progress_bg_holo_dark.9.png b/core/res/res/drawable-xhdpi/progress_bg_holo_dark.9.png Binary files differindex 345f5d3067c1..c8b87d750138 100644 --- a/core/res/res/drawable-xhdpi/progress_bg_holo_dark.9.png +++ b/core/res/res/drawable-xhdpi/progress_bg_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/progress_bg_holo_light.9.png b/core/res/res/drawable-xhdpi/progress_bg_holo_light.9.png Binary files differindex c843ef3af22f..cbd19ac4fc4d 100644 --- a/core/res/res/drawable-xhdpi/progress_bg_holo_light.9.png +++ b/core/res/res/drawable-xhdpi/progress_bg_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/progress_primary_holo_dark.9.png b/core/res/res/drawable-xhdpi/progress_primary_holo_dark.9.png Binary files differindex c6c3f1ec2488..f1069fd98eb2 100644 --- a/core/res/res/drawable-xhdpi/progress_primary_holo_dark.9.png +++ b/core/res/res/drawable-xhdpi/progress_primary_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/progress_primary_holo_light.9.png b/core/res/res/drawable-xhdpi/progress_primary_holo_light.9.png Binary files differindex c6c3f1ec2488..e62123c4d45d 100644 --- a/core/res/res/drawable-xhdpi/progress_primary_holo_light.9.png +++ b/core/res/res/drawable-xhdpi/progress_primary_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/progress_secondary_holo_dark.9.png b/core/res/res/drawable-xhdpi/progress_secondary_holo_dark.9.png Binary files differindex 205b66e2cdef..06ae19c0421e 100644 --- a/core/res/res/drawable-xhdpi/progress_secondary_holo_dark.9.png +++ b/core/res/res/drawable-xhdpi/progress_secondary_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/progress_secondary_holo_light.9.png b/core/res/res/drawable-xhdpi/progress_secondary_holo_light.9.png Binary files differindex 205b66e2cdef..37c6d5ff1a33 100644 --- a/core/res/res/drawable-xhdpi/progress_secondary_holo_light.9.png +++ b/core/res/res/drawable-xhdpi/progress_secondary_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/scrubber_control_disabled_holo.png b/core/res/res/drawable-xhdpi/scrubber_control_disabled_holo.png Binary files differindex 8cf3868fedae..62be77c78902 100644 --- a/core/res/res/drawable-xhdpi/scrubber_control_disabled_holo.png +++ b/core/res/res/drawable-xhdpi/scrubber_control_disabled_holo.png diff --git a/core/res/res/drawable-xhdpi/scrubber_control_focused_holo.png b/core/res/res/drawable-xhdpi/scrubber_control_focused_holo.png Binary files differindex 417b35af56ce..754dd2ff0d9a 100644 --- a/core/res/res/drawable-xhdpi/scrubber_control_focused_holo.png +++ b/core/res/res/drawable-xhdpi/scrubber_control_focused_holo.png diff --git a/core/res/res/drawable-xhdpi/scrubber_control_normal_holo.png b/core/res/res/drawable-xhdpi/scrubber_control_normal_holo.png Binary files differindex 8053d886fc60..d546a73ae442 100644 --- a/core/res/res/drawable-xhdpi/scrubber_control_normal_holo.png +++ b/core/res/res/drawable-xhdpi/scrubber_control_normal_holo.png diff --git a/core/res/res/drawable-xhdpi/scrubber_control_pressed_holo.png b/core/res/res/drawable-xhdpi/scrubber_control_pressed_holo.png Binary files differindex d17fa7ded231..0b6207220535 100644 --- a/core/res/res/drawable-xhdpi/scrubber_control_pressed_holo.png +++ b/core/res/res/drawable-xhdpi/scrubber_control_pressed_holo.png diff --git a/core/res/res/drawable-xhdpi/scrubber_primary_holo.9.png b/core/res/res/drawable-xhdpi/scrubber_primary_holo.9.png Binary files differindex 073ff4c574e8..3b0b24191290 100644 --- a/core/res/res/drawable-xhdpi/scrubber_primary_holo.9.png +++ b/core/res/res/drawable-xhdpi/scrubber_primary_holo.9.png diff --git a/core/res/res/drawable-xhdpi/scrubber_secondary_holo.9.png b/core/res/res/drawable-xhdpi/scrubber_secondary_holo.9.png Binary files differindex 4c7b0aacdbfc..90990347c7f6 100644 --- a/core/res/res/drawable-xhdpi/scrubber_secondary_holo.9.png +++ b/core/res/res/drawable-xhdpi/scrubber_secondary_holo.9.png diff --git a/core/res/res/drawable-xhdpi/scrubber_track_holo_dark.9.png b/core/res/res/drawable-xhdpi/scrubber_track_holo_dark.9.png Binary files differindex a217a90d4629..bfb20481511f 100644 --- a/core/res/res/drawable-xhdpi/scrubber_track_holo_dark.9.png +++ b/core/res/res/drawable-xhdpi/scrubber_track_holo_dark.9.png diff --git a/core/res/res/drawable-xhdpi/scrubber_track_holo_light.9.png b/core/res/res/drawable-xhdpi/scrubber_track_holo_light.9.png Binary files differindex 551fb0ae7af5..a7d396de21a4 100644 --- a/core/res/res/drawable-xhdpi/scrubber_track_holo_light.9.png +++ b/core/res/res/drawable-xhdpi/scrubber_track_holo_light.9.png diff --git a/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock.xml b/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock.xml index 66cf98d95a79..055955e55c54 100644 --- a/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock.xml +++ b/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock.xml @@ -98,7 +98,7 @@ android:outerRadius="@dimen/multiwaveview_target_placement_radius" android:snapMargin="@dimen/multiwaveview_snap_margin" android:hitRadius="@dimen/multiwaveview_hit_radius" - android:rightChevronDrawable="@drawable/ic_lockscreen_chevron_right" + android:chevronDrawables="@array/lockscreen_chevron_drawables" android:feedbackCount="3" android:vibrationDuration="20" /> diff --git a/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock_land.xml b/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock_land.xml index 65b442b9bae2..e68a0c18f930 100644 --- a/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock_land.xml +++ b/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock_land.xml @@ -98,7 +98,7 @@ android:outerRadius="@dimen/multiwaveview_target_placement_radius" android:snapMargin="@dimen/multiwaveview_snap_margin" android:hitRadius="@dimen/multiwaveview_hit_radius" - android:rightChevronDrawable="@drawable/ic_lockscreen_chevron_right" + android:chevronDrawables="@array/lockscreen_chevron_drawables" android:feedbackCount="3" android:vibrationDuration="20" /> diff --git a/core/res/res/layout/keyguard_screen_tab_unlock.xml b/core/res/res/layout/keyguard_screen_tab_unlock.xml index 3fd3023294c1..2dcb774e599a 100644 --- a/core/res/res/layout/keyguard_screen_tab_unlock.xml +++ b/core/res/res/layout/keyguard_screen_tab_unlock.xml @@ -139,7 +139,7 @@ android:outerRadius="@dimen/multiwaveview_target_placement_radius" android:snapMargin="@dimen/multiwaveview_snap_margin" android:hitRadius="@dimen/multiwaveview_hit_radius" - android:rightChevronDrawable="@drawable/ic_lockscreen_chevron_right" + android:chevronDrawables="@array/lockscreen_chevron_drawables" android:feedbackCount="3" android:vibrationDuration="20" /> diff --git a/core/res/res/layout/keyguard_screen_tab_unlock_land.xml b/core/res/res/layout/keyguard_screen_tab_unlock_land.xml index cd03c108a22e..10ddd1eb56d4 100644 --- a/core/res/res/layout/keyguard_screen_tab_unlock_land.xml +++ b/core/res/res/layout/keyguard_screen_tab_unlock_land.xml @@ -144,7 +144,7 @@ android:outerRadius="@dimen/multiwaveview_target_placement_radius" android:snapMargin="@dimen/multiwaveview_snap_margin" android:hitRadius="@dimen/multiwaveview_hit_radius" - android:topChevronDrawable="@drawable/ic_lockscreen_chevron_up" + android:chevronDrawables="@array/lockscreen_chevron_drawables" android:feedbackCount="3" android:vibrationDuration="20" /> diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml index 86e21a949a85..a95541e805d5 100644 --- a/core/res/res/values-be/strings.xml +++ b/core/res/res/values-be/strings.xml @@ -1311,7 +1311,6 @@ <string name="sending" msgid="3245653681008218030">"Адпраўка..."</string> <string name="launchBrowserDefault" msgid="2057951947297614725">"Запусцiць браўзер?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Прыняць выклік?"</string> - <!-- no translation found for activity_resolver_use_always (8017770747801494933) --> - <skip /> + <string name="activity_resolver_use_always" msgid="8017770747801494933">"Заўсёды"</string> <string name="activity_resolver_use_once" msgid="405646673463328329">"Толькі адзін раз"</string> </resources> diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml index d5bb21eeddbb..6ebe576bc2ab 100644 --- a/core/res/res/values-bg/strings.xml +++ b/core/res/res/values-bg/strings.xml @@ -1311,7 +1311,6 @@ <string name="sending" msgid="3245653681008218030">"Изпраща се..."</string> <string name="launchBrowserDefault" msgid="2057951947297614725">"Да се стартира ли браузърът?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Да се приеме ли обаждането?"</string> - <!-- no translation found for activity_resolver_use_always (8017770747801494933) --> - <skip /> + <string name="activity_resolver_use_always" msgid="8017770747801494933">"Винаги"</string> <string name="activity_resolver_use_once" msgid="405646673463328329">"Само веднъж"</string> </resources> diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml index 3a0c936b5920..fb8f466df782 100644 --- a/core/res/res/values-cs/strings.xml +++ b/core/res/res/values-cs/strings.xml @@ -1311,7 +1311,6 @@ <string name="sending" msgid="3245653681008218030">"Odesílání..."</string> <string name="launchBrowserDefault" msgid="2057951947297614725">"Spustit prohlížeč?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Přijmout hovor?"</string> - <!-- no translation found for activity_resolver_use_always (8017770747801494933) --> - <skip /> + <string name="activity_resolver_use_always" msgid="8017770747801494933">"Vždy"</string> <string name="activity_resolver_use_once" msgid="405646673463328329">"Pouze jednou"</string> </resources> diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml index 81f420463dfc..88f8fdbb234c 100644 --- a/core/res/res/values-et/strings.xml +++ b/core/res/res/values-et/strings.xml @@ -1311,7 +1311,6 @@ <string name="sending" msgid="3245653681008218030">"Saatmine ..."</string> <string name="launchBrowserDefault" msgid="2057951947297614725">"Kas käivitada brauser?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Kas vastata kõnele?"</string> - <!-- no translation found for activity_resolver_use_always (8017770747801494933) --> - <skip /> + <string name="activity_resolver_use_always" msgid="8017770747801494933">"Alati"</string> <string name="activity_resolver_use_once" msgid="405646673463328329">"Ainult üks kord"</string> </resources> diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml index ccb47ef20b19..55f923f9f93c 100644 --- a/core/res/res/values-hr/strings.xml +++ b/core/res/res/values-hr/strings.xml @@ -1311,7 +1311,6 @@ <string name="sending" msgid="3245653681008218030">"Slanje..."</string> <string name="launchBrowserDefault" msgid="2057951947297614725">"Pokrenuti preglednik?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Prihvatiti poziv?"</string> - <!-- no translation found for activity_resolver_use_always (8017770747801494933) --> - <skip /> + <string name="activity_resolver_use_always" msgid="8017770747801494933">"Uvijek"</string> <string name="activity_resolver_use_once" msgid="405646673463328329">"Samo jednom"</string> </resources> diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml index 753e7fd69dd0..616b9be9a7b1 100644 --- a/core/res/res/values-in/strings.xml +++ b/core/res/res/values-in/strings.xml @@ -175,14 +175,10 @@ <string name="permgroupdesc_location" msgid="5704679763124170100">"Memonitor lokasi fisik Anda."</string> <string name="permgrouplab_network" msgid="5808983377727109831">"Komunikasi jaringan"</string> <string name="permgroupdesc_network" msgid="4478299413241861987">"Mengakses berbagai fitur jaringan."</string> - <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) --> - <skip /> - <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) --> - <skip /> - <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) --> - <skip /> - <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) --> - <skip /> + <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string> + <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Mengakses perangkat dan jaringan melalui Bluetooth."</string> + <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Jaringan jarak pendek"</string> + <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Mengakses perangkat melalui jaringan jarak pendek seperti NFC."</string> <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Setelan Audio"</string> <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Mengubah setelan audio."</string> <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Memengaruhi Baterai"</string> @@ -195,8 +191,7 @@ <skip /> <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) --> <skip /> - <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) --> - <skip /> + <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Menambahkan kata ke kamus pengguna."</string> <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Bookmark dan Riwayat"</string> <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Akses langsung ke bookmark dan riwayat browser."</string> <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarm"</string> @@ -1090,8 +1085,7 @@ <string name="date_time_set" msgid="5777075614321087758">"Setel"</string> <string name="date_time_done" msgid="2507683751759308828">"Selesai"</string> <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"BARU: "</font></string> - <!-- no translation found for perms_description_app (5139836143293299417) --> - <skip /> + <string name="perms_description_app" msgid="5139836143293299417">"Disediakan oleh <xliff:g id="APP_NAME">%1$s</xliff:g>."</string> <string name="no_permissions" msgid="7283357728219338112">"Tidak perlu izin"</string> <string name="usb_storage_activity_title" msgid="4465055157209648641">"Penyimpanan massal USB"</string> <string name="usb_storage_title" msgid="5901459041398751495">"USB terhubung"</string> @@ -1321,8 +1315,6 @@ <string name="sending" msgid="3245653681008218030">"Mengirim..."</string> <string name="launchBrowserDefault" msgid="2057951947297614725">"Luncurkan Browser?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Terima panggilan?"</string> - <!-- no translation found for activity_resolver_use_always (8017770747801494933) --> - <skip /> - <!-- no translation found for activity_resolver_use_once (405646673463328329) --> - <skip /> + <string name="activity_resolver_use_always" msgid="8017770747801494933">"Selalu"</string> + <string name="activity_resolver_use_once" msgid="405646673463328329">"Sekali Saja"</string> </resources> diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml index 56f4bc0d0df3..14730d958b16 100644 --- a/core/res/res/values-ko/strings.xml +++ b/core/res/res/values-ko/strings.xml @@ -175,28 +175,20 @@ <string name="permgroupdesc_location" msgid="5704679763124170100">"실제 위치 모니터링"</string> <string name="permgrouplab_network" msgid="5808983377727109831">"네트워크 통신"</string> <string name="permgroupdesc_network" msgid="4478299413241861987">"다양한 네트워크 기능에 액세스할 수 있도록 합니다."</string> - <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) --> - <skip /> - <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) --> - <skip /> - <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) --> - <skip /> - <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) --> - <skip /> + <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"블루투스"</string> + <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"블루투스를 통해 기기 및 네트워크에 액세스"</string> + <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"단거리 네트워크"</string> + <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"NFC와 같은 단거리 네트워크를 통해 기기에 액세스"</string> <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"오디오 설정"</string> <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"오디오 설정을 변경합니다."</string> <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"배터리 소모"</string> <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"배터리를 빨리 소모시킬 수 있는 기능을 사용합니다."</string> <string name="permgrouplab_calendar" msgid="5863508437783683902">"캘린더"</string> <string name="permgroupdesc_calendar" msgid="5777534316982184416">"캘린더 및 일정에 직접 액세스합니다."</string> - <!-- no translation found for permgrouplab_dictionary (4148597128843641379) --> - <skip /> - <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) --> - <skip /> - <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) --> - <skip /> - <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) --> - <skip /> + <string name="permgrouplab_dictionary" msgid="4148597128843641379">"사용자 사전 읽기"</string> + <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"사용자 사전의 단어 읽기"</string> + <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"사용자 사전 쓰기"</string> + <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"사용자 사전에 단어 추가"</string> <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"북마크 및 기록"</string> <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"북마크 및 브라우저 기록에 직접 액세스합니다."</string> <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"알람"</string> @@ -569,8 +561,7 @@ <string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"앱이 사진과 미디어를 포함하고 있을 수 있는 USB 저장소의 콘텐츠를 읽도록 허용합니다."</string> <string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"앱이 사진과 미디어를 포함하고 있을 수 있는 SD 카드의 콘텐츠를 읽도록 허용합니다."</string> <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"USB 저장소의 콘텐츠 수정 또는 삭제"</string> - <!-- no translation found for permlab_sdcardWrite (8805693630050458763) --> - <skip /> + <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"SD 카드의 콘텐츠 수정 또는 삭제"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"앱이 USB 저장소에 쓸 수 있도록 허용합니다."</string> <string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"앱이 SD 카드에 쓸 수 있도록 허용합니다."</string> <string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"내부 미디어 저장소 콘텐츠 수정/삭제"</string> @@ -1090,8 +1081,7 @@ <string name="date_time_set" msgid="5777075614321087758">"설정"</string> <string name="date_time_done" msgid="2507683751759308828">"완료"</string> <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"신규: "</font></string> - <!-- no translation found for perms_description_app (5139836143293299417) --> - <skip /> + <string name="perms_description_app" msgid="5139836143293299417">"<xliff:g id="APP_NAME">%1$s</xliff:g> 제공"</string> <string name="no_permissions" msgid="7283357728219338112">"권한 필요 없음"</string> <string name="usb_storage_activity_title" msgid="4465055157209648641">"USB 대용량 저장소"</string> <string name="usb_storage_title" msgid="5901459041398751495">"USB 연결됨"</string> @@ -1321,8 +1311,6 @@ <string name="sending" msgid="3245653681008218030">"전송 중..."</string> <string name="launchBrowserDefault" msgid="2057951947297614725">"브라우저를 실행하시겠습니까?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"통화를 수락하시겠습니까?"</string> - <!-- no translation found for activity_resolver_use_always (8017770747801494933) --> - <skip /> - <!-- no translation found for activity_resolver_use_once (405646673463328329) --> - <skip /> + <string name="activity_resolver_use_always" msgid="8017770747801494933">"항상"</string> + <string name="activity_resolver_use_once" msgid="405646673463328329">"한 번만"</string> </resources> diff --git a/core/res/res/values-land/arrays.xml b/core/res/res/values-land/arrays.xml index 537d27c503ec..7095c02696d3 100644 --- a/core/res/res/values-land/arrays.xml +++ b/core/res/res/values-land/arrays.xml @@ -69,4 +69,11 @@ <item>@string/description_target_camera</item> </array> + <array name="lockscreen_chevron_drawables"> + <item>@null</item> + <item>@drawable/ic_lockscreen_chevron_up</item> + <item>@null</item> + <item>@null</item> + </array> + </resources> diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml index 927e2393bf70..47aa00a83041 100644 --- a/core/res/res/values-ms/strings.xml +++ b/core/res/res/values-ms/strings.xml @@ -1311,7 +1311,6 @@ <string name="sending" msgid="3245653681008218030">"Menghantar…"</string> <string name="launchBrowserDefault" msgid="2057951947297614725">"Lancarkan Penyemak Imbas?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Terima panggilan?"</string> - <!-- no translation found for activity_resolver_use_always (8017770747801494933) --> - <skip /> + <string name="activity_resolver_use_always" msgid="8017770747801494933">"Sentiasa"</string> <string name="activity_resolver_use_once" msgid="405646673463328329">"Hanya Sekali"</string> </resources> diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml index 88db9f48929a..d39c75cb95cf 100644 --- a/core/res/res/values-nb/strings.xml +++ b/core/res/res/values-nb/strings.xml @@ -1321,8 +1321,7 @@ <string name="sending" msgid="3245653681008218030">"Sender …"</string> <string name="launchBrowserDefault" msgid="2057951947297614725">"Vil du starte nettleseren?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Vil du besvare anropet?"</string> - <!-- no translation found for activity_resolver_use_always (8017770747801494933) --> - <skip /> + <string name="activity_resolver_use_always" msgid="8017770747801494933">"Alltid"</string> <!-- no translation found for activity_resolver_use_once (405646673463328329) --> <skip /> </resources> diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml index 62c839b13743..60ea8e8545dd 100644 --- a/core/res/res/values-pl/strings.xml +++ b/core/res/res/values-pl/strings.xml @@ -1321,8 +1321,7 @@ <string name="sending" msgid="3245653681008218030">"Wysyłanie..."</string> <string name="launchBrowserDefault" msgid="2057951947297614725">"Uruchomić przeglądarkę?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Odebrać połączenie?"</string> - <!-- no translation found for activity_resolver_use_always (8017770747801494933) --> - <skip /> + <string name="activity_resolver_use_always" msgid="8017770747801494933">"Zawsze"</string> <!-- no translation found for activity_resolver_use_once (405646673463328329) --> <skip /> </resources> diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml index 182534644a20..4bb3b2f6e9fa 100644 --- a/core/res/res/values-pt-rPT/strings.xml +++ b/core/res/res/values-pt-rPT/strings.xml @@ -175,28 +175,20 @@ <string name="permgroupdesc_location" msgid="5704679763124170100">"Monitorizar a sua localização física."</string> <string name="permgrouplab_network" msgid="5808983377727109831">"Comunicação de rede"</string> <string name="permgroupdesc_network" msgid="4478299413241861987">"Aceder a várias funcionalidades de rede."</string> - <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) --> - <skip /> - <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) --> - <skip /> - <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) --> - <skip /> - <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) --> - <skip /> + <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string> + <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Aceder a dispositivos e redes através de Bluetooth."</string> + <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Redes de Curto Alcance"</string> + <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Aceder a dispositivos através de redes de curto alcance como NFC."</string> <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Definições de Áudio"</string> <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Alterar as definições de áudio."</string> <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Afetar a Bateria"</string> <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Utilizar funcionalidades que podem descarregar rapidamente a bateria."</string> <string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendário"</string> <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Acesso direto ao calendário e eventos."</string> - <!-- no translation found for permgrouplab_dictionary (4148597128843641379) --> - <skip /> - <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) --> - <skip /> - <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) --> - <skip /> - <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) --> - <skip /> + <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Ler Dicionário do Utilizador"</string> + <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Ler palavras no dicionário do utilizador."</string> + <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Escrever no Dicionário do Utilizador"</string> + <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Adicionar palavras ao dicionário do utilizador."</string> <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Marcadores e Histórico"</string> <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Acesso direto aos marcadores e histórico do navegador."</string> <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarme"</string> @@ -569,8 +561,7 @@ <string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Permitir que aplic. leia cont. da mem. USB, que poderão incluir fotogr. e multimédia."</string> <string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Permite que a aplicação leia os conteúdos do cartão SD que poderão incluir fotografias e elementos multimédia."</string> <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"modificar ou eliminar os conteúdos da memória USB"</string> - <!-- no translation found for permlab_sdcardWrite (8805693630050458763) --> - <skip /> + <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"modificar ou eliminar os conteúdos do cartão SD"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Permite que a aplicação escreva na unidade de armazenamento USB."</string> <string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Permite que a aplicação escreva no cartão SD."</string> <string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"modif./elim. armaz. interno"</string> @@ -1090,8 +1081,7 @@ <string name="date_time_set" msgid="5777075614321087758">"Definir"</string> <string name="date_time_done" msgid="2507683751759308828">"Concluído"</string> <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NOVA: "</font></string> - <!-- no translation found for perms_description_app (5139836143293299417) --> - <skip /> + <string name="perms_description_app" msgid="5139836143293299417">"Fornecido por <xliff:g id="APP_NAME">%1$s</xliff:g>."</string> <string name="no_permissions" msgid="7283357728219338112">"Não são necessárias permissões"</string> <string name="usb_storage_activity_title" msgid="4465055157209648641">"Armazenamento em massa USB"</string> <string name="usb_storage_title" msgid="5901459041398751495">"Ligado através de USB"</string> @@ -1323,6 +1313,5 @@ <string name="SetupCallDefault" msgid="5834948469253758575">"Aceitar chamada?"</string> <!-- no translation found for activity_resolver_use_always (8017770747801494933) --> <skip /> - <!-- no translation found for activity_resolver_use_once (405646673463328329) --> - <skip /> + <string name="activity_resolver_use_once" msgid="405646673463328329">"Só Uma Vez"</string> </resources> diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml index 66ec3a86150e..ba10acd543a8 100644 --- a/core/res/res/values-pt/strings.xml +++ b/core/res/res/values-pt/strings.xml @@ -1311,7 +1311,6 @@ <string name="sending" msgid="3245653681008218030">"Enviando..."</string> <string name="launchBrowserDefault" msgid="2057951947297614725">"Abrir Navegador?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Aceitar chamada?"</string> - <!-- no translation found for activity_resolver_use_always (8017770747801494933) --> - <skip /> + <string name="activity_resolver_use_always" msgid="8017770747801494933">"Sempre"</string> <string name="activity_resolver_use_once" msgid="405646673463328329">"Só uma vez"</string> </resources> diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml index 61428cd14add..45783d133f48 100644 --- a/core/res/res/values-ro/strings.xml +++ b/core/res/res/values-ro/strings.xml @@ -1321,8 +1321,7 @@ <string name="sending" msgid="3245653681008218030">"Se trimite..."</string> <string name="launchBrowserDefault" msgid="2057951947297614725">"Lansaţi browserul?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Acceptaţi apelul?"</string> - <!-- no translation found for activity_resolver_use_always (8017770747801494933) --> - <skip /> + <string name="activity_resolver_use_always" msgid="8017770747801494933">"Întotdeauna"</string> <!-- no translation found for activity_resolver_use_once (405646673463328329) --> <skip /> </resources> diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml index db562c7692b5..79cb76a07404 100644 --- a/core/res/res/values-sk/strings.xml +++ b/core/res/res/values-sk/strings.xml @@ -175,28 +175,20 @@ <string name="permgroupdesc_location" msgid="5704679763124170100">"Sledovanie vašej fyzickej polohy."</string> <string name="permgrouplab_network" msgid="5808983377727109831">"Sieťová komunikácia"</string> <string name="permgroupdesc_network" msgid="4478299413241861987">"Prístup k rôznym funkciám siete."</string> - <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) --> - <skip /> - <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) --> - <skip /> - <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) --> - <skip /> - <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) --> - <skip /> + <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string> + <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Prístup k zariadeniam a sieťam prostredníctvom rozhrania Bluetooth."</string> + <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Siete krátkeho dosahu"</string> + <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Prístup k zariadeniam prostredníctvom sietí krátkeho dosahu (napr. NFC)."</string> <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Nastavenia zvuku"</string> <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Zmena nastavení zvuku."</string> <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Má vplyv na batériu"</string> <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Používanie funkcií, ktoré môžu rýchlo vyčerpať batériu."</string> <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalendár"</string> <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Priamy prístup ku kalendáru a udalostiam."</string> - <!-- no translation found for permgrouplab_dictionary (4148597128843641379) --> - <skip /> - <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) --> - <skip /> - <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) --> - <skip /> - <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) --> - <skip /> + <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Čítanie požívateľského slovníka"</string> + <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Čítanie slov v používateľskom slovníku."</string> + <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Zápis do používateľského slovníka"</string> + <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Pridávanie slov do používateľského slovníka."</string> <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Záložky a história"</string> <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Priamy prístup k záložkám a histórii prehliadača."</string> <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Budík"</string> @@ -569,8 +561,7 @@ <string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Umožňuje aplikácii čítať obsah úložiska USB, ktorý môže obsahovať fotografie a mediálne údaje."</string> <string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Umožňuje aplikácii čítať obsah karty SD, ktorý môže zahrnovať fotografie a mediálne údaje."</string> <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"upraviť alebo odstrániť obsah úložiska USB"</string> - <!-- no translation found for permlab_sdcardWrite (8805693630050458763) --> - <skip /> + <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"úprava alebo odstránenie obsahu na karte SD"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Umožňuje aplikácii zápis do ukladacieho priestoru USB."</string> <string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Umožňuje aplikácii zápis na kartu SD."</string> <string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"úprava alebo odstránenie obsahu interného ukladacieho priestoru média"</string> @@ -1090,8 +1081,7 @@ <string name="date_time_set" msgid="5777075614321087758">"Nastaviť"</string> <string name="date_time_done" msgid="2507683751759308828">"Hotovo"</string> <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NOVINKA: "</font></string> - <!-- no translation found for perms_description_app (5139836143293299417) --> - <skip /> + <string name="perms_description_app" msgid="5139836143293299417">"Poskytuje aplikácia <xliff:g id="APP_NAME">%1$s</xliff:g>."</string> <string name="no_permissions" msgid="7283357728219338112">"Nevyžadujú sa žiadne oprávnenia."</string> <string name="usb_storage_activity_title" msgid="4465055157209648641">"Veľkokapacitné úložisko USB"</string> <string name="usb_storage_title" msgid="5901459041398751495">"Zariadenie USB pripojené"</string> @@ -1321,8 +1311,6 @@ <string name="sending" msgid="3245653681008218030">"Odosielanie..."</string> <string name="launchBrowserDefault" msgid="2057951947297614725">"Spustiť prehliadač?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Prijať hovor?"</string> - <!-- no translation found for activity_resolver_use_always (8017770747801494933) --> - <skip /> - <!-- no translation found for activity_resolver_use_once (405646673463328329) --> - <skip /> + <string name="activity_resolver_use_always" msgid="8017770747801494933">"Vždy"</string> + <string name="activity_resolver_use_once" msgid="405646673463328329">"Len raz"</string> </resources> diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml index 11a733d5fc54..e943ddaea48c 100644 --- a/core/res/res/values-sr/strings.xml +++ b/core/res/res/values-sr/strings.xml @@ -1321,8 +1321,7 @@ <string name="sending" msgid="3245653681008218030">"Слање..."</string> <string name="launchBrowserDefault" msgid="2057951947297614725">"Желите ли да покренете прегледач?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Желите ли да прихватите позив?"</string> - <!-- no translation found for activity_resolver_use_always (8017770747801494933) --> - <skip /> + <string name="activity_resolver_use_always" msgid="8017770747801494933">"Увек"</string> <!-- no translation found for activity_resolver_use_once (405646673463328329) --> <skip /> </resources> diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml index 95447016ee24..70f81434b794 100644 --- a/core/res/res/values-tl/strings.xml +++ b/core/res/res/values-tl/strings.xml @@ -1311,7 +1311,6 @@ <string name="sending" msgid="3245653681008218030">"Ipinapadala..."</string> <string name="launchBrowserDefault" msgid="2057951947297614725">"Ilunsad ang Browser?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Tanggapin ang tawag?"</string> - <!-- no translation found for activity_resolver_use_always (8017770747801494933) --> - <skip /> + <string name="activity_resolver_use_always" msgid="8017770747801494933">"Palagi"</string> <string name="activity_resolver_use_once" msgid="405646673463328329">"Isang Beses Lang"</string> </resources> diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml index 4a1a0bcdcc0a..150f728fd484 100644 --- a/core/res/res/values-uk/strings.xml +++ b/core/res/res/values-uk/strings.xml @@ -175,28 +175,20 @@ <string name="permgroupdesc_location" msgid="5704679763124170100">"Відстежувати ваше фізичне місцезнаходження."</string> <string name="permgrouplab_network" msgid="5808983377727109831">"Підключення до мережі"</string> <string name="permgroupdesc_network" msgid="4478299413241861987">"Отримувати доступ до різних функцій мережі."</string> - <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) --> - <skip /> - <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) --> - <skip /> - <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) --> - <skip /> - <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) --> - <skip /> + <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string> + <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Отримувати доступ до пристроїв і мереж через Bluetooth."</string> + <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Мережі короткого діапазону"</string> + <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Отримувати доступ до пристроїв через мережі короткого діапазону, як-от NFC."</string> <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Налаштування звуку"</string> <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Зміна налаштувань звуку."</string> <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Заряд акумулятора"</string> <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Використання функцій, які швидко зменшують заряд акумулятора."</string> <string name="permgrouplab_calendar" msgid="5863508437783683902">"Календар"</string> <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Безпосередній доступ до календаря та подій."</string> - <!-- no translation found for permgrouplab_dictionary (4148597128843641379) --> - <skip /> - <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) --> - <skip /> - <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) --> - <skip /> - <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) --> - <skip /> + <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Читати словник користувача"</string> + <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Читати слова в словнику користувача."</string> + <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Писати в словник користувача"</string> + <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Додавати слова в словник користувача."</string> <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Закладки й історія"</string> <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Безпосередній доступ до закладок та історії веб-переглядача."</string> <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Сигнал"</string> @@ -569,8 +561,7 @@ <string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Дозволяє програмі читати вміст носія USB, що може включати фотографії й медіа-файли."</string> <string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Дозволяє програмі читати вміст карти SD, що може включати фотографії й медіа-файли."</string> <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"змінювати чи видаляти вміст USB"</string> - <!-- no translation found for permlab_sdcardWrite (8805693630050458763) --> - <skip /> + <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"змінювати чи видаляти вміст на карті SD"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Дозволяє програмі писати на носій USB"</string> <string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Дозволяє програмі записувати на карту SD."</string> <string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"змінювати/видаляти вміст внутр. сховища даних"</string> @@ -1090,8 +1081,7 @@ <string name="date_time_set" msgid="5777075614321087758">"Застосувати"</string> <string name="date_time_done" msgid="2507683751759308828">"Готово"</string> <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"НОВИЙ: "</font></string> - <!-- no translation found for perms_description_app (5139836143293299417) --> - <skip /> + <string name="perms_description_app" msgid="5139836143293299417">"Надано <xliff:g id="APP_NAME">%1$s</xliff:g>."</string> <string name="no_permissions" msgid="7283357728219338112">"Дозвіл не потрібний"</string> <string name="usb_storage_activity_title" msgid="4465055157209648641">"USB великої ємності"</string> <string name="usb_storage_title" msgid="5901459041398751495">"Підкл. через USB"</string> @@ -1321,8 +1311,6 @@ <string name="sending" msgid="3245653681008218030">"Надсилання…"</string> <string name="launchBrowserDefault" msgid="2057951947297614725">"Запустити веб-переглядач?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Прийняти виклик?"</string> - <!-- no translation found for activity_resolver_use_always (8017770747801494933) --> - <skip /> - <!-- no translation found for activity_resolver_use_once (405646673463328329) --> - <skip /> + <string name="activity_resolver_use_always" msgid="8017770747801494933">"Завжди"</string> + <string name="activity_resolver_use_once" msgid="405646673463328329">"Лише один раз"</string> </resources> diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index ea037972531f..b2ba9973999c 100644 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -1311,7 +1311,6 @@ <string name="sending" msgid="3245653681008218030">"正在发送..."</string> <string name="launchBrowserDefault" msgid="2057951947297614725">"要启动浏览器吗?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"要接听电话吗?"</string> - <!-- no translation found for activity_resolver_use_always (8017770747801494933) --> - <skip /> + <string name="activity_resolver_use_always" msgid="8017770747801494933">"始终"</string> <string name="activity_resolver_use_once" msgid="405646673463328329">"仅此一次"</string> </resources> diff --git a/core/res/res/values/arrays.xml b/core/res/res/values/arrays.xml index d05a31ce1529..1eeca5948d87 100644 --- a/core/res/res/values/arrays.xml +++ b/core/res/res/values/arrays.xml @@ -400,4 +400,11 @@ <item>@null</item> </array> + <array name="lockscreen_chevron_drawables"> + <item>@drawable/ic_lockscreen_chevron_right</item> + <item>@null</item> + <item>@null</item> + <item>@null</item> + </array> + </resources> diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index 8b0b8ba1348b..2f540a5302a5 100755 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -5355,18 +5355,25 @@ <!-- Sets a drawable as the drag center. --> <attr name="handleDrawable" format="reference" /> - <!-- Drawable to use for chevron animation on the left. May be null. --> + <!-- Drawable to use for chevron animation on the left. May be null. + @deprecated use chevronDrawables instead --> <attr name="leftChevronDrawable" format="reference" /> - <!-- Drawable to use for chevron animation on the right. May be null. --> + <!-- Drawable to use for chevron animation on the right. May be null. + @deprecated use chevronDrawables instead --> <attr name="rightChevronDrawable" format="reference" /> - <!-- Drawable to use for chevron animation on the top. May be null. --> + <!-- Drawable to use for chevron animation on the top. May be null. + @deprecated use chevronDrawables instead --> <attr name="topChevronDrawable" format="reference" /> - <!-- Drawable to use for chevron animation on the bottom. May be null. --> + <!-- Drawable to use for chevron animation on the bottom. May be null. + @deprecated use chevronDrawables instead --> <attr name="bottomChevronDrawable" format="reference" /> + <!-- Drawables to use for chevron animations. May be null. --> + <attr name="chevronDrawables" format="reference"/> + <!-- Drawable to use for wave ripple animation. --> <attr name="waveDrawable" format="reference" /> diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml index 42130b3c6807..48038dd1c456 100644 --- a/core/res/res/values/public.xml +++ b/core/res/res/values/public.xml @@ -1009,6 +1009,7 @@ <java-symbol type="drawable" name="notification_bg_low" /> <java-symbol type="drawable" name="notification_template_icon_bg" /> <java-symbol type="drawable" name="notification_template_icon_low_bg" /> + <java-symbol type="drawable" name="ic_lockscreen_unlock_phantom" /> <java-symbol type="layout" name="action_bar_home" /> <java-symbol type="layout" name="action_bar_title_item" /> diff --git a/data/fonts/DroidNaskh-Regular-SystemUI.ttf b/data/fonts/DroidNaskh-Regular-SystemUI.ttf Binary files differindex 5818b4969efd..2f495cf46e60 100755..100644 --- a/data/fonts/DroidNaskh-Regular-SystemUI.ttf +++ b/data/fonts/DroidNaskh-Regular-SystemUI.ttf diff --git a/data/fonts/fallback_fonts-ja.xml b/data/fonts/fallback_fonts-ja.xml index be53d1d493d7..5f9b5ed948bf 100644 --- a/data/fonts/fallback_fonts-ja.xml +++ b/data/fonts/fallback_fonts-ja.xml @@ -70,13 +70,28 @@ </family> <family> <fileset> + <file>DroidSansTamil-Regular.ttf</file> + <file>DroidSansTamil-Bold.ttf</file> + </fileset> + </family> + <family> + <fileset> + <file>AnjaliNewLipi-light.ttf</file> + </fileset> + </family> + <family> + <fileset> <file>Lohit-Bengali.ttf</file> </fileset> </family> <family> <fileset> - <file>DroidSansTamil-Regular.ttf</file> - <file>DroidSansTamil-Bold.ttf</file> + <file>Lohit-Kannada.ttf</file> + </fileset> + </family> + <family> + <fileset> + <file>Lohit-Telugu.ttf</file> </fileset> </family> <family> diff --git a/data/fonts/fallback_fonts.xml b/data/fonts/fallback_fonts.xml index 80fffa9c905d..8517152f9b7b 100644 --- a/data/fonts/fallback_fonts.xml +++ b/data/fonts/fallback_fonts.xml @@ -70,13 +70,27 @@ </family> <family> <fileset> + <file>DroidSansTamil-Regular.ttf</file> + <file>DroidSansTamil-Bold.ttf</file> + </family> + <family> + <fileset> + <file>AnjaliNewLipi-light.ttf</file> + </fileset> + </family> + <family> + <fileset> <file>Lohit-Bengali.ttf</file> </fileset> </family> <family> <fileset> - <file>DroidSansTamil-Regular.ttf</file> - <file>DroidSansTamil-Bold.ttf</file> + <file>Lohit-Kannada.ttf</file> + </fileset> + </family> + <family> + <fileset> + <file>Lohit-Telugu.ttf</file> </fileset> </family> <family> diff --git a/media/java/android/media/MediaPlayer.java b/media/java/android/media/MediaPlayer.java index 9f0fd485ba24..aa4cdbe219d6 100644 --- a/media/java/android/media/MediaPlayer.java +++ b/media/java/android/media/MediaPlayer.java @@ -2020,8 +2020,9 @@ public class MediaPlayer if (msg.obj == null) { mOnTimedTextListener.onTimedText(mMediaPlayer, null); } else { - if (msg.obj instanceof byte[]) { - TimedText text = new TimedText((byte[])(msg.obj)); + if (msg.obj instanceof Parcel) { + Parcel parcel = (Parcel)msg.obj; + TimedText text = new TimedText(parcel); mOnTimedTextListener.onTimedText(mMediaPlayer, text); } } diff --git a/media/java/android/media/TimedText.java b/media/java/android/media/TimedText.java index 1d7c9682b5fd..e6a7e1392b45 100644 --- a/media/java/android/media/TimedText.java +++ b/media/java/android/media/TimedText.java @@ -28,7 +28,7 @@ import java.util.ArrayList; * Class to hold the timed text's metadata, including: * <ul> * <li> The characters for rendering</li> - * <li> The rendering postion for the timed text</li> + * <li> The rendering position for the timed text</li> * </ul> * * <p> To render the timed text, applications need to do the following: @@ -86,7 +86,6 @@ public final class TimedText private static final String TAG = "TimedText"; - private Parcel mParcel = Parcel.obtain(); private final HashMap<Integer, Object> mKeyObjectMap = new HashMap<Integer, Object>(); @@ -356,10 +355,8 @@ public final class TimedText * @throws IllegalArgumentExcept if parseParcel() fails. * {@hide} */ - public TimedText(byte[] obj) { - mParcel.unmarshall(obj, 0, obj.length); - - if (!parseParcel()) { + public TimedText(Parcel parcel) { + if (!parseParcel(parcel)) { mKeyObjectMap.clear(); throw new IllegalArgumentException("parseParcel() fails"); } @@ -393,28 +390,28 @@ public final class TimedText * Parcel. These are stored in mKeyObjectMap for application to retrieve. * @return false if an error occurred during parsing. Otherwise, true. */ - private boolean parseParcel() { - mParcel.setDataPosition(0); - if (mParcel.dataAvail() == 0) { + private boolean parseParcel(Parcel parcel) { + parcel.setDataPosition(0); + if (parcel.dataAvail() == 0) { return false; } - int type = mParcel.readInt(); + int type = parcel.readInt(); if (type == KEY_LOCAL_SETTING) { - type = mParcel.readInt(); + type = parcel.readInt(); if (type != KEY_START_TIME) { return false; } - int mStartTimeMs = mParcel.readInt(); + int mStartTimeMs = parcel.readInt(); mKeyObjectMap.put(type, mStartTimeMs); - type = mParcel.readInt(); + type = parcel.readInt(); if (type != KEY_STRUCT_TEXT) { return false; } - int textLen = mParcel.readInt(); - byte[] text = mParcel.createByteArray(); + int textLen = parcel.readInt(); + byte[] text = parcel.createByteArray(); if (text == null || text.length == 0) { mTextChars = null; } else { @@ -426,8 +423,8 @@ public final class TimedText return false; } - while (mParcel.dataAvail() > 0) { - int key = mParcel.readInt(); + while (parcel.dataAvail() > 0) { + int key = parcel.readInt(); if (!isValidKey(key)) { Log.w(TAG, "Invalid timed text key found: " + key); return false; @@ -437,77 +434,77 @@ public final class TimedText switch (key) { case KEY_STRUCT_STYLE_LIST: { - readStyle(); + readStyle(parcel); object = mStyleList; break; } case KEY_STRUCT_FONT_LIST: { - readFont(); + readFont(parcel); object = mFontList; break; } case KEY_STRUCT_HIGHLIGHT_LIST: { - readHighlight(); + readHighlight(parcel); object = mHighlightPosList; break; } case KEY_STRUCT_KARAOKE_LIST: { - readKaraoke(); + readKaraoke(parcel); object = mKaraokeList; break; } case KEY_STRUCT_HYPER_TEXT_LIST: { - readHyperText(); + readHyperText(parcel); object = mHyperTextList; break; } case KEY_STRUCT_BLINKING_TEXT_LIST: { - readBlinkingText(); + readBlinkingText(parcel); object = mBlinkingPosList; break; } case KEY_WRAP_TEXT: { - mWrapText = mParcel.readInt(); + mWrapText = parcel.readInt(); object = mWrapText; break; } case KEY_HIGHLIGHT_COLOR_RGBA: { - mHighlightColorRGBA = mParcel.readInt(); + mHighlightColorRGBA = parcel.readInt(); object = mHighlightColorRGBA; break; } case KEY_DISPLAY_FLAGS: { - mDisplayFlags = mParcel.readInt(); + mDisplayFlags = parcel.readInt(); object = mDisplayFlags; break; } case KEY_STRUCT_JUSTIFICATION: { - int horizontal = mParcel.readInt(); - int vertical = mParcel.readInt(); + int horizontal = parcel.readInt(); + int vertical = parcel.readInt(); mJustification = new Justification(horizontal, vertical); object = mJustification; break; } case KEY_BACKGROUND_COLOR_RGBA: { - mBackgroundColorRGBA = mParcel.readInt(); + mBackgroundColorRGBA = parcel.readInt(); object = mBackgroundColorRGBA; break; } case KEY_STRUCT_TEXT_POS: { - int top = mParcel.readInt(); - int left = mParcel.readInt(); - int bottom = mParcel.readInt(); - int right = mParcel.readInt(); + int top = parcel.readInt(); + int left = parcel.readInt(); + int bottom = parcel.readInt(); + int right = parcel.readInt(); mTextBounds = new Rect(left, top, right, bottom); break; } case KEY_SCROLL_DELAY: { - mScrollDelay = mParcel.readInt(); + mScrollDelay = parcel.readInt(); object = mScrollDelay; break; } @@ -520,18 +517,18 @@ public final class TimedText if (mKeyObjectMap.containsKey(key)) { mKeyObjectMap.remove(key); } + // Previous mapping will be replaced with the new object, if there was one. mKeyObjectMap.put(key, object); } } - mParcel.recycle(); return true; } /* * To parse and store the Style list. */ - private void readStyle() { + private void readStyle(Parcel parcel) { boolean endOfStyle = false; int startChar = -1; int endChar = -1; @@ -541,23 +538,23 @@ public final class TimedText boolean isUnderlined = false; int fontSize = -1; int colorRGBA = -1; - while (!endOfStyle && (mParcel.dataAvail() > 0)) { - int key = mParcel.readInt(); + while (!endOfStyle && (parcel.dataAvail() > 0)) { + int key = parcel.readInt(); switch (key) { case KEY_START_CHAR: { - startChar = mParcel.readInt(); + startChar = parcel.readInt(); break; } case KEY_END_CHAR: { - endChar = mParcel.readInt(); + endChar = parcel.readInt(); break; } case KEY_FONT_ID: { - fontId = mParcel.readInt(); + fontId = parcel.readInt(); break; } case KEY_STYLE_FLAGS: { - int flags = mParcel.readInt(); + int flags = parcel.readInt(); // In the absence of any bits set in flags, the text // is plain. Otherwise, 1: bold, 2: italic, 4: underline isBold = ((flags % 2) == 1); @@ -566,17 +563,17 @@ public final class TimedText break; } case KEY_FONT_SIZE: { - fontSize = mParcel.readInt(); + fontSize = parcel.readInt(); break; } case KEY_TEXT_COLOR_RGBA: { - colorRGBA = mParcel.readInt(); + colorRGBA = parcel.readInt(); break; } default: { // End of the Style parsing. Reset the data position back - // to the position before the last mParcel.readInt() call. - mParcel.setDataPosition(mParcel.dataPosition() - 4); + // to the position before the last parcel.readInt() call. + parcel.setDataPosition(parcel.dataPosition() - 4); endOfStyle = true; break; } @@ -594,14 +591,14 @@ public final class TimedText /* * To parse and store the Font list */ - private void readFont() { - int entryCount = mParcel.readInt(); + private void readFont(Parcel parcel) { + int entryCount = parcel.readInt(); for (int i = 0; i < entryCount; i++) { - int id = mParcel.readInt(); - int nameLen = mParcel.readInt(); + int id = parcel.readInt(); + int nameLen = parcel.readInt(); - byte[] text = mParcel.createByteArray(); + byte[] text = parcel.createByteArray(); final String name = new String(text, 0, nameLen); Font font = new Font(id, name); @@ -616,9 +613,9 @@ public final class TimedText /* * To parse and store the Highlight list */ - private void readHighlight() { - int startChar = mParcel.readInt(); - int endChar = mParcel.readInt(); + private void readHighlight(Parcel parcel) { + int startChar = parcel.readInt(); + int endChar = parcel.readInt(); CharPos pos = new CharPos(startChar, endChar); if (mHighlightPosList == null) { @@ -630,14 +627,14 @@ public final class TimedText /* * To parse and store the Karaoke list */ - private void readKaraoke() { - int entryCount = mParcel.readInt(); + private void readKaraoke(Parcel parcel) { + int entryCount = parcel.readInt(); for (int i = 0; i < entryCount; i++) { - int startTimeMs = mParcel.readInt(); - int endTimeMs = mParcel.readInt(); - int startChar = mParcel.readInt(); - int endChar = mParcel.readInt(); + int startTimeMs = parcel.readInt(); + int endTimeMs = parcel.readInt(); + int startChar = parcel.readInt(); + int endChar = parcel.readInt(); Karaoke kara = new Karaoke(startTimeMs, endTimeMs, startChar, endChar); @@ -651,16 +648,16 @@ public final class TimedText /* * To parse and store HyperText list */ - private void readHyperText() { - int startChar = mParcel.readInt(); - int endChar = mParcel.readInt(); + private void readHyperText(Parcel parcel) { + int startChar = parcel.readInt(); + int endChar = parcel.readInt(); - int len = mParcel.readInt(); - byte[] url = mParcel.createByteArray(); + int len = parcel.readInt(); + byte[] url = parcel.createByteArray(); final String urlString = new String(url, 0, len); - len = mParcel.readInt(); - byte[] alt = mParcel.createByteArray(); + len = parcel.readInt(); + byte[] alt = parcel.createByteArray(); final String altString = new String(alt, 0, len); HyperText hyperText = new HyperText(startChar, endChar, urlString, altString); @@ -674,9 +671,9 @@ public final class TimedText /* * To parse and store blinking text list */ - private void readBlinkingText() { - int startChar = mParcel.readInt(); - int endChar = mParcel.readInt(); + private void readBlinkingText(Parcel parcel) { + int startChar = parcel.readInt(); + int endChar = parcel.readInt(); CharPos blinkingPos = new CharPos(startChar, endChar); if (mBlinkingPosList == null) { diff --git a/media/jni/android_media_MediaPlayer.cpp b/media/jni/android_media_MediaPlayer.cpp index 5eadb3a9c1d4..de22e094fe73 100644 --- a/media/jni/android_media_MediaPlayer.cpp +++ b/media/jni/android_media_MediaPlayer.cpp @@ -72,6 +72,7 @@ private: JNIMediaPlayerListener(); jclass mClass; // Reference to MediaPlayer class jobject mObject; // Weak ref to MediaPlayer Java object to call on + jobject mParcel; }; JNIMediaPlayerListener::JNIMediaPlayerListener(JNIEnv* env, jobject thiz, jobject weak_thiz) @@ -90,6 +91,7 @@ JNIMediaPlayerListener::JNIMediaPlayerListener(JNIEnv* env, jobject thiz, jobjec // We use a weak reference so the MediaPlayer object can be garbage collected. // The reference is only used as a proxy for callbacks. mObject = env->NewGlobalRef(weak_thiz); + mParcel = env->NewGlobalRef(createJavaParcelObject(env)); } JNIMediaPlayerListener::~JNIMediaPlayerListener() @@ -98,25 +100,30 @@ JNIMediaPlayerListener::~JNIMediaPlayerListener() JNIEnv *env = AndroidRuntime::getJNIEnv(); env->DeleteGlobalRef(mObject); env->DeleteGlobalRef(mClass); + + recycleJavaParcelObject(env, mParcel); + env->DeleteGlobalRef(mParcel); } void JNIMediaPlayerListener::notify(int msg, int ext1, int ext2, const Parcel *obj) { JNIEnv *env = AndroidRuntime::getJNIEnv(); if (obj && obj->dataSize() > 0) { - jbyteArray jArray = env->NewByteArray(obj->dataSize()); - if (jArray != NULL) { - jbyte *nArray = env->GetByteArrayElements(jArray, NULL); - memcpy(nArray, obj->data(), obj->dataSize()); - env->ReleaseByteArrayElements(jArray, nArray, 0); + if (mParcel != NULL) { + Parcel* nativeParcel = parcelForJavaObject(env, mParcel); + nativeParcel->setData(obj->data(), obj->dataSize()); env->CallStaticVoidMethod(mClass, fields.post_event, mObject, - msg, ext1, ext2, jArray); - env->DeleteLocalRef(jArray); + msg, ext1, ext2, mParcel); } } else { env->CallStaticVoidMethod(mClass, fields.post_event, mObject, msg, ext1, ext2, NULL); } + if (env->ExceptionCheck()) { + ALOGW("An exception occurred while notifying an event."); + LOGW_EX(env); + env->ExceptionClear(); + } } // ---------------------------------------------------------------------------- @@ -533,7 +540,6 @@ android_media_MediaPlayer_invoke(JNIEnv *env, jobject thiz, return UNKNOWN_ERROR; } - Parcel *request = parcelForJavaObject(env, java_request); Parcel *reply = parcelForJavaObject(env, java_reply); diff --git a/packages/SystemUI/res/layout-sw720dp/status_bar_search_panel.xml b/packages/SystemUI/res/layout-sw720dp/status_bar_search_panel.xml index b4872c771dea..ac2472c28c1a 100644 --- a/packages/SystemUI/res/layout-sw720dp/status_bar_search_panel.xml +++ b/packages/SystemUI/res/layout-sw720dp/status_bar_search_panel.xml @@ -36,7 +36,8 @@ android:layout_width="wrap_content" android:layout_height="@dimen/navbar_search_panel_height" android:layout_alignParentBottom="true" - android:layout_alignParentLeft="true"> + android:layout_alignParentLeft="true" + android:layout_marginLeft="-120dip"> <View android:layout_width="0dip" diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml index 82262f21ed8f..c4af8d85c2bd 100644 --- a/packages/SystemUI/res/values-be/strings.xml +++ b/packages/SystemUI/res/values-be/strings.xml @@ -144,10 +144,7 @@ <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Інфармацыя пра прыкладанне"</string> <string name="notifications_off_title" msgid="8936620513608443224">"Паведамленні адключаны"</string> <string name="notifications_off_text" msgid="2529001315769385273">"Націсніце тут, каб зноў уключыць апавяшчэнні."</string> - <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) --> - <skip /> + <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Экран паварочваецца аўтаматычна."</string> + <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Экран заблакiраваны ў альбомнай арыентацыі."</string> + <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Экран заблакiраваны ў партрэтнай арыентацыі."</string> </resources> diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml index c32bafebb75c..a4a0e789b562 100644 --- a/packages/SystemUI/res/values-bg/strings.xml +++ b/packages/SystemUI/res/values-bg/strings.xml @@ -142,10 +142,7 @@ <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Информация за приложението"</string> <string name="notifications_off_title" msgid="8936620513608443224">"Известията са изключени"</string> <string name="notifications_off_text" msgid="2529001315769385273">"Докоснете тук, за да включите отново известията."</string> - <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) --> - <skip /> + <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Екранът ще се завърта автоматично."</string> + <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Екранът е заключен в хоризонтална ориентация."</string> + <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Екранът е заключен във вертикална ориентация."</string> </resources> diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml index dfcb3b4f7790..c41cf6fd5b5f 100644 --- a/packages/SystemUI/res/values-cs/strings.xml +++ b/packages/SystemUI/res/values-cs/strings.xml @@ -144,10 +144,7 @@ <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Informace o aplikaci"</string> <string name="notifications_off_title" msgid="8936620513608443224">"Oznámení jsou vypnuta"</string> <string name="notifications_off_text" msgid="2529001315769385273">"Chcete-li oznámení znovu zapnout, klepněte sem."</string> - <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) --> - <skip /> + <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Obrazovka se automaticky otočí."</string> + <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Obrazovka je uzamčena v orientaci na šířku."</string> + <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Obrazovka je uzamčena v orientaci na výšku."</string> </resources> diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml index 05208210986a..b7dcb143da47 100644 --- a/packages/SystemUI/res/values-de/strings.xml +++ b/packages/SystemUI/res/values-de/strings.xml @@ -66,7 +66,7 @@ <string name="screenshot_saving_title" msgid="8242282144535555697">"Screenshot wird gespeichert..."</string> <string name="screenshot_saving_text" msgid="2419718443411738818">"Screenshot wird gespeichert..."</string> <string name="screenshot_saved_title" msgid="6461865960961414961">"Screenshot aufgenommen"</string> - <string name="screenshot_saved_text" msgid="1152839647677558815">"Zum Anzeigen Ihres Screenshots berühren"</string> + <string name="screenshot_saved_text" msgid="1152839647677558815">"Zum Anzeigen des Screenshots berühren"</string> <string name="screenshot_failed_title" msgid="705781116746922771">"Screenshot konnte nicht aufgenommen werden."</string> <string name="screenshot_failed_text" msgid="8134011269572415402">"Screenshot konnte nicht gespeichert werden. Eventuell wird der Speicher gerade verwendet."</string> <string name="usb_preference_title" msgid="6551050377388882787">"USB-Dateiübertragungsoptionen"</string> diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml index a2eb51e7f395..318ed0455587 100644 --- a/packages/SystemUI/res/values-et/strings.xml +++ b/packages/SystemUI/res/values-et/strings.xml @@ -142,10 +142,7 @@ <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Rakenduse teave"</string> <string name="notifications_off_title" msgid="8936620513608443224">"Teatised väljas"</string> <string name="notifications_off_text" msgid="2529001315769385273">"Teatiste uuesti sisselülitamiseks puudutage siin."</string> - <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) --> - <skip /> + <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Ekraani pööramine toimub automaatselt."</string> + <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Ekraan on lukustatud horisontaalsuunas."</string> + <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Ekraan on lukustatud vertikaalsuunas."</string> </resources> diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml index 4b8700528ea1..4a1f35a9fee0 100644 --- a/packages/SystemUI/res/values-hr/strings.xml +++ b/packages/SystemUI/res/values-hr/strings.xml @@ -142,10 +142,7 @@ <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Informacije o aplikaciji"</string> <string name="notifications_off_title" msgid="8936620513608443224">"Obavijesti isključene"</string> <string name="notifications_off_text" msgid="2529001315769385273">"Dotaknite ovdje da biste ponovo uključili obavijesti."</string> - <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) --> - <skip /> + <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Zaslon će se automatski zakrenuti."</string> + <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Zaslon je zaključan u pejzažnoj orijentaciji."</string> + <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Zaslon je zaključan u portretnoj orijentaciji."</string> </resources> diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml index 4571066724d8..a117252fd093 100644 --- a/packages/SystemUI/res/values-in/strings.xml +++ b/packages/SystemUI/res/values-in/strings.xml @@ -140,14 +140,10 @@ <string name="accessibility_clear_all" msgid="5235938559247164925">"Menghapus semua pemberitahuan."</string> <string name="dreams_dock_launcher" msgid="3541196417659166245">"Aktifkan tirai layar"</string> <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Info aplikasi"</string> - <!-- no translation found for notifications_off_title (8936620513608443224) --> - <skip /> + <string name="notifications_off_title" msgid="8936620513608443224">"Pemberitahuan mati"</string> <!-- no translation found for notifications_off_text (2529001315769385273) --> <skip /> - <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) --> - <skip /> + <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Layar akan diputar secara otomatis."</string> + <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Layar dikunci dalam orientasi lanskap."</string> + <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Layar dikunci dalam orientasi potret."</string> </resources> diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml index 438cc0d8922a..e54b06c854be 100644 --- a/packages/SystemUI/res/values-ko/strings.xml +++ b/packages/SystemUI/res/values-ko/strings.xml @@ -140,14 +140,9 @@ <string name="accessibility_clear_all" msgid="5235938559247164925">"모든 알림 지우기"</string> <string name="dreams_dock_launcher" msgid="3541196417659166245">"스크린 세이버 활성화"</string> <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"앱 정보"</string> - <!-- no translation found for notifications_off_title (8936620513608443224) --> - <skip /> - <!-- no translation found for notifications_off_text (2529001315769385273) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) --> - <skip /> + <string name="notifications_off_title" msgid="8936620513608443224">"알림 사용 안함"</string> + <string name="notifications_off_text" msgid="2529001315769385273">"알림을 다시 사용하려면 여기를 터치하세요."</string> + <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"화면이 자동으로 회전됩니다."</string> + <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"화면이 가로 방향으로 잠겨 있습니다."</string> + <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"화면이 세로 방향으로 잠겨 있습니다."</string> </resources> diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml index 929278350abb..3265cd51c9c6 100644 --- a/packages/SystemUI/res/values-ms/strings.xml +++ b/packages/SystemUI/res/values-ms/strings.xml @@ -142,10 +142,7 @@ <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Maklumat apl"</string> <string name="notifications_off_title" msgid="8936620513608443224">"Pemberitahuan dimatikan"</string> <string name="notifications_off_text" msgid="2529001315769385273">"Ketik di sini untuk menghidupkan kembali pemberitahuan."</string> - <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) --> - <skip /> + <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Skrin akan berputar secara automatik."</string> + <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Skrin dikunci dalam orientasi landskap."</string> + <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Skrin dikunci dalam orientasi potret."</string> </resources> diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml index b416095354c8..2a9c1c857fd5 100644 --- a/packages/SystemUI/res/values-nb/strings.xml +++ b/packages/SystemUI/res/values-nb/strings.xml @@ -144,10 +144,7 @@ <skip /> <!-- no translation found for notifications_off_text (2529001315769385273) --> <skip /> - <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) --> - <skip /> + <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Skjermen roterer automatisk."</string> + <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Skjermen er låst i liggende retning."</string> + <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Skjermen er låst i stående retning."</string> </resources> diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml index 3dab38936b26..b01345e6d9c9 100644 --- a/packages/SystemUI/res/values-pl/strings.xml +++ b/packages/SystemUI/res/values-pl/strings.xml @@ -144,10 +144,7 @@ <skip /> <!-- no translation found for notifications_off_text (2529001315769385273) --> <skip /> - <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) --> - <skip /> + <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Ekran zostanie obrócony automatycznie."</string> + <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Ekran jest zablokowany w orientacji poziomej."</string> + <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Ekran jest zablokowany w orientacji pionowej."</string> </resources> diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml index 30950baba71c..77ed068d8979 100644 --- a/packages/SystemUI/res/values-pt-rPT/strings.xml +++ b/packages/SystemUI/res/values-pt-rPT/strings.xml @@ -140,10 +140,8 @@ <string name="accessibility_clear_all" msgid="5235938559247164925">"Limpar todas as notificações."</string> <string name="dreams_dock_launcher" msgid="3541196417659166245">"Ativar proteção de ecrã"</string> <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Informações da aplicação"</string> - <!-- no translation found for notifications_off_title (8936620513608443224) --> - <skip /> - <!-- no translation found for notifications_off_text (2529001315769385273) --> - <skip /> + <string name="notifications_off_title" msgid="8936620513608443224">"Notificações desativadas"</string> + <string name="notifications_off_text" msgid="2529001315769385273">"Toque aqui para voltar a ativar as notificações."</string> <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) --> <skip /> <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) --> diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml index 7f9e6e11aa82..f074d22955bb 100644 --- a/packages/SystemUI/res/values-pt/strings.xml +++ b/packages/SystemUI/res/values-pt/strings.xml @@ -144,10 +144,7 @@ <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Informações do aplicativo"</string> <string name="notifications_off_title" msgid="8936620513608443224">"Notificações desativadas"</string> <string name="notifications_off_text" msgid="2529001315769385273">"Toque aqui para ativar as notificações novamente."</string> - <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) --> - <skip /> + <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"A tela girará automaticamente."</string> + <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"A tela está bloqueada na orientação paisagem."</string> + <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"A tela está bloqueada na orientação retrato."</string> </resources> diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml index 2896eaea70fe..4750ac56abff 100644 --- a/packages/SystemUI/res/values-ro/strings.xml +++ b/packages/SystemUI/res/values-ro/strings.xml @@ -144,10 +144,7 @@ <skip /> <!-- no translation found for notifications_off_text (2529001315769385273) --> <skip /> - <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) --> - <skip /> + <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Ecranul se va roti în mod automat."</string> + <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Ecranul este blocat în orientarea de tip peisaj."</string> + <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Ecranul este blocat în orientarea de tip portret."</string> </resources> diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml index 64494b886e16..8e64487423cd 100644 --- a/packages/SystemUI/res/values-sk/strings.xml +++ b/packages/SystemUI/res/values-sk/strings.xml @@ -142,14 +142,9 @@ <string name="accessibility_clear_all" msgid="5235938559247164925">"Vymazať všetky upozornenia."</string> <string name="dreams_dock_launcher" msgid="3541196417659166245">"Aktivovať šetrič obrazovky"</string> <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Informácie o aplikácii"</string> - <!-- no translation found for notifications_off_title (8936620513608443224) --> - <skip /> - <!-- no translation found for notifications_off_text (2529001315769385273) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) --> - <skip /> + <string name="notifications_off_title" msgid="8936620513608443224">"Upozornenia sú vypnuté"</string> + <string name="notifications_off_text" msgid="2529001315769385273">"Klepnutím sem upozornenia znova povolíte."</string> + <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Obrazovka sa automaticky otočí."</string> + <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Obrazovka je uzamknutá v orientácii na šírku."</string> + <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Obrazovka je uzamknutá v orientácii na výšku."</string> </resources> diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml index 6b475d3974be..5f523a2e7ed5 100644 --- a/packages/SystemUI/res/values-sr/strings.xml +++ b/packages/SystemUI/res/values-sr/strings.xml @@ -144,10 +144,7 @@ <skip /> <!-- no translation found for notifications_off_text (2529001315769385273) --> <skip /> - <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) --> - <skip /> + <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Екран ће се аутоматски ротирати."</string> + <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Екран је закључан у хоризонталном положају."</string> + <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Екран је закључан у вертикалном положају."</string> </resources> diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml index de4ae188046f..e1c41858d36c 100644 --- a/packages/SystemUI/res/values-tl/strings.xml +++ b/packages/SystemUI/res/values-tl/strings.xml @@ -142,10 +142,7 @@ <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Impormasyon ng app"</string> <string name="notifications_off_title" msgid="8936620513608443224">"Naka-off ang mga notification"</string> <string name="notifications_off_text" msgid="2529001315769385273">"Tumapik dito upang muling i-on ang mga notification."</string> - <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) --> - <skip /> + <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Awtomatikong iikot ang screen."</string> + <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Naka-lock ang screen sa pahigang oryentasyon."</string> + <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Naka-lock ang screen sa patayong oryentasyon."</string> </resources> diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml index 6494fc82a49b..165baae71c90 100644 --- a/packages/SystemUI/res/values-uk/strings.xml +++ b/packages/SystemUI/res/values-uk/strings.xml @@ -140,14 +140,9 @@ <string name="accessibility_clear_all" msgid="5235938559247164925">"Очистити всі сповіщення."</string> <string name="dreams_dock_launcher" msgid="3541196417659166245">"Активувати заставку"</string> <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Інформація про програму"</string> - <!-- no translation found for notifications_off_title (8936620513608443224) --> - <skip /> - <!-- no translation found for notifications_off_text (2529001315769385273) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) --> - <skip /> + <string name="notifications_off_title" msgid="8936620513608443224">"Сповіщення вимкнено"</string> + <string name="notifications_off_text" msgid="2529001315769385273">"Торкніться тут, щоб знову ввімкнути сповіщення."</string> + <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Екран обертатиметься автоматично."</string> + <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Екран заблоковано в альбомній орієнтації."</string> + <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Екран заблоковано в книжковій орієнтації."</string> </resources> diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml index 831cdc0f3335..007ee96fc821 100644 --- a/packages/SystemUI/res/values-zh-rCN/strings.xml +++ b/packages/SystemUI/res/values-zh-rCN/strings.xml @@ -144,10 +144,7 @@ <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"应用信息"</string> <string name="notifications_off_title" msgid="8936620513608443224">"通知功能已停用"</string> <string name="notifications_off_text" msgid="2529001315769385273">"点按此处可重新启用通知功能。"</string> - <!-- no translation found for accessibility_rotation_lock_off (4062780228931590069) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_on_landscape (6731197337665366273) --> - <skip /> - <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) --> - <skip /> + <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"屏幕会自动旋转。"</string> + <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"屏幕锁定为横向浏览模式。"</string> + <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"屏幕已锁定为纵向浏览模式。"</string> </resources> diff --git a/policy/src/com/android/internal/policy/impl/LockScreen.java b/policy/src/com/android/internal/policy/impl/LockScreen.java index c7a30e291b3f..f34f9a9985f0 100644 --- a/policy/src/com/android/internal/policy/impl/LockScreen.java +++ b/policy/src/com/android/internal/policy/impl/LockScreen.java @@ -322,6 +322,7 @@ class LockScreen extends LinearLayout implements KeyguardScreen { mCallback.pokeWakelock(); break; + case com.android.internal.R.drawable.ic_lockscreen_unlock_phantom: case com.android.internal.R.drawable.ic_lockscreen_unlock: mCallback.goToUnlockScreen(); break; @@ -341,7 +342,7 @@ class LockScreen extends LinearLayout implements KeyguardScreen { try { mContext.startActivity(intent); } catch (ActivityNotFoundException e) { - Log.w(TAG, "Camera application not found"); + Log.w(TAG, "Activity not found for intent + " + intent.getAction()); } } diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java index d41cd5a353f4..d7c5eea84a28 100644 --- a/services/java/com/android/server/pm/PackageManagerService.java +++ b/services/java/com/android/server/pm/PackageManagerService.java @@ -98,6 +98,7 @@ import android.os.ServiceManager; import android.os.SystemClock; import android.os.SystemProperties; import android.os.UserId; +import android.provider.Settings.Secure; import android.security.SystemKeyStore; import android.util.DisplayMetrics; import android.util.EventLog; @@ -9259,7 +9260,8 @@ public class PackageManagerService extends IPackageManager.Stub { mContext.enforceCallingOrSelfPermission(GRANT_REVOKE_PERMISSIONS, null); if (READ_EXTERNAL_STORAGE.equals(permission)) { synchronized (mPackages) { - if (mSettings.mReadExternalStorageEnforced != enforced) { + if (mSettings.mReadExternalStorageEnforced == null + || mSettings.mReadExternalStorageEnforced != enforced) { mSettings.mReadExternalStorageEnforced = enforced; mSettings.writeLPr(); @@ -9284,7 +9286,6 @@ public class PackageManagerService extends IPackageManager.Stub { @Override public boolean isPermissionEnforced(String permission) { - mContext.enforceCallingOrSelfPermission(GRANT_REVOKE_PERMISSIONS, null); synchronized (mPackages) { return isPermissionEnforcedLocked(permission); } @@ -9292,7 +9293,13 @@ public class PackageManagerService extends IPackageManager.Stub { private boolean isPermissionEnforcedLocked(String permission) { if (READ_EXTERNAL_STORAGE.equals(permission)) { - return mSettings.mReadExternalStorageEnforced; + if (mSettings.mReadExternalStorageEnforced != null) { + return mSettings.mReadExternalStorageEnforced; + } else { + // if user hasn't defined, fall back to secure default + return Secure.getInt(mContext.getContentResolver(), + Secure.READ_EXTERNAL_STORAGE_ENFORCED_DEFAULT, 0) != 0; + } } else { return true; } diff --git a/services/java/com/android/server/pm/Settings.java b/services/java/com/android/server/pm/Settings.java index d0eda2db5b9d..ffb69fa50bbb 100644 --- a/services/java/com/android/server/pm/Settings.java +++ b/services/java/com/android/server/pm/Settings.java @@ -111,7 +111,7 @@ final class Settings { int mInternalSdkPlatform; int mExternalSdkPlatform; - boolean mReadExternalStorageEnforced = PackageManager.DEFAULT_ENFORCE_READ_EXTERNAL_STORAGE; + Boolean mReadExternalStorageEnforced; /** Device identity for the purpose of package verification. */ private VerifierDeviceIdentity mVerifierDeviceIdentity; @@ -1147,8 +1147,7 @@ final class Settings { serializer.endTag(null, "verifier"); } - if (mReadExternalStorageEnforced - != PackageManager.DEFAULT_ENFORCE_READ_EXTERNAL_STORAGE) { + if (mReadExternalStorageEnforced != null) { serializer.startTag(null, TAG_READ_EXTERNAL_STORAGE); serializer.attribute( null, ATTR_ENFORCEMENT, mReadExternalStorageEnforced ? "1" : "0"); diff --git a/services/java/com/android/server/wm/WindowAnimator.java b/services/java/com/android/server/wm/WindowAnimator.java index 146de34f50fe..480992beaa15 100644 --- a/services/java/com/android/server/wm/WindowAnimator.java +++ b/services/java/com/android/server/wm/WindowAnimator.java @@ -269,7 +269,7 @@ public class WindowAnimator { mPendingLayoutChanges); } mService.mFocusMayChange = true; - } else if (win.isReadyForDisplay() && winAnimator.mAnimation == null) { + } else if (win.isReadyForDisplay()) { mForceHiding = true; } } else if (mPolicy.canBeForceHidden(win, win.mAttrs)) { diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/RSTestCore.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/RSTestCore.java index d2e1527c7667..9321cb320358 100644 --- a/tests/RenderScriptTests/tests/src/com/android/rs/test/RSTestCore.java +++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/RSTestCore.java @@ -69,6 +69,8 @@ public class RSTestCore { unitTests.add(new UT_vector(this, mRes, mCtx)); unitTests.add(new UT_array_init(this, mRes, mCtx)); unitTests.add(new UT_array_alloc(this, mRes, mCtx)); + unitTests.add(new UT_clamp(this, mRes, mCtx)); + unitTests.add(new UT_clamp_relaxed(this, mRes, mCtx)); unitTests.add(new UT_convert(this, mRes, mCtx)); unitTests.add(new UT_rsdebug(this, mRes, mCtx)); unitTests.add(new UT_rstime(this, mRes, mCtx)); diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_clamp.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_clamp.java new file mode 100644 index 000000000000..08c96bb1cb97 --- /dev/null +++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_clamp.java @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.rs.test; + +import android.content.Context; +import android.content.res.Resources; +import android.renderscript.*; + +public class UT_clamp extends UnitTest { + private Resources mRes; + + protected UT_clamp(RSTestCore rstc, Resources res, Context ctx) { + super(rstc, "Clamp (Full)", ctx); + mRes = res; + } + + public void run() { + RenderScript pRS = RenderScript.create(mCtx); + ScriptC_clamp s = new ScriptC_clamp(pRS, mRes, R.raw.clamp); + pRS.setMessageHandler(mRsMessage); + s.invoke_clamp_test(); + pRS.finish(); + waitForMessage(); + pRS.destroy(); + } +} diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_clamp_relaxed.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_clamp_relaxed.java new file mode 100644 index 000000000000..a6fd868c8a77 --- /dev/null +++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_clamp_relaxed.java @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.rs.test; + +import android.content.Context; +import android.content.res.Resources; +import android.renderscript.*; + +public class UT_clamp_relaxed extends UnitTest { + private Resources mRes; + + protected UT_clamp_relaxed(RSTestCore rstc, Resources res, Context ctx) { + super(rstc, "Clamp (Relaxed)", ctx); + mRes = res; + } + + public void run() { + RenderScript pRS = RenderScript.create(mCtx); + ScriptC_clamp_relaxed s = + new ScriptC_clamp_relaxed(pRS, mRes, R.raw.clamp_relaxed); + pRS.setMessageHandler(mRsMessage); + s.invoke_clamp_test(); + pRS.finish(); + waitForMessage(); + pRS.destroy(); + } +} diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/clamp.rs b/tests/RenderScriptTests/tests/src/com/android/rs/test/clamp.rs new file mode 100644 index 000000000000..28b00bdcf190 --- /dev/null +++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/clamp.rs @@ -0,0 +1,56 @@ +#include "shared.rsh" + +static bool test_clamp_vector() { + bool failed = false; + + float2 src2 = { 2.0f, 2.0f}; + float2 min2 = { 0.5f, -3.0f}; + float2 max2 = { 1.0f, 9.0f}; + + float2 res2 = clamp(src2, min2, max2); + _RS_ASSERT(res2.x == 1.0f); + _RS_ASSERT(res2.y == 2.0f); + + + float3 src3 = { 2.0f, 2.0f, 1.0f}; + float3 min3 = { 0.5f, -3.0f, 3.0f}; + float3 max3 = { 1.0f, 9.0f, 4.0f}; + + float3 res3 = clamp(src3, min3, max3); + _RS_ASSERT(res3.x == 1.0f); + _RS_ASSERT(res3.y == 2.0f); + _RS_ASSERT(res3.z == 3.0f); + + + float4 src4 = { 2.0f, 2.0f, 1.0f, 4.0f }; + float4 min4 = { 0.5f, -3.0f, 3.0f, 4.0f }; + float4 max4 = { 1.0f, 9.0f, 4.0f, 4.0f }; + + float4 res4 = clamp(src4, min4, max4); + _RS_ASSERT(res4.x == 1.0f); + _RS_ASSERT(res4.y == 2.0f); + _RS_ASSERT(res4.z == 3.0f); + _RS_ASSERT(res4.w == 4.0f); + + if (failed) { + rsDebug("test_clamp_vector FAILED", 0); + } + else { + rsDebug("test_clamp_vector PASSED", 0); + } + + return failed; +} + +void clamp_test() { + bool failed = false; + failed |= test_clamp_vector(); + + if (failed) { + rsSendToClientBlocking(RS_MSG_TEST_FAILED); + } + else { + rsSendToClientBlocking(RS_MSG_TEST_PASSED); + } +} + diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/clamp_relaxed.rs b/tests/RenderScriptTests/tests/src/com/android/rs/test/clamp_relaxed.rs new file mode 100644 index 000000000000..71c65aee703b --- /dev/null +++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/clamp_relaxed.rs @@ -0,0 +1,2 @@ +#include "clamp.rs" +#pragma rs_fp_relaxed diff --git a/wifi/java/android/net/wifi/WifiConfiguration.java b/wifi/java/android/net/wifi/WifiConfiguration.java index dfc1b18a1bbc..0a846fd2f674 100644 --- a/wifi/java/android/net/wifi/WifiConfiguration.java +++ b/wifi/java/android/net/wifi/WifiConfiguration.java @@ -56,6 +56,12 @@ public class WifiConfiguration implements Parcelable { */ public static final String ENGINE_ENABLE = "1"; + /** + * String to set the engine value to when it should be disabled. + * @hide + */ + public static final String ENGINE_DISABLE = "0"; + /** {@hide} */ public static final String ssidVarName = "ssid"; /** {@hide} */ diff --git a/wifi/java/android/net/wifi/WifiNative.java b/wifi/java/android/net/wifi/WifiNative.java index 73618f69a23a..0a87a5380763 100644 --- a/wifi/java/android/net/wifi/WifiNative.java +++ b/wifi/java/android/net/wifi/WifiNative.java @@ -442,8 +442,8 @@ public class WifiNative { return doBooleanCommand("SET p2p_ssid_postfix " + postfix); } - public boolean setP2pGroupIdle(int time) { - return doBooleanCommand("SET p2p_group_idle " + time); + public boolean setP2pGroupIdle(String iface, int time) { + return doBooleanCommand("SET interface=" + iface + " p2p_group_idle " + time); } public void setPowerSave(boolean enabled) { @@ -624,13 +624,6 @@ public class WifiNative { return ""; } - public boolean isGroupOwner(String deviceAddress) { - /* BSS returns details only for a GO */ - String bssInfo = doStringCommand("BSS p2p_dev_addr=" + deviceAddress); - if (TextUtils.isEmpty(bssInfo)) return false; - return true; - } - public String p2pPeer(String deviceAddress) { return doStringCommand("P2P_PEER " + deviceAddress); } diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pDeviceList.java b/wifi/java/android/net/wifi/p2p/WifiP2pDeviceList.java index 8942ff1152c0..b2347c851c1a 100644 --- a/wifi/java/android/net/wifi/p2p/WifiP2pDeviceList.java +++ b/wifi/java/android/net/wifi/p2p/WifiP2pDeviceList.java @@ -108,6 +108,15 @@ public class WifiP2pDeviceList implements Parcelable { return Collections.unmodifiableCollection(mDevices.values()); } + /** @hide */ + public boolean isGroupOwner(String deviceAddress) { + if (deviceAddress != null) { + WifiP2pDevice device = mDevices.get(deviceAddress); + if (device != null) return device.isGroupOwner(); + } + return false; + } + public String toString() { StringBuffer sbuf = new StringBuffer(); for (WifiP2pDevice device : mDevices.values()) { diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pService.java b/wifi/java/android/net/wifi/p2p/WifiP2pService.java index b4a879a82080..cc49cae6fc10 100644 --- a/wifi/java/android/net/wifi/p2p/WifiP2pService.java +++ b/wifi/java/android/net/wifi/p2p/WifiP2pService.java @@ -159,6 +159,9 @@ public class WifiP2pService extends IWifiP2pManager.Stub { * is invoked */ private boolean mAutonomousGroup; + /* Invitation to join an existing p2p group */ + private boolean mJoinExistingGroup; + /* Track whether we are in p2p discovery. This is used to avoid sending duplicate * broadcasts */ @@ -761,7 +764,7 @@ public class WifiP2pService extends IWifiP2pManager.Stub { //Stop discovery before issuing connect mWifiNative.p2pStopFind(); - if (mWifiNative.isGroupOwner(mSavedPeerConfig.deviceAddress)) { + if (mPeers.isGroupOwner(mSavedPeerConfig.deviceAddress)) { p2pConnectWithPinDisplay(mSavedPeerConfig, JOIN_GROUP); } else { p2pConnectWithPinDisplay(mSavedPeerConfig, FORM_GROUP); @@ -778,7 +781,7 @@ public class WifiP2pService extends IWifiP2pManager.Stub { mWifiNative.p2pStopFind(); //If peer is a GO, we do not need to send provisional discovery, //the supplicant takes care of it. - if (mWifiNative.isGroupOwner(mSavedPeerConfig.deviceAddress)) { + if (mPeers.isGroupOwner(mSavedPeerConfig.deviceAddress)) { if (DBG) logd("Sending join to GO"); p2pConnectWithPinDisplay(mSavedPeerConfig, JOIN_GROUP); transitionTo(mGroupNegotiationState); @@ -795,6 +798,8 @@ public class WifiP2pService extends IWifiP2pManager.Stub { case WifiMonitor.P2P_GO_NEGOTIATION_REQUEST_EVENT: mSavedPeerConfig = (WifiP2pConfig) message.obj; + mAutonomousGroup = false; + mJoinExistingGroup = false; if (!sendConnectNoticeToApp(mPeers.get(mSavedPeerConfig.deviceAddress), mSavedPeerConfig)) { transitionTo(mUserAuthorizingInvitationState); @@ -824,6 +829,8 @@ public class WifiP2pService extends IWifiP2pManager.Stub { } } + mAutonomousGroup = false; + mJoinExistingGroup = true; //TODO In the p2p client case, we should set source address correctly. if (!sendConnectNoticeToApp(mPeers.get(mSavedPeerConfig.deviceAddress), mSavedPeerConfig)) { @@ -840,8 +847,6 @@ public class WifiP2pService extends IWifiP2pManager.Stub { break; case WifiP2pManager.CREATE_GROUP: mAutonomousGroup = true; - // An autonomous GO requires group idle settings to be reset - mWifiNative.setP2pGroupIdle(0); if (mWifiNative.p2pGroupAdd()) { replyToMessage(message, WifiP2pManager.CREATE_GROUP_SUCCEEDED); } else { @@ -863,11 +868,6 @@ public class WifiP2pService extends IWifiP2pManager.Stub { if (DBG) logd(getName()); sendMessageDelayed(obtainMessage(GROUP_CREATING_TIMED_OUT, ++mGroupCreatingTimeoutIndex, 0), GROUP_CREATING_WAIT_TIME_MS); - - // Set default group idle settings - if (!mAutonomousGroup) { - mWifiNative.setP2pGroupIdle(GROUP_IDLE_TIME_S); - } } @Override @@ -921,7 +921,7 @@ public class WifiP2pService extends IWifiP2pManager.Stub { switch (message.what) { case PEER_CONNECTION_USER_ACCEPT: //TODO: handle persistence - if (mWifiNative.isGroupOwner(mSavedPeerConfig.deviceAddress)) { + if (mJoinExistingGroup) { p2pConnectWithPinDisplay(mSavedPeerConfig, JOIN_GROUP); } else { p2pConnectWithPinDisplay(mSavedPeerConfig, FORM_GROUP); @@ -983,6 +983,7 @@ public class WifiP2pService extends IWifiP2pManager.Stub { mWifiNative.p2pConnect(mSavedPeerConfig, FORM_GROUP); transitionTo(mGroupNegotiationState); } else { + mJoinExistingGroup = false; transitionTo(mUserAuthorizingInvitationState); } } @@ -1031,6 +1032,10 @@ public class WifiP2pService extends IWifiP2pManager.Stub { if (mGroup.isGroupOwner()) { startDhcpServer(mGroup.getInterface()); } else { + // Set group idle only for a client on the group interface to speed up + // disconnect when GO is gone. Setting group idle time for a group owner + // causes connectivity issues for new clients + mWifiNative.setP2pGroupIdle(mGroup.getInterface(), GROUP_IDLE_TIME_S); mDhcpStateMachine = DhcpStateMachine.makeDhcpStateMachine(mContext, P2pStateMachine.this, mGroup.getInterface()); mDhcpStateMachine.sendMessage(DhcpStateMachine.CMD_START_DHCP); @@ -1455,6 +1460,13 @@ public class WifiP2pService extends IWifiP2pManager.Stub { sendMessage(PEER_CONNECTION_USER_REJECT); } }) + .setOnCancelListener(new DialogInterface.OnCancelListener() { + @Override + public void onCancel(DialogInterface arg0) { + if (DBG) logd(getName() + " ignore connect"); + sendMessage(PEER_CONNECTION_USER_REJECT); + } + }) .create(); //make the enter pin area or the display pin area visible |