alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Android example source code file (LockPatternKeyguardViewTest.java)

This example Android source code file (LockPatternKeyguardViewTest.java) is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Android by Example" TM.

Java - Android tags/keywords

android, androidtestcase, content, exception, google, keyguardupdatemonitor, keyguardviewcallback, keyguardwindowcontroller, list, lockpatternkeyguardviewtest, lockpatternutils, mockkeyguardcallback, mockkeyguardscreen, mocklockpatternutils, mockupdatemonitor, override, test, testablelockpatternkeyguardview, ui, view

The LockPatternKeyguardViewTest.java Android example source code

/*
 * Copyright (C) 2008 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.internal.policy.impl;

import android.content.Context;
import com.android.internal.telephony.IccCard;
import android.content.res.Configuration;
import android.test.AndroidTestCase;
import android.view.View;
import android.view.KeyEvent;
import com.android.internal.widget.LockPatternUtils;
import com.google.android.collect.Lists;

import java.util.List;

/**
 * Tests for {@link com.android.internal.policy.impl.LockPatternKeyguardView},
 * which handles the management of screens while the keyguard is showing.
 */
public class LockPatternKeyguardViewTest extends AndroidTestCase {
    private MockUpdateMonitor mUpdateMonitor;
    private LockPatternUtils mLockPatternUtils;
    private TestableLockPatternKeyguardView mLPKV;
    private MockKeyguardCallback mKeyguardViewCallback;

    private static class MockUpdateMonitor extends KeyguardUpdateMonitor {

        public IccCard.State simState = IccCard.State.READY;

        private MockUpdateMonitor(Context context) {
            super(context);
        }

        @Override
        public IccCard.State getSimState() {
            return simState;
        }
    }

    private static class MockLockPatternUtils extends LockPatternUtils {
        boolean isLockPatternEnabled = true;
        public boolean isPermanentlyLocked = false;

        public MockLockPatternUtils() {
            super(null);
        }

        @Override
        public boolean isLockPatternEnabled() {
            return isLockPatternEnabled;
        }

        @Override
        public void setLockPatternEnabled(boolean lockPatternEnabled) {
            isLockPatternEnabled = lockPatternEnabled;
        }

        @Override
        public boolean isPermanentlyLocked() {
            return isPermanentlyLocked;
        }

        public void setPermanentlyLocked(boolean permanentlyLocked) {
            isPermanentlyLocked = permanentlyLocked;
        }
    }

    private static class MockKeyguardScreen extends View implements KeyguardScreen {

        private int mOnPauseCount = 0;
        private int mOnResumeCount = 0;
        private int mCleanupCount = 0;

        private MockKeyguardScreen(Context context) {
            super(context);
            setFocusable(true);
        }

        /** {@inheritDoc} */
        public boolean needsInput() {
            return false;
        }

        /** {@inheritDoc} */
        public void onPause() {
            mOnPauseCount++;
        }

        /** {@inheritDoc} */
        public void onResume() {
            mOnResumeCount++;
        }

        /** {@inheritDoc} */
        public void cleanUp() {
            mCleanupCount++;
        }

        public int getOnPauseCount() {
            return mOnPauseCount;
        }

        public int getOnResumeCount() {
            return mOnResumeCount;
        }

        public int getCleanupCount() {
            return mCleanupCount;
        }
    }

    /**
     * Allows us to inject the lock and unlock views to simulate their behavior
     * and detect their creation.
     */
    private static class TestableLockPatternKeyguardView extends LockPatternKeyguardView {
        private List<MockKeyguardScreen> mInjectedLockScreens;
        private List<MockKeyguardScreen> mInjectedUnlockScreens;



        private TestableLockPatternKeyguardView(Context context, KeyguardUpdateMonitor updateMonitor,
                LockPatternUtils lockPatternUtils, KeyguardWindowController controller) {
            super(context, updateMonitor, lockPatternUtils, controller);
        }

        @Override
        View createLockScreen() {
            final MockKeyguardScreen newView = new MockKeyguardScreen(getContext());
            if (mInjectedLockScreens == null) mInjectedLockScreens = Lists.newArrayList();
            mInjectedLockScreens.add(newView);
            return newView;
        }

