diff options
author | Daniel Sandler <dsandler@google.com> | 2010-12-14 12:14:53 -0500 |
---|---|---|
committer | Daniel Sandler <dsandler@google.com> | 2010-12-15 20:53:32 -0500 |
commit | 0ad460b087abbd4b523a2e61ff27b0bf6fb5be92 (patch) | |
tree | 5e63e34a16d52d0d59618f80c0e32584437b917d | |
parent | b146b1214ef6e4fc75d98779b22434335764cfdb (diff) | |
download | frameworks_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.xml | 5 | ||||
-rw-r--r-- | packages/SystemUI/res/drawable-mdpi/ic_sysbar_lights_out_dot_large.png | bin | 0 -> 3088 bytes | |||
-rw-r--r-- | packages/SystemUI/res/drawable-mdpi/ic_sysbar_lights_out_dot_small.png | bin | 0 -> 3050 bytes | |||
-rw-r--r-- | packages/SystemUI/res/layout-xlarge/status_bar.xml | 293 | ||||
-rw-r--r-- | packages/SystemUI/res/layout-xlarge/status_bar_notification_area.xml | 128 | ||||
-rw-r--r-- | packages/SystemUI/res/values-xlarge-port/dimens.xml | 24 | ||||
-rw-r--r-- | packages/SystemUI/res/values-xlarge/dimens.xml | 4 | ||||
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/SystemUI.java | 4 | ||||
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/SystemUIService.java | 8 | ||||
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/statusbar/tablet/ShirtPocket.java | 96 | ||||
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java | 175 |
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 Binary files differnew file mode 100644 index 0000000..f865e7a --- /dev/null +++ b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_lights_out_dot_large.png 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 Binary files differnew file mode 100644 index 0000000..04588bb --- /dev/null +++ b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_lights_out_dot_small.png 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; |