FileDocCategorySizeDatePackage
KeyguardViewBase.javaAPI DocAndroid 1.5 API7968Wed May 06 22:42:06 BST 2009com.android.internal.policy.impl

KeyguardViewBase

public abstract class KeyguardViewBase extends android.widget.FrameLayout
Base class for keyguard views. {@link #reset} is where you should reset the state of your view. Use the {@link KeyguardViewCallback} via {@link #getCallback()} to send information back (such as poking the wake lock, or finishing the keyguard). Handles intercepting of media keys that still work when the keyguard is showing.

Fields Summary
private KeyguardViewCallback
mCallback
private android.media.AudioManager
mAudioManager
private android.telephony.TelephonyManager
mTelephonyManager
Constructors Summary
public KeyguardViewBase(android.content.Context context)


       
        super(context);

        // drop shadow below status bar in keyguard too
        mForegroundInPadding = false;
        setForegroundGravity(Gravity.FILL_HORIZONTAL | Gravity.TOP);
        setForeground(
                context.getResources().getDrawable(
                        com.android.internal.R.drawable.title_bar_shadow));
    
Methods Summary
public abstract voidcleanUp()
Called before this view is being removed.

public booleandispatchKeyEvent(android.view.KeyEvent event)

        if (shouldEventKeepScreenOnWhileKeyguardShowing(event)) {
            mCallback.pokeWakelock();
        }

        if (interceptMediaKey(event)) {
            return true;
        }
        return super.dispatchKeyEvent(event);
    
public KeyguardViewCallbackgetCallback()

        return mCallback;
    
private booleaninterceptMediaKey(android.view.KeyEvent event)
Allows the media keys to work when the keygaurd is showing. The media keys should be of no interest to the actualy keygaurd view(s), so intercepting them here should not be of any harm.

param
event The key event
return
whether the event was consumed as a media key.

        final int keyCode = event.getKeyCode();
        if (event.getAction() == KeyEvent.ACTION_DOWN) {
            switch (keyCode) {
                case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
                    /* Suppress PLAYPAUSE toggle when phone is ringing or
                     * in-call to avoid music playback */
                    if (mTelephonyManager == null) {
                        mTelephonyManager = (TelephonyManager) getContext().getSystemService(
                                Context.TELEPHONY_SERVICE);
                    }
                    if (mTelephonyManager != null &&
                            mTelephonyManager.getCallState() != TelephonyManager.CALL_STATE_IDLE) {
                        return true;  // suppress key event
                    }
                case KeyEvent.KEYCODE_HEADSETHOOK: 
                case KeyEvent.KEYCODE_MEDIA_STOP: 
                case KeyEvent.KEYCODE_MEDIA_NEXT: 
                case KeyEvent.KEYCODE_MEDIA_PREVIOUS: 
                case KeyEvent.KEYCODE_MEDIA_REWIND: 
                case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD: {
                    Intent intent = new Intent(Intent.ACTION_MEDIA_BUTTON, null);
                    intent.putExtra(Intent.EXTRA_KEY_EVENT, event);
                    getContext().sendOrderedBroadcast(intent, null);
                    return true;
                }

                case KeyEvent.KEYCODE_VOLUME_UP:
                case KeyEvent.KEYCODE_VOLUME_DOWN: {
                    synchronized (this) {
                        if (mAudioManager == null) {
                            mAudioManager = (AudioManager) getContext().getSystemService(
                                    Context.AUDIO_SERVICE);
                        }
                    }
                    // Volume buttons should only function for music.
                    if (mAudioManager.isMusicActive()) {
                        mAudioManager.adjustStreamVolume(
                                    AudioManager.STREAM_MUSIC,
                                    keyCode == KeyEvent.KEYCODE_VOLUME_UP
                                            ? AudioManager.ADJUST_RAISE
                                            : AudioManager.ADJUST_LOWER,
                                    0);
                    }
                    // Don't execute default volume behavior
                    return true;
                }
            }
        } else if (event.getAction() == KeyEvent.ACTION_UP) {
            switch (keyCode) {
                case KeyEvent.KEYCODE_MUTE:
                case KeyEvent.KEYCODE_HEADSETHOOK: 
                case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE: 
                case KeyEvent.KEYCODE_MEDIA_STOP: 
                case KeyEvent.KEYCODE_MEDIA_NEXT: 
                case KeyEvent.KEYCODE_MEDIA_PREVIOUS: 
                case KeyEvent.KEYCODE_MEDIA_REWIND: 
                case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD: {
                    Intent intent = new Intent(Intent.ACTION_MEDIA_BUTTON, null);
                    intent.putExtra(Intent.EXTRA_KEY_EVENT, event);
                    getContext().sendOrderedBroadcast(intent, null);
                    return true;
                }
            }
        }
        return false;
    
public abstract voidonScreenTurnedOff()
Called when the screen turned off.

public abstract voidonScreenTurnedOn()
Called when the screen turned on.

public abstract voidreset()
Called when you need to reset the state of your view.

voidsetCallback(KeyguardViewCallback callback)

        mCallback = callback;
    
private booleanshouldEventKeepScreenOnWhileKeyguardShowing(android.view.KeyEvent event)

        if (event.getAction() != KeyEvent.ACTION_DOWN) {
            return false;
        }
        switch (event.getKeyCode()) {
            case KeyEvent.KEYCODE_DPAD_DOWN:
            case KeyEvent.KEYCODE_DPAD_LEFT:
            case KeyEvent.KEYCODE_DPAD_RIGHT:
            case KeyEvent.KEYCODE_DPAD_UP:
                return false;
            default:
                return true;
        }
    
public abstract voidverifyUnlock()
Verify that the user can get past the keyguard securely. This is called, for example, when the phone disables the keyguard but then wants to launch something else that requires secure access. The result will be propogated back via {@link KeyguardViewCallback#keyguardDone(boolean)}

public abstract voidwakeWhenReadyTq(int keyCode)
Called when a key has woken the device to give us a chance to adjust our state according the the key. We are responsible for waking the device (by poking the wake lock) once we are ready. The 'Tq' suffix is per the documentation in {@link android.view.WindowManagerPolicy}. Be sure not to take any action that takes a long time; any significant action should be posted to a handler.

param
keyCode The wake key, which may be relevant for configuring the keyguard.