summaryrefslogtreecommitdiffstats
path: root/packages
diff options
context:
space:
mode:
authorSelim Cinek <cinek@google.com>2014-09-01 15:11:28 +0200
committerSelim Cinek <cinek@google.com>2014-09-01 21:14:59 +0200
commit024ca598dd4b38b389251c138f4ef9882d4b68b0 (patch)
treeaf7550e33b32490571e17c6a1e814f4842c3b8de /packages
parent1cf8906231ff281dab360fc6190aa0633bb9ed18 (diff)
downloadframeworks_base-024ca598dd4b38b389251c138f4ef9882d4b68b0.zip
frameworks_base-024ca598dd4b38b389251c138f4ef9882d4b68b0.tar.gz
frameworks_base-024ca598dd4b38b389251c138f4ef9882d4b68b0.tar.bz2
Notification guts have now the actualHeight of the notifications
Before it just had the height of the notification leading to bugs in cornercases during animations and swiping. Also updated to colors to use system colors. Bug: 17333457 Change-Id: I00d87820595a789006632c582e8c35759a61969d
Diffstat (limited to 'packages')
-rw-r--r--packages/SystemUI/res/drawable/notification_guts_bg.xml3
-rw-r--r--packages/SystemUI/res/layout/notification_guts.xml5
-rw-r--r--packages/SystemUI/res/values/colors.xml4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java13
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/NotificationGuts.java104
6 files changed, 121 insertions, 12 deletions
diff --git a/packages/SystemUI/res/drawable/notification_guts_bg.xml b/packages/SystemUI/res/drawable/notification_guts_bg.xml
index 07932d1..1730dce 100644
--- a/packages/SystemUI/res/drawable/notification_guts_bg.xml
+++ b/packages/SystemUI/res/drawable/notification_guts_bg.xml
@@ -17,5 +17,6 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/notification_guts_bg_color" />
- <corners android:radius="@dimen/notification_material_rounded_rect_radius" />
+ <!--The radius is 1dp smaller than the notification one, to avoid aliasing bugs on the corners -->
+ <corners android:radius="1dp" />
</shape>
diff --git a/packages/SystemUI/res/layout/notification_guts.xml b/packages/SystemUI/res/layout/notification_guts.xml
index d65a23e..05114ea 100644
--- a/packages/SystemUI/res/layout/notification_guts.xml
+++ b/packages/SystemUI/res/layout/notification_guts.xml
@@ -15,11 +15,10 @@
limitations under the License.
-->
-<FrameLayout
+<com.android.systemui.statusbar.NotificationGuts
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@drawable/notification_guts_bg"
android:id="@+id/notification_guts"
android:visibility="gone"
android:clickable="true"
@@ -87,4 +86,4 @@
android:src="@drawable/ic_settings"
/>
</LinearLayout>
-</FrameLayout>
+</com.android.systemui.statusbar.NotificationGuts>
diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml
index 75ed81e..24520de 100644
--- a/packages/SystemUI/res/values/colors.xml
+++ b/packages/SystemUI/res/values/colors.xml
@@ -97,9 +97,9 @@
<color name="segmented_button_text_inactive">#99afbdc4</color><!-- 60% -->
<!-- The "inside" of a notification, reached via longpress -->
- <color name="notification_guts_bg_color">#ff424242</color><!-- grey 800 -->
+ <color name="notification_guts_bg_color">@color/system_secondary_color</color>
<color name="notification_guts_title_color">#FFFFFFFF</color>
- <color name="notification_guts_text_color">#99FFFFFF</color>
+ <color name="notification_guts_text_color">#b2FFFFFF</color>
<color name="notification_guts_btn_color">#FFFFFFFF</color>
<color name="search_panel_card_color">#ffffff</color>
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
index 35ed3e5..c01f3fb 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
@@ -191,7 +191,7 @@ public abstract class BaseStatusBar extends SystemUI implements
protected int mZenMode;
// which notification is currently being longpress-examined by the user
- private View mNotificationGutsExposed;
+ private NotificationGuts mNotificationGutsExposed;
private TimeInterpolator mLinearOutSlowIn, mFastOutLinearIn;
@@ -659,15 +659,16 @@ public abstract class BaseStatusBar extends SystemUI implements
if (v.getWindowToken() == null) return false;
// Assume we are a status_bar_notification_row
- final View guts = v.findViewById(R.id.notification_guts);
+ final NotificationGuts guts = (NotificationGuts) v.findViewById(
+ R.id.notification_guts);
if (guts == null) return false;
// Already showing?
if (guts.getVisibility() == View.VISIBLE) return false;
guts.setVisibility(View.VISIBLE);
- final double horz = Math.max(v.getWidth() - x, x);
- final double vert = Math.max(v.getHeight() - y, y);
+ final double horz = Math.max(guts.getWidth() - x, x);
+ final double vert = Math.max(guts.getActualHeight() - y, y);
final float r = (float) Math.hypot(horz, vert);
final Animator a
= ViewAnimationUtils.createCircularReveal(guts, x, y, 0, r);
@@ -684,11 +685,11 @@ public abstract class BaseStatusBar extends SystemUI implements
public void dismissPopups() {
if (mNotificationGutsExposed != null) {
- final View v = mNotificationGutsExposed;
+ final NotificationGuts v = mNotificationGutsExposed;
mNotificationGutsExposed = null;
final int x = (v.getLeft() + v.getRight()) / 2;
- final int y = (v.getTop() + v.getBottom()) / 2;
+ final int y = (v.getTop() + v.getActualHeight() / 2);
final Animator a = ViewAnimationUtils.createCircularReveal(v,
x, y, x, 0);
a.setDuration(200);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
index 7d64325..acb83cb 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
@@ -60,6 +60,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView {
private ExpansionLogger mLogger;
private String mLoggingKey;
private boolean mWasReset;
+ private NotificationGuts mGuts;
public interface ExpansionLogger {
public void logNotificationExpansion(String key, boolean userAction, boolean expanded);
@@ -103,6 +104,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView {
super.onFinishInflate();
mPublicLayout = (NotificationContentView) findViewById(R.id.expandedPublic);
mPrivateLayout = (NotificationContentView) findViewById(R.id.expanded);
+ mGuts = (NotificationGuts) findViewById(R.id.notification_guts);
mVetoButton = findViewById(R.id.veto);
}
@@ -360,6 +362,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView {
public void setActualHeight(int height, boolean notifyListeners) {
mPrivateLayout.setActualHeight(height);
mPublicLayout.setActualHeight(height);
+ mGuts.setActualHeight(height);
invalidate();
super.setActualHeight(height, notifyListeners);
}
@@ -381,6 +384,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView {
super.setClipTopAmount(clipTopAmount);
mPrivateLayout.setClipTopAmount(clipTopAmount);
mPublicLayout.setClipTopAmount(clipTopAmount);
+ mGuts.setClipTopAmount(clipTopAmount);
}
public void notifyContentUpdated() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationGuts.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationGuts.java
new file mode 100644
index 0000000..46e0bf8
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationGuts.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2014 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
+ */
+
+package com.android.systemui.statusbar;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.drawable.Drawable;
+import android.util.AttributeSet;
+import android.widget.FrameLayout;
+import com.android.systemui.R;
+
+/**
+ * The guts of a notification revealed when performing a long press.
+ */
+public class NotificationGuts extends FrameLayout {
+
+ private Drawable mBackground;
+ private int mClipTopAmount;
+ private int mActualHeight;
+
+ public NotificationGuts(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ setWillNotDraw(false);
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ draw(canvas, mBackground);
+ }
+
+ private void draw(Canvas canvas, Drawable drawable) {
+ if (drawable != null) {
+ drawable.setBounds(0, mClipTopAmount, getWidth(), mActualHeight);
+ drawable.draw(canvas);
+ }
+ }
+
+ @Override
+ protected void onFinishInflate() {
+ super.onFinishInflate();
+ mBackground = mContext.getDrawable(R.drawable.notification_guts_bg);
+ if (mBackground != null) {
+ mBackground.setCallback(this);
+ }
+ }
+
+ @Override
+ protected boolean verifyDrawable(Drawable who) {
+ return super.verifyDrawable(who) || who == mBackground;
+ }
+
+ @Override
+ protected void drawableStateChanged() {
+ drawableStateChanged(mBackground);
+ }
+
+ private void drawableStateChanged(Drawable d) {
+ if (d != null && d.isStateful()) {
+ d.setState(getDrawableState());
+ }
+ }
+
+ @Override
+ public void drawableHotspotChanged(float x, float y) {
+ if (mBackground != null) {
+ mBackground.setHotspot(x, y);
+ }
+ }
+
+ public void setActualHeight(int actualHeight) {
+ mActualHeight = actualHeight;
+ invalidate();
+ }
+
+ public int getActualHeight() {
+ return mActualHeight;
+ }
+
+ public void setClipTopAmount(int clipTopAmount) {
+ mClipTopAmount = clipTopAmount;
+ invalidate();
+ }
+
+ @Override
+ public boolean hasOverlappingRendering() {
+
+ // Prevents this view from creating a layer when alpha is animating.
+ return false;
+ }
+}