diff options
-rw-r--r-- | core/java/com/android/internal/widget/DigitalClock.java | 186 | ||||
-rw-r--r-- | core/res/res/layout/keyguard_screen_tab_unlock.xml | 69 | ||||
-rw-r--r-- | core/res/res/layout/keyguard_screen_tab_unlock_land.xml | 60 | ||||
-rw-r--r-- | core/res/res/layout/keyguard_screen_unlock_landscape.xml | 93 | ||||
-rw-r--r-- | core/res/res/layout/keyguard_screen_unlock_portrait.xml | 95 | ||||
-rw-r--r-- | data/fonts/Android.mk | 3 | ||||
-rw-r--r-- | data/fonts/Clockopia.ttf | bin | 0 -> 6880 bytes |
7 files changed, 378 insertions, 128 deletions
diff --git a/core/java/com/android/internal/widget/DigitalClock.java b/core/java/com/android/internal/widget/DigitalClock.java new file mode 100644 index 000000000000..ca71722de36b --- /dev/null +++ b/core/java/com/android/internal/widget/DigitalClock.java @@ -0,0 +1,186 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.internal.widget; + +import com.android.internal.R; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.res.Resources; +import android.database.ContentObserver; +import android.graphics.Typeface; +import android.os.Handler; +import android.provider.Settings; +import android.text.format.DateFormat; +import android.util.AttributeSet; +import android.view.View; +import android.widget.LinearLayout; +import android.widget.TextView; + +import java.text.DateFormatSymbols; +import java.util.Calendar; + +/** + * Displays the time + */ +public class DigitalClock extends LinearLayout { + + private final static String M12 = "h:mm"; + private final static String M24 = "kk:mm"; + + private Calendar mCalendar; + private String mFormat; + private TextView mTimeDisplay; + private AmPm mAmPm; + private ContentObserver mFormatChangeObserver; + private boolean mLive = true; + private boolean mAttached; + + /* called by system on minute ticks */ + private final Handler mHandler = new Handler(); + private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + if (mLive && intent.getAction().equals( + Intent.ACTION_TIMEZONE_CHANGED)) { + mCalendar = Calendar.getInstance(); + } + updateTime(); + } + }; + + static class AmPm { + private TextView mAmPm; + private String mAmString, mPmString; + + AmPm(View parent, Typeface tf) { + mAmPm = (TextView) parent.findViewById(R.id.am_pm); + if (tf != null) { + mAmPm.setTypeface(tf); + } + + String[] ampm = new DateFormatSymbols().getAmPmStrings(); + mAmString = ampm[0]; + mPmString = ampm[1]; + } + + void setShowAmPm(boolean show) { + mAmPm.setVisibility(show ? View.VISIBLE : View.GONE); + } + + void setIsMorning(boolean isMorning) { + mAmPm.setText(isMorning ? mAmString : mPmString); + } + } + + private class FormatChangeObserver extends ContentObserver { + public FormatChangeObserver() { + super(new Handler()); + } + @Override + public void onChange(boolean selfChange) { + setDateFormat(); + updateTime(); + } + } + + public DigitalClock(Context context) { + this(context, null); + } + + public DigitalClock(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + protected void onFinishInflate() { + super.onFinishInflate(); + + mTimeDisplay = (TextView) findViewById(R.id.timeDisplay); + mTimeDisplay.setTypeface(Typeface.createFromFile("/system/fonts/Clockopia.ttf")); + mAmPm = new AmPm(this, Typeface.createFromFile("/system/fonts/DroidSans-Bold.ttf")); + mCalendar = Calendar.getInstance(); + + setDateFormat(); + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + + if (mAttached) return; + mAttached = true; + + if (mLive) { + /* monitor time ticks, time changed, timezone */ + IntentFilter filter = new IntentFilter(); + filter.addAction(Intent.ACTION_TIME_TICK); + filter.addAction(Intent.ACTION_TIME_CHANGED); + filter.addAction(Intent.ACTION_TIMEZONE_CHANGED); + mContext.registerReceiver(mIntentReceiver, filter, null, mHandler); + } + + /* monitor 12/24-hour display preference */ + mFormatChangeObserver = new FormatChangeObserver(); + mContext.getContentResolver().registerContentObserver( + Settings.System.CONTENT_URI, true, mFormatChangeObserver); + + updateTime(); + } + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + + if (!mAttached) return; + mAttached = false; + + if (mLive) { + mContext.unregisterReceiver(mIntentReceiver); + } + mContext.getContentResolver().unregisterContentObserver( + mFormatChangeObserver); + } + + + void updateTime(Calendar c) { + mCalendar = c; + updateTime(); + } + + private void updateTime() { + if (mLive) { + mCalendar.setTimeInMillis(System.currentTimeMillis()); + } + + CharSequence newTime = DateFormat.format(mFormat, mCalendar); + mTimeDisplay.setText(newTime); + mAmPm.setIsMorning(mCalendar.get(Calendar.AM_PM) == 0); + } + + private void setDateFormat() { + mFormat = android.text.format.DateFormat.is24HourFormat(getContext()) + ? M24 : M12; + mAmPm.setShowAmPm(mFormat.equals(M12)); + } + + void setLive(boolean live) { + mLive = live; + } +} diff --git a/core/res/res/layout/keyguard_screen_tab_unlock.xml b/core/res/res/layout/keyguard_screen_tab_unlock.xml index 84b575148440..6f7010eb7041 100644 --- a/core/res/res/layout/keyguard_screen_tab_unlock.xml +++ b/core/res/res/layout/keyguard_screen_tab_unlock.xml @@ -38,58 +38,80 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" - android:layout_marginTop="20dip" + android:layout_alignParentRight="true" + android:layout_marginTop="16dip" + android:layout_marginRight="16dip" android:textAppearance="?android:attr/textAppearanceMedium" - android:textColor="?android:attr/textColorSecondary" /> - <TextView - android:id="@+id/time" + <!-- time and date --> + <com.android.internal.widget.DigitalClock android:id="@+id/time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/carrier" - android:layout_marginTop="25dip" - android:textAppearance="?android:attr/textAppearanceLarge" - android:textSize="55sp" - /> + android:layout_marginBottom="8dip" + android:layout_marginTop="16dip" + android:layout_marginLeft="24dip" + > + + <TextView android:id="@+id/timeDisplay" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="bottom" + android:textSize="72sp" + android:textAppearance="?android:attr/textAppearanceMedium" + android:shadowColor="#C0000000" + android:shadowDx="0" + android:shadowDy="0" + android:shadowRadius="3.0" + /> + + + <TextView android:id="@+id/am_pm" + android:layout_width="wrap_content" + android:layout_height="fill_parent" + android:gravity="bottom" + android:textSize="22sp" + android:singleLine="true" + android:layout_marginLeft="8dip" + android:layout_marginBottom="-6dip" + android:textAppearance="?android:attr/textAppearanceMedium" + android:shadowColor="#C0000000" + android:shadowDx="0" + android:shadowDy="0" + android:shadowRadius="3.0" + /> + + </com.android.internal.widget.DigitalClock> <TextView android:id="@+id/date" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/time" - android:layout_marginTop="-12dip" + android:layout_marginLeft="24dip" android:textAppearance="?android:attr/textAppearanceMedium" /> - <View - android:id="@+id/divider" - android:layout_width="fill_parent" - android:layout_height="1dip" - android:layout_marginTop="10dip" - android:layout_below="@id/date" - android:background="@android:drawable/divider_horizontal_dark" - /> - <TextView android:id="@+id/status1" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_below="@id/divider" + android:layout_below="@id/date" android:layout_marginTop="6dip" + android:layout_marginLeft="24dip" android:textAppearance="?android:attr/textAppearanceMedium" - android:textColor="?android:attr/textColorSecondary" android:drawablePadding="4dip" /> - + <TextView android:id="@+id/status2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/status1" android:layout_marginTop="6dip" + android:layout_marginLeft="24dip" android:textAppearance="?android:attr/textAppearanceMedium" - android:textColor="?android:attr/textColorSecondary" android:drawablePadding="4dip" /> @@ -98,9 +120,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/status2" + android:layout_marginLeft="24dip" android:textAppearance="?android:attr/textAppearanceMedium" - android:textColor="?android:attr/textColorSecondary" - android:gravity="center" android:layout_marginTop="12dip" /> diff --git a/core/res/res/layout/keyguard_screen_tab_unlock_land.xml b/core/res/res/layout/keyguard_screen_tab_unlock_land.xml index b80806bfb880..a9edb6bf0ef3 100644 --- a/core/res/res/layout/keyguard_screen_tab_unlock_land.xml +++ b/core/res/res/layout/keyguard_screen_tab_unlock_land.xml @@ -33,7 +33,8 @@ android:layout_width="0dip" android:layout_height="fill_parent" android:layout_weight="1.0" - android:gravity="center_horizontal"> + android:layout_marginLeft="24dip" + android:gravity="left"> <TextView android:id="@+id/carrier" @@ -42,45 +43,62 @@ android:layout_alignParentTop="true" android:layout_marginTop="20dip" android:textAppearance="?android:attr/textAppearanceMedium" - android:textColor="?android:attr/textColorSecondary" /> - <TextView - android:id="@+id/time" + <com.android.internal.widget.DigitalClock android:id="@+id/time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/carrier" - android:layout_marginTop="25dip" - android:textAppearance="?android:attr/textAppearanceLarge" - android:textSize="55sp" - /> + android:layout_marginBottom="8dip" + android:layout_marginTop="56dip" + > + + <TextView android:id="@+id/timeDisplay" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="bottom" + android:textSize="72sp" + android:textAppearance="?android:attr/textAppearanceMedium" + android:shadowColor="#C0000000" + android:shadowDx="0" + android:shadowDy="0" + android:shadowRadius="3.0" + /> + + + <TextView android:id="@+id/am_pm" + android:layout_width="wrap_content" + android:layout_height="fill_parent" + android:gravity="bottom" + android:textSize="22sp" + android:singleLine="true" + android:layout_marginLeft="8dip" + android:layout_marginBottom="-6dip" + android:textAppearance="?android:attr/textAppearanceMedium" + android:shadowColor="#C0000000" + android:shadowDx="0" + android:shadowDy="0" + android:shadowRadius="3.0" + /> + + </com.android.internal.widget.DigitalClock> <TextView android:id="@+id/date" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/time" - android:layout_marginTop="-12dip" + android:layout_marginTop="6dip" android:textAppearance="?android:attr/textAppearanceMedium" /> - <View - android:id="@+id/divider" - android:layout_width="fill_parent" - android:layout_height="1dip" - android:layout_marginTop="10dip" - android:layout_below="@id/date" - android:background="@android:drawable/divider_horizontal_dark" - /> - <TextView android:id="@+id/status1" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_below="@id/divider" + android:layout_below="@id/date" android:layout_marginTop="6dip" android:textAppearance="?android:attr/textAppearanceMedium" - android:textColor="?android:attr/textColorSecondary" android:drawablePadding="4dip" /> @@ -91,7 +109,6 @@ android:layout_below="@id/status1" android:layout_marginTop="6dip" android:textAppearance="?android:attr/textAppearanceMedium" - android:textColor="?android:attr/textColorSecondary" android:drawablePadding="4dip" /> @@ -101,7 +118,6 @@ android:layout_height="wrap_content" android:layout_below="@id/status2" android:textAppearance="?android:attr/textAppearanceMedium" - android:textColor="?android:attr/textColorSecondary" android:gravity="center" android:layout_marginTop="12dip" /> diff --git a/core/res/res/layout/keyguard_screen_unlock_landscape.xml b/core/res/res/layout/keyguard_screen_unlock_landscape.xml index 3e00ae8e14e1..6da82e9fa032 100644 --- a/core/res/res/layout/keyguard_screen_unlock_landscape.xml +++ b/core/res/res/layout/keyguard_screen_unlock_landscape.xml @@ -35,56 +35,73 @@ android:layout_width="0dip" android:layout_height="fill_parent" android:layout_weight="1.0" - android:gravity="center_horizontal" + android:layout_marginLeft="24dip" + android:gravity="left" > <TextView - android:id="@+id/carrier" + android:id="@+id/status1" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="5dip" + android:layout_marginTop="16dip" android:textAppearance="?android:attr/textAppearanceMedium" - android:textColor="?android:attr/textColorSecondary" /> + <TextView - android:id="@+id/centerDot" - android:visibility="gone" + android:id="@+id/carrier" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginLeft="5dip" - android:layout_marginRight="5dip" android:textAppearance="?android:attr/textAppearanceMedium" - android:textColor="?android:attr/textColorSecondary" android:textSize="17sp" + android:drawablePadding="4dip" + android:layout_marginTop="32dip" /> - <TextView - android:id="@+id/time" + <com.android.internal.widget.DigitalClock android:id="@+id/time" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_centerHorizontal="true" - android:layout_marginTop="5dip" - android:textAppearance="?android:attr/textAppearanceLarge" - android:textSize="35sp" - /> + android:layout_alignParentTop="true" + android:layout_alignParentLeft="true" + android:layout_marginBottom="8dip" + android:layout_marginTop="8dip" + > + + <TextView android:id="@+id/timeDisplay" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="bottom" + android:textSize="72sp" + android:textAppearance="?android:attr/textAppearanceMedium" + android:shadowColor="#C0000000" + android:shadowDx="0" + android:shadowDy="0" + android:shadowRadius="3.0" + /> + + + <TextView android:id="@+id/am_pm" + android:layout_width="wrap_content" + android:layout_height="fill_parent" + android:gravity="bottom" + android:textSize="22sp" + android:singleLine="true" + android:layout_marginLeft="8dip" + android:layout_marginBottom="-6dip" + android:textAppearance="?android:attr/textAppearanceMedium" + android:shadowColor="#C0000000" + android:shadowDx="0" + android:shadowDy="0" + android:shadowRadius="3.0" + /> + + </com.android.internal.widget.DigitalClock> + <TextView android:id="@+id/date" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_alignParentTop="true" - android:layout_marginTop="-12dip" + android:layout_below="@id/time" android:textAppearance="?android:attr/textAppearanceMedium" - android:textColor="?android:attr/textColorSecondary" - android:textSize="17sp" /> - - <View - android:id="@+id/divider" - android:layout_width="fill_parent" - android:layout_height="1dip" - android:layout_centerHorizontal="true" - android:background="@android:drawable/divider_horizontal_dark" - /> - <!-- used for instructions such as "draw pattern to unlock", the next alarm, and charging status. --> <LinearLayout @@ -95,22 +112,12 @@ android:gravity="center" > <TextView - android:id="@+id/status1" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:textAppearance="?android:attr/textAppearanceMedium" - android:textColor="?android:attr/textColorSecondary" - android:textSize="17sp" - android:drawablePadding="4dip" - /> - <TextView android:id="@+id/statusSep" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dip" android:layout_marginRight="5dip" android:textAppearance="?android:attr/textAppearanceMedium" - android:textColor="?android:attr/textColorSecondary" android:textSize="17sp" /> <TextView @@ -119,7 +126,6 @@ android:layout_height="wrap_content" android:layout_alignParentTop="true" android:textAppearance="?android:attr/textAppearanceMedium" - android:textColor="?android:attr/textColorSecondary" android:textSize="17sp" android:drawablePadding="4dip" /> @@ -136,13 +142,14 @@ <FrameLayout android:layout_width="fill_parent" android:layout_height="wrap_content" + android:layout_marginBottom="16dip" > <!-- option 1: a single emergency call button --> <RelativeLayout android:id="@+id/footerNormal" android:layout_width="fill_parent" android:layout_height="wrap_content" - android:gravity="center" + android:gravity="left" > <Button android:id="@+id/emergencyCallAlone" android:layout_width="wrap_content" @@ -162,7 +169,7 @@ android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" - android:gravity="center" + android:gravity="left" > <Button android:id="@+id/forgotPattern" android:layout_width="fill_parent" @@ -193,4 +200,4 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" /> -</com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient>
\ No newline at end of file +</com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient> diff --git a/core/res/res/layout/keyguard_screen_unlock_portrait.xml b/core/res/res/layout/keyguard_screen_unlock_portrait.xml index 0525356748de..2856794745df 100644 --- a/core/res/res/layout/keyguard_screen_unlock_portrait.xml +++ b/core/res/res/layout/keyguard_screen_unlock_portrait.xml @@ -27,78 +27,99 @@ android:layout_height="fill_parent" android:gravity="center_horizontal" android:background="#70000000" - > + > - <LinearLayout - android:id="@+id/carrierAndDate" - android:orientation="horizontal" - android:layout_width="wrap_content" + <RelativeLayout + android:layout_width="fill_parent" android:layout_height="wrap_content" - android:layout_marginTop="13dip" > <TextView android:id="@+id/carrier" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_alignParentTop="true" + android:layout_alignParentRight="true" + android:layout_marginTop="16dip" + android:layout_marginRight="16dip" android:textAppearance="?android:attr/textAppearanceMedium" - android:textColor="?android:attr/textColorSecondary" - android:textSize="17sp" /> - <TextView - android:id="@+id/centerDot" + + <com.android.internal.widget.DigitalClock android:id="@+id/time" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginLeft="5dip" - android:layout_marginRight="5dip" - android:textAppearance="?android:attr/textAppearanceMedium" - android:textColor="?android:attr/textColorSecondary" - android:textSize="17sp" - /> + android:layout_alignParentTop="true" + android:layout_alignParentLeft="true" + android:layout_marginBottom="8dip" + android:layout_marginTop="16dip" + android:layout_marginLeft="24dip" + > + + <TextView android:id="@+id/timeDisplay" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="bottom" + android:textSize="72sp" + android:textAppearance="?android:attr/textAppearanceMedium" + android:shadowColor="#C0000000" + android:shadowDx="0" + android:shadowDy="0" + android:shadowRadius="3.0" + /> + + + <TextView android:id="@+id/am_pm" + android:layout_width="wrap_content" + android:layout_height="fill_parent" + android:gravity="bottom" + android:textSize="22sp" + android:singleLine="true" + android:layout_marginLeft="8dip" + android:layout_marginBottom="-6dip" + android:textAppearance="?android:attr/textAppearanceMedium" + android:shadowColor="#C0000000" + android:shadowDx="0" + android:shadowDy="0" + android:shadowRadius="3.0" + /> + + </com.android.internal.widget.DigitalClock> + <TextView android:id="@+id/date" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_alignParentTop="true" + android:layout_below="@id/time" + android:layout_marginLeft="24dip" android:textAppearance="?android:attr/textAppearanceMedium" - android:textColor="?android:attr/textColorSecondary" - android:textSize="17sp" /> - </LinearLayout> - - <TextView - android:id="@+id/time" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_centerHorizontal="true" - android:layout_marginTop="-9dip" - android:textAppearance="?android:attr/textAppearanceLarge" - android:textSize="48sp" - /> + + </RelativeLayout> <View android:id="@+id/divider" + android:layout_below="@id/date" android:layout_width="fill_parent" android:layout_height="1dip" - android:layout_marginTop="-4dip" - android:layout_centerHorizontal="true" + android:layout_marginTop="8dip" + android:layout_marginBottom="8dip" android:background="@android:drawable/divider_horizontal_dark" - /> + /> <!-- used for instructions such as "draw pattern to unlock", the next alarm, and charging status. --> <LinearLayout android:orientation="horizontal" - android:layout_width="wrap_content" + android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="3dip" - android:gravity="center" + android:layout_marginLeft="24dip" + android:gravity="left" > <TextView android:id="@+id/status1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" - android:textColor="?android:attr/textColorSecondary" android:textSize="17sp" android:drawablePadding="4dip" /> @@ -109,7 +130,6 @@ android:layout_marginLeft="5dip" android:layout_marginRight="5dip" android:textAppearance="?android:attr/textAppearanceMedium" - android:textColor="?android:attr/textColorSecondary" android:textSize="17sp" /> <TextView @@ -118,7 +138,6 @@ android:layout_height="wrap_content" android:layout_alignParentTop="true" android:textAppearance="?android:attr/textAppearanceMedium" - android:textColor="?android:attr/textColorSecondary" android:textSize="17sp" android:drawablePadding="4dip" /> diff --git a/data/fonts/Android.mk b/data/fonts/Android.mk index a8abf8b90766..597cb5743359 100644 --- a/data/fonts/Android.mk +++ b/data/fonts/Android.mk @@ -22,7 +22,8 @@ copy_from := \ DroidSerif-Bold.ttf \ DroidSerif-Italic.ttf \ DroidSerif-BoldItalic.ttf \ - DroidSansMono.ttf + DroidSansMono.ttf \ + Clockopia.ttf ifneq ($(NO_FALLBACK_FONT),true) copy_from += DroidSansFallback.ttf diff --git a/data/fonts/Clockopia.ttf b/data/fonts/Clockopia.ttf Binary files differnew file mode 100644 index 000000000000..123ea4ff882d --- /dev/null +++ b/data/fonts/Clockopia.ttf |