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

Commit c5510b13 authored by Sven Dawitz's avatar Sven Dawitz Committed by Jorge Ruesga
Browse files

SystemUI: Forward port Statusbar Clock and Date actions

Port of http://review.cyanogenmod.org/#/c/27795/4

PS2: Cleanup and address comments
PS3: Remove unused variables
PS4: Remove unused imports
PS5: Declare AP_PM_STYLE final
PS6: Add in @drawable/ic_notify_button_bg to header
PS7: Fix DateView layout. Clear activity stack

Begin old commit message-----------

Patch set 1-2: Initial port
Patch set 3  : Fixes date click action
Patch set 4  : Remove unused import

Includes:
- Add onClick action to notification clock and date
  In expanded StatusBar
  - clicking clock opens alarms
  - clicking date opens calendar - today selected
  Id: I850732dcca0e65af59ce009aaf9f7ba18bcaf915

- Add onLongClick action to notication clock and date
  - As discussed with ciwrl on google+, LongClick opens DateTimeSettings
  - Moved on-touch color change to superior xml solution, as suggested by
    Andrew Boren <preludedrew@gmail.com> here: http://review.evervolv.com/#/c/3676/"
  Id: I1fae71e347ffcb786227ba0b2651a66f2df35e27

- Add SET_ALARM permission for SystemUI
  If one or more third-party alarm clock app is installed, clicking clock should
  open an app chooser for the alarm clock. However, permission for
  com.android.alarm.permission.SET_ALARM is required to make this behaviour
  work properly.

Change-Id: I8006e57a953fe0c4be480e0aa27a4c28c672f982
parent 33dcac30
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@
    <uses-permission android:name="android.permission.STATUS_BAR" />
    <uses-permission android:name="android.permission.EXPAND_STATUS_BAR" />
    <uses-permission android:name="android.permission.REMOTE_AUDIO_PLAYBACK" />
    <uses-permission android:name="com.android.alarm.permission.SET_ALARM" />

    <uses-permission android:name="android.permission.MANAGE_USERS" />
    <uses-permission android:name="android.permission.READ_PROFILE" />
+5 −0
Original line number Diff line number Diff line
@@ -42,7 +42,9 @@
            android:layout_marginEnd="8dp"
            android:singleLine="true"
            android:textAppearance="@style/TextAppearance.StatusBar.Expanded.Clock"
            android:background="@drawable/ic_notify_button_bg"
            android:layout_centerVertical="true"
            android:clickable="true"
            />

        <com.android.systemui.statusbar.policy.DateView android:id="@+id/date"
@@ -50,6 +52,9 @@
            android:layout_height="wrap_content"
            android:textAppearance="@style/TextAppearance.StatusBar.Expanded.Date"
            android:layout_toEndOf="@id/clock"
            android:background="@drawable/ic_notify_button_bg"
            android:paddingTop="8dp"
            android:paddingBottom="8dp"
            android:layout_centerVertical="true"
            />
    </RelativeLayout>
+49 −1
Original line number Diff line number Diff line
@@ -16,21 +16,30 @@

package com.android.systemui.statusbar.policy;

import android.app.ActivityManagerNative;
import android.app.StatusBarManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.provider.AlarmClock;
import android.provider.Settings;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.format.DateFormat;
import android.text.style.CharacterStyle;
import android.text.style.RelativeSizeSpan;
import android.util.AttributeSet;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.widget.TextView;

import com.android.systemui.DemoMode;

import com.android.internal.R;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;
@@ -41,7 +50,7 @@ import libcore.icu.LocaleData;
/**
 * Digital clock for the status bar.
 */
public class Clock extends TextView implements DemoMode {
public class Clock extends TextView implements DemoMode, OnClickListener, OnLongClickListener {
    private boolean mAttached;
    private Calendar mCalendar;
    private String mClockFormatString;
@@ -64,6 +73,11 @@ public class Clock extends TextView implements DemoMode {

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

        if (isClickable()) {
            setOnClickListener(this);
            setOnLongClickListener(this);
        }
    }

    @Override
@@ -201,6 +215,40 @@ public class Clock extends TextView implements DemoMode {

    }

    private void collapseStartActivity(Intent what) {
        // collapse status bar
        StatusBarManager statusBarManager = (StatusBarManager) getContext().getSystemService(
                Context.STATUS_BAR_SERVICE);
        statusBarManager.collapsePanels();

        // dismiss keyguard in case it was active and no passcode set
        try {
            ActivityManagerNative.getDefault().dismissKeyguardOnNextActivity();
        } catch (Exception ex) {
            // no action needed here
        }

        // start activity
        what.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
        mContext.startActivity(what);
    }

    @Override
    public void onClick(View v) {
        Intent intent = new Intent(AlarmClock.ACTION_SHOW_ALARMS);
        collapseStartActivity(intent);
    }

    @Override
    public boolean onLongClick(View v) {
        Intent intent = new Intent("android.settings.DATE_SETTINGS");
        intent.addCategory(Intent.CATEGORY_DEFAULT);
        collapseStartActivity(intent);

        // consume event
        return true;
    }

    private boolean mDemoMode;

    @Override
+50 −1
Original line number Diff line number Diff line
@@ -16,13 +16,21 @@

package com.android.systemui.statusbar.policy;

import android.app.ActivityManagerNative;
import android.app.StatusBarManager;
import android.content.BroadcastReceiver;
import android.content.ContentUris;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.provider.CalendarContract;
import android.text.format.DateFormat;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.ViewParent;
import android.widget.TextView;

@@ -34,7 +42,7 @@ import java.util.Locale;

import libcore.icu.ICU;

public class DateView extends TextView {
public class DateView extends TextView implements OnClickListener, OnLongClickListener {
    private static final String TAG = "DateView";

    private final Date mCurrentTime = new Date();
@@ -63,6 +71,8 @@ public class DateView extends TextView {

    public DateView(Context context, AttributeSet attrs) {
        super(context, attrs);
        setOnClickListener(this);
        setOnLongClickListener(this);
    }

    @Override
@@ -112,4 +122,43 @@ public class DateView extends TextView {
            mLastText = text;
        }
    }

    private void collapseStartActivity(Intent what) {
        // collapse status bar
        StatusBarManager statusBarManager = (StatusBarManager) getContext().getSystemService(
                Context.STATUS_BAR_SERVICE);
        statusBarManager.collapsePanels();

        // dismiss keyguard in case it was active and no passcode set
        try {
            ActivityManagerNative.getDefault().dismissKeyguardOnNextActivity();
        } catch (Exception ex) {
            // no action needed here
        }

        // start activity
        what.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
        mContext.startActivity(what);
    }

    @Override
    public void onClick(View v) {
        long nowMillis = System.currentTimeMillis();

        Uri.Builder builder = CalendarContract.CONTENT_URI.buildUpon();
        builder.appendPath("time");
        ContentUris.appendId(builder, nowMillis);
        Intent intent = new Intent(Intent.ACTION_VIEW).setData(builder.build());
        collapseStartActivity(intent);
    }

    @Override
    public boolean onLongClick(View v) {
        Intent intent = new Intent("android.settings.DATE_SETTINGS");
        intent.addCategory(Intent.CATEGORY_DEFAULT);
        collapseStartActivity(intent);

        // consume event
        return true;
    }
}