/* * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.systemui.accessibility.floatingmenu; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_EXCLUDE_FROM_SCREEN_MAGNIFICATION; import android.content.Context; import android.graphics.PixelFormat; import android.view.WindowInsets; import android.view.WindowManager; import android.view.accessibility.AccessibilityManager; import com.android.systemui.util.settings.SecureSettings; /** * Controls the {@link MenuViewLayer} whether to be attached to the window via the interface * of {@link IAccessibilityFloatingMenu}. */ class MenuViewLayerController implements IAccessibilityFloatingMenu { private final WindowManager mWindowManager; private final MenuViewLayer mMenuViewLayer; private boolean mIsShowing; MenuViewLayerController(Context context, WindowManager windowManager, AccessibilityManager accessibilityManager, SecureSettings secureSettings) { mWindowManager = windowManager; mMenuViewLayer = new MenuViewLayer(context, windowManager, accessibilityManager, this, secureSettings); } @Override public boolean isShowing() { return mIsShowing; } @Override public void show() { if (isShowing()) { return; } mIsShowing = true; mWindowManager.addView(mMenuViewLayer, createDefaultLayerLayoutParams()); } @Override public void hide() { if (!isShowing()) { return; } mIsShowing = false; mWindowManager.removeView(mMenuViewLayer); } private static WindowManager.LayoutParams createDefaultLayerLayoutParams() { final WindowManager.LayoutParams params = new WindowManager.LayoutParams( WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT); params.receiveInsetsIgnoringZOrder = true; params.privateFlags |= PRIVATE_FLAG_EXCLUDE_FROM_SCREEN_MAGNIFICATION; params.windowAnimations = android.R.style.Animation_Translucent; params.setFitInsetsTypes( WindowInsets.Type.systemBars() | WindowInsets.Type.displayCutout()); return params; } }