Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7fc98302 authored by Dmitri Plotnikov's avatar Dmitri Plotnikov
Browse files

Holo layout for desk clock

Change-Id: Ib6b23097ae782dba0007ca91bfe8571f3245ef99
parent 602efeb2
Loading
Loading
Loading
Loading
+95 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2011 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.
-->

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="192dip">

    <FrameLayout
        android:id="@+id/time_date"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|right">

        <com.android.deskclock.DigitalClock
            android:id="@+id/time"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

            <RelativeLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">

                <com.android.deskclock.AndroidClockTextView
                    android:id="@+id/timeDisplay"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textSize="320sp"
                    android:textColor="#FFFFFFFF" />

                <com.android.deskclock.AndroidClockTextView
                    android:id="@+id/am_pm"
                    android:layout_width="176dip"
                    android:layout_height="wrap_content"
                    android:layout_toRightOf="@id/timeDisplay"
                    android:layout_alignBaseline="@id/timeDisplay"
                    android:layout_marginLeft="32dip"
                    android:textSize="160sp"
                    android:textColor="#999999"
                    fontHighlightsEnabled="false"
                    shortForm="true" />

                <TextView
                    android:id="@+id/date"
                    android:layout_width="wrap_content"
                    android:layout_height="48dip"
                    android:layout_below="@id/timeDisplay"
                    android:layout_alignRight="@id/timeDisplay"
                    android:gravity="bottom|right"
                    android:textAppearance="?android:attr/textAppearanceMedium"
                    android:shadowColor="#C0000000"
                    android:shadowDx="0"
                    android:shadowDy="0"
                    android:shadowRadius="3.0" />

                <TextView
                    android:id="@+id/nextAlarm"
                    android:layout_width="wrap_content"
                    android:layout_height="48dip"
                    android:layout_below="@id/date"
                    android:layout_alignRight="@id/date"
                    android:gravity="center_vertical|right"
                    android:textAppearance="?android:attr/textAppearanceMedium"
                    android:drawablePadding="6dip"
                    android:drawableLeft="@drawable/ic_lock_idle_alarm"
                    android:textColor="#999999"
                    android:shadowColor="#C0000000"
                    android:shadowDx="0"
                    android:shadowDy="0"
                    android:shadowRadius="3.0" />
            </RelativeLayout>
        </com.android.deskclock.DigitalClock>
    </FrameLayout>
    <View
        android:id="@+id/window_tint"
        android:layout_width="1dip"
        android:layout_height="1dip"
        android:background="#CC000000"
        android:visibility="visible"
        android:clickable="false" />
</FrameLayout>
+95 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2011 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.
-->

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="432dip">

    <FrameLayout
        android:id="@+id/time_date"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|right">

        <com.android.deskclock.DigitalClock
            android:id="@+id/time"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

            <RelativeLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">

                <com.android.deskclock.AndroidClockTextView
                    android:id="@+id/timeDisplay"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textSize="180sp"
                    android:textColor="#FFFFFFFF" />

                <com.android.deskclock.AndroidClockTextView
                    android:id="@+id/am_pm"
                    android:layout_width="128dip"
                    android:layout_height="wrap_content"
                    android:layout_toRightOf="@id/timeDisplay"
                    android:layout_alignBaseline="@id/timeDisplay"
                    android:layout_marginLeft="32dip"
                    android:textSize="90sp"
                    android:textColor="#999999"
                    fontHighlightsEnabled="false"
                    shortForm="true" />

                <TextView
                    android:id="@+id/date"
                    android:layout_width="wrap_content"
                    android:layout_height="48dip"
                    android:layout_below="@id/timeDisplay"
                    android:layout_alignRight="@id/timeDisplay"
                    android:gravity="bottom|right"
                    android:textAppearance="?android:attr/textAppearanceMedium"
                    android:shadowColor="#C0000000"
                    android:shadowDx="0"
                    android:shadowDy="0"
                    android:shadowRadius="3.0" />

                <TextView
                    android:id="@+id/nextAlarm"
                    android:layout_width="wrap_content"
                    android:layout_height="48dip"
                    android:layout_below="@id/date"
                    android:layout_alignRight="@id/date"
                    android:gravity="center_vertical|right"
                    android:textAppearance="?android:attr/textAppearanceMedium"
                    android:drawablePadding="6dip"
                    android:drawableLeft="@drawable/ic_lock_idle_alarm"
                    android:textColor="#999999"
                    android:shadowColor="#C0000000"
                    android:shadowDx="0"
                    android:shadowDy="0"
                    android:shadowRadius="3.0" />
            </RelativeLayout>
        </com.android.deskclock.DigitalClock>
    </FrameLayout>
    <View
        android:id="@+id/window_tint"
        android:layout_width="1dip"
        android:layout_height="1dip"
        android:background="#CC000000"
        android:visibility="visible"
        android:clickable="false" />
