summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJustin Klaassen <justinklaassen@google.com>2015-06-04 22:25:41 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2015-06-04 22:25:41 +0000
commit2d7d941cb138bea8998b0e1c934f0fb2181a854e (patch)
treed437fc800ea4c564947e8b4d7c4e9d1e191d3fd9
parente87aab088f0bc5e81d12373740284c1aae123660 (diff)
parent06c4944949254d1d34d6b6dde44f289c332156da (diff)
downloadandroid_packages_apps_ExactCalculator-2d7d941cb138bea8998b0e1c934f0fb2181a854e.tar.gz
android_packages_apps_ExactCalculator-2d7d941cb138bea8998b0e1c934f0fb2181a854e.tar.bz2
android_packages_apps_ExactCalculator-2d7d941cb138bea8998b0e1c934f0fb2181a854e.zip
am 06c49449: Limit interactions to only the current pad
* commit '06c4944949254d1d34d6b6dde44f289c332156da': Limit interactions to only the current pad
-rw-r--r--src/com/android/calculator2/Calculator.java14
-rw-r--r--src/com/android/calculator2/CalculatorPadViewPager.java62
2 files changed, 52 insertions, 24 deletions
diff --git a/src/com/android/calculator2/Calculator.java b/src/com/android/calculator2/Calculator.java
index b2cf477..414ec0c 100644
--- a/src/com/android/calculator2/Calculator.java
+++ b/src/com/android/calculator2/Calculator.java
@@ -128,8 +128,20 @@ public class Calculator extends Activity
private final OnKeyListener mFormulaOnKeyListener = new OnKeyListener() {
@Override
public boolean onKey(View view, int keyCode, KeyEvent keyEvent) {
- if (keyEvent.getAction() != KeyEvent.ACTION_UP) return true;
stopActionMode();
+
+ // Never consume DPAD key events.
+ switch (keyCode) {
+ case KeyEvent.KEYCODE_DPAD_UP:
+ case KeyEvent.KEYCODE_DPAD_DOWN:
+ case KeyEvent.KEYCODE_DPAD_LEFT:
+ case KeyEvent.KEYCODE_DPAD_RIGHT:
+ return false;
+ }
+
+ if (keyEvent.getAction() != KeyEvent.ACTION_UP) {
+ return true;
+ }
switch (keyCode) {
case KeyEvent.KEYCODE_NUMPAD_ENTER:
case KeyEvent.KEYCODE_ENTER:
diff --git a/src/com/android/calculator2/CalculatorPadViewPager.java b/src/com/android/calculator2/CalculatorPadViewPager.java
index 014df9c..c915f25 100644
--- a/src/com/android/calculator2/CalculatorPadViewPager.java
+++ b/src/com/android/calculator2/CalculatorPadViewPager.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2014 The Android Open Source Project
+ * Copyright (C) 2015 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.
@@ -17,9 +17,11 @@
package com.android.calculator2;
import android.content.Context;
+import android.graphics.Color;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
+import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
@@ -32,7 +34,7 @@ public class CalculatorPadViewPager extends ViewPager {
}
@Override
- public Object instantiateItem(ViewGroup container, int position) {
+ public View instantiateItem(ViewGroup container, int position) {
return getChildAt(position);
}
@@ -53,24 +55,12 @@ public class CalculatorPadViewPager extends ViewPager {
};
private final OnPageChangeListener mOnPageChangeListener = new SimpleOnPageChangeListener() {
- private void recursivelySetEnabled(View view, boolean enabled) {
- if (view instanceof ViewGroup) {
- final ViewGroup viewGroup = (ViewGroup) view;
- for (int childIndex = 0; childIndex < viewGroup.getChildCount(); ++childIndex) {
- recursivelySetEnabled(viewGroup.getChildAt(childIndex), enabled);
- }
- } else {
- view.setEnabled(enabled);
- }
- }
-
@Override
public void onPageSelected(int position) {
- if (getAdapter() == mStaticPagerAdapter) {
- for (int childIndex = 0; childIndex < getChildCount(); ++childIndex) {
- // Only enable subviews of the current page.
- recursivelySetEnabled(getChildAt(childIndex), childIndex == position);
- }
+ for (int i = getChildCount() - 1; i >= 0; --i) {
+ getChildAt(i).setImportantForAccessibility(i == position
+ ? IMPORTANT_FOR_ACCESSIBILITY_AUTO
+ : IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS) ;
}
}
};
@@ -91,17 +81,17 @@ public class CalculatorPadViewPager extends ViewPager {
};
public CalculatorPadViewPager(Context context) {
- this(context, null);
+ this(context, null /* attrs */);
}
public CalculatorPadViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
setAdapter(mStaticPagerAdapter);
- setBackgroundColor(getResources().getColor(android.R.color.black));
- setOnPageChangeListener(mOnPageChangeListener);
+ setBackgroundColor(Color.BLACK);
setPageMargin(getResources().getDimensionPixelSize(R.dimen.pad_page_margin));
setPageTransformer(false, mPageTransformer);
+ addOnPageChangeListener(mOnPageChangeListener);
}
@Override
@@ -109,8 +99,34 @@ public class CalculatorPadViewPager extends ViewPager {
super.onFinishInflate();
// Invalidate the adapter's data set since children may have been added during inflation.
- if (getAdapter() == mStaticPagerAdapter) {
- mStaticPagerAdapter.notifyDataSetChanged();
+ getAdapter().notifyDataSetChanged();
+
+ // Let page change listener know about our initial position.
+ mOnPageChangeListener.onPageSelected(getCurrentItem());
+ }
+
+ @Override
+ public boolean onInterceptTouchEvent(MotionEvent ev) {
+ boolean shouldIntercept = super.onInterceptTouchEvent(ev);
+
+ // Only allow the current item to receive touch events.
+ if (!shouldIntercept && ev.getActionMasked() == MotionEvent.ACTION_DOWN) {
+ final int x = (int) ev.getX() + getScrollX();
+ final int y = (int) ev.getY() + getScrollY();
+
+ final int childCount = getChildCount();
+ for (int i = childCount - 1; i >= 0; --i) {
+ final int childIndex = getChildDrawingOrder(childCount, i);
+ final View child = getChildAt(childIndex);
+ if (child.getVisibility() == View.VISIBLE
+ && x >= child.getLeft() && x < child.getRight()
+ && y >= child.getTop() && y < child.getBottom()) {
+ shouldIntercept = (childIndex != getCurrentItem());
+ break;
+ }
+ }
}
+
+ return shouldIntercept;
}
}