1e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler/* 2e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler * Copyright (C) 2008 The Android Open Source Project 3e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler * 4e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler * Licensed under the Apache License, Version 2.0 (the "License"); 5e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler * you may not use this file except in compliance with the License. 6e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler * You may obtain a copy of the License at 7e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler * 8e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler * http://www.apache.org/licenses/LICENSE-2.0 9e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler * 10e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler * Unless required by applicable law or agreed to in writing, software 11e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler * distributed under the License is distributed on an "AS IS" BASIS, 12e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler * See the License for the specific language governing permissions and 14e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler * limitations under the License. 15e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler */ 16e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler 17e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandlerpackage com.android.internal.widget; 18e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler 19e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandlerimport com.android.internal.R; 20e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler 21e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandlerimport android.content.BroadcastReceiver; 22e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandlerimport android.content.Context; 23e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandlerimport android.content.Intent; 24e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandlerimport android.content.IntentFilter; 25e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandlerimport android.database.ContentObserver; 26e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandlerimport android.graphics.Typeface; 27e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandlerimport android.os.Handler; 28e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandlerimport android.provider.Settings; 29e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandlerimport android.text.format.DateFormat; 30e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandlerimport android.util.AttributeSet; 31e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandlerimport android.view.View; 32e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandlerimport android.widget.LinearLayout; 33e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandlerimport android.widget.TextView; 34e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler 358b886fab5496b0b1f5193f21855220176deddc37Jim Millerimport java.lang.ref.WeakReference; 36e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandlerimport java.text.DateFormatSymbols; 37e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandlerimport java.util.Calendar; 38e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler 39e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler/** 40e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler * Displays the time 41e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler */ 42e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandlerpublic class DigitalClock extends LinearLayout { 43e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler 44e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler private final static String M12 = "h:mm"; 45e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler private final static String M24 = "kk:mm"; 46e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler 47e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler private Calendar mCalendar; 48e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler private String mFormat; 49e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler private TextView mTimeDisplay; 50e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler private AmPm mAmPm; 51e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler private ContentObserver mFormatChangeObserver; 528b886fab5496b0b1f5193f21855220176deddc37Jim Miller private int mAttached = 0; // for debugging - tells us whether attach/detach is unbalanced 53e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler 54e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler /* called by system on minute ticks */ 55e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler private final Handler mHandler = new Handler(); 568b886fab5496b0b1f5193f21855220176deddc37Jim Miller private BroadcastReceiver mIntentReceiver; 578b886fab5496b0b1f5193f21855220176deddc37Jim Miller 588b886fab5496b0b1f5193f21855220176deddc37Jim Miller private static class TimeChangedReceiver extends BroadcastReceiver { 598b886fab5496b0b1f5193f21855220176deddc37Jim Miller private WeakReference<DigitalClock> mClock; 608b886fab5496b0b1f5193f21855220176deddc37Jim Miller private Context mContext; 618b886fab5496b0b1f5193f21855220176deddc37Jim Miller 628b886fab5496b0b1f5193f21855220176deddc37Jim Miller public TimeChangedReceiver(DigitalClock clock) { 638b886fab5496b0b1f5193f21855220176deddc37Jim Miller mClock = new WeakReference<DigitalClock>(clock); 648b886fab5496b0b1f5193f21855220176deddc37Jim Miller mContext = clock.getContext(); 658b886fab5496b0b1f5193f21855220176deddc37Jim Miller } 668b886fab5496b0b1f5193f21855220176deddc37Jim Miller 678b886fab5496b0b1f5193f21855220176deddc37Jim Miller @Override 688b886fab5496b0b1f5193f21855220176deddc37Jim Miller public void onReceive(Context context, Intent intent) { 698b886fab5496b0b1f5193f21855220176deddc37Jim Miller // Post a runnable to avoid blocking the broadcast. 708b886fab5496b0b1f5193f21855220176deddc37Jim Miller final boolean timezoneChanged = 718b886fab5496b0b1f5193f21855220176deddc37Jim Miller intent.getAction().equals(Intent.ACTION_TIMEZONE_CHANGED); 728b886fab5496b0b1f5193f21855220176deddc37Jim Miller final DigitalClock clock = mClock.get(); 738b886fab5496b0b1f5193f21855220176deddc37Jim Miller if (clock != null) { 748b886fab5496b0b1f5193f21855220176deddc37Jim Miller clock.mHandler.post(new Runnable() { 758b886fab5496b0b1f5193f21855220176deddc37Jim Miller public void run() { 768b886fab5496b0b1f5193f21855220176deddc37Jim Miller if (timezoneChanged) { 778b886fab5496b0b1f5193f21855220176deddc37Jim Miller clock.mCalendar = Calendar.getInstance(); 78f60e108fa984d823aabad5b691bc248bffe5d1a5Daniel Sandler } 798b886fab5496b0b1f5193f21855220176deddc37Jim Miller clock.updateTime(); 808b886fab5496b0b1f5193f21855220176deddc37Jim Miller } 81f60e108fa984d823aabad5b691bc248bffe5d1a5Daniel Sandler }); 828b886fab5496b0b1f5193f21855220176deddc37Jim Miller } else { 8342a461570b9c5502959e429c4f16ca5ca860c4f2Jim Miller try { 8442a461570b9c5502959e429c4f16ca5ca860c4f2Jim Miller mContext.unregisterReceiver(this); 8542a461570b9c5502959e429c4f16ca5ca860c4f2Jim Miller } catch (RuntimeException e) { 8642a461570b9c5502959e429c4f16ca5ca860c4f2Jim Miller // Shouldn't happen 8742a461570b9c5502959e429c4f16ca5ca860c4f2Jim Miller } 88e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler } 898b886fab5496b0b1f5193f21855220176deddc37Jim Miller } 908b886fab5496b0b1f5193f21855220176deddc37Jim Miller }; 91e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler 92e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler static class AmPm { 93e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler private TextView mAmPm; 94e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler private String mAmString, mPmString; 95e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler 96e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler AmPm(View parent, Typeface tf) { 97e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler mAmPm = (TextView) parent.findViewById(R.id.am_pm); 98e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler if (tf != null) { 99e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler mAmPm.setTypeface(tf); 100e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler } 101e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler 102e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler String[] ampm = new DateFormatSymbols().getAmPmStrings(); 103e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler mAmString = ampm[0]; 104e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler mPmString = ampm[1]; 105e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler } 106e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler 107e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler void setShowAmPm(boolean show) { 108e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler mAmPm.setVisibility(show ? View.VISIBLE : View.GONE); 109e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler } 110e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler 111e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler void setIsMorning(boolean isMorning) { 112e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler mAmPm.setText(isMorning ? mAmString : mPmString); 113e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler } 114e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler } 115e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler 1168b886fab5496b0b1f5193f21855220176deddc37Jim Miller private static class FormatChangeObserver extends ContentObserver { 1178b886fab5496b0b1f5193f21855220176deddc37Jim Miller private WeakReference<DigitalClock> mClock; 1188b886fab5496b0b1f5193f21855220176deddc37Jim Miller private Context mContext; 1198b886fab5496b0b1f5193f21855220176deddc37Jim Miller public FormatChangeObserver(DigitalClock clock) { 120e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler super(new Handler()); 1218b886fab5496b0b1f5193f21855220176deddc37Jim Miller mClock = new WeakReference<DigitalClock>(clock); 1228b886fab5496b0b1f5193f21855220176deddc37Jim Miller mContext = clock.getContext(); 123e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler } 124e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler @Override 125e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler public void onChange(boolean selfChange) { 1268b886fab5496b0b1f5193f21855220176deddc37Jim Miller DigitalClock digitalClock = mClock.get(); 1278b886fab5496b0b1f5193f21855220176deddc37Jim Miller if (digitalClock != null) { 1288b886fab5496b0b1f5193f21855220176deddc37Jim Miller digitalClock.setDateFormat(); 1298b886fab5496b0b1f5193f21855220176deddc37Jim Miller digitalClock.updateTime(); 1308b886fab5496b0b1f5193f21855220176deddc37Jim Miller } else { 13142a461570b9c5502959e429c4f16ca5ca860c4f2Jim Miller try { 13242a461570b9c5502959e429c4f16ca5ca860c4f2Jim Miller mContext.getContentResolver().unregisterContentObserver(this); 13342a461570b9c5502959e429c4f16ca5ca860c4f2Jim Miller } catch (RuntimeException e) { 13442a461570b9c5502959e429c4f16ca5ca860c4f2Jim Miller // Shouldn't happen 13542a461570b9c5502959e429c4f16ca5ca860c4f2Jim Miller } 1368b886fab5496b0b1f5193f21855220176deddc37Jim Miller } 137e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler } 138e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler } 139e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler 140e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler public DigitalClock(Context context) { 141e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler this(context, null); 142e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler } 143e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler 144e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler public DigitalClock(Context context, AttributeSet attrs) { 145e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler super(context, attrs); 146e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler } 147e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler 148e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler @Override 149e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler protected void onFinishInflate() { 150e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler super.onFinishInflate(); 151e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler 152e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler mTimeDisplay = (TextView) findViewById(R.id.timeDisplay); 153e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler mTimeDisplay.setTypeface(Typeface.createFromFile("/system/fonts/Clockopia.ttf")); 154e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler mAmPm = new AmPm(this, Typeface.createFromFile("/system/fonts/DroidSans-Bold.ttf")); 155e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler mCalendar = Calendar.getInstance(); 156e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler 157e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler setDateFormat(); 158e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler } 159e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler 160e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler @Override 161e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler protected void onAttachedToWindow() { 162e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler super.onAttachedToWindow(); 163e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler 1648b886fab5496b0b1f5193f21855220176deddc37Jim Miller mAttached++; 165e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler 1668b886fab5496b0b1f5193f21855220176deddc37Jim Miller /* monitor time ticks, time changed, timezone */ 1678b886fab5496b0b1f5193f21855220176deddc37Jim Miller if (mIntentReceiver == null) { 1688b886fab5496b0b1f5193f21855220176deddc37Jim Miller mIntentReceiver = new TimeChangedReceiver(this); 169e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler IntentFilter filter = new IntentFilter(); 170e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler filter.addAction(Intent.ACTION_TIME_TICK); 171e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler filter.addAction(Intent.ACTION_TIME_CHANGED); 172e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler filter.addAction(Intent.ACTION_TIMEZONE_CHANGED); 173f60e108fa984d823aabad5b691bc248bffe5d1a5Daniel Sandler mContext.registerReceiver(mIntentReceiver, filter); 174e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler } 175e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler 176e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler /* monitor 12/24-hour display preference */ 1778b886fab5496b0b1f5193f21855220176deddc37Jim Miller if (mFormatChangeObserver == null) { 1788b886fab5496b0b1f5193f21855220176deddc37Jim Miller mFormatChangeObserver = new FormatChangeObserver(this); 1798b886fab5496b0b1f5193f21855220176deddc37Jim Miller mContext.getContentResolver().registerContentObserver( 1808b886fab5496b0b1f5193f21855220176deddc37Jim Miller Settings.System.CONTENT_URI, true, mFormatChangeObserver); 1818b886fab5496b0b1f5193f21855220176deddc37Jim Miller } 182e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler 183e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler updateTime(); 184e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler } 185e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler 186e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler @Override 187e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler protected void onDetachedFromWindow() { 188e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler super.onDetachedFromWindow(); 189e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler 1908b886fab5496b0b1f5193f21855220176deddc37Jim Miller mAttached--; 191e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler 1928b886fab5496b0b1f5193f21855220176deddc37Jim Miller if (mIntentReceiver != null) { 193e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler mContext.unregisterReceiver(mIntentReceiver); 194e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler } 1958b886fab5496b0b1f5193f21855220176deddc37Jim Miller if (mFormatChangeObserver != null) { 1968b886fab5496b0b1f5193f21855220176deddc37Jim Miller mContext.getContentResolver().unregisterContentObserver( 1978b886fab5496b0b1f5193f21855220176deddc37Jim Miller mFormatChangeObserver); 1988b886fab5496b0b1f5193f21855220176deddc37Jim Miller } 199e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler 2008b886fab5496b0b1f5193f21855220176deddc37Jim Miller mFormatChangeObserver = null; 2018b886fab5496b0b1f5193f21855220176deddc37Jim Miller mIntentReceiver = null; 2028b886fab5496b0b1f5193f21855220176deddc37Jim Miller } 203e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler 204e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler void updateTime(Calendar c) { 205e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler mCalendar = c; 206e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler updateTime(); 207e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler } 208e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler 209e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler private void updateTime() { 2108b886fab5496b0b1f5193f21855220176deddc37Jim Miller mCalendar.setTimeInMillis(System.currentTimeMillis()); 211e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler 212e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler CharSequence newTime = DateFormat.format(mFormat, mCalendar); 213e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler mTimeDisplay.setText(newTime); 214e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler mAmPm.setIsMorning(mCalendar.get(Calendar.AM_PM) == 0); 215e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler } 216e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler 217e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler private void setDateFormat() { 2188b886fab5496b0b1f5193f21855220176deddc37Jim Miller mFormat = android.text.format.DateFormat.is24HourFormat(getContext()) 219e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler ? M24 : M12; 220e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler mAmPm.setShowAmPm(mFormat.equals(M12)); 221e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler } 222e3ea6e3d4c8a8c2dc71f608a74ed9f6137afe63dDaniel Sandler} 223