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

Commit cea7deea authored by Lucas Dupin's avatar Lucas Dupin
Browse files

Restore KeyguardBottomAreaView state

KeyguardBottomAreaView will be re-inflated when the theme changes,
it's necessary to also restore some of its internal state, otherwise
we'll have NPEs.

Test: manual
Test: atest KeyguardBottomAreaTest
Fixes: 117121386
Change-Id: Idac8192877b65f8ad00cd60a2bb0c1ce75476cf1
parent a7998431
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -63,6 +63,7 @@ import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.FrameLayout;
import android.widget.TextView;

import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.widget.LockPatternUtils;
import com.android.keyguard.KeyguardUpdateMonitor;
@@ -228,6 +229,11 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL
        }
    };

    public void initFrom(KeyguardBottomAreaView oldBottomArea) {
        setKeyguardIndicationController(oldBottomArea.mIndicationController);
        setStatusBar(oldBottomArea.mStatusBar);
    }

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
@@ -578,7 +584,8 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL
        }
    }

    private void launchVoiceAssist() {
    @VisibleForTesting
    void launchVoiceAssist() {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
+2 −0
Original line number Diff line number Diff line
@@ -446,10 +446,12 @@ public class NotificationPanelView extends PanelView implements
        // Update keyguard bottom area
        index = indexOfChild(mKeyguardBottomArea);
        removeView(mKeyguardBottomArea);
        KeyguardBottomAreaView oldBottomArea = mKeyguardBottomArea;
        mKeyguardBottomArea = (KeyguardBottomAreaView) LayoutInflater.from(mContext).inflate(
                R.layout.keyguard_bottom_area,
                this,
                false);
        mKeyguardBottomArea.initFrom(oldBottomArea);
        addView(mKeyguardBottomArea, index);
        initBottomArea();
        setDarkAmount(mLinearDarkAmount, mInterpolatedDarkAmount);
+47 −0
Original line number Diff line number Diff line
package com.android.systemui.statusbar.phone

import android.support.test.filters.SmallTest
import android.testing.AndroidTestingRunner
import android.testing.TestableLooper
import android.view.LayoutInflater

import com.android.systemui.R
import com.android.systemui.SysuiTestCase
import com.android.systemui.statusbar.KeyguardIndicationController

import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.MockitoAnnotations

@SmallTest
@RunWith(AndroidTestingRunner::class)
@TestableLooper.RunWithLooper
class KeyguardBottomAreaTest : SysuiTestCase() {

    @Mock
    private lateinit var mStatusBar: StatusBar
    @Mock
    private lateinit var mKeyguardIndicationController: KeyguardIndicationController
    private lateinit var mKeyguardBottomArea: KeyguardBottomAreaView

    @Before
    fun setup() {
        MockitoAnnotations.initMocks(this)
        mKeyguardBottomArea = LayoutInflater.from(mContext).inflate(
                R.layout.keyguard_bottom_area, null, false) as KeyguardBottomAreaView
        mKeyguardBottomArea.setStatusBar(mStatusBar)
        mKeyguardBottomArea.setKeyguardIndicationController(mKeyguardIndicationController)
    }

    @Test
    fun initFrom_doesntCrash() {
        val other = LayoutInflater.from(mContext).inflate(
                R.layout.keyguard_bottom_area, null, false) as KeyguardBottomAreaView

        other.initFrom(mKeyguardBottomArea)
        other.launchVoiceAssist()
        other.onLongClick(null)
    }
}
 No newline at end of file