KeyguardStatusView.java revision 38ab277ad478b1c858a852ba900ec0cd85fe2d2d
1/* 2 * Copyright (C) 2012 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.keyguard; 18 19import android.content.Context; 20import android.text.TextUtils; 21import android.text.format.DateFormat; 22import android.util.AttributeSet; 23import android.util.Log; 24import android.util.Slog; 25import android.view.View; 26import android.widget.GridLayout; 27import android.widget.TextClock; 28import android.widget.TextView; 29 30import com.android.internal.widget.LockPatternUtils; 31 32import java.util.Locale; 33 34public class KeyguardStatusView extends GridLayout { 35 private static final boolean DEBUG = KeyguardViewMediator.DEBUG; 36 private static final String TAG = "KeyguardStatusView"; 37 38 private LockPatternUtils mLockPatternUtils; 39 40 private TextView mAlarmStatusView; 41 private TextClock mDateView; 42 43 private KeyguardUpdateMonitorCallback mInfoCallback = new KeyguardUpdateMonitorCallback() { 44 45 @Override 46 public void onTimeChanged() { 47 refresh(); 48 } 49 50 @Override 51 void onKeyguardVisibilityChanged(boolean showing) { 52 if (showing) { 53 if (DEBUG) Slog.v(TAG, "refresh statusview showing:" + showing); 54 refresh(); 55 } 56 }; 57 58 @Override 59 public void onScreenTurnedOn() { 60 setEnableMarquee(true); 61 }; 62 63 @Override 64 public void onScreenTurnedOff(int why) { 65 setEnableMarquee(false); 66 }; 67 }; 68 69 public KeyguardStatusView(Context context) { 70 this(context, null, 0); 71 } 72 73 public KeyguardStatusView(Context context, AttributeSet attrs) { 74 this(context, attrs, 0); 75 } 76 77 public KeyguardStatusView(Context context, AttributeSet attrs, int defStyle) { 78 super(context, attrs, defStyle); 79 } 80 81 private void setEnableMarquee(boolean enabled) { 82 if (DEBUG) Log.v(TAG, (enabled ? "Enable" : "Disable") + " transport text marquee"); 83 if (mAlarmStatusView != null) mAlarmStatusView.setSelected(enabled); 84 } 85 86 @Override 87 protected void onFinishInflate() { 88 super.onFinishInflate(); 89 mAlarmStatusView = (TextView) findViewById(R.id.alarm_status); 90 mDateView = (TextClock) findViewById(R.id.date_view); 91 mLockPatternUtils = new LockPatternUtils(getContext()); 92 final boolean screenOn = KeyguardUpdateMonitor.getInstance(mContext).isScreenOn(); 93 setEnableMarquee(screenOn); 94 refresh(); 95 } 96 97 protected void refresh() { 98 final String fmt = DateFormat.getBestDateTimePattern(Locale.getDefault(), 99 mContext.getResources().getString(R.string.abbrev_wday_month_day_no_year)); 100 mDateView.setFormat24Hour(fmt); 101 mDateView.setFormat12Hour(fmt); 102 refreshAlarmStatus(); 103 } 104 105 void refreshAlarmStatus() { 106 // Update Alarm status 107 String nextAlarm = mLockPatternUtils.getNextAlarm(); 108 if (!TextUtils.isEmpty(nextAlarm)) { 109 mAlarmStatusView.setText(nextAlarm); 110 mAlarmStatusView.setVisibility(View.VISIBLE); 111 } else { 112 mAlarmStatusView.setVisibility(View.GONE); 113 } 114 } 115 116 @Override 117 protected void onAttachedToWindow() { 118 super.onAttachedToWindow(); 119 KeyguardUpdateMonitor.getInstance(mContext).registerCallback(mInfoCallback); 120 } 121 122 @Override 123 protected void onDetachedFromWindow() { 124 super.onDetachedFromWindow(); 125 KeyguardUpdateMonitor.getInstance(mContext).removeCallback(mInfoCallback); 126 } 127 128 public int getAppWidgetId() { 129 return LockPatternUtils.ID_DEFAULT_STATUS_WIDGET; 130 } 131 132} 133