summaryrefslogtreecommitdiffstats
path: root/packages
diff options
context:
space:
mode:
Diffstat (limited to 'packages')
-rw-r--r--packages/Keyguard/res/drawable-hdpi/ic_alarm_small.pngbin1159 -> 0 bytes
-rw-r--r--packages/Keyguard/res/drawable-mdpi/ic_alarm_small.pngbin758 -> 0 bytes
-rw-r--r--packages/Keyguard/res/drawable-sw600dp-hdpi/ic_alarm_small.pngbin1320 -> 0 bytes
-rw-r--r--packages/Keyguard/res/drawable-sw600dp-mdpi/ic_alarm_small.pngbin847 -> 0 bytes
-rw-r--r--packages/Keyguard/res/drawable-sw600dp-xhdpi/ic_alarm_small.pngbin1836 -> 0 bytes
-rw-r--r--packages/Keyguard/res/drawable-sw600dp-xxhdpi/ic_alarm_small.pngbin2696 -> 0 bytes
-rw-r--r--packages/Keyguard/res/drawable-xhdpi/ic_alarm_small.pngbin1590 -> 0 bytes
-rw-r--r--packages/Keyguard/res/drawable-xxhdpi/ic_alarm_small.pngbin2513 -> 0 bytes
-rw-r--r--packages/Keyguard/res/drawable/ic_access_alarms_big.xml25
-rw-r--r--packages/Keyguard/res/layout/keyguard_status_area.xml8
-rw-r--r--packages/Keyguard/res/values/donottranslate.xml3
-rw-r--r--packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java26
-rw-r--r--packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java5
-rw-r--r--packages/SystemUI/res/drawable/ic_access_alarms_small.xml25
-rw-r--r--packages/SystemUI/res/layout/status_bar_expanded_header.xml47
-rw-r--r--packages/SystemUI/res/values/dimens.xml3
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java21
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java76
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/NextAlarmController.java84
19 files changed, 267 insertions, 56 deletions
diff --git a/packages/Keyguard/res/drawable-hdpi/ic_alarm_small.png b/packages/Keyguard/res/drawable-hdpi/ic_alarm_small.png
deleted file mode 100644
index 3819029..0000000
--- a/packages/Keyguard/res/drawable-hdpi/ic_alarm_small.png
+++ /dev/null
Binary files differ
diff --git a/packages/Keyguard/res/drawable-mdpi/ic_alarm_small.png b/packages/Keyguard/res/drawable-mdpi/ic_alarm_small.png
deleted file mode 100644
index 2aeedaf..0000000
--- a/packages/Keyguard/res/drawable-mdpi/ic_alarm_small.png
+++ /dev/null
Binary files differ
diff --git a/packages/Keyguard/res/drawable-sw600dp-hdpi/ic_alarm_small.png b/packages/Keyguard/res/drawable-sw600dp-hdpi/ic_alarm_small.png
deleted file mode 100644
index e28b3f6..0000000
--- a/packages/Keyguard/res/drawable-sw600dp-hdpi/ic_alarm_small.png
+++ /dev/null
Binary files differ
diff --git a/packages/Keyguard/res/drawable-sw600dp-mdpi/ic_alarm_small.png b/packages/Keyguard/res/drawable-sw600dp-mdpi/ic_alarm_small.png
deleted file mode 100644
index f727d01..0000000
--- a/packages/Keyguard/res/drawable-sw600dp-mdpi/ic_alarm_small.png
+++ /dev/null
Binary files differ
diff --git a/packages/Keyguard/res/drawable-sw600dp-xhdpi/ic_alarm_small.png b/packages/Keyguard/res/drawable-sw600dp-xhdpi/ic_alarm_small.png
deleted file mode 100644
index d9c0623..0000000
--- a/packages/Keyguard/res/drawable-sw600dp-xhdpi/ic_alarm_small.png
+++ /dev/null
Binary files differ
diff --git a/packages/Keyguard/res/drawable-sw600dp-xxhdpi/ic_alarm_small.png b/packages/Keyguard/res/drawable-sw600dp-xxhdpi/ic_alarm_small.png
deleted file mode 100644
index a36bf1f..0000000
--- a/packages/Keyguard/res/drawable-sw600dp-xxhdpi/ic_alarm_small.png
+++ /dev/null
Binary files differ
diff --git a/packages/Keyguard/res/drawable-xhdpi/ic_alarm_small.png b/packages/Keyguard/res/drawable-xhdpi/ic_alarm_small.png
deleted file mode 100644
index 0290bdc..0000000
--- a/packages/Keyguard/res/drawable-xhdpi/ic_alarm_small.png
+++ /dev/null
Binary files differ
diff --git a/packages/Keyguard/res/drawable-xxhdpi/ic_alarm_small.png b/packages/Keyguard/res/drawable-xxhdpi/ic_alarm_small.png
deleted file mode 100644
index 66968e8..0000000
--- a/packages/Keyguard/res/drawable-xxhdpi/ic_alarm_small.png
+++ /dev/null
Binary files differ
diff --git a/packages/Keyguard/res/drawable/ic_access_alarms_big.xml b/packages/Keyguard/res/drawable/ic_access_alarms_big.xml
new file mode 100644
index 0000000..84ccb7c
--- /dev/null
+++ b/packages/Keyguard/res/drawable/ic_access_alarms_big.xml
@@ -0,0 +1,25 @@
+<!--
+Copyright (C) 2014 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="18dp"
+ android:height="18dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+
+ <path
+ android:fillColor="@color/clock_gray"
+ android:pathData="M22.0,5.7l-4.6,-3.9l-1.3,1.5l4.6,3.9L22.0,5.7zM7.9,3.4L6.6,1.9L2.0,5.7l1.3,1.5L7.9,3.4zM12.5,8.0L11.0,8.0l0.0,6.0l4.7,2.9l0.8,-1.2l-4.0,-2.4L12.5,8.0zM12.0,4.0c-5.0,0.0 -9.0,4.0 -9.0,9.0c0.0,5.0 4.0,9.0 9.0,9.0s9.0,-4.0 9.0,-9.0C21.0,8.0 17.0,4.0 12.0,4.0zM12.0,20.0c-3.9,0.0 -7.0,-3.1 -7.0,-7.0c0.0,-3.9 3.1,-7.0 7.0,-7.0c3.9,0.0 7.0,3.1 7.0,7.0C19.0,16.9 15.9,20.0 12.0,20.0z"/>
+</vector>
diff --git a/packages/Keyguard/res/layout/keyguard_status_area.xml b/packages/Keyguard/res/layout/keyguard_status_area.xml
index 2730517..7d8977c 100644
--- a/packages/Keyguard/res/layout/keyguard_status_area.xml
+++ b/packages/Keyguard/res/layout/keyguard_status_area.xml
@@ -35,13 +35,11 @@
<TextView android:id="@+id/alarm_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:drawablePadding="2dip"
- android:drawableLeft="@drawable/ic_alarm_small"
- android:drawableStart="@drawable/ic_alarm_small"
+ android:drawablePadding="6dp"
+ android:drawableStart="@drawable/ic_access_alarms_big"
android:textColor="@color/clock_gray"
style="@style/widget_label"
- android:layout_marginLeft="8dip"
- android:layout_marginStart="8dip"
+ android:layout_marginStart="6dp"
android:gravity="center"
android:visibility="gone"
/>
diff --git a/packages/Keyguard/res/values/donottranslate.xml b/packages/Keyguard/res/values/donottranslate.xml
index 78636db..2f54406 100644
--- a/packages/Keyguard/res/values/donottranslate.xml
+++ b/packages/Keyguard/res/values/donottranslate.xml
@@ -18,6 +18,9 @@
<!-- Skeleton string format for displaying the date. -->
<string name="abbrev_wday_month_day_no_year">EEEEMMMMd</string>
+ <!-- Skeleton string format for displaying the date when an alarm is set. -->
+ <string name="abbrev_wday_month_day_no_year_alarm">EEEMMMMd</string>
+
<!-- Skeleton string format for displaying the time in 12-hour format. -->
<string name="clock_12hr_format">hm</string>
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java
index 02a441b..ce673d3 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java
@@ -71,6 +71,11 @@ public class KeyguardStatusView extends GridLayout {
public void onScreenTurnedOff(int why) {
setEnableMarquee(false);
}
+
+ @Override
+ public void onUserSwitchComplete(int userId) {
+ refresh();
+ }
};
public KeyguardStatusView(Context context) {
@@ -110,7 +115,8 @@ public class KeyguardStatusView extends GridLayout {
}
protected void refresh() {
- Patterns.update(mContext);
+ AlarmClockInfo nextAlarm = mLockPatternUtils.getNextAlarm();
+ Patterns.update(mContext, nextAlarm != null);
mDateView.setFormat24Hour(Patterns.dateView);
mDateView.setFormat12Hour(Patterns.dateView);
@@ -118,25 +124,23 @@ public class KeyguardStatusView extends GridLayout {
mClockView.setFormat12Hour(Patterns.clockView12);
mClockView.setFormat24Hour(Patterns.clockView24);
- refreshAlarmStatus();
+ refreshAlarmStatus(nextAlarm);
}
- void refreshAlarmStatus() {
- // Update Alarm status
- AlarmClockInfo nextAlarm = mLockPatternUtils.getNextAlarm();
+ void refreshAlarmStatus(AlarmClockInfo nextAlarm) {
if (nextAlarm != null) {
- mAlarmStatusView.setText(formatNextAlarm(nextAlarm));
+ mAlarmStatusView.setText(formatNextAlarm(mContext, nextAlarm));
mAlarmStatusView.setVisibility(View.VISIBLE);
} else {
mAlarmStatusView.setVisibility(View.GONE);
}
}
- String formatNextAlarm(AlarmClockInfo info) {
+ public static String formatNextAlarm(Context context, AlarmClockInfo info) {
if (info == null) {
return "";
}
- String skeleton = DateFormat.is24HourFormat(mContext) ? "EHm" : "Ehma";
+ String skeleton = DateFormat.is24HourFormat(context) ? "EHm" : "Ehma";
String pattern = DateFormat.getBestDateTimePattern(Locale.getDefault(), skeleton);
return DateFormat.format(pattern, info.getTriggerTime()).toString();
}
@@ -191,10 +195,12 @@ public class KeyguardStatusView extends GridLayout {
static String clockView24;
static String cacheKey;
- static void update(Context context) {
+ static void update(Context context, boolean hasAlarm) {
final Locale locale = Locale.getDefault();
final Resources res = context.getResources();
- final String dateViewSkel = res.getString(R.string.abbrev_wday_month_day_no_year);
+ final String dateViewSkel = res.getString(hasAlarm
+ ? R.string.abbrev_wday_month_day_no_year_alarm
+ : R.string.abbrev_wday_month_day_no_year);
final String clockView12Skel = res.getString(R.string.clock_12hr_format);
final String clockView24Skel = res.getString(R.string.clock_24hr_format);
final String key = locale.toString() + dateViewSkel + clockView12Skel + clockView24Skel;
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java
index a5dbbcb..f0f5772 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java
@@ -17,6 +17,7 @@
package com.android.keyguard;
import android.app.ActivityManagerNative;
+import android.app.AlarmManager;
import android.app.IUserSwitchObserver;
import android.app.PendingIntent;
import android.app.admin.DevicePolicyManager;
@@ -322,7 +323,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
if (Intent.ACTION_TIME_TICK.equals(action)
|| Intent.ACTION_TIME_CHANGED.equals(action)
- || Intent.ACTION_TIMEZONE_CHANGED.equals(action)) {
+ || Intent.ACTION_TIMEZONE_CHANGED.equals(action)
+ || AlarmManager.ACTION_NEXT_ALARM_CLOCK_CHANGED.equals(action)) {
mHandler.sendEmptyMessage(MSG_TIME_UPDATE);
} else if (TelephonyIntents.SPN_STRINGS_UPDATED_ACTION.equals(action)) {
mTelephonyPlmn = getTelephonyPlmnFrom(intent);
@@ -568,6 +570,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
filter.addAction(AudioManager.RINGER_MODE_CHANGED_ACTION);
filter.addAction(DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED);
filter.addAction(Intent.ACTION_USER_REMOVED);
+ filter.addAction(AlarmManager.ACTION_NEXT_ALARM_CLOCK_CHANGED);
context.registerReceiver(mBroadcastReceiver, filter);
final IntentFilter bootCompleteFilter = new IntentFilter();
diff --git a/packages/SystemUI/res/drawable/ic_access_alarms_small.xml b/packages/SystemUI/res/drawable/ic_access_alarms_small.xml
new file mode 100644
index 0000000..cf64689
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_access_alarms_small.xml
@@ -0,0 +1,25 @@
+<!--
+Copyright (C) 2014 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="16dp"
+ android:height="16dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+
+ <path
+ android:fillColor="#64ffffff"
+ android:pathData="M22.0,5.7l-4.6,-3.9l-1.3,1.5l4.6,3.9L22.0,5.7zM7.9,3.4L6.6,1.9L2.0,5.7l1.3,1.5L7.9,3.4zM12.5,8.0L11.0,8.0l0.0,6.0l4.7,2.9l0.8,-1.2l-4.0,-2.4L12.5,8.0zM12.0,4.0c-5.0,0.0 -9.0,4.0 -9.0,9.0c0.0,5.0 4.0,9.0 9.0,9.0s9.0,-4.0 9.0,-9.0C21.0,8.0 17.0,4.0 12.0,4.0zM12.0,20.0c-3.9,0.0 -7.0,-3.1 -7.0,-7.0c0.0,-3.9 3.1,-7.0 7.0,-7.0c3.9,0.0 7.0,3.1 7.0,7.0C19.0,16.9 15.9,20.0 12.0,20.0z"/>
+</vector>
diff --git a/packages/SystemUI/res/layout/status_bar_expanded_header.xml b/packages/SystemUI/res/layout/status_bar_expanded_header.xml
index 272904a..5b54eb3 100644
--- a/packages/SystemUI/res/layout/status_bar_expanded_header.xml
+++ b/packages/SystemUI/res/layout/status_bar_expanded_header.xml
@@ -87,24 +87,15 @@
android:text="@*android:string/emergency_calls_only"
android:gravity="center_vertical" />
- <RelativeLayout
- android:id="@+id/datetime"
+ <FrameLayout
+ android:id="@+id/date_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_gravity="start"
- android:paddingTop="4dp"
- android:paddingStart="16dp"
- android:paddingEnd="16dp"
- android:background="?android:attr/selectableItemBackground"
- android:enabled="false"
- >
- <include layout="@layout/split_clock_view"
- android:id="@+id/clock"
- />
-
+ android:layout_alignParentBottom="true">
<com.android.systemui.statusbar.policy.DateView android:id="@+id/date_collapsed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:layout_marginStart="16dp"
android:singleLine="true"
android:textAppearance="@style/TextAppearance.StatusBar.Expanded.Date"
android:layout_below="@id/clock"
@@ -113,12 +104,40 @@
<com.android.systemui.statusbar.policy.DateView android:id="@+id/date_expanded"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:layout_marginStart="16dp"
android:singleLine="true"
android:textAppearance="@style/TextAppearance.StatusBar.Expanded.Date"
android:layout_below="@id/clock"
systemui:datePattern="eeeeMMMMd"
/>
- </RelativeLayout>
+ </FrameLayout>
+
+ <include layout="@layout/split_clock_view"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="16dp"
+ android:layout_above="@id/date_group"
+ android:id="@+id/clock"
+ />
+
+ <Button android:id="@+id/alarm_status"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentBottom="true"
+ android:layout_toEndOf="@id/date_group"
+ android:layout_marginBottom="4dp"
+ android:drawablePadding="6dp"
+ android:drawableStart="@drawable/ic_access_alarms_small"
+ android:textColor="#64ffffff"
+ android:textAppearance="@style/TextAppearance.StatusBar.Expanded.Date"
+ android:paddingEnd="6dp"
+ android:paddingStart="6dp"
+ android:paddingTop="16dp"
+ android:paddingBottom="16dp"
+ android:background="?android:attr/selectableItemBackground"
+ android:visibility="gone"
+ />
+
<com.android.keyguard.CarrierText
android:id="@+id/keyguard_carrier_text"
android:layout_width="match_parent"
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index fbd3eb5..f9805ba 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -353,6 +353,9 @@
<!-- The padding bottom of the clock group when QS is expanded. -->
<dimen name="clock_expanded_bottom_margin">20dp</dimen>
+ <!-- The padding bottom of the clock group when QS is collapsed. -->
+ <dimen name="clock_collapsed_bottom_margin">10dp</dimen>
+
<!-- The width of the multi user switch on keyguard and collapsed QS header. -->
<dimen name="multi_user_switch_width_collapsed">34dp</dimen>
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index 0218066..a0b4b4c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -70,7 +70,6 @@ import android.os.Message;
import android.os.PowerManager;
import android.os.RemoteException;
import android.os.SystemClock;
-import android.os.Trace;
import android.os.UserHandle;
import android.provider.Settings;
import android.service.notification.NotificationListenerService.RankingMap;
@@ -130,6 +129,7 @@ import com.android.systemui.statusbar.SignalClusterView;
import com.android.systemui.statusbar.SpeedBumpView;
import com.android.systemui.statusbar.StatusBarIconView;
import com.android.systemui.statusbar.StatusBarState;
+import com.android.systemui.statusbar.policy.NextAlarmController;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback;
import com.android.systemui.statusbar.policy.BluetoothControllerImpl;
@@ -224,6 +224,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
KeyguardUserSwitcher mKeyguardUserSwitcher;
FlashlightController mFlashlightController;
UserSwitcherController mUserSwitcherController;
+ NextAlarmController mNextAlarmController;
KeyguardMonitor mKeyguardMonitor;
int mNaturalBarHeight = -1;
@@ -282,7 +283,6 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
private long mKeyguardFadingAwayDuration;
int mKeyguardMaxNotificationCount;
- View mDateTimeView;
// carrier/wifi label
private TextView mCarrierLabel;
@@ -702,12 +702,6 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
(KeyguardIndicationTextView) mStatusBarWindow.findViewById(
R.id.keyguard_indication_text));
- mDateTimeView = mHeader.findViewById(R.id.datetime);
- if (mDateTimeView != null) {
- mDateTimeView.setOnClickListener(mClockClickListener);
- mDateTimeView.setEnabled(true);
- }
-
mTickerEnabled = res.getBoolean(R.bool.enable_ticker);
if (mTickerEnabled) {
final ViewStub tickerStub = (ViewStub) mStatusBarView.findViewById(R.id.ticker_stub);
@@ -784,6 +778,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
mFlashlightController = new FlashlightController(mContext);
mKeyguardBottomArea.setFlashlightController(mFlashlightController);
mUserSwitcherController = new UserSwitcherController(mContext);
+ mNextAlarmController = new NextAlarmController(mContext);
mKeyguardMonitor = new KeyguardMonitor();
mKeyguardUserSwitcher = new KeyguardUserSwitcher(mContext,
@@ -815,6 +810,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
mUserInfoController.reloadUserInfo();
mHeader.setBatteryController(mBatteryController);
+ mHeader.setNextAlarmController(mNextAlarmController);
PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
mBroadcastReceiver.onReceive(mContext,
@@ -2802,6 +2798,9 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
if (mBatteryController != null) {
mBatteryController.dump(fd, pw, args);
}
+ if (mNextAlarmController != null) {
+ mNextAlarmController.dump(fd, pw, args);
+ }
}
private String hunStateToString(Entry entry) {
@@ -2858,6 +2857,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
public void startActivityDismissingKeyguard(final Intent intent, boolean onlyProvisioned) {
if (onlyProvisioned && !isDeviceProvisioned()) return;
+ final boolean keyguardShowing = mStatusBarKeyguardViewManager.isShowing();
dismissKeyguardThenExecute(new OnDismissAction() {
@Override
public boolean onDismiss() {
@@ -2868,7 +2868,10 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
mContext.startActivityAsUser(
intent, new UserHandle(UserHandle.USER_CURRENT));
- mWindowManagerService.overridePendingAppTransition(null, 0, 0, null);
+ if (keyguardShowing) {
+ mWindowManagerService.overridePendingAppTransition(
+ null, 0, 0, null);
+ }
} catch (RemoteException e) {
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java
index 65359ee..aaef60e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java
@@ -16,6 +16,8 @@
package com.android.systemui.statusbar.phone;
+import android.app.AlarmClockInfo;
+import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.graphics.Outline;
@@ -31,18 +33,20 @@ import android.widget.RelativeLayout;
import android.widget.Switch;
import android.widget.TextView;
+import com.android.keyguard.KeyguardStatusView;
import com.android.systemui.R;
import com.android.systemui.qs.QSPanel;
import com.android.systemui.qs.QSTile;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.KeyguardUserSwitcher;
+import com.android.systemui.statusbar.policy.NextAlarmController;
import com.android.systemui.statusbar.policy.UserInfoController;
/**
* The view to manage the header area in the expanded status bar.
*/
public class StatusBarHeaderView extends RelativeLayout implements View.OnClickListener,
- BatteryController.BatteryStateChangeCallback {
+ BatteryController.BatteryStateChangeCallback, NextAlarmController.NextAlarmChangeCallback {
private boolean mExpanded;
private boolean mListening;
@@ -52,7 +56,8 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL
private ViewGroup mSystemIconsContainer;
private View mSystemIconsSuperContainer;
- private View mDateTime;
+ private View mDateGroup;
+ private View mClock;
private View mTime;
private View mAmPm;
private View mKeyguardCarrierText;
@@ -68,9 +73,12 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL
private Switch mQsDetailHeaderSwitch;
private View mEmergencyCallsOnly;
private TextView mBatteryLevel;
+ private TextView mAlarmStatus;
private boolean mShowEmergencyCallsOnly;
private boolean mKeyguardUserSwitcherShowing;
+ private boolean mAlarmShowing;
+ private AlarmClockInfo mNextAlarm;
private int mCollapsedHeight;
private int mExpandedHeight;
@@ -84,6 +92,7 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL
private int mMultiUserKeyguardMargin;
private int mSystemIconsSwitcherHiddenExpandedMargin;
private int mClockMarginBottomExpanded;
+ private int mClockMarginBottomCollapsed;
private int mMultiUserSwitchWidthCollapsed;
private int mMultiUserSwitchWidthExpanded;
private int mBatteryPaddingEnd;
@@ -97,6 +106,7 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL
private ActivityStarter mActivityStarter;
private BatteryController mBatteryController;
+ private NextAlarmController mNextAlarmController;
private QSPanel mQSPanel;
private KeyguardUserSwitcher mKeyguardUserSwitcher;
@@ -113,7 +123,8 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL
mSystemIconsSuperContainer = findViewById(R.id.system_icons_super_container);
mSystemIconsContainer = (ViewGroup) findViewById(R.id.system_icons_container);
mSystemIconsSuperContainer.setOnClickListener(this);
- mDateTime = findViewById(R.id.datetime);
+ mDateGroup = findViewById(R.id.date_group);
+ mClock = findViewById(R.id.clock);
mTime = findViewById(R.id.time_view);
mAmPm = findViewById(R.id.am_pm_view);
mKeyguardCarrierText = findViewById(R.id.keyguard_carrier_text);
@@ -129,6 +140,8 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL
mQsDetailHeaderSwitch = (Switch) mQsDetailHeader.findViewById(android.R.id.toggle);
mEmergencyCallsOnly = findViewById(R.id.header_emergency_calls_only);
mBatteryLevel = (TextView) findViewById(R.id.battery_level);
+ mAlarmStatus = (TextView) findViewById(R.id.alarm_status);
+ mAlarmStatus.setOnClickListener(this);
loadDimens();
updateVisibilities();
updateClockScale();
@@ -175,6 +188,8 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL
R.dimen.system_icons_switcher_hidden_expanded_margin);
mClockMarginBottomExpanded =
getResources().getDimensionPixelSize(R.dimen.clock_expanded_bottom_margin);
+ mClockMarginBottomCollapsed =
+ getResources().getDimensionPixelSize(R.dimen.clock_collapsed_bottom_margin);
mMultiUserSwitchWidthCollapsed =
getResources().getDimensionPixelSize(R.dimen.multi_user_switch_width_collapsed);
mMultiUserSwitchWidthExpanded =
@@ -197,6 +212,10 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL
mBatteryController = batteryController;
}
+ public void setNextAlarmController(NextAlarmController nextAlarmController) {
+ mNextAlarmController = nextAlarmController;
+ }
+
public int getCollapsedHeight() {
return mKeyguardShowing ? mKeyguardHeight : mCollapsedHeight;
}
@@ -210,7 +229,7 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL
return;
}
mListening = listening;
- updateBatteryListening();
+ updateListeners();
}
public void setExpanded(boolean expanded, boolean overscrolled) {
@@ -282,10 +301,15 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL
} else {
setBackgroundResource(R.drawable.notification_header_bg);
}
- mDateTime.setVisibility(onKeyguardAndCollapsed ? View.INVISIBLE : View.VISIBLE);
+ mDateGroup.setVisibility(onKeyguardAndCollapsed ? View.INVISIBLE : View.VISIBLE);
+ mClock.setVisibility(onKeyguardAndCollapsed ? View.INVISIBLE : View.VISIBLE);
mKeyguardCarrierText.setVisibility(onKeyguardAndCollapsed ? View.VISIBLE : View.GONE);
- mDateCollapsed.setVisibility(mExpanded && !mOverscrolled ? View.GONE : View.VISIBLE);
- mDateExpanded.setVisibility(mExpanded && !mOverscrolled ? View.VISIBLE : View.GONE);
+ mDateCollapsed.setVisibility(mExpanded && !mOverscrolled && mAlarmShowing
+ ? View.VISIBLE : View.GONE);
+ mDateExpanded.setVisibility(mExpanded && !mOverscrolled && mAlarmShowing
+ ? View.GONE : View.VISIBLE);
+ mAlarmStatus.setVisibility(mExpanded && !mOverscrolled && mAlarmShowing
+ ? View.VISIBLE : View.GONE);
mSettingsButton.setVisibility(mExpanded && !mOverscrolled ? View.VISIBLE : View.GONE);
mQsDetailHeader.setVisibility(mExpanded ? View.VISIBLE : View.GONE);
if (mStatusIcons != null) {
@@ -319,11 +343,13 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL
mSystemIconsSuperContainer.setLayoutParams(lp);
}
- private void updateBatteryListening() {
+ private void updateListeners() {
if (mListening) {
mBatteryController.addStateChangedCallback(this);
+ mNextAlarmController.addStateChangedCallback(this);
} else {
mBatteryController.removeStateChangedCallback(this);
+ mNextAlarmController.removeStateChangedCallback(this);
}
}
@@ -375,15 +401,26 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL
// could not care less
}
+ @Override
+ public void onNextAlarmChanged(AlarmClockInfo nextAlarm) {
+ mNextAlarm = nextAlarm;
+ if (nextAlarm != null) {
+ mAlarmStatus.setText(KeyguardStatusView.formatNextAlarm(getContext(), nextAlarm));
+ }
+ mAlarmShowing = nextAlarm != null;
+ updateVisibilities();
+ }
+
+
private void updateClickTargets() {
setClickable(!mKeyguardShowing || mExpanded);
- mDateTime.setClickable(mExpanded);
boolean keyguardSwitcherAvailable =
mKeyguardUserSwitcher != null && mKeyguardShowing && !mExpanded;
mMultiUserSwitch.setClickable(mExpanded || keyguardSwitcherAvailable);
mMultiUserSwitch.setKeyguardMode(keyguardSwitcherAvailable);
mSystemIconsSuperContainer.setClickable(mExpanded);
+ mAlarmStatus.setClickable(mNextAlarm != null && mNextAlarm.getShowIntent() != null);
}
private void updateZTranslation() {
@@ -404,14 +441,13 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL
}
private void updateClockLp() {
- int marginBottom = mExpanded && !mOverscrolled ? mClockMarginBottomExpanded : 0;
- LayoutParams lp = (LayoutParams) mDateTime.getLayoutParams();
- int rule = mExpanded && !mOverscrolled ? TRUE : 0;
- if (marginBottom != lp.bottomMargin
- || lp.getRules()[RelativeLayout.ALIGN_PARENT_BOTTOM] != rule) {
+ int marginBottom = mExpanded && !mOverscrolled
+ ? mClockMarginBottomExpanded
+ : mClockMarginBottomCollapsed;
+ LayoutParams lp = (LayoutParams) mDateGroup.getLayoutParams();
+ if (marginBottom != lp.bottomMargin) {
lp.bottomMargin = marginBottom;
- lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, rule);
- mDateTime.setLayoutParams(lp);
+ mDateGroup.setLayoutParams(lp);
}
}
@@ -499,6 +535,11 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL
startSettingsActivity();
} else if (v == mSystemIconsSuperContainer) {
startBatteryActivity();
+ } else if (v == mAlarmStatus && mNextAlarm != null) {
+ PendingIntent showIntent = mNextAlarm.getShowIntent();
+ if (showIntent != null && showIntent.isActivity()) {
+ mActivityStarter.startActivity(showIntent.getIntent());
+ }
}
}
@@ -613,7 +654,8 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL
private void handleShowingDetail(final QSTile.DetailAdapter detail) {
final boolean showingDetail = detail != null;
- transition(mDateTime, !showingDetail);
+ transition(mClock, !showingDetail);
+ transition(mDateGroup, !showingDetail);
transition(mQsDetailHeader, showingDetail);
if (showingDetail) {
mQsDetailHeaderTitle.setText(detail.getTitle());
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NextAlarmController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NextAlarmController.java
new file mode 100644
index 0000000..ca71521
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NextAlarmController.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2014 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.policy;
+
+import android.app.AlarmClockInfo;
+import android.app.AlarmManager;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.UserHandle;
+
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+
+public class NextAlarmController extends BroadcastReceiver {
+
+ private final ArrayList<NextAlarmChangeCallback> mChangeCallbacks = new ArrayList<>();
+
+ private AlarmManager mAlarmManager;
+ private AlarmClockInfo mNextAlarm;
+
+ public NextAlarmController(Context context) {
+ mAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
+ IntentFilter filter = new IntentFilter();
+ filter.addAction(Intent.ACTION_USER_SWITCHED);
+ filter.addAction(AlarmManager.ACTION_NEXT_ALARM_CLOCK_CHANGED);
+ context.registerReceiver(this, filter);
+ updateNextAlarm();
+ }
+
+ public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
+ pw.println("NextAlarmController state:");
+ pw.print(" mNextAlarm="); pw.println(mNextAlarm);
+ }
+
+ public void addStateChangedCallback(NextAlarmChangeCallback cb) {
+ mChangeCallbacks.add(cb);
+ cb.onNextAlarmChanged(mNextAlarm);
+ }
+
+ public void removeStateChangedCallback(NextAlarmChangeCallback cb) {
+ mChangeCallbacks.remove(cb);
+ }
+
+ public void onReceive(Context context, Intent intent) {
+ final String action = intent.getAction();
+ if (action.equals(Intent.ACTION_USER_SWITCHED)
+ || action.equals(AlarmManager.ACTION_NEXT_ALARM_CLOCK_CHANGED)) {
+ updateNextAlarm();
+ }
+ }
+
+ private void updateNextAlarm() {
+ mNextAlarm = mAlarmManager.getNextAlarmClock(UserHandle.USER_CURRENT);
+ fireNextAlarmChanged();
+ }
+
+ private void fireNextAlarmChanged() {
+ int n = mChangeCallbacks.size();
+ for (int i = 0; i < n; i++) {
+ mChangeCallbacks.get(i).onNextAlarmChanged(mNextAlarm);
+ }
+ }
+
+ public interface NextAlarmChangeCallback {
+ void onNextAlarmChanged(AlarmClockInfo nextAlarm);
+ }
+}