Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 245090f0 authored by Selim Cinek's avatar Selim Cinek
Browse files

Fixed a regression where custom notification where unreadable

Because custom notifications don't have their background
Color reapplied, we need to ensure that the color is saved.

Test: runtest -x packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationCustomViewWrapperTest.java
Change-Id: I309097ef8abe18706479d64c6048521f941a26f5
Fixes: 34861088
parent cd812c8e
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -104,6 +104,11 @@ public class NotificationCustomViewWrapper extends NotificationViewWrapper {
        mView.setAlpha(visible ? 1.0f : 0.0f);
    }

    @Override
    protected boolean shouldClearBackgroundOnReapply() {
        return false;
    }

    @Override
    public int getCustomBackgroundColor() {
        int customBackgroundColor = super.getCustomBackgroundColor();
+7 −1
Original line number Diff line number Diff line
@@ -93,7 +93,9 @@ public abstract class NotificationViewWrapper implements TransformableView {
    public void notifyContentUpdated(StatusBarNotification notification, boolean isLowPriority) {
        mDarkInitialized = false;
        Drawable background = mView.getBackground();
        if (shouldClearBackgroundOnReapply()) {
            mBackgroundColor = 0;
        }
        if (background instanceof ColorDrawable) {
            mBackgroundColor = ((ColorDrawable) background).getColor();
            mView.setBackground(null);
@@ -101,6 +103,10 @@ public abstract class NotificationViewWrapper implements TransformableView {
        mShouldInvertDark = mBackgroundColor == 0 || isColorLight(mBackgroundColor);
    }

    protected boolean shouldClearBackgroundOnReapply() {
        return true;
    }

    private boolean isColorLight(int backgroundColor) {
        return Color.alpha(backgroundColor) == 0
                || ColorUtils.calculateLuminance(backgroundColor) > 0.5;
+20 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2017 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.
-->
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ff000000"
    />
+62 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2017 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.support.test.InstrumentationRegistry;
import android.support.test.annotation.UiThreadTest;
import android.support.test.filters.SmallTest;
import android.support.test.runner.AndroidJUnit4;
import android.view.View;
import android.widget.RemoteViews;

import com.android.systemui.R;
import com.android.systemui.statusbar.notification.NotificationCustomViewWrapper;
import com.android.systemui.statusbar.notification.NotificationViewWrapper;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

@SmallTest
@RunWith(AndroidJUnit4.class)
public class NotificationCustomViewWrapperTest {

    private Context mContext;
    private ExpandableNotificationRow mRow;

    @Before
    @UiThreadTest
    public void setUp() {
        mContext = InstrumentationRegistry.getTargetContext();
        mRow = new ExpandableNotificationRow(mContext, null);
    }

    @Test
    public void testBackgroundPersists() {
        RemoteViews views = new RemoteViews(mContext.getPackageName(), R.layout.custom_view_dark);
        View v = views.apply(mContext, null);
        NotificationViewWrapper wrap = NotificationCustomViewWrapper.wrap(mContext, v, mRow);
        wrap.notifyContentUpdated(null, false /* isLowPriority */);
        Assert.assertTrue(wrap.getCustomBackgroundColor() != 0);
        views.reapply(mContext, v);
        wrap.notifyContentUpdated(null, false /* isLowPriority */);
        Assert.assertTrue(wrap.getCustomBackgroundColor() != 0);
    }

}
 No newline at end of file