summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSvetoslav Ganov <svetoslavganov@google.com>2012-10-31 14:33:32 -0700
committerSvetoslav Ganov <svetoslavganov@google.com>2012-10-31 17:49:10 -0700
commitc4842c11932ea4f60fe7ae09b0a59660207e1587 (patch)
tree3181e8d1e9d489ea225b06961948e34dca24cd0a
parentc8dc8eb3275a6d05e27824f322796e97e5e50e2f (diff)
downloadframeworks_base-c4842c11932ea4f60fe7ae09b0a59660207e1587.tar.gz
frameworks_base-c4842c11932ea4f60fe7ae09b0a59660207e1587.tar.bz2
frameworks_base-c4842c11932ea4f60fe7ae09b0a59660207e1587.zip
Accessibility support for the lockscreen - phone.
Change-Id: Idc99f1322a1d635dd07e1f5efa1665a4676267c2
-rw-r--r--core/java/android/appwidget/AppWidgetHostView.java1
-rw-r--r--core/java/com/android/internal/widget/LockPatternView.java13
-rw-r--r--core/res/res/drawable-hdpi/kg_security_lock_focused.pngbin0 -> 2377 bytes
-rw-r--r--core/res/res/drawable-hdpi/kg_security_lock_normal.pngbin0 -> 2688 bytes
-rw-r--r--core/res/res/drawable-hdpi/kg_security_lock_pressed.pngbin0 -> 1760 bytes
-rw-r--r--core/res/res/drawable-mdpi/kg_security_lock_focused.pngbin0 -> 1567 bytes
-rw-r--r--core/res/res/drawable-mdpi/kg_security_lock_normal.pngbin0 -> 1899 bytes
-rw-r--r--core/res/res/drawable-mdpi/kg_security_lock_pressed.pngbin0 -> 1347 bytes
-rw-r--r--core/res/res/drawable-xhdpi/kg_security_lock_focused.pngbin0 -> 3277 bytes
-rw-r--r--core/res/res/drawable-xhdpi/kg_security_lock_normal.pngbin0 -> 3517 bytes
-rw-r--r--core/res/res/drawable-xhdpi/kg_security_lock_pressed.pngbin0 -> 2173 bytes
-rw-r--r--core/res/res/drawable/keyguard_expand_challenge_handle.xml21
-rw-r--r--core/res/res/layout-port/keyguard_host_view.xml14
-rw-r--r--core/res/res/layout/keyguard_add_widget.xml4
-rw-r--r--core/res/res/layout/keyguard_emergency_carrier_area.xml3
-rw-r--r--core/res/res/layout/keyguard_face_unlock_view.xml3
-rw-r--r--core/res/res/layout/keyguard_glow_pad_view.xml2
-rw-r--r--core/res/res/layout/keyguard_message_area.xml3
-rw-r--r--core/res/res/layout/keyguard_password_view.xml1
-rw-r--r--core/res/res/layout/keyguard_pattern_view.xml6
-rw-r--r--core/res/res/layout/keyguard_pin_view.xml1
-rw-r--r--core/res/res/layout/keyguard_selector_view.xml3
-rw-r--r--core/res/res/layout/keyguard_status_view.xml5
-rwxr-xr-xcore/res/res/values/attrs.xml8
-rw-r--r--core/res/res/values/symbols.xml18
-rw-r--r--policy/src/com/android/internal/policy/impl/keyguard/CameraWidgetFrame.java3
-rw-r--r--policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java6
-rw-r--r--policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java49
-rw-r--r--policy/src/com/android/internal/policy/impl/keyguard/PagedView.java29
-rw-r--r--services/java/com/android/server/accessibility/TouchExplorer.java13
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
new file mode 100644
index 00000000000..9a827997a48
--- /dev/null
+++ b/core/res/res/drawable-hdpi/kg_security_lock_focused.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/kg_security_lock_normal.png b/core/res/res/drawable-hdpi/kg_security_lock_normal.png
new file mode 100644
index 00000000000..d608707e38e
--- /dev/null
+++ b/core/res/res/drawable-hdpi/kg_security_lock_normal.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/kg_security_lock_pressed.png b/core/res/res/drawable-hdpi/kg_security_lock_pressed.png
new file mode 100644
index 00000000000..7ca995dfdf0
--- /dev/null
+++ b/core/res/res/drawable-hdpi/kg_security_lock_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/kg_security_lock_focused.png b/core/res/res/drawable-mdpi/kg_security_lock_focused.png
new file mode 100644
index 00000000000..c3608f94016
--- /dev/null
+++ b/core/res/res/drawable-mdpi/kg_security_lock_focused.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/kg_security_lock_normal.png b/core/res/res/drawable-mdpi/kg_security_lock_normal.png
new file mode 100644
index 00000000000..7957c79dcca
--- /dev/null
+++ b/core/res/res/drawable-mdpi/kg_security_lock_normal.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/kg_security_lock_pressed.png b/core/res/res/drawable-mdpi/kg_security_lock_pressed.png
new file mode 100644
index 00000000000..41715f5be41
--- /dev/null
+++ b/core/res/res/drawable-mdpi/kg_security_lock_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/kg_security_lock_focused.png b/core/res/res/drawable-xhdpi/kg_security_lock_focused.png
new file mode 100644
index 00000000000..db220162444
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/kg_security_lock_focused.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/kg_security_lock_normal.png b/core/res/res/drawable-xhdpi/kg_security_lock_normal.png
new file mode 100644
index 00000000000..17ebb5f8dc9
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/kg_security_lock_normal.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/kg_security_lock_pressed.png b/core/res/res/drawable-xhdpi/kg_security_lock_pressed.png
new file mode 100644
index 00000000000..186b6ffec11
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/kg_security_lock_pressed.png
Binary files differ
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);