        @Override
        View createUnlockScreenFor(UnlockMode unlockMode) {
            final MockKeyguardScreen newView = new MockKeyguardScreen(getContext());
            if (mInjectedUnlockScreens == null)  mInjectedUnlockScreens = Lists.newArrayList();
            mInjectedUnlockScreens.add(newView);
            return newView;
        }

        public List<MockKeyguardScreen> getInjectedLockScreens() {
            return mInjectedLockScreens;
        }

        public List<MockKeyguardScreen> getInjectedUnlockScreens() {
            return mInjectedUnlockScreens;
        }
    }

    private static class MockKeyguardCallback implements KeyguardViewCallback {

        private int mPokeWakelockCount = 0;
        private int mKeyguardDoneCount = 0;

        public void pokeWakelock() {
            mPokeWakelockCount++;
        }

        public void pokeWakelock(int millis) {
            mPokeWakelockCount++;
        }

        public void keyguardDone(boolean authenticated) {
            mKeyguardDoneCount++;
        }

        public void keyguardDoneDrawing() {

        }

        public int getPokeWakelockCount() {
            return mPokeWakelockCount;
        }

        public int getKeyguardDoneCount() {
            return mKeyguardDoneCount;
        }
    }

    @Override
    protected void setUp() throws Exception {
        super.setUp();
        mUpdateMonitor = new MockUpdateMonitor(getContext());
        mLockPatternUtils = new MockLockPatternUtils();

        mLPKV = new TestableLockPatternKeyguardView(getContext(), mUpdateMonitor,
                mLockPatternUtils, new KeyguardWindowController() {
            public void setNeedsInput(boolean needsInput) {
            }
        });
        mKeyguardViewCallback = new MockKeyguardCallback();
        mLPKV.setCallback(mKeyguardViewCallback);
    }

    public void testStateAfterCreatedWhileScreenOff() {

        assertEquals(1, mLPKV.getInjectedLockScreens().size());
        assertEquals(1, mLPKV.getInjectedUnlockScreens().size());

        MockKeyguardScreen lockScreen = mLPKV.getInjectedLockScreens().get(0);
        MockKeyguardScreen unlockScreen = mLPKV.getInjectedUnlockScreens().get(0);

        assertEquals(0, lockScreen.getOnPauseCount());
        assertEquals(0, lockScreen.getOnResumeCount());
        assertEquals(0, lockScreen.getCleanupCount());

        assertEquals(0, unlockScreen.getOnPauseCount());
        assertEquals(0, unlockScreen.getOnResumeCount());
        assertEquals(0, unlockScreen.getCleanupCount());

        assertEquals(0, mKeyguardViewCallback.getPokeWakelockCount());
        assertEquals(0, mKeyguardViewCallback.getKeyguardDoneCount());
    }

    public void testWokenByNonMenuKey() {
        mLPKV.wakeWhenReadyTq(0);

        // should have poked the wakelock to turn on the screen
        assertEquals(1, mKeyguardViewCallback.getPokeWakelockCount());

        // shouldn't be any additional views created
        assertEquals(1, mLPKV.getInjectedLockScreens().size());
        assertEquals(1, mLPKV.getInjectedUnlockScreens().size());
        MockKeyguardScreen lockScreen = mLPKV.getInjectedLockScreens().get(0);
        MockKeyguardScreen unlockScreen = mLPKV.getInjectedUnlockScreens().get(0);

        // lock screen should be only visible one
        assertEquals(View.VISIBLE, lockScreen.getVisibility());
        assertEquals(View.GONE, unlockScreen.getVisibility());

        // on resume not called until screen turns on
        assertEquals(0, lockScreen.getOnPauseCount());
        assertEquals(0, lockScreen.getOnResumeCount());
        assertEquals(0, lockScreen.getCleanupCount());

        assertEquals(0, unlockScreen.getOnPauseCount());
        assertEquals(0, unlockScreen.getOnResumeCount());
        assertEquals(0, unlockScreen.getCleanupCount());

        // simulate screen turning on
        mLPKV.onScreenTurnedOn();

        assertEquals(0, lockScreen.getOnPauseCount());
        assertEquals(1, lockScreen.getOnResumeCount());
        assertEquals(0, lockScreen.getCleanupCount());

        assertEquals(0, unlockScreen.getOnPauseCount());
        assertEquals(0, unlockScreen.getOnResumeCount());
        assertEquals(0, unlockScreen.getCleanupCount());
    }

