diff options
35 files changed, 457 insertions, 446 deletions
diff --git a/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java b/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java index 8cd63efd414f..f9ef3c53644f 100644 --- a/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java +++ b/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java @@ -19,6 +19,7 @@ package com.android.internal.widget.multiwaveview; import android.animation.Animator; import android.animation.Animator.AnimatorListener; import android.animation.AnimatorListenerAdapter; +import android.animation.ObjectAnimator; import android.animation.TimeInterpolator; import android.animation.ValueAnimator; import android.animation.ValueAnimator.AnimatorUpdateListener; @@ -27,6 +28,7 @@ import android.content.res.Resources; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.RectF; +import android.graphics.drawable.Drawable; import android.os.Vibrator; import android.text.TextUtils; import android.util.AttributeSet; @@ -52,10 +54,11 @@ public class MultiWaveView extends View { // Wave state machine private static final int STATE_IDLE = 0; - private static final int STATE_FIRST_TOUCH = 1; - private static final int STATE_TRACKING = 2; - private static final int STATE_SNAP = 3; - private static final int STATE_FINISH = 4; + private static final int STATE_START = 1; + private static final int STATE_FIRST_TOUCH = 2; + private static final int STATE_TRACKING = 3; + private static final int STATE_SNAP = 4; + private static final int STATE_FINISH = 5; // Animation properties. private static final float SNAP_MARGIN_DEFAULT = 20.0f; // distance to ring before we snap to it @@ -74,17 +77,18 @@ public class MultiWaveView extends View { private static final int CHEVRON_INCREMENTAL_DELAY = 160; private static final int CHEVRON_ANIMATION_DURATION = 850; private static final int RETURN_TO_HOME_DELAY = 1200; - private static final int RETURN_TO_HOME_DURATION = 300; + private static final int RETURN_TO_HOME_DURATION = 200; private static final int HIDE_ANIMATION_DELAY = 200; private static final int HIDE_ANIMATION_DURATION = 200; private static final int SHOW_ANIMATION_DURATION = 200; private static final int SHOW_ANIMATION_DELAY = 50; + private static final int INITIAL_SHOW_HANDLE_DURATION = 200; + private static final float TAP_RADIUS_SCALE_ACCESSIBILITY_ENABLED = 1.3f; - private static final float TARGET_SCALE_SELECTED = 0.8f; - private static final long INITIAL_SHOW_HANDLE_DURATION = 200; - private static final float TARGET_SCALE_UNSELECTED = 1.0f; - private static final float RING_SCALE_UNSELECTED = 0.5f; - private static final float RING_SCALE_SELECTED = 1.5f; + private static final float TARGET_SCALE_EXPANDED = 1.0f; + private static final float TARGET_SCALE_COLLAPSED = 0.8f; + private static final float RING_SCALE_EXPANDED = 1.0f; + private static final float RING_SCALE_COLLAPSED = 0.5f; private TimeInterpolator mChevronAnimationInterpolator = Ease.Quad.easeOut; @@ -182,7 +186,7 @@ public class MultiWaveView extends View { if (mNewTargetResources != 0) { internalSetTargetResources(mNewTargetResources); mNewTargetResources = 0; - hideTargets(false); + hideTargets(false, false); } mAnimatingTargets = false; } @@ -195,6 +199,7 @@ public class MultiWaveView extends View { private int mVerticalInset; private int mGravity = Gravity.TOP; private boolean mInitialLayout = true; + private Tweener mBackgroundAnimator; public MultiWaveView(Context context) { this(context, null); @@ -358,14 +363,21 @@ public class MultiWaveView extends View { switch (state) { case STATE_IDLE: deactivateTargets(); + hideTargets(true, false); + startBackgroundAnimation(0, 0.0f); mHandleDrawable.setState(TargetDrawable.STATE_INACTIVE); break; + case STATE_START: + deactivateHandle(0, 0, 1.0f, null); + startBackgroundAnimation(0, 0.0f); + break; + case STATE_FIRST_TOUCH: - stopHandleAnimation(); deactivateTargets(); showTargets(true); - activateHandle(); + mHandleDrawable.setState(TargetDrawable.STATE_ACTIVE); + startBackgroundAnimation(INITIAL_SHOW_HANDLE_DURATION, 1.0f); setGrabbedState(OnTriggerListener.CENTER_HANDLE); if (AccessibilityManager.getInstance(mContext).isEnabled()) { announceTargets(); @@ -384,17 +396,29 @@ public class MultiWaveView extends View { } } - private void activateHandle() { - mHandleDrawable.setState(TargetDrawable.STATE_ACTIVE); - if (mAlwaysTrackFinger) { - mHandleAnimations.stop(); - mHandleDrawable.setAlpha(0.0f); - mHandleAnimations.add(Tweener.to(mHandleDrawable, INITIAL_SHOW_HANDLE_DURATION, - "ease", Ease.Cubic.easeIn, - "alpha", 1.0f, - "onUpdate", mUpdateListener)); - mHandleAnimations.start(); - } + private void activateHandle(int duration, int delay, float finalAlpha, + AnimatorListener finishListener) { + mHandleAnimations.cancel(); + mHandleAnimations.add(Tweener.to(mHandleDrawable, duration, + "ease", Ease.Cubic.easeIn, + "delay", delay, + "alpha", finalAlpha, + "onUpdate", mUpdateListener, + "onComplete", finishListener)); + mHandleAnimations.start(); + } + + private void deactivateHandle(int duration, int delay, float finalAlpha, + AnimatorListener finishListener) { + mHandleAnimations.cancel(); + mHandleAnimations.add(Tweener.to(mHandleDrawable, duration, + "ease", Ease.Quart.easeOut, + "delay", delay, + "alpha", finalAlpha, + "x", 0, + "y", 0, + "onUpdate", mUpdateListener, + "onComplete", finishListener)); } /** @@ -441,14 +465,6 @@ public class MultiWaveView extends View { mChevronAnimations.start(); } - private void stopChevronAnimation() { - mChevronAnimations.stop(); - } - - private void stopHandleAnimation() { - mHandleAnimations.stop(); - } - private void deactivateTargets() { final int count = mTargetDrawables.size(); for (int i = 0; i < count; i++) { @@ -493,39 +509,33 @@ public class MultiWaveView extends View { private void doFinish() { final int activeTarget = mActiveTarget; - boolean targetHit = activeTarget != -1; - - // Hide unselected targets - hideTargets(true); + final boolean targetHit = activeTarget != -1; - // Highlight the selected one - mHandleAnimations.cancel(); if (targetHit) { - mHandleDrawable.setAlpha(0.0f); - mTargetDrawables.get(activeTarget).setState(TargetDrawable.STATE_ACTIVE); - hideUnselected(activeTarget); + if (DEBUG) Log.v(TAG, "Finish with target hit = " + targetHit); + + highlightSelected(activeTarget); // Inform listener of any active targets. Typically only one will be active. - if (DEBUG) Log.v(TAG, "Finish with target hit = " + targetHit); + deactivateHandle(RETURN_TO_HOME_DURATION, RETURN_TO_HOME_DELAY, 0.0f, mResetListener); dispatchTriggerEvent(activeTarget); + } else { + // Animate handle back to the center based on current state. + deactivateHandle(HIDE_ANIMATION_DURATION, HIDE_ANIMATION_DELAY, 1.0f, + mResetListenerWithPing); + hideTargets(true, false); + mHandleAnimations.start(); } - // Animate handle back to the center based on current state. - int delay = targetHit ? RETURN_TO_HOME_DELAY : 0; - int duration = RETURN_TO_HOME_DURATION; - mHandleAnimations.add(Tweener.to(mHandleDrawable, duration, - "ease", Ease.Quart.easeOut, - "delay", delay, - "alpha", mAlwaysTrackFinger ? 0.0f : 1.0f, - "x", 0, - "y", 0, - "onUpdate", mUpdateListener, - "onComplete", (mDragging && !targetHit) ? mResetListenerWithPing : mResetListener)); - mHandleAnimations.start(); - setGrabbedState(OnTriggerListener.NO_HANDLE); } + private void highlightSelected(int activeTarget) { + // Highlight the given target and fade others + mTargetDrawables.get(activeTarget).setState(TargetDrawable.STATE_ACTIVE); + hideUnselected(activeTarget); + } + private void hideUnselected(int active) { for (int i = 0; i < mTargetDrawables.size(); i++) { if (i != active) { @@ -535,16 +545,15 @@ public class MultiWaveView extends View { mOuterRing.setAlpha(0.0f); } - private void hideTargets(boolean animate) { + private void hideTargets(boolean animate, boolean expanded) { mTargetAnimations.cancel(); // Note: these animations should complete at the same time so that we can swap out // the target assets asynchronously from the setTargetResources() call. mAnimatingTargets = animate; final int duration = animate ? HIDE_ANIMATION_DURATION : 0; final int delay = animate ? HIDE_ANIMATION_DELAY : 0; - final boolean targetSelected = mActiveTarget != -1; - final float targetScale = targetSelected ? TARGET_SCALE_SELECTED : TARGET_SCALE_UNSELECTED; + final float targetScale = expanded ? TARGET_SCALE_EXPANDED : TARGET_SCALE_COLLAPSED; final int length = mTargetDrawables.size(); for (int i = 0; i < length; i++) { TargetDrawable target = mTargetDrawables.get(i); @@ -558,7 +567,7 @@ public class MultiWaveView extends View { "onUpdate", mUpdateListener)); } - final float ringScaleTarget = targetSelected ? RING_SCALE_SELECTED : RING_SCALE_UNSELECTED; + final float ringScaleTarget = expanded ? RING_SCALE_EXPANDED : RING_SCALE_COLLAPSED; mTargetAnimations.add(Tweener.to(mOuterRing, duration, "ease", Ease.Cubic.easeOut, "alpha", 0.0f, @@ -580,8 +589,6 @@ public class MultiWaveView extends View { for (int i = 0; i < length; i++) { TargetDrawable target = mTargetDrawables.get(i); target.setState(TargetDrawable.STATE_INACTIVE); - target.setScaleX(TARGET_SCALE_SELECTED); - target.setScaleY(TARGET_SCALE_SELECTED); mTargetAnimations.add(Tweener.to(target, duration, "ease", Ease.Cubic.easeOut, "alpha", 1.0f, @@ -732,17 +739,30 @@ public class MultiWaveView extends View { * @param animate */ public void reset(boolean animate) { - stopChevronAnimation(); - stopHandleAnimation(); + mChevronAnimations.stop(); + mHandleAnimations.stop(); mTargetAnimations.stop(); + startBackgroundAnimation(0, 0.0f); hideChevrons(); - hideTargets(animate); - mHandleDrawable.setX(0); - mHandleDrawable.setY(0); - mHandleDrawable.setState(TargetDrawable.STATE_INACTIVE); + hideTargets(animate, false); + deactivateHandle(0, 0, 1.0f, null); Tweener.reset(); } + private void startBackgroundAnimation(int duration, float alpha) { + Drawable background = getBackground(); + if (mAlwaysTrackFinger && background != null) { + if (mBackgroundAnimator != null) { + mBackgroundAnimator.animator.end(); + } + mBackgroundAnimator = Tweener.to(background, duration, + "ease", Ease.Cubic.easeIn, + "alpha", new int[] {0, (int)(255.0f * alpha)}, + "delay", SHOW_ANIMATION_DELAY); + mBackgroundAnimator.animator.start(); + } + } + @Override public boolean onTouchEvent(MotionEvent event) { final int action = event.getAction(); @@ -784,7 +804,10 @@ public class MultiWaveView extends View { } private void handleDown(MotionEvent event) { - if (!trySwitchToFirstTouchState(event.getX(), event.getY())) { + float eventX = event.getX(); + float eventY = event.getY(); + switchToState(STATE_START, eventX, eventY); + if (!trySwitchToFirstTouchState(eventX, eventY)) { mDragging = false; mTargetAnimations.cancel(); ping(); @@ -830,7 +853,9 @@ public class MultiWaveView extends View { if (!mDragging) { trySwitchToFirstTouchState(eventX, eventY); - } else { + } + + if (mDragging) { if (singleTarget) { // Snap to outer ring if there's only one target float snapRadius = mOuterRadius - mSnapMargin; @@ -865,17 +890,11 @@ public class MultiWaveView extends View { if (activeTarget != -1) { switchToState(STATE_SNAP, x,y); TargetDrawable target = targets.get(activeTarget); - float newX = singleTarget ? x : target.getX(); - float newY = singleTarget ? y : target.getY(); + final float newX = singleTarget ? x : target.getX(); + final float newY = singleTarget ? y : target.getY(); moveHandleTo(newX, newY, false); - mHandleAnimations.cancel(); - mHandleDrawable.setAlpha(0.0f); } else { switchToState(STATE_TRACKING, x, y); - if (mActiveTarget != -1) { - mHandleAnimations.cancel(); - mHandleDrawable.setAlpha(1.0f); - } moveHandleTo(x, y, false); } @@ -900,6 +919,9 @@ public class MultiWaveView extends View { String targetContentDescription = getTargetDescription(activeTarget); announceText(targetContentDescription); } + activateHandle(0, 0, 0.0f, null); + } else { + activateHandle(0, 0, 1.0f, null); } } mActiveTarget = activeTarget; @@ -1021,7 +1043,7 @@ public class MultiWaveView extends View { if (mInitialLayout) { hideChevrons(); - hideTargets(false); + hideTargets(false, false); moveHandleTo(0, 0, false); mInitialLayout = false; } diff --git a/core/java/com/android/internal/widget/multiwaveview/Tweener.java b/core/java/com/android/internal/widget/multiwaveview/Tweener.java index 1d502ba5c4ea..d559d9dae2b3 100644 --- a/core/java/com/android/internal/widget/multiwaveview/Tweener.java +++ b/core/java/com/android/internal/widget/multiwaveview/Tweener.java @@ -83,6 +83,9 @@ class Tweener { } else if (value instanceof float[]) { props.add(PropertyValuesHolder.ofFloat(key, ((float[])value)[0], ((float[])value)[1])); + } else if (value instanceof int[]) { + props.add(PropertyValuesHolder.ofInt(key, + ((int[])value)[0], ((int[])value)[1])); } else if (value instanceof Number) { float floatValue = ((Number)value).floatValue(); props.add(PropertyValuesHolder.ofFloat(key, floatValue)); diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml index c8bb77e856d5..fb11af3c21e7 100644 --- a/core/res/res/values-am/strings.xml +++ b/core/res/res/values-am/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"ጥያቄ አጥራ"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"ጥያቄ አስረክብ"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"የድምፅ ፍለጋ"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"በመንካት አስስ ይንቃ?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> ማሰስን በንኪ ማንቃት ይፈልጋል። አስስ በንኪ በሚበራበት ጊዜ፣ ከጡባዊ ተኮው ጋር ለመግባባት ምን በጣትህ ስር ወይም ምልክቶችን ማከናወን እንዳለብህ ማብራሪያ ልታይ ወይም ልትሰማ ትችላለህ።"</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> ማሰስን በንኪ ማንቃት ይፈልጋል። አስስ በንኪ በሚበራበት ጊዜ፣ ከስልኩ ጋር ለመግባባት ምን በጣትህ ስር ወይም ምልክቶችን ማከናወን እንዳለብህ ማብራሪያ ልታይ ወይም ልትሰማ ትችላለህ።"</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"ከ1 ወር በፊት"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"ከ1 ወር በፊት"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"የግቤት ስልቶችን አዘጋጅ"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"የሚዳሰስ የቁልፍ ሰሌዳ"</string> <string name="hardware" msgid="7517821086888990278">"ሃርድዌር"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"የቁልፍ ሰሌዳ አቀማመጥ ምረጥ"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"የቁልፍ ሰሌዳ አቀማመጥ ለመምረጥ ንካ።"</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"ዕጩዎች"</u></string> @@ -1324,6 +1319,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"ማሰሺያን አስነሳ?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"ጥሪ ተቀበል?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"ዘወትር"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"አንዴ ብቻ"</string> </resources> diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml index 97876f6aafb4..4190bdba2b0a 100644 --- a/core/res/res/values-ca/strings.xml +++ b/core/res/res/values-ca/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"Neteja la consulta"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"Envia la consulta"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Cerca per veu"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Vols activar l\'Exploració per tacte?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> vol activar l\'Exploració per tacte. Quan l\'Exploració per tacte està activada, pots escoltar o veure les descripcions del que hi ha sota el dit o fer gestos per interactuar amb la tauleta."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> vol activar l\'Exploració per tacte. Quan l\'Exploració per tacte està activada, pots escoltar o veure les descripcions del que hi ha sota el dit o fer gestos per interactuar amb el telèfon."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"Fa 1 mes"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Fa menys d\'1 mes"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"Configura els mètodes d\'entrada"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Teclat físic"</string> <string name="hardware" msgid="7517821086888990278">"Maquinari"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Selecciona una disposició de teclat"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Toca per seleccionar una disposició de teclat."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"candidats"</u></string> @@ -1324,6 +1319,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Vols iniciar el navegador?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Vols acceptar la trucada?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Sempre"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Només una"</string> </resources> diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml index acd4bbad209e..ad25a3e67f0e 100644 --- a/core/res/res/values-cs/strings.xml +++ b/core/res/res/values-cs/strings.xml @@ -145,7 +145,7 @@ <string name="shutdown_progress" msgid="2281079257329981203">"Vypínání..."</string> <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Tablet se vypne."</string> <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Váš telefon bude vypnut."</string> - <string name="shutdown_confirm_question" msgid="2906544768881136183">"Chcete vypnout telefon?"</string> + <string name="shutdown_confirm_question" msgid="2906544768881136183">"Chcete zařízení vypnout?"</string> <string name="reboot_safemode_title" msgid="7054509914500140361">"Restart v nouzovém režimu"</string> <string name="reboot_safemode_confirm" msgid="55293944502784668">"Chcete zařízení restartovat v nouzovém režimu? Deaktivujete tak veškeré nainstalované aplikace třetích stran. Po dalším restartu budou obnoveny."</string> <string name="recent_tasks_title" msgid="3691764623638127888">"Nejnovější"</string> @@ -1205,7 +1205,7 @@ <string name="throttled_notification_title" msgid="6269541897729781332">"Byl překročen limit mobilních dat"</string> <string name="throttled_notification_message" msgid="5443457321354907181">"Dotykem zobrazíte další informace o využití mobilních dat."</string> <string name="no_matches" msgid="8129421908915840737">"Žádné shody"</string> - <string name="find_on_page" msgid="1946799233822820384">"Vyhledat na stránce"</string> + <string name="find_on_page" msgid="1946799233822820384">"Hledat na stránce"</string> <plurals name="matches_found"> <item quantity="one" msgid="8167147081136579439">"1 shoda"</item> <item quantity="other" msgid="4641872797067609177">"<xliff:g id="INDEX">%d</xliff:g> z <xliff:g id="TOTAL">%d</xliff:g>"</item> diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml index c44f789b6384..8cde21f2ac05 100644 --- a/core/res/res/values-el/strings.xml +++ b/core/res/res/values-el/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"Απαλοιφή ερωτήματος"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"Υποβολή ερωτήματος"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Φωνητική αναζήτηση"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Ενεργοποίηση Αναζήτησης μέσω αφής;"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"Η υπηρεσία <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> απαιτεί ενεργοποίηση της Εξερεύνησης μέσω αφής. Όταν είναι ενεργοποιημένη η Εξερεύνηση μέσω αφής, μπορείτε να δείτε ή να ακούσετε περιγραφές για τις επιλογές που βρίσκονται κάτω από το δάχτυλό σας ή να κάνετε κινήσεις αλληλεπίδρασης με το tablet σας."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"Η υπηρεσία <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> απαιτεί ενεργοποίηση της Εξερεύνησης μέσω αφής. Όταν είναι ενεργοποιημένη η Εξερεύνηση μέσω αφής, μπορείτε να δείτε ή να ακούσετε περιγραφές για τις επιλογές που βρίσκονται κάτω από το δάχτυλό σας ή να κάνετε κινήσεις αλληλεπίδρασης με το τηλέφωνό σας."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"πριν από 1 μήνα"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Παλαιότερα από 1 μήνα"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"Ρύθμιση μεθόδων εισαγωγής"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Φυσικό πληκτρολόγιο"</string> <string name="hardware" msgid="7517821086888990278">"Υλικό"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Επιλογή διάταξης πληκτρολογίου"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Αγγίξτε για να επιλέξετε διάταξη πληκτρολογίου."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"υποψήφιοι"</u></string> @@ -1324,6 +1319,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Εκκίνηση προγράμματος περιήγησης;"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Αποδοχή κλήσης;"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Πάντα"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Μόνο μία φορά"</string> </resources> diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml index a54c479d8b2a..4ad7daf9cb38 100644 --- a/core/res/res/values-en-rGB/strings.xml +++ b/core/res/res/values-en-rGB/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"Clear query"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"Submit query"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Voice search"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Enable Explore by Touch?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> wants to enable Explore by Touch. When Explore by Touch is turned on, you can hear or see descriptions of what\'s under your finger or perform gestures to interact with the tablet."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> wants to enable Explore by Touch. When Explore by Touch is turned on, you can hear or see descriptions of what\'s under your finger or perform gestures to interact with the phone."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"1 month ago"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Before 1 month ago"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"Set up input methods"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Physical keyboard"</string> <string name="hardware" msgid="7517821086888990278">"Hardware"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Select keyboard layout"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Touch to select a keyboard layout."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"candidates"</u></string> @@ -1324,6 +1319,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Launch Browser?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Accept call?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Always"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Just once"</string> </resources> diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml index f5ffece2e9f4..f5d879522a48 100644 --- a/core/res/res/values-es/strings.xml +++ b/core/res/res/values-es/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"Borrar consulta"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"Enviar consulta"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Búsqueda por voz"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"¿Habilitar exploración táctil?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> quiere habilitar la exploración táctil. Cuando esta función esté activada, podrás escuchar o ver descripciones del contenido seleccionado o usar gestos para interactuar con el tablet."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> quiere habilitar la exploración táctil. Cuando esta función esté activada, podrás escuchar o ver descripciones del contenido seleccionado o usar gestos para interactuar con el teléfono."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"Hace un mes"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Hace más de un mes"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"Configurar métodos de introducción"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Teclado físico"</string> <string name="hardware" msgid="7517821086888990278">"Hardware"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Selecciona un diseño de teclado"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Toca para seleccionar un diseño de teclado."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"candidatos"</u></string> @@ -1324,6 +1319,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"¿Iniciar el navegador?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"¿Aceptar la llamada?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Siempre"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Solo una vez"</string> </resources> diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml index ea57cf5f8755..eaa7c94f297a 100644 --- a/core/res/res/values-et/strings.xml +++ b/core/res/res/values-et/strings.xml @@ -318,7 +318,7 @@ <string name="permlab_bindInputMethod" msgid="3360064620230515776">"seo sisestusmeetodiga"</string> <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Lubab omanikul siduda sisestusmeetodi ülataseme liidesega. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string> <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"sidumine juurdepääsuteenusega"</string> - <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Lubab omanikul luua sideme juurdepääsuteenuseteenuse ülataseme liidesega. Tavarakenduste puhul ei tohiks seda kunagi vaja minna."</string> + <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Lubab omanikul luua sideme juurdepääsuteenuse ülataseme liidesega. Tavarakenduste puhul ei tohiks seda kunagi vaja minna."</string> <string name="permlab_bindTextService" msgid="7358378401915287938">"tekstiteenusega sidumine"</string> <string name="permdesc_bindTextService" msgid="8151968910973998670">"Võimaldab omanikul siduda tekstiteenuse (nt SpellCheckerService) ülataseme liidesega. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string> <string name="permlab_bindVpnService" msgid="4708596021161473255">"seo VPN-teenusega"</string> diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml index f249c2c51e3e..f0187ecdc05a 100644 --- a/core/res/res/values-in/strings.xml +++ b/core/res/res/values-in/strings.xml @@ -606,30 +606,30 @@ <item msgid="1735177144948329370">"Faks Rumah"</item> <item msgid="603878674477207394">"Pager"</item> <item msgid="1650824275177931637">"Lainnya"</item> - <item msgid="9192514806975898961">"Ubahsuaian"</item> + <item msgid="9192514806975898961">"Khusus"</item> </string-array> <string-array name="emailAddressTypes"> <item msgid="8073994352956129127">"Rumah"</item> <item msgid="7084237356602625604">"Kantor"</item> <item msgid="1112044410659011023">"Lainnya"</item> - <item msgid="2374913952870110618">"Ubahsuaian"</item> + <item msgid="2374913952870110618">"Khusus"</item> </string-array> <string-array name="postalAddressTypes"> <item msgid="6880257626740047286">"Rumah"</item> <item msgid="5629153956045109251">"Kantor"</item> <item msgid="4966604264500343469">"Lainnya"</item> - <item msgid="4932682847595299369">"Ubahsuaian"</item> + <item msgid="4932682847595299369">"Khusus"</item> </string-array> <string-array name="imAddressTypes"> <item msgid="1738585194601476694">"Rumah"</item> <item msgid="1359644565647383708">"Kantor"</item> <item msgid="7868549401053615677">"Lainnya"</item> - <item msgid="3145118944639869809">"Ubahsuaian"</item> + <item msgid="3145118944639869809">"Khusus"</item> </string-array> <string-array name="organizationTypes"> <item msgid="7546335612189115615">"Kantor"</item> <item msgid="4378074129049520373">"Lainnya"</item> - <item msgid="3455047468583965104">"Ubahsuaian"</item> + <item msgid="3455047468583965104">"Khusus"</item> </string-array> <string-array name="imProtocols"> <item msgid="8595261363518459565">"AIM"</item> @@ -641,7 +641,7 @@ <item msgid="2506857312718630823">"ICQ"</item> <item msgid="1648797903785279353">"Jabber"</item> </string-array> - <string name="phoneTypeCustom" msgid="1644738059053355820">"Ubahsuaian"</string> + <string name="phoneTypeCustom" msgid="1644738059053355820">"Khusus"</string> <string name="phoneTypeHome" msgid="2570923463033985887">"Rumah"</string> <string name="phoneTypeMobile" msgid="6501463557754751037">"Seluler"</string> <string name="phoneTypeWork" msgid="8863939667059911633">"Kantor"</string> @@ -662,24 +662,24 @@ <string name="phoneTypeWorkPager" msgid="649938731231157056">"Pager Kantor"</string> <string name="phoneTypeAssistant" msgid="5596772636128562884">"Asisten"</string> <string name="phoneTypeMms" msgid="7254492275502768992">"MMS"</string> - <string name="eventTypeCustom" msgid="7837586198458073404">"Ubahsuaian"</string> + <string name="eventTypeCustom" msgid="7837586198458073404">"Khusus"</string> <string name="eventTypeBirthday" msgid="2813379844211390740">"Hari Ulang Tahun"</string> <string name="eventTypeAnniversary" msgid="3876779744518284000">"Hari Peringatan"</string> <string name="eventTypeOther" msgid="7388178939010143077">"Lainnya"</string> - <string name="emailTypeCustom" msgid="8525960257804213846">"Ubahsuaian"</string> + <string name="emailTypeCustom" msgid="8525960257804213846">"Khusus"</string> <string name="emailTypeHome" msgid="449227236140433919">"Rumah"</string> <string name="emailTypeWork" msgid="3548058059601149973">"Kantor"</string> <string name="emailTypeOther" msgid="2923008695272639549">"Lainnya"</string> <string name="emailTypeMobile" msgid="119919005321166205">"Seluler"</string> - <string name="postalTypeCustom" msgid="8903206903060479902">"Ubahsuaian"</string> + <string name="postalTypeCustom" msgid="8903206903060479902">"Khusus"</string> <string name="postalTypeHome" msgid="8165756977184483097">"Rumah"</string> <string name="postalTypeWork" msgid="5268172772387694495">"Kantor"</string> <string name="postalTypeOther" msgid="2726111966623584341">"Lainnya"</string> - <string name="imTypeCustom" msgid="2074028755527826046">"Ubahsuaian"</string> + <string name="imTypeCustom" msgid="2074028755527826046">"Khusus"</string> <string name="imTypeHome" msgid="6241181032954263892">"Rumah"</string> <string name="imTypeWork" msgid="1371489290242433090">"Kantor"</string> <string name="imTypeOther" msgid="5377007495735915478">"Lainnya"</string> - <string name="imProtocolCustom" msgid="6919453836618749992">"Ubahsuaian"</string> + <string name="imProtocolCustom" msgid="6919453836618749992">"Khusus"</string> <string name="imProtocolAim" msgid="7050360612368383417">"AIM"</string> <string name="imProtocolMsn" msgid="144556545420769442">"Windows Live"</string> <string name="imProtocolYahoo" msgid="8271439408469021273">"Yahoo"</string> @@ -691,8 +691,8 @@ <string name="imProtocolNetMeeting" msgid="8287625655986827971">"NetMeeting"</string> <string name="orgTypeWork" msgid="29268870505363872">"Kantor"</string> <string name="orgTypeOther" msgid="3951781131570124082">"Lainnya"</string> - <string name="orgTypeCustom" msgid="225523415372088322">"Ubahsuaian"</string> - <string name="relationTypeCustom" msgid="3542403679827297300">"Ubahsuaian"</string> + <string name="orgTypeCustom" msgid="225523415372088322">"Khusus"</string> + <string name="relationTypeCustom" msgid="3542403679827297300">"Khusus"</string> <string name="relationTypeAssistant" msgid="6274334825195379076">"Asisten"</string> <string name="relationTypeBrother" msgid="8757913506784067713">"Saudara laki-laki"</string> <string name="relationTypeChild" msgid="1890746277276881626">"Anak"</string> @@ -707,7 +707,7 @@ <string name="relationTypeRelative" msgid="1799819930085610271">"Sanak saudara"</string> <string name="relationTypeSister" msgid="1735983554479076481">"Saudara perempuan"</string> <string name="relationTypeSpouse" msgid="394136939428698117">"Pasangan"</string> - <string name="sipAddressTypeCustom" msgid="2473580593111590945">"Ubahsuaian"</string> + <string name="sipAddressTypeCustom" msgid="2473580593111590945">"Khusus"</string> <string name="sipAddressTypeHome" msgid="6093598181069359295">"Beranda"</string> <string name="sipAddressTypeWork" msgid="6920725730797099047">"Kerjaan"</string> <string name="sipAddressTypeOther" msgid="4408436162950119849">"Lainnya"</string> diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml index 65cb68828062..265da954371c 100644 --- a/core/res/res/values-iw/strings.xml +++ b/core/res/res/values-iw/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"נקה שאילתה"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"שלח שאילתה"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"חיפוש קולי"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"האם להפעיל את התכונה \'חקור על ידי מגע\'?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> רוצה להפעיל את התכונה \'חקור על ידי מגע\'. כאשר התכונה \'חקור על ידי מגע\' מופעלת, אתה יכול לשמוע או לראות תיאורים של הפריטים שעליהם אצבעך מונחת או לקיים אינטראקציה עם הטאבלט באמצעות מחוות."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> רוצה להפעיל את התכונה \'חקור על ידי מגע\'. כאשר התכונה \'חקור על ידי מגע\' מופעלת, אתה יכול לשמוע או לראות תיאורים של הפריטים שעליהם אצבעך מונחת או לקיים אינטראקציה עם הטלפון באמצעות מחוות."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"לפני חודש אחד"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"לפני חודש אחד"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"הגדר שיטות קלט"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"מקלדת פיזית"</string> <string name="hardware" msgid="7517821086888990278">"חומרה"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"בחירת פריסת מקלדת"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"גע כדי לבחור פריסת מקלדת."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"מועמדים"</u></string> @@ -1324,6 +1319,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"להפעיל את הדפדפן?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"האם לקבל את השיחה?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"תמיד"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"רק פעם אחת"</string> </resources> diff --git a/core/res/res/values-large/config.xml b/core/res/res/values-large/config.xml index 932720089075..d1ec4efc9a02 100644 --- a/core/res/res/values-large/config.xml +++ b/core/res/res/values-large/config.xml @@ -24,9 +24,6 @@ <dimen name="config_prefDialogWidth">440dp</dimen> <!-- see comment in values/config.xml --> - <integer name="config_longPressOnPowerBehavior">2</integer> - - <!-- see comment in values/config.xml --> <integer name="config_longPressOnHomeBehavior">0</integer> </resources> diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml index 90398a3b7ce8..2e019d4e2442 100644 --- a/core/res/res/values-sl/strings.xml +++ b/core/res/res/values-sl/strings.xml @@ -317,8 +317,8 @@ <string name="permdesc_readInputState" msgid="8387754901688728043">"Programu omogoča spremljanje tipk, ki jih pritisnete med interakcijo z drugim programom (na primer vnos gesla). Navadni programi tega nikoli ne potrebujejo."</string> <string name="permlab_bindInputMethod" msgid="3360064620230515776">"povezovanje z načinom vnosa"</string> <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Lastniku omogoča, da se poveže z vmesnikom načina vnosa najvišje ravni. Tega nikoli ni treba uporabiti za navadne programe."</string> - <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"vezano na storitev za ljudi s posebnimi potrebami"</string> - <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Lastniku omogoča povezovanje z vmesnikom storitve za ljudi s posebnimi potrebami najvišje ravni. Tega nikoli ni treba uporabiti za navadne aplikacije."</string> + <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"povezovanje s storitvijo za ljudi s posebnimi potrebami"</string> + <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Lastniku omogoča povezovanje z vmesnikom najvišje ravni storitve za ljudi s posebnimi potrebami. Tega nikoli ni treba uporabiti za navadne aplikacije."</string> <string name="permlab_bindTextService" msgid="7358378401915287938">"poveži z besedilno storitvijo"</string> <string name="permdesc_bindTextService" msgid="8151968910973998670">"Dovoljuje, da se lastnik poveže z vmesnikom besedilne storitve najvišje ravni (npr. SpellCheckerService). Tega nikoli ni treba uporabiti za navadne programe."</string> <string name="permlab_bindVpnService" msgid="4708596021161473255">"povezava s storitvijo navideznega zasebnega omrežja"</string> diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml index 40345d18da1f..35079c580e5d 100644 --- a/core/res/res/values-sw/strings.xml +++ b/core/res/res/values-sw/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"Futa swali"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"Wasilisha hoja"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Utafutaji wa sauti"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Wezesha Kuchunguza kwa Kugusa?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> inataka kuwezesha Kuchunguza kwa Kugusa. Wakati Kuchunguza kwa Kugusa kumewezeshwa, unaweza kusikia au kuona maelezo ya ni nini kilichochini ya kidole chako au kufanya ishara za kuingiliana na kumpyuta ndogo."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> inataka kuwezesha Kuchunguza kwa Kugusa. Wakati Kuchunguza kwa Kugusa kumewezeshwa, unaweza kusikia au kuona maelezo ya ni nini kilichochini ya kidole chako au kufanya ishara za kuingiliana na simu."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"Mwezi 1 uliopita"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Kabla ya mwezi 1 uliopita"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"Weka mbinu za ingizo"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Kibodi halisi"</string> <string name="hardware" msgid="7517821086888990278">"Maunzi"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Teua mpangilio wa kibodi"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Gusa kuchagua mpangilio wa kibodi."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"wagombeaji"</u></string> @@ -1324,6 +1319,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Zindua Kivinjari?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Kubali simu?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Kila mara"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Mara moja tu"</string> </resources> diff --git a/core/res/res/values-sw600dp/config.xml b/core/res/res/values-sw600dp/config.xml index b54e9d19ac85..1486d9c9ad33 100644 --- a/core/res/res/values-sw600dp/config.xml +++ b/core/res/res/values-sw600dp/config.xml @@ -20,9 +20,6 @@ <!-- These resources are around just to allow their values to be customized for different hardware and product builds. --> <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <!-- see comment in values/config.xml --> - <integer name="config_longPressOnPowerBehavior">2</integer> - <!-- Enable lockscreen rotation --> <bool name="config_enableLockScreenRotation">true</bool> diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml index 8de8e5e54d0c..34e443362cc3 100644 --- a/core/res/res/values-th/strings.xml +++ b/core/res/res/values-th/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"ล้างข้อความค้นหา"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"ส่งข้อความค้นหา"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"ค้นหาด้วยเสียง"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"เปิดใช้งาน \"สำรวจโดยการแตะ\" หรือไม่"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> ต้องการเปิดใช้งาน \"สำรวจโดยการแตะ\" เมื่อเปิดใช้งานแล้ว คุณสามารถฟังหรือดูคำอธิบายของสิ่งที่อยู่ใต้นิ้วของคุณ หรือใช้ท่าทางสัมผัสต่างๆ เพื่อโต้ตอบกับแท็บเล็ตได้"</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> ต้องการเปิดใช้งาน \"สำรวจโดยการแตะ\" เมื่อเปิดใช้งานแล้ว คุณสามารถฟังหรือดูคำอธิบายของสิ่งที่อยู่ใต้นิ้วของคุณ หรือใช้ท่าทางสัมผัสต่างๆ เพื่อโต้ตอบกับโทรศัพท์ได้"</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"1 เดือนที่ผ่านมา"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"ก่อน 1 เดือนที่แล้ว"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"ตั้งค่าวิธีการป้อนข้อมูล"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"แป้นพิมพ์บนเครื่อง"</string> <string name="hardware" msgid="7517821086888990278">"ฮาร์ดแวร์"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"เลือกรูปแบบแป้นพิมพ์"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"แตะเพื่อเลือกรูปแบบแป้นพิมพ์"</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรลวศษสหฬอฮ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรลวศษสหฬอฮ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"ตัวเลือก"</u></string> @@ -1324,6 +1319,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"เปิดเบราว์เซอร์หรือไม่"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"รับสายหรือไม่"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"ทุกครั้ง"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"เฉพาะครั้งนี้"</string> </resources> diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index 7cd2d9db9e19..865761b463a0 100644 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -185,10 +185,10 @@ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"使用耗电量较大的功能。"</string> <string name="permgrouplab_calendar" msgid="5863508437783683902">"日历"</string> <string name="permgroupdesc_calendar" msgid="5777534316982184416">"直接访问日历和活动。"</string> - <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_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> @@ -211,7 +211,7 @@ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"访问同步设置。"</string> <string name="permgrouplab_accounts" msgid="3359646291125325519">"您的帐户"</string> <string name="permgroupdesc_accounts" msgid="4948732641827091312">"访问可用的帐户。"</string> - <string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"硬件控件"</string> + <string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"硬件控制"</string> <string name="permgroupdesc_hardwareControls" msgid="4357057861225462702">"直接访问手机上的硬件。"</string> <string name="permgrouplab_phoneCalls" msgid="9067173988325865923">"手机通话"</string> <string name="permgroupdesc_phoneCalls" msgid="7489701620446183770">"监管、记录和处理电话呼叫。"</string> @@ -554,7 +554,7 @@ <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"允许应用获取有关当前同步的 Feed 的详情。"</string> <string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"写入订阅的供稿"</string> <string name="permdesc_subscribedFeedsWrite" msgid="6928930188826089413">"允许应用修改您当前同步的 Feed。恶意应用可能会更改您的同步 Feed。"</string> - <string name="permlab_readDictionary" msgid="4107101525746035718">"读取您添加到字典的字词"</string> + <string name="permlab_readDictionary" msgid="4107101525746035718">"读取您添加到词典的字词"</string> <string name="permdesc_readDictionary" msgid="8977815988329283705">"允许应用读取用户可能在用户词典中已存储的任意私有字词、名称和短语。"</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"写入用户定义的词典"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"允许应用向用户词典中写入新词。"</string> @@ -1111,7 +1111,7 @@ <string name="dlg_confirm_kill_storage_users_text" msgid="5100428757107469454">"如果您打开 USB 存储设备,您正在使用的某些应用将会停止,并且在您关闭 USB 存储设备前都将无法使用。"</string> <string name="dlg_error_title" msgid="7323658469626514207">"USB 操作失败"</string> <string name="dlg_ok" msgid="7376953167039865701">"确定"</string> - <string name="usb_mtp_notification_title" msgid="3699913097391550394">"作为媒体设备连接"</string> + <string name="usb_mtp_notification_title" msgid="3699913097391550394">"已作为媒体设备连接"</string> <string name="usb_ptp_notification_title" msgid="1960817192216064833">"作为相机连接"</string> <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"作为安装程序连接"</string> <string name="usb_accessory_notification_title" msgid="7848236974087653666">"已连接到 USB 配件"</string> diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml index b67751334dbf..f24733cb3ebd 100644 --- a/core/res/res/values/attrs_manifest.xml +++ b/core/res/res/values/attrs_manifest.xml @@ -551,13 +551,13 @@ <enum name="sensorLandscape" value="6" /> <!-- Would like to have the screen in portrait orientation, but can use the sensor to change which direction the screen is facing. --> - <enum name="sensorPortait" value="7" /> + <enum name="sensorPortrait" value="7" /> <!-- Would like to have the screen in landscape orientation, turned in the opposite direction from normal landscape. --> <enum name="reverseLandscape" value="8" /> <!-- Would like to have the screen in portrait orientation, turned in the opposite direction from normal portrait. --> - <enum name="reversePortait" value="9" /> + <enum name="reversePortrait" value="9" /> <!-- Orientation is determined by a physical orientation sensor: the display will rotate based on how the user moves the device. This allows any of the 4 possible rotations, regardless of what diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml index a0980ff7fcd6..4cfbff504da6 100644 --- a/core/res/res/values/public.xml +++ b/core/res/res/values/public.xml @@ -1303,6 +1303,9 @@ <java-symbol type="string" name="global_actions_airplane_mode_off_status" /> <java-symbol type="string" name="global_actions_airplane_mode_on_status" /> <java-symbol type="string" name="global_actions_toggle_airplane_mode" /> + <java-symbol type="string" name="global_action_silent_mode_off_status" /> + <java-symbol type="string" name="global_action_silent_mode_on_status" /> + <java-symbol type="string" name="global_action_toggle_silent_mode" /> <java-symbol type="string" name="invalidPuk" /> <java-symbol type="string" name="keyguard_password_enter_pin_code" /> <java-symbol type="string" name="keyguard_password_enter_puk_code" /> diff --git a/media/java/android/media/MediaPlayer.java b/media/java/android/media/MediaPlayer.java index 9ed9de0696b8..586f11e83432 100644 --- a/media/java/android/media/MediaPlayer.java +++ b/media/java/android/media/MediaPlayer.java @@ -746,6 +746,7 @@ public class MediaPlayer try { request.writeInterfaceToken(IMEDIA_PLAYER); request.writeInt(INVOKE_ID_SET_VIDEO_SCALE_MODE); + request.writeInt(mode); invoke(request, reply); } finally { request.recycle(); diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar_search_panel.xml b/packages/SystemUI/res/layout-sw600dp/status_bar_search_panel.xml index 4da05d953935..74a15f22aefd 100644 --- a/packages/SystemUI/res/layout-sw600dp/status_bar_search_panel.xml +++ b/packages/SystemUI/res/layout-sw600dp/status_bar_search_panel.xml @@ -22,53 +22,26 @@ xmlns:prvandroid="http://schemas.android.com/apk/prv/res/android" xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/search_panel_container" - android:layout_height="wrap_content" - android:layout_width="match_parent" - android:paddingBottom="0dip"> - - <RelativeLayout - android:id="@+id/search_bg_protect" - android:layout_width="match_parent" - android:layout_height="wrap_content"> - - <RelativeLayout - android:id="@+id/search_panel_container" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_alignParentBottom="true" - android:layout_centerHorizontal="true"> - - <View - android:layout_width="0dip" - android:layout_height="0dip" - android:layout_alignTop="@id/multi_wave_view" - android:layout_alignLeft="@id/multi_wave_view" - android:layout_alignRight="@id/multi_wave_view" - android:layout_alignBottom="@id/multi_wave_view" - android:layout_marginBottom="@dimen/navigation_bar_size" - android:background="@drawable/navbar_search_bg_scrim"/> - - <com.android.internal.widget.multiwaveview.MultiWaveView - android:id="@+id/multi_wave_view" - android:orientation="horizontal" - android:layout_width="wrap_content" - android:layout_height="@dimen/navbar_search_panel_height" - android:layout_alignParentBottom="true" - android:gravity="top" - - prvandroid:targetDrawables="@array/navbar_search_targets" - prvandroid:targetDescriptions="@array/navbar_search_target_descriptions" - prvandroid:directionDescriptions="@array/navbar_search_direction_descriptions" - prvandroid:handleDrawable="@drawable/navbar_search_handle" - prvandroid:waveDrawable="@drawable/navbar_search_outerring" - prvandroid:snapMargin="@dimen/navbar_search_snap_margin" - prvandroid:hitRadius="@dimen/navbar_search_hit_radius" - prvandroid:feedbackCount="0" - prvandroid:vibrationDuration="@integer/config_vibration_duration" - prvandroid:alwaysTrackFinger="true"/> - - </RelativeLayout> - - </RelativeLayout> + android:layout_height="match_parent" + android:layout_width="match_parent"> + + <com.android.internal.widget.multiwaveview.MultiWaveView + android:id="@+id/multi_wave_view" + android:layout_width="wrap_content" + android:layout_height="@dimen/navbar_search_panel_height" + android:layout_gravity="center_horizontal|bottom" + android:gravity="center_horizontal|top" + android:background="@drawable/navbar_search_bg_scrim" + + prvandroid:targetDrawables="@array/navbar_search_targets" + prvandroid:targetDescriptions="@array/navbar_search_target_descriptions" + prvandroid:directionDescriptions="@array/navbar_search_direction_descriptions" + prvandroid:handleDrawable="@drawable/navbar_search_handle" + prvandroid:waveDrawable="@drawable/navbar_search_outerring" + prvandroid:snapMargin="@dimen/navbar_search_snap_margin" + prvandroid:hitRadius="@dimen/navbar_search_hit_radius" + prvandroid:feedbackCount="0" + prvandroid:vibrationDuration="@integer/config_vibration_duration" + prvandroid:alwaysTrackFinger="true"/> </com.android.systemui.SearchPanelView> 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 1ae8a694f877..2a97307a7428 100644 --- a/packages/SystemUI/res/layout-sw720dp/status_bar_search_panel.xml +++ b/packages/SystemUI/res/layout-sw720dp/status_bar_search_panel.xml @@ -22,53 +22,27 @@ xmlns:prvandroid="http://schemas.android.com/apk/prv/res/android" xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/search_panel_container" - android:layout_height="wrap_content" - android:layout_width="match_parent" - android:paddingBottom="0dip"> - - <RelativeLayout - android:id="@+id/search_bg_protect" - android:layout_width="match_parent" - android:layout_height="wrap_content"> - - <RelativeLayout - android:id="@+id/search_panel_container" - android:layout_width="wrap_content" - android:layout_height="@dimen/navbar_search_panel_height" - android:layout_alignParentBottom="true" - android:layout_alignParentLeft="true" - android:layout_marginLeft="-120dip"> - - <View - android:layout_width="0dip" - android:layout_height="0dip" - android:layout_alignTop="@id/multi_wave_view" - android:layout_alignLeft="@id/multi_wave_view" - android:layout_alignRight="@id/multi_wave_view" - android:layout_alignBottom="@id/multi_wave_view" - android:layout_marginBottom="@dimen/navigation_bar_size" - android:background="@drawable/navbar_search_bg_scrim"/> - - <com.android.internal.widget.multiwaveview.MultiWaveView - android:id="@+id/multi_wave_view" - android:orientation="horizontal" - android:layout_width="wrap_content" - android:layout_height="match_parent" - android:layout_alignParentBottom="true" - - prvandroid:targetDrawables="@array/navbar_search_targets" - prvandroid:targetDescriptions="@array/navbar_search_target_descriptions" - prvandroid:directionDescriptions="@array/navbar_search_direction_descriptions" - prvandroid:handleDrawable="@drawable/navbar_search_handle" - prvandroid:waveDrawable="@drawable/navbar_search_outerring" - prvandroid:snapMargin="@dimen/navbar_search_snap_margin" - prvandroid:hitRadius="@dimen/navbar_search_hit_radius" - prvandroid:feedbackCount="0" - prvandroid:vibrationDuration="@integer/config_vibration_duration" - prvandroid:alwaysTrackFinger="true"/> - - </RelativeLayout> - - </RelativeLayout> + android:layout_height="match_parent" + android:layout_width="match_parent"> + + <com.android.internal.widget.multiwaveview.MultiWaveView + android:id="@+id/multi_wave_view" + android:layout_width="wrap_content" + android:layout_height="@dimen/navbar_search_panel_height" + android:layout_gravity="left|bottom" + android:gravity="top|right" + android:layout_marginLeft="-150dip" + android:background="@drawable/navbar_search_bg_scrim" + + prvandroid:targetDrawables="@array/navbar_search_targets" + prvandroid:targetDescriptions="@array/navbar_search_target_descriptions" + prvandroid:directionDescriptions="@array/navbar_search_direction_descriptions" + prvandroid:handleDrawable="@drawable/navbar_search_handle" + prvandroid:waveDrawable="@drawable/navbar_search_outerring" + prvandroid:snapMargin="@dimen/navbar_search_snap_margin" + prvandroid:hitRadius="@dimen/navbar_search_hit_radius" + prvandroid:feedbackCount="0" + prvandroid:vibrationDuration="@integer/config_vibration_duration" + prvandroid:alwaysTrackFinger="true"/> </com.android.systemui.SearchPanelView> diff --git a/packages/SystemUI/src/com/android/systemui/SearchPanelView.java b/packages/SystemUI/src/com/android/systemui/SearchPanelView.java index a6e4487e9c33..060d08e090ad 100644 --- a/packages/SystemUI/src/com/android/systemui/SearchPanelView.java +++ b/packages/SystemUI/src/com/android/systemui/SearchPanelView.java @@ -27,7 +27,6 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.util.AttributeSet; -import android.util.Log; import android.util.Slog; import android.view.MotionEvent; import android.view.View; @@ -38,7 +37,6 @@ import android.widget.FrameLayout; import com.android.internal.widget.multiwaveview.MultiWaveView; import com.android.internal.widget.multiwaveview.MultiWaveView.OnTriggerListener; -import com.android.server.am.ActivityManagerService; import com.android.systemui.R; import com.android.systemui.recent.StatusBarTouchProxy; import com.android.systemui.statusbar.BaseStatusBar; @@ -47,7 +45,8 @@ import com.android.systemui.statusbar.tablet.StatusBarPanel; import com.android.systemui.statusbar.tablet.TabletStatusBar; public class SearchPanelView extends FrameLayout implements - StatusBarPanel, Animator.AnimatorListener { + StatusBarPanel { + private static final int SEARCH_PANEL_HOLD_DURATION = 500; static final String TAG = "SearchPanelView"; static final boolean DEBUG = TabletStatusBar.DEBUG || PhoneStatusBar.DEBUG || false; private Context mContext; @@ -123,7 +122,7 @@ public class SearchPanelView extends FrameLayout implements final MultiWaveView.OnTriggerListener mMultiWaveViewListener = new MultiWaveView.OnTriggerListener() { - private int mTarget = -1; + private boolean mWaitingForLaunch; public void onGrabbed(View v, int handle) { } @@ -132,26 +131,28 @@ public class SearchPanelView extends FrameLayout implements } public void onGrabbedStateChange(View v, int handle) { - if (mTarget == -1 && OnTriggerListener.NO_HANDLE == handle) { + if (!mWaitingForLaunch && OnTriggerListener.NO_HANDLE == handle) { mBar.hideSearchPanel(); } } - public void onTrigger(View v, int target) { - mTarget = target; + public void onTrigger(View v, final int target) { + final int resId = mMultiWaveView.getResourceIdForTarget(target); + switch (resId) { + case com.android.internal.R.drawable.ic_lockscreen_search: + mWaitingForLaunch = true; + startAssistActivity(); + postDelayed(new Runnable() { + public void run() { + mWaitingForLaunch = false; + mBar.hideSearchPanel(); + } + }, SEARCH_PANEL_HOLD_DURATION); + break; + } } public void onFinishFinalAnimation() { - if (mTarget != -1) { - final int resId = mMultiWaveView.getResourceIdForTarget(mTarget); - mTarget = -1; // a safety to make sure we never launch w/o prior call to onTrigger - switch (resId) { - case com.android.internal.R.drawable.ic_lockscreen_search: - startAssistActivity(); - break; - } - mBar.hideSearchPanel(); - } } }; @@ -194,15 +195,11 @@ public class SearchPanelView extends FrameLayout implements }; public void show(final boolean show, boolean animate) { - if (animate) { - if (mShowing != show) { - mShowing = show; - // TODO: start animating ring - } - } else { - mShowing = show; - onAnimationEnd(null); + if (!show) { + final LayoutTransition transitioner = animate ? createLayoutTransitioner() : null; + ((ViewGroup)mSearchTargetsContainer).setLayoutTransition(transitioner); } + mShowing = show; if (show) { if (getVisibility() != View.VISIBLE) { setVisibility(View.VISIBLE); @@ -228,25 +225,6 @@ public class SearchPanelView extends FrameLayout implements } } - public void onAnimationCancel(Animator animation) { - } - - public void onAnimationEnd(Animator animation) { - if (mShowing) { - final LayoutTransition transitioner = new LayoutTransition(); - ((ViewGroup)mSearchTargetsContainer).setLayoutTransition(transitioner); - createCustomAnimations(transitioner); - } else { - ((ViewGroup)mSearchTargetsContainer).setLayoutTransition(null); - } - } - - public void onAnimationRepeat(Animator animation) { - } - - public void onAnimationStart(Animator animation) { - } - /** * We need to be aligned at the bottom. LinearLayout can't do this, so instead, * let LinearLayout do all the hard work, and then shift everything down to the bottom. @@ -293,9 +271,11 @@ public class SearchPanelView extends FrameLayout implements } } - private void createCustomAnimations(LayoutTransition transitioner) { + private LayoutTransition createLayoutTransitioner() { + LayoutTransition transitioner = new LayoutTransition(); transitioner.setDuration(200); transitioner.setStartDelay(LayoutTransition.CHANGE_DISAPPEARING, 0); transitioner.setAnimator(LayoutTransition.DISAPPEARING, null); + return transitioner; } } diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java index 9f801b0246dc..1302c1feb897 100644 --- a/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java +++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java @@ -83,6 +83,12 @@ public class RecentsHorizontalScrollView extends HorizontalScrollView setLayoutTransition(null); mLinearLayout.removeAllViews(); + for (int i = 0; i < mRecycledViews.size(); i++) { + View child = mRecycledViews.get(i); + if (child.getParent() != null) { + throw new RuntimeException("Recycled child has a parent"); + } + } for (int i = 0; i < mAdapter.getCount(); i++) { View old = null; if (mRecycledViews.size() != 0) { @@ -183,6 +189,9 @@ public class RecentsHorizontalScrollView extends HorizontalScrollView public void onChildDismissed(View v) { mRecycledViews.add(v); mLinearLayout.removeView(v); + if (v.getParent() != null) { + throw new RuntimeException("Recycled child has parent"); + } mCallback.handleSwipe(v); // Restore the alpha/translation parameters to what they were before swiping // (for when these items are recycled) @@ -354,9 +363,15 @@ public class RecentsHorizontalScrollView extends HorizontalScrollView mNumItemsInOneScreenful = (int) FloatMath.ceil(dm.widthPixels / (float) child.getMeasuredWidth()); mRecycledViews.add(child); + if (child.getParent() != null) { + throw new RuntimeException("First recycled child has parent"); + } for (int i = 0; i < mNumItemsInOneScreenful - 1; i++) { mRecycledViews.add(mAdapter.createView(mLinearLayout)); + if (mRecycledViews.get(mRecycledViews.size() - 1).getParent() != null) { + throw new RuntimeException("Recycled child has parent"); + } } } diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java index c1597e051567..3c71784237b2 100644 --- a/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java +++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java @@ -84,6 +84,12 @@ public class RecentsVerticalScrollView extends ScrollView setLayoutTransition(null); mLinearLayout.removeAllViews(); + for (int i = 0; i < mRecycledViews.size(); i++) { + View child = mRecycledViews.get(i); + if (child.getParent() != null) { + throw new RuntimeException("Recycled child has parent"); + } + } // Once we can clear the data associated with individual item views, // we can get rid of the removeAllViews() and the code below will // recycle them. @@ -190,6 +196,9 @@ public class RecentsVerticalScrollView extends ScrollView public void onChildDismissed(View v) { mRecycledViews.add(v); mLinearLayout.removeView(v); + if (v.getParent() != null) { + throw new RuntimeException("Recycled child has parent"); + } mCallback.handleSwipe(v); // Restore the alpha/translation parameters to what they were before swiping // (for when these items are recycled) @@ -363,9 +372,15 @@ public class RecentsVerticalScrollView extends ScrollView mNumItemsInOneScreenful = (int) FloatMath.ceil(dm.heightPixels / (float) child.getMeasuredHeight()); mRecycledViews.add(child); + if (child.getParent() != null) { + throw new RuntimeException("First recycled child has parent"); + } for (int i = 0; i < mNumItemsInOneScreenful - 1; i++) { mRecycledViews.add(mAdapter.createView(mLinearLayout)); + if (mRecycledViews.get(mRecycledViews.size() - 1).getParent() != null) { + throw new RuntimeException("Recycled child has parent"); + } } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index b9dd32fa7b3c..344411bf6088 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -483,7 +483,14 @@ public class PhoneStatusBar extends BaseStatusBar { @Override public void showSearchPanel() { - super.showSearchPanel(); + // XXX This is a bit of a hack. Since navbar is no longer slippery, we use the + // gesture to dismiss the expanded statusbar. + if (mExpanded) { + animateCollapse(); + return; + } else { + super.showSearchPanel(); + } WindowManager.LayoutParams lp = (android.view.WindowManager.LayoutParams) mNavigationBarView.getLayoutParams(); lp.flags &= ~WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL; @@ -506,7 +513,7 @@ public class PhoneStatusBar extends BaseStatusBar { public int getStatusBarHeight() { if (mNaturalBarHeight < 0) { final Resources res = mContext.getResources(); - mNaturalBarHeight = + mNaturalBarHeight = res.getDimensionPixelSize(com.android.internal.R.dimen.status_bar_height); } return mNaturalBarHeight; @@ -526,7 +533,9 @@ public class PhoneStatusBar extends BaseStatusBar { public boolean onTouch(View v, MotionEvent event) { switch(event.getAction()) { case MotionEvent.ACTION_DOWN: - showSearchPanel(); + if (!shouldDisableNavbarGestures()) { + showSearchPanel(); + } break; } return false; @@ -674,9 +683,9 @@ public class PhoneStatusBar extends BaseStatusBar { if (INTRUDER_ALERT_DECAY_MS > 0) { mHandler.sendEmptyMessageDelayed(MSG_HIDE_INTRUDER, INTRUDER_ALERT_DECAY_MS); } - } else + } else */ - + if (notification.notification.fullScreenIntent != null) { // not immersive & a full-screen alert should be shown Slog.d(TAG, "Notification has fullScreenIntent; sending fullScreenIntent"); @@ -906,7 +915,7 @@ public class PhoneStatusBar extends BaseStatusBar { flagdbg.append(((diff & StatusBarManager.DISABLE_CLOCK) != 0) ? "* " : " "); flagdbg.append(">"); Slog.d(TAG, flagdbg.toString()); - + if ((diff & StatusBarManager.DISABLE_SYSTEM_INFO) != 0) { mIcons.animate().cancel(); if ((state & StatusBarManager.DISABLE_SYSTEM_INFO) != 0) { @@ -1016,7 +1025,7 @@ public class PhoneStatusBar extends BaseStatusBar { if (mExpandedVisible) { return; } - + mExpandedVisible = true; mNotificationPanel.setVisibility(View.VISIBLE); @@ -1213,7 +1222,7 @@ public class PhoneStatusBar extends BaseStatusBar { //Slog.d(TAG, "y=" + y + " v=" + v + " a=" + a + " t=" + t + " mAnimY=" + mAnimY // + " mAnimAccel=" + mAnimAccel); } - + void doRevealAnimation(long frameTimeNanos) { if (SPEW) { Slog.d(TAG, "doRevealAnimation: dt=" + (frameTimeNanos - mAnimLastTimeNanos)); @@ -1465,11 +1474,11 @@ public class PhoneStatusBar extends BaseStatusBar { mTicker.halt(); } } - + if (mNavigationBarView != null) { mNavigationBarView.setLowProfile(lightsOut); } - + setStatusBarLowProfile(lightsOut); } @@ -1494,7 +1503,7 @@ public class PhoneStatusBar extends BaseStatusBar { ObjectAnimator.ofFloat(clock, View.ALPHA, 0.5f) ); mLightsOutAnimation.setDuration(750); - + mLightsOnAnimation = new AnimatorSet(); mLightsOnAnimation.playTogether( ObjectAnimator.ofFloat(notifications, View.ALPHA, 1), @@ -1505,7 +1514,7 @@ public class PhoneStatusBar extends BaseStatusBar { ); mLightsOnAnimation.setDuration(250); } - + mLightsOutAnimation.cancel(); mLightsOnAnimation.cancel(); @@ -1518,7 +1527,7 @@ public class PhoneStatusBar extends BaseStatusBar { private boolean areLightsOn() { return 0 == (mSystemUiVisibility & View.SYSTEM_UI_FLAG_LOW_PROFILE); } - + public void setLightsOn(boolean on) { Log.v(TAG, "setLightsOn(" + on + ")"); if (on) { @@ -1622,7 +1631,7 @@ public class PhoneStatusBar extends BaseStatusBar { protected void tick(IBinder key, StatusBarNotification n, boolean firstTime) { // no ticking in lights-out mode if (!areLightsOn()) return; - + // Show the ticker if one is requested. Also don't do this // until status bar window is attached to the window manager, // because... well, what's the point otherwise? And trying to @@ -1822,7 +1831,6 @@ public class PhoneStatusBar extends BaseStatusBar { } int panelh = 0; - final int disph = getExpandedViewMaxHeight(); // If the expanded view is not visible, make sure they're still off screen. @@ -2039,7 +2047,7 @@ public class PhoneStatusBar extends BaseStatusBar { try { mBarService.onNotificationClear( mCurrentlyIntrudingNotification.pkg, - mCurrentlyIntrudingNotification.tag, + mCurrentlyIntrudingNotification.tag, mCurrentlyIntrudingNotification.id); } catch (android.os.RemoteException ex) { // oh well @@ -2095,14 +2103,14 @@ public class PhoneStatusBar extends BaseStatusBar { mCollapseAccelPx = res.getDimension(R.dimen.collapse_accel); mFlingGestureMaxXVelocityPx = res.getDimension(R.dimen.fling_gesture_max_x_velocity); - + mNotificationPanelMarginBottomPx = (int) res.getDimension(R.dimen.notification_panel_margin_bottom); mNotificationPanelMarginLeftPx = (int) res.getDimension(R.dimen.notification_panel_margin_left); mNotificationPanelGravity = res.getInteger(R.integer.notification_panel_layout_gravity); if (mNotificationPanelGravity <= 0) { - mNotificationPanelGravity = Gravity.CENTER_VERTICAL | Gravity.TOP; + mNotificationPanelGravity = Gravity.CENTER_VERTICAL | Gravity.TOP; } if (false) Slog.v(TAG, "updateResources"); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java index c65f581f200c..584a69e48210 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java @@ -1000,7 +1000,7 @@ public class NetworkController extends BroadcastReceiver { mContentDescriptionPhoneSignal = mContext.getString( R.string.accessibility_airplane_mode); mAirplaneIconId = R.drawable.stat_sys_signal_flightmode; - mDataTypeIconId = 0; + mPhoneSignalIconId = mDataSignalIconId = mDataTypeIconId = 0; // combined values from connected wifi take precedence over airplane mode if (mWifiConnected) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java index c627d47020f9..c0ac50e1ade1 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java @@ -192,7 +192,9 @@ public class TabletStatusBar extends BaseStatusBar implements public boolean onTouch(View v, MotionEvent event) { switch(event.getAction()) { case MotionEvent.ACTION_DOWN: - showSearchPanel(); + if (!shouldDisableNavbarGestures()) { + showSearchPanel(); + } break; } return false; @@ -254,12 +256,12 @@ public class TabletStatusBar extends BaseStatusBar implements // network icons: either a combo icon that switches between mobile and data, or distinct // mobile and data icons - final ImageView mobileRSSI = + final ImageView mobileRSSI = (ImageView)mNotificationPanel.findViewById(R.id.mobile_signal); if (mobileRSSI != null) { mNetworkController.addPhoneSignalIconView(mobileRSSI); } - final ImageView wifiRSSI = + final ImageView wifiRSSI = (ImageView)mNotificationPanel.findViewById(R.id.wifi_signal); if (wifiRSSI != null) { mNetworkController.addWifiIconView(wifiRSSI); @@ -493,7 +495,7 @@ public class TabletStatusBar extends BaseStatusBar implements mBluetoothController.addIconView((ImageView)sb.findViewById(R.id.bluetooth)); mNetworkController = new NetworkController(mContext); - final SignalClusterView signalCluster = + final SignalClusterView signalCluster = (SignalClusterView)sb.findViewById(R.id.signal_cluster); mNetworkController.addSignalCluster(signalCluster); @@ -1061,7 +1063,7 @@ public class TabletStatusBar extends BaseStatusBar implements if (0 != (diff & View.SYSTEM_UI_FLAG_LOW_PROFILE)) { mHandler.removeMessages(MSG_HIDE_CHROME); mHandler.removeMessages(MSG_SHOW_CHROME); - mHandler.sendEmptyMessage(0 == (vis & View.SYSTEM_UI_FLAG_LOW_PROFILE) + mHandler.sendEmptyMessage(0 == (vis & View.SYSTEM_UI_FLAG_LOW_PROFILE) ? MSG_SHOW_CHROME : MSG_HIDE_CHROME); } diff --git a/policy/src/com/android/internal/policy/impl/GlobalActions.java b/policy/src/com/android/internal/policy/impl/GlobalActions.java index aa73de43a84b..fc187ce1de6b 100644 --- a/policy/src/com/android/internal/policy/impl/GlobalActions.java +++ b/policy/src/com/android/internal/policy/impl/GlobalActions.java @@ -28,7 +28,9 @@ import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.UserInfo; +import android.database.ContentObserver; import android.media.AudioManager; +import android.net.ConnectivityManager; import android.os.Handler; import android.os.IBinder; import android.os.Message; @@ -73,7 +75,7 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac private ArrayList<Action> mItems; private AlertDialog mDialog; - private SilentModeAction mSilentModeAction; + private Action mSilentModeAction; private ToggleAction mAirplaneModeOn; private MyAdapter mAdapter; @@ -82,6 +84,8 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac private boolean mDeviceProvisioned = false; private ToggleAction.State mAirplaneState = ToggleAction.State.Off; private boolean mIsWaitingForEcmExit = false; + private boolean mHasTelephony; + private boolean mHasVibrator; private IWindowManager mIWindowManager; @@ -104,6 +108,14 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); telephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_SERVICE_STATE); + ConnectivityManager cm = (ConnectivityManager) + context.getSystemService(Context.CONNECTIVITY_SERVICE); + mHasTelephony = cm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE); + mContext.getContentResolver().registerContentObserver( + Settings.System.getUriFor(Settings.System.AIRPLANE_MODE_ON), true, + mAirplaneModeObserver); + Vibrator vibrator = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE); + mHasVibrator = vibrator != null && vibrator.hasVibrator(); } /** @@ -130,13 +142,18 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac mDialog.show(); mDialog.getWindow().getDecorView().setSystemUiVisibility(View.STATUS_BAR_DISABLE_EXPAND); } + /** * Create the global actions dialog. * @return A new dialog. */ private AlertDialog createDialog() { - mSilentModeAction = new SilentModeAction(mContext, mAudioManager, mHandler); - + // Simple toggle style if there's no vibrator, otherwise use a tri-state + if (!mHasVibrator) { + mSilentModeAction = new SilentModeToggleAction(); + } else { + mSilentModeAction = new SilentModeTriStateAction(mContext, mAudioManager, mHandler); + } mAirplaneModeOn = new ToggleAction( R.drawable.ic_lock_airplane_mode, R.drawable.ic_lock_airplane_mode_off, @@ -145,7 +162,7 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac R.string.global_actions_airplane_mode_off_status) { void onToggle(boolean on) { - if (Boolean.parseBoolean( + if (mHasTelephony && Boolean.parseBoolean( SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE))) { mIsWaitingForEcmExit = true; // Launch ECM exit dialog @@ -160,6 +177,8 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac @Override protected void changeStateFromPress(boolean buttonOn) { + if (!mHasTelephony) return; + // In ECM mode airplane state cannot be changed if (!(Boolean.parseBoolean( SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE)))) { @@ -176,6 +195,7 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac return false; } }; + onAirplaneModeChanged(); mItems = new ArrayList<Action>(); @@ -247,6 +267,7 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac mItems.add(switchToUser); } } + mAdapter = new MyAdapter(); final AlertDialog.Builder ab = new AlertDialog.Builder(mContext); @@ -273,8 +294,7 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac } private void prepareDialog() { - final boolean silentModeOn = - mAudioManager.getRingerMode() != AudioManager.RINGER_MODE_NORMAL; + refreshSilentMode(); mAirplaneModeOn.updateState(mAirplaneState); mAdapter.notifyDataSetChanged(); if (mKeyguardShowing) { @@ -288,6 +308,15 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac } } + private void refreshSilentMode() { + if (!mHasVibrator) { + final boolean silentModeOn = + mAudioManager.getRingerMode() != AudioManager.RINGER_MODE_NORMAL; + ((ToggleAction)mSilentModeAction).updateState( + silentModeOn ? ToggleAction.State.On : ToggleAction.State.Off); + } + } + /** {@inheritDoc} */ public void onDismiss(DialogInterface dialog) { if (SHOW_SILENT_TOGGLE) { @@ -297,7 +326,7 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac /** {@inheritDoc} */ public void onClick(DialogInterface dialog, int which) { - if (!(mAdapter.getItem(which) instanceof SilentModeAction)) { + if (!(mAdapter.getItem(which) instanceof SilentModeTriStateAction)) { dialog.dismiss(); } mAdapter.getItem(which).onPress(); @@ -495,12 +524,12 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac */ public ToggleAction(int enabledIconResId, int disabledIconResid, - int essage, + int message, int enabledStatusMessageResId, int disabledStatusMessageResId) { mEnabledIconResId = enabledIconResId; mDisabledIconResid = disabledIconResid; - mMessageResId = essage; + mMessageResId = message; mEnabledStatusMessageResId = enabledStatusMessageResId; mDisabledStatusMessageResId = disabledStatusMessageResId; } @@ -583,21 +612,44 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac } } - private static class SilentModeAction implements Action, View.OnClickListener { + private class SilentModeToggleAction extends ToggleAction { + public SilentModeToggleAction() { + super(R.drawable.ic_audio_vol_mute, + R.drawable.ic_audio_vol, + R.string.global_action_toggle_silent_mode, + R.string.global_action_silent_mode_on_status, + R.string.global_action_silent_mode_off_status); + } + + void onToggle(boolean on) { + if (on) { + mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT); + } else { + mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL); + } + } + + public boolean showDuringKeyguard() { + return true; + } + + public boolean showBeforeProvisioning() { + return false; + } + } + + private static class SilentModeTriStateAction implements Action, View.OnClickListener { private final int[] ITEM_IDS = { R.id.option1, R.id.option2, R.id.option3 }; private final AudioManager mAudioManager; private final Handler mHandler; - private final boolean mHasVibrator; private final Context mContext; - SilentModeAction(Context context, AudioManager audioManager, Handler handler) { + SilentModeTriStateAction(Context context, AudioManager audioManager, Handler handler) { mAudioManager = audioManager; mHandler = handler; mContext = context; - Vibrator vibrator = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE); - mHasVibrator = vibrator != null && vibrator.hasVibrator(); } private int ringerModeToIndex(int ringerMode) { @@ -621,9 +673,6 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac // Set up click handler itemView.setTag(i); itemView.setOnClickListener(this); - if (itemView.getId() == R.id.option2 && !mHasVibrator) { - itemView.setVisibility(View.GONE); - } } return v; } @@ -683,6 +732,7 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac PhoneStateListener mPhoneStateListener = new PhoneStateListener() { @Override public void onServiceStateChanged(ServiceState serviceState) { + if (!mHasTelephony) return; final boolean inAirplaneMode = serviceState.getState() == ServiceState.STATE_POWER_OFF; mAirplaneState = inAirplaneMode ? ToggleAction.State.On : ToggleAction.State.Off; mAirplaneModeOn.updateState(mAirplaneState); @@ -699,6 +749,13 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac } }; + private ContentObserver mAirplaneModeObserver = new ContentObserver(new Handler()) { + @Override + public void onChange(boolean selfChange) { + onAirplaneModeChanged(); + } + }; + private static final int MESSAGE_DISMISS = 0; private static final int MESSAGE_REFRESH = 1; private static final int MESSAGE_SHOW = 2; @@ -713,6 +770,7 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac } break; case MESSAGE_REFRESH: + refreshSilentMode(); mAdapter.notifyDataSetChanged(); break; case MESSAGE_SHOW: @@ -722,6 +780,18 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac } }; + private void onAirplaneModeChanged() { + // Let the service state callbacks handle the state. + if (mHasTelephony) return; + + boolean airplaneModeOn = Settings.System.getInt( + mContext.getContentResolver(), + Settings.System.AIRPLANE_MODE_ON, + 0) == 1; + mAirplaneState = airplaneModeOn ? ToggleAction.State.On : ToggleAction.State.Off; + mAirplaneModeOn.updateState(mAirplaneState); + } + /** * Change the airplane mode system setting */ @@ -734,6 +804,9 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING); intent.putExtra("state", on); mContext.sendBroadcast(intent); + if (!mHasTelephony) { + mAirplaneState = on ? ToggleAction.State.On : ToggleAction.State.Off; + } } private IWindowManager getWindowManager() { diff --git a/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java b/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java index 049e6ac936ae..518d8e973b26 100644 --- a/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java +++ b/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java @@ -532,11 +532,6 @@ public class LockPatternKeyguardView extends KeyguardViewBase { if (DEBUG) Log.d(TAG, "screen off"); mScreenOn = false; mForgotPattern = false; - if (mBiometricUnlock != null) { - mSuppressBiometricUnlock = - mUpdateMonitor.getPhoneState() != TelephonyManager.CALL_STATE_IDLE - || mHasDialog; - } // Emulate activity life-cycle for both lock and unlock screen. if (mLockScreen != null) { @@ -991,6 +986,17 @@ public class LockPatternKeyguardView extends KeyguardViewBase { restartBiometricUnlock = mBiometricUnlock.stop(); } + // Prevents biometric unlock from coming up immediately after a phone call or if there + // is a dialog on top of lockscreen. It is only updated if the screen is off because if the + // screen is on it's either because of an orientation change, or when it first boots. + // In both those cases, we don't want to override the current value of + // mSuppressBiometricUnlock and instead want to use the previous value. + if (!mScreenOn) { + mSuppressBiometricUnlock = + mUpdateMonitor.getPhoneState() != TelephonyManager.CALL_STATE_IDLE + || mHasDialog; + } + // If the biometric unlock is not being used, we don't bother constructing it. Then we can // simply check if it is null when deciding whether we should make calls to it. mBiometricUnlock = null; diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java index a99ae269e2d9..cce55d5ec7b3 100755 --- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java +++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java @@ -1798,7 +1798,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { } } if (down) { - if (!mHomePressed) { + if (!mHomePressed && mLongPressOnHomeBehavior == LONG_PRESS_HOME_RECENT_SYSTEM_UI) { try { mStatusBarService.preloadRecentApps(); } catch (RemoteException e) { diff --git a/services/java/com/android/server/wm/AppWindowAnimator.java b/services/java/com/android/server/wm/AppWindowAnimator.java index de756b178492..1953ad77823c 100644 --- a/services/java/com/android/server/wm/AppWindowAnimator.java +++ b/services/java/com/android/server/wm/AppWindowAnimator.java @@ -79,12 +79,9 @@ public class AppWindowAnimator { } public void setDummyAnimation() { - if (animation == null) { - if (WindowManagerService.localLOGV) Slog.v( - TAG, "Setting dummy animation in " + mAppToken); - animation = sDummyAnimation; - animInitialized = false; - } + if (WindowManagerService.localLOGV) Slog.v(TAG, "Setting dummy animation in " + mAppToken); + animation = sDummyAnimation; + animInitialized = false; hasTransformation = true; transformation.clear(); transformation.setAlpha(mAppToken.reportedVisible ? 1 : 0); diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index b1612a159af7..4ce8c97541d7 100755 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -1638,7 +1638,7 @@ public class WindowManagerService extends IWindowManager.Stub // it is of no interest to us. if (w.mAppToken.hidden && w.mAppToken.mAppAnimator.animation == null) { if (DEBUG_WALLPAPER) Slog.v(TAG, - "Skipping not hidden or animating token: " + w); + "Skipping hidden and not animating token: " + w); continue; } } @@ -3544,7 +3544,8 @@ public class WindowManagerService extends IWindowManager.Stub wtoken.groupId = groupId; wtoken.appFullscreen = fullscreen; wtoken.requestedOrientation = requestedOrientation; - if (DEBUG_TOKEN_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v(TAG, "addAppToken: " + wtoken); + if (DEBUG_TOKEN_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v(TAG, "addAppToken: " + wtoken + + " at " + addPos); mAppTokens.add(addPos, wtoken); addAppTokenToAnimating(addPos, wtoken); mTokenMap.put(token.asBinder(), wtoken); @@ -3864,6 +3865,7 @@ public class WindowManagerService extends IWindowManager.Stub if (DEBUG_APP_TRANSITIONS) Slog.v( TAG, "Prepare app transition: transit=" + transit + " mNextAppTransition=" + mNextAppTransition + + " alwaysKeepCurrent=" + alwaysKeepCurrent + " Callers=" + Debug.getCallers(3)); if (okToDisplay()) { if (mNextAppTransition == WindowManagerPolicy.TRANSIT_UNSET @@ -3933,6 +3935,15 @@ public class WindowManagerService extends IWindowManager.Stub } } + private void cancelWindowAnimations(final AppWindowToken wtoken) { + for (int i = wtoken.windows.size() - 1; i >= 0; i--) { + final WindowStateAnimator winAnimator = wtoken.windows.get(i).mWinAnimator; + if (winAnimator.isAnimating()) { + winAnimator.clearAnimation(); + } + } + } + public void executeAppTransition() { if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS, "executeAppTransition()")) { @@ -3948,6 +3959,12 @@ public class WindowManagerService extends IWindowManager.Stub } if (mNextAppTransition != WindowManagerPolicy.TRANSIT_UNSET) { mAppTransitionReady = true; + for (int i = mOpeningApps.size() - 1; i >= 0; i--) { + cancelWindowAnimations(mOpeningApps.get(i)); + } + for (int i = mClosingApps.size() - 1; i >= 0; i--) { + cancelWindowAnimations(mClosingApps.get(i)); + } final long origId = Binder.clearCallingIdentity(); performLayoutAndPlaceSurfacesLocked(); Binder.restoreCallingIdentity(origId); @@ -4295,6 +4312,7 @@ public class WindowManagerService extends IWindowManager.Stub if (DEBUG_APP_TRANSITIONS) Slog.v( TAG, "Setting dummy animation on: " + wtoken); + cancelWindowAnimations(wtoken); wtoken.mAppAnimator.setDummyAnimation(); mOpeningApps.remove(wtoken); mClosingApps.remove(wtoken); @@ -4816,8 +4834,7 @@ public class WindowManagerService extends IWindowManager.Stub } } - if (mNextAppTransition == WindowManagerPolicy.TRANSIT_UNSET - && !mAppTransitionRunning) { + if (!mAppTransitionRunning) { mAnimatingAppTokens.clear(); mAnimatingAppTokens.addAll(mAppTokens); moveAppWindowsLocked(tokens, mAppTokens.size()); @@ -4836,8 +4853,7 @@ public class WindowManagerService extends IWindowManager.Stub final long origId = Binder.clearCallingIdentity(); synchronized(mWindowMap) { final int N = tokens.size(); - if (N > 0 && mNextAppTransition != WindowManagerPolicy.TRANSIT_UNSET - && !mAppTransitionRunning) { + if (N > 0 && !mAppTransitionRunning) { // animating towards back, hang onto old list for duration of animation. mAnimatingAppTokens.clear(); mAnimatingAppTokens.addAll(mAppTokens); @@ -4857,8 +4873,7 @@ public class WindowManagerService extends IWindowManager.Stub } } - if (mNextAppTransition == WindowManagerPolicy.TRANSIT_UNSET - && !mAppTransitionRunning) { + if (!mAppTransitionRunning) { mAnimatingAppTokens.clear(); mAnimatingAppTokens.addAll(mAppTokens); moveAppWindowsLocked(tokens, 0); @@ -5321,7 +5336,8 @@ public class WindowManagerService extends IWindowManager.Stub // the background..) if (on) { boolean isVisible = false; - for (WindowState ws : mWindows) { + for (int i = mWindows.size() - 1; i >= 0; i--) { + final WindowState ws = mWindows.get(i); if (ws.mSession.mPid == pid && ws.isVisibleLw()) { isVisible = true; break; @@ -6439,7 +6455,10 @@ public class WindowManagerService extends IWindowManager.Stub int keyboardPresence = 0; int navigationPresence = 0; - for (InputDevice device : mInputManager.getInputDevices()) { + final InputDevice[] devices = mInputManager.getInputDevices(); + final int len = devices.length; + for (int i = 0; i < len; i++) { + InputDevice device = devices[i]; if (!device.isVirtual()) { final int sources = device.getSources(); final int presenceFlag = device.isExternal() ? @@ -7948,7 +7967,7 @@ public class WindowManagerService extends IWindowManager.Stub for (i=0; i<NN && goodToGo; i++) { AppWindowToken wtoken = mOpeningApps.get(i); if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, - "Check opening app" + wtoken + ": allDrawn=" + "Check opening app=" + wtoken + ": allDrawn=" + wtoken.allDrawn + " startingDisplayed=" + wtoken.startingDisplayed + " startingMoved=" + wtoken.startingMoved); @@ -8058,7 +8077,7 @@ public class WindowManagerService extends IWindowManager.Stub } if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "New transit: " + transit); - } else if (oldWallpaper != null) { + } else if ((oldWallpaper != null) && (oldWallpaper != mWallpaperTarget)) { // We are transitioning from an activity with // a wallpaper to one without. transit = WindowManagerPolicy.TRANSIT_WALLPAPER_CLOSE; diff --git a/telephony/java/com/android/internal/telephony/SMSDispatcher.java b/telephony/java/com/android/internal/telephony/SMSDispatcher.java index 28b729d962b0..41125dd119bd 100644 --- a/telephony/java/com/android/internal/telephony/SMSDispatcher.java +++ b/telephony/java/com/android/internal/telephony/SMSDispatcher.java @@ -78,6 +78,10 @@ public abstract class SMSDispatcher extends Handler { public static final String RECEIVE_EMERGENCY_BROADCAST_PERMISSION = "android.permission.RECEIVE_EMERGENCY_BROADCAST"; + /** Permission required to send SMS to short codes without user confirmation. */ + private static final String SEND_SMS_NO_CONFIRMATION_PERMISSION = + "android.permission.SEND_SMS_NO_CONFIRMATION"; + /** Query projection for checking for duplicate message segments. */ private static final String[] PDU_PROJECTION = new String[] { "pdu" @@ -944,7 +948,8 @@ public abstract class SMSDispatcher extends Handler { * @return true if the destination is approved; false if user confirmation event was sent */ boolean checkDestination(SmsTracker tracker) { - if (mUsageMonitor.isApprovedShortCodeSender(tracker.mAppPackage)) { + if (mContext.checkCallingOrSelfPermission(SEND_SMS_NO_CONFIRMATION_PERMISSION) + == PackageManager.PERMISSION_GRANTED) { return true; // app is pre-approved to send to short codes } else { String countryIso = mTelephonyManager.getSimCountryIso(); diff --git a/telephony/java/com/android/internal/telephony/SmsUsageMonitor.java b/telephony/java/com/android/internal/telephony/SmsUsageMonitor.java index f40958dfb899..1804d97dee59 100644 --- a/telephony/java/com/android/internal/telephony/SmsUsageMonitor.java +++ b/telephony/java/com/android/internal/telephony/SmsUsageMonitor.java @@ -81,12 +81,6 @@ public class SmsUsageMonitor { private final HashMap<String, ArrayList<Long>> mSmsStamp = new HashMap<String, ArrayList<Long>>(); - /** - * Hash of package names that are allowed to send to short codes. - * TODO: persist this across reboots. - */ - private final HashSet<String> mApprovedShortCodeSenders = new HashSet<String>(); - /** Context for retrieving regexes from XML resource. */ private final Context mContext; @@ -248,9 +242,6 @@ public class SmsUsageMonitor { DEFAULT_SMS_CHECK_PERIOD); mSettingsObserverHandler = new SettingsObserverHandler(); - - // system MMS app is always allowed to send to short codes - mApprovedShortCodeSenders.add("com.android.mms"); } /** @@ -358,28 +349,6 @@ public class SmsUsageMonitor { } /** - * Return whether the app is approved to send to any short code. - * @param appName the package name of the app requesting to send an SMS - * @return true if the app is approved; false if we need to confirm short code destinations - */ - public boolean isApprovedShortCodeSender(String appName) { - synchronized (mApprovedShortCodeSenders) { - return mApprovedShortCodeSenders.contains(appName); - } - } - - /** - * Add app package name to the list of approved short code senders. - * @param appName the package name of the app to add - */ - public void addApprovedShortCodeSender(String appName) { - if (DBG) log("Adding " + appName + " to list of approved short code senders."); - synchronized (mApprovedShortCodeSenders) { - mApprovedShortCodeSenders.add(appName); - } - } - - /** * Check if the destination is a possible premium short code. * NOTE: the caller is expected to strip non-digits from the destination number with * {@link PhoneNumberUtils#extractNetworkPortion} before calling this method. |