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

Commit 6768c11d authored by Daniel Sandler's avatar Daniel Sandler Committed by Android (Google) Code Review
Browse files

Merge changes I8343449c,I4eaf69a1

* changes:
  New slide-out mechanism.
  Newly reimplemented PhoneStatusBar, now with fewer windows.
parents 1b0cc3ca 079b33d2
Loading
Loading
Loading
Loading
+93 −86
Original line number Diff line number Diff line
@@ -18,14 +18,22 @@
*/
-->

<com.android.systemui.statusbar.phone.ExpandedView 
<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
    android:orientation="vertical"
    android:focusable="true"
    android:descendantFocusability="afterDescendants"
    >

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:id="@+id/notification_panel"
        android:background="@drawable/notification_tracking_bg"
        android:paddingTop="@*android:dimen/status_bar_height"
        >

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="52dp"
@@ -82,35 +90,18 @@
        <View
            android:layout_width="match_parent"
            android:layout_height="2dp"
            android:layout_marginTop="52dp"
            android:background="@drawable/status_bar_hr"
            />
    
    <FrameLayout
        android:layout_width="match_parent" 
        android:layout_height="wrap_content"
        android:layout_weight="1"
        >
        <TextView android:id="@+id/noNotificationsTitle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textAppearance="@android:style/TextAppearance.Large"
            android:padding="8dp"
            android:layout_gravity="top"
            android:gravity="left"
            android:text="@string/status_bar_no_notifications_title"
            />

        <ScrollView
            android:id="@+id/scroll"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fadingEdge="none"
            android:overScrollMode="ifContentScrolls"
            >
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
			android:layout_marginTop="54dp"
			android:layout_marginBottom="34dp"
            >
            <com.android.systemui.statusbar.policy.NotificationRowLayout
                android:id="@+id/latestItems"
@@ -118,16 +109,32 @@
                android:layout_height="wrap_content"
                systemui:rowHeight="@dimen/notification_height"
                />

            </LinearLayout>
        </ScrollView>
    
        <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_height="wrap_content"
            android:src="@drawable/title_bar_shadow"
			android:layout_marginTop="54dp"
            android:scaleType="fitXY"
        />
   
    </FrameLayout>
</com.android.systemui.statusbar.phone.ExpandedView>
        <com.android.systemui.statusbar.phone.CloseDragHandle android:id="@+id/close"
            android:layout_width="match_parent"
            android:layout_height="34dp"
            android:layout_gravity="bottom"
            android:orientation="vertical"
            >
            <ImageView
                android:layout_width="match_parent"
                android:layout_height="34dp"
                android:layout_gravity="bottom"
                android:scaleType="fitXY"
                android:src="@drawable/status_bar_close_on"
                />
    
        </com.android.systemui.statusbar.phone.CloseDragHandle>
    
    </FrameLayout><!-- end of sliding panel -->

</FrameLayout><!-- end of window -->
 No newline at end of file
+1 −1
Original line number Diff line number Diff line
@@ -26,7 +26,7 @@
    <color name="status_bar_recents_app_label_color">#ffffffff</color>
    <drawable name="status_bar_notification_row_background_color">#ff090909</drawable>
    <drawable name="notification_header_bg">#FF000000</drawable>
    <drawable name="notification_tracking_bg">#d8000000</drawable>
    <drawable name="notification_tracking_bg">#66000000</drawable>
    <color name="notification_list_shadow_top">#80000000</color>
    <drawable name="recents_callout_line">#99ffffff</drawable>
    <drawable name="notification_item_background_legacy_color">#ffaaaaaa</drawable>
+3 −3
Original line number Diff line number Diff line
@@ -54,7 +54,7 @@ import android.widget.ScrollView;
import android.widget.TextView;

