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

Commit 0c400f0a authored by Daniel Sandler's avatar Daniel Sandler Committed by Android (Google) Code Review
Browse files

Merge "Hello, HoloClock."

parents ab2aeeeb 051dccf6
Loading
Loading
Loading
Loading
+2.28 KiB

File added.

No diff preview for this file type.

+2.16 KiB

File added.

No diff preview for this file type.

+17 −12
Original line number Diff line number Diff line
@@ -57,20 +57,25 @@
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                >
                <!-- paddingLeft: 24 dips = 32dp (total space to icon) - 8dp in the icon.
                TODO: Make sure the font has a small enough leading that we don't need this
                negative margin business. -->
                <com.android.systemui.statusbar.policy.Clock
                    style="@*android:style/TextAppearance.StatusBar.Icon"
                <com.android.systemui.statusbar.tablet.HoloClock
                    android:id="@+id/clock"
                    android:layout_width="wrap_content"
                    android:layout_height="65dp"
                    android:layout_marginTop="-17dp"
                    android:layout_height="match_parent"
                    >
                    <TextView android:id="@+id/time_bg"
                        android:layout_width="wrap_content"
                        android:layout_height="match_parent"
                        android:singleLine="true"
                    android:textSize="60sp"
                    android:paddingLeft="24dip"
                    android:textColor="#2e2e2e"
                    />
                        android:textSize="72dip"
                        android:textColor="#1f1f1f" />
                    <TextView android:id="@+id/time_fg"
                        android:layout_width="wrap_content"
                        android:layout_height="match_parent"
                        android:singleLine="true"
                        android:textSize="72dip"
                        android:textColor="#2e2e2e" />
                </com.android.systemui.statusbar.tablet.HoloClock>

                <LinearLayout
                    android:layout_width="48dip"
                    android:layout_height="match_parent"
+19 −5
Original line number Diff line number Diff line
@@ -40,15 +40,29 @@
        android:layout_alignParentRight="true"
        >

        <com.android.systemui.statusbar.policy.Clock
        <com.android.systemui.statusbar.tablet.HoloClock
            android:id="@+id/clock"
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            android:layout_alignParentTop="true"
            android:layout_marginRight="48dp"
            android:textSize="70sp"
            android:layout_marginRight="40dip"
            android:layout_marginBottom="4dip"
            >
            <TextView android:id="@+id/time_bg"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="right"
            />
                android:singleLine="true"
                android:textSize="90dip"
                android:textColor="#999999" />
            <TextView android:id="@+id/time_fg"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="right"
                android:singleLine="true"
                android:textSize="90dip"
                android:textColor="#666666" />
        </com.android.systemui.statusbar.tablet.HoloClock>

        <com.android.systemui.statusbar.policy.DateView
            android:id="@+id/date"
+169 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2006 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.systemui.statusbar.tablet;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.AssetManager;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.format.DateFormat;
import android.text.style.CharacterStyle;
import android.text.style.ForegroundColorSpan;
import android.text.style.RelativeSizeSpan;
import android.text.style.RelativeSizeSpan;
import android.text.style.StyleSpan;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.TextView;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.TimeZone;

import com.android.systemui.R;

public class HoloClock extends FrameLayout {
    private boolean mAttached;
    private Calendar mCalendar;
    private String mClockFormatString;
    private SimpleDateFormat mClockFormat;

    private static Typeface sBackgroundType, sForegroundType;
    private TextView mBgText, mFgText;

    public HoloClock(Context context) {
        this(context, null);
    }

    public HoloClock(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public HoloClock(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();

        if (sBackgroundType == null) {
            AssetManager assets = getContext().getAssets();

            sBackgroundType = Typeface.createFromAsset(assets,
                "fonts/AndroidClock.ttf");
            sForegroundType = Typeface.createFromAsset(assets,
                "fonts/AndroidClock2.ttf");
        }
        mBgText = (TextView) findViewById(R.id.time_bg);
        if (mBgText != null) {
            mBgText.setTypeface(sBackgroundType);
        }
        mFgText = (TextView) findViewById(R.id.time_fg);
        if (mFgText != null) {
            mFgText.setTypeface(sForegroundType);
        }
    }

    @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();

        if (!mAttached) {
            mAttached = true;
            IntentFilter filter = new IntentFilter();

            filter.addAction(Intent.ACTION_TIME_TICK);
            filter.addAction(Intent.ACTION_TIME_CHANGED);
            filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
            filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);

            getContext().registerReceiver(mIntentReceiver, filter, null, getHandler());
        }

        // NOTE: It's safe to do these after registering the receiver since the receiver always runs
        // in the main thread, therefore the receiver can't run before this method returns.

        // The time zone may have changed while the receiver wasn't registered, so update the Time
        mCalendar = Calendar.getInstance(TimeZone.getDefault());

        // Make sure we update to the current time
        updateClock();
    }

    @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        if (mAttached) {
            getContext().unregisterReceiver(mIntentReceiver);
            mAttached = false;
        }
    }

    private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (action.equals(Intent.ACTION_TIMEZONE_CHANGED)) {
                String tz = intent.getStringExtra("time-zone");
                mCalendar = Calendar.getInstance(TimeZone.getTimeZone(tz));
                if (mClockFormat != null) {
                    mClockFormat.setTimeZone(mCalendar.getTimeZone());
                }
            }
            updateClock();
        }
    };

    final void updateClock() {
        mCalendar.setTimeInMillis(System.currentTimeMillis());
        CharSequence txt = getTimeText();
        mBgText.setText(txt);
        mFgText.setText(txt);
    }

    private final CharSequence getTimeText() {
        Context context = getContext();
        int res = DateFormat.is24HourFormat(context)
            ? com.android.internal.R.string.twenty_four_hour_time_format
            : com.android.internal.R.string.twelve_hour_time_format;

        SimpleDateFormat sdf;
        String format = context.getString(res);
        if (!format.equals(mClockFormatString)) {
            // we don't want AM/PM showing up in our statusbar, even in 12h mode
            format = format.replaceAll("a", "").trim();
            mClockFormat = sdf = new SimpleDateFormat(format);
            mClockFormatString = format;
        } else {
            sdf = mClockFormat;
        }
        String result = sdf.format(mCalendar.getTime());
        return result;
    }
}