blob: 2b7a33260248ef85e77a703712bc399b82f87bc5 [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.tv;
import android.app.Activity;
import android.graphics.PixelFormat;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Gravity;
import android.view.WindowManager;
import com.android.systemui.R;
import java.util.function.Consumer;
/**
* Generic bottom sheet with up to two icons in the beginning and two buttons.
*/
public abstract class TvBottomSheetActivity extends Activity {
private static final String TAG = TvBottomSheetActivity.class.getSimpleName();
private Drawable mBackgroundWithBlur;
private Drawable mBackgroundWithoutBlur;
private final Consumer<Boolean> mBlurConsumer = this::onBlurChanged;
private void onBlurChanged(boolean enabled) {
Log.v(TAG, "blur enabled: " + enabled);
getWindow().setBackgroundDrawable(enabled ? mBackgroundWithBlur : mBackgroundWithoutBlur);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tv_bottom_sheet);
overridePendingTransition(R.anim.tv_bottom_sheet_enter, 0);
mBackgroundWithBlur = getResources()
.getDrawable(R.drawable.bottom_sheet_background_with_blur);
mBackgroundWithoutBlur = getResources().getDrawable(R.drawable.bottom_sheet_background);
DisplayMetrics metrics = getResources().getDisplayMetrics();
int screenWidth = metrics.widthPixels;
int screenHeight = metrics.heightPixels;
int marginPx = getResources().getDimensionPixelSize(R.dimen.bottom_sheet_margin);
WindowManager.LayoutParams windowParams = getWindow().getAttributes();
windowParams.width = screenWidth - marginPx * 2;
windowParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
windowParams.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL;
windowParams.horizontalMargin = 0f;
windowParams.verticalMargin = (float) marginPx / screenHeight;
windowParams.format = PixelFormat.TRANSPARENT;
windowParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG;
windowParams.flags |= WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
windowParams.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
getWindow().setAttributes(windowParams);
getWindow().setElevation(getWindow().getElevation() + 5);
getWindow().setBackgroundBlurRadius(getResources().getDimensionPixelSize(
R.dimen.bottom_sheet_background_blur_radius));
}
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
getWindowManager().addCrossWindowBlurEnabledListener(mBlurConsumer);
}
@Override
public void onDetachedFromWindow() {
getWindowManager().removeCrossWindowBlurEnabledListener(mBlurConsumer);
super.onDetachedFromWindow();
}
@Override
public void finish() {
super.finish();
overridePendingTransition(0, R.anim.tv_bottom_sheet_exit);
}
}