Merge "Notification guts have now the actualHeight of the notifications" into lmp-dev

This commit is contained in:
Selim Cinek
2014-09-01 19:16:23 +00:00
committed by Android (Google) Code Review
6 changed files with 121 additions and 12 deletions

View File

@@ -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>

View File

@@ -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>

View File

@@ -101,9 +101,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>

View File

@@ -203,7 +203,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;
@@ -739,15 +739,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);
@@ -764,11 +765,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);

View File

@@ -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() {

View File

@@ -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;
}
}