summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/java/android/app/StatusBarManager.java12
-rw-r--r--packages/SystemUI/res/anim/navigation_in.xml22
-rw-r--r--packages/SystemUI/res/anim/navigation_out.xml22
-rw-r--r--packages/SystemUI/res/anim/system_in.xml22
-rw-r--r--packages/SystemUI/res/anim/system_out.xml22
-rw-r--r--packages/SystemUI/res/layout-xlarge/status_bar.xml78
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBarService.java158
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletTicker.java13
-rw-r--r--tests/StatusBar/src/com/android/statusbartest/StatusBarTest.java18
9 files changed, 246 insertions, 121 deletions
diff --git a/core/java/android/app/StatusBarManager.java b/core/java/android/app/StatusBarManager.java
index de544fb..fa7f794 100644
--- a/core/java/android/app/StatusBarManager.java
+++ b/core/java/android/app/StatusBarManager.java
@@ -55,6 +55,18 @@ public class StatusBarManager {
public static final int DISABLE_NOTIFICATION_TICKER = 0x00000008;
/**
+ * Flag for {@link #disable} to hide the center system info area.
+ */
+ public static final int DISABLE_SYSTEM_INFO = 0x00000010;
+
+ /**
+ * Flag for {@link #disable} to hide only the navigation buttons. Don't use this
+ * unless you're the setup wizard.
+ */
+ public static final int DISABLE_NAVIGATION = 0x00000020;
+
+
+ /**
* Re-enable all of the status bar features that you've disabled.
*/
public static final int DISABLE_NONE = 0x00000000;
diff --git a/packages/SystemUI/res/anim/navigation_in.xml b/packages/SystemUI/res/anim/navigation_in.xml
new file mode 100644
index 0000000..630fd72
--- /dev/null
+++ b/packages/SystemUI/res/anim/navigation_in.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 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.
+-->
+
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+ >
+ <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
+ android:duration="@android:integer/config_longAnimTime"
+ />
+</set>
diff --git a/packages/SystemUI/res/anim/navigation_out.xml b/packages/SystemUI/res/anim/navigation_out.xml
new file mode 100644
index 0000000..4717e47
--- /dev/null
+++ b/packages/SystemUI/res/anim/navigation_out.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 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.
+-->
+
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+ >
+ <alpha android:toAlpha="0.0" android:fromAlpha="1.0"
+ android:duration="@android:integer/config_longAnimTime"
+ />
+</set>
diff --git a/packages/SystemUI/res/anim/system_in.xml b/packages/SystemUI/res/anim/system_in.xml
new file mode 100644
index 0000000..630fd72
--- /dev/null
+++ b/packages/SystemUI/res/anim/system_in.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 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.
+-->
+
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+ >
+ <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
+ android:duration="@android:integer/config_longAnimTime"
+ />
+</set>
diff --git a/packages/SystemUI/res/anim/system_out.xml b/packages/SystemUI/res/anim/system_out.xml
new file mode 100644
index 0000000..4717e47
--- /dev/null
+++ b/packages/SystemUI/res/anim/system_out.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 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.
+-->
+
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+ >
+ <alpha android:toAlpha="0.0" android:fromAlpha="1.0"
+ android:duration="@android:integer/config_longAnimTime"
+ />
+</set>
diff --git a/packages/SystemUI/res/layout-xlarge/status_bar.xml b/packages/SystemUI/res/layout-xlarge/status_bar.xml
index 5741a66..6aee011 100644
--- a/packages/SystemUI/res/layout-xlarge/status_bar.xml
+++ b/packages/SystemUI/res/layout-xlarge/status_bar.xml
@@ -119,46 +119,50 @@
android:layout_centerInParent="true"
/>
- <com.android.systemui.statusbar.KeyButtonView android:id="@+id/menu"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:layout_toLeftOf="@+id/recent"
- android:src="@drawable/ic_sysbar_menu"
- android:background="@drawable/ic_sysbar_icon_bg"
- android:paddingLeft="4dip"
- android:paddingRight="4dip"
- systemui:keyCode="82"
- />
- <ImageButton android:id="@+id/recent"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:layout_toLeftOf="@+id/home"
- android:src="@drawable/ic_sysbar_recent"
- android:background="@drawable/ic_sysbar_icon_bg"
- android:paddingLeft="4dip"
- android:paddingRight="4dip"
- android:onClick="recentButtonClicked"
- />
- <com.android.systemui.statusbar.KeyButtonView android:id="@+id/home"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:layout_toLeftOf="@+id/back"
- android:paddingLeft="4dip"
- android:paddingRight="4dip"
- android:src="@drawable/ic_sysbar_home"
- android:background="@drawable/ic_sysbar_icon_bg"
- systemui:keyCode="3"
- />
- <com.android.systemui.statusbar.KeyButtonView android:id="@+id/back"
+ <LinearLayout
+ android:id="@+id/navigationArea"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
- android:paddingLeft="4dip"
- android:paddingRight="4dip"
- android:src="@drawable/ic_sysbar_back"
- android:background="@drawable/ic_sysbar_icon_bg"
- systemui:keyCode="4"
- />
+ android:orientation="horizontal"
+ >
+ <com.android.systemui.statusbar.KeyButtonView android:id="@+id/menu"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:src="@drawable/ic_sysbar_menu"
+ android:background="@drawable/ic_sysbar_icon_bg"
+ android:paddingLeft="4dip"
+ android:paddingRight="4dip"
+ systemui:keyCode="82"
+ />
+ <ImageButton android:id="@+id/recent"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:src="@drawable/ic_sysbar_recent"
+ android:background="@drawable/ic_sysbar_icon_bg"
+ android:paddingLeft="4dip"
+ android:paddingRight="4dip"
+ android:onClick="recentButtonClicked"
+ />
+ <com.android.systemui.statusbar.KeyButtonView android:id="@+id/home"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:paddingLeft="4dip"
+ android:paddingRight="4dip"
+ android:src="@drawable/ic_sysbar_home"
+ android:background="@drawable/ic_sysbar_icon_bg"
+ systemui:keyCode="3"
+ />
+ <com.android.systemui.statusbar.KeyButtonView android:id="@+id/back"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:paddingLeft="4dip"
+ android:paddingRight="4dip"
+ android:src="@drawable/ic_sysbar_back"
+ android:background="@drawable/ic_sysbar_icon_bg"
+ systemui:keyCode="4"
+ />
+ </LinearLayout>
</RelativeLayout>
<!-- It's curtains for you. -->
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBarService.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBarService.java
index 49337fd..ffa1690 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBarService.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBarService.java
@@ -78,6 +78,7 @@ public class TabletStatusBarService extends StatusBarService {
NotificationIconArea mNotificationIconArea;
View mNotificationButtons;
View mSystemInfo;
+ View mNavigationArea;
NotificationPanel mNotificationPanel;
SystemPanel mSystemPanel;
@@ -98,7 +99,6 @@ public class TabletStatusBarService extends StatusBarService {
TabletTicker mTicker;
View mTickerView;
boolean mTicking;
- boolean mExpandedVisible;
// for disabling the status bar
int mDisabled = 0;
@@ -203,6 +203,9 @@ public class TabletStatusBarService extends StatusBarService {
mSignalMeter = (ImageView) sb.findViewById(R.id.signal);
mSignalIcon = (ImageView) sb.findViewById(R.id.signal_icon);
+ // The navigation buttons
+ mNavigationArea = sb.findViewById(R.id.navigationArea);
+
// Add the windows
addPanelWindows();
@@ -224,24 +227,26 @@ public class TabletStatusBarService extends StatusBarService {
switch (m.what) {
case MSG_OPEN_NOTIFICATION_PANEL:
if (DEBUG) Slog.d(TAG, "opening notifications panel");
- mDoNotDisturbButton.setText(mNotificationsOn
- ? R.string.status_bar_do_not_disturb_button
- : R.string.status_bar_please_disturb_button);
- mNotificationPanel.setVisibility(View.VISIBLE);
- mNotificationIconArea.setAnimation(loadAnim(R.anim.notification_icons_out));
- mNotificationIconArea.setVisibility(View.GONE);
- mNotificationButtons.setAnimation(loadAnim(R.anim.notification_icons_in));
- mNotificationButtons.setVisibility(View.VISIBLE);
- mExpandedVisible = true;
+ if (mNotificationPanel.getVisibility() == View.GONE) {
+ mDoNotDisturbButton.setText(mNotificationsOn
+ ? R.string.status_bar_do_not_disturb_button
+ : R.string.status_bar_please_disturb_button);
+ mNotificationPanel.setVisibility(View.VISIBLE);
+ setViewVisibility(mNotificationIconArea, View.GONE,
+ R.anim.notification_icons_out);
+ setViewVisibility(mNotificationButtons, View.VISIBLE,
+ R.anim.notification_buttons_in);
+ }
break;
case MSG_CLOSE_NOTIFICATION_PANEL:
if (DEBUG) Slog.d(TAG, "closing notifications panel");
- mNotificationPanel.setVisibility(View.GONE);
- mNotificationIconArea.setAnimation(loadAnim(R.anim.notification_icons_in));
- mNotificationIconArea.setVisibility(View.VISIBLE);
- mNotificationButtons.setAnimation(loadAnim(R.anim.notification_buttons_out));
- mNotificationButtons.setVisibility(View.GONE);
- mExpandedVisible = false;
+ if (mNotificationPanel.getVisibility() == View.VISIBLE) {
+ mNotificationPanel.setVisibility(View.GONE);
+ setViewVisibility(mNotificationIconArea, View.VISIBLE,
+ R.anim.notification_icons_in);
+ setViewVisibility(mNotificationButtons, View.GONE,
+ R.anim.notification_buttons_out);
+ }
break;
case MSG_OPEN_SYSTEM_PANEL:
if (DEBUG) Slog.d(TAG, "opening system panel");
@@ -390,11 +395,14 @@ public class TabletStatusBarService extends StatusBarService {
}
public void disable(int state) {
- /*
- final int old = mDisabled;
- final int diff = state ^ old;
+ int old = mDisabled;
+ int diff = state ^ old;
+ Slog.d(TAG, "disable... old=0x" + Integer.toHexString(old)
+ + " diff=0x" + Integer.toHexString(diff)
+ + " state=0x" + Integer.toHexString(state));
mDisabled = state;
+ // act accordingly
if ((diff & StatusBarManager.DISABLE_EXPAND) != 0) {
if ((state & StatusBarManager.DISABLE_EXPAND) != 0) {
Slog.d(TAG, "DISABLE_EXPAND: yes");
@@ -404,60 +412,41 @@ public class TabletStatusBarService extends StatusBarService {
if ((diff & StatusBarManager.DISABLE_NOTIFICATION_ICONS) != 0) {
if ((state & StatusBarManager.DISABLE_NOTIFICATION_ICONS) != 0) {
Slog.d(TAG, "DISABLE_NOTIFICATION_ICONS: yes");
- if (mTicking) {
- mTicker.halt();
- } else {
- mNotificationIconArea.setVisibility(View.INVISIBLE);
- }
+ setViewVisibility(mNotificationTrigger, View.GONE,
+ R.anim.notification_icons_out);
+ setViewVisibility(mNotificationIconArea, View.GONE,
+ R.anim.notification_icons_out);
+ mTicker.halt();
} else {
Slog.d(TAG, "DISABLE_NOTIFICATION_ICONS: no");
- if (!mExpandedVisible) {
- mNotificationIconArea.setVisibility(View.VISIBLE);
- }
+ setViewVisibility(mNotificationTrigger, View.VISIBLE,
+ R.anim.notification_icons_in);
+ setViewVisibility(mNotificationIconArea, View.VISIBLE,
+ R.anim.notification_icons_in);
}
} else if ((diff & StatusBarManager.DISABLE_NOTIFICATION_TICKER) != 0) {
- if (mTicking && (state & StatusBarManager.DISABLE_NOTIFICATION_TICKER) != 0) {
- Slog.d(TAG, "DISABLE_NOTIFICATION_TICKER: yes");
+ if ((state & StatusBarManager.DISABLE_NOTIFICATION_TICKER) != 0) {
mTicker.halt();
}
}
- */
- }
-
- void performDisableActions(int net) {
- /*
- int old = mDisabled;
- int diff = net ^ old;
- mDisabled = net;
-
- // act accordingly
- if ((diff & StatusBarManager.DISABLE_EXPAND) != 0) {
- if ((net & StatusBarManager.DISABLE_EXPAND) != 0) {
- Slog.d(TAG, "DISABLE_EXPAND: yes");
- animateCollapse();
+ if ((diff & StatusBarManager.DISABLE_SYSTEM_INFO) != 0) {
+ if ((state & StatusBarManager.DISABLE_SYSTEM_INFO) != 0) {
+ Slog.d(TAG, "DISABLE_SYSTEM_INFO: yes");
+ setViewVisibility(mSystemInfo, View.GONE, R.anim.navigation_out);
+ } else {
+ Slog.d(TAG, "DISABLE_SYSTEM_INFO: no");
+ setViewVisibility(mSystemInfo, View.VISIBLE, R.anim.navigation_in);
}
}
- if ((diff & StatusBarManager.DISABLE_NOTIFICATION_ICONS) != 0) {
- if ((net & StatusBarManager.DISABLE_NOTIFICATION_ICONS) != 0) {
- Slog.d(TAG, "DISABLE_NOTIFICATION_ICONS: yes");
- if (mTicking) {
- mNotificationIconArea.setVisibility(View.INVISIBLE);
- mTicker.halt();
- } else {
- mNotificationIconArea.setVisibility(View.INVISIBLE);
- }
+ if ((diff & StatusBarManager.DISABLE_NAVIGATION) != 0) {
+ if ((state & StatusBarManager.DISABLE_NAVIGATION) != 0) {
+ Slog.d(TAG, "DISABLE_NAVIGATION: yes");
+ setViewVisibility(mNavigationArea, View.GONE, R.anim.navigation_out);
} else {
- Slog.d(TAG, "DISABLE_NOTIFICATION_ICONS: no");
- if (!mExpandedVisible) {
- mNotificationIconArea.setVisibility(View.VISIBLE);
- }
- }
- } else if ((diff & StatusBarManager.DISABLE_NOTIFICATION_TICKER) != 0) {
- if (mTicking && (net & StatusBarManager.DISABLE_NOTIFICATION_TICKER) != 0) {
- mTicker.halt();
+ Slog.d(TAG, "DISABLE_NAVIGATION: no");
+ setViewVisibility(mNavigationArea, View.VISIBLE, R.anim.navigation_in);
}
}
- */
}
private boolean hasTicker(Notification n) {
@@ -497,35 +486,35 @@ public class TabletStatusBarService extends StatusBarService {
public void setLightsOn(boolean on) {
if (on) {
- mCurtains.setAnimation(loadAnim(R.anim.lights_out_out));
- mCurtains.setVisibility(View.GONE);
- mBarContents.setAnimation(loadAnim(R.anim.status_bar_in));
- mBarContents.setVisibility(View.VISIBLE);
+ setViewVisibility(mCurtains, View.GONE, R.anim.lights_out_out);
+ setViewVisibility(mBarContents, View.VISIBLE, R.anim.status_bar_in);
} else {
animateCollapse();
- mCurtains.setAnimation(loadAnim(R.anim.lights_out_in));
- mCurtains.setVisibility(View.VISIBLE);
- mBarContents.setAnimation(loadAnim(R.anim.status_bar_out));
- mBarContents.setVisibility(View.GONE);
+ setViewVisibility(mCurtains, View.VISIBLE, R.anim.lights_out_in);
+ setViewVisibility(mBarContents, View.GONE, R.anim.status_bar_out);
}
}
public void notificationIconsClicked(View v) {
if (DEBUG) Slog.d(TAG, "clicked notification icons");
- int msg = (mNotificationPanel.getVisibility() == View.GONE)
- ? MSG_OPEN_NOTIFICATION_PANEL
- : MSG_CLOSE_NOTIFICATION_PANEL;
- mHandler.removeMessages(msg);
- mHandler.sendEmptyMessage(msg);
+ if ((mDisabled & StatusBarManager.DISABLE_EXPAND) == 0) {
+ int msg = (mNotificationPanel.getVisibility() == View.GONE)
+ ? MSG_OPEN_NOTIFICATION_PANEL
+ : MSG_CLOSE_NOTIFICATION_PANEL;
+ mHandler.removeMessages(msg);
+ mHandler.sendEmptyMessage(msg);
+ }
}
public void systemInfoClicked(View v) {
if (DEBUG) Slog.d(TAG, "clicked system info");
- int msg = (mSystemPanel.getVisibility() == View.GONE)
- ? MSG_OPEN_SYSTEM_PANEL
- : MSG_CLOSE_SYSTEM_PANEL;
- mHandler.removeMessages(msg);
- mHandler.sendEmptyMessage(msg);
+ if ((mDisabled & StatusBarManager.DISABLE_EXPAND) == 0) {
+ int msg = (mSystemPanel.getVisibility() == View.GONE)
+ ? MSG_OPEN_SYSTEM_PANEL
+ : MSG_CLOSE_SYSTEM_PANEL;
+ mHandler.removeMessages(msg);
+ mHandler.sendEmptyMessage(msg);
+ }
}
public void recentButtonClicked(View v) {
@@ -690,10 +679,6 @@ public class TabletStatusBarService extends StatusBarService {
}
}
- Animation loadAnim(int id) {
- return AnimationUtils.loadAnimation((Context)this, id);
- }
-
private boolean inflateViews(NotificationData.Entry entry, ViewGroup parent) {
StatusBarNotification sbn = entry.notification;
RemoteViews remoteViews = sbn.notification.contentView;
@@ -802,6 +787,13 @@ public class TabletStatusBarService extends StatusBarService {
return false;
}
}
+
+ private void setViewVisibility(View v, int vis, int anim) {
+ if (v.getVisibility() != vis) {
+ v.setAnimation(AnimationUtils.loadAnimation((Context)this, anim));
+ v.setVisibility(vis);
+ }
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletTicker.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletTicker.java
index 7ac7919..3c3139f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletTicker.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletTicker.java
@@ -59,7 +59,6 @@ public class TabletTicker extends Handler {
// TODO: Make this a configuration value.
// 3 is enough to let us see most cases, but not get so far behind that it's annoying.
- int mQueuePos = 0;
mQueue = new StatusBarNotification[3];
}
@@ -80,6 +79,18 @@ public class TabletTicker extends Handler {
}
}
+ public void halt() {
+ removeMessages(MSG_ADVANCE);
+ if (mCurrentView != null) {
+ final int N = mQueue.length;
+ for (int i=0; i<N; i++) {
+ mQueue[i] = null;
+ }
+ mQueuePos = 0;
+ sendEmptyMessage(MSG_ADVANCE);
+ }
+ }
+
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_ADVANCE:
diff --git a/tests/StatusBar/src/com/android/statusbartest/StatusBarTest.java b/tests/StatusBar/src/com/android/statusbartest/StatusBarTest.java
index e31711e..ca438ec 100644
--- a/tests/StatusBar/src/com/android/statusbartest/StatusBarTest.java
+++ b/tests/StatusBar/src/com/android/statusbartest/StatusBarTest.java
@@ -147,6 +147,24 @@ public class StatusBarTest extends TestActivity
}, 3000);
}
},
+ new Test("Disable Navigation") {
+ public void run() {
+ mStatusBarManager.disable(StatusBarManager.DISABLE_NAVIGATION);
+ }
+ },
+ new Test("Disable everything in 3 sec") {
+ public void run() {
+ mHandler.postDelayed(new Runnable() {
+ public void run() {
+ mStatusBarManager.disable(StatusBarManager.DISABLE_EXPAND
+ | StatusBarManager.DISABLE_NOTIFICATION_ICONS
+ | StatusBarManager.DISABLE_NOTIFICATION_ALERTS
+ | StatusBarManager.DISABLE_SYSTEM_INFO
+ | StatusBarManager.DISABLE_NAVIGATION);
+ }
+ }, 3000);
+ }
+ },
new Test("Enable everything") {
public void run() {
mStatusBarManager.disable(0);