package org.telegram.ui.Components; import android.app.Dialog; import android.content.Context; import android.graphics.Color; import android.os.Build; import android.os.Bundle; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import android.widget.FrameLayout; import androidx.annotation.NonNull; import androidx.core.graphics.ColorUtils; import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.R; import org.telegram.ui.ActionBar.ActionBarLayout; import org.telegram.ui.ActionBar.BaseFragment; import org.telegram.ui.ActionBar.Theme; import java.util.ArrayList; public class OverlayActionBarLayoutDialog extends Dialog implements ActionBarLayout.ActionBarLayoutDelegate { private Theme.ResourcesProvider resourcesProvider; private ActionBarLayout actionBarLayout; private FrameLayout frameLayout; public OverlayActionBarLayoutDialog(@NonNull Context context, Theme.ResourcesProvider resourcesProvider) { super(context, R.style.TransparentDialog); this.resourcesProvider = resourcesProvider; actionBarLayout = new ActionBarLayout(context) { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (AndroidUtilities.isTablet() && !AndroidUtilities.isInMultiwindow && !AndroidUtilities.isSmallTablet()) { super.onMeasure(MeasureSpec.makeMeasureSpec(Math.min(AndroidUtilities.dp(530), MeasureSpec.getSize(widthMeasureSpec)), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(Math.min(AndroidUtilities.dp(528), MeasureSpec.getSize(heightMeasureSpec)), MeasureSpec.EXACTLY)); } else { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } } }; actionBarLayout.init(new ArrayList<>()); actionBarLayout.presentFragment(new EmptyFragment(), false, true, false, false); actionBarLayout.setDelegate(this); frameLayout = new FrameLayout(context); frameLayout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); frameLayout.addView(actionBarLayout, new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, Gravity.CENTER)); if (AndroidUtilities.isTablet() && !AndroidUtilities.isInMultiwindow && !AndroidUtilities.isSmallTablet()) { frameLayout.setBackgroundColor(0x99000000); frameLayout.setOnClickListener(v -> onBackPressed()); actionBarLayout.setRemoveActionBarExtraHeight(true); VerticalPositionAutoAnimator.attach(actionBarLayout); } setContentView(frameLayout); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Window window = getWindow(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); } window.setWindowAnimations(R.style.DialogNoAnimation); WindowManager.LayoutParams params = window.getAttributes(); params.width = ViewGroup.LayoutParams.MATCH_PARENT; params.gravity = Gravity.TOP | Gravity.LEFT; params.dimAmount = 0; params.flags &= ~WindowManager.LayoutParams.FLAG_DIM_BEHIND; params.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE; params.height = ViewGroup.LayoutParams.MATCH_PARENT; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { params.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; } window.setAttributes(params); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { window.setStatusBarColor(Color.TRANSPARENT); } frameLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { frameLayout.setOnApplyWindowInsetsListener((v, insets) -> { v.setPadding(0, 0, 0, insets.getSystemWindowInsetBottom()); return insets; }); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { int color = Theme.getColor(Theme.key_windowBackgroundWhite, null, true); AndroidUtilities.setLightNavigationBar(window, ColorUtils.calculateLuminance(color) >= 0.9); } } public void addFragment(BaseFragment fragment) { actionBarLayout.presentFragment(fragment, AndroidUtilities.isTablet() && !AndroidUtilities.isInMultiwindow && !AndroidUtilities.isSmallTablet()); } @Override public void onBackPressed() { actionBarLayout.onBackPressed(); if (actionBarLayout.fragmentsStack.size() <= 1) { dismiss(); } } @Override public boolean onPreIme() { return false; } @Override public boolean needPresentFragment(BaseFragment fragment, boolean removeLast, boolean forceWithoutAnimation, ActionBarLayout layout) { return true; } @Override public boolean needAddFragmentToStack(BaseFragment fragment, ActionBarLayout layout) { return true; } @Override public boolean needCloseLastFragment(ActionBarLayout layout) { if (layout.fragmentsStack.size() <= 1) { dismiss(); } return true; } @Override public void onRebuildAllFragments(ActionBarLayout layout, boolean last) {} private static final class EmptyFragment extends BaseFragment { @Override public View createView(Context context) { actionBar.setAddToContainer(false); View v = new View(context); v.setBackgroundColor(Color.TRANSPARENT); return v; } } }