2014-06-04 01:31:48 +02:00
|
|
|
/*
|
2015-10-29 18:10:07 +01:00
|
|
|
* This is the source code of Telegram for Android v. 3.x.x.
|
2014-06-04 01:31:48 +02:00
|
|
|
* It is licensed under GNU GPL v. 2 or later.
|
|
|
|
* You should have received a copy of the license in this archive (see LICENSE).
|
|
|
|
*
|
2016-01-11 18:19:48 +01:00
|
|
|
* Copyright Nikolai Kudashov, 2013-2016.
|
2014-06-04 01:31:48 +02:00
|
|
|
*/
|
|
|
|
|
2014-11-13 21:10:14 +01:00
|
|
|
package org.telegram.ui.ActionBar;
|
2014-06-04 01:31:48 +02:00
|
|
|
|
2016-06-24 12:27:15 +02:00
|
|
|
import android.animation.AnimatorSet;
|
2014-09-24 04:17:27 +02:00
|
|
|
import android.app.Activity;
|
2015-05-21 23:27:27 +02:00
|
|
|
import android.app.Dialog;
|
2015-04-09 20:00:14 +02:00
|
|
|
import android.content.Context;
|
2014-06-07 01:35:21 +02:00
|
|
|
import android.content.DialogInterface;
|
2014-06-04 01:31:48 +02:00
|
|
|
import android.content.Intent;
|
|
|
|
import android.os.Bundle;
|
|
|
|
import android.view.View;
|
|
|
|
import android.view.ViewGroup;
|
|
|
|
|
2014-06-07 01:35:21 +02:00
|
|
|
import org.telegram.messenger.FileLog;
|
2015-09-24 22:52:02 +02:00
|
|
|
import org.telegram.tgnet.ConnectionsManager;
|
2014-06-04 01:31:48 +02:00
|
|
|
|
|
|
|
public class BaseFragment {
|
2015-05-21 23:27:27 +02:00
|
|
|
|
2014-06-04 01:31:48 +02:00
|
|
|
private boolean isFinished = false;
|
2015-05-21 23:27:27 +02:00
|
|
|
protected Dialog visibleDialog = null;
|
2014-11-11 23:16:17 +01:00
|
|
|
|
2014-06-04 01:31:48 +02:00
|
|
|
protected View fragmentView;
|
2014-09-24 04:17:27 +02:00
|
|
|
protected ActionBarLayout parentLayout;
|
2014-11-11 23:16:17 +01:00
|
|
|
protected ActionBar actionBar;
|
2014-06-04 01:31:48 +02:00
|
|
|
protected int classGuid = 0;
|
|
|
|
protected Bundle arguments;
|
2014-06-17 17:10:02 +02:00
|
|
|
protected boolean swipeBackEnabled = true;
|
2015-04-09 20:00:14 +02:00
|
|
|
protected boolean hasOwnBackground = false;
|
2014-06-04 01:31:48 +02:00
|
|
|
|
|
|
|
public BaseFragment() {
|
|
|
|
classGuid = ConnectionsManager.getInstance().generateClassGuid();
|
|
|
|
}
|
|
|
|
|
|
|
|
public BaseFragment(Bundle args) {
|
|
|
|
arguments = args;
|
|
|
|
classGuid = ConnectionsManager.getInstance().generateClassGuid();
|
|
|
|
}
|
|
|
|
|
2015-10-29 18:10:07 +01:00
|
|
|
public ActionBar getActionBar() {
|
|
|
|
return actionBar;
|
|
|
|
}
|
|
|
|
|
|
|
|
public View getFragmentView() {
|
|
|
|
return fragmentView;
|
|
|
|
}
|
|
|
|
|
2015-07-22 20:56:37 +02:00
|
|
|
public View createView(Context context) {
|
2014-06-04 01:31:48 +02:00
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
public Bundle getArguments() {
|
|
|
|
return arguments;
|
|
|
|
}
|
|
|
|
|
2015-06-29 19:12:11 +02:00
|
|
|
protected void clearViews() {
|
|
|
|
if (fragmentView != null) {
|
|
|
|
ViewGroup parent = (ViewGroup) fragmentView.getParent();
|
|
|
|
if (parent != null) {
|
|
|
|
try {
|
|
|
|
parent.removeView(fragmentView);
|
|
|
|
} catch (Exception e) {
|
|
|
|
FileLog.e("tmessages", e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
fragmentView = null;
|
|
|
|
}
|
|
|
|
if (actionBar != null) {
|
|
|
|
ViewGroup parent = (ViewGroup) actionBar.getParent();
|
|
|
|
if (parent != null) {
|
|
|
|
try {
|
|
|
|
parent.removeView(actionBar);
|
|
|
|
} catch (Exception e) {
|
|
|
|
FileLog.e("tmessages", e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
actionBar = null;
|
|
|
|
}
|
|
|
|
parentLayout = null;
|
|
|
|
}
|
|
|
|
|
2014-11-11 23:16:17 +01:00
|
|
|
protected void setParentLayout(ActionBarLayout layout) {
|
2014-09-24 04:17:27 +02:00
|
|
|
if (parentLayout != layout) {
|
|
|
|
parentLayout = layout;
|
2014-06-04 01:31:48 +02:00
|
|
|
if (fragmentView != null) {
|
|
|
|
ViewGroup parent = (ViewGroup) fragmentView.getParent();
|
|
|
|
if (parent != null) {
|
2014-10-11 13:30:32 +02:00
|
|
|
try {
|
|
|
|
parent.removeView(fragmentView);
|
|
|
|
} catch (Exception e) {
|
|
|
|
FileLog.e("tmessages", e);
|
|
|
|
}
|
2014-06-04 01:31:48 +02:00
|
|
|
}
|
2015-06-29 19:12:11 +02:00
|
|
|
if (parentLayout != null && parentLayout.getContext() != fragmentView.getContext()) {
|
|
|
|
fragmentView = null;
|
|
|
|
}
|
2014-06-04 01:31:48 +02:00
|
|
|
}
|
2014-11-11 23:16:17 +01:00
|
|
|
if (actionBar != null) {
|
|
|
|
ViewGroup parent = (ViewGroup) actionBar.getParent();
|
|
|
|
if (parent != null) {
|
|
|
|
try {
|
|
|
|
parent.removeView(actionBar);
|
|
|
|
} catch (Exception e) {
|
|
|
|
FileLog.e("tmessages", e);
|
|
|
|
}
|
2014-06-04 20:57:11 +02:00
|
|
|
}
|
2015-06-29 19:12:11 +02:00
|
|
|
if (parentLayout != null && parentLayout.getContext() != actionBar.getContext()) {
|
|
|
|
actionBar = null;
|
|
|
|
}
|
2014-11-11 23:16:17 +01:00
|
|
|
}
|
2015-06-29 19:12:11 +02:00
|
|
|
if (parentLayout != null && actionBar == null) {
|
2016-04-22 15:49:00 +02:00
|
|
|
actionBar = createActionBar(parentLayout.getContext());
|
2014-11-11 23:16:17 +01:00
|
|
|
actionBar.parentFragment = this;
|
2014-06-04 01:31:48 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-04-22 15:49:00 +02:00
|
|
|
protected ActionBar createActionBar(Context context) {
|
|
|
|
ActionBar actionBar = new ActionBar(context);
|
|
|
|
actionBar.setBackgroundColor(Theme.ACTION_BAR_COLOR);
|
|
|
|
actionBar.setItemsBackgroundColor(Theme.ACTION_BAR_SELECTOR_COLOR);
|
|
|
|
return actionBar;
|
|
|
|
}
|
|
|
|
|
2014-06-04 01:31:48 +02:00
|
|
|
public void finishFragment() {
|
2014-06-13 17:03:06 +02:00
|
|
|
finishFragment(true);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void finishFragment(boolean animated) {
|
2014-09-24 04:17:27 +02:00
|
|
|
if (isFinished || parentLayout == null) {
|
2014-06-04 01:31:48 +02:00
|
|
|
return;
|
|
|
|
}
|
2014-09-24 04:17:27 +02:00
|
|
|
parentLayout.closeLastFragment(animated);
|
2014-06-04 01:31:48 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public void removeSelfFromStack() {
|
2014-09-24 04:17:27 +02:00
|
|
|
if (isFinished || parentLayout == null) {
|
2014-06-04 01:31:48 +02:00
|
|
|
return;
|
|
|
|
}
|
2014-09-24 04:17:27 +02:00
|
|
|
parentLayout.removeFragmentFromStack(this);
|
2014-06-04 01:31:48 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public boolean onFragmentCreate() {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void onFragmentDestroy() {
|
2015-09-24 22:52:02 +02:00
|
|
|
ConnectionsManager.getInstance().cancelRequestsForGuid(classGuid);
|
2014-06-04 01:31:48 +02:00
|
|
|
isFinished = true;
|
2014-11-11 23:16:17 +01:00
|
|
|
if (actionBar != null) {
|
|
|
|
actionBar.setEnabled(false);
|
2014-06-04 01:31:48 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-05-25 23:49:47 +02:00
|
|
|
public boolean needDelayOpenAnimation() {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2014-06-04 01:31:48 +02:00
|
|
|
public void onResume() {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
public void onPause() {
|
2014-11-11 23:16:17 +01:00
|
|
|
if (actionBar != null) {
|
|
|
|
actionBar.onPause();
|
2014-06-04 18:00:42 +02:00
|
|
|
}
|
2014-06-07 01:35:21 +02:00
|
|
|
try {
|
2015-10-29 18:10:07 +01:00
|
|
|
if (visibleDialog != null && visibleDialog.isShowing() && dismissDialogOnPause(visibleDialog)) {
|
2014-06-07 01:35:21 +02:00
|
|
|
visibleDialog.dismiss();
|
|
|
|
visibleDialog = null;
|
|
|
|
}
|
|
|
|
} catch (Exception e) {
|
|
|
|
FileLog.e("tmessages", e);
|
|
|
|
}
|
2014-06-04 01:31:48 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public void onConfigurationChanged(android.content.res.Configuration newConfig) {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean onBackPressed() {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void onActivityResultFragment(int requestCode, int resultCode, Intent data) {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2015-10-29 18:10:07 +01:00
|
|
|
public void onRequestPermissionsResultFragment(int requestCode, String[] permissions, int[] grantResults) {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2014-06-04 01:31:48 +02:00
|
|
|
public void saveSelfArgs(Bundle args) {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
public void restoreSelfArgs(Bundle args) {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2014-10-01 00:36:18 +02:00
|
|
|
public boolean presentFragment(BaseFragment fragment) {
|
|
|
|
return parentLayout != null && parentLayout.presentFragment(fragment);
|
2014-06-04 01:31:48 +02:00
|
|
|
}
|
|
|
|
|
2014-10-01 00:36:18 +02:00
|
|
|
public boolean presentFragment(BaseFragment fragment, boolean removeLast) {
|
|
|
|
return parentLayout != null && parentLayout.presentFragment(fragment, removeLast);
|
2014-06-04 01:31:48 +02:00
|
|
|
}
|
|
|
|
|
2014-10-01 00:36:18 +02:00
|
|
|
public boolean presentFragment(BaseFragment fragment, boolean removeLast, boolean forceWithoutAnimation) {
|
|
|
|
return parentLayout != null && parentLayout.presentFragment(fragment, removeLast, forceWithoutAnimation, true);
|
2014-06-04 01:31:48 +02:00
|
|
|
}
|
|
|
|
|
2014-09-24 04:17:27 +02:00
|
|
|
public Activity getParentActivity() {
|
2014-09-28 15:37:26 +02:00
|
|
|
if (parentLayout != null) {
|
|
|
|
return parentLayout.parentActivity;
|
|
|
|
}
|
|
|
|
return null;
|
2014-06-04 01:31:48 +02:00
|
|
|
}
|
|
|
|
|
2014-10-01 00:36:18 +02:00
|
|
|
public void startActivityForResult(final Intent intent, final int requestCode) {
|
|
|
|
if (parentLayout != null) {
|
|
|
|
parentLayout.startActivityForResult(intent, requestCode);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-10-29 18:10:07 +01:00
|
|
|
public boolean dismissDialogOnPause(Dialog dialog) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2014-06-04 01:31:48 +02:00
|
|
|
public void onBeginSlide() {
|
2014-06-07 01:35:21 +02:00
|
|
|
try {
|
|
|
|
if (visibleDialog != null && visibleDialog.isShowing()) {
|
|
|
|
visibleDialog.dismiss();
|
|
|
|
visibleDialog = null;
|
|
|
|
}
|
|
|
|
} catch (Exception e) {
|
|
|
|
FileLog.e("tmessages", e);
|
|
|
|
}
|
2014-11-11 23:16:17 +01:00
|
|
|
if (actionBar != null) {
|
|
|
|
actionBar.onPause();
|
2014-06-07 01:35:21 +02:00
|
|
|
}
|
2014-06-04 01:31:48 +02:00
|
|
|
}
|
|
|
|
|
2015-10-29 18:10:07 +01:00
|
|
|
protected void onTransitionAnimationStart(boolean isOpen, boolean backward) {
|
2015-05-21 23:27:27 +02:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2015-10-29 18:10:07 +01:00
|
|
|
protected void onTransitionAnimationEnd(boolean isOpen, boolean backward) {
|
2014-06-04 01:31:48 +02:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2015-06-29 19:12:11 +02:00
|
|
|
protected void onBecomeFullyVisible() {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2016-06-24 12:27:15 +02:00
|
|
|
protected AnimatorSet onCustomTransitionAnimation(boolean isOpen, final Runnable callback) {
|
2015-10-29 18:10:07 +01:00
|
|
|
return null;
|
2014-06-04 01:31:48 +02:00
|
|
|
}
|
2014-06-07 01:35:21 +02:00
|
|
|
|
2015-10-29 18:10:07 +01:00
|
|
|
public void onLowMemory() {
|
|
|
|
|
2014-11-11 23:16:17 +01:00
|
|
|
}
|
|
|
|
|
2015-05-21 23:27:27 +02:00
|
|
|
public Dialog showDialog(Dialog dialog) {
|
2015-09-24 22:52:02 +02:00
|
|
|
return showDialog(dialog, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
public Dialog showDialog(Dialog dialog, boolean allowInTransition) {
|
|
|
|
if (dialog == null || parentLayout == null || parentLayout.animationInProgress || parentLayout.startedTracking || !allowInTransition && parentLayout.checkTransitionAnimation()) {
|
2015-04-09 20:00:14 +02:00
|
|
|
return null;
|
2014-06-07 01:35:21 +02:00
|
|
|
}
|
2014-06-13 17:03:06 +02:00
|
|
|
try {
|
|
|
|
if (visibleDialog != null) {
|
|
|
|
visibleDialog.dismiss();
|
|
|
|
visibleDialog = null;
|
|
|
|
}
|
|
|
|
} catch (Exception e) {
|
|
|
|
FileLog.e("tmessages", e);
|
2014-06-07 01:35:21 +02:00
|
|
|
}
|
2014-11-20 15:45:33 +01:00
|
|
|
try {
|
2015-05-21 23:27:27 +02:00
|
|
|
visibleDialog = dialog;
|
2014-11-20 15:45:33 +01:00
|
|
|
visibleDialog.setCanceledOnTouchOutside(true);
|
|
|
|
visibleDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
|
|
|
|
@Override
|
|
|
|
public void onDismiss(DialogInterface dialog) {
|
2015-09-24 22:52:02 +02:00
|
|
|
onDialogDismiss(visibleDialog);
|
2014-11-20 15:45:33 +01:00
|
|
|
visibleDialog = null;
|
|
|
|
}
|
|
|
|
});
|
2015-05-21 23:27:27 +02:00
|
|
|
visibleDialog.show();
|
2015-04-09 20:00:14 +02:00
|
|
|
return visibleDialog;
|
2014-11-20 15:45:33 +01:00
|
|
|
} catch (Exception e) {
|
|
|
|
FileLog.e("tmessages", e);
|
|
|
|
}
|
2015-04-09 20:00:14 +02:00
|
|
|
return null;
|
2014-06-07 01:35:21 +02:00
|
|
|
}
|
2014-08-22 16:24:33 +02:00
|
|
|
|
2015-09-24 22:52:02 +02:00
|
|
|
protected void onDialogDismiss(Dialog dialog) {
|
2014-08-22 16:24:33 +02:00
|
|
|
|
|
|
|
}
|
2015-05-21 23:27:27 +02:00
|
|
|
|
2015-06-29 19:12:11 +02:00
|
|
|
public Dialog getVisibleDialog() {
|
|
|
|
return visibleDialog;
|
|
|
|
}
|
|
|
|
|
2015-05-21 23:27:27 +02:00
|
|
|
public void setVisibleDialog(Dialog dialog) {
|
|
|
|
visibleDialog = dialog;
|
|
|
|
}
|
2014-06-04 01:31:48 +02:00
|
|
|
}
|