</FrameLayout>
+44 −9
Original line number Diff line number Diff line
@@ -34,6 +34,9 @@ public class AndroidClockTextView extends View {
    private static final String SYSTEM_FONT_TIME_BACKGROUND = SYSTEM + "AndroidClock.ttf";
    private static final String SYSTEM_FONT_TIME_FOREGROUND = SYSTEM + "AndroidClock_Highlight.ttf";

    private static final String ATTR_FONT_HIGHLIGHTS_ENABLED = "fontHighlightsEnabled";
    private static final String ATTR_SHORT_FORM = "shortForm";

    private static Typeface sTypeface;
    private static Typeface sHighlightTypeface;

@@ -50,9 +53,11 @@ public class AndroidClockTextView extends View {
    private float mTextSize;
    private Rect mTextBounds = new Rect();
    private Rect mTempRect = new Rect();
    private int mX;
    private int mY;
    private int mX = -1;
    private int mY = -1;
    private float mFontDescent;
    private boolean mHighlightsEnabled;
    private boolean mShortForm;

    public AndroidClockTextView(Context context) {
        super(context);
@@ -60,8 +65,13 @@ public class AndroidClockTextView extends View {

    public AndroidClockTextView(Context context, AttributeSet attrs) {
        super(context, attrs);

        mProperties = new TextView(context, attrs);

        mHighlightsEnabled =
            attrs.getAttributeBooleanValue(null, ATTR_FONT_HIGHLIGHTS_ENABLED, true);
        mShortForm =attrs.getAttributeBooleanValue(null, ATTR_SHORT_FORM, false);

        mTextSize = mProperties.getTextSize();
        mColor = mProperties.getTextColors().getDefaultColor();

@@ -74,21 +84,31 @@ public class AndroidClockTextView extends View {
        mTextPaint.setTypeface(sTypeface);
        mTextPaint.setColor(mColor);
        mTextPaint.setTextAlign(Paint.Align.LEFT);
        mTextPaint.setAlpha(mTextAlpha);
        mTextPaint.setAntiAlias(true);
        mTextPaint.setTextSize(mTextSize);
        if (mHighlightsEnabled) {
            mTextPaint.setAlpha(mTextAlpha);
        }

        mHighlightPaint = new Paint();
        mHighlightPaint.setTypeface(sHighlightTypeface);
        mHighlightPaint.setColor(mColor);
        mHighlightPaint.setAlpha(mHighlightAlpha);
        mHighlightPaint.setTextAlign(Paint.Align.LEFT);
        mHighlightPaint.setAntiAlias(true);
        mHighlightPaint.setTextSize(mTextSize);
        if (mHighlightsEnabled) {
            mHighlightPaint.setAlpha(mHighlightAlpha);
        }

        mFontDescent = mTextPaint.getFontMetrics().descent;
    }

    public void setTextColor(int color) {
        mColor = color;
        mTextPaint.setColor(color);
        mHighlightPaint.setColor(color);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int measuredWidth, measuredHeight;
@@ -106,30 +126,45 @@ public class AndroidClockTextView extends View {
        if (mode == MeasureSpec.EXACTLY) {
            measuredHeight = MeasureSpec.getSize(heightMeasureSpec);
        } else {
            // Text bounds are measured from the bottom-left corner, so mTextBounds.top
            // is a negative number
            measuredHeight = -mTextBounds.top + getPaddingTop() + getPaddingBottom();
        }
        setMeasuredDimension(measuredWidth, measuredHeight);

        mX = getPaddingLeft();
        mY = (int) (measuredHeight - getPaddingBottom() - mFontDescent);
    }

    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        mX = getPaddingLeft();
        mY = getHeight() - getPaddingBottom();
        mY = (int) (getHeight() - getPaddingBottom() - mFontDescent);
    }

    public void setText(CharSequence time) {
        if (mShortForm) {
            if (time.length() > 0) {
                mText = String.valueOf(time.charAt(0));
            } else {
                mText = null;
            }
        } else {
            mText = String.valueOf(time);
        }
        requestLayout();
    }

    @Override
    public int getBaseline() {
        return (int) (getHeight() - mFontDescent);
        return mY;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        if (mText != null) {
            canvas.drawText(mText, mX, mY, mTextPaint);
            canvas.drawText(mText, mX, mY, mHighlightPaint);
        }
    }
}
+82 −90
Original line number Diff line number Diff line
@@ -16,77 +16,51 @@

package com.android.deskclock;

import static android.os.BatteryManager.BATTERY_STATUS_UNKNOWN;

import android.app.Activity;
import android.app.AlarmManager;
import android.app.AlertDialog;
import android.app.PendingIntent;
import android.app.UiModeManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.ContentResolver;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.database.ContentObserver;
import android.database.Cursor;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.BatteryManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.os.PowerManager;
import android.provider.Settings;
import android.provider.MediaStore;
import android.provider.Settings;
import android.text.TextUtils;
import android.text.format.DateFormat;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View.OnClickListener;
import android.view.View.OnCreateContextMenuListener;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.ViewTreeObserver.OnGlobalFocusChangeListener;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.TranslateAnimation;
import android.widget.AbsoluteLayout;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;

import static android.os.BatteryManager.BATTERY_STATUS_CHARGING;
import static android.os.BatteryManager.BATTERY_STATUS_FULL;
import static android.os.BatteryManager.BATTERY_STATUS_UNKNOWN;

import java.io.IOException;
import java.io.InputStream;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.Random;

/**
@@ -204,7 +178,8 @@ public class DeskClock extends Activity {
        @Override
        public void handleMessage(Message m) {
            if (m.what == QUERY_WEATHER_DATA_MSG) {
                new Thread() { public void run() { queryWeatherData(); } }.start();
                new Thread() { @Override
                public void run() { queryWeatherData(); } }.start();
                scheduleWeatherQueryDelayed(QUERY_WEATHER_DELAY);
            } else if (m.what == UPDATE_WEATHER_DISPLAY_MSG) {
                updateWeatherDisplay();
@@ -224,6 +199,8 @@ public class DeskClock extends Activity {
        }
    };

    private View mAlarmButton;


    private void moveScreenSaver() {
        moveScreenSaverTo(-1,-1);
@@ -323,8 +300,8 @@ public class DeskClock extends Activity {

        final int color = mDimmed ? SCREEN_SAVER_COLOR_DIM : SCREEN_SAVER_COLOR;

        ((TextView)findViewById(R.id.timeDisplay)).setTextColor(color);
        ((TextView)findViewById(R.id.am_pm)).setTextColor(color);
        ((AndroidClockTextView)findViewById(R.id.timeDisplay)).setTextColor(color);
        ((AndroidClockTextView)findViewById(R.id.am_pm)).setTextColor(color);
        mDate.setTextColor(color);
        mNextAlarm.setTextColor(color);
        mNextAlarm.setCompoundDrawablesWithIntrinsicBounds(
@@ -522,8 +499,11 @@ public class DeskClock extends Activity {
            //mNextAlarm.setCompoundDrawablesWithIntrinsicBounds(
            //    android.R.drawable.ic_lock_idle_alarm, 0, 0, 0);
            mNextAlarm.setVisibility(View.VISIBLE);
        } else {
        } else if (mAlarmButton != null) {
            mNextAlarm.setVisibility(View.INVISIBLE);
        } else {
            mNextAlarm.setText("");
            mNextAlarm.setVisibility(View.VISIBLE);
        }
    }

@@ -711,10 +691,12 @@ public class DeskClock extends Activity {
        mNextAlarm = (TextView) findViewById(R.id.nextAlarm);
        mNextAlarm.setOnClickListener(alarmClickListener);

        final ImageButton alarmButton = (ImageButton) findViewById(R.id.alarm_button);
        alarmButton.setOnClickListener(alarmClickListener);
        mAlarmButton = findViewById(R.id.alarm_button);
        View alarmControl = mAlarmButton != null ? mAlarmButton : findViewById(R.id.nextAlarm);
        alarmControl.setOnClickListener(alarmClickListener);

        final ImageButton galleryButton = (ImageButton) findViewById(R.id.gallery_button);
        if (galleryButton != null) {
            galleryButton.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    try {
@@ -728,8 +710,10 @@ public class DeskClock extends Activity {
                    }
                }
            });
        }

        final ImageButton musicButton = (ImageButton) findViewById(R.id.music_button);
        if (musicButton != null) {
            musicButton.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    try {
@@ -741,8 +725,10 @@ public class DeskClock extends Activity {
                    }
                }
            });
        }

        final ImageButton homeButton = (ImageButton) findViewById(R.id.home_button);
        if (homeButton != null) {
            homeButton.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    startActivity(
@@ -751,8 +737,10 @@ public class DeskClock extends Activity {
                            .addCategory(Intent.CATEGORY_HOME));
                }
            });
        }

        final ImageButton nightmodeButton = (ImageButton) findViewById(R.id.nightmode_button);
        if (nightmodeButton != null) {
            nightmodeButton.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    mDimmed = ! mDimmed;
@@ -766,8 +754,10 @@ public class DeskClock extends Activity {
                    return true;
                }
            });
        }

        final View weatherView = findViewById(R.id.weather);
        if (weatherView != null) {
            weatherView.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    if (!supportsWeather()) return;
@@ -780,6 +770,7 @@ public class DeskClock extends Activity {
                    }
                }
            });
        }

        final View tintView = findViewById(R.id.window_tint);
        tintView.setOnTouchListener(new View.OnTouchListener() {
@@ -805,11 +796,12 @@ public class DeskClock extends Activity {

        // Tidy up awkward focus behavior: the first view to be focused in
        // trackball mode should be the alarms button
        final ViewTreeObserver vto = alarmButton.getViewTreeObserver();
        final ViewTreeObserver vto = alarmControl.getViewTreeObserver();
        final View alarmView = alarmControl;
        vto.addOnGlobalFocusChangeListener(new ViewTreeObserver.OnGlobalFocusChangeListener() {
            public void onGlobalFocusChanged(View oldFocus, View newFocus) {
                if (oldFocus == null && newFocus == nightmodeButton) {
                    alarmButton.requestFocus();
                    alarmView.requestFocus();
                }
            }
        });
+1 −2
Original line number Diff line number Diff line
@@ -27,7 +27,6 @@ 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;
@@ -78,7 +77,7 @@ public class DigitalClock extends LinearLayout {
        }

        void setShowAmPm(boolean show) {
            mAmPm.setVisibility(show ? View.VISIBLE : View.GONE);
            mAmPm.setVisibility(show ? View.VISIBLE : View.INVISIBLE);
        }

        void setIsMorning(boolean isMorning) {