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

Commit edc74abf authored by Jim Miller's avatar Jim Miller
Browse files

Implement fallback clock in keyguard

This clock is shown if widgets are ever disabled by DPM and the
default clock package is not enabled.

Fixes bug 7469367

Change-Id: I8cf140c0fc00dd56265e3a332aff2fe3b41e3ec0
parent c717d110
Loading
Loading
Loading
Loading
+0 −39
Original line number Diff line number Diff line
@@ -53,43 +53,4 @@
        android:drawablePadding="4dip"
        />

    <TextView
        android:id="@+id/owner_info"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="end"
        android:layout_marginTop="4dp"
        android:layout_marginEnd="@dimen/kg_status_line_font_right_margin"
        android:singleLine="true"
        android:ellipsize="marquee"
        android:textAppearance="?android:attr/textAppearance"
        android:textSize="@dimen/kg_status_line_font_size"
        />

    <TextView
        android:id="@+id/status1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="end"
        android:layout_marginTop="4dp"
        android:layout_marginEnd="@dimen/kg_status_line_font_right_margin"
        android:singleLine="true"
        android:ellipsize="marquee"
        android:textAppearance="?android:attr/textAppearance"
        android:textSize="@dimen/kg_status_line_font_size"
        />

    <TextView
        android:id="@+id/status_security_message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="right"
        android:layout_marginTop="12dp"
        android:singleLine="false"
        android:maxLines="3"
        android:ellipsize="marquee"
        android:textAppearance="?android:attr/textAppearance"
        android:textSize="16dp"
        />
</LinearLayout>
 No newline at end of file
+0 −39
Original line number Diff line number Diff line
@@ -56,43 +56,4 @@
            />
    </LinearLayout>

    <TextView
        android:id="@+id/owner_info"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:layout_marginTop="4dp"
        android:layout_marginEnd="@dimen/kg_status_line_font_right_margin"
        android:singleLine="true"
        android:ellipsize="marquee"
        android:textAppearance="?android:attr/textAppearance"
        android:textSize="@dimen/kg_status_line_font_size"
        />

    <TextView
        android:id="@+id/status1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:layout_marginTop="4dp"
        android:layout_marginEnd="@dimen/kg_status_line_font_right_margin"
        android:singleLine="true"
        android:ellipsize="marquee"
        android:textAppearance="?android:attr/textAppearance"
        android:textSize="@dimen/kg_status_line_font_size"
        />

    <TextView
        android:id="@+id/status_security_message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:layout_marginTop="4dp"
        android:layout_marginEnd="@dimen/kg_status_line_font_right_margin"
        android:singleLine="true"
        android:ellipsize="marquee"
        android:textAppearance="?android:attr/textAppearance"
        android:textSize="@dimen/kg_status_line_font_size"
        />
        
</LinearLayout>
+0 −25
Original line number Diff line number Diff line
@@ -53,29 +53,4 @@
        android:drawablePadding="4dip"
        />

    <TextView
        android:id="@+id/owner_info"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="end"
        android:layout_marginTop="4dp"
        android:layout_marginEnd="@dimen/kg_status_line_font_right_margin"
        android:singleLine="true"
        android:ellipsize="marquee"
        android:textAppearance="?android:attr/textAppearance"
        android:textSize="@dimen/kg_status_line_font_size"
        />

    <TextView
        android:id="@+id/status1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="end"
        android:layout_marginTop="4dp"
        android:layout_marginEnd="@dimen/kg_status_line_font_right_margin"
        android:singleLine="true"
        android:ellipsize="marquee"
        android:textAppearance="?android:attr/textAppearance"
        android:textSize="@dimen/kg_status_line_font_size"
        />
</LinearLayout>
+0 −1
Original line number Diff line number Diff line
@@ -1343,7 +1343,6 @@
  <java-symbol type="id" name="clock_text" />
  <java-symbol type="id" name="clock_view" />
  <java-symbol type="id" name="keyguard_multi_user_selector" />
  <java-symbol type="id" name="status_security_message" />
  <java-symbol type="id" name="sliding_layout" />
  <java-symbol type="id" name="keyguard_add_widget" />
  <java-symbol type="id" name="keyguard_add_widget_view" />
+105 −10
Original line number Diff line number Diff line
@@ -17,14 +17,52 @@
package com.android.internal.policy.impl.keyguard;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Typeface;
import android.text.TextUtils;
import android.text.format.DateFormat;
import android.util.AttributeSet;
import android.util.Slog;
import android.view.View;
import android.widget.GridLayout;
import android.widget.TextView;

