From 1e3688a1ee60597f429577b2cf7ac73f3fd5951f Mon Sep 17 00:00:00 2001 From: w30001670 Date: Fri, 3 Jul 2020 10:08:20 +0800 Subject: [PATCH] DecorCaptionView: Add window property and set qqmusic app HIDE_BACK 1.Add four window property: private static final int HIDE_BACK = 0x01; private static final int HIDE_MINIMIZE = 0x02; private static final int HIDE_MAXIMIZE = 0x04; private static final int HIDE_CLOSE = 0x08; 2.set qqmusic app HIDE_BACK to hide back button --- .../internal/widget/DecorCaptionView.java | 94 +++++++++++++++---- 1 file changed, 78 insertions(+), 16 deletions(-) diff --git a/core/java/com/android/internal/widget/DecorCaptionView.java b/core/java/com/android/internal/widget/DecorCaptionView.java index d93075e3..1c6956f2 100644 --- a/core/java/com/android/internal/widget/DecorCaptionView.java +++ b/core/java/com/android/internal/widget/DecorCaptionView.java @@ -17,23 +17,24 @@ package com.android.internal.widget; import android.content.Context; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; import android.graphics.Color; import android.graphics.Rect; -import android.os.RemoteException; import android.util.AttributeSet; -import android.util.Log; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.View; import android.view.ViewConfiguration; import android.view.ViewGroup; import android.view.ViewOutlineProvider; -import android.view.Window; import com.android.internal.R; import com.android.internal.policy.PhoneWindow; import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; /** * This class represents the special screen elements to control a window on freeform @@ -93,7 +94,7 @@ public class DecorCaptionView extends ViewGroup implements View.OnTouchListener, private View mMinimize; private View mClose; private View mBack; - private int mDefaultHeight = 42; // unChangeable caption height + private static final int DEFAULT_HEIGHT = 42; // unChangeable caption height // Fields for detecting drag events. private int mTouchDownX; @@ -112,6 +113,18 @@ public class DecorCaptionView extends ViewGroup implements View.OnTouchListener, private final Rect mBackRect = new Rect(); // click area of back button private View mClickTarget; + private static final int HIDE_BACK = 0x01; + private static final int HIDE_MINIMIZE = 0x02; + private static final int HIDE_MAXIMIZE = 0x04; + private static final int HIDE_CLOSE = 0x08; + private static final int SHOW_ALL = 0x00; + + private static final Map propertyMap = new HashMap() { + { + put("QQ音乐", HIDE_BACK); + } + }; + public DecorCaptionView(Context context) { super(context); init(context); @@ -290,7 +303,7 @@ public class DecorCaptionView extends ViewGroup implements View.OnTouchListener, final int captionHeight; if (mCaption.getVisibility() != View.GONE) { measureChildWithMargins(mCaption, widthMeasureSpec, 0, heightMeasureSpec, 0); - captionHeight = mDefaultHeight; + captionHeight = DEFAULT_HEIGHT; } else { captionHeight = 0; } @@ -307,25 +320,74 @@ public class DecorCaptionView extends ViewGroup implements View.OnTouchListener, MeasureSpec.getSize(heightMeasureSpec)); } + private int getAppProperty() { + Context context = mContext; + try { + PackageManager packageManager = context.getPackageManager(); + PackageInfo packageInfo = packageManager.getPackageInfo( + context.getPackageName(), 0); + int labelRes = packageInfo.applicationInfo.labelRes; + String appName = context.getResources().getString(labelRes); + Integer property = propertyMap.get(appName); + if (property != null) { + return property; + } else { + return SHOW_ALL; + } + } catch (Exception e) { + Log.e("getAppProperty exc ocured!!return SHOW_ALL instead."); + } + return SHOW_ALL; + } + + private int appProperty = getAppProperty(); + private boolean firstSetProperty = true; + @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { final int captionHeight; if (mCaption.getVisibility() != View.GONE) { - mCaption.layout(0, 0, mCaption.getMeasuredWidth(), mDefaultHeight); + mCaption.layout(0, 0, mCaption.getMeasuredWidth(), DEFAULT_HEIGHT); captionHeight = mCaption.getBottom() - mCaption.getTop(); - if (mBack.getHeight() != captionHeight) { + if (mBack.getHeight() != captionHeight || firstSetProperty) { + firstSetProperty = false; final int captionWidth = mCaption.getRight() - mCaption.getLeft(); - mBack.layout(0, 0, captionHeight, captionHeight); - mMinimize.layout(captionWidth - captionHeight * 3, 0, captionWidth - captionHeight * 2, captionHeight); - mMaximize.layout(captionWidth - captionHeight * 2, 0, captionWidth - captionHeight, captionHeight); - mClose.layout(captionWidth - captionHeight, 0, captionWidth, captionHeight); + if ((appProperty & HIDE_BACK) == HIDE_BACK) { + mBack.setVisibility(View.GONE); + mBackRect.setEmpty(); + } else { + mBack.layout(0, 0, captionHeight, captionHeight); + mBack.getHitRect(mBackRect); + } + int btnCount = 1; + if ((appProperty & HIDE_CLOSE) == HIDE_CLOSE) { + mClose.setVisibility(View.GONE); + mCloseRect.setEmpty(); + } else { + mClose.layout(captionWidth - captionHeight * btnCount, 0, + captionWidth - captionHeight * (btnCount - 1), captionHeight); + mClose.getHitRect(mCloseRect); + ++btnCount; + } + if ((appProperty & HIDE_MAXIMIZE) == HIDE_MAXIMIZE) { + mMaximize.setVisibility(View.GONE); + mMaximizeRect.setEmpty(); + } else { + mMaximize.layout(captionWidth - captionHeight * btnCount, 0, + captionWidth - captionHeight * (btnCount - 1), captionHeight); + mMaximize.getHitRect(mMaximizeRect); + ++btnCount; + } + if ((appProperty & HIDE_MINIMIZE) == HIDE_MINIMIZE) { + mMinimize.setVisibility(View.GONE); + mMinimizeRect.setEmpty(); + } else { + mMinimize.layout(captionWidth - captionHeight * btnCount, 0, + captionWidth - captionHeight * (btnCount - 1), captionHeight); + mMinimize.getHitRect(mMinimizeRect); + } } - - mMaximize.getHitRect(mMaximizeRect); - mMinimize.getHitRect(mMinimizeRect); - mBack.getHitRect(mBackRect); - mClose.getHitRect(mCloseRect); } else { captionHeight = 0; mMaximizeRect.setEmpty(); -- Gitee