mirror of https://github.com/NekoX-Dev/NekoX.git
151 lines
6.2 KiB
Java
151 lines
6.2 KiB
Java
|
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;
|
||
|
}
|
||
|
}
|
||
|
}
|