/** * Returns the system window decorations if the implementation sets {@link * #FLAG_DECORATION_SYSTEM}. * * <p>The system window decorations support hiding, closing, moving, and resizing. * * @return The frame view containing the system window decorations. */ private View getSystemDecorations() { final View decorations = mLayoutInflater.inflate(R.layout.system_window_decorators, null); // icon final ImageView icon = (ImageView) decorations.findViewById(R.id.window_icon); if (mContext.getAppIcon() > 0) { icon.setImageResource(mContext.getAppIcon()); icon.setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { PopupWindow dropDown = mContext.getDropDown(id); if (dropDown != null) { dropDown.showAsDropDown(icon); } } }); } else { icon.setVisibility(View.GONE); } // title TextView title = (TextView) decorations.findViewById(R.id.title); title.setText(mContext.getTitle(id)); // hide View hide = decorations.findViewById(R.id.hide); hide.setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { mContext.hide(id); } }); hide.setVisibility(View.GONE); // maximize View maximize = decorations.findViewById(R.id.maximize); maximize.setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { StandOutLayoutParams params = getLayoutParams(); boolean isMaximized = data.getBoolean(WindowDataKeys.IS_MAXIMIZED); if (isMaximized && params.width == displayWidth && params.height == displayHeight && params.x == 0 && params.y == 0) { data.putBoolean(WindowDataKeys.IS_MAXIMIZED, false); int oldWidth = data.getInt(WindowDataKeys.WIDTH_BEFORE_MAXIMIZE, -1); int oldHeight = data.getInt(WindowDataKeys.HEIGHT_BEFORE_MAXIMIZE, -1); int oldX = data.getInt(WindowDataKeys.X_BEFORE_MAXIMIZE, -1); int oldY = data.getInt(WindowDataKeys.Y_BEFORE_MAXIMIZE, -1); edit().setSize(oldWidth, oldHeight).setPosition(oldX, oldY).commit(); } else { data.putBoolean(WindowDataKeys.IS_MAXIMIZED, true); data.putInt(WindowDataKeys.WIDTH_BEFORE_MAXIMIZE, params.width); data.putInt(WindowDataKeys.HEIGHT_BEFORE_MAXIMIZE, params.height); data.putInt(WindowDataKeys.X_BEFORE_MAXIMIZE, params.x); data.putInt(WindowDataKeys.Y_BEFORE_MAXIMIZE, params.y); edit().setSize(1f, 1f).setPosition(0, 0).commit(); } } }); // close View close = decorations.findViewById(R.id.close); close.setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { mContext.close(id); } }); // move View titlebar = decorations.findViewById(R.id.titlebar); titlebar.setOnTouchListener( new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // handle dragging to move return mContext.onTouchHandleMove(id, Window.this, v, event); } }); // resize View corner = decorations.findViewById(R.id.corner); corner.setOnTouchListener( new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // handle dragging to move boolean consumed = mContext.onTouchHandleResize(id, Window.this, v, event); return consumed; } }); // set window appearance and behavior based on flags if (Utils.isSet(flags, StandOutFlags.FLAG_WINDOW_HIDE_ENABLE)) { hide.setVisibility(View.VISIBLE); } if (Utils.isSet(flags, StandOutFlags.FLAG_DECORATION_MAXIMIZE_DISABLE)) { maximize.setVisibility(View.GONE); } if (Utils.isSet(flags, StandOutFlags.FLAG_DECORATION_CLOSE_DISABLE)) { close.setVisibility(View.GONE); } if (Utils.isSet(flags, StandOutFlags.FLAG_DECORATION_MOVE_DISABLE)) { titlebar.setOnTouchListener(null); } if (Utils.isSet(flags, StandOutFlags.FLAG_DECORATION_RESIZE_DISABLE)) { corner.setVisibility(View.GONE); } return decorations; }