package com.limemobile.app.launcher.view;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.text.TextUtils;
import android.text.format.DateFormat;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.limemobile.app.launcher.wp8.R;
import java.text.DateFormatSymbols;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
public class HTCSenseTimeDateView extends RelativeLayout {
private static final String INTENT_ACTION_TIME_TICK = "android.intent.action.TIME_TICK";
private final static String M12 = "h:mm";
private final static String M24 = "kk:mm";
private Context mContext;
private Calendar mCalendar;
private String mFormat;
private HTCSenseTimeView mTimeView;
private TextView mAmPmView;
private TextView mDateView;
private TextView mWeatherTextView;
private ImageView mWeatherImgView;
private String mAmString;
private String mPmString;
private boolean mReceiverRegistered = false;
public static class HTCSenseTimeView extends TextView {
private HashMap<String, BitmapDrawable> mNumberDrawables = new HashMap<String, BitmapDrawable>();
private int mIconWidth;
private int mIconHeight;
public HTCSenseTimeView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public HTCSenseTimeView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
Context context = getContext();
BitmapDrawable drawable = new BitmapDrawable(context.getResources().openRawResource(R.drawable.time_0));
mNumberDrawables.put("0", drawable);
float density = context.getResources().getDisplayMetrics().density;
mIconWidth = (int) (drawable.getIntrinsicWidth() * density);
mIconHeight = (int) (drawable.getIntrinsicHeight() * density);
drawable = new BitmapDrawable(context.getResources().openRawResource(R.drawable.time_1));
mNumberDrawables.put("1", drawable);
drawable = new BitmapDrawable(context.getResources().openRawResource(R.drawable.time_2));
mNumberDrawables.put("2", drawable);
drawable = new BitmapDrawable(context.getResources().openRawResource(R.drawable.time_3));
mNumberDrawables.put("3", drawable);
drawable = new BitmapDrawable(context.getResources().openRawResource(R.drawable.time_4));
mNumberDrawables.put("4", drawable);
drawable = new BitmapDrawable(context.getResources().openRawResource(R.drawable.time_5));
mNumberDrawables.put("5", drawable);
drawable = new BitmapDrawable(context.getResources().openRawResource(R.drawable.time_6));
mNumberDrawables.put("6", drawable);
drawable = new BitmapDrawable(context.getResources().openRawResource(R.drawable.time_7));
mNumberDrawables.put("7", drawable);
drawable = new BitmapDrawable(context.getResources().openRawResource(R.drawable.time_8));
mNumberDrawables.put("8", drawable);
drawable = new BitmapDrawable(context.getResources().openRawResource(R.drawable.time_9));
mNumberDrawables.put("9", drawable);
}
@Override
protected void onDetachedFromWindow() {
if (!mNumberDrawables.isEmpty()) {
Set<String> keys = mNumberDrawables.keySet();
Iterator<String> iterator = keys.iterator();
while (iterator.hasNext()) {
BitmapDrawable drawable = mNumberDrawables.get(iterator.next());
if (drawable != null)
drawable.setCallback(null);
if (drawable != null && drawable.getBitmap() != null && !drawable.getBitmap().isRecycled())
drawable.getBitmap().recycle();
}
}
mNumberDrawables.clear();
super.onDetachedFromWindow();
}
@Override
protected void onDraw(Canvas canvas) {
//super.onDraw(canvas);
String mTimeString = getText().toString();
if (!TextUtils.isEmpty(mTimeString)) {
int width = getWidth();
int height = getHeight();
int length = mTimeString.length();
int left = getLeft() /*+ (width - length * mIconWidth) / 2*/;
int top = getTop() /*+ (height - mIconHeight) / 2*/;
int xOffset = 0;
for (int index = 0; index < length; ++index) {
String time = String.valueOf(mTimeString.charAt(index));
if (mNumberDrawables.containsKey(time)) {
BitmapDrawable drawable = mNumberDrawables.get(time);
Rect bounds = new Rect();
bounds.left = left + index * mIconWidth - xOffset;
bounds.top = top;
bounds.right = bounds.left + mIconWidth;
bounds.bottom = bounds.top + mIconHeight;
drawable.setBounds(bounds);
drawable.draw(canvas);
} else {
xOffset = mIconWidth * 3 / 4;
}
}
}
}
}
public HTCSenseTimeDateView(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
}
@Override
protected void onWindowVisibilityChanged(int visibility) {
if (View.VISIBLE == visibility && !mReceiverRegistered) {
mReceiverRegistered = true;
IntentFilter intentfilter = new IntentFilter();
intentfilter.addAction(INTENT_ACTION_TIME_TICK);
mContext.registerReceiver(mReceiver, intentfilter);
} else if (mReceiverRegistered) {
mReceiverRegistered = false;
mContext.unregisterReceiver(mReceiver);
}
super.onWindowVisibilityChanged(visibility);
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
mTimeView = (HTCSenseTimeView) findViewById(R.id.time);
mAmPmView = (TextView) findViewById(R.id.ampm);
mDateView = (TextView) findViewById(R.id.date);
mWeatherTextView = (TextView) findViewById(R.id.weather_text);
mWeatherImgView = (ImageView) findViewById(R.id.weather_img);
String[] ampm = new DateFormatSymbols().getAmPmStrings();
mAmString = ampm[0];
mPmString = ampm[1];
mCalendar = Calendar.getInstance();
mWeatherTextView.setVisibility(View.GONE);
mWeatherImgView.setVisibility(View.GONE);
updateTime();
}
private void setShowAmPm(boolean show) {
mAmPmView.setVisibility(show ? View.VISIBLE : View.GONE);
}
private void setIsMorning(boolean isMorning) {
mAmPmView.setText(isMorning ? mAmString : mPmString);
}
private void updateTime() {
mFormat = android.text.format.DateFormat.is24HourFormat(mContext)
? M24 : M12;
setShowAmPm(mFormat.equals(M12));
setIsMorning(mCalendar.get(Calendar.AM_PM) == 0);
mCalendar.setTimeInMillis(System.currentTimeMillis());
CharSequence newTime = DateFormat.format(mFormat, mCalendar);
mTimeView.setText(newTime.toString());
mDateView.setText(DateFormat.format("MMMM dd EEEE", new Date()));
//mDateView.setText(DateFormat.format("MMMM dd EEEE yyyy", new Date()));
invalidate();
}
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(INTENT_ACTION_TIME_TICK)) {
updateTime();
}
}
};
}