diff options
author | Joe Onorato <joeo@android.com> | 2010-05-17 15:42:59 -0700 |
---|---|---|
committer | Joe Onorato <joeo@android.com> | 2010-06-02 14:48:42 -0700 |
commit | 4762c2d75a55e0854bbff2f996748116d4ab1a37 (patch) | |
tree | 7467da673f3e8e753a79ad044fc24e9ebb237a08 | |
parent | f3f0e053f0cc66249a11639eb67d0cdc2da26ded (diff) | |
download | frameworks_base-4762c2d75a55e0854bbff2f996748116d4ab1a37.zip frameworks_base-4762c2d75a55e0854bbff2f996748116d4ab1a37.tar.gz frameworks_base-4762c2d75a55e0854bbff2f996748116d4ab1a37.tar.bz2 |
Add expand and collapse.
Change-Id: I58ad95c59b2c46d3f25349e137d5624aefc6c6cd
8 files changed, 76 insertions, 72 deletions
diff --git a/core/java/android/app/StatusBarManager.java b/core/java/android/app/StatusBarManager.java index 9499d82..962de02 100644 --- a/core/java/android/app/StatusBarManager.java +++ b/core/java/android/app/StatusBarManager.java @@ -105,18 +105,6 @@ public class StatusBarManager { throw new RuntimeException(ex); } } - - /** - * Toggle the status bar. - */ - public void toggle() { - try { - mService.toggle(); - } catch (RemoteException ex) { - // system process is dead anyway. - throw new RuntimeException(ex); - } - } public void setIcon(String slot, int iconId, int iconLevel) { try { diff --git a/core/java/com/android/internal/statusbar/IStatusBar.aidl b/core/java/com/android/internal/statusbar/IStatusBar.aidl index 65628b0..2127b3b 100644 --- a/core/java/com/android/internal/statusbar/IStatusBar.aidl +++ b/core/java/com/android/internal/statusbar/IStatusBar.aidl @@ -24,5 +24,7 @@ oneway interface IStatusBar void setIcon(int index, in StatusBarIcon icon); void removeIcon(int index); void disable(int state); + void animateExpand(); + void animateCollapse(); } diff --git a/core/java/com/android/internal/statusbar/IStatusBarService.aidl b/core/java/com/android/internal/statusbar/IStatusBarService.aidl index ba63eaf..0a5b90e 100644 --- a/core/java/com/android/internal/statusbar/IStatusBarService.aidl +++ b/core/java/com/android/internal/statusbar/IStatusBarService.aidl @@ -25,7 +25,6 @@ interface IStatusBarService { void expand(); void collapse(); - void toggle(); void disable(int what, IBinder token, String pkg); void setIcon(String slot, String iconPackage, int iconId, int iconLevel); void setIconVisibility(String slot, boolean visible); @@ -33,4 +32,5 @@ interface IStatusBarService // ---- Methods below are for use by the status bar policy services ---- void registerStatusBar(IStatusBar callbacks, out StatusBarIconList state); + void visibilityChanged(boolean visible); } diff --git a/packages/StatusBarPhone/src/com/android/policy/statusbar/phone/CommandQueue.java b/packages/StatusBarPhone/src/com/android/policy/statusbar/phone/CommandQueue.java index 90f17d5..00ad77c 100644 --- a/packages/StatusBarPhone/src/com/android/policy/statusbar/phone/CommandQueue.java +++ b/packages/StatusBarPhone/src/com/android/policy/statusbar/phone/CommandQueue.java @@ -28,7 +28,8 @@ import com.android.internal.statusbar.StatusBarIconList; * This class takes the functions from IStatusBar that come in on * binder pool threads and posts messages to get them onto the main * thread, and calls onto Callbacks. It also takes care of - * coalescing these calls so they don't stack up. + * coalescing these calls so they don't stack up. For the calls + * are coalesced, note that they are all idempotent. */ class CommandQueue extends IStatusBar.Stub { private static final String TAG = "StatusBar.CommandQueue"; @@ -42,6 +43,10 @@ class CommandQueue extends IStatusBar.Stub { private static final int MSG_DISABLE = 0x00020000; + private static final int MSG_SET_VISIBILITY = 0x00030000; + private static final int OP_EXPAND = 1; + private static final int OP_COLLAPSE = 2; + private StatusBarIconList mList; private Callbacks mCallbacks; private Handler mHandler = new H(); @@ -55,6 +60,8 @@ class CommandQueue extends IStatusBar.Stub { StatusBarIcon old, StatusBarIcon icon); public void removeIcon(String slot, int index, int viewIndex); public void disable(int state); + public void animateExpand(); + public void animateCollapse(); } public CommandQueue(Callbacks callbacks, StatusBarIconList list) { @@ -85,9 +92,24 @@ class CommandQueue extends IStatusBar.Stub { } } + public void animateExpand() { + synchronized (mList) { + mHandler.removeMessages(MSG_SET_VISIBILITY); + mHandler.obtainMessage(MSG_SET_VISIBILITY, OP_EXPAND, 0, null).sendToTarget(); + } + } + + public void animateCollapse() { + synchronized (mList) { + mHandler.removeMessages(MSG_SET_VISIBILITY); + mHandler.obtainMessage(MSG_SET_VISIBILITY, OP_COLLAPSE, 0, null).sendToTarget(); + } + } + private final class H extends Handler { public void handleMessage(Message msg) { final int what = msg.what & MSG_MASK; + Slog.d(TAG, "handleMessage what=0x" + Integer.toHexString(what) + " arg1=" + msg.arg1); switch (what) { case MSG_ICON: { final int index = msg.what & INDEX_MASK; @@ -116,6 +138,12 @@ class CommandQueue extends IStatusBar.Stub { case MSG_DISABLE: mCallbacks.disable(msg.arg1); break; + case MSG_SET_VISIBILITY: + if (msg.arg1 == OP_EXPAND) { + mCallbacks.animateExpand(); + } else { + mCallbacks.animateCollapse(); + } } } } diff --git a/packages/StatusBarPhone/src/com/android/policy/statusbar/phone/PhoneStatusBarService.java b/packages/StatusBarPhone/src/com/android/policy/statusbar/phone/PhoneStatusBarService.java index 6ae632b..86b6889 100644 --- a/packages/StatusBarPhone/src/com/android/policy/statusbar/phone/PhoneStatusBarService.java +++ b/packages/StatusBarPhone/src/com/android/policy/statusbar/phone/PhoneStatusBarService.java @@ -71,7 +71,7 @@ import java.util.Set; public class PhoneStatusBarService extends StatusBarService { - static final String TAG = "StatusBar"; + static final String TAG = "PhoneStatusBarService"; static final boolean SPEW = false; public static final String ACTION_STATUSBAR_START @@ -203,10 +203,6 @@ public class PhoneStatusBarService extends StatusBarService { super.onCreate(); } - public void setNotificationCallbacks(NotificationCallbacks listener) { - mNotificationCallbacks = listener; - } - // ================================================================================ // Constructing the view // ================================================================================ @@ -365,7 +361,7 @@ public class PhoneStatusBarService extends StatusBarService { } } } - + /** * All changes to the status bar and notifications funnel through here and are batched. */ @@ -531,7 +527,7 @@ public class PhoneStatusBarService extends StatusBarService { return; } mExpandedVisible = true; - panelSlightlyVisible(true); + visibilityChanged(true); updateExpandedViewPos(EXPANDED_LEAVE_ALONE); mExpandedParams.flags &= ~WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; @@ -545,7 +541,7 @@ public class PhoneStatusBarService extends StatusBarService { } } - void animateExpand() { + public void animateExpand() { if (SPEW) Slog.d(TAG, "Animate expand: expanded=" + mExpanded); if ((mDisabled & StatusBarManager.DISABLE_EXPAND) != 0) { return ; @@ -558,7 +554,7 @@ public class PhoneStatusBarService extends StatusBarService { performFling(0, 2000.0f, true); } - void animateCollapse() { + public void animateCollapse() { if (SPEW) { Slog.d(TAG, "animateCollapse(): mExpanded=" + mExpanded + " mExpandedVisible=" + mExpandedVisible @@ -618,7 +614,7 @@ public class PhoneStatusBarService extends StatusBarService { return; } mExpandedVisible = false; - panelSlightlyVisible(false); + visibilityChanged(false); mExpandedParams.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; mExpandedParams.flags &= ~WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM; mExpandedDialog.getWindow().setAttributes(mExpandedParams); @@ -1205,7 +1201,7 @@ public class PhoneStatusBarService extends StatusBarService { // because the window itself extends below the content view. mExpandedParams.y = -disph; } - panelSlightlyVisible(visible); + visibilityChanged(visible); mExpandedDialog.getWindow().setAttributes(mExpandedParams); } @@ -1237,16 +1233,13 @@ public class PhoneStatusBarService extends StatusBarService { * this is what he wants. (see bug 1131461) */ private boolean mPanelSlightlyVisible; - void panelSlightlyVisible(boolean visible) { - if (true) { - // XXX - return; - } + void visibilityChanged(boolean visible) { if (mPanelSlightlyVisible != visible) { mPanelSlightlyVisible = visible; - if (visible) { - // tell the notification manager to turn off the lights. - mNotificationCallbacks.onPanelRevealed(); + try { + mBarService.visibilityChanged(visible); + } catch (RemoteException ex) { + // Won't fail unless the world has ended. } } } @@ -1260,7 +1253,7 @@ public class PhoneStatusBarService extends StatusBarService { if ((diff & StatusBarManager.DISABLE_EXPAND) != 0) { if ((net & StatusBarManager.DISABLE_EXPAND) != 0) { Slog.d(TAG, "DISABLE_EXPAND: yes"); - //animateCollapse(); + animateCollapse(); } } if ((diff & StatusBarManager.DISABLE_NOTIFICATION_ICONS) != 0) { @@ -1288,7 +1281,7 @@ public class PhoneStatusBarService extends StatusBarService { private View.OnClickListener mClearButtonListener = new View.OnClickListener() { public void onClick(View v) { mNotificationCallbacks.onClearAll(); - //addPendingOp(OP_EXPAND, null, false); + animateCollapse(); } }; diff --git a/policy/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/com/android/internal/policy/impl/PhoneWindowManager.java index 3169fe0..73a57ee 100755 --- a/policy/com/android/internal/policy/impl/PhoneWindowManager.java +++ b/policy/com/android/internal/policy/impl/PhoneWindowManager.java @@ -1140,22 +1140,6 @@ public class PhoneWindowManager implements WindowManagerPolicy { return true; } } - } else if (code == KeyEvent.KEYCODE_NOTIFICATION) { - if (down) { - // this key doesn't exist on current hardware, but if a device - // didn't have a touchscreen, it would want one of these to open - // the status bar. - IStatusBarService sbs = IStatusBarService.Stub.asInterface(ServiceManager.getService("statusbar")); - if (sbs != null) { - try { - sbs.toggle(); - } catch (RemoteException e) { - // we're screwed anyway, since it's in this process - throw new RuntimeException(e); - } - } - } - return true; } else if (code == KeyEvent.KEYCODE_SEARCH) { if (down) { if (repeatCount == 0) { diff --git a/services/java/com/android/server/status/StatusBarManagerService.java b/services/java/com/android/server/status/StatusBarManagerService.java index 1752f26..a59b914 100644 --- a/services/java/com/android/server/status/StatusBarManagerService.java +++ b/services/java/com/android/server/status/StatusBarManagerService.java @@ -49,7 +49,7 @@ import java.util.HashMap; */ public class StatusBarManagerService extends IStatusBarService.Stub { - static final String TAG = "StatusBar"; + static final String TAG = "StatusBarManagerService"; static final boolean SPEW = true; public static final String ACTION_STATUSBAR_START @@ -58,7 +58,7 @@ public class StatusBarManagerService extends IStatusBarService.Stub final Context mContext; Handler mHandler = new Handler(); NotificationCallbacks mNotificationCallbacks; - IStatusBar mBar; + volatile IStatusBar mBar; StatusBarIconList mIcons = new StatusBarIconList(); private UninstallReceiver mUninstallReceiver; @@ -115,20 +115,30 @@ public class StatusBarManagerService extends IStatusBarService.Stub Intent intent = new Intent(ACTION_STATUSBAR_START); mContext.sendBroadcast(intent /** permission **/); } - + // ================================================================================ // From IStatusBarService // ================================================================================ public void expand() { enforceExpandStatusBar(); + + if (mBar != null) { + try { + mBar.animateExpand(); + } catch (RemoteException ex) { + } + } } public void collapse() { enforceExpandStatusBar(); - } - public void toggle() { - enforceExpandStatusBar(); + if (mBar != null) { + try { + mBar.animateCollapse(); + } catch (RemoteException ex) { + } + } } public void disable(int what, IBinder token, String pkg) { @@ -238,12 +248,24 @@ public class StatusBarManagerService extends IStatusBarService.Stub "StatusBarManagerService"); } + + // ================================================================================ + // Callbacks from the status bar service. + // ================================================================================ public void registerStatusBar(IStatusBar bar, StatusBarIconList iconList) { Slog.i(TAG, "registerStatusBar bar=" + bar); mBar = bar; iconList.copyFrom(mIcons); } + /** + * The status bar service should call this when the user changes whether + * the status bar is visible or not. + */ + public void visibilityChanged(boolean visible) { + Slog.d(TAG, "visibilityChanged visible=" + visible); + } + public IBinder addNotification(IconData iconData, NotificationData notificationData) { return new Binder(); } diff --git a/tests/StatusBar/src/com/android/statusbartest/StatusBarTest.java b/tests/StatusBar/src/com/android/statusbartest/StatusBarTest.java index 06506fb..3532e30 100644 --- a/tests/StatusBar/src/com/android/statusbartest/StatusBarTest.java +++ b/tests/StatusBar/src/com/android/statusbartest/StatusBarTest.java @@ -134,13 +134,9 @@ public class StatusBarTest extends TestActivity }, 3000); } }, - new Test("Expand in 3 sec.") { + new Test("Expand") { public void run() { - mHandler.postDelayed(new Runnable() { - public void run() { - mStatusBarManager.expand(); - } - }, 3000); + mStatusBarManager.expand(); } }, new Test("Expand in 3 sec.") { @@ -161,14 +157,5 @@ public class StatusBarTest extends TestActivity }, 3000); } }, - new Test("Toggle in 3 sec.") { - public void run() { - mHandler.postDelayed(new Runnable() { - public void run() { - mStatusBarManager.toggle(); - } - }, 3000); - } - }, }; } |