diff options
author | Svetoslav Ganov <svetoslavganov@google.com> | 2012-10-31 14:33:32 -0700 |
---|---|---|
committer | Svetoslav Ganov <svetoslavganov@google.com> | 2012-10-31 17:49:10 -0700 |
commit | c4842c11932ea4f60fe7ae09b0a59660207e1587 (patch) | |
tree | 3181e8d1e9d489ea225b06961948e34dca24cd0a | |
parent | c8dc8eb3275a6d05e27824f322796e97e5e50e2f (diff) | |
download | frameworks_base-c4842c11932ea4f60fe7ae09b0a59660207e1587.tar.gz frameworks_base-c4842c11932ea4f60fe7ae09b0a59660207e1587.tar.bz2 frameworks_base-c4842c11932ea4f60fe7ae09b0a59660207e1587.zip |
Accessibility support for the lockscreen - phone.
Change-Id: Idc99f1322a1d635dd07e1f5efa1665a4676267c2
30 files changed, 138 insertions, 68 deletions
diff --git a/core/java/android/appwidget/AppWidgetHostView.java b/core/java/android/appwidget/AppWidgetHostView.java index fcecd0458c1..d56556feaea 100644 --- a/core/java/android/appwidget/AppWidgetHostView.java +++ b/core/java/android/appwidget/AppWidgetHostView.java @@ -144,6 +144,7 @@ public class AppWidgetHostView extends FrameLayout { // We add padding to the AppWidgetHostView if necessary Rect padding = getDefaultPaddingForWidget(mContext, info.provider, null); setPadding(padding.left, padding.top, padding.right, padding.bottom); + setContentDescription(info.label); } } diff --git a/core/java/com/android/internal/widget/LockPatternView.java b/core/java/com/android/internal/widget/LockPatternView.java index 6c5ed7e4933..7a76ab01b8c 100644 --- a/core/java/com/android/internal/widget/LockPatternView.java +++ b/core/java/com/android/internal/widget/LockPatternView.java @@ -18,7 +18,6 @@ package com.android.internal.widget; import android.content.Context; -import android.content.res.Resources; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.BitmapFactory; @@ -33,11 +32,9 @@ import android.os.Parcel; import android.os.Parcelable; import android.os.SystemClock; import android.util.AttributeSet; -import android.util.Log; import android.view.HapticFeedbackConstants; import android.view.MotionEvent; import android.view.View; -import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityManager; import com.android.internal.R; @@ -657,9 +654,11 @@ public class LockPatternView extends View { handleActionMove(event); return true; case MotionEvent.ACTION_CANCEL: - resetPattern(); - mPatternInProgress = false; - notifyPatternCleared(); + if (mPatternInProgress) { + mPatternInProgress = false; + resetPattern(); + notifyPatternCleared(); + } if (PROFILE_DRAWING) { if (mDrawingProfilingStarted) { Debug.stopMethodTracing(); @@ -826,7 +825,7 @@ public class LockPatternView extends View { mPatternInProgress = true; mPatternDisplayMode = DisplayMode.Correct; notifyPatternStarted(); - } else { + } else if (mPatternInProgress) { mPatternInProgress = false; notifyPatternCleared(); } diff --git a/core/res/res/drawable-hdpi/kg_security_lock_focused.png b/core/res/res/drawable-hdpi/kg_security_lock_focused.png Binary files differnew file mode 100644 index 00000000000..9a827997a48 --- /dev/null +++ b/core/res/res/drawable-hdpi/kg_security_lock_focused.png diff --git a/core/res/res/drawable-hdpi/kg_security_lock_normal.png b/core/res/res/drawable-hdpi/kg_security_lock_normal.png Binary files differnew file mode 100644 index 00000000000..d608707e38e --- /dev/null +++ b/core/res/res/drawable-hdpi/kg_security_lock_normal.png diff --git a/core/res/res/drawable-hdpi/kg_security_lock_pressed.png b/core/res/res/drawable-hdpi/kg_security_lock_pressed.png Binary files differnew file mode 100644 index 00000000000..7ca995dfdf0 --- /dev/null +++ b/core/res/res/drawable-hdpi/kg_security_lock_pressed.png diff --git a/core/res/res/drawable-mdpi/kg_security_lock_focused.png b/core/res/res/drawable-mdpi/kg_security_lock_focused.png Binary files differnew file mode 100644 index 00000000000..c3608f94016 --- /dev/null +++ b/core/res/res/drawable-mdpi/kg_security_lock_focused.png diff --git a/core/res/res/drawable-mdpi/kg_security_lock_normal.png b/core/res/res/drawable-mdpi/kg_security_lock_normal.png Binary files differnew file mode 100644 index 00000000000..7957c79dcca --- /dev/null +++ b/core/res/res/drawable-mdpi/kg_security_lock_normal.png diff --git a/core/res/res/drawable-mdpi/kg_security_lock_pressed.png b/core/res/res/drawable-mdpi/kg_security_lock_pressed.png Binary files differnew file mode 100644 index 00000000000..41715f5be41 --- /dev/null +++ b/core/res/res/drawable-mdpi/kg_security_lock_pressed.png diff --git a/core/res/res/drawable-xhdpi/kg_security_lock_focused.png b/core/res/res/drawable-xhdpi/kg_security_lock_focused.png Binary files differnew file mode 100644 index 00000000000..db220162444 --- /dev/null +++ b/core/res/res/drawable-xhdpi/kg_security_lock_focused.png diff --git a/core/res/res/drawable-xhdpi/kg_security_lock_normal.png b/core/res/res/drawable-xhdpi/kg_security_lock_normal.png Binary files differnew file mode 100644 index 00000000000..17ebb5f8dc9 --- /dev/null +++ b/core/res/res/drawable-xhdpi/kg_security_lock_normal.png diff --git a/core/res/res/drawable-xhdpi/kg_security_lock_pressed.png b/core/res/res/drawable-xhdpi/kg_security_lock_pressed.png Binary files differnew file mode 100644 index 00000000000..186b6ffec11 --- /dev/null +++ b/core/res/res/drawable-xhdpi/kg_security_lock_pressed.png diff --git a/core/res/res/drawable/keyguard_expand_challenge_handle.xml b/core/res/res/drawable/keyguard_expand_challenge_handle.xml new file mode 100644 index 00000000000..3e0780bedca --- /dev/null +++ b/core/res/res/drawable/keyguard_expand_challenge_handle.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2012 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:state_focused="true" android:drawable="@drawable/kg_security_lock_focused" /> + <item android:state_pressed="true" android:drawable="@drawable/kg_security_lock_pressed" /> + <item android:drawable="@drawable/kg_security_lock_normal" /> +</selector> diff --git a/core/res/res/layout-port/keyguard_host_view.xml b/core/res/res/layout-port/keyguard_host_view.xml index a3c81054537..bba1b0470cb 100644 --- a/core/res/res/layout-port/keyguard_host_view.xml +++ b/core/res/res/layout-port/keyguard_host_view.xml @@ -31,8 +31,7 @@ <com.android.internal.policy.impl.keyguard.SlidingChallengeLayout android:id="@+id/sliding_layout" android:layout_width="match_parent" - android:layout_height="match_parent" - androidprv:dragIcon="@drawable/kg_security_lock"> + android:layout_height="match_parent"> <FrameLayout android:layout_width="match_parent" @@ -68,6 +67,17 @@ android:gravity="center"> </com.android.internal.policy.impl.keyguard.KeyguardSecurityViewFlipper> </com.android.internal.policy.impl.keyguard.KeyguardSecurityContainer> + + <ImageButton + android:layout_width="wrap_content" + android:layout_height="wrap_content" + androidprv:layout_childType="expandChallengeHandle" + android:focusable="true" + android:background="@null" + android:src="@drawable/keyguard_expand_challenge_handle" + android:scaleType="center" + android:contentDescription="@string/keyguard_accessibility_expand_lock_area" /> + </com.android.internal.policy.impl.keyguard.SlidingChallengeLayout> </com.android.internal.policy.impl.keyguard.KeyguardHostView> diff --git a/core/res/res/layout/keyguard_add_widget.xml b/core/res/res/layout/keyguard_add_widget.xml index fd5e565faa0..db166ac015e 100644 --- a/core/res/res/layout/keyguard_add_widget.xml +++ b/core/res/res/layout/keyguard_add_widget.xml @@ -27,6 +27,7 @@ <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" + android:contentDescription="@string/keyguard_accessibility_widget_empty_slot" > <ImageView android:id="@+id/keyguard_add_widget_view" @@ -35,6 +36,7 @@ android:layout_height="wrap_content" android:layout_gravity="center" android:padding="24dp" - android:src="@drawable/kg_add_widget" /> + android:src="@drawable/kg_add_widget" + android:contentDescription="@string/keyguard_accessibility_add_widget"/> </FrameLayout> </com.android.internal.policy.impl.keyguard.KeyguardWidgetFrame> diff --git a/core/res/res/layout/keyguard_emergency_carrier_area.xml b/core/res/res/layout/keyguard_emergency_carrier_area.xml index 655b77dbf71..52adc040722 100644 --- a/core/res/res/layout/keyguard_emergency_carrier_area.xml +++ b/core/res/res/layout/keyguard_emergency_carrier_area.xml @@ -25,7 +25,8 @@ android:orientation="vertical" android:gravity="center" android:layout_gravity="center_horizontal" - android:layout_alignParentBottom="true"> + android:layout_alignParentBottom="true" + android:clickable="true"> <com.android.internal.policy.impl.keyguard.CarrierText android:layout_width="wrap_content" diff --git a/core/res/res/layout/keyguard_face_unlock_view.xml b/core/res/res/layout/keyguard_face_unlock_view.xml index 976d0c6e5d8..39e8f318378 100644 --- a/core/res/res/layout/keyguard_face_unlock_view.xml +++ b/core/res/res/layout/keyguard_face_unlock_view.xml @@ -23,7 +23,8 @@ android:id="@+id/keyguard_face_unlock_view" android:orientation="vertical" android:layout_width="match_parent" - android:layout_height="match_parent"> + android:layout_height="match_parent" + android:contentDescription="@string/keyguard_accessibility_face_unlock"> <include layout="@layout/keyguard_message_area" android:layout_width="match_parent" diff --git a/core/res/res/layout/keyguard_glow_pad_view.xml b/core/res/res/layout/keyguard_glow_pad_view.xml index a416a777cef..ef1c133bc95 100644 --- a/core/res/res/layout/keyguard_glow_pad_view.xml +++ b/core/res/res/layout/keyguard_glow_pad_view.xml @@ -27,7 +27,7 @@ android:layout_gravity="center" android:orientation="horizontal" android:gravity="@integer/kg_selector_gravity" - android:focusable="true" + android:contentDescription="@string/keyguard_accessibility_slide_area" prvandroid:targetDrawables="@array/lockscreen_targets_unlock_only" prvandroid:targetDescriptions="@array/lockscreen_target_descriptions_unlock_only" diff --git a/core/res/res/layout/keyguard_message_area.xml b/core/res/res/layout/keyguard_message_area.xml index 9f11a2c4705..37463cfa7d7 100644 --- a/core/res/res/layout/keyguard_message_area.xml +++ b/core/res/res/layout/keyguard_message_area.xml @@ -28,5 +28,6 @@ android:ellipsize="marquee" android:textAppearance="?android:attr/textAppearance" android:textSize="@dimen/kg_status_line_font_size" - android:textColor="?android:attr/textColorSecondary" /> + android:textColor="?android:attr/textColorSecondary" + android:clickable="true" /> diff --git a/core/res/res/layout/keyguard_password_view.xml b/core/res/res/layout/keyguard_password_view.xml index b6faf5be123..a054d07a79f 100644 --- a/core/res/res/layout/keyguard_password_view.xml +++ b/core/res/res/layout/keyguard_password_view.xml @@ -23,6 +23,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="bottom" + android:contentDescription="@string/keyguard_accessibility_password_unlock" > <Space diff --git a/core/res/res/layout/keyguard_pattern_view.xml b/core/res/res/layout/keyguard_pattern_view.xml index 0f6256a20ad..5ebc0008c0e 100644 --- a/core/res/res/layout/keyguard_pattern_view.xml +++ b/core/res/res/layout/keyguard_pattern_view.xml @@ -26,7 +26,8 @@ android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" - android:gravity="center_horizontal"> + android:gravity="center_horizontal" + android:contentDescription="@string/keyguard_accessibility_pattern_unlock"> <FrameLayout android:layout_width="match_parent" @@ -55,7 +56,8 @@ android:layout_marginBottom="4dip" android:layout_marginStart="8dip" android:layout_gravity="center_horizontal" - android:gravity="center" /> + android:gravity="center" + android:contentDescription="@string/keyguard_accessibility_pattern_area" /> <include layout="@layout/keyguard_emergency_carrier_area" android:id="@+id/keyguard_selector_fade_container" diff --git a/core/res/res/layout/keyguard_pin_view.xml b/core/res/res/layout/keyguard_pin_view.xml index 252919698f6..29e69f30d57 100644 --- a/core/res/res/layout/keyguard_pin_view.xml +++ b/core/res/res/layout/keyguard_pin_view.xml @@ -24,6 +24,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" + android:contentDescription="@string/keyguard_accessibility_pin_unlock" > <include layout="@layout/keyguard_message_area" android:layout_width="match_parent" diff --git a/core/res/res/layout/keyguard_selector_view.xml b/core/res/res/layout/keyguard_selector_view.xml index 74034082747..941e78eb51d 100644 --- a/core/res/res/layout/keyguard_selector_view.xml +++ b/core/res/res/layout/keyguard_selector_view.xml @@ -26,7 +26,8 @@ android:layout_height="match_parent" android:clipChildren="false" android:clipToPadding="false" - android:orientation="vertical"> + android:orientation="vertical" + android:contentDescription="@string/keyguard_accessibility_slide_unlock"> <FrameLayout android:layout_width="match_parent" diff --git a/core/res/res/layout/keyguard_status_view.xml b/core/res/res/layout/keyguard_status_view.xml index 9532a889c78..7467928f37d 100644 --- a/core/res/res/layout/keyguard_status_view.xml +++ b/core/res/res/layout/keyguard_status_view.xml @@ -31,12 +31,13 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal|top" - android:contentDescription="@*android:string/keyguard_accessibility_status"> + android:contentDescription="@android:string/keyguard_accessibility_status"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal|top" - android:orientation="vertical"> + android:orientation="vertical" + android:focusable="true"> <com.android.internal.policy.impl.keyguard.ClockView android:id="@+id/clock_view" android:layout_width="wrap_content" diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index 627099c2fd2..0964af06b7d 100755 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -5800,13 +5800,11 @@ <enum name="scrim" value="4" /> <!-- The home for widgets. All widgets will be descendents of this. --> <enum name="widgets" value="5" /> + <!-- This is a handle that is used for expanding the + security challenge container when it is collapsed. --> + <enum name="expandChallengeHandle" value="6" /> </attr> - <declare-styleable name="SlidingChallengeLayout"> - <attr name="dragHandle" format="reference" /> - <attr name="dragIcon" format="reference" /> - </declare-styleable> - <declare-styleable name="SlidingChallengeLayout_Layout"> <attr name="layout_childType" /> </declare-styleable> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 5af60c81434..05b3068dfa9 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -555,10 +555,26 @@ <java-symbol type="string" name="keyboardview_keycode_enter" /> <java-symbol type="string" name="keyboardview_keycode_mode_change" /> <java-symbol type="string" name="keyboardview_keycode_shift" /> + <java-symbol type="string" name="keyguard_accessibility_add_widget" /> + <java-symbol type="string" name="keyguard_accessibility_camera" /> + <java-symbol type="string" name="keyguard_accessibility_expand_lock_area" /> + <java-symbol type="string" name="keyguard_accessibility_face_unlock" /> <java-symbol type="string" name="keygaurd_accessibility_media_controls" /> + <java-symbol type="string" name="keyguard_accessibility_pattern_area" /> + <java-symbol type="string" name="keyguard_accessibility_pattern_unlock" /> + <java-symbol type="string" name="keyguard_accessibility_password_unlock" /> + <java-symbol type="string" name="keyguard_accessibility_pin_unlock" /> + <java-symbol type="string" name="keyguard_accessibility_slide_area" /> + <java-symbol type="string" name="keyguard_accessibility_slide_unlock" /> <java-symbol type="string" name="keyguard_accessibility_status" /> <java-symbol type="string" name="keyguard_accessibility_user_selector" /> - <java-symbol type="string" name="keyguard_accessibility_widget_changed" /> + <java-symbol type="string" name="keyguard_accessibility_widget" /> + <java-symbol type="string" name="keyguard_accessibility_widget_deleted" /> + <java-symbol type="string" name="keyguard_accessibility_widget_empty_slot" /> + <java-symbol type="string" name="keyguard_accessibility_widget_reorder_start" /> + <java-symbol type="string" name="keyguard_accessibility_widget_reorder_end" /> + <java-symbol type="string" name="keyguard_accessibility_unlock_area_collapsed" /> + <java-symbol type="string" name="keyguard_accessibility_unlock_area_expanded" /> <java-symbol type="string" name="kilobyteShort" /> <java-symbol type="string" name="last_month" /> <java-symbol type="string" name="launchBrowserDefault" /> diff --git a/policy/src/com/android/internal/policy/impl/keyguard/CameraWidgetFrame.java b/policy/src/com/android/internal/policy/impl/keyguard/CameraWidgetFrame.java index 3dd0a8f3c2b..7f5d66fa44c 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/CameraWidgetFrame.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/CameraWidgetFrame.java @@ -34,6 +34,7 @@ import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.ImageView.ScaleType; +import com.android.internal.R; import com.android.internal.policy.impl.keyguard.KeyguardActivityLauncher.CameraWidgetInfo; public class CameraWidgetFrame extends KeyguardWidgetFrame implements View.OnClickListener { @@ -107,6 +108,8 @@ public class CameraWidgetFrame extends KeyguardWidgetFrame implements View.OnCli FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)); preview.setScaleType(ScaleType.FIT_CENTER); + preview.setContentDescription(preview.getContext().getString( + R.string.keyguard_accessibility_camera)); CameraWidgetFrame cameraWidgetFrame = new CameraWidgetFrame(context, callbacks, launcher); cameraWidgetFrame.addView(preview); cameraWidgetFrame.mWidgetView = widgetView; diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java index 3b2ded20f21..d273db12ad1 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java @@ -49,6 +49,7 @@ import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.WindowManager; +import android.view.accessibility.AccessibilityNodeInfo; import android.view.animation.AnimationUtils; import android.widget.RemoteViews.OnClickHandler; @@ -115,8 +116,7 @@ public class KeyguardHostView extends KeyguardViewBase { // The following enables the MENU key to work for testing automation mEnableMenuKey = shouldEnableMenuKey(); - setFocusable(true); - setFocusableInTouchMode(true); + mViewStateManager = new KeyguardViewStateManager(); } @Override @@ -150,8 +150,6 @@ public class KeyguardHostView extends KeyguardViewBase { @Override protected void onFinishInflate() { - mViewStateManager = new KeyguardViewStateManager(); - // Grab instances of and make any necessary changes to the main layouts. Create // view state manager and wire up necessary listeners / callbacks. mAppWidgetContainer = (KeyguardWidgetPager) findViewById(R.id.app_widget_container); diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java index 667b2d63b26..f3d9a0a6661 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java @@ -21,7 +21,6 @@ import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.animation.PropertyValuesHolder; import android.animation.TimeInterpolator; -import android.appwidget.AppWidgetHostView; import android.content.Context; import android.content.res.Resources; import android.os.Handler; @@ -32,6 +31,8 @@ import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.view.View.OnLongClickListener; +import android.view.accessibility.AccessibilityEvent; +import android.view.accessibility.AccessibilityManager; import android.view.ViewGroup; import android.widget.FrameLayout; @@ -134,11 +135,27 @@ public class KeyguardWidgetPager extends PagedView implements PagedView.PageSwit KeyguardWidgetFrame newWidgetPage = getWidgetPageAt(newPageIndex); if (newWidgetPage != null) { newWidgetPage.onActive(true); + newWidgetPage.requestAccessibilityFocus(); } } if (mViewStateManager != null) { mViewStateManager.onPageSwitch(newPage, newPageIndex); } + + if (mParent != null && AccessibilityManager.getInstance(mContext).isEnabled()) { + AccessibilityEvent event = AccessibilityEvent.obtain( + AccessibilityEvent.TYPE_VIEW_SCROLLED); + onInitializeAccessibilityEvent(event); + onPopulateAccessibilityEvent(event); + mParent.requestSendAccessibilityEvent(this, event); + } + } + + @Override + public void sendAccessibilityEvent(int eventType) { + if (eventType != AccessibilityEvent.TYPE_VIEW_SCROLLED || isPageMoving()) { + super.sendAccessibilityEvent(eventType); + } } private void userActivity() { @@ -227,10 +244,6 @@ public class KeyguardWidgetPager extends PagedView implements PagedView.PageSwit // The framework adds a default padding to AppWidgetHostView. We don't need this padding // for the Keyguard, so we override it to be 0. widget.setPadding(0, 0, 0, 0); - if (widget instanceof AppWidgetHostView) { - AppWidgetHostView awhv = (AppWidgetHostView) widget; - widget.setContentDescription(awhv.getAppWidgetInfo().label); - } frame.addView(widget, lp); } else { frame = (KeyguardWidgetFrame) widget; @@ -245,6 +258,16 @@ public class KeyguardWidgetPager extends PagedView implements PagedView.PageSwit } else { addView(frame, pageIndex, pageLp); } + + // Update the frame content description. + View content = (widget == frame) ? frame.getContent() : widget; + if (content != null) { + String contentDescription = mContext.getString( + com.android.internal.R.string.keyguard_accessibility_widget, + content.getContentDescription()); + frame.setContentDescription(contentDescription); + } + frame.setLongClickable(true); } /** @@ -361,22 +384,6 @@ public class KeyguardWidgetPager extends PagedView implements PagedView.PageSwit } @Override - public String getCurrentPageDescription() { - final int nextPageIndex = getNextPage(); - if (nextPageIndex >= 0 && nextPageIndex < getChildCount()) { - KeyguardWidgetFrame frame = getWidgetPageAt(nextPageIndex); - CharSequence title = frame.getChildAt(0).getContentDescription(); - if (title == null) { - title = ""; - } - return mContext.getString( - com.android.internal.R.string.keyguard_accessibility_widget_changed, - title, nextPageIndex + 1, getChildCount()); - } - return super.getCurrentPageDescription(); - } - - @Override protected void overScroll(float amount) { acceleratedOverScroll(amount); } diff --git a/policy/src/com/android/internal/policy/impl/keyguard/PagedView.java b/policy/src/com/android/internal/policy/impl/keyguard/PagedView.java index c93b11af89d..a6ae84daafe 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/PagedView.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/PagedView.java @@ -539,27 +539,12 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc if (mTouchState == TOUCH_STATE_REST) { pageEndMoving(); } - onPostReorderingAnimationCompleted(); - - // Notify the user when the page changes - AccessibilityManager accessibilityManager = (AccessibilityManager) - getContext().getSystemService(Context.ACCESSIBILITY_SERVICE); - if (accessibilityManager.isEnabled()) { - AccessibilityEvent ev = - AccessibilityEvent.obtain(AccessibilityEvent.TYPE_VIEW_SCROLLED); - ev.getText().add(getCurrentPageDescription()); - sendAccessibilityEventUnchecked(ev); - } return true; } return false; } - public String getCurrentPageDescription() { - return ""; - } - @Override public void computeScroll() { computeScrollHelper(); @@ -1758,10 +1743,8 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc } protected void snapToPage(int whichPage, int delta, int duration, boolean immediate) { mNextPage = whichPage; - View focusedChild = getFocusedChild(); - if (focusedChild != null && whichPage != mCurrentPage && - focusedChild == getPageAt(mCurrentPage)) { + if (focusedChild != null && focusedChild == getPageAt(mCurrentPage)) { focusedChild.clearFocus(); } @@ -2013,6 +1996,11 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc } protected void onStartReordering() { + if (AccessibilityManager.getInstance(mContext).isEnabled()) { + announceForAccessibility(mContext.getString( + R.string.keyguard_accessibility_widget_reorder_start)); + } + // Set the touch state to reordering (allows snapping to pages, dragging a child, etc.) mTouchState = TOUCH_STATE_REORDERING; mIsReordering = true; @@ -2033,6 +2021,10 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc } protected void onEndReordering() { + if (AccessibilityManager.getInstance(mContext).isEnabled()) { + announceForAccessibility(mContext.getString( + R.string.keyguard_accessibility_widget_reorder_end)); + } mIsReordering = false; } @@ -2298,6 +2290,7 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc } /* Accessibility */ + @Override public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { super.onInitializeAccessibilityNodeInfo(info); diff --git a/services/java/com/android/server/accessibility/TouchExplorer.java b/services/java/com/android/server/accessibility/TouchExplorer.java index dcf873508f3..18b46fbec4e 100644 --- a/services/java/com/android/server/accessibility/TouchExplorer.java +++ b/services/java/com/android/server/accessibility/TouchExplorer.java @@ -584,6 +584,7 @@ class TouchExplorer implements EventStreamTransformation { // a given distance perform a drag. mCurrentState = STATE_DRAGGING; mDraggingPointerId = pointerId; + event.setEdgeFlags(receivedTracker.getLastReceivedDownEdgeFlags()); sendMotionEvent(event, MotionEvent.ACTION_DOWN, pointerIdBits, policyFlags); } else { @@ -1752,6 +1753,9 @@ class TouchExplorer implements EventStreamTransformation { // Which pointers are down. private int mReceivedPointersDown; + // The edge flags of the last received down event. + private int mLastReceivedDownEdgeFlags; + // Which down pointers are active. private int mActivePointers; @@ -1947,6 +1951,13 @@ class TouchExplorer implements EventStreamTransformation { } /** + * @return The edge flags of the last received down event. + */ + public int getLastReceivedDownEdgeFlags() { + return mLastReceivedDownEdgeFlags; + } + + /** * @return Whether the last received pointer that went up was active. */ public boolean wasLastReceivedUpPointerActive() { @@ -1995,6 +2006,8 @@ class TouchExplorer implements EventStreamTransformation { mLastReceivedUpPointerDownX = 0; mLastReceivedUpPointerDownX = 0; + mLastReceivedDownEdgeFlags = event.getEdgeFlags(); + mReceivedPointersDown |= pointerFlag; mReceivedPointerDownX[pointerId] = event.getX(pointerIndex); mReceivedPointerDownY[pointerId] = event.getY(pointerIndex); |