blob: 3f08cfd841a07a4ca1f2cf12c28b54f8ae572846 [file] [log] [blame]
// Copyright 2010 Google Inc. All Rights Reserved.
package com.android.internal.policy.impl;
import com.android.internal.R;
import com.android.internal.widget.LockPatternUtils;
import java.util.Date;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
import android.text.format.DateFormat;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
class StatusView {
private String mDateFormatString;
private TextView mCarrier;
private TextView mDate;
// are we showing battery information?
private boolean mShowingBatteryInfo = false;
// last known plugged in state
private boolean mPluggedIn = false;
// last known battery level
private int mBatteryLevel = 100;
private String mNextAlarm = null;
private String mInstructions = null;
private TextView mStatus1;
private TextView mStatus2;
private TextView mPropertyOf;
private boolean mHasStatus2;
private boolean mHasCarrier;
private boolean mHasDate;
private boolean mHasProperty;
private View mView;
private View findViewById(int id) {
return mView.findViewById(id);
}
private Context getContext() {
return mView.getContext();
}
void setInstructions(String instructions) {
mInstructions = instructions;
}
void setCarrierText(CharSequence carrierText) {
if (mCarrier != null) {
mCarrier.setText(carrierText);
}
}
void onRefreshBatteryInfo(boolean showBatteryInfo, boolean pluggedIn, int batteryLevel) {
mShowingBatteryInfo = showBatteryInfo;
mPluggedIn = pluggedIn;
mBatteryLevel = batteryLevel;
updateStatusLines();
}
void onTimeChanged() {
refreshTimeAndDateDisplay();
}
public void onRingerModeChanged(int state) {
}
void onRefreshCarrierInfo(CharSequence plmn, CharSequence spn) {
setCarrierText(LockScreen.getCarrierString(plmn, spn));
}
public StatusView(View view, KeyguardUpdateMonitor updateMonitor,
LockPatternUtils lockPatternUtils) {
mView = view;
mCarrier = (TextView) findViewById(R.id.carrier);
mHasCarrier = (mCarrier != null);
mDate = (TextView) findViewById(R.id.date);
mHasDate = (mDate != null);
mDateFormatString = getContext().getString(R.string.full_wday_month_day_no_year);
refreshTimeAndDateDisplay();
mStatus1 = (TextView) findViewById(R.id.status1);
mStatus2 = (TextView) findViewById(R.id.status2);
mHasStatus2 = (mStatus2 != null);
mPropertyOf = (TextView) findViewById(R.id.propertyOf);
mHasProperty = (mPropertyOf != null);
resetStatusInfo(updateMonitor, lockPatternUtils);
// Required to get Marquee to work.
if (mHasCarrier) {
mCarrier.setSelected(true);
mCarrier.setTextColor(0xffffffff);
}
}
void resetStatusInfo(KeyguardUpdateMonitor updateMonitor, LockPatternUtils lockPatternUtils) {
mInstructions = null;
mShowingBatteryInfo = updateMonitor.shouldShowBatteryInfo();
mPluggedIn = updateMonitor.isDevicePluggedIn();
mBatteryLevel = updateMonitor.getBatteryLevel();
mNextAlarm = lockPatternUtils.getNextAlarm();
updateStatusLines();
}
void setInstructionText(int stringId) {
mStatus1.setText(stringId);
mStatus1.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_lock_idle_lock, 0, 0, 0);
mStatus1.setVisibility(View.VISIBLE);
}
void setInstructionText(String string) {
mStatus1.setText(string);
mStatus1.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_lock_idle_lock, 0, 0, 0);
mStatus1.setVisibility(View.VISIBLE);
}
void setCarrierText(int stringId) {
mCarrier.setText(stringId);
}
void setCarrierText(String string) {
mCarrier.setText(string);
}
/** Originated from PatternUnlockScreen **/
void updateStatusLines() {
if (mHasProperty) {
// TODO Get actual name & email
String name = "John Smith";
String email = "jsmith@gmail.com";
mPropertyOf.setText("Property of:\n" + name + "\n" + email);
mPropertyOf.setVisibility(View.VISIBLE);
}
if (!mHasStatus2) return;
if (mInstructions != null) {
// instructions only
mStatus1.setText(mInstructions);
if (TextUtils.isEmpty(mInstructions)) {
mStatus1.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
} else {
mStatus1.setCompoundDrawablesWithIntrinsicBounds(
R.drawable.ic_lock_idle_lock, 0, 0, 0);
}
mStatus1.setVisibility(View.VISIBLE);
mStatus2.setVisibility(View.INVISIBLE);
} else if (mShowingBatteryInfo && mNextAlarm == null) {
// battery only
if (mPluggedIn) {
if (mBatteryLevel >= 100) {
mStatus1.setText(getContext().getString(R.string.lockscreen_charged));
} else {
mStatus1.setText(getContext().getString(R.string.lockscreen_plugged_in,
mBatteryLevel));
}
} else {
mStatus1.setText(getContext().getString(R.string.lockscreen_low_battery));
}
mStatus1.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_lock_idle_charging, 0,
0, 0);
mStatus1.setVisibility(View.VISIBLE);
mStatus2.setVisibility(View.INVISIBLE);
} else if (mNextAlarm != null && !mShowingBatteryInfo) {
// alarm only
mStatus1.setText(mNextAlarm);
mStatus1.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_lock_idle_alarm, 0,
0, 0);
mStatus1.setVisibility(View.VISIBLE);
mStatus2.setVisibility(View.INVISIBLE);
} else if (mNextAlarm != null && mShowingBatteryInfo) {
// both battery and next alarm
mStatus1.setText(mNextAlarm);
mStatus2.setText(getContext().getString(
R.string.lockscreen_battery_short,
Math.min(100, mBatteryLevel)));
mStatus1.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_lock_idle_alarm, 0,
0, 0);
if (mPluggedIn) {
mStatus2.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_lock_idle_charging,
0, 0, 0);
} else {
mStatus2.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
}
mStatus1.setVisibility(View.VISIBLE);
mStatus2.setVisibility(View.VISIBLE);
} else {
// nothing specific to show; show general instructions
mStatus1.setText(R.string.lockscreen_pattern_instructions);
mStatus1.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_lock_idle_lock, 0,
0, 0);
mStatus1.setVisibility(View.VISIBLE);
mStatus2.setVisibility(View.INVISIBLE);
}
}
/** Originated from LockScreen **/
// TODO Merge with function above
void updateStatusLines(boolean showStatusLines, String charging, Drawable chargingIcon,
Drawable alarmIcon) {
if (!showStatusLines || (charging == null && mNextAlarm == null)) {
mStatus1.setVisibility(View.INVISIBLE);
mStatus2.setVisibility(View.INVISIBLE);
} else if (charging != null && mNextAlarm == null) {
// charging only
mStatus1.setVisibility(View.VISIBLE);
mStatus2.setVisibility(View.INVISIBLE);
mStatus1.setText(charging);
mStatus1.setCompoundDrawablesWithIntrinsicBounds(chargingIcon, null, null, null);
} else if (mNextAlarm != null && charging == null) {
// next alarm only
mStatus1.setVisibility(View.VISIBLE);
mStatus2.setVisibility(View.INVISIBLE);
mStatus1.setText(mNextAlarm);
mStatus1.setCompoundDrawablesWithIntrinsicBounds(alarmIcon, null, null, null);
} else if (charging != null && mNextAlarm != null) {
// both charging and next alarm
mStatus1.setVisibility(View.VISIBLE);
mStatus2.setVisibility(View.VISIBLE);
mStatus1.setText(charging);
mStatus1.setCompoundDrawablesWithIntrinsicBounds(chargingIcon, null, null, null);
mStatus2.setText(mNextAlarm);
mStatus2.setCompoundDrawablesWithIntrinsicBounds(alarmIcon, null, null, null);
}
}
void refreshTimeAndDateDisplay() {
if (mHasDate) {
mDate.setText(DateFormat.format(mDateFormatString, new Date()));
}
}
}