Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e345fff2 authored by Joe Onorato's avatar Joe Onorato
Browse files

notifications show

Change-Id: I9240b803c643874828c95afcf1ba9ed91194dbc0
parent a0c56fe9
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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);
    }

+4 −0
Original line number Diff line number Diff line
@@ -107,6 +107,10 @@ public class StatusBarNotification implements Parcelable {
                + " notification=" + notification + ")";
    }

    public boolean isOngoing() {
        return (notification.flags & Notification.FLAG_ONGOING_EVENT) != 0;
    }

}

+2 −1
Original line number Diff line number Diff line
@@ -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"
+44 −22
Original line number Diff line number Diff line
@@ -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 long when;
    public boolean ongoingEvent;
    public boolean clearable;

    public RemoteViews contentView;
    public PendingIntent contentIntent;

    public PendingIntent deleteIntent;

    public String toString() {
        return "NotificationData(package=" + pkg + " id=" + id + " tickerText=" + tickerText
                + " ongoingEvent=" + ongoingEvent + " contentIntent=" + contentIntent
                + " deleteIntent=" + deleteIntent
                + " clearable=" + clearable
                + " contentView=" + contentView + " when=" + when + ")";
    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 int size() {
        return mEntries.size();
    }

    public Entry getEntryAt(int index) {
        return mEntries.get(index);
    }

    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;
    }

    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;
    }
}
+64 −18
Original line number Diff line number Diff line
@@ -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) {
@@ -385,8 +422,17 @@ public class PhoneStatusBarService extends StatusBarService {
        }
    };

    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);
Loading