Report caption insets change when layout
This patch let DecorCaptionView report back to it's owner about height change, instead of let the DecorView query the height. The previous query points enableCaption() and updateDecorCaptionStatus() cannot ensure the caption layout is finished and attached to the phone window. Such that it may return a zero caption insets when it shouldn't be, if the app do window configuration change handling by restarting. The layout will ensure the caption insets get set when everything is ready. There will be no caption height change when resizing or moving, make sure the calculated insets always include the caption regardless of the frame position. Bug: 154792488 Test: Manuel test with message and settings app. Test: go/wm-smoke Test: atest InsetsControllerTest#testCaptionInsetsStateAssemble Test: atest InsetsSourceTest#testCalculateInsets_caption_resizing Change-Id: I1728628eccb32b912210a64fe3a1c9cbe9e3b302
This commit is contained in:
@@ -2019,10 +2019,17 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind
|
||||
if (getForeground() != null) {
|
||||
drawableChanged();
|
||||
}
|
||||
getWindowInsetsController().setCaptionInsetsHeight(getCaptionInsetsHeight());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* An interface to be called when the caption visibility or height changed, to report the
|
||||
* corresponding insets change to the InsetsController.
|
||||
*/
|
||||
public void notifyCaptionHeightChanged() {
|
||||
getWindowInsetsController().setCaptionInsetsHeight(getCaptionInsetsHeight());
|
||||
}
|
||||
|
||||
void setWindow(PhoneWindow phoneWindow) {
|
||||
mWindow = phoneWindow;
|
||||
Context context = getContext();
|
||||
@@ -2093,7 +2100,6 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind
|
||||
mDecorCaptionView.onConfigurationChanged(displayWindowDecor);
|
||||
enableCaption(displayWindowDecor);
|
||||
}
|
||||
getWindowInsetsController().setCaptionInsetsHeight(getCaptionInsetsHeight());
|
||||
}
|
||||
|
||||
void onResourcesLoaded(LayoutInflater inflater, int layoutResource) {
|
||||
|
||||
@@ -30,6 +30,7 @@ import android.view.ViewOutlineProvider;
|
||||
import android.view.Window;
|
||||
|
||||
import com.android.internal.R;
|
||||
import com.android.internal.policy.DecorView;
|
||||
import com.android.internal.policy.PhoneWindow;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -305,6 +306,8 @@ public class DecorCaptionView extends ViewGroup implements View.OnTouchListener,
|
||||
}
|
||||
}
|
||||
|
||||
((DecorView) mOwner.getDecorView()).notifyCaptionHeightChanged();
|
||||
|
||||
// This assumes that the caption bar is at the top.
|
||||
mOwner.notifyRestrictedCaptionAreaCallback(mMaximize.getLeft(), mMaximize.getTop(),
|
||||
mClose.getRight(), mClose.getBottom());
|
||||
|
||||
Reference in New Issue
Block a user