import com.android.systemui.R;
import com.android.systemui.statusbar.StatusBar;
import com.android.systemui.statusbar.BaseStatusBar;
import com.android.systemui.statusbar.phone.PhoneStatusBar;
import com.android.systemui.statusbar.tablet.StatusBarPanel;
import com.android.systemui.statusbar.tablet.TabletStatusBar;
@@ -66,7 +66,7 @@ public class RecentsPanelView extends FrameLayout implements OnItemClickListener
    static final String TAG = "RecentsPanelView";
    static final boolean DEBUG = TabletStatusBar.DEBUG || PhoneStatusBar.DEBUG || false;
    private Context mContext;
    private StatusBar mBar;
    private BaseStatusBar mBar;
    private View mRecentsScrim;
    private View mRecentsNoApps;
    private ViewGroup mRecentsContainer;
@@ -379,7 +379,7 @@ public class RecentsPanelView extends FrameLayout implements OnItemClickListener
        return mShowing;
    }

    public void setBar(StatusBar bar) {
    public void setBar(BaseStatusBar bar) {
        mBar = bar;

    }
+51 −66
Original line number Diff line number Diff line
@@ -16,60 +16,75 @@

package com.android.systemui.statusbar;

import android.app.ActivityManager;
import android.app.Service;
import java.util.ArrayList;

import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.PixelFormat;
import android.os.IBinder;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.util.Slog;
import android.util.Log;
import android.util.Slog;
import android.view.Display;
import android.view.Gravity;
import android.view.IWindowManager;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.view.WindowManagerImpl;

import java.util.ArrayList;

import com.android.internal.statusbar.IStatusBarService;
import com.android.internal.statusbar.StatusBarIcon;
import com.android.internal.statusbar.StatusBarIconList;
import com.android.internal.statusbar.StatusBarNotification;

import com.android.systemui.SystemUI;
import com.android.systemui.statusbar.CommandQueue;

import com.android.systemui.R;

public abstract class StatusBar extends SystemUI implements CommandQueue.Callbacks {
public abstract class BaseStatusBar extends SystemUI implements CommandQueue.Callbacks {
    static final String TAG = "StatusBar";
    private static final boolean SPEW = false;
    private static final boolean DEBUG = false;

    protected CommandQueue mCommandQueue;
    protected IStatusBarService mBarService;

    // Up-call methods
    protected abstract View makeStatusBarView();
    protected abstract int getStatusBarGravity();
    public abstract int getStatusBarHeight();
    public abstract void animateCollapse();
    // UI-specific methods
    
    private DoNotDisturb mDoNotDisturb;
    /**
     * Create all windows necessary for the status bar (including navigation, overlay panels, etc)
     * and add them to the window manager.
     */
    protected abstract void createAndAddWindows();

    protected Display mDisplay;
    private IWindowManager mWindowManager;

    
    public IWindowManager getWindowManager() {
        return mWindowManager;
    }
    
    public Display getDisplay() {
        return mDisplay;
    }
    
    public IStatusBarService getStatusBarService() {
        return mBarService;
    }

    public void start() {
        // First set up our views and stuff.
        View sb = makeStatusBarView();
        mDisplay = ((WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE))
                .getDefaultDisplay();

        mWindowManager = IWindowManager.Stub.asInterface(
                ServiceManager.getService(Context.WINDOW_SERVICE));

        mBarService = IStatusBarService.Stub.asInterface(
                ServiceManager.getService(Context.STATUS_BAR_SERVICE));

        // Connect in to the status bar manager service
        StatusBarIconList iconList = new StatusBarIconList();
        ArrayList<IBinder> notificationKeys = new ArrayList<IBinder>();
        ArrayList<StatusBarNotification> notifications = new ArrayList<StatusBarNotification>();
        mCommandQueue = new CommandQueue(this, iconList);
        mBarService = IStatusBarService.Stub.asInterface(
                ServiceManager.getService(Context.STATUS_BAR_SERVICE));
        
        int[] switches = new int[7];
        ArrayList<IBinder> binders = new ArrayList<IBinder>();
        try {
@@ -79,6 +94,8 @@ public abstract class StatusBar extends SystemUI implements CommandQueue.Callbac
            // If the system process isn't there we're doomed anyway.
        }
        
        createAndAddWindows();

        disable(switches[0]);
        setSystemUiVisibility(switches[1]);
        topAppWindowChanged(switches[2] != 0);
@@ -108,48 +125,16 @@ public abstract class StatusBar extends SystemUI implements CommandQueue.Callbac
                    + " notifications=" + notifications.size());
        }

        // Put up the view
        final int height = getStatusBarHeight();

        final WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                height,
                WindowManager.LayoutParams.TYPE_STATUS_BAR,
                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                    | WindowManager.LayoutParams.FLAG_TOUCHABLE_WHEN_WAKING
                    | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH,
                // We use a pixel format of RGB565 for the status bar to save memory bandwidth and
                // to ensure that the layer can be handled by HWComposer.  On some devices the
                // HWComposer is unable to handle SW-rendered RGBX_8888 layers.
                PixelFormat.RGB_565);
        
        // the status bar should be in an overlay if possible
        final Display defaultDisplay 
            = ((WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE))
                .getDefaultDisplay();

        // We explicitly leave FLAG_HARDWARE_ACCELERATED out of the flags.  The status bar occupies
        // very little screen real-estate and is updated fairly frequently.  By using CPU rendering
        // for the status bar, we prevent the GPU from having to wake up just to do these small
        // updates, which should help keep power consumption down.

        lp.gravity = getStatusBarGravity();
        lp.setTitle("StatusBar");
        lp.packageName = mContext.getPackageName();
        lp.windowAnimations = R.style.Animation_StatusBar;
        WindowManagerImpl.getDefault().addView(sb, lp);

        if (SPEW) {
            Slog.d(TAG, "Added status bar view: gravity=0x" + Integer.toHexString(lp.gravity) 
                   + " icons=" + iconList.size()
                   + " disabled=0x" + Integer.toHexString(switches[0])
                   + " lights=" + switches[1]
                   + " menu=" + switches[2]
                   + " imeButton=" + switches[3]
                   );
        if (DEBUG) {
            Slog.d(TAG, String.format(
                    "init: icons=%d disabled=0x%08x lights=0x%08x menu=0x%08x imeButton=0x%08x", 
                   iconList.size(),
                   switches[0],
                   switches[1],
                   switches[2],
                   switches[3]
                   ));
        }

        mDoNotDisturb = new DoNotDisturb(mContext);
    }
    
    protected View updateNotificationVetoButton(View row, StatusBarNotification n) {
+3 −3
Original line number Diff line number Diff line
@@ -119,7 +119,7 @@ public class StatusBarIconView extends AnimatedImageView {
        if (!iconEquals) {
            Drawable drawable = getIcon(icon);
            if (drawable == null) {
                Slog.w(StatusBar.TAG, "No icon for slot " + mSlot);
                Slog.w(TAG, "No icon for slot " + mSlot);
                return false;
            }
            setImageDrawable(drawable);
@@ -167,7 +167,7 @@ public class StatusBarIconView extends AnimatedImageView {
            try {
                r = context.getPackageManager().getResourcesForApplication(icon.iconPackage);
            } catch (PackageManager.NameNotFoundException ex) {
                Slog.e(StatusBar.TAG, "Icon package not found: " + icon.iconPackage);
                Slog.e(TAG, "Icon package not found: " + icon.iconPackage);
                return null;
            }
        } else {
@@ -181,7 +181,7 @@ public class StatusBarIconView extends AnimatedImageView {
        try {
            return r.getDrawable(icon.iconId);
        } catch (RuntimeException e) {
            Slog.w(StatusBar.TAG, "Icon not found in "
            Slog.w(TAG, "Icon not found in "
                  + (icon.iconPackage != null ? icon.iconId : "<system>")
                  + ": " + Integer.toHexString(icon.iconId));
        }
Loading