am e345fff2: notifications show

This commit is contained in:
Joe Onorato
2010-06-02 16:25:44 -07:00
committed by Android Git Automerger
7 changed files with 134 additions and 43 deletions

View File

@@ -70,6 +70,7 @@ public class StatusBarIcon implements Parcelable {
out.writeString(this.iconPackage);
out.writeInt(this.iconId);
out.writeInt(this.iconLevel);
out.writeInt(this.visible ? 1 : 0);
out.writeInt(this.number);
}

View File

@@ -107,6 +107,10 @@ public class StatusBarNotification implements Parcelable {
+ " notification=" + notification + ")";
}
public boolean isOngoing() {
return (notification.flags & Notification.FLAG_ONGOING_EVENT) != 0;
}
}

View File

@@ -12,7 +12,8 @@
android:orientation="horizontal"
android:paddingTop="3dp"
>
<com.android.server.status.AnimatedImageView android:id="@+id/icon"
<!--com.android.server.status.AnimatedImageView android:id="@+id/icon" -->
<ImageView android:id="@+id/icon"
android:layout_width="25dp"
android:layout_height="25dp"
android:scaleType="fitCenter"

View File

@@ -16,29 +16,51 @@
package com.android.policy.statusbar.phone;
import android.app.PendingIntent;
import android.widget.RemoteViews;
import android.os.IBinder;
import android.view.View;
import com.android.internal.statusbar.StatusBarNotification;
import java.util.ArrayList;
/**
* The list of currently displaying notifications.
*/
public class NotificationData {
public String pkg;
public String tag;
public int id;
public CharSequence tickerText;
public static final class Entry {
public IBinder key;
public StatusBarNotification notification;
public StatusBarIconView icon;
public View expanded;
}
private final ArrayList<Entry> mEntries = new ArrayList<Entry>();
public long when;
public boolean ongoingEvent;
public boolean clearable;
public int size() {
return mEntries.size();
}
public RemoteViews contentView;
public PendingIntent contentIntent;
public Entry getEntryAt(int index) {
return mEntries.get(index);
}
public PendingIntent deleteIntent;
public int add(IBinder key, StatusBarNotification notification, View expanded) {
Entry entry = new Entry();
entry.key = key;
entry.notification = notification;
entry.expanded = expanded;
final int index = chooseIndex(notification.notification.when);
mEntries.add(index, entry);
return index;
}
public String toString() {
return "NotificationData(package=" + pkg + " id=" + id + " tickerText=" + tickerText
+ " ongoingEvent=" + ongoingEvent + " contentIntent=" + contentIntent
+ " deleteIntent=" + deleteIntent
+ " clearable=" + clearable
+ " contentView=" + contentView + " when=" + when + ")";
private int chooseIndex(final long when) {
final int N = mEntries.size();
for (int i=0; i<N; i++) {
Entry entry = mEntries.get(i);
if (entry.notification.notification.when > when) {
return i;
}
}
return N;
}
}

View File

@@ -24,6 +24,7 @@ import com.android.internal.statusbar.StatusBarNotification;
import android.app.ActivityManagerNative;
import android.app.Dialog;
import android.app.Notification;
import android.app.PendingIntent;
import android.app.Service;
import android.app.StatusBarManager;
@@ -127,22 +128,28 @@ public class PhoneStatusBarService extends StatusBarService {
LinearLayout mStatusIcons;
// expanded notifications
NotificationViewList mNotificationData = new NotificationViewList();
Dialog mExpandedDialog;
ExpandedView mExpandedView;
WindowManager.LayoutParams mExpandedParams;
ScrollView mScrollView;
View mNotificationLinearLayout;
TextView mOngoingTitle;
LinearLayout mOngoingItems;
TextView mLatestTitle;
LinearLayout mLatestItems;
View mExpandedContents;
// top bar
TextView mNoNotificationsTitle;
TextView mSpnLabel;
TextView mPlmnLabel;
TextView mClearButton;
View mExpandedContents;
// drag bar
CloseDragHandle mCloseView;
// ongoing
NotificationData mOngoing = new NotificationData();
TextView mOngoingTitle;
LinearLayout mOngoingItems;
// latest
NotificationData mLatest = new NotificationData();
TextView mLatestTitle;
LinearLayout mLatestItems;
// position
int[] mPositionTmp = new int[2];
boolean mExpanded;
boolean mExpandedVisible;
@@ -317,6 +324,36 @@ public class PhoneStatusBarService extends StatusBarService {
}
public void addNotification(IBinder key, StatusBarNotification notification) {
NotificationData list;
ViewGroup parent;
final boolean isOngoing = notification.isOngoing();
if (isOngoing) {
list = mOngoing;
parent = mOngoingItems;
} else {
list = mLatest;
parent = mLatestItems;
}
// Construct the expanded view.
final View view = makeNotificationView(notification, parent);
// Construct the icon.
StatusBarIconView iconView = new StatusBarIconView(this,
notification.pkg + "/" + notification.id);
iconView.set(new StatusBarIcon(notification.pkg, notification.notification.icon,
notification.notification.iconLevel));
// Add the expanded view.
final int viewIndex = list.add(key, notification, view);
parent.addView(view, viewIndex);
// Add the icon.
final int iconIndex = chooseIconIndex(isOngoing, viewIndex);
mNotificationIcons.addView(iconView, iconIndex,
new LinearLayout.LayoutParams(mIconWidth, mHeight));
// show the ticker
// TODO
// recalculate the position of the sliding windows
updateExpandedViewPos(EXPANDED_LEAVE_ALONE);
}
public void updateNotification(IBinder key, StatusBarNotification notification) {
@@ -384,9 +421,18 @@ public class PhoneStatusBarService extends StatusBarService {
v.setSelected(hasFocus);
}
};
private int chooseIconIndex(boolean isOngoing, int index) {
final int ongoingSize = mOngoing.size();
final int latestSize = mLatest.size();
if (!isOngoing) {
index = mLatest.size() + index;
}
return (ongoingSize + latestSize) - index - 1;
}
View makeNotificationView(StatusBarNotification notification, ViewGroup parent) {
NotificationData n = notification.data;
Notification n = notification.notification;
RemoteViews remoteViews = n.contentView;
if (remoteViews == null) {
return null;
@@ -403,7 +449,8 @@ public class PhoneStatusBarService extends StatusBarService {
content.setOnFocusChangeListener(mFocusChangeListener);
PendingIntent contentIntent = n.contentIntent;
if (contentIntent != null) {
content.setOnClickListener(new Launcher(contentIntent, n.pkg, n.tag, n.id));
content.setOnClickListener(new Launcher(contentIntent, notification.pkg,
notification.tag, notification.id));
}
View child = null;
@@ -415,15 +462,17 @@ public class PhoneStatusBarService extends StatusBarService {
exception = e;
}
if (child == null) {
Slog.e(TAG, "couldn't inflate view for package " + n.pkg, exception);
Slog.e(TAG, "couldn't inflate view for package " + notification.pkg, exception);
return null;
}
content.addView(child);
row.setDrawingCacheEnabled(true);
/*
notification.view = row;
notification.contentView = child;
*/
return row;
}
@@ -433,6 +482,7 @@ public class PhoneStatusBarService extends StatusBarService {
notification.iconLevel);
icon.number = notification.number;
*/
/*
void addNotificationView(StatusBarNotification notification) {
if (notification.view != null) {
throw new RuntimeException("Assertion failed: notification.view="
@@ -449,11 +499,13 @@ public class PhoneStatusBarService extends StatusBarService {
int index = mNotificationData.getExpandedIndex(notification);
parent.addView(child, index);
}
*/
/**
* Remove the old one and put the new one in its place.
* @param notification the notification
*/
/*
void updateNotificationView(StatusBarNotification notification, NotificationData oldData) {
NotificationData n = notification.data;
if (oldData != null && n != null
@@ -498,8 +550,10 @@ public class PhoneStatusBarService extends StatusBarService {
notification.view = null;
}
}
*/
private void setAreThereNotifications() {
/*
boolean ongoing = mOngoingItems.getChildCount() != 0;
boolean latest = mLatestItems.getChildCount() != 0;
@@ -517,6 +571,7 @@ public class PhoneStatusBarService extends StatusBarService {
} else {
mNoNotificationsTitle.setVisibility(View.VISIBLE);
}
*/
}
private void makeExpandedVisible() {
@@ -588,15 +643,6 @@ public class PhoneStatusBarService extends StatusBarService {
return;
}
// It seems strange to sometimes not expand...
if (false) {
synchronized (mNotificationData) {
if (mNotificationData.size() == 0) {
return;
}
}
}
mExpanded = true;
makeExpandedVisible();
updateExpandedViewPos(EXPANDED_FULL_OPEN);

View File

@@ -33,12 +33,14 @@ import android.widget.ImageSwitcher;
import java.util.ArrayList;
import com.android.internal.statusbar.StatusBarNotification;
public abstract class Ticker {
private static final int TICKER_SEGMENT_DELAY = 3000;
private final class Segment {
NotificationData notificationData;
StatusBarNotification notificationData;
Drawable icon;
CharSequence text;
int current;
@@ -114,7 +116,7 @@ public abstract class Ticker {
return null;
}
Segment(NotificationData n, Drawable icon, CharSequence text) {
Segment(StatusBarNotification n, Drawable icon, CharSequence text) {
this.notificationData = n;
this.icon = icon;
this.text = text;
@@ -156,7 +158,7 @@ public abstract class Ticker {
mPaint = text.getPaint();
}
void addEntry(NotificationData n, Drawable icon, CharSequence text) {
void addEntry(StatusBarNotification n, Drawable icon, CharSequence text) {
int initialCount = mSegments.size();
Segment newSegment = new Segment(n, icon, text);

View File

@@ -271,7 +271,12 @@ public class StatusBarManagerService extends IStatusBarService.Stub
synchronized (mNotifications) {
IBinder key = new Binder();
mNotifications.add(key, notification);
// TODO: tell mBar
if (mBar != null) {
try {
mBar.addNotification(key, notification);
} catch (RemoteException ex) {
}
}
return key;
}
}
@@ -279,14 +284,24 @@ public class StatusBarManagerService extends IStatusBarService.Stub
public void updateNotification(IBinder key, StatusBarNotification notification) {
synchronized (mNotifications) {
mNotifications.update(key, notification);
// TODO: tell mBar
if (mBar != null) {
try {
mBar.updateNotification(key, notification);
} catch (RemoteException ex) {
}
}
}
}
public void removeNotification(IBinder key) {
synchronized (mNotifications) {
mNotifications.remove(key);
// TODO: tell mBar
if (mBar != null) {
try {
mBar.removeNotification(key);
} catch (RemoteException ex) {
}
}
}
}