    public void testWokenByMenuKeyWhenPatternSet() {
        assertEquals(true, mLockPatternUtils.isLockPatternEnabled());

        mLPKV.wakeWhenReadyTq(KeyEvent.KEYCODE_MENU);

        // should have poked the wakelock to turn on the screen
        assertEquals(1, mKeyguardViewCallback.getPokeWakelockCount());

        // shouldn't be any additional views created
        assertEquals(1, mLPKV.getInjectedLockScreens().size());
        assertEquals(1, mLPKV.getInjectedUnlockScreens().size());
        MockKeyguardScreen lockScreen = mLPKV.getInjectedLockScreens().get(0);
        MockKeyguardScreen unlockScreen = mLPKV.getInjectedUnlockScreens().get(0);

        // unlock screen should be only visible one
        assertEquals(View.GONE, lockScreen.getVisibility());
        assertEquals(View.VISIBLE, unlockScreen.getVisibility());
    }

    public void testScreenRequestsRecreation() {
        mLPKV.wakeWhenReadyTq(0);
        mLPKV.onScreenTurnedOn();

        assertEquals(1, mLPKV.getInjectedLockScreens().size());
        assertEquals(1, mLPKV.getInjectedUnlockScreens().size());
        MockKeyguardScreen lockScreen = mLPKV.getInjectedLockScreens().get(0);

        assertEquals(0, lockScreen.getOnPauseCount());
        assertEquals(1, lockScreen.getOnResumeCount());

        // simulate screen asking to be recreated
        mLPKV.mKeyguardScreenCallback.recreateMe(new Configuration());

        // should have been recreated
        assertEquals(2, mLPKV.getInjectedLockScreens().size());
        assertEquals(2, mLPKV.getInjectedUnlockScreens().size());

        // both old screens should have been cleaned up
        assertEquals(1, mLPKV.getInjectedLockScreens().get(0).getCleanupCount());
        assertEquals(1, mLPKV.getInjectedUnlockScreens().get(0).getCleanupCount());

        // old lock screen should have been paused
        assertEquals(1, mLPKV.getInjectedLockScreens().get(0).getOnPauseCount());
        assertEquals(0, mLPKV.getInjectedUnlockScreens().get(0).getOnPauseCount());

        // new lock screen should have been resumed
        assertEquals(1, mLPKV.getInjectedLockScreens().get(1).getOnResumeCount());
        assertEquals(0, mLPKV.getInjectedUnlockScreens().get(1).getOnResumeCount());
    }

    public void testMenuDoesntGoToUnlockScreenOnWakeWhenPukLocked() {
        // PUK locked
        mUpdateMonitor.simState = IccCard.State.PUK_REQUIRED;

        // wake by menu
        mLPKV.wakeWhenReadyTq(KeyEvent.KEYCODE_MENU);

        assertEquals(1, mLPKV.getInjectedLockScreens().size());
        assertEquals(1, mLPKV.getInjectedUnlockScreens().size());
        MockKeyguardScreen lockScreen = mLPKV.getInjectedLockScreens().get(0);
        MockKeyguardScreen unlockScreen = mLPKV.getInjectedUnlockScreens().get(0);

        // lock screen should be only visible one
        assertEquals(View.VISIBLE, lockScreen.getVisibility());
        assertEquals(View.GONE, unlockScreen.getVisibility());
    }

    public void testMenuGoesToLockScreenWhenDeviceNotSecure() {
        mLockPatternUtils.setLockPatternEnabled(false);

        // wake by menu
        mLPKV.wakeWhenReadyTq(KeyEvent.KEYCODE_MENU);

        assertEquals(1, mLPKV.getInjectedLockScreens().size());
        assertEquals(1, mLPKV.getInjectedUnlockScreens().size());
        MockKeyguardScreen lockScreen = mLPKV.getInjectedLockScreens().get(0);
        MockKeyguardScreen unlockScreen = mLPKV.getInjectedUnlockScreens().get(0);

        // lock screen should be only visible one
        assertEquals(View.VISIBLE, lockScreen.getVisibility());
        assertEquals(View.GONE, unlockScreen.getVisibility());
    }
}

Other Android examples (source code examples)

Here is a short list of links related to this Android LockPatternKeyguardViewTest.java source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.