NekoX/TMessagesProj/src/main/java/org/telegram/ui/ApplicationActivity.java

708 lines
32 KiB
Java

/*
* This is the source code of Telegram for Android v. 1.3.2.
* 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.
*/
package org.telegram.ui;
import android.app.Activity;
import android.app.NotificationManager;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.PixelFormat;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.view.Surface;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.WindowManager;
import android.widget.EditText;
import android.widget.TextView;
import org.telegram.messenger.ConnectionsManager;
import org.telegram.messenger.FileLog;
import org.telegram.messenger.MessagesController;
import org.telegram.messenger.NotificationCenter;
import org.telegram.messenger.R;
import org.telegram.messenger.UserConfig;
import org.telegram.messenger.Utilities;
import org.telegram.objects.MessageObject;
import org.telegram.ui.Views.BaseFragment;
import org.telegram.ui.Views.NotificationView;
import net.hockeyapp.android.CrashManager;
import net.hockeyapp.android.UpdateManager;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class ApplicationActivity extends ActionBarActivity implements NotificationCenter.NotificationCenterDelegate, MessagesActivity.MessagesActivityDelegate {
private boolean finished = false;
private NotificationView notificationView;
private String photoPath = null;
private String videoPath = null;
private String sendingText = null;
private int currentConnectionState;
private View statusView;
private View backStatusButton;
private View statusBackground;
private TextView statusText;
private View containerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
Utilities.statusBarHeight = getResources().getDimensionPixelSize(resourceId);
}
NotificationCenter.Instance.postNotificationName(702, this);
currentConnectionState = ConnectionsManager.Instance.connectionState;
for (BaseFragment fragment : ApplicationLoader.fragmentsStack) {
if (fragment.fragmentView != null) {
ViewGroup parent = (ViewGroup)fragment.fragmentView.getParent();
if (parent != null) {
parent.removeView(fragment.fragmentView);
}
fragment.fragmentView = null;
}
fragment.parentActivity = this;
}
setContentView(R.layout.application_layout);
NotificationCenter.Instance.addObserver(this, 1234);
NotificationCenter.Instance.addObserver(this, 658);
NotificationCenter.Instance.addObserver(this, 701);
NotificationCenter.Instance.addObserver(this, 702);
NotificationCenter.Instance.addObserver(this, 703);
NotificationCenter.Instance.addObserver(this, GalleryImageViewer.needShowAllMedia);
getSupportActionBar().setLogo(R.drawable.ab_icon_fixed2);
statusView = getLayoutInflater().inflate(R.layout.updating_state_layout, null);
statusBackground = statusView.findViewById(R.id.back_button_background);
backStatusButton = statusView.findViewById(R.id.back_button);
containerView = findViewById(R.id.container);
statusText = (TextView)statusView.findViewById(R.id.status_text);
statusBackground.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (ApplicationLoader.fragmentsStack.size() > 1) {
onBackPressed();
}
}
});
if (ApplicationLoader.fragmentsStack.isEmpty()) {
MessagesActivity fragment = new MessagesActivity();
fragment.onFragmentCreate();
ApplicationLoader.fragmentsStack.add(fragment);
}
boolean pushOpened = false;
Integer push_user_id = (Integer)NotificationCenter.Instance.getFromMemCache("push_user_id", 0);
Integer push_chat_id = (Integer)NotificationCenter.Instance.getFromMemCache("push_chat_id", 0);
Integer push_enc_id = (Integer)NotificationCenter.Instance.getFromMemCache("push_enc_id", 0);
Integer open_settings = (Integer)NotificationCenter.Instance.getFromMemCache("open_settings", 0);
photoPath = (String)NotificationCenter.Instance.getFromMemCache(533);
videoPath = (String)NotificationCenter.Instance.getFromMemCache(534);
sendingText = (String)NotificationCenter.Instance.getFromMemCache(535);
if (push_user_id != 0) {
if (push_user_id == UserConfig.clientUserId) {
open_settings = 1;
} else {
ChatActivity fragment = new ChatActivity();
Bundle bundle = new Bundle();
bundle.putInt("user_id", push_user_id);
fragment.setArguments(bundle);
if (fragment.onFragmentCreate()) {
pushOpened = true;
ApplicationLoader.fragmentsStack.add(fragment);
getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment, "chat" + Math.random()).commitAllowingStateLoss();
}
}
} else if (push_chat_id != 0) {
ChatActivity fragment = new ChatActivity();
Bundle bundle = new Bundle();
bundle.putInt("chat_id", push_chat_id);
fragment.setArguments(bundle);
if (fragment.onFragmentCreate()) {
pushOpened = true;
ApplicationLoader.fragmentsStack.add(fragment);
getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment, "chat" + Math.random()).commitAllowingStateLoss();
}
} else if (push_enc_id != 0) {
ChatActivity fragment = new ChatActivity();
Bundle bundle = new Bundle();
bundle.putInt("enc_id", push_enc_id);
fragment.setArguments(bundle);
if (fragment.onFragmentCreate()) {
pushOpened = true;
ApplicationLoader.fragmentsStack.add(fragment);
getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment, "chat" + Math.random()).commitAllowingStateLoss();
}
}
if (videoPath != null || photoPath != null || sendingText != null) {
MessagesActivity fragment = new MessagesActivity();
fragment.selectAlertString = R.string.ForwardMessagesTo;
fragment.animationType = 1;
Bundle args = new Bundle();
args.putBoolean("onlySelect", true);
fragment.setArguments(args);
fragment.delegate = this;
ApplicationLoader.fragmentsStack.add(fragment);
fragment.onFragmentCreate();
getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment, fragment.getTag()).commitAllowingStateLoss();
pushOpened = true;
}
if (open_settings != 0) {
SettingsActivity fragment = new SettingsActivity();
ApplicationLoader.fragmentsStack.add(fragment);
fragment.onFragmentCreate();
getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment, "settings").commitAllowingStateLoss();
pushOpened = true;
}
if (!pushOpened) {
BaseFragment fragment = ApplicationLoader.fragmentsStack.get(ApplicationLoader.fragmentsStack.size() - 1);
getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment, fragment.getTag()).commitAllowingStateLoss();
}
getWindow().setBackgroundDrawableResource(R.drawable.transparent);
getWindow().setFormat(PixelFormat.RGB_565);
}
@SuppressWarnings("unchecked")
private void prepareForHideShowActionBar() {
try {
Class firstClass = getSupportActionBar().getClass();
Class aClass = firstClass.getSuperclass();
if (aClass == android.support.v7.app.ActionBar.class) {
Method method = firstClass.getDeclaredMethod("setShowHideAnimationEnabled", boolean.class);
method.invoke(getSupportActionBar(), false);
} else {
Field field = aClass.getDeclaredField("mActionBar");
field.setAccessible(true);
Method method = field.get(getSupportActionBar()).getClass().getDeclaredMethod("setShowHideAnimationEnabled", boolean.class);
method.invoke(field.get(getSupportActionBar()), false);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void showActionBar() {
prepareForHideShowActionBar();
getSupportActionBar().show();
}
public void hideActionBar() {
prepareForHideShowActionBar();
getSupportActionBar().hide();
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
photoPath = (String)NotificationCenter.Instance.getFromMemCache(533);
videoPath = (String)NotificationCenter.Instance.getFromMemCache(534);
sendingText = (String)NotificationCenter.Instance.getFromMemCache(535);
if (videoPath != null || photoPath != null || sendingText != null) {
MessagesActivity fragment = new MessagesActivity();
fragment.selectAlertString = R.string.ForwardMessagesTo;
fragment.animationType = 1;
Bundle args = new Bundle();
args.putBoolean("onlySelect", true);
fragment.setArguments(args);
fragment.delegate = this;
ApplicationLoader.fragmentsStack.add(fragment);
fragment.onFragmentCreate();
getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment, fragment.getTag()).commitAllowingStateLoss();
}
Integer push_user_id = (Integer)NotificationCenter.Instance.getFromMemCache("push_user_id", 0);
Integer push_chat_id = (Integer)NotificationCenter.Instance.getFromMemCache("push_chat_id", 0);
Integer push_enc_id = (Integer)NotificationCenter.Instance.getFromMemCache("push_enc_id", 0);
Integer open_settings = (Integer)NotificationCenter.Instance.getFromMemCache("open_settings", 0);
if (push_user_id != 0) {
if (push_user_id == UserConfig.clientUserId) {
open_settings = 1;
} else {
ChatActivity fragment = new ChatActivity();
Bundle bundle = new Bundle();
bundle.putInt("user_id", push_user_id);
fragment.setArguments(bundle);
if (fragment.onFragmentCreate()) {
ApplicationLoader.fragmentsStack.add(fragment);
getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment, "chat" + Math.random()).commitAllowingStateLoss();
}
}
} else if (push_chat_id != 0) {
ChatActivity fragment = new ChatActivity();
Bundle bundle = new Bundle();
bundle.putInt("chat_id", push_chat_id);
fragment.setArguments(bundle);
if (fragment.onFragmentCreate()) {
ApplicationLoader.fragmentsStack.add(fragment);
getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment, "chat" + Math.random()).commitAllowingStateLoss();
}
} else if (push_enc_id != 0) {
ChatActivity fragment = new ChatActivity();
Bundle bundle = new Bundle();
bundle.putInt("enc_id", push_enc_id);
fragment.setArguments(bundle);
if (fragment.onFragmentCreate()) {
ApplicationLoader.fragmentsStack.add(fragment);
getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment, "chat" + Math.random()).commitAllowingStateLoss();
}
}
if (open_settings != 0) {
SettingsActivity fragment = new SettingsActivity();
ApplicationLoader.fragmentsStack.add(fragment);
fragment.onFragmentCreate();
getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment, "settings").commitAllowingStateLoss();
}
}
@Override
public void didSelectDialog(MessagesActivity messageFragment, long dialog_id) {
if (dialog_id != 0) {
int lower_part = (int)dialog_id;
ChatActivity fragment = new ChatActivity();
Bundle bundle = new Bundle();
if (lower_part != 0) {
if (lower_part > 0) {
NotificationCenter.Instance.postNotificationName(MessagesController.closeChats);
bundle.putInt("user_id", lower_part);
fragment.setArguments(bundle);
fragment.scrollToTopOnResume = true;
presentFragment(fragment, "chat" + Math.random(), true, false);
} else if (lower_part < 0) {
NotificationCenter.Instance.postNotificationName(MessagesController.closeChats);
bundle.putInt("chat_id", -lower_part);
fragment.setArguments(bundle);
fragment.scrollToTopOnResume = true;
presentFragment(fragment, "chat" + Math.random(), true, false);
}
} else {
NotificationCenter.Instance.postNotificationName(MessagesController.closeChats);
int chat_id = (int)(dialog_id >> 32);
bundle.putInt("enc_id", chat_id);
fragment.setArguments(bundle);
fragment.scrollToTopOnResume = true;
presentFragment(fragment, "chat" + Math.random(), true, false);
}
if (photoPath != null) {
fragment.processSendingPhoto(photoPath);
} else if (videoPath != null) {
fragment.processSendingVideo(videoPath);
} else if (sendingText != null) {
fragment.processSendingText(sendingText);
}
photoPath = null;
videoPath = null;
sendingText = null;
}
}
private void checkForCrashes() {
CrashManager.register(this, ConnectionsManager.HOCKEY_APP_HASH);
}
private void checkForUpdates() {
if (ConnectionsManager.DEBUG_VERSION) {
UpdateManager.register(this, ConnectionsManager.HOCKEY_APP_HASH);
}
}
@Override
protected void onPause() {
super.onPause();
ApplicationLoader.lastPauseTime = System.currentTimeMillis();
if (notificationView != null) {
notificationView.hide(false);
}
View focusView = getCurrentFocus();
if (focusView instanceof EditText) {
focusView.clearFocus();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
processOnFinish();
}
@Override
protected void onResume() {
super.onResume();
if (notificationView == null && getLayoutInflater() != null) {
notificationView = (NotificationView) getLayoutInflater().inflate(R.layout.notification_layout, null);
}
fixLayout();
checkForCrashes();
checkForUpdates();
ApplicationLoader.resetLastPauseTime();
supportInvalidateOptionsMenu();
updateActionBar();
try {
NotificationManager mNotificationManager = (NotificationManager)this.getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.cancel(1);
} catch (Exception e) {
FileLog.e("tmessages", e);
}
}
private void processOnFinish() {
if (finished) {
return;
}
finished = true;
NotificationCenter.Instance.removeObserver(this, 1234);
NotificationCenter.Instance.removeObserver(this, 658);
NotificationCenter.Instance.removeObserver(this, 701);
NotificationCenter.Instance.removeObserver(this, 702);
NotificationCenter.Instance.removeObserver(this, 703);
NotificationCenter.Instance.removeObserver(this, GalleryImageViewer.needShowAllMedia);
if (notificationView != null) {
notificationView.hide(false);
notificationView.destroy();
notificationView = null;
}
}
@Override
public void onConfigurationChanged(android.content.res.Configuration newConfig) {
super.onConfigurationChanged(newConfig);
fixLayout();
}
private void fixLayout() {
if (containerView != null) {
ViewTreeObserver obs = containerView.getViewTreeObserver();
obs.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
WindowManager manager = (WindowManager) getSystemService(WINDOW_SERVICE);
int rotation = manager.getDefaultDisplay().getRotation();
int height;
int currentActionBarHeight = getSupportActionBar().getHeight();
if (currentActionBarHeight != Utilities.dp(48) && currentActionBarHeight != Utilities.dp(40)) {
height = currentActionBarHeight;
} else {
height = Utilities.dp(48);
if (rotation == Surface.ROTATION_270 || rotation == Surface.ROTATION_90) {
height = Utilities.dp(40);
}
}
if (notificationView != null) {
notificationView.applyOrientationPaddings(rotation == Surface.ROTATION_270 || rotation == Surface.ROTATION_90, height);
}
if (Build.VERSION.SDK_INT < 16) {
containerView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
} else {
containerView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
}
});
}
}
@Override
@SuppressWarnings("unchecked")
public void didReceivedNotification(int id, Object... args) {
if (id == 1234) {
for (BaseFragment fragment : ApplicationLoader.fragmentsStack) {
fragment.onFragmentDestroy();
}
ApplicationLoader.fragmentsStack.clear();
Intent intent2 = new Intent(this, LaunchActivity.class);
startActivity(intent2);
processOnFinish();
finish();
} else if (id == GalleryImageViewer.needShowAllMedia) {
long dialog_id = (Long)args[0];
MediaActivity fragment = new MediaActivity();
Bundle bundle = new Bundle();
if (dialog_id != 0) {
bundle.putLong("dialog_id", dialog_id);
fragment.setArguments(bundle);
presentFragment(fragment, "media_" + dialog_id, false);
}
} else if (id == 658) {
Integer push_user_id = (Integer)NotificationCenter.Instance.getFromMemCache("push_user_id", 0);
Integer push_chat_id = (Integer)NotificationCenter.Instance.getFromMemCache("push_chat_id", 0);
Integer push_enc_id = (Integer)NotificationCenter.Instance.getFromMemCache("push_enc_id", 0);
if (push_user_id != 0) {
NotificationCenter.Instance.postNotificationName(MessagesController.closeChats);
ChatActivity fragment = new ChatActivity();
Bundle bundle = new Bundle();
bundle.putInt("user_id", push_user_id);
fragment.setArguments(bundle);
if (fragment.onFragmentCreate()) {
if (ApplicationLoader.fragmentsStack.size() > 0) {
BaseFragment lastFragment = ApplicationLoader.fragmentsStack.get(ApplicationLoader.fragmentsStack.size() - 1);
lastFragment.willBeHidden();
}
ApplicationLoader.fragmentsStack.add(fragment);
getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment, "chat" + Math.random()).commitAllowingStateLoss();
}
} else if (push_chat_id != 0) {
NotificationCenter.Instance.postNotificationName(MessagesController.closeChats);
ChatActivity fragment = new ChatActivity();
Bundle bundle = new Bundle();
bundle.putInt("chat_id", push_chat_id);
fragment.setArguments(bundle);
if (fragment.onFragmentCreate()) {
if (ApplicationLoader.fragmentsStack.size() > 0) {
BaseFragment lastFragment = ApplicationLoader.fragmentsStack.get(ApplicationLoader.fragmentsStack.size() - 1);
lastFragment.willBeHidden();
}
ApplicationLoader.fragmentsStack.add(fragment);
getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment, "chat" + Math.random()).commitAllowingStateLoss();
}
} else if (push_enc_id != 0) {
NotificationCenter.Instance.postNotificationName(MessagesController.closeChats);
ChatActivity fragment = new ChatActivity();
Bundle bundle = new Bundle();
bundle.putInt("enc_id", push_enc_id);
fragment.setArguments(bundle);
if (fragment.onFragmentCreate()) {
if (ApplicationLoader.fragmentsStack.size() > 0) {
BaseFragment lastFragment = ApplicationLoader.fragmentsStack.get(ApplicationLoader.fragmentsStack.size() - 1);
lastFragment.willBeHidden();
}
ApplicationLoader.fragmentsStack.add(fragment);
getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment, "chat" + Math.random()).commitAllowingStateLoss();
}
}
} else if (id == 701) {
if (notificationView != null) {
MessageObject message = (MessageObject)args[0];
notificationView.show(message);
}
} else if (id == 702) {
if (args[0] != this) {
processOnFinish();
}
} else if (id == 703) {
int state = (Integer)args[0];
if (currentConnectionState != state) {
FileLog.e("tmessages", "switch to state " + state);
currentConnectionState = state;
updateActionBar();
}
}
}
public void fixBackButton() {
if(android.os.Build.VERSION.SDK_INT == 19) {
//workaround for back button dissapear
try {
Class firstClass = getSupportActionBar().getClass();
Class aClass = firstClass.getSuperclass();
if (aClass == android.support.v7.app.ActionBar.class) {
} else {
Field field = aClass.getDeclaredField("mActionBar");
field.setAccessible(true);
android.app.ActionBar bar = (android.app.ActionBar)field.get(getSupportActionBar());
field = bar.getClass().getDeclaredField("mActionView");
field.setAccessible(true);
View v = (View)field.get(bar);
aClass = v.getClass();
field = aClass.getDeclaredField("mHomeLayout");
field.setAccessible(true);
v = (View)field.get(v);
v.setVisibility(View.VISIBLE);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void updateActionBar() {
ActionBar actionBar = getSupportActionBar();
if (actionBar == null) {
return;
}
BaseFragment currentFragment = null;
if (!ApplicationLoader.fragmentsStack.isEmpty()) {
currentFragment = ApplicationLoader.fragmentsStack.get(ApplicationLoader.fragmentsStack.size() - 1);
}
boolean canApplyLoading = true;
if (currentFragment != null && (currentConnectionState == 0 || !currentFragment.canApplyUpdateStatus() || statusView == null)) {
currentFragment.applySelfActionBar();
canApplyLoading = false;
}
if (canApplyLoading) {
if (statusView != null) {
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayShowHomeEnabled(false);
actionBar.setDisplayHomeAsUpEnabled(false);
actionBar.setDisplayUseLogoEnabled(false);
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setSubtitle(null);
if (ApplicationLoader.fragmentsStack.size() > 1) {
backStatusButton.setVisibility(View.VISIBLE);
statusBackground.setEnabled(true);
} else {
backStatusButton.setVisibility(View.GONE);
statusBackground.setEnabled(false);
}
if (currentConnectionState == 1) {
statusText.setText(getString(R.string.WaitingForNetwork));
} else if (currentConnectionState == 2) {
statusText.setText(getString(R.string.Connecting));
} else if (currentConnectionState == 3) {
statusText.setText(getString(R.string.Updating));
}
if (actionBar.getCustomView() != statusView) {
actionBar.setCustomView(statusView);
}
try {
if (statusView.getLayoutParams() instanceof android.support.v7.app.ActionBar.LayoutParams) {
android.support.v7.app.ActionBar.LayoutParams statusParams = (android.support.v7.app.ActionBar.LayoutParams)statusView.getLayoutParams();
statusText.measure(View.MeasureSpec.makeMeasureSpec(800, View.MeasureSpec.AT_MOST), View.MeasureSpec.makeMeasureSpec(100, View.MeasureSpec.AT_MOST));
statusParams.width = (statusText.getMeasuredWidth() + Utilities.dp(54));
statusView.setLayoutParams(statusParams);
} else if (statusView.getLayoutParams() instanceof android.app.ActionBar.LayoutParams) {
android.app.ActionBar.LayoutParams statusParams = (android.app.ActionBar.LayoutParams)statusView.getLayoutParams();
statusText.measure(View.MeasureSpec.makeMeasureSpec(800, View.MeasureSpec.AT_MOST), View.MeasureSpec.makeMeasureSpec(100, View.MeasureSpec.AT_MOST));
statusParams.width = (statusText.getMeasuredWidth() + Utilities.dp(54));
statusView.setLayoutParams(statusParams);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
public void presentFragment(BaseFragment fragment, String tag, boolean bySwipe) {
presentFragment(fragment, tag, false, bySwipe);
}
public void presentFragment(BaseFragment fragment, String tag, boolean removeLast, boolean bySwipe) {
if (getCurrentFocus() != null) {
Utilities.hideKeyboard(getCurrentFocus());
}
if (!fragment.onFragmentCreate()) {
return;
}
BaseFragment current = null;
if (!ApplicationLoader.fragmentsStack.isEmpty()) {
current = ApplicationLoader.fragmentsStack.get(ApplicationLoader.fragmentsStack.size() - 1);
}
if (current != null) {
current.willBeHidden();
}
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction fTrans = fm.beginTransaction();
if (removeLast && current != null) {
ApplicationLoader.fragmentsStack.remove(ApplicationLoader.fragmentsStack.size() - 1);
current.onFragmentDestroy();
}
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("mainconfig", Activity.MODE_PRIVATE);
boolean animations = preferences.getBoolean("view_animations", true);
if (animations) {
if (bySwipe) {
fTrans.setCustomAnimations(R.anim.slide_left, R.anim.no_anim);
} else {
fTrans.setCustomAnimations(R.anim.scale_in, R.anim.no_anim);
}
}
fTrans.replace(R.id.container, fragment, tag);
fTrans.commitAllowingStateLoss();
ApplicationLoader.fragmentsStack.add(fragment);
}
public void removeFromStack(BaseFragment fragment) {
ApplicationLoader.fragmentsStack.remove(fragment);
fragment.onFragmentDestroy();
}
public void finishFragment(boolean bySwipe) {
if (getCurrentFocus() != null) {
Utilities.hideKeyboard(getCurrentFocus());
}
if (ApplicationLoader.fragmentsStack.size() < 2) {
for (BaseFragment fragment : ApplicationLoader.fragmentsStack) {
fragment.onFragmentDestroy();
}
ApplicationLoader.fragmentsStack.clear();
MessagesActivity fragment = new MessagesActivity();
fragment.onFragmentCreate();
ApplicationLoader.fragmentsStack.add(fragment);
getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment, "chats").commitAllowingStateLoss();
return;
}
BaseFragment fragment = ApplicationLoader.fragmentsStack.get(ApplicationLoader.fragmentsStack.size() - 1);
fragment.onFragmentDestroy();
BaseFragment prev = ApplicationLoader.fragmentsStack.get(ApplicationLoader.fragmentsStack.size() - 2);
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction fTrans = fm.beginTransaction();
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("mainconfig", Activity.MODE_PRIVATE);
boolean animations = preferences.getBoolean("view_animations", true);
if (animations) {
if (bySwipe) {
fTrans.setCustomAnimations(R.anim.no_anim_show, R.anim.slide_right_away);
} else {
fTrans.setCustomAnimations(R.anim.no_anim_show, R.anim.scale_out);
}
}
fTrans.replace(R.id.container, prev, prev.getTag());
fTrans.commitAllowingStateLoss();
ApplicationLoader.fragmentsStack.remove(ApplicationLoader.fragmentsStack.size() - 1);
}
@Override
public void onBackPressed() {
if (ApplicationLoader.fragmentsStack.size() == 1) {
ApplicationLoader.fragmentsStack.get(0).onFragmentDestroy();
ApplicationLoader.fragmentsStack.clear();
processOnFinish();
finish();
return;
}
if (!ApplicationLoader.fragmentsStack.isEmpty()) {
BaseFragment lastFragment = ApplicationLoader.fragmentsStack.get(ApplicationLoader.fragmentsStack.size() - 1);
if (lastFragment.onBackPressed()) {
finishFragment(false);
}
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
try {
super.onSaveInstanceState(outState);
} catch (Exception e) {
FileLog.e("tmessages", e);
}
}
}