summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnthony Hugh <ahugh@google.com>2015-10-05 23:30:41 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2015-10-05 23:30:41 +0000
commit71b7629e6f664d0add65f10ef675c99862fea5b8 (patch)
treeced59d89d469653a5c5f94aaaf2cc4455011adce
parent50728943132334309e0784de72fa2eaebef40435 (diff)
parent6a5762884adc64ea95bd206c46d60031428e977c (diff)
downloadandroid_packages_apps_PackageInstaller-71b7629e6f664d0add65f10ef675c99862fea5b8.tar.gz
android_packages_apps_PackageInstaller-71b7629e6f664d0add65f10ef675c99862fea5b8.tar.bz2
android_packages_apps_PackageInstaller-71b7629e6f664d0add65f10ef675c99862fea5b8.zip
am 6a576288: Permissions redline fixes
* commit '6a5762884adc64ea95bd206c46d60031428e977c': Permissions redline fixes
-rw-r--r--res/drawable-watch/action_negative_bg.xml14
-rw-r--r--res/drawable-watch/action_positive_bg.xml14
-rw-r--r--res/drawable-watch/cancel_button.xml14
-rw-r--r--res/drawable-watch/confirm_button.xml14
-rw-r--r--res/drawable-watch/deny_button.xml14
-rw-r--r--res/layout-watch/confirmation_dialog.xml12
-rw-r--r--res/values-round/dimens.xml2
-rw-r--r--res/values-watch/dimens.xml4
-rw-r--r--res/values-watch/strings.xml4
-rw-r--r--src/com/android/packageinstaller/permission/ui/GrantPermissionsWatchViewHandler.java2
-rw-r--r--src/com/android/packageinstaller/permission/ui/wear/ConfirmationViewHandler.java147
11 files changed, 181 insertions, 60 deletions
diff --git a/res/drawable-watch/action_negative_bg.xml b/res/drawable-watch/action_negative_bg.xml
index f1c33b54..7b21ba6d 100644
--- a/res/drawable-watch/action_negative_bg.xml
+++ b/res/drawable-watch/action_negative_bg.xml
@@ -1,4 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ 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_enabled="false">
<shape android:shape="oval">
diff --git a/res/drawable-watch/action_positive_bg.xml b/res/drawable-watch/action_positive_bg.xml
index bc3e88ba..f3457c1a 100644
--- a/res/drawable-watch/action_positive_bg.xml
+++ b/res/drawable-watch/action_positive_bg.xml
@@ -1,4 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ 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_enabled="false">
<shape android:shape="oval">
diff --git a/res/drawable-watch/cancel_button.xml b/res/drawable-watch/cancel_button.xml
index 5b16f549..641526a5 100644
--- a/res/drawable-watch/cancel_button.xml
+++ b/res/drawable-watch/cancel_button.xml
@@ -1,4 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ 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.
+-->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@drawable/action_negative_bg" />
<item>
diff --git a/res/drawable-watch/confirm_button.xml b/res/drawable-watch/confirm_button.xml
index 6a895ec6..2b53e42e 100644
--- a/res/drawable-watch/confirm_button.xml
+++ b/res/drawable-watch/confirm_button.xml
@@ -1,4 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ 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.
+-->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@drawable/action_positive_bg" />
<item>
diff --git a/res/drawable-watch/deny_button.xml b/res/drawable-watch/deny_button.xml
index 70ea453f..1e7582bc 100644
--- a/res/drawable-watch/deny_button.xml
+++ b/res/drawable-watch/deny_button.xml
@@ -1,4 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ 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.
+-->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@drawable/action_negative_bg" />
<item>
diff --git a/res/layout-watch/confirmation_dialog.xml b/res/layout-watch/confirmation_dialog.xml
index 783d4051..0b93579e 100644
--- a/res/layout-watch/confirmation_dialog.xml
+++ b/res/layout-watch/confirmation_dialog.xml
@@ -29,7 +29,6 @@
<LinearLayout
android:id="@+id/content"
android:orientation="vertical"
- android:paddingBottom="@dimen/conf_diag_button_container_height"
android:layout_width="match_parent"
android:layout_height="wrap_content">
@@ -89,13 +88,13 @@
android:layout_marginTop="@dimen/conf_diag_2button_margin_top"
android:background="@drawable/confirm_button"/>
</FrameLayout>
-
+
<FrameLayout
android:id="@+id/vertical_button_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginLeft="@dimen/conf_diag_3button_margin_left"
- android:layout_marginBottom="@dimen/conf_diag_3button_margin_bottom"
+ android:paddingLeft="@dimen/conf_diag_3button_padding_side"
+ android:paddingRight="@dimen/conf_diag_3button_padding_side"
android:visibility="gone">
<LinearLayout
android:id="@+id/buttonPanel"
@@ -113,6 +112,11 @@
<Button
android:id="@+id/vertical_button3"
style="@style/Widget.WearDiag.Button"/>
+
+ <!-- Adding padding to the bottom button causes rendering issues, so add
+ an empty view here instead -->
+ <Space android:layout_width="match_parent"
+ android:layout_height="@dimen/conf_diag_3button_padding_bottom"/>
</LinearLayout>
</FrameLayout>
</FrameLayout>
diff --git a/res/values-round/dimens.xml b/res/values-round/dimens.xml
index d9a522d4..5e7309b9 100644
--- a/res/values-round/dimens.xml
+++ b/res/values-round/dimens.xml
@@ -19,7 +19,5 @@
<dimen name="conf_diag_button_container_height">96dp</dimen>
<dimen name="conf_diag_2button_margin_side">32dp</dimen>
<dimen name="conf_diag_2button_margin_top">10dp</dimen>
- <dimen name="conf_diag_3button_margin_left">36dp</dimen>
- <dimen name="conf_diag_3button_margin_bottom">24dp</dimen>
</resources>
diff --git a/res/values-watch/dimens.xml b/res/values-watch/dimens.xml
index fa657c73..24d2a058 100644
--- a/res/values-watch/dimens.xml
+++ b/res/values-watch/dimens.xml
@@ -30,8 +30,8 @@
<dimen name="conf_diag_button_container_height">72dp</dimen>
<dimen name="conf_diag_2button_margin_side">16dp</dimen>
<dimen name="conf_diag_2button_margin_top">9dp</dimen>
- <dimen name="conf_diag_3button_margin_left">16dp</dimen>
- <dimen name="conf_diag_3button_margin_bottom">9dp</dimen>
+ <dimen name="conf_diag_3button_padding_side">32dp</dimen>
+ <dimen name="conf_diag_3button_padding_bottom">22dp</dimen>
<!-- START: Ported values -->
diff --git a/res/values-watch/strings.xml b/res/values-watch/strings.xml
index 2728da23..82fe4ae9 100644
--- a/res/values-watch/strings.xml
+++ b/res/values-watch/strings.xml
@@ -15,8 +15,8 @@
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Title for the dialog button to deny a permission grant and never ask the user again. -->
- <string name="grant_dialog_button_deny_dont_ask_again">Deny and don\'t ask again</string>
+ <!-- Title for the dialog button to deny a permission grant and never ask the user again. [CHAR LIMIT=29]-->
+ <string name="grant_dialog_button_deny_dont_ask_again">Deny, don\'t ask again</string>
<!-- Template for the current permission from the total number of permissions. -->
<string name="current_permission_template">
diff --git a/src/com/android/packageinstaller/permission/ui/GrantPermissionsWatchViewHandler.java b/src/com/android/packageinstaller/permission/ui/GrantPermissionsWatchViewHandler.java
index 242d0bce..21042f00 100644
--- a/src/com/android/packageinstaller/permission/ui/GrantPermissionsWatchViewHandler.java
+++ b/src/com/android/packageinstaller/permission/ui/GrantPermissionsWatchViewHandler.java
@@ -57,7 +57,7 @@ final class GrantPermissionsWatchViewHandler extends ConfirmationViewHandler
@Override
public void updateWindowAttributes(WindowManager.LayoutParams outLayoutParams) {
outLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
- outLayoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
+ outLayoutParams.height = WindowManager.LayoutParams.MATCH_PARENT;
outLayoutParams.format = PixelFormat.OPAQUE;
outLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG;
outLayoutParams.flags |= WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
diff --git a/src/com/android/packageinstaller/permission/ui/wear/ConfirmationViewHandler.java b/src/com/android/packageinstaller/permission/ui/wear/ConfirmationViewHandler.java
index 277bada9..db3340f6 100644
--- a/src/com/android/packageinstaller/permission/ui/wear/ConfirmationViewHandler.java
+++ b/src/com/android/packageinstaller/permission/ui/wear/ConfirmationViewHandler.java
@@ -8,6 +8,7 @@ import android.graphics.drawable.Icon;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -24,11 +25,15 @@ import com.android.packageinstaller.R;
public abstract class ConfirmationViewHandler implements
Handler.Callback,
View.OnClickListener,
- ViewTreeObserver.OnScrollChangedListener {
+ ViewTreeObserver.OnScrollChangedListener,
+ ViewTreeObserver.OnGlobalLayoutListener {
+ private static final String TAG = "ConfirmationViewHandler";
+
public static final int MODE_HORIZONTAL_BUTTONS = 0;
public static final int MODE_VERTICAL_BUTTONS = 1;
- private static final int MSG_HIDE_BUTTON_BAR = 1001;
+ private static final int MSG_SHOW_BUTTON_BAR = 1001;
+ private static final int MSG_HIDE_BUTTON_BAR = 1002;
private static final long HIDE_ANIM_DURATION = 500;
private View mRoot;
@@ -103,6 +108,9 @@ public abstract class ConfirmationViewHandler implements
R.dimen.conf_diag_floating_height);
mHideHandler = new Handler(this);
+ mScrollingContainer.getViewTreeObserver().addOnScrollChangedListener(this);
+ mRoot.getViewTreeObserver().addOnGlobalLayoutListener(this);
+
return mRoot;
}
@@ -158,54 +166,41 @@ public abstract class ConfirmationViewHandler implements
mVerticalButton3.setCompoundDrawablesWithIntrinsicBounds(
getVerticalButton3Icon(), null, null, null);
}
-
break;
}
mScrollingContainer.scrollTo(0, 0);
- mScrollingContainer.getViewTreeObserver().addOnScrollChangedListener(this);
+ mHideHandler.removeMessages(MSG_HIDE_BUTTON_BAR);
+ mHideHandler.removeMessages(MSG_SHOW_BUTTON_BAR);
+ }
+
+ @Override
+ public void onGlobalLayout() {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "onGlobalLayout");
+ Log.d(TAG, " contentHeight: " + mContent.getHeight());
+ }
+
+ if (mButtonBarAnimator != null) {
+ mButtonBarAnimator.cancel();
+ }
+
+ // In order to fake the buttons peeking at the bottom, need to do set the
+ // padding properly.
+ if (mContent.getPaddingBottom() != mButtonBarContainer.getHeight()) {
+ mContent.setPadding(0, 0, 0, mButtonBarContainer.getHeight());
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, " set mContent.PaddingBottom: " + mButtonBarContainer.getHeight());
+ }
+ }
- mRoot.getViewTreeObserver().addOnGlobalLayoutListener(
- new ViewTreeObserver.OnGlobalLayoutListener() {
- @Override
- public void onGlobalLayout() {
- // Setup Button animation.
- // pop the button bar back to full height, stop all animation
- if (mButtonBarAnimator != null) {
- mButtonBarAnimator.cancel();
- }
-
- // In order to fake the buttons peeking at the bottom, need to do set the
- // padding properly.
- if (mContent.getPaddingBottom() != mButtonBarContainer.getHeight()) {
- mContent.setPadding(0, 0, 0, mButtonBarContainer.getHeight());
- }
-
- // stop any calls to hide the button bar in the future
- mHideHandler.removeMessages(MSG_HIDE_BUTTON_BAR);
- mHiddenBefore = false;
-
- // determine which mode the scrolling should work at.
- if (mContent.getHeight() > mScrollingContainer.getHeight()) {
- mButtonBarContainer.setTranslationZ(mButtonBarFloatingHeight);
- mHideHandler.sendEmptyMessageDelayed(MSG_HIDE_BUTTON_BAR, 3000);
- int maxButtonBarHeight = 0;
- if (mButtonBarContainer.getHeight() >= mRoot.getHeight() / 2) {
- // If the ButtonBar is bigger than half the screen, then don't
- // animate all the way.
- maxButtonBarHeight = mRoot.getHeight() / 2;
- }
- generateButtonBarAnimator(mButtonBarContainer.getHeight(),
- maxButtonBarHeight, 0, mButtonBarFloatingHeight, 1000);
- } else {
- mButtonBarContainer.setTranslationY(0);
- mButtonBarContainer.setTranslationZ(0);
- }
- mRoot.getViewTreeObserver().removeOnGlobalLayoutListener(this);
- }
- });
+ mButtonBarContainer.setTranslationY(mButtonBarContainer.getHeight());
+ // Give everything a chance to render
+ mHideHandler.removeMessages(MSG_HIDE_BUTTON_BAR);
+ mHideHandler.removeMessages(MSG_SHOW_BUTTON_BAR);
+ mHideHandler.sendEmptyMessageDelayed(MSG_SHOW_BUTTON_BAR, 50);
}
@Override
@@ -229,6 +224,9 @@ public abstract class ConfirmationViewHandler implements
@Override
public boolean handleMessage (Message msg) {
switch (msg.what) {
+ case MSG_SHOW_BUTTON_BAR:
+ showButtonBar();
+ return true;
case MSG_HIDE_BUTTON_BAR:
hideButtonBar();
return true;
@@ -237,21 +235,72 @@ public abstract class ConfirmationViewHandler implements
}
@Override
- public void onScrollChanged() {
+ public void onScrollChanged () {
mHideHandler.removeMessages(MSG_HIDE_BUTTON_BAR);
hideButtonBar();
}
+ private void showButtonBar() {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "showButtonBar");
+ }
+
+ // Setup Button animation.
+ // pop the button bar back to full height, stop all animation
+ if (mButtonBarAnimator != null) {
+ mButtonBarAnimator.cancel();
+ }
+
+ // stop any calls to hide the button bar in the future
+ mHideHandler.removeMessages(MSG_HIDE_BUTTON_BAR);
+ mHiddenBefore = false;
+
+ // Evaluate the max height the button bar can go
+ final int screenHeight = mRoot.getHeight();
+ final int buttonBarHeight = mButtonBarContainer.getHeight();
+ final int buttonBarMaxHeight =
+ Math.min(buttonBarHeight, screenHeight / 2);
+
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ final int contentHeight = mContent.getHeight() - buttonBarHeight;
+ Log.d(TAG, " screenHeight: " + screenHeight);
+ Log.d(TAG, " contentHeight: " + contentHeight);
+ Log.d(TAG, " buttonBarHeight: " + buttonBarHeight);
+ Log.d(TAG, " buttonBarMaxHeight: " + buttonBarMaxHeight);
+ }
+
+ mButtonBarContainer.setTranslationZ(mButtonBarFloatingHeight);
+ mHideHandler.sendEmptyMessageDelayed(MSG_HIDE_BUTTON_BAR, 3000);
+
+ generateButtonBarAnimator(buttonBarHeight,
+ buttonBarHeight - buttonBarMaxHeight, 0, mButtonBarFloatingHeight, 1000);
+ }
+
private void hideButtonBar() {
- // get the offset to the top of the button bar
- int offset = mScrollingContainer.getHeight() + mButtonBarContainer.getHeight() -
- mContent.getHeight() + Math.max(mScrollingContainer.getScrollY(), 0);
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "hideButtonBar");
+ }
+
// The desired margin space between the button bar and the bottom of the dialog text
- int topMargin = mContext.getResources().getDimensionPixelSize(
+ final int topMargin = mContext.getResources().getDimensionPixelSize(
R.dimen.conf_diag_button_container_top_margin);
- int translationY = topMargin + (offset > 0 ?
+ final int contentHeight = mContent.getHeight() + topMargin;
+ final int screenHeight = mRoot.getHeight();
+ final int buttonBarHeight = mButtonBarContainer.getHeight();
+
+ final int offset = screenHeight + buttonBarHeight
+ - contentHeight + Math.max(mScrollingContainer.getScrollY(), 0);
+ final int translationY = (offset > 0 ?
mButtonBarContainer.getHeight() - offset : mButtonBarContainer.getHeight());
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, " contentHeight: " + contentHeight);
+ Log.d(TAG, " buttonBarHeight: " + buttonBarHeight);
+ Log.d(TAG, " mContent.getPaddingBottom(): " + mContent.getPaddingBottom());
+ Log.d(TAG, " mScrollingContainer.getScrollY(): " + mScrollingContainer.getScrollY());
+ Log.d(TAG, " translationY: " + translationY);
+ }
+
if (!mHiddenBefore || mButtonBarAnimator == null) {
// hasn't hidden the bar yet, just hide now to the right height
generateButtonBarAnimator(