import com.android.internal.R;
import com.android.internal.widget.LockPatternUtils;

import java.util.Date;

public class KeyguardStatusView extends GridLayout {
    @SuppressWarnings("unused")
    private KeyguardStatusViewManager mStatusViewManager;
    private static final boolean DEBUG = KeyguardViewMediator.DEBUG;
    private static final String TAG = "KeyguardStatusView";

    public static final int LOCK_ICON = 0; // R.drawable.ic_lock_idle_lock;
    public static final int ALARM_ICON = com.android.internal.R.drawable.ic_lock_idle_alarm;
    public static final int CHARGING_ICON = 0; //R.drawable.ic_lock_idle_charging;
    public static final int BATTERY_LOW_ICON = 0; //R.drawable.ic_lock_idle_low_battery;

    private CharSequence mDateFormatString;
    private LockPatternUtils mLockPatternUtils;

    private TextView mDateView;
    private TextView mAlarmStatusView;
    private ClockView mClockView;

    private KeyguardUpdateMonitorCallback mInfoCallback = new KeyguardUpdateMonitorCallback() {

        @Override
        public void onTimeChanged() {
            refresh();
        }

        @Override
        void onKeyguardVisibilityChanged(boolean showing) {
            if (showing) {
                if (DEBUG) Slog.v(TAG, "refresh statusview showing:" + showing);
                refresh();
            }
        };
    };

    public KeyguardStatusView(Context context) {
        this(context, null, 0);
@@ -38,19 +76,76 @@ public class KeyguardStatusView extends GridLayout {
        super(context, attrs, defStyle);
    }

    public int getAppWidgetId() {
        return LockPatternUtils.ID_DEFAULT_STATUS_WIDGET;
    }

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        Resources res = getContext().getResources();
        mDateFormatString =
                res.getText(com.android.internal.R.string.abbrev_wday_month_day_no_year);
        mDateView = (TextView) findViewById(R.id.date);
        mAlarmStatusView = (TextView) findViewById(R.id.alarm_status);
        mClockView = (ClockView) findViewById(R.id.clock_view);
        mLockPatternUtils = new LockPatternUtils(getContext());

        // Use custom font in mDateView
        mDateView.setTypeface(Typeface.SANS_SERIF, Typeface.BOLD);

        // Required to get Marquee to work.
        final View marqueeViews[] = { mDateView, mAlarmStatusView };
        for (int i = 0; i < marqueeViews.length; i++) {
            View v = marqueeViews[i];
            if (v == null) {
                throw new RuntimeException("Can't find widget at index " + i);
            }
            v.setSelected(true);
        }
        refresh();
    }

    protected void refresh() {
        mClockView.updateTime();
        refreshDate();
        refreshAlarmStatus(); // might as well
    }

    void refreshAlarmStatus() {
        // Update Alarm status
        String nextAlarm = mLockPatternUtils.getNextAlarm();
        if (!TextUtils.isEmpty(nextAlarm)) {
            maybeSetUpperCaseText(mAlarmStatusView, nextAlarm);
            mAlarmStatusView.setCompoundDrawablesWithIntrinsicBounds(ALARM_ICON, 0, 0, 0);
            mAlarmStatusView.setVisibility(View.VISIBLE);
        } else {
            mAlarmStatusView.setVisibility(View.GONE);
        }
    }

    void refreshDate() {
        maybeSetUpperCaseText(mDateView, DateFormat.format(mDateFormatString, new Date()));
    }

        // StatusView manages all of the widgets in this view.
        mStatusViewManager = new KeyguardStatusViewManager(this);
    @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        KeyguardUpdateMonitor.getInstance(mContext).registerCallback(mInfoCallback);
    }

    KeyguardStatusViewManager getManager() {
        return mStatusViewManager;
    @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        KeyguardUpdateMonitor.getInstance(mContext).removeCallback(mInfoCallback);
    }

    public int getAppWidgetId() {
        return LockPatternUtils.ID_DEFAULT_STATUS_WIDGET;
    }

    private void maybeSetUpperCaseText(TextView textView, CharSequence text) {
        if (KeyguardViewManager.USE_UPPER_CASE
                && textView.getId() != R.id.owner_info) { // currently only required for date view
            textView.setText(text != null ? text.toString().toUpperCase() : null);
        } else {
            textView.setText(text);
        }
    }
}
Loading