mirror of https://github.com/NekoX-Dev/NekoX.git
381 lines
16 KiB
Java
381 lines
16 KiB
Java
/*
|
|
* This is the source code of Telegram for Android v. 3.x.x.
|
|
* It is licensed under GNU GPL v. 2 or later.
|
|
* You should have received a copy of the license in this archive (see LICENSE).
|
|
*
|
|
* Copyright Nikolai Kudashov, 2013-2015.
|
|
*/
|
|
|
|
package org.telegram.ui;
|
|
|
|
import android.app.Activity;
|
|
import android.content.Intent;
|
|
import android.content.res.Configuration;
|
|
import android.os.Build;
|
|
import android.os.Bundle;
|
|
import android.view.MotionEvent;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
import android.view.ViewTreeObserver;
|
|
import android.view.Window;
|
|
import android.view.WindowManager;
|
|
import android.widget.FrameLayout;
|
|
import android.widget.ImageView;
|
|
import android.widget.RelativeLayout;
|
|
|
|
import org.telegram.messenger.AndroidUtilities;
|
|
import org.telegram.messenger.ApplicationLoader;
|
|
import org.telegram.messenger.LocaleController;
|
|
import org.telegram.messenger.NotificationCenter;
|
|
import org.telegram.messenger.R;
|
|
import org.telegram.tgnet.ConnectionsManager;
|
|
import org.telegram.ui.ActionBar.ActionBarLayout;
|
|
import org.telegram.ui.ActionBar.BaseFragment;
|
|
import org.telegram.ui.ActionBar.DrawerLayoutContainer;
|
|
import org.telegram.ui.Components.LayoutHelper;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
public class ManageSpaceActivity extends Activity implements ActionBarLayout.ActionBarLayoutDelegate {
|
|
|
|
private boolean finished;
|
|
private int currentConnectionState;
|
|
private static ArrayList<BaseFragment> mainFragmentsStack = new ArrayList<>();
|
|
private static ArrayList<BaseFragment> layerFragmentsStack = new ArrayList<>();
|
|
|
|
private ActionBarLayout actionBarLayout;
|
|
private ActionBarLayout layersActionBarLayout;
|
|
protected DrawerLayoutContainer drawerLayoutContainer;
|
|
|
|
@Override
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
ApplicationLoader.postInitApplication();
|
|
|
|
requestWindowFeature(Window.FEATURE_NO_TITLE);
|
|
setTheme(R.style.Theme_TMessages);
|
|
getWindow().setBackgroundDrawableResource(R.drawable.transparent);
|
|
|
|
super.onCreate(savedInstanceState);
|
|
|
|
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
|
|
if (resourceId > 0) {
|
|
AndroidUtilities.statusBarHeight = getResources().getDimensionPixelSize(resourceId);
|
|
}
|
|
|
|
actionBarLayout = new ActionBarLayout(this);
|
|
|
|
drawerLayoutContainer = new DrawerLayoutContainer(this);
|
|
drawerLayoutContainer.setAllowOpenDrawer(false, false);
|
|
setContentView(drawerLayoutContainer, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
|
|
|
|
if (AndroidUtilities.isTablet()) {
|
|
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
|
|
|
|
RelativeLayout launchLayout = new RelativeLayout(this);
|
|
drawerLayoutContainer.addView(launchLayout);
|
|
FrameLayout.LayoutParams layoutParams1 = (FrameLayout.LayoutParams) launchLayout.getLayoutParams();
|
|
layoutParams1.width = LayoutHelper.MATCH_PARENT;
|
|
layoutParams1.height = LayoutHelper.MATCH_PARENT;
|
|
launchLayout.setLayoutParams(layoutParams1);
|
|
|
|
ImageView backgroundTablet = new ImageView(this);
|
|
backgroundTablet.setScaleType(ImageView.ScaleType.CENTER_CROP);
|
|
backgroundTablet.setImageResource(R.drawable.cats);
|
|
launchLayout.addView(backgroundTablet);
|
|
RelativeLayout.LayoutParams relativeLayoutParams = (RelativeLayout.LayoutParams) backgroundTablet.getLayoutParams();
|
|
relativeLayoutParams.width = LayoutHelper.MATCH_PARENT;
|
|
relativeLayoutParams.height = LayoutHelper.MATCH_PARENT;
|
|
backgroundTablet.setLayoutParams(relativeLayoutParams);
|
|
|
|
launchLayout.addView(actionBarLayout);
|
|
relativeLayoutParams = (RelativeLayout.LayoutParams) actionBarLayout.getLayoutParams();
|
|
relativeLayoutParams.width = LayoutHelper.MATCH_PARENT;
|
|
relativeLayoutParams.height = LayoutHelper.MATCH_PARENT;
|
|
actionBarLayout.setLayoutParams(relativeLayoutParams);
|
|
|
|
FrameLayout shadowTablet = new FrameLayout(this);
|
|
shadowTablet.setBackgroundColor(0x7F000000);
|
|
launchLayout.addView(shadowTablet);
|
|
relativeLayoutParams = (RelativeLayout.LayoutParams) shadowTablet.getLayoutParams();
|
|
relativeLayoutParams.width = LayoutHelper.MATCH_PARENT;
|
|
relativeLayoutParams.height = LayoutHelper.MATCH_PARENT;
|
|
shadowTablet.setLayoutParams(relativeLayoutParams);
|
|
shadowTablet.setOnTouchListener(new View.OnTouchListener() {
|
|
@Override
|
|
public boolean onTouch(View v, MotionEvent event) {
|
|
if (!actionBarLayout.fragmentsStack.isEmpty() && event.getAction() == MotionEvent.ACTION_UP) {
|
|
float x = event.getX();
|
|
float y = event.getY();
|
|
int location[] = new int[2];
|
|
layersActionBarLayout.getLocationOnScreen(location);
|
|
int viewX = location[0];
|
|
int viewY = location[1];
|
|
|
|
if (layersActionBarLayout.checkTransitionAnimation() || x > viewX && x < viewX + layersActionBarLayout.getWidth() && y > viewY && y < viewY + layersActionBarLayout.getHeight()) {
|
|
return false;
|
|
} else {
|
|
if (!layersActionBarLayout.fragmentsStack.isEmpty()) {
|
|
for (int a = 0; a < layersActionBarLayout.fragmentsStack.size() - 1; a++) {
|
|
layersActionBarLayout.removeFragmentFromStack(layersActionBarLayout.fragmentsStack.get(0));
|
|
a--;
|
|
}
|
|
layersActionBarLayout.closeLastFragment(true);
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
});
|
|
|
|
shadowTablet.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
|
|
}
|
|
});
|
|
|
|
layersActionBarLayout = new ActionBarLayout(this);
|
|
layersActionBarLayout.setRemoveActionBarExtraHeight(true);
|
|
layersActionBarLayout.setBackgroundView(shadowTablet);
|
|
layersActionBarLayout.setUseAlphaAnimations(true);
|
|
layersActionBarLayout.setBackgroundResource(R.drawable.boxshadow);
|
|
launchLayout.addView(layersActionBarLayout);
|
|
relativeLayoutParams = (RelativeLayout.LayoutParams)layersActionBarLayout.getLayoutParams();
|
|
relativeLayoutParams.width = AndroidUtilities.dp(530);
|
|
relativeLayoutParams.height = AndroidUtilities.dp(528);
|
|
layersActionBarLayout.setLayoutParams(relativeLayoutParams);
|
|
layersActionBarLayout.init(layerFragmentsStack);
|
|
layersActionBarLayout.setDelegate(this);
|
|
layersActionBarLayout.setDrawerLayoutContainer(drawerLayoutContainer);
|
|
} else {
|
|
drawerLayoutContainer.addView(actionBarLayout, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
|
|
}
|
|
|
|
// drawerLayoutContainer.setDrawerLayout(listView);
|
|
|
|
drawerLayoutContainer.setParentActionBarLayout(actionBarLayout);
|
|
actionBarLayout.setDrawerLayoutContainer(drawerLayoutContainer);
|
|
actionBarLayout.init(mainFragmentsStack);
|
|
actionBarLayout.setDelegate(this);
|
|
|
|
NotificationCenter.getInstance().postNotificationName(NotificationCenter.closeOtherAppActivities, this);
|
|
currentConnectionState = ConnectionsManager.getInstance().getConnectionState();
|
|
|
|
handleIntent(getIntent(), false, savedInstanceState != null, false);
|
|
needLayout();
|
|
}
|
|
|
|
private boolean handleIntent(Intent intent, boolean isNew, boolean restore, boolean fromPassword) {
|
|
if (AndroidUtilities.isTablet()) {
|
|
if (layersActionBarLayout.fragmentsStack.isEmpty()) {
|
|
layersActionBarLayout.addFragmentToStack(new CacheControlActivity());
|
|
}
|
|
} else {
|
|
if (actionBarLayout.fragmentsStack.isEmpty()) {
|
|
actionBarLayout.addFragmentToStack(new CacheControlActivity());
|
|
}
|
|
}
|
|
actionBarLayout.showLastFragment();
|
|
if (AndroidUtilities.isTablet()) {
|
|
layersActionBarLayout.showLastFragment();
|
|
}
|
|
intent.setAction(null);
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public boolean onPreIme() {
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
protected void onNewIntent(Intent intent) {
|
|
super.onNewIntent(intent);
|
|
handleIntent(intent, true, false, false);
|
|
}
|
|
|
|
private void onFinish() {
|
|
if (finished) {
|
|
return;
|
|
}
|
|
finished = true;
|
|
}
|
|
|
|
public void presentFragment(BaseFragment fragment) {
|
|
actionBarLayout.presentFragment(fragment);
|
|
}
|
|
|
|
public boolean presentFragment(final BaseFragment fragment, final boolean removeLast, boolean forceWithoutAnimation) {
|
|
return actionBarLayout.presentFragment(fragment, removeLast, forceWithoutAnimation, true);
|
|
}
|
|
|
|
public void needLayout() {
|
|
if (AndroidUtilities.isTablet()) {
|
|
RelativeLayout.LayoutParams relativeLayoutParams = (RelativeLayout.LayoutParams)layersActionBarLayout.getLayoutParams();
|
|
relativeLayoutParams.leftMargin = (AndroidUtilities.displaySize.x - relativeLayoutParams.width) / 2;
|
|
int y = (Build.VERSION.SDK_INT >= 21 ? AndroidUtilities.statusBarHeight : 0);
|
|
relativeLayoutParams.topMargin = y + (AndroidUtilities.displaySize.y - relativeLayoutParams.height - y) / 2;
|
|
layersActionBarLayout.setLayoutParams(relativeLayoutParams);
|
|
|
|
|
|
if (!AndroidUtilities.isSmallTablet() || getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
|
|
int leftWidth = AndroidUtilities.displaySize.x / 100 * 35;
|
|
if (leftWidth < AndroidUtilities.dp(320)) {
|
|
leftWidth = AndroidUtilities.dp(320);
|
|
}
|
|
|
|
relativeLayoutParams = (RelativeLayout.LayoutParams) actionBarLayout.getLayoutParams();
|
|
relativeLayoutParams.width = leftWidth;
|
|
relativeLayoutParams.height = LayoutHelper.MATCH_PARENT;
|
|
actionBarLayout.setLayoutParams(relativeLayoutParams);
|
|
|
|
if (AndroidUtilities.isSmallTablet() && actionBarLayout.fragmentsStack.size() == 2) {
|
|
BaseFragment chatFragment = actionBarLayout.fragmentsStack.get(1);
|
|
chatFragment.onPause();
|
|
actionBarLayout.fragmentsStack.remove(1);
|
|
actionBarLayout.showLastFragment();
|
|
}
|
|
} else {
|
|
relativeLayoutParams = (RelativeLayout.LayoutParams) actionBarLayout.getLayoutParams();
|
|
relativeLayoutParams.width = LayoutHelper.MATCH_PARENT;
|
|
relativeLayoutParams.height = LayoutHelper.MATCH_PARENT;
|
|
actionBarLayout.setLayoutParams(relativeLayoutParams);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void fixLayout() {
|
|
if (!AndroidUtilities.isTablet()) {
|
|
return;
|
|
}
|
|
if (actionBarLayout == null) {
|
|
return;
|
|
}
|
|
actionBarLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
|
|
@Override
|
|
public void onGlobalLayout() {
|
|
needLayout();
|
|
if (actionBarLayout != null) {
|
|
if (Build.VERSION.SDK_INT < 16) {
|
|
actionBarLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
|
|
} else {
|
|
actionBarLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
@Override
|
|
protected void onPause() {
|
|
super.onPause();
|
|
actionBarLayout.onPause();
|
|
if (AndroidUtilities.isTablet()) {
|
|
layersActionBarLayout.onPause();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected void onDestroy() {
|
|
super.onDestroy();
|
|
onFinish();
|
|
}
|
|
|
|
@Override
|
|
protected void onResume() {
|
|
super.onResume();
|
|
actionBarLayout.onResume();
|
|
if (AndroidUtilities.isTablet()) {
|
|
layersActionBarLayout.onResume();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onConfigurationChanged(android.content.res.Configuration newConfig) {
|
|
AndroidUtilities.checkDisplaySize();
|
|
super.onConfigurationChanged(newConfig);
|
|
fixLayout();
|
|
}
|
|
|
|
private void updateCurrentConnectionState() {
|
|
String text = null;
|
|
if (currentConnectionState == ConnectionsManager.ConnectionStateWaitingForNetwork) {
|
|
text = LocaleController.getString("WaitingForNetwork", R.string.WaitingForNetwork);
|
|
} else if (currentConnectionState == ConnectionsManager.ConnectionStateConnecting) {
|
|
text = LocaleController.getString("Connecting", R.string.Connecting);
|
|
} else if (currentConnectionState == ConnectionsManager.ConnectionStateUpdating) {
|
|
text = LocaleController.getString("Updating", R.string.Updating);
|
|
}
|
|
actionBarLayout.setTitleOverlayText(text);
|
|
}
|
|
|
|
@Override
|
|
public void onBackPressed() {
|
|
if (PhotoViewer.getInstance().isVisible()) {
|
|
PhotoViewer.getInstance().closePhoto(true, false);
|
|
} else if (drawerLayoutContainer.isDrawerOpened()) {
|
|
drawerLayoutContainer.closeDrawer(false);
|
|
} else if (AndroidUtilities.isTablet()) {
|
|
if (layersActionBarLayout.getVisibility() == View.VISIBLE) {
|
|
layersActionBarLayout.onBackPressed();
|
|
} else {
|
|
actionBarLayout.onBackPressed();
|
|
}
|
|
} else {
|
|
actionBarLayout.onBackPressed();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onLowMemory() {
|
|
super.onLowMemory();
|
|
actionBarLayout.onLowMemory();
|
|
if (AndroidUtilities.isTablet()) {
|
|
layersActionBarLayout.onLowMemory();
|
|
}
|
|
}
|
|
|
|
@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 (AndroidUtilities.isTablet()) {
|
|
if (layout == actionBarLayout && layout.fragmentsStack.size() <= 1) {
|
|
onFinish();
|
|
finish();
|
|
return false;
|
|
} else if (layout == layersActionBarLayout && actionBarLayout.fragmentsStack.isEmpty() && layersActionBarLayout.fragmentsStack.size() == 1) {
|
|
onFinish();
|
|
finish();
|
|
return false;
|
|
}
|
|
} else {
|
|
if (layout.fragmentsStack.size() <= 1) {
|
|
onFinish();
|
|
finish();
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public void onRebuildAllFragments(ActionBarLayout layout) {
|
|
if (AndroidUtilities.isTablet()) {
|
|
if (layout == layersActionBarLayout) {
|
|
actionBarLayout.rebuildAllFragmentViews(true);
|
|
actionBarLayout.showLastFragment();
|
|
}
|
|
}
|
|
}
|
|
}
|