diff options
author | Adrian Roos <roosa@google.com> | 2016-10-20 15:34:23 -0700 |
---|---|---|
committer | Adrian Roos <roosa@google.com> | 2016-10-21 16:48:55 +0000 |
commit | 154b9ee638d1917f064781b5e08823898a73b92c (patch) | |
tree | cd2e368c23b322ebfaf0a637b5370cc461df62e4 | |
parent | b4d876a5d61852892ed030e2bcb36ef0ebf6df68 (diff) |
Fix broken KeyguardMessageArea
Fixes a bug where the keyguard message area would reorder clears
after a new message was set, leading to the bouncer prompt reason
not showing.
Change-Id: I33001300d9175c521809cd4fdae5158269245c00
Fixes: 32306174
Test: runtest -x $T/frameworks/base/packages/SystemUI/tests/src/com/android/keyguard/KeyguardMessageAreaTest.java
-rw-r--r-- | packages/Keyguard/src/com/android/keyguard/KeyguardMessageArea.java | 22 | ||||
-rw-r--r-- | packages/SystemUI/tests/src/com/android/keyguard/KeyguardMessageAreaTest.java | 68 |
2 files changed, 76 insertions, 14 deletions
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardMessageArea.java b/packages/Keyguard/src/com/android/keyguard/KeyguardMessageArea.java index caeb74c1c6e4..d19821fb9723 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardMessageArea.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardMessageArea.java @@ -41,21 +41,12 @@ class KeyguardMessageArea extends TextView implements SecurityMessageDisplay { private static final long ANNOUNCEMENT_DELAY = 250; private static final int DEFAULT_COLOR = -1; - private final KeyguardUpdateMonitor mUpdateMonitor; private final Handler mHandler; private final int mDefaultColor; - CharSequence mMessage; + private CharSequence mMessage; private int mNextMessageColor = DEFAULT_COLOR; - private final Runnable mClearMessageRunnable = new Runnable() { - @Override - public void run() { - mMessage = null; - update(); - } - }; - private KeyguardUpdateMonitorCallback mInfoCallback = new KeyguardUpdateMonitorCallback() { public void onFinishedGoingToSleep(int why) { setSelected(false); @@ -70,11 +61,14 @@ class KeyguardMessageArea extends TextView implements SecurityMessageDisplay { } public KeyguardMessageArea(Context context, AttributeSet attrs) { + this(context, attrs, KeyguardUpdateMonitor.getInstance(context)); + } + + public KeyguardMessageArea(Context context, AttributeSet attrs, KeyguardUpdateMonitor monitor) { super(context, attrs); setLayerType(LAYER_TYPE_HARDWARE, null); // work around nested unclipped SaveLayer bug - mUpdateMonitor = KeyguardUpdateMonitor.getInstance(getContext()); - mUpdateMonitor.registerCallback(mInfoCallback); + monitor.registerCallback(mInfoCallback); mHandler = new Handler(Looper.myLooper()); mDefaultColor = getCurrentTextColor(); @@ -137,8 +131,8 @@ class KeyguardMessageArea extends TextView implements SecurityMessageDisplay { } private void clearMessage() { - mHandler.removeCallbacks(mClearMessageRunnable); - mHandler.post(mClearMessageRunnable); + mMessage = null; + update(); } private void update() { diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardMessageAreaTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardMessageAreaTest.java new file mode 100644 index 000000000000..fccb2a240660 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardMessageAreaTest.java @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2016 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.keyguard; + +import com.android.systemui.SysuiTestCase; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +import android.content.Context; +import android.os.Handler; +import android.os.Looper; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; +import android.test.suitebuilder.annotation.SmallTest; + +import static junit.framework.Assert.*; +import static org.mockito.Mockito.mock; + +@SmallTest +@RunWith(AndroidJUnit4.class) +public class KeyguardMessageAreaTest extends SysuiTestCase { + private Context mContext = InstrumentationRegistry.getTargetContext(); + private Handler mHandler = new Handler(Looper.getMainLooper()); + private KeyguardMessageArea mMessageArea; + + @Before + public void setUp() throws Exception { + KeyguardUpdateMonitor monitor = mock(KeyguardUpdateMonitor.class); + mHandler.post(()-> mMessageArea = new KeyguardMessageArea(mContext, null, monitor)); + waitForIdleSync(); + } + + @Test + public void clearFollowedByMessage_keepsMessage() { + mHandler.post(()-> { + mMessageArea.setMessage(""); + mMessageArea.setMessage("test"); + }); + + waitForIdleSync(); + + CharSequence[] messageText = new CharSequence[1]; + mHandler.post(()-> { + messageText[0] = mMessageArea.getText(); + }); + + waitForIdleSync(); + + assertEquals("test", messageText[0]); + } + +} |