summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoe Onorato <joeo@android.com>2010-05-17 15:42:59 -0700
committerJoe Onorato <joeo@android.com>2010-06-02 14:48:42 -0700
commit4762c2d75a55e0854bbff2f996748116d4ab1a37 (patch)
tree7467da673f3e8e753a79ad044fc24e9ebb237a08
parentf3f0e053f0cc66249a11639eb67d0cdc2da26ded (diff)
downloadframeworks_base-4762c2d75a55e0854bbff2f996748116d4ab1a37.zip
frameworks_base-4762c2d75a55e0854bbff2f996748116d4ab1a37.tar.gz
frameworks_base-4762c2d75a55e0854bbff2f996748116d4ab1a37.tar.bz2
Add expand and collapse.
Change-Id: I58ad95c59b2c46d3f25349e137d5624aefc6c6cd
-rw-r--r--core/java/android/app/StatusBarManager.java12
-rw-r--r--core/java/com/android/internal/statusbar/IStatusBar.aidl2
-rw-r--r--core/java/com/android/internal/statusbar/IStatusBarService.aidl2
-rw-r--r--packages/StatusBarPhone/src/com/android/policy/statusbar/phone/CommandQueue.java30
-rw-r--r--packages/StatusBarPhone/src/com/android/policy/statusbar/phone/PhoneStatusBarService.java35
-rwxr-xr-xpolicy/com/android/internal/policy/impl/PhoneWindowManager.java16
-rw-r--r--services/java/com/android/server/status/StatusBarManagerService.java34
-rw-r--r--tests/StatusBar/src/com/android/statusbartest/StatusBarTest.java17
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);
- }
- },
};
}