summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Sandler <dsandler@google.com>2010-12-14 12:14:53 -0500
committerDaniel Sandler <dsandler@google.com>2010-12-15 20:53:32 -0500
commit0ad460b087abbd4b523a2e61ff27b0bf6fb5be92 (patch)
tree5e63e34a16d52d0d59618f80c0e32584437b917d
parentb146b1214ef6e4fc75d98779b22434335764cfdb (diff)
downloadframeworks_base-0ad460b087abbd4b523a2e61ff27b0bf6fb5be92.zip
frameworks_base-0ad460b087abbd4b523a2e61ff27b0bf6fb5be92.tar.gz
frameworks_base-0ad460b087abbd4b523a2e61ff27b0bf6fb5be92.tar.bz2
Look again; the system bar is now diamonds.
Lights Out 3.0 (bug 3241144) - new artwork - new transition animations - new interaction (tap anywhere to dismiss & interact) - much simpler overall design and implementation Layout (bug 3242949) - fine-tuned spacing on navigation and notification icons - notification icon spacing compresses in portrait Shirt Pocket (bug 3203179) - disabled for now Bug: 3241144 Bug: 3242949 Bug: 3203179 Change-Id: I6e9b7f9ebe07317d07609f11d5f03f22269bc7bb
-rw-r--r--core/res/res/values-xlarge/dimens.xml5
-rw-r--r--packages/SystemUI/res/drawable-mdpi/ic_sysbar_lights_out_dot_large.pngbin0 -> 3088 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/ic_sysbar_lights_out_dot_small.pngbin0 -> 3050 bytes
-rw-r--r--packages/SystemUI/res/layout-xlarge/status_bar.xml293
-rw-r--r--packages/SystemUI/res/layout-xlarge/status_bar_notification_area.xml128
-rw-r--r--packages/SystemUI/res/values-xlarge-port/dimens.xml24
-rw-r--r--packages/SystemUI/res/values-xlarge/dimens.xml4
-rw-r--r--packages/SystemUI/src/com/android/systemui/SystemUI.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/SystemUIService.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/tablet/ShirtPocket.java96
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java175
11 files changed, 381 insertions, 356 deletions
diff --git a/core/res/res/values-xlarge/dimens.xml b/core/res/res/values-xlarge/dimens.xml
index 8f590b7..7353f16 100644
--- a/core/res/res/values-xlarge/dimens.xml
+++ b/core/res/res/values-xlarge/dimens.xml
@@ -18,9 +18,10 @@
*/
-->
<resources>
- <dimen name="status_bar_height">48dip</dimen>
<!-- Height of the status bar -->
- <dimen name="status_bar_icon_size">48dip</dimen>
+ <dimen name="status_bar_height">48dip</dimen>
+ <!-- Width and height of a single notification icon in the status bar -->
+ <dimen name="status_bar_icon_size">32dip</dimen>
<!-- Size of the giant number (unread count) in the notifications -->
<dimen name="status_bar_content_number_size">48sp</dimen>
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_lights_out_dot_large.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_lights_out_dot_large.png
new file mode 100644
index 0000000..f865e7a
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_lights_out_dot_large.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_lights_out_dot_small.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_lights_out_dot_small.png
new file mode 100644
index 0000000..04588bb
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_lights_out_dot_small.png
Binary files differ
diff --git a/packages/SystemUI/res/layout-xlarge/status_bar.xml b/packages/SystemUI/res/layout-xlarge/status_bar.xml
index 8a01a12..ec57de3 100644
--- a/packages/SystemUI/res/layout-xlarge/status_bar.xml
+++ b/packages/SystemUI/res/layout-xlarge/status_bar.xml
@@ -15,266 +15,125 @@
* limitations under the License.
-->
-<!-- android:background="@drawable/status_bar_closed_default_background" -->
+<!-- TabletStatusBarView extends FrameLayout -->
<com.android.systemui.statusbar.tablet.TabletStatusBarView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
android:background="@drawable/status_bar_background"
>
- <RelativeLayout
- android:id="@+id/bar_contents"
+
+ <FrameLayout
+ android:id="@+id/bar_contents_holder"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
-
- <!-- notification icons & panel access -->
- <LinearLayout
- android:id="@+id/notificationArea"
- android:layout_width="wrap_content"
+ <RelativeLayout
+ android:id="@+id/bar_contents"
+ android:layout_width="match_parent"
android:layout_height="match_parent"
- android:layout_alignParentRight="true"
- android:orientation="horizontal"
>
- <com.android.systemui.statusbar.tablet.InputMethodButton
- android:id="@+id/imeSwitchButton"
+
+ <!-- notification icons & panel access -->
+ <include layout="@layout/status_bar_notification_area"
android:layout_width="wrap_content"
android:layout_height="match_parent"
- android:layout_marginLeft="8dip"
- android:src="@drawable/ic_sysbar_ime_default"
- android:visibility="gone"
+ android:layout_alignParentRight="true"
/>
- <com.android.systemui.statusbar.tablet.NotificationIconArea
- android:id="@+id/notificationIcons"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:orientation="horizontal"
- >
- <view
- class="com.android.systemui.statusbar.tablet.NotificationIconArea$IconLayout"
- android:id="@+id/icons"
- android:layout_width="wrap_content"
- android:layout_height="@*android:dimen/status_bar_icon_size"
- android:layout_gravity="top"
- android:layout_marginTop="5dp"
- android:layout_marginLeft="8dp"
- />
- </com.android.systemui.statusbar.tablet.NotificationIconArea>
+ <!-- navigation controls -->
<LinearLayout
- android:id="@+id/notificationTrigger"
+ android:id="@+id/navigationArea"
android:layout_width="wrap_content"
android:layout_height="match_parent"
+ android:layout_alignParentLeft="true"
+ android:orientation="horizontal"
>
- <com.android.systemui.statusbar.tablet.HoloClock
- android:id="@+id/clock"
- android:layout_width="wrap_content"
- 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="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>
- <TextView
- android:id="@+id/network_text"
- android:layout_width="wrap_content"
+ <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/back"
+ android:layout_width="80dip"
android:layout_height="match_parent"
- android:layout_marginTop="12dp"
- android:layout_marginRight="6dip"
- android:layout_marginLeft="6dip"
- android:gravity="center"
- android:singleLine="true"
- android:visibility="gone"
- android:textSize="14dip"
- android:textColor="#606060"
+ android:src="@drawable/ic_sysbar_back"
+ systemui:keyCode="4"
/>
-
- <LinearLayout
- android:id="@+id/signal_battery_cluster"
- android:layout_width="wrap_content"
+ <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/home"
+ android:layout_width="80dip"
android:layout_height="match_parent"
- android:orientation="horizontal"
- android:gravity="center"
- >
- <FrameLayout
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:layout_gravity="top"
- android:layout_marginTop="19dp"
- android:layout_marginRight="4dp"
- >
- <ImageView
- android:id="@+id/network_signal"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- />
- <ImageView
- android:id="@+id/network_type"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- />
- </FrameLayout>
- <ImageView
- android:id="@+id/battery"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:layout_gravity="top"
- android:layout_marginTop="19dp"
- android:layout_marginLeft="2dp"
- android:layout_marginRight="2dp"
- />
- </LinearLayout>
+ android:src="@drawable/ic_sysbar_home"
+ systemui:keyCode="3"
+ />
+ <ImageView android:id="@+id/recent_apps"
+ android:layout_width="80dip"
+ android:layout_height="match_parent"
+ android:src="@drawable/ic_sysbar_recent"
+ />
+ <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/menu"
+ android:layout_width="80dip"
+ android:layout_height="match_parent"
+ android:src="@drawable/ic_sysbar_menu"
+ systemui:keyCode="82"
+ android:visibility="invisible"
+ />
</LinearLayout>
- </LinearLayout>
-
- <!-- navigation controls -->
- <LinearLayout
- android:id="@+id/navigationArea"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:layout_alignParentLeft="true"
- android:orientation="horizontal"
- >
- <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/back"
- android:layout_width="96dip"
+ <!-- fake space bar zone -->
+ <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/fake_space_bar"
android:layout_height="match_parent"
- android:paddingLeft="18dip"
- android:paddingRight="18dip"
- android:src="@drawable/ic_sysbar_back"
- systemui:keyCode="4"
- />
- <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/home"
- android:layout_width="96dip"
- android:layout_height="match_parent"
- android:paddingLeft="18dip"
- android:paddingRight="18dip"
- android:src="@drawable/ic_sysbar_home"
- systemui:keyCode="3"
- />
- <ImageButton android:id="@+id/recent_apps"
- android:layout_width="96dip"
- android:layout_height="match_parent"
- android:src="@drawable/ic_sysbar_recent"
- android:background="@null"
- android:paddingLeft="18dip"
- android:clickable="true"
- android:paddingRight="18dip"
- />
- <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/menu"
- android:layout_width="96dip"
- android:layout_height="match_parent"
- android:paddingLeft="18dip"
- android:paddingRight="18dip"
- android:src="@drawable/ic_sysbar_menu"
- systemui:keyCode="82"
- android:visibility="invisible"
+ android:layout_width="match_parent"
+ android:paddingLeft="8dip"
+ android:paddingRight="8dip"
+ android:layout_toRightOf="@+id/navigationArea"
+ android:layout_toLeftOf="@+id/notificationArea"
+ android:visibility="gone"
+ systemui:keyCode="62"
/>
- <com.android.systemui.statusbar.tablet.ShirtPocket
- android:id="@+id/pocket"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:animateLayoutChanges="true"
- android:clickable="true"
- android:descendantFocusability="blocksDescendants"
- android:gravity="center"
- >
- <ImageView
- android:id="@+id/pocket_icon"
- android:src="@drawable/ic_sysbar_pocket"
- android:paddingLeft="18dip"
- android:paddingRight="18dip"
- android:layout_width="96dip"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:visibility="gone"
- />
- </com.android.systemui.statusbar.tablet.ShirtPocket>
- </LinearLayout>
+ </RelativeLayout>
+ </FrameLayout>
- <!-- lights out mode: "shadow" views -->
+ <FrameLayout
+ android:id="@+id/bar_shadow_holder"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ >
+ <!-- lights out shade -->
<RelativeLayout
- android:id="@+id/shadows"
+ android:id="@+id/bar_shadow"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:background="#FF000000"
+ android:visibility="gone"
>
<ImageView
- android:id="@+id/notification_shadow"
- android:layout_width="176dip"
- android:layout_height="match_parent"
- android:paddingRight="48dip"
- android:layout_alignParentRight="true"
- android:layout_alignParentBottom="true"
- android:src="@drawable/ic_sysbar_shadow"
- android:visibility="gone"
- android:scaleType="fitXY"
- />
-
- <ImageView
- android:id="@+id/back_shadow"
- android:layout_width="96dip"
- android:layout_height="match_parent"
- android:paddingLeft="18dip"
- android:paddingRight="18dip"
+ android:id="@+id/dot0"
+ android:layout_width="80dip"
+ android:layout_height="48dip"
+ android:src="@drawable/ic_sysbar_lights_out_dot_small"
android:layout_alignParentLeft="true"
android:layout_alignParentBottom="true"
- android:src="@drawable/ic_sysbar_shadow"
- android:visibility="gone"
/>
<ImageView
- android:id="@+id/home_shadow"
- android:layout_width="96dip"
- android:layout_height="match_parent"
- android:paddingLeft="18dip"
- android:paddingRight="18dip"
- android:layout_toRightOf="@id/back_shadow"
+ android:id="@+id/dot1"
+ android:layout_width="80dip"
+ android:layout_height="48dip"
+ android:src="@drawable/ic_sysbar_lights_out_dot_large"
+ android:layout_toRightOf="@+id/dot0"
android:layout_alignParentBottom="true"
- android:src="@drawable/ic_sysbar_shadow"
- android:visibility="gone"
/>
<ImageView
- android:id="@+id/recent_shadow"
- android:layout_width="96dip"
- android:layout_height="match_parent"
- android:paddingLeft="18dip"
- android:paddingRight="18dip"
- android:layout_toRightOf="@id/home_shadow"
+ android:id="@+id/dot2"
+ android:layout_width="80dip"
+ android:layout_height="48dip"
+ android:src="@drawable/ic_sysbar_lights_out_dot_small"
+ android:layout_toRightOf="@+id/dot1"
android:layout_alignParentBottom="true"
- android:src="@drawable/ic_sysbar_shadow"
- android:visibility="gone"
/>
<ImageView
- android:id="@+id/menu_shadow"
- android:layout_width="96dip"
- android:layout_height="match_parent"
- android:paddingLeft="18dip"
- android:paddingRight="18dip"
- android:layout_toRightOf="@id/recent_shadow"
+ android:id="@+id/dot3"
+ android:layout_width="80dip"
+ android:layout_height="48dip"
+ android:src="@drawable/ic_sysbar_lights_out_dot_small"
+ android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
- android:src="@drawable/ic_sysbar_shadow"
- android:visibility="gone"
/>
</RelativeLayout>
-
- <!-- fake space bar zone -->
- <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/fake_space_bar"
- android:layout_height="match_parent"
- android:layout_width="match_parent"
- android:paddingLeft="8dip"
- android:paddingRight="8dip"
- android:layout_toRightOf="@+id/navigationArea"
- android:layout_toLeftOf="@+id/notificationArea"
- android:visibility="gone"
- systemui:keyCode="62"
- />
- </RelativeLayout>
+ </FrameLayout>
</com.android.systemui.statusbar.tablet.TabletStatusBarView>
diff --git a/packages/SystemUI/res/layout-xlarge/status_bar_notification_area.xml b/packages/SystemUI/res/layout-xlarge/status_bar_notification_area.xml
new file mode 100644
index 0000000..df60a26
--- /dev/null
+++ b/packages/SystemUI/res/layout-xlarge/status_bar_notification_area.xml
@@ -0,0 +1,128 @@
+<?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.
+-->
+
+<!-- notification icons & panel access -->
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
+ android:id="@+id/notificationArea"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:layout_alignParentRight="true"
+ android:orientation="horizontal"
+ >
+ <com.android.systemui.statusbar.tablet.InputMethodButton
+ android:id="@+id/imeSwitchButton"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:layout_marginLeft="8dip"
+ android:src="@drawable/ic_sysbar_ime_default"
+ android:visibility="gone"
+ />
+ <com.android.systemui.statusbar.tablet.NotificationIconArea
+ android:id="@+id/notificationIcons"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:orientation="horizontal"
+ >
+ <view
+ class="com.android.systemui.statusbar.tablet.NotificationIconArea$IconLayout"
+ android:id="@+id/icons"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:layout_gravity="center_vertical"
+ android:paddingTop="5dp"
+ android:layout_marginLeft="8dp"
+ />
+ </com.android.systemui.statusbar.tablet.NotificationIconArea>
+
+ <LinearLayout
+ android:id="@+id/notificationTrigger"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ >
+ <com.android.systemui.statusbar.tablet.HoloClock
+ android:id="@+id/clock"
+ android:layout_width="wrap_content"
+ 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="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>
+
+ <TextView
+ android:id="@+id/network_text"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:layout_marginTop="12dp"
+ android:layout_marginRight="6dip"
+ android:layout_marginLeft="6dip"
+ android:gravity="center"
+ android:singleLine="true"
+ android:visibility="gone"
+ android:textSize="14dip"
+ android:textColor="#606060"
+ />
+
+ <LinearLayout
+ android:id="@+id/signal_battery_cluster"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:orientation="horizontal"
+ android:gravity="center"
+ >
+ <FrameLayout
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:layout_gravity="top"
+ android:layout_marginTop="19dp"
+ android:layout_marginRight="4dp"
+ >
+ <ImageView
+ android:id="@+id/network_signal"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ />
+ <ImageView
+ android:id="@+id/network_type"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ />
+ </FrameLayout>
+ <ImageView
+ android:id="@+id/battery"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:layout_gravity="top"
+ android:layout_marginTop="19dp"
+ android:layout_marginLeft="2dp"
+ android:layout_marginRight="2dp"
+ />
+ </LinearLayout>
+ </LinearLayout>
+</LinearLayout>
+
diff --git a/packages/SystemUI/res/values-xlarge-port/dimens.xml b/packages/SystemUI/res/values-xlarge-port/dimens.xml
new file mode 100644
index 0000000..56effa3
--- /dev/null
+++ b/packages/SystemUI/res/values-xlarge-port/dimens.xml
@@ -0,0 +1,24 @@
+<?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.
+*/
+-->
+<resources>
+ <!-- gap on either side of status bar notification icons -->
+ <dimen name="status_bar_icon_padding">2dp</dimen>
+</resources>
+
+
+
diff --git a/packages/SystemUI/res/values-xlarge/dimens.xml b/packages/SystemUI/res/values-xlarge/dimens.xml
index 5ae3982..b9f5837 100644
--- a/packages/SystemUI/res/values-xlarge/dimens.xml
+++ b/packages/SystemUI/res/values-xlarge/dimens.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- * Copyright (c) 2006, The Android Open Source Project
+ * 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.
@@ -24,6 +24,8 @@
<dimen name="notification_ticker_width">360dp</dimen>
<!-- Status bar panel bottom offset (height of status bar - overlap) -->
<dimen name="status_bar_panel_bottom_offset">36dp</dimen>
+ <!-- gap on either side of status bar notification icons -->
+ <dimen name="status_bar_icon_padding">8dp</dimen>
</resources>
diff --git a/packages/SystemUI/src/com/android/systemui/SystemUI.java b/packages/SystemUI/src/com/android/systemui/SystemUI.java
index 53fe2ff..2110483 100644
--- a/packages/SystemUI/src/com/android/systemui/SystemUI.java
+++ b/packages/SystemUI/src/com/android/systemui/SystemUI.java
@@ -20,11 +20,15 @@ import java.io.FileDescriptor;
import java.io.PrintWriter;
import android.content.Context;
+import android.content.res.Configuration;
public abstract class SystemUI {
public Context mContext;
public abstract void start();
+
+ protected void onConfigurationChanged(Configuration newConfig) {
+ }
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
}
diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIService.java b/packages/SystemUI/src/com/android/systemui/SystemUIService.java
index 65990ad..870acd3 100644
--- a/packages/SystemUI/src/com/android/systemui/SystemUIService.java
+++ b/packages/SystemUI/src/com/android/systemui/SystemUIService.java
@@ -24,6 +24,7 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
+import android.content.res.Configuration;
import android.os.Binder;
import android.os.IBinder;
import android.util.Slog;
@@ -79,6 +80,13 @@ public class SystemUIService extends Service {
}
}
+ @Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ for (SystemUI ui: mServices) {
+ ui.onConfigurationChanged(newConfig);
+ }
+ }
+
/**
* Nobody binds to us.
*/
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/ShirtPocket.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/ShirtPocket.java
index 698f5af..14f2587 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/ShirtPocket.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/ShirtPocket.java
@@ -39,21 +39,19 @@ import android.view.Gravity;
import com.android.systemui.R;
-public class ShirtPocket extends FrameLayout {
+public class ShirtPocket extends ImageView {
private static final boolean DEBUG = false;
private static final String TAG = "StatusBar/ShirtPocket";
private ClipData mClipping = null;
private View mWindow = null;
- private ImageView mIcon;
private ImageView mPreviewIcon;
private TextView mDescription;
private TextView mAltText;
public ShirtPocket(Context context, AttributeSet attrs) {
super(context, attrs);
- setupWindow();
}
// TODO: "pin area" panel, dragging things out
@@ -63,8 +61,7 @@ public class ShirtPocket extends FrameLayout {
// Drag API notes: we must be visible to receive drag events
setVisibility(View.VISIBLE);
- mIcon = (ImageView) findViewById(R.id.pocket_icon);
- refreshStatusIcon();
+ refresh();
setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
@@ -76,19 +73,16 @@ public class ShirtPocket extends FrameLayout {
});
}
- private void refreshStatusIcon() {
+ private void refresh() {
setClickable(mClipping != null);
- mIcon.setImageResource(mClipping == null
- ? R.drawable.ic_sysbar_pocket_hidden
- : R.drawable.ic_sysbar_pocket_holding);
- mIcon.setVisibility(mClipping == null ? View.GONE : View.VISIBLE);
+ // XXX: TODO
}
private void showWindow() {
getHandler().post(new Runnable() {
public void run() {
mWindow.setVisibility(View.VISIBLE);
- refreshStatusIcon();
+ refresh();
}
});
}
@@ -97,7 +91,7 @@ public class ShirtPocket extends FrameLayout {
getHandler().post(new Runnable() {
public void run() {
mWindow.setVisibility(View.GONE);
- refreshStatusIcon();
+ refresh();
}
});
}
@@ -106,7 +100,7 @@ public class ShirtPocket extends FrameLayout {
getHandler().postDelayed(new Runnable() {
public void run() {
mWindow.setVisibility(View.GONE);
- refreshStatusIcon();
+ refresh();
}
},
250);
@@ -183,65 +177,27 @@ public class ShirtPocket extends FrameLayout {
}
};
- private void setupWindow() {
- mWindow = View.inflate(getContext(), R.layout.status_bar_pocket_panel, null);
-
- mPreviewIcon = (ImageView) mWindow.findViewById(R.id.icon);
- mDescription = (TextView) mWindow.findViewById(R.id.description);
- mAltText = (TextView) mWindow.findViewById(R.id.alt);
-
- mWindow.setVisibility(View.GONE);
- mWindow.setOnTouchListener(mWindowTouchListener);
- WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
- 400,
- 250,
- WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL,
- WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
- | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM
- | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH,
- PixelFormat.TRANSLUCENT);
- lp.gravity = Gravity.BOTTOM | Gravity.RIGHT;
-// int pos[] = new int[2];
-// getLocationOnScreen(pos);
-// lp.x = pos[1];
-// lp.y = 0;
- lp.setTitle("ShirtPocket");
- lp.windowAnimations = R.style.Animation_ShirtPocketPanel;
-
- WindowManagerImpl.getDefault().addView(mWindow, lp);
-
- }
-
public boolean onDragEvent(DragEvent event) {
if (DEBUG) Slog.d(TAG, "onDragEvent: " + event);
- if (mIcon != null) {
- switch (event.getAction()) {
- // We want to appear whenever a potential drag takes off from anywhere in the UI.
- case DragEvent.ACTION_DRAG_STARTED:
- mIcon.setImageResource(mClipping == null
- ? R.drawable.ic_sysbar_pocket
- : R.drawable.ic_sysbar_pocket_holding);
- mIcon.setVisibility(View.VISIBLE);
- break;
- case DragEvent.ACTION_DRAG_ENTERED:
- if (DEBUG) Slog.d(TAG, "entered!");
- mIcon.setImageResource(R.drawable.ic_sysbar_pocket_drag);
- break;
- case DragEvent.ACTION_DRAG_EXITED:
- if (DEBUG) Slog.d(TAG, "exited!");
- mIcon.setImageResource(mClipping == null
- ? R.drawable.ic_sysbar_pocket
- : R.drawable.ic_sysbar_pocket_holding);
- break;
- case DragEvent.ACTION_DROP:
- if (DEBUG) Slog.d(TAG, "dropped!");
- stash(event.getClipData());
- refreshStatusIcon();
- break;
- case DragEvent.ACTION_DRAG_ENDED:
- refreshStatusIcon();
- break;
- }
+ switch (event.getAction()) {
+ // We want to appear whenever a potential drag takes off from anywhere in the UI.
+ case DragEvent.ACTION_DRAG_STARTED:
+ // XXX: TODO
+ break;
+ case DragEvent.ACTION_DRAG_ENTERED:
+ if (DEBUG) Slog.d(TAG, "entered!");
+ // XXX: TODO
+ break;
+ case DragEvent.ACTION_DRAG_EXITED:
+ if (DEBUG) Slog.d(TAG, "exited!");
+ setVisibility(mClipping == null ? View.GONE : View.VISIBLE);
+ break;
+ case DragEvent.ACTION_DROP:
+ if (DEBUG) Slog.d(TAG, "dropped!");
+ stash(event.getClipData());
+ break;
+ case DragEvent.ACTION_DRAG_ENDED:
+ break;
}
return true; // we want everything, thank you
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
index 7a7976a..b8c068e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
@@ -31,6 +31,7 @@ import android.app.Notification;
import android.app.StatusBarManager;
import android.content.Context;
import android.content.Intent;
+import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.PixelFormat;
import android.graphics.Rect;
@@ -77,15 +78,16 @@ public class TabletStatusBar extends StatusBar {
public static final boolean DEBUG = false;
public static final String TAG = "TabletStatusBar";
+ public static final int MAX_NOTIFICATION_ICONS = 5;
+
public static final int MSG_OPEN_NOTIFICATION_PANEL = 1000;
public static final int MSG_CLOSE_NOTIFICATION_PANEL = 1001;
public static final int MSG_OPEN_NOTIFICATION_PEEK = 1002;
public static final int MSG_CLOSE_NOTIFICATION_PEEK = 1003;
public static final int MSG_OPEN_RECENTS_PANEL = 1020;
public static final int MSG_CLOSE_RECENTS_PANEL = 1021;
- public static final int MSG_HIDE_SHADOWS = 1030;
- public static final int MSG_SHOW_SHADOWS = 1031;
- public static final int MSG_RESTORE_SHADOWS = 1032;
+ public static final int MSG_SHOW_CHROME = 1030;
+ public static final int MSG_HIDE_CHROME = 1031;
// Fitts' Law assistance for LatinIME; TODO: replace with a more general approach
private static final boolean FAKE_SPACE_BAR = true;
@@ -95,7 +97,9 @@ public class TabletStatusBar extends StatusBar {
public static final int LIGHTS_ON_DELAY = 5000;
- int mIconSize;
+ int mBarHeight = -1;
+ int mIconSize = -1;
+ int mIconHPadding = -1;
H mHandler = new H();
@@ -134,9 +138,8 @@ public class TabletStatusBar extends StatusBar {
View mBarContents;
- // lights out support
- View mBackShadow, mHomeShadow, mRecentShadow, mMenuShadow, mNotificationShadow;
- ShadowController mShadowController;
+ // hide system chrome ("lights out") support
+ View mShadow;
NotificationIconArea.IconLayout mIconLayout;
@@ -154,10 +157,6 @@ public class TabletStatusBar extends StatusBar {
protected void addPanelWindows() {
final Context context = mContext;
- final Resources res = context.getResources();
- final int barHeight= res.getDimensionPixelSize(
- com.android.internal.R.dimen.status_bar_height);
-
// Notification Panel
mNotificationPanel = (NotificationPanel)View.inflate(context,
R.layout.status_bar_notification_panel, null);
@@ -265,14 +264,37 @@ public class TabletStatusBar extends StatusBar {
super.start(); // will add the main bar view
}
+ @Override
+ protected void onConfigurationChanged (Configuration newConfig) {
+ loadDimens();
+ }
+
+ protected void loadDimens() {
+ final Resources res = mContext.getResources();
+
+ mBarHeight = res.getDimensionPixelSize(
+ com.android.internal.R.dimen.status_bar_height);
+
+ int newIconSize = res.getDimensionPixelSize(
+ com.android.internal.R.dimen.status_bar_icon_size);
+ int newIconHPadding = res.getDimensionPixelSize(
+ R.dimen.status_bar_icon_padding);
+
+ if (newIconHPadding != mIconHPadding || newIconSize != mIconSize) {
+// Slog.d(TAG, "size=" + newIconSize + " padding=" + newIconHPadding);
+ mIconHPadding = newIconHPadding;
+ mIconSize = newIconSize;
+ reloadAllNotificationIcons(); // reload the tray
+ }
+ }
+
protected View makeStatusBarView() {
final Context context = mContext;
- final Resources res = context.getResources();
mWindowManager = IWindowManager.Stub.asInterface(
ServiceManager.getService(Context.WINDOW_SERVICE));
- mIconSize = res.getDimensionPixelSize(com.android.internal.R.dimen.status_bar_icon_size);
+ loadDimens();
final TabletStatusBarView sb = (TabletStatusBarView)View.inflate(
context, R.layout.status_bar, null);
@@ -317,7 +339,6 @@ public class TabletStatusBar extends StatusBar {
mHomeButton = mNavigationArea.findViewById(R.id.home);
mMenuButton = mNavigationArea.findViewById(R.id.menu);
mRecentButton = mNavigationArea.findViewById(R.id.recent_apps);
- Slog.d(TAG, "rec=" + mRecentButton + ", listener=" + mOnClickListener);
mRecentButton.setOnClickListener(mOnClickListener);
// The bar contents buttons
@@ -327,18 +348,48 @@ public class TabletStatusBar extends StatusBar {
mFakeSpaceBar = sb.findViewById(R.id.fake_space_bar);
// "shadows" of the status bar features, for lights-out mode
- mBackShadow = sb.findViewById(R.id.back_shadow);
- mHomeShadow = sb.findViewById(R.id.home_shadow);
- mRecentShadow = sb.findViewById(R.id.recent_shadow);
- mMenuShadow = sb.findViewById(R.id.menu_shadow);
- mNotificationShadow = sb.findViewById(R.id.notification_shadow);
-
- mShadowController = new ShadowController(false);
- mShadowController.add(mBackButton, mBackShadow);
- mShadowController.add(mHomeButton, mHomeShadow);
- mShadowController.add(mRecentButton, mRecentShadow);
- mShadowController.add(mMenuButton, mMenuShadow);
- mShadowController.add(mNotificationArea, mNotificationShadow);
+ mShadow = sb.findViewById(R.id.bar_shadow);
+ mShadow.setOnTouchListener(
+ new View.OnTouchListener() {
+ public boolean onTouch(View v, MotionEvent ev) {
+ if (ev.getAction() == MotionEvent.ACTION_DOWN) {
+ mShadow.setVisibility(View.GONE);
+ mBarContents.setVisibility(View.VISIBLE);
+ }
+ return false;
+ }
+ });
+
+ // tuning parameters
+ final int LIGHTS_GOING_OUT_SYSBAR_DURATION = 600;
+ final int LIGHTS_GOING_OUT_SHADOW_DURATION = 1000;
+ final int LIGHTS_GOING_OUT_SHADOW_DELAY = 500;
+
+ final int LIGHTS_COMING_UP_SYSBAR_DURATION = 200;
+// final int LIGHTS_COMING_UP_SYSBAR_DELAY = 50;
+ final int LIGHTS_COMING_UP_SHADOW_DURATION = 0;
+
+ LayoutTransition xition = new LayoutTransition();
+ xition.setAnimator(LayoutTransition.APPEARING,
+ ObjectAnimator.ofFloat(null, "alpha", 0.5f, 1f));
+ xition.setDuration(LayoutTransition.APPEARING, LIGHTS_COMING_UP_SYSBAR_DURATION);
+ xition.setStartDelay(LayoutTransition.APPEARING, 0);
+ xition.setAnimator(LayoutTransition.DISAPPEARING,
+ ObjectAnimator.ofFloat(null, "alpha", 1f, 0f));
+ xition.setDuration(LayoutTransition.DISAPPEARING, LIGHTS_GOING_OUT_SYSBAR_DURATION);
+ xition.setStartDelay(LayoutTransition.DISAPPEARING, 0);
+ ((ViewGroup)sb.findViewById(R.id.bar_contents_holder)).setLayoutTransition(xition);
+
+ xition = new LayoutTransition();
+ xition.setAnimator(LayoutTransition.APPEARING,
+ ObjectAnimator.ofFloat(null, "alpha", 0f, 1f));
+ xition.setDuration(LayoutTransition.APPEARING, LIGHTS_GOING_OUT_SHADOW_DURATION);
+ xition.setStartDelay(LayoutTransition.APPEARING, LIGHTS_GOING_OUT_SHADOW_DELAY);
+ xition.setAnimator(LayoutTransition.DISAPPEARING,
+ ObjectAnimator.ofFloat(null, "alpha", 1f, 0f));
+ xition.setDuration(LayoutTransition.DISAPPEARING, LIGHTS_COMING_UP_SHADOW_DURATION);
+ xition.setStartDelay(LayoutTransition.DISAPPEARING, 0);
+ ((ViewGroup)sb.findViewById(R.id.bar_shadow_holder)).setLayoutTransition(xition);
// set the initial view visibility
setAreThereNotifications();
@@ -376,7 +427,7 @@ public class TabletStatusBar extends StatusBar {
final int peekIndex = m.arg1;
if (peekIndex < N) {
- Slog.d(TAG, "loading peek: " + peekIndex);
+ //Slog.d(TAG, "loading peek: " + peekIndex);
NotificationData.Entry entry = mNotns.get(N-1-peekIndex);
NotificationData.Entry copy = new NotificationData.Entry(
entry.key,
@@ -420,8 +471,7 @@ public class TabletStatusBar extends StatusBar {
if (!mNotificationPanel.isShowing()) {
mNotificationPeekWindow.setVisibility(View.GONE);
mNotificationPanel.show(true, true);
- // synchronize with current shadow state
- mShadowController.hideElement(mNotificationArea);
+ mNotificationArea.setVisibility(View.GONE);
mTicker.halt();
}
break;
@@ -429,8 +479,7 @@ public class TabletStatusBar extends StatusBar {
if (DEBUG) Slog.d(TAG, "closing notifications panel");
if (mNotificationPanel.isShowing()) {
mNotificationPanel.show(false, true);
- // synchronize with current shadow state
- mShadowController.showElement(mNotificationArea);
+ mNotificationArea.setVisibility(View.VISIBLE);
}
break;
case MSG_OPEN_RECENTS_PANEL:
@@ -441,18 +490,16 @@ public class TabletStatusBar extends StatusBar {
if (DEBUG) Slog.d(TAG, "closing recents panel");
if (mRecentsPanel != null) mRecentsPanel.setVisibility(View.GONE);
break;
- case MSG_HIDE_SHADOWS:
+ case MSG_SHOW_CHROME:
if (DEBUG) Slog.d(TAG, "hiding shadows (lights on)");
- mShadowController.hideAllShadows();
+ mBarContents.setVisibility(View.VISIBLE);
+ mShadow.setVisibility(View.GONE);
break;
- case MSG_SHOW_SHADOWS:
+ case MSG_HIDE_CHROME:
if (DEBUG) Slog.d(TAG, "showing shadows (lights out)");
animateCollapse();
- mShadowController.showAllShadows();
- break;
- case MSG_RESTORE_SHADOWS:
- if (DEBUG) Slog.d(TAG, "quickly re-showing shadows if appropriate");
- mShadowController.refresh();
+ mBarContents.setVisibility(View.GONE);
+ mShadow.setVisibility(View.VISIBLE);
break;
}
}
@@ -632,12 +679,12 @@ public class TabletStatusBar extends StatusBar {
if ((state & StatusBarManager.DISABLE_NOTIFICATION_ICONS) != 0) {
Slog.d(TAG, "DISABLE_NOTIFICATION_ICONS: yes");
// synchronize with current shadow state
- mShadowController.hideElement(mNotificationIconArea);
+ mNotificationIconArea.setVisibility(View.GONE);
mTicker.halt();
} else {
Slog.d(TAG, "DISABLE_NOTIFICATION_ICONS: no");
// synchronize with current shadow state
- mShadowController.showElement(mNotificationIconArea);
+ mNotificationIconArea.setVisibility(View.VISIBLE);
}
} else if ((diff & StatusBarManager.DISABLE_NOTIFICATION_TICKER) != 0) {
if ((state & StatusBarManager.DISABLE_NOTIFICATION_TICKER) != 0) {
@@ -693,13 +740,12 @@ public class TabletStatusBar extends StatusBar {
public void setLightsOn(boolean on) {
// Policy note: if the frontmost activity needs the menu key, we assume it is a legacy app
// that can't handle lights-out mode.
- if (mMenuButton.getVisibility() == View.VISIBLE
- || mMenuShadow.getVisibility() == View.VISIBLE) {
+ if (mMenuButton.getVisibility() == View.VISIBLE) {
on = true;
}
- mHandler.removeMessages(MSG_SHOW_SHADOWS);
- mHandler.removeMessages(MSG_HIDE_SHADOWS);
- mHandler.sendEmptyMessage(on ? MSG_HIDE_SHADOWS : MSG_SHOW_SHADOWS);
+ mHandler.removeMessages(MSG_HIDE_CHROME);
+ mHandler.removeMessages(MSG_SHOW_CHROME);
+ mHandler.sendEmptyMessage(on ? MSG_SHOW_CHROME : MSG_HIDE_CHROME);
}
public void setMenuKeyVisible(boolean visible) {
@@ -736,19 +782,6 @@ public class TabletStatusBar extends StatusBar {
private void setAreThereNotifications() {
final boolean hasClearable = mNotns.hasClearableItems();
-
- //Slog.d(TAG, "setAreThereNotifications hasClerable=" + hasClearable);
-
- /*
- mOngoingTitle.setVisibility(ongoing ? View.VISIBLE : View.GONE);
- mLatestTitle.setVisibility(latest ? View.VISIBLE : View.GONE);
-
- if (ongoing || latest) {
- mNoNotificationsTitle.setVisibility(View.GONE);
- } else {
- mNoNotificationsTitle.setVisibility(View.VISIBLE);
- }
- */
}
/**
@@ -885,7 +918,7 @@ public class TabletStatusBar extends StatusBar {
// Remove the icon.
// ViewGroup iconParent = (ViewGroup)entry.icon.getParent();
// if (iconParent != null) iconParent.removeView(entry.icon);
- refreshIcons();
+ updateNotificationIcons();
return entry.notification;
}
@@ -981,18 +1014,25 @@ public class TabletStatusBar extends StatusBar {
// Add the icon.
mNotns.add(entry);
- refreshIcons();
+ updateNotificationIcons();
return iconView;
}
- private void refreshIcons() {
+ private void reloadAllNotificationIcons() {
+ if (mIconLayout == null) return;
+ mIconLayout.removeAllViews();
+ updateNotificationIcons();
+ }
+
+ private void updateNotificationIcons() {
// XXX: need to implement a new limited linear layout class
// to avoid removing & readding everything
- final int ICON_LIMIT = 4;
+ if (mIconLayout == null) return;
+
final LinearLayout.LayoutParams params
- = new LinearLayout.LayoutParams(mIconSize, mIconSize);
+ = new LinearLayout.LayoutParams(mIconSize + 2*mIconHPadding, mBarHeight);
int N = mNotns.size();
@@ -1002,7 +1042,7 @@ public class TabletStatusBar extends StatusBar {
ArrayList<View> toShow = new ArrayList<View>();
- for (int i=0; i<ICON_LIMIT; i++) {
+ for (int i=0; i<MAX_NOTIFICATION_ICONS; i++) {
if (i>=N) break;
toShow.add(mNotns.get(N-i-1).icon);
}
@@ -1021,8 +1061,9 @@ public class TabletStatusBar extends StatusBar {
for (int i=0; i<toShow.size(); i++) {
View v = toShow.get(i);
+ v.setPadding(mIconHPadding, 0, mIconHPadding, 0);
if (v.getParent() == null) {
- mIconLayout.addView(toShow.get(i), i, params);
+ mIconLayout.addView(v, i, params);
}
}
@@ -1143,6 +1184,7 @@ public class TabletStatusBar extends StatusBar {
return true;
}
+/*
public class ShadowController {
boolean mShowShadows;
Map<View, View> mShadowsForElements = new IdentityHashMap<View, View>(7);
@@ -1289,6 +1331,7 @@ public class TabletStatusBar extends StatusBar {
button.setVisibility(mShowShadows ? View.INVISIBLE : View.VISIBLE);
}
}
+ */
public class TouchOutsideListener implements View.OnTouchListener {
private int mMsg;