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

Commit c4d5d026 authored by Dianne Hackborn's avatar Dianne Hackborn
Browse files

Add new window manager type for a hacking second-level media surface.

This adds a new window type that is a surface that sits between the
current media type and the application window, in theory allowing you
to have two surface views in your hierarchy and control their
Z-ordering.  There is also another hidden API on SurfaceView to set
the type of your window.

All a big hack, but for the good of the commonwealth!
parent 384bfa27
Loading
Loading
Loading
Loading
+12 −1
Original line number Original line Diff line number Diff line
@@ -100,6 +100,8 @@ public class SurfaceView extends View {
    static final int KEEP_SCREEN_ON_MSG = 1;
    static final int KEEP_SCREEN_ON_MSG = 1;
    static final int GET_NEW_SURFACE_MSG = 2;
    static final int GET_NEW_SURFACE_MSG = 2;
    
    
    int mWindowType = WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA;
    
    boolean mIsCreating = false;
    boolean mIsCreating = false;


    final Handler mHandler = new Handler() {
    final Handler mHandler = new Handler() {
@@ -285,6 +287,15 @@ public class SurfaceView extends View {
        super.dispatchDraw(canvas);
        super.dispatchDraw(canvas);
    }
    }


    /**
     * Hack to allow special layering of windows.  The type is one of the
     * types in WindowManager.LayoutParams.  This is a hack so:
     * @hide
     */
    public void setWindowType(int type) {
        mWindowType = type;
    }
    
    private void updateWindow(boolean force) {
    private void updateWindow(boolean force) {
        if (!mHaveFrame) {
        if (!mHaveFrame) {
            return;
            return;
@@ -342,7 +353,7 @@ public class SurfaceView extends View {


                if (mWindow == null) {
                if (mWindow == null) {
                    mWindow = new MyWindow(this);
                    mWindow = new MyWindow(this);
                    mLayout.type = WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA;
                    mLayout.type = mWindowType;
                    mLayout.gravity = Gravity.LEFT|Gravity.TOP;
                    mLayout.gravity = Gravity.LEFT|Gravity.TOP;
                    mSession.add(mWindow, mLayout,
                    mSession.add(mWindow, mLayout,
                            mVisible ? VISIBLE : GONE, mContentInsets);
                            mVisible ? VISIBLE : GONE, mContentInsets);
+6 −0
Original line number Original line Diff line number Diff line
@@ -376,8 +376,14 @@ public abstract class Window {
                    String title;
                    String title;
                    if (wp.type == WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA) {
                    if (wp.type == WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA) {
                        title="Media";
                        title="Media";
                    } else if (wp.type == WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA_OVERLAY) {
                        title="MediaOvr";
                    } else if (wp.type == WindowManager.LayoutParams.TYPE_APPLICATION_PANEL) {
                    } else if (wp.type == WindowManager.LayoutParams.TYPE_APPLICATION_PANEL) {
                        title="Panel";
                        title="Panel";
                    } else if (wp.type == WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL) {
                        title="SubPanel";
                    } else if (wp.type == WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG) {
                        title="AtchDlg";
                    } else {
                    } else {
                        title=Integer.toString(wp.type);
                        title=Integer.toString(wp.type);
                    }
                    }
+9 −0
Original line number Original line Diff line number Diff line
@@ -209,6 +209,15 @@ public interface WindowManager extends ViewManager {
         */
         */
        public static final int TYPE_APPLICATION_ATTACHED_DIALOG = FIRST_SUB_WINDOW+3;
        public static final int TYPE_APPLICATION_ATTACHED_DIALOG = FIRST_SUB_WINDOW+3;
        
        
        /**
         * Window type: window for showing overlays on top of media windows.
         * These windows are displayed between TYPE_APPLICATION_MEDIA and the
         * application window.  They should be translucent to be useful.  This
         * is a big ugly hack so:
         * @hide
         */
        public static final int TYPE_APPLICATION_MEDIA_OVERLAY  = FIRST_SUB_WINDOW+4;
    
        /**
        /**
         * End of types of sub-windows.
         * End of types of sub-windows.
         */
         */