blob: 3dec38734874e2dca7d07c65162f9296b3633cb4 [file] [log] [blame]
/*
* Copyright (C) 2021 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.screenshot;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
import static android.view.WindowManager.LayoutParams.TYPE_SCREENSHOT;
import android.content.Context;
import android.graphics.PixelFormat;
import android.util.DisplayMetrics;
import android.view.Window;
import android.view.WindowManager;
import com.android.internal.policy.PhoneWindow;
/**
* Utility methods for setting up a floating window
*/
public class FloatingWindowUtil {
/**
* Convert input dp to pixels given DisplayMetrics
*/
public static float dpToPx(DisplayMetrics metrics, float dp) {
return dp * metrics.densityDpi / (float) DisplayMetrics.DENSITY_DEFAULT;
}
/**
* Sets up window params for a floating window
*/
public static WindowManager.LayoutParams getFloatingWindowParams() {
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
MATCH_PARENT, MATCH_PARENT, /* xpos */ 0, /* ypos */ 0, TYPE_SCREENSHOT,
WindowManager.LayoutParams.FLAG_FULLSCREEN
| WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
| WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
PixelFormat.TRANSLUCENT);
params.layoutInDisplayCutoutMode =
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
params.setFitInsetsTypes(0);
// This is needed to let touches pass through outside the touchable areas
params.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_TRUSTED_OVERLAY;
return params;
}
/**
* Constructs a transparent floating window
*/
public static PhoneWindow getFloatingWindow(Context context) {
PhoneWindow window = new PhoneWindow(context);
window.requestFeature(Window.FEATURE_NO_TITLE);
window.requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);
window.setBackgroundDrawableResource(android.R.color.transparent);
return window;
}
}