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

7257 lines
421 KiB
Java
Raw Normal View History

2013-10-25 17:19:00 +02:00
/*
2019-01-23 18:03:33 +01:00
* This is the source code of Telegram for Android v. 5.x.x.
2013-10-25 17:19:00 +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).
*
2019-01-23 18:03:33 +01:00
* Copyright Nikolai Kudashov, 2013-2018.
2013-10-25 17:19:00 +02:00
*/
package org.telegram.ui;
2022-06-21 04:51:00 +02:00
import static org.telegram.ui.Components.Premium.LimitReachedBottomSheet.TYPE_ACCOUNTS;
2019-08-22 01:53:26 +02:00
import android.Manifest;
2019-12-31 14:08:08 +01:00
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
2020-09-30 15:48:47 +02:00
import android.animation.ObjectAnimator;
2022-06-21 04:51:00 +02:00
import android.animation.ValueAnimator;
import android.annotation.SuppressLint;
import android.app.Activity;
2017-12-08 18:35:59 +01:00
import android.app.ActivityManager;
2022-11-05 13:34:47 +01:00
import android.app.Dialog;
2020-12-23 08:48:30 +01:00
import android.content.Context;
2013-10-25 17:19:00 +02:00
import android.content.Intent;
import android.content.SharedPreferences;
2015-10-29 18:10:07 +01:00
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.database.Cursor;
2019-09-10 12:56:11 +02:00
import android.graphics.Bitmap;
2019-12-31 14:08:08 +01:00
import android.graphics.Canvas;
2023-03-08 08:27:18 +01:00
import android.graphics.Color;
2021-06-25 02:43:10 +02:00
import android.graphics.LinearGradient;
import android.graphics.Matrix;
import android.graphics.Paint;
2022-11-05 13:34:47 +01:00
import android.graphics.Path;
2014-11-07 11:23:17 +01:00
import android.graphics.Point;
2016-10-11 13:57:01 +02:00
import android.graphics.Shader;
2020-12-23 08:48:30 +01:00
import android.location.LocationManager;
2021-04-09 15:17:32 +02:00
import android.media.AudioManager;
import android.net.Uri;
import android.os.Build;
2013-10-25 17:19:00 +02:00
import android.os.Bundle;
import android.os.Parcelable;
2017-12-08 18:35:59 +01:00
import android.os.StatFs;
2022-08-12 17:23:51 +02:00
import android.os.StrictMode;
2019-12-31 14:08:08 +01:00
import android.os.SystemClock;
import android.provider.ContactsContract;
2020-12-23 08:48:30 +01:00
import android.provider.Settings;
2023-02-03 20:11:36 +01:00
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.TextPaint;
import android.text.TextUtils;
2023-02-03 20:11:36 +01:00
import android.text.style.ClickableSpan;
2020-09-30 15:48:47 +02:00
import android.util.Base64;
2022-11-05 13:34:47 +01:00
import android.util.SparseArray;
2022-09-16 20:48:21 +02:00
import android.util.SparseIntArray;
2021-06-25 02:43:10 +02:00
import android.util.TypedValue;
import android.view.ActionMode;
2021-06-25 02:43:10 +02:00
import android.view.Gravity;
2014-10-01 21:55:24 +02:00
import android.view.KeyEvent;
2017-03-31 01:58:05 +02:00
import android.view.Menu;
import android.view.MotionEvent;
2013-10-25 17:19:00 +02:00
import android.view.View;
2019-12-31 14:08:08 +01:00
import android.view.ViewAnimationUtils;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.Window;
2014-11-17 03:44:57 +01:00
import android.view.WindowManager;
import android.widget.FrameLayout;
2019-12-31 14:08:08 +01:00
import android.widget.ImageView;
2017-07-08 18:32:04 +02:00
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
2021-06-25 02:43:10 +02:00
import android.widget.TextView;
import android.widget.Toast;
2013-10-25 17:19:00 +02:00
2020-09-30 15:48:47 +02:00
import androidx.annotation.NonNull;
2020-12-23 08:48:30 +01:00
import androidx.arch.core.util.Function;
2022-09-16 20:48:21 +02:00
import androidx.core.app.ActivityCompat;
2020-08-14 18:58:22 +02:00
import androidx.core.content.pm.ShortcutInfoCompat;
import androidx.core.content.pm.ShortcutManagerCompat;
2022-03-11 17:49:54 +01:00
import androidx.core.graphics.ColorUtils;
2020-09-30 15:48:47 +02:00
import androidx.recyclerview.widget.ItemTouchHelper;
2020-08-14 18:58:22 +02:00
import androidx.recyclerview.widget.LinearLayoutManager;
2020-09-30 15:48:47 +02:00
import androidx.recyclerview.widget.RecyclerView;
2020-08-14 18:58:22 +02:00
2019-07-18 15:01:39 +02:00
import com.google.android.gms.common.api.Status;
2020-09-30 15:48:47 +02:00
import com.google.firebase.appindexing.Action;
import com.google.firebase.appindexing.FirebaseUserActions;
import com.google.firebase.appindexing.builders.AssistActionBuilder;
2019-07-18 15:01:39 +02:00
2020-09-30 15:48:47 +02:00
import org.telegram.PhoneFormat.PhoneFormat;
2019-07-18 15:01:39 +02:00
import org.telegram.messenger.AccountInstance;
2015-09-24 22:52:02 +02:00
import org.telegram.messenger.AndroidUtilities;
2020-08-14 18:58:22 +02:00
import org.telegram.messenger.ApplicationLoader;
2023-02-25 09:01:39 +01:00
import org.telegram.messenger.AutoDeleteMediaTask;
2023-02-06 12:08:24 +01:00
import org.telegram.messenger.BackupAgent;
2022-11-05 13:34:47 +01:00
import org.telegram.messenger.BotWebViewVibrationEffect;
2017-03-31 01:58:05 +02:00
import org.telegram.messenger.BuildVars;
2015-09-24 22:52:02 +02:00
import org.telegram.messenger.ChatObject;
import org.telegram.messenger.ContactsController;
2020-09-30 15:48:47 +02:00
import org.telegram.messenger.ContactsLoadingObserver;
2021-09-20 07:54:41 +02:00
import org.telegram.messenger.DialogObject;
2017-12-08 18:35:59 +01:00
import org.telegram.messenger.FileLoader;
2020-08-14 18:58:22 +02:00
import org.telegram.messenger.FileLog;
2022-03-11 17:49:54 +01:00
import org.telegram.messenger.FingerprintController;
import org.telegram.messenger.GenericProvider;
2015-10-29 18:10:07 +01:00
import org.telegram.messenger.ImageLoader;
2023-03-08 08:27:18 +01:00
import org.telegram.messenger.LiteMode;
2020-08-14 18:58:22 +02:00
import org.telegram.messenger.LocaleController;
import org.telegram.messenger.LocationController;
2017-07-08 18:32:04 +02:00
import org.telegram.messenger.MediaController;
2020-08-14 18:58:22 +02:00
import org.telegram.messenger.MediaDataController;
2016-04-22 15:49:00 +02:00
import org.telegram.messenger.MessageObject;
2015-09-24 22:52:02 +02:00
import org.telegram.messenger.MessagesController;
import org.telegram.messenger.MessagesStorage;
2020-08-14 18:58:22 +02:00
import org.telegram.messenger.NotificationCenter;
2023-02-06 12:08:24 +01:00
import org.telegram.messenger.NotificationsController;
2022-08-12 17:23:51 +02:00
import org.telegram.messenger.PushListenerController;
2020-08-14 18:58:22 +02:00
import org.telegram.messenger.R;
2015-09-24 22:52:02 +02:00
import org.telegram.messenger.SendMessagesHelper;
2018-07-30 04:07:02 +02:00
import org.telegram.messenger.SharedConfig;
2022-11-05 13:34:47 +01:00
import org.telegram.messenger.TopicsController;
2020-08-14 18:58:22 +02:00
import org.telegram.messenger.UserConfig;
2015-09-24 22:52:02 +02:00
import org.telegram.messenger.UserObject;
2016-03-06 02:49:31 +01:00
import org.telegram.messenger.Utilities;
2016-04-22 15:49:00 +02:00
import org.telegram.messenger.browser.Browser;
2021-06-25 02:43:10 +02:00
import org.telegram.messenger.voip.VideoCapturerDevice;
2020-08-14 18:58:22 +02:00
import org.telegram.messenger.voip.VoIPPendingCall;
2020-08-15 23:06:36 +02:00
import org.telegram.messenger.voip.VoIPService;
2015-09-24 22:52:02 +02:00
import org.telegram.tgnet.ConnectionsManager;
2021-01-28 15:15:51 +01:00
import org.telegram.tgnet.TLObject;
2015-09-24 22:52:02 +02:00
import org.telegram.tgnet.TLRPC;
2020-08-14 18:58:22 +02:00
import org.telegram.ui.ActionBar.AlertDialog;
2014-11-13 21:10:14 +01:00
import org.telegram.ui.ActionBar.BaseFragment;
import org.telegram.ui.ActionBar.DrawerLayoutContainer;
2022-11-05 13:34:47 +01:00
import org.telegram.ui.ActionBar.INavigationLayout;
2021-06-25 02:43:10 +02:00
import org.telegram.ui.ActionBar.SimpleTextView;
2020-08-14 18:58:22 +02:00
import org.telegram.ui.ActionBar.Theme;
import org.telegram.ui.Adapters.DrawerLayoutAdapter;
2022-12-30 13:32:20 +01:00
import org.telegram.ui.Cells.CheckBoxCell;
2022-09-16 20:48:21 +02:00
import org.telegram.ui.Cells.DrawerActionCell;
2018-07-30 04:07:02 +02:00
import org.telegram.ui.Cells.DrawerAddCell;
2020-07-26 10:03:38 +02:00
import org.telegram.ui.Cells.DrawerProfileCell;
2018-07-30 04:07:02 +02:00
import org.telegram.ui.Cells.DrawerUserCell;
2017-07-08 18:32:04 +02:00
import org.telegram.ui.Cells.LanguageCell;
2017-12-08 18:35:59 +01:00
import org.telegram.ui.Components.AlertsCreator;
2022-09-16 20:48:21 +02:00
import org.telegram.ui.Components.AnimatedEmojiDrawable;
2022-06-21 04:51:00 +02:00
import org.telegram.ui.Components.AppIconBulletinLayout;
2022-04-16 16:43:17 +02:00
import org.telegram.ui.Components.AttachBotIntroTopView;
2020-08-14 18:58:22 +02:00
import org.telegram.ui.Components.AudioPlayerAlert;
2023-03-08 08:27:18 +01:00
import org.telegram.ui.Components.BatteryDrawable;
2018-07-30 04:07:02 +02:00
import org.telegram.ui.Components.BlockingUpdateView;
2023-03-08 08:27:18 +01:00
import org.telegram.ui.Components.BotWebViewSheet;
2020-12-23 08:48:30 +01:00
import org.telegram.ui.Components.Bulletin;
import org.telegram.ui.Components.BulletinFactory;
2021-06-25 02:43:10 +02:00
import org.telegram.ui.Components.CubicBezierInterpolator;
2020-03-30 14:00:09 +02:00
import org.telegram.ui.Components.Easings;
2017-03-31 01:58:05 +02:00
import org.telegram.ui.Components.EmbedBottomSheet;
2022-08-12 17:23:51 +02:00
import org.telegram.ui.Components.EmojiPacksAlert;
2022-03-11 17:49:54 +01:00
import org.telegram.ui.Components.FireworksOverlay;
2022-11-05 13:34:47 +01:00
import org.telegram.ui.Components.FloatingDebug.FloatingDebugController;
import org.telegram.ui.Components.Forum.ForumUtilities;
2020-12-23 08:48:30 +01:00
import org.telegram.ui.Components.GroupCallPip;
2016-10-11 13:57:01 +02:00
import org.telegram.ui.Components.JoinGroupAlert;
import org.telegram.ui.Components.LayoutHelper;
2021-06-25 02:43:10 +02:00
import org.telegram.ui.Components.MediaActionDrawable;
import org.telegram.ui.Components.PasscodeView;
2019-12-31 14:08:08 +01:00
import org.telegram.ui.Components.PhonebookShareAlert;
2017-07-08 18:32:04 +02:00
import org.telegram.ui.Components.PipRoundVideoView;
2022-06-21 04:51:00 +02:00
import org.telegram.ui.Components.Premium.LimitReachedBottomSheet;
2020-09-30 15:48:47 +02:00
import org.telegram.ui.Components.RLottieDrawable;
import org.telegram.ui.Components.RLottieImageView;
2021-06-25 02:43:10 +02:00
import org.telegram.ui.Components.RadialProgress2;
2017-03-31 01:58:05 +02:00
import org.telegram.ui.Components.RecyclerListView;
2017-12-08 18:35:59 +01:00
import org.telegram.ui.Components.SharingLocationsAlert;
2019-12-31 14:08:08 +01:00
import org.telegram.ui.Components.SideMenultItemAnimator;
2021-06-25 02:43:10 +02:00
import org.telegram.ui.Components.SizeNotifierFrameLayout;
2021-02-23 12:53:38 +01:00
import org.telegram.ui.Components.StickerSetBulletinLayout;
2016-04-22 15:49:00 +02:00
import org.telegram.ui.Components.StickersAlert;
2018-07-30 04:07:02 +02:00
import org.telegram.ui.Components.TermsOfServiceView;
2017-03-31 01:58:05 +02:00
import org.telegram.ui.Components.ThemeEditorView;
2021-03-19 11:25:58 +01:00
import org.telegram.ui.Components.UndoView;
2018-07-30 04:07:02 +02:00
import org.telegram.ui.Components.UpdateAppAlertDialog;
2020-09-30 15:48:47 +02:00
import org.telegram.ui.Components.voip.VoIPHelper;
2021-04-09 15:17:32 +02:00
import org.webrtc.voiceengine.WebRtcAudioTrack;
2013-10-25 17:19:00 +02:00
2021-01-28 15:15:51 +01:00
import java.io.BufferedReader;
2017-12-08 18:35:59 +01:00
import java.io.File;
2021-01-28 15:15:51 +01:00
import java.io.InputStream;
import java.io.InputStreamReader;
2021-07-15 16:24:57 +02:00
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
2021-07-15 16:24:57 +02:00
import java.util.Date;
2016-04-22 15:49:00 +02:00
import java.util.HashMap;
2016-03-06 02:49:31 +01:00
import java.util.List;
2022-11-05 13:34:47 +01:00
import java.util.Map;
2021-01-28 15:15:51 +01:00
import java.util.Set;
2022-12-30 13:32:20 +01:00
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.function.Consumer;
2022-09-16 20:48:21 +02:00
import java.util.regex.Matcher;
2021-01-29 08:12:33 +01:00
import java.util.regex.Pattern;
2013-10-25 17:19:00 +02:00
2022-11-05 13:34:47 +01:00
public class LaunchActivity extends BasePermissionsActivity implements INavigationLayout.INavigationLayoutDelegate, NotificationCenter.NotificationCenterDelegate, DialogsActivity.DialogsActivityDelegate {
2022-09-16 20:48:21 +02:00
public final static Pattern PREFIX_T_ME_PATTERN = Pattern.compile("^(?:http(?:s|)://|)([A-z0-9-]+?)\\.t\\.me");
2022-04-16 16:43:17 +02:00
public static boolean isResumed;
public static Runnable onResumeStaticCallback;
2015-06-29 19:12:11 +02:00
2020-09-30 15:48:47 +02:00
private static final String EXTRA_ACTION_TOKEN = "actions.fulfillment.extra.ACTION_TOKEN";
2014-11-17 03:44:57 +01:00
private boolean finished;
private String videoPath;
private String sendingText;
2017-12-08 18:35:59 +01:00
private ArrayList<SendMessagesHelper.SendingMediaInfo> photoPathsArray;
2014-11-17 03:44:57 +01:00
private ArrayList<String> documentsPathsArray;
2014-11-21 01:14:44 +01:00
private ArrayList<Uri> documentsUrisArray;
2021-01-28 15:15:51 +01:00
private Uri exportingChatUri;
2014-11-21 01:14:44 +01:00
private String documentsMimeType;
2014-11-17 03:44:57 +01:00
private ArrayList<String> documentsOriginalPathsArray;
private ArrayList<TLRPC.User> contactsToSend;
2018-07-30 04:07:02 +02:00
private Uri contactsToSendUri;
2013-10-25 17:19:00 +02:00
private int currentConnectionState;
2015-01-02 23:15:07 +01:00
private static ArrayList<BaseFragment> mainFragmentsStack = new ArrayList<>();
private static ArrayList<BaseFragment> layerFragmentsStack = new ArrayList<>();
private static ArrayList<BaseFragment> rightFragmentsStack = new ArrayList<>();
2015-11-26 22:04:02 +01:00
private ViewTreeObserver.OnGlobalLayoutListener onGlobalLayoutListener;
2021-06-25 02:43:10 +02:00
private ArrayList<Parcelable> importingStickers;
private ArrayList<String> importingStickersEmoji;
private String importingStickersSoftware;
2019-05-14 14:08:05 +02:00
private ActionMode visibleActionMode;
2021-04-09 15:17:32 +02:00
private boolean wasMutedByAdminRaisedHand;
2021-03-19 11:25:58 +01:00
2019-12-31 14:08:08 +01:00
private ImageView themeSwitchImageView;
2020-09-30 15:48:47 +02:00
private View themeSwitchSunView;
private RLottieDrawable themeSwitchSunDrawable;
2022-11-05 13:34:47 +01:00
private INavigationLayout actionBarLayout;
private INavigationLayout layersActionBarLayout;
private INavigationLayout rightActionBarLayout;
2022-09-16 20:48:21 +02:00
private RelativeLayout launchLayout;
2014-11-17 03:44:57 +01:00
private FrameLayout shadowTablet;
private FrameLayout shadowTabletSide;
2021-06-25 02:43:10 +02:00
private SizeNotifierFrameLayout backgroundTablet;
2020-09-30 15:48:47 +02:00
private FrameLayout frameLayout;
2022-03-11 17:49:54 +01:00
private FireworksOverlay fireworksOverlay;
2021-04-14 03:44:46 +02:00
public DrawerLayoutContainer drawerLayoutContainer;
2014-11-17 03:44:57 +01:00
private DrawerLayoutAdapter drawerLayoutAdapter;
private PasscodeView passcodeView;
2023-02-03 20:11:36 +01:00
private List<PasscodeView> overlayPasscodeViews = new ArrayList<>();
2018-07-30 04:07:02 +02:00
private TermsOfServiceView termsOfServiceView;
private BlockingUpdateView blockingUpdateView;
private AlertDialog visibleDialog;
2018-07-30 04:07:02 +02:00
private AlertDialog proxyErrorDialog;
2017-03-31 01:58:05 +02:00
private RecyclerListView sideMenu;
2022-09-16 20:48:21 +02:00
private SelectAnimatedEmojiDialog.SelectAnimatedEmojiDialogWindow selectAnimatedEmojiDialog;
2020-03-30 14:00:09 +02:00
private SideMenultItemAnimator itemAnimator;
2021-06-25 02:43:10 +02:00
private FrameLayout updateLayout;
private RadialProgress2 updateLayoutIcon;
private SimpleTextView updateTextView;
private TextView updateSizeTextView;
2021-07-15 16:24:57 +02:00
private FrameLayout sideMenuContainer;
2022-06-21 04:51:00 +02:00
private View rippleAbove;
2017-07-08 18:32:04 +02:00
private AlertDialog localeDialog;
private boolean loadingLocaleDialog;
private HashMap<String, String> systemLocaleStrings;
private HashMap<String, String> englishLocaleStrings;
private Intent passcodeSaveIntent;
private boolean passcodeSaveIntentIsNew;
private boolean passcodeSaveIntentIsRestore;
2014-11-17 03:44:57 +01:00
private boolean tabletFullSize;
2013-10-25 17:19:00 +02:00
2019-09-10 12:56:11 +02:00
private String loadingThemeFileName;
private String loadingThemeWallpaperName;
2019-12-31 14:08:08 +01:00
private TLRPC.TL_wallPaper loadingThemeWallpaper;
2019-09-10 12:56:11 +02:00
private Theme.ThemeInfo loadingThemeInfo;
private TLRPC.TL_theme loadingTheme;
2019-12-31 14:08:08 +01:00
private boolean loadingThemeAccent;
2019-09-10 12:56:11 +02:00
private AlertDialog loadingThemeProgressDialog;
2022-03-11 17:49:54 +01:00
private boolean isNavigationBarColorFrozen = false;
2022-06-21 04:51:00 +02:00
private boolean navigateToPremiumBot;
2022-08-12 17:23:51 +02:00
private Runnable navigateToPremiumGiftCallback;
2022-06-21 04:51:00 +02:00
private Runnable lockRunnable;
2022-06-21 04:51:00 +02:00
private List<Runnable> onUserLeaveHintListeners = new ArrayList<>();
2019-07-18 15:01:39 +02:00
private static final int PLAY_SERVICES_REQUEST_CHECK_SETTINGS = 140;
2021-06-25 02:43:10 +02:00
public static final int SCREEN_CAPTURE_REQUEST_CODE = 520;
2019-07-18 15:01:39 +02:00
2022-09-16 20:48:21 +02:00
public static final int BLUETOOTH_CONNECT_TYPE = 0;
private SparseIntArray requestedPermissions = new SparseIntArray();
private int requsetPermissionsPointer = 5934;
2022-12-30 13:32:20 +01:00
public static boolean systemBlurEnabled;
private Consumer<Boolean> blurListener = new Consumer<Boolean>() {
@Override
public void accept(Boolean aBoolean) {
systemBlurEnabled = aBoolean;
}
};
2022-09-16 20:48:21 +02:00
2023-02-03 20:11:36 +01:00
public static LaunchActivity instance;
2013-10-25 17:19:00 +02:00
@Override
protected void onCreate(Bundle savedInstanceState) {
2022-08-12 17:23:51 +02:00
if (BuildVars.DEBUG_VERSION) {
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder(StrictMode.getVmPolicy())
.detectLeakedClosableObjects()
.build());
}
2023-02-03 20:11:36 +01:00
instance = this;
ApplicationLoader.postInitApplication();
2016-10-11 13:57:01 +02:00
AndroidUtilities.checkDisplaySize(this, getResources().getConfiguration());
2018-07-30 04:07:02 +02:00
currentAccount = UserConfig.selectedAccount;
if (!UserConfig.getInstance(currentAccount).isClientActivated()) {
Intent intent = getIntent();
2018-07-30 04:07:02 +02:00
boolean isProxy = false;
if (intent != null && intent.getAction() != null) {
if (Intent.ACTION_SEND.equals(intent.getAction()) || Intent.ACTION_SEND_MULTIPLE.equals(intent.getAction())) {
super.onCreate(savedInstanceState);
finish();
return;
} else if (Intent.ACTION_VIEW.equals(intent.getAction())) {
Uri uri = intent.getData();
if (uri != null) {
String url = uri.toString().toLowerCase();
isProxy = url.startsWith("tg:proxy") || url.startsWith("tg://proxy") || url.startsWith("tg:socks") || url.startsWith("tg://socks");
}
}
}
}
requestWindowFeature(Window.FEATURE_NO_TITLE);
setTheme(R.style.Theme_TMessages);
2017-12-08 18:35:59 +01:00
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
try {
setTaskDescription(new ActivityManager.TaskDescription(null, null, Theme.getColor(Theme.key_actionBarDefault) | 0xff000000));
2022-04-21 20:03:20 +02:00
} catch (Throwable ignore) {
2019-03-03 21:40:48 +01:00
}
try {
getWindow().setNavigationBarColor(0xff000000);
2022-04-21 20:03:20 +02:00
} catch (Throwable ignore) {
2019-03-03 21:40:48 +01:00
2017-12-08 18:35:59 +01:00
}
}
2020-10-05 00:13:31 +02:00
getWindow().setBackgroundDrawableResource(R.drawable.transparent);
2018-07-30 04:07:02 +02:00
if (SharedConfig.passcodeHash.length() > 0 && !SharedConfig.allowScreenCapture) {
2017-03-31 01:58:05 +02:00
try {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
} catch (Exception e) {
FileLog.e(e);
}
}
super.onCreate(savedInstanceState);
2016-10-11 13:57:01 +02:00
if (Build.VERSION.SDK_INT >= 24) {
AndroidUtilities.isInMultiwindow = isInMultiWindowMode();
}
Theme.createCommonChatResources();
2021-07-15 16:24:57 +02:00
Theme.createDialogsResources(this);
2018-07-30 04:07:02 +02:00
if (SharedConfig.passcodeHash.length() != 0 && SharedConfig.appLocked) {
2020-01-23 07:15:40 +01:00
SharedConfig.lastPauseTime = (int) (SystemClock.elapsedRealtime() / 1000);
}
2019-12-31 14:08:08 +01:00
AndroidUtilities.fillStatusBarHeight(this);
2022-11-05 13:34:47 +01:00
actionBarLayout = INavigationLayout.newLayout(this);
2014-11-17 03:44:57 +01:00
2022-06-21 04:51:00 +02:00
frameLayout = new FrameLayout(this) {
@Override
protected void dispatchDraw(Canvas canvas) {
super.dispatchDraw(canvas);
drawRippleAbove(canvas, this);
}
};
2019-12-31 14:08:08 +01:00
setContentView(frameLayout, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
if (Build.VERSION.SDK_INT >= 21) {
themeSwitchImageView = new ImageView(this);
themeSwitchImageView.setVisibility(View.GONE);
}
2014-11-17 03:44:57 +01:00
2021-06-25 02:43:10 +02:00
drawerLayoutContainer = new DrawerLayoutContainer(this) {
2022-09-16 20:48:21 +02:00
private boolean wasPortrait;
2021-06-25 02:43:10 +02:00
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
setDrawerPosition(getDrawerPosition());
2022-09-16 20:48:21 +02:00
boolean portrait = (b - t) > (r - l);
if (portrait != wasPortrait) {
post(() -> {
if (selectAnimatedEmojiDialog != null) {
selectAnimatedEmojiDialog.dismiss();
selectAnimatedEmojiDialog = null;
}
});
wasPortrait = portrait;
}
}
@Override
public void closeDrawer() {
super.closeDrawer();
if (selectAnimatedEmojiDialog != null) {
selectAnimatedEmojiDialog.dismiss();
selectAnimatedEmojiDialog = null;
}
}
@Override
public void closeDrawer(boolean fast) {
super.closeDrawer(fast);
if (selectAnimatedEmojiDialog != null) {
selectAnimatedEmojiDialog.dismiss();
selectAnimatedEmojiDialog = null;
}
2021-06-25 02:43:10 +02:00
}
};
2019-05-14 14:08:05 +02:00
drawerLayoutContainer.setBehindKeyboardColor(Theme.getColor(Theme.key_windowBackgroundWhite));
2019-12-31 14:08:08 +01:00
frameLayout.addView(drawerLayoutContainer, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
2014-11-17 03:44:57 +01:00
2020-09-30 15:48:47 +02:00
if (Build.VERSION.SDK_INT >= 21) {
themeSwitchSunView = new View(this) {
@Override
protected void onDraw(Canvas canvas) {
if (themeSwitchSunDrawable != null) {
themeSwitchSunDrawable.draw(canvas);
invalidate();
}
}
};
frameLayout.addView(themeSwitchSunView, LayoutHelper.createFrame(48, 48));
themeSwitchSunView.setVisibility(View.GONE);
}
2022-11-05 13:34:47 +01:00
frameLayout.addView(fireworksOverlay = new FireworksOverlay(this) {
{
setVisibility(GONE);
}
@Override
public void start() {
setVisibility(VISIBLE);
super.start();
}
@Override
protected void onStop() {
super.onStop();
setVisibility(GONE);
}
});
2022-09-16 20:48:21 +02:00
setupActionBarLayout();
2021-07-15 16:24:57 +02:00
sideMenuContainer = new FrameLayout(this);
2020-03-30 14:00:09 +02:00
sideMenu = new RecyclerListView(this) {
@Override
public boolean drawChild(Canvas canvas, View child, long drawingTime) {
int restore = -1;
if (itemAnimator != null && itemAnimator.isRunning() && itemAnimator.isAnimatingChild(child)) {
restore = canvas.save();
canvas.clipRect(0, itemAnimator.getAnimationClipTop(), getMeasuredWidth(), getMeasuredHeight());
}
boolean result = super.drawChild(canvas, child, drawingTime);
if (restore >= 0) {
canvas.restoreToCount(restore);
invalidate();
invalidateViews();
}
return result;
}
};
itemAnimator = new SideMenultItemAnimator(sideMenu);
sideMenu.setItemAnimator(itemAnimator);
2017-03-31 01:58:05 +02:00
sideMenu.setBackgroundColor(Theme.getColor(Theme.key_chats_menuBackground));
sideMenu.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
2019-12-31 14:08:08 +01:00
sideMenu.setAllowItemsInteractionDuringAnimation(false);
2022-04-16 16:43:17 +02:00
sideMenu.setAdapter(drawerLayoutAdapter = new DrawerLayoutAdapter(this, itemAnimator, drawerLayoutContainer));
2022-09-16 20:48:21 +02:00
drawerLayoutAdapter.setOnPremiumDrawableClick(e -> showSelectStatusDialog());
2021-06-25 02:43:10 +02:00
sideMenuContainer.addView(sideMenu, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
drawerLayoutContainer.setDrawerLayout(sideMenuContainer);
FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) sideMenuContainer.getLayoutParams();
2015-10-29 18:10:07 +01:00
Point screenSize = AndroidUtilities.getRealScreenSize();
layoutParams.width = AndroidUtilities.isTablet() ? AndroidUtilities.dp(320) : Math.min(AndroidUtilities.dp(320), Math.min(screenSize.x, screenSize.y) - AndroidUtilities.dp(56));
2015-10-29 18:10:07 +01:00
layoutParams.height = LayoutHelper.MATCH_PARENT;
2021-06-25 02:43:10 +02:00
sideMenuContainer.setLayoutParams(layoutParams);
2020-07-26 10:03:38 +02:00
sideMenu.setOnItemClickListener((view, position, x, y) -> {
2018-08-27 10:33:11 +02:00
if (position == 0) {
2020-07-26 10:03:38 +02:00
DrawerProfileCell profileCell = (DrawerProfileCell) view;
if (profileCell.isInAvatar(x, y)) {
openSettings(profileCell.hasAvatar());
} else {
drawerLayoutAdapter.setAccountsShown(!drawerLayoutAdapter.isAccountsShown(), true);
}
2018-08-27 10:33:11 +02:00
} else if (view instanceof DrawerUserCell) {
switchToAccount(((DrawerUserCell) view).getAccountNumber(), true);
drawerLayoutContainer.closeDrawer(false);
} else if (view instanceof DrawerAddCell) {
2022-06-21 04:51:00 +02:00
int freeAccounts = 0;
Integer availableAccount = null;
for (int a = UserConfig.MAX_ACCOUNT_COUNT - 1; a >= 0; a--) {
2018-08-27 10:33:11 +02:00
if (!UserConfig.getInstance(a).isClientActivated()) {
2022-06-21 04:51:00 +02:00
freeAccounts++;
if (availableAccount == null) {
availableAccount = a;
}
2015-02-27 20:57:58 +01:00
}
2018-08-27 10:33:11 +02:00
}
2022-06-21 04:51:00 +02:00
if (!UserConfig.hasPremiumOnAccounts()) {
freeAccounts -= (UserConfig.MAX_ACCOUNT_COUNT - UserConfig.MAX_ACCOUNT_DEFAULT_COUNT);
2018-08-27 10:33:11 +02:00
}
2022-06-21 04:51:00 +02:00
if (freeAccounts > 0 && availableAccount != null) {
presentFragment(new LoginActivity(availableAccount));
drawerLayoutContainer.closeDrawer(false);
} else if (!UserConfig.hasPremiumOnAccounts()) {
2022-11-05 13:34:47 +01:00
if (actionBarLayout.getFragmentStack().size() > 0) {
BaseFragment fragment = actionBarLayout.getFragmentStack().get(0);
2022-06-21 04:51:00 +02:00
LimitReachedBottomSheet limitReachedBottomSheet = new LimitReachedBottomSheet(fragment, this, TYPE_ACCOUNTS, currentAccount);
fragment.showDialog(limitReachedBottomSheet);
limitReachedBottomSheet.onShowPremiumScreenRunnable = () -> drawerLayoutContainer.closeDrawer(false);
}
}
2018-08-27 10:33:11 +02:00
} else {
int id = drawerLayoutAdapter.getId(position);
if (id == 2) {
2019-01-23 18:03:33 +01:00
Bundle args = new Bundle();
presentFragment(new GroupCreateActivity(args));
2018-07-30 04:07:02 +02:00
drawerLayoutContainer.closeDrawer(false);
2018-08-27 10:33:11 +02:00
} else if (id == 3) {
Bundle args = new Bundle();
args.putBoolean("onlyUsers", true);
args.putBoolean("destroyAfterSelect", true);
args.putBoolean("createSecretChat", true);
args.putBoolean("allowBots", false);
2019-12-31 14:08:08 +01:00
args.putBoolean("allowSelf", false);
2018-08-27 10:33:11 +02:00
presentFragment(new ContactsActivity(args));
drawerLayoutContainer.closeDrawer(false);
} else if (id == 4) {
SharedPreferences preferences = MessagesController.getGlobalMainSettings();
if (!BuildVars.DEBUG_VERSION && preferences.getBoolean("channel_intro", false)) {
2018-07-30 04:07:02 +02:00
Bundle args = new Bundle();
2018-08-27 10:33:11 +02:00
args.putInt("step", 0);
presentFragment(new ChannelCreateActivity(args));
} else {
2019-07-18 15:01:39 +02:00
presentFragment(new ActionIntroActivity(ActionIntroActivity.ACTION_TYPE_CHANNEL_CREATE));
2018-08-27 10:33:11 +02:00
preferences.edit().putBoolean("channel_intro", true).commit();
2015-09-24 22:52:02 +02:00
}
2018-08-27 10:33:11 +02:00
drawerLayoutContainer.closeDrawer(false);
} else if (id == 6) {
presentFragment(new ContactsActivity(null));
drawerLayoutContainer.closeDrawer(false);
} else if (id == 7) {
presentFragment(new InviteContactsActivity());
drawerLayoutContainer.closeDrawer(false);
} else if (id == 8) {
2020-07-26 10:03:38 +02:00
openSettings(false);
2018-08-27 10:33:11 +02:00
} else if (id == 9) {
Browser.openUrl(LaunchActivity.this, LocaleController.getString("TelegramFaqUrl", R.string.TelegramFaqUrl));
drawerLayoutContainer.closeDrawer(false);
} else if (id == 10) {
presentFragment(new CallLogActivity());
drawerLayoutContainer.closeDrawer(false);
} else if (id == 11) {
Bundle args = new Bundle();
2021-09-20 07:54:41 +02:00
args.putLong("user_id", UserConfig.getInstance(currentAccount).getClientUserId());
2018-08-27 10:33:11 +02:00
presentFragment(new ChatActivity(args));
drawerLayoutContainer.closeDrawer(false);
2020-12-23 08:48:30 +01:00
} else if (id == 12) {
if (Build.VERSION.SDK_INT >= 23) {
if (checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
presentFragment(new ActionIntroActivity(ActionIntroActivity.ACTION_TYPE_NEARBY_LOCATION_ACCESS));
drawerLayoutContainer.closeDrawer(false);
return;
}
}
boolean enabled = true;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
LocationManager lm = (LocationManager) ApplicationLoader.applicationContext.getSystemService(Context.LOCATION_SERVICE);
enabled = lm.isLocationEnabled();
} else if (Build.VERSION.SDK_INT >= 19) {
try {
int mode = Settings.Secure.getInt(ApplicationLoader.applicationContext.getContentResolver(), Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF);
enabled = (mode != Settings.Secure.LOCATION_MODE_OFF);
} catch (Throwable e) {
FileLog.e(e);
}
}
if (enabled) {
presentFragment(new PeopleNearbyActivity());
} else {
presentFragment(new ActionIntroActivity(ActionIntroActivity.ACTION_TYPE_NEARBY_LOCATION_ENABLED));
}
drawerLayoutContainer.closeDrawer(false);
2021-04-14 03:44:46 +02:00
} else if (id == 13) {
Browser.openUrl(LaunchActivity.this, LocaleController.getString("TelegramFeaturesUrl", R.string.TelegramFeaturesUrl));
drawerLayoutContainer.closeDrawer(false);
2022-09-16 20:48:21 +02:00
} else if (id == 15) {
showSelectStatusDialog();
}
2014-11-17 03:44:57 +01:00
}
});
2020-09-30 15:48:47 +02:00
final ItemTouchHelper sideMenuTouchHelper = new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP | ItemTouchHelper.DOWN, 0) {
private RecyclerView.ViewHolder selectedViewHolder;
@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
if (viewHolder.getItemViewType() != target.getItemViewType()) {
return false;
}
drawerLayoutAdapter.swapElements(viewHolder.getAdapterPosition(), target.getAdapterPosition());
return true;
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
}
@Override
public boolean isLongPressDragEnabled() {
return false;
}
@Override
public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
clearSelectedViewHolder();
if (actionState != ItemTouchHelper.ACTION_STATE_IDLE) {
selectedViewHolder = viewHolder;
final View view = viewHolder.itemView;
sideMenu.cancelClickRunnables(false);
view.setBackgroundColor(Theme.getColor(Theme.key_dialogBackground));
if (Build.VERSION.SDK_INT >= 21) {
ObjectAnimator.ofFloat(view, "elevation", AndroidUtilities.dp(1)).setDuration(150).start();
}
}
}
@Override
public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
clearSelectedViewHolder();
}
private void clearSelectedViewHolder() {
if (selectedViewHolder != null) {
final View view = selectedViewHolder.itemView;
selectedViewHolder = null;
view.setTranslationX(0f);
view.setTranslationY(0f);
if (Build.VERSION.SDK_INT >= 21) {
final ObjectAnimator animator = ObjectAnimator.ofFloat(view, "elevation", 0f);
animator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
view.setBackground(null);
}
});
animator.setDuration(150).start();
}
}
}
@Override
public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
final View view = viewHolder.itemView;
if (drawerLayoutAdapter.isAccountsShown()) {
RecyclerView.ViewHolder topViewHolder = recyclerView.findViewHolderForAdapterPosition(drawerLayoutAdapter.getFirstAccountPosition() - 1);
RecyclerView.ViewHolder bottomViewHolder = recyclerView.findViewHolderForAdapterPosition(drawerLayoutAdapter.getLastAccountPosition() + 1);
if (topViewHolder != null && topViewHolder.itemView != null && topViewHolder.itemView.getBottom() == view.getTop() && dY < 0f) {
dY = 0f;
} else if (bottomViewHolder != null && bottomViewHolder.itemView != null && bottomViewHolder.itemView.getTop() == view.getBottom() && dY > 0f) {
dY = 0f;
}
}
view.setTranslationX(dX);
view.setTranslationY(dY);
}
});
sideMenuTouchHelper.attachToRecyclerView(sideMenu);
sideMenu.setOnItemLongClickListener((view, position) -> {
if (view instanceof DrawerUserCell) {
final int accountNumber = ((DrawerUserCell) view).getAccountNumber();
if (accountNumber == currentAccount || AndroidUtilities.isTablet()) {
sideMenuTouchHelper.startDrag(sideMenu.getChildViewHolder(view));
} else {
final BaseFragment fragment = new DialogsActivity(null) {
@Override
2022-11-05 13:34:47 +01:00
public void onTransitionAnimationEnd(boolean isOpen, boolean backward) {
2020-09-30 15:48:47 +02:00
super.onTransitionAnimationEnd(isOpen, backward);
if (!isOpen && backward) { // closed
drawerLayoutContainer.setDrawCurrentPreviewFragmentAbove(false);
2022-11-05 13:34:47 +01:00
actionBarLayout.getView().invalidate();
2020-09-30 15:48:47 +02:00
}
}
@Override
2022-11-05 13:34:47 +01:00
public void onPreviewOpenAnimationEnd() {
2020-09-30 15:48:47 +02:00
super.onPreviewOpenAnimationEnd();
drawerLayoutContainer.setAllowOpenDrawer(false, false);
drawerLayoutContainer.setDrawCurrentPreviewFragmentAbove(false);
switchToAccount(accountNumber, true);
2022-11-05 13:34:47 +01:00
actionBarLayout.getView().invalidate();
2020-09-30 15:48:47 +02:00
}
};
fragment.setCurrentAccount(accountNumber);
actionBarLayout.presentFragmentAsPreview(fragment);
drawerLayoutContainer.setDrawCurrentPreviewFragmentAbove(true);
return true;
}
}
return false;
});
2014-11-17 03:44:57 +01:00
drawerLayoutContainer.setParentActionBarLayout(actionBarLayout);
actionBarLayout.setDrawerLayoutContainer(drawerLayoutContainer);
2022-11-05 13:34:47 +01:00
actionBarLayout.setFragmentStack(mainFragmentsStack);
2022-03-11 17:49:54 +01:00
actionBarLayout.setFragmentStackChangedListener(() -> {
2022-06-21 04:51:00 +02:00
checkSystemBarColors(true, false);
2022-03-11 17:49:54 +01:00
});
actionBarLayout.setDelegate(this);
2017-03-31 01:58:05 +02:00
Theme.loadWallpaper();
2018-07-30 04:07:02 +02:00
checkCurrentAccount();
2020-03-30 14:00:09 +02:00
updateCurrentConnectionState(currentAccount);
2018-07-30 04:07:02 +02:00
NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.closeOtherAppActivities, this);
currentConnectionState = ConnectionsManager.getInstance(currentAccount).getConnectionState();
NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.needShowAlert);
NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.reloadInterface);
NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.suggestedLangpack);
NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.didSetNewTheme);
NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.needSetDayNightTheme);
2019-12-31 14:08:08 +01:00
NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.needCheckSystemBarColors);
2018-07-30 04:07:02 +02:00
NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.closeOtherAppActivities);
NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.didSetPasscode);
NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.didSetNewWallpapper);
NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.notificationsCountUpdated);
2019-12-31 14:08:08 +01:00
NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.screenStateChanged);
2021-02-23 12:53:38 +01:00
NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.showBulletin);
2021-06-25 02:43:10 +02:00
NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.appUpdateAvailable);
2022-09-16 20:48:21 +02:00
NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.requestPermissions);
NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.currentUserPremiumStatusChanged);
2023-03-08 08:27:18 +01:00
LiteMode.addOnPowerSaverAppliedListener(this::onPowerSaver);
2023-03-10 21:20:59 +01:00
if (actionBarLayout.getFragmentStack().isEmpty() && (layersActionBarLayout == null || layersActionBarLayout.getFragmentStack().isEmpty())) {
2018-07-30 04:07:02 +02:00
if (!UserConfig.getInstance(currentAccount).isClientActivated()) {
2022-03-11 17:49:54 +01:00
actionBarLayout.addFragmentToStack(getClientNotActivatedFragment());
drawerLayoutContainer.setAllowOpenDrawer(false, false);
} else {
2017-03-31 01:58:05 +02:00
DialogsActivity dialogsActivity = new DialogsActivity(null);
dialogsActivity.setSideMenu(sideMenu);
actionBarLayout.addFragmentToStack(dialogsActivity);
2015-04-09 20:00:14 +02:00
drawerLayoutContainer.setAllowOpenDrawer(true, false);
}
try {
if (savedInstanceState != null) {
String fragmentName = savedInstanceState.getString("fragment");
if (fragmentName != null) {
Bundle args = savedInstanceState.getBundle("args");
2015-01-02 23:15:07 +01:00
switch (fragmentName) {
case "chat":
if (args != null) {
ChatActivity chat = new ChatActivity(args);
if (actionBarLayout.addFragmentToStack(chat)) {
chat.restoreSelfArgs(savedInstanceState);
}
}
2015-01-02 23:15:07 +01:00
break;
case "settings": {
2021-09-20 07:54:41 +02:00
args.putLong("user_id", UserConfig.getInstance(currentAccount).clientUserId);
2020-07-26 10:03:38 +02:00
ProfileActivity settings = new ProfileActivity(args);
2015-01-02 23:15:07 +01:00
actionBarLayout.addFragmentToStack(settings);
settings.restoreSelfArgs(savedInstanceState);
break;
}
2015-01-02 23:15:07 +01:00
case "group":
if (args != null) {
GroupCreateFinalActivity group = new GroupCreateFinalActivity(args);
if (actionBarLayout.addFragmentToStack(group)) {
group.restoreSelfArgs(savedInstanceState);
}
}
2015-01-02 23:15:07 +01:00
break;
2015-09-24 22:52:02 +02:00
case "channel":
if (args != null) {
ChannelCreateActivity channel = new ChannelCreateActivity(args);
if (actionBarLayout.addFragmentToStack(channel)) {
channel.restoreSelfArgs(savedInstanceState);
}
}
break;
2015-01-02 23:15:07 +01:00
case "chat_profile":
if (args != null) {
ProfileActivity profile = new ProfileActivity(args);
if (actionBarLayout.addFragmentToStack(profile)) {
profile.restoreSelfArgs(savedInstanceState);
}
}
2015-01-02 23:15:07 +01:00
break;
case "wallpapers": {
2019-01-23 18:03:33 +01:00
WallpapersListActivity settings = new WallpapersListActivity(WallpapersListActivity.TYPE_ALL);
2015-01-02 23:15:07 +01:00
actionBarLayout.addFragmentToStack(settings);
settings.restoreSelfArgs(savedInstanceState);
break;
}
}
}
}
} catch (Exception e) {
2017-03-31 01:58:05 +02:00
FileLog.e(e);
}
2014-11-18 13:37:11 +01:00
} else {
2023-03-10 21:20:59 +01:00
BaseFragment fragment = actionBarLayout.getFragmentStack().size() > 0 ? actionBarLayout.getFragmentStack().get(0) : layersActionBarLayout.getFragmentStack().get(0);
2017-03-31 01:58:05 +02:00
if (fragment instanceof DialogsActivity) {
((DialogsActivity) fragment).setSideMenu(sideMenu);
}
2015-05-21 23:27:27 +02:00
boolean allowOpen = true;
2014-11-18 13:37:11 +01:00
if (AndroidUtilities.isTablet()) {
2022-11-05 13:34:47 +01:00
allowOpen = actionBarLayout.getFragmentStack().size() <= 1 && layersActionBarLayout.getFragmentStack().isEmpty();
if (layersActionBarLayout.getFragmentStack().size() == 1 && (layersActionBarLayout.getFragmentStack().get(0) instanceof LoginActivity || layersActionBarLayout.getFragmentStack().get(0) instanceof IntroActivity)) {
2015-05-21 23:27:27 +02:00
allowOpen = false;
}
2014-11-18 13:37:11 +01:00
}
2022-11-05 13:34:47 +01:00
if (actionBarLayout.getFragmentStack().size() == 1 && (actionBarLayout.getFragmentStack().get(0) instanceof LoginActivity || actionBarLayout.getFragmentStack().get(0) instanceof IntroActivity)) {
allowOpen = false;
}
drawerLayoutContainer.setAllowOpenDrawer(allowOpen, false);
2013-10-25 17:19:00 +02:00
}
2016-10-11 13:57:01 +02:00
checkLayout();
2019-12-31 14:08:08 +01:00
checkSystemBarColors();
handleIntent(getIntent(), false, savedInstanceState != null, false);
2016-10-11 13:57:01 +02:00
try {
String os1 = Build.DISPLAY;
String os2 = Build.USER;
if (os1 != null) {
os1 = os1.toLowerCase();
} else {
os1 = "";
}
if (os2 != null) {
os2 = os1.toLowerCase();
} else {
os2 = "";
}
2019-08-22 01:53:26 +02:00
if (BuildVars.LOGS_ENABLED) {
2019-07-18 15:01:39 +02:00
FileLog.d("OS name " + os1 + " " + os2);
}
2020-08-22 01:59:49 +02:00
if ((os1.contains("flyme") || os2.contains("flyme")) && Build.VERSION.SDK_INT <= 24) {
2016-10-11 13:57:01 +02:00
AndroidUtilities.incorrectDisplaySizeFix = true;
final View view = getWindow().getDecorView().getRootView();
2018-08-27 10:33:11 +02:00
view.getViewTreeObserver().addOnGlobalLayoutListener(onGlobalLayoutListener = () -> {
int height = view.getMeasuredHeight();
2019-08-22 01:53:26 +02:00
FileLog.d("height = " + height + " displayHeight = " + AndroidUtilities.displaySize.y);
2018-08-27 10:33:11 +02:00
if (Build.VERSION.SDK_INT >= 21) {
height -= AndroidUtilities.statusBarHeight;
}
if (height > AndroidUtilities.dp(100) && height < AndroidUtilities.displaySize.y && height + AndroidUtilities.dp(100) > AndroidUtilities.displaySize.y) {
AndroidUtilities.displaySize.y = height;
if (BuildVars.LOGS_ENABLED) {
FileLog.d("fix display size y to " + AndroidUtilities.displaySize.y);
2016-10-11 13:57:01 +02:00
}
}
});
}
} catch (Exception e) {
2017-03-31 01:58:05 +02:00
FileLog.e(e);
2016-10-11 13:57:01 +02:00
}
2017-07-08 18:32:04 +02:00
MediaController.getInstance().setBaseActivity(this, true);
2022-09-21 16:20:30 +02:00
ApplicationLoader.startAppCenter(this);
2021-06-25 02:43:10 +02:00
updateAppUpdateViews(false);
2022-03-11 17:49:54 +01:00
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
FingerprintController.checkKeyReady();
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
2023-02-03 20:11:36 +01:00
if (am.isBackgroundRestricted() && System.currentTimeMillis() - SharedConfig.BackgroundActivityPrefs.getLastCheckedBackgroundActivity() >= 86400000L && SharedConfig.BackgroundActivityPrefs.getDismissedCount() < 3) {
2022-03-11 17:49:54 +01:00
AlertsCreator.createBackgroundActivityDialog(this).show();
SharedConfig.BackgroundActivityPrefs.setLastCheckedBackgroundActivity(System.currentTimeMillis());
}
}
2022-12-30 13:32:20 +01:00
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
getWindow().getDecorView().addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
@Override
public void onViewAttachedToWindow(View v) {
getWindowManager().addCrossWindowBlurEnabledListener(blurListener);
}
@Override
public void onViewDetachedFromWindow(View v) {
getWindowManager().removeCrossWindowBlurEnabledListener(blurListener);
}
});
}
2023-02-03 20:11:36 +01:00
BackupAgent.requestBackup(this);
RestrictedLanguagesSelectActivity.checkRestrictedLanguages(false);
2022-03-11 17:49:54 +01:00
}
2022-11-05 13:34:47 +01:00
@Override
public void onThemeProgress(float progress) {
if (ArticleViewer.hasInstance() && ArticleViewer.getInstance().isVisible()) {
ArticleViewer.getInstance().updateThemeColors(progress);
}
drawerLayoutContainer.setBehindKeyboardColor(Theme.getColor(Theme.key_windowBackgroundWhite));
if (PhotoViewer.hasInstance()) {
PhotoViewer.getInstance().updateColors();
}
}
2022-09-16 20:48:21 +02:00
private void setupActionBarLayout() {
2022-11-05 13:34:47 +01:00
int i = drawerLayoutContainer.indexOfChild(launchLayout) != -1 ? drawerLayoutContainer.indexOfChild(launchLayout) : drawerLayoutContainer.indexOfChild(actionBarLayout.getView());
2022-09-16 20:48:21 +02:00
if (i != -1) {
drawerLayoutContainer.removeViewAt(i);
}
if (AndroidUtilities.isTablet()) {
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
launchLayout = new RelativeLayout(this) {
2022-11-05 13:34:47 +01:00
private Path path = new Path();
2022-09-16 20:48:21 +02:00
private boolean inLayout;
@Override
public void requestLayout() {
if (inLayout) {
return;
}
super.requestLayout();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
inLayout = true;
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = MeasureSpec.getSize(heightMeasureSpec);
setMeasuredDimension(width, height);
if (!AndroidUtilities.isInMultiwindow && (!AndroidUtilities.isSmallTablet() || getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)) {
tabletFullSize = false;
int leftWidth = width / 100 * 35;
if (leftWidth < AndroidUtilities.dp(320)) {
leftWidth = AndroidUtilities.dp(320);
}
2022-11-05 13:34:47 +01:00
actionBarLayout.getView().measure(MeasureSpec.makeMeasureSpec(leftWidth, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY));
2022-09-16 20:48:21 +02:00
shadowTabletSide.measure(MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(1), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY));
2022-11-05 13:34:47 +01:00
rightActionBarLayout.getView().measure(MeasureSpec.makeMeasureSpec(width - leftWidth, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY));
2022-09-16 20:48:21 +02:00
} else {
tabletFullSize = true;
2022-11-05 13:34:47 +01:00
actionBarLayout.getView().measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY));
2022-09-16 20:48:21 +02:00
}
backgroundTablet.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY));
shadowTablet.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY));
2022-11-05 13:34:47 +01:00
layersActionBarLayout.getView().measure(MeasureSpec.makeMeasureSpec(Math.min(AndroidUtilities.dp(530), width - AndroidUtilities.dp(16)), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(height - AndroidUtilities.statusBarHeight - AndroidUtilities.dp(16), MeasureSpec.EXACTLY));
2022-09-16 20:48:21 +02:00
inLayout = false;
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
int width = r - l;
int height = b - t;
if (!AndroidUtilities.isInMultiwindow && (!AndroidUtilities.isSmallTablet() || getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)) {
int leftWidth = width / 100 * 35;
if (leftWidth < AndroidUtilities.dp(320)) {
leftWidth = AndroidUtilities.dp(320);
}
shadowTabletSide.layout(leftWidth, 0, leftWidth + shadowTabletSide.getMeasuredWidth(), shadowTabletSide.getMeasuredHeight());
2022-11-05 13:34:47 +01:00
actionBarLayout.getView().layout(0, 0, actionBarLayout.getView().getMeasuredWidth(), actionBarLayout.getView().getMeasuredHeight());
rightActionBarLayout.getView().layout(leftWidth, 0, leftWidth + rightActionBarLayout.getView().getMeasuredWidth(), rightActionBarLayout.getView().getMeasuredHeight());
2022-09-16 20:48:21 +02:00
} else {
2022-11-05 13:34:47 +01:00
actionBarLayout.getView().layout(0, 0, actionBarLayout.getView().getMeasuredWidth(), actionBarLayout.getView().getMeasuredHeight());
2022-09-16 20:48:21 +02:00
}
2022-11-05 13:34:47 +01:00
int x = (width - layersActionBarLayout.getView().getMeasuredWidth()) / 2;
int y = (height - layersActionBarLayout.getView().getMeasuredHeight() + AndroidUtilities.statusBarHeight) / 2;
layersActionBarLayout.getView().layout(x, y, x + layersActionBarLayout.getView().getMeasuredWidth(), y + layersActionBarLayout.getView().getMeasuredHeight());
2022-09-16 20:48:21 +02:00
backgroundTablet.layout(0, 0, backgroundTablet.getMeasuredWidth(), backgroundTablet.getMeasuredHeight());
shadowTablet.layout(0, 0, shadowTablet.getMeasuredWidth(), shadowTablet.getMeasuredHeight());
}
};
if (i != -1) {
drawerLayoutContainer.addView(launchLayout, i, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
} else {
drawerLayoutContainer.addView(launchLayout, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
}
backgroundTablet = new SizeNotifierFrameLayout(this) {
@Override
protected boolean isActionBarVisible() {
return false;
}
};
backgroundTablet.setOccupyStatusBar(false);
backgroundTablet.setBackgroundImage(Theme.getCachedWallpaper(), Theme.isWallpaperMotion());
launchLayout.addView(backgroundTablet, LayoutHelper.createRelative(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
2022-11-05 13:34:47 +01:00
ViewGroup parent = (ViewGroup) actionBarLayout.getView().getParent();
2022-09-16 20:48:21 +02:00
if (parent != null) {
2022-11-05 13:34:47 +01:00
parent.removeView(actionBarLayout.getView());
2022-09-16 20:48:21 +02:00
}
2022-11-05 13:34:47 +01:00
launchLayout.addView(actionBarLayout.getView());
2022-09-16 20:48:21 +02:00
2022-11-05 13:34:47 +01:00
rightActionBarLayout = INavigationLayout.newLayout(this);
rightActionBarLayout.setFragmentStack(rightFragmentsStack);
2022-09-16 20:48:21 +02:00
rightActionBarLayout.setDelegate(this);
2022-11-05 13:34:47 +01:00
launchLayout.addView(rightActionBarLayout.getView());
2022-09-16 20:48:21 +02:00
shadowTabletSide = new FrameLayout(this);
shadowTabletSide.setBackgroundColor(0x40295274);
launchLayout.addView(shadowTabletSide);
shadowTablet = new FrameLayout(this);
shadowTablet.setVisibility(layerFragmentsStack.isEmpty() ? View.GONE : View.VISIBLE);
shadowTablet.setBackgroundColor(0x7f000000);
launchLayout.addView(shadowTablet);
shadowTablet.setOnTouchListener((v, event) -> {
2022-11-05 13:34:47 +01:00
if (!actionBarLayout.getFragmentStack().isEmpty() && event.getAction() == MotionEvent.ACTION_UP) {
2022-09-16 20:48:21 +02:00
float x = event.getX();
float y = event.getY();
int[] location = new int[2];
2022-11-05 13:34:47 +01:00
layersActionBarLayout.getView().getLocationOnScreen(location);
2022-09-16 20:48:21 +02:00
int viewX = location[0];
int viewY = location[1];
2022-11-05 13:34:47 +01:00
if (layersActionBarLayout.checkTransitionAnimation() || x > viewX && x < viewX + layersActionBarLayout.getView().getWidth() && y > viewY && y < viewY + layersActionBarLayout.getView().getHeight()) {
2022-09-16 20:48:21 +02:00
return false;
} else {
2022-11-05 13:34:47 +01:00
if (!layersActionBarLayout.getFragmentStack().isEmpty()) {
for (int a = 0; a < layersActionBarLayout.getFragmentStack().size() - 1; a++) {
layersActionBarLayout.removeFragmentFromStack(layersActionBarLayout.getFragmentStack().get(0));
2022-09-16 20:48:21 +02:00
a--;
}
layersActionBarLayout.closeLastFragment(true);
}
return true;
}
}
return false;
});
shadowTablet.setOnClickListener(v -> {
});
2022-11-05 13:34:47 +01:00
layersActionBarLayout = INavigationLayout.newLayout(this);
2022-09-16 20:48:21 +02:00
layersActionBarLayout.setRemoveActionBarExtraHeight(true);
layersActionBarLayout.setBackgroundView(shadowTablet);
layersActionBarLayout.setUseAlphaAnimations(true);
2022-11-05 13:34:47 +01:00
layersActionBarLayout.setFragmentStack(layerFragmentsStack);
2022-09-16 20:48:21 +02:00
layersActionBarLayout.setDelegate(this);
layersActionBarLayout.setDrawerLayoutContainer(drawerLayoutContainer);
2022-11-05 13:34:47 +01:00
View layersView = layersActionBarLayout.getView();
layersView.setBackgroundResource(R.drawable.popup_fixed_alert3);
layersView.setVisibility(layerFragmentsStack.isEmpty() ? View.GONE : View.VISIBLE);
launchLayout.addView(layersView);
2022-09-16 20:48:21 +02:00
} else {
2022-11-05 13:34:47 +01:00
ViewGroup parent = (ViewGroup) actionBarLayout.getView().getParent();
2022-09-16 20:48:21 +02:00
if (parent != null) {
2022-11-05 13:34:47 +01:00
parent.removeView(actionBarLayout.getView());
2022-09-16 20:48:21 +02:00
}
2022-11-05 13:34:47 +01:00
actionBarLayout.setFragmentStack(mainFragmentsStack);
2022-09-16 20:48:21 +02:00
if (i != -1) {
2022-11-05 13:34:47 +01:00
drawerLayoutContainer.addView(actionBarLayout.getView(), i, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
2022-09-16 20:48:21 +02:00
} else {
2022-11-05 13:34:47 +01:00
drawerLayoutContainer.addView(actionBarLayout.getView(), new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
2022-09-16 20:48:21 +02:00
}
}
2022-11-05 13:34:47 +01:00
FloatingDebugController.setActive(this, SharedConfig.isFloatingDebugActive, false);
2022-09-16 20:48:21 +02:00
}
2022-06-21 04:51:00 +02:00
public void addOnUserLeaveHintListener(Runnable callback) {
onUserLeaveHintListeners.add(callback);
}
public void removeOnUserLeaveHintListener(Runnable callback) {
onUserLeaveHintListeners.remove(callback);
}
2022-03-11 17:49:54 +01:00
private BaseFragment getClientNotActivatedFragment() {
2023-02-27 06:38:13 +01:00
if (LoginActivity.loadCurrentState(false, currentAccount).getInt("currentViewNum", 0) != 0) {
2022-03-11 17:49:54 +01:00
return new LoginActivity();
}
return new IntroActivity();
}
2022-09-16 20:48:21 +02:00
public void showSelectStatusDialog() {
2022-09-21 16:20:30 +02:00
if (selectAnimatedEmojiDialog != null || SharedConfig.appLocked) {
2022-09-16 20:48:21 +02:00
return;
}
BaseFragment fragment = actionBarLayout.getLastFragment();
if (fragment == null) {
return;
}
final View profileCell = sideMenu.getChildAt(0);
final SelectAnimatedEmojiDialog.SelectAnimatedEmojiDialogWindow[] popup = new SelectAnimatedEmojiDialog.SelectAnimatedEmojiDialogWindow[1];
TLRPC.User user = MessagesController.getInstance(UserConfig.selectedAccount).getUser(UserConfig.getInstance(UserConfig.selectedAccount).getClientUserId());
int xoff = 0, yoff = 0;
boolean hasEmoji = false;
AnimatedEmojiDrawable.SwapAnimatedEmojiDrawable scrimDrawable = null;
View scrimDrawableParent = null;
if (profileCell instanceof DrawerProfileCell) {
scrimDrawable = ((DrawerProfileCell) profileCell).getEmojiStatusDrawable();
if (scrimDrawable != null) {
scrimDrawable.play();
}
scrimDrawableParent = ((DrawerProfileCell) profileCell).getEmojiStatusDrawableParent();
hasEmoji = scrimDrawable != null && scrimDrawable.getDrawable() instanceof AnimatedEmojiDrawable;
((DrawerProfileCell) profileCell).getEmojiStatusLocation(AndroidUtilities.rectTmp2);
yoff = -(profileCell.getHeight() - AndroidUtilities.rectTmp2.centerY()) - AndroidUtilities.dp(16);
xoff = AndroidUtilities.rectTmp2.centerX();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
2022-11-05 13:34:47 +01:00
getWindow() != null &&
getWindow().getDecorView() != null &&
getWindow().getDecorView().getRootWindowInsets() != null
2022-09-16 20:48:21 +02:00
) {
xoff -= getWindow().getDecorView().getRootWindowInsets().getStableInsetLeft();
}
}
SelectAnimatedEmojiDialog popupLayout = new SelectAnimatedEmojiDialog(fragment, this, true, xoff, SelectAnimatedEmojiDialog.TYPE_EMOJI_STATUS, null) {
2022-11-05 13:34:47 +01:00
@Override
public void onSettings() {
if (drawerLayoutContainer != null) {
drawerLayoutContainer.closeDrawer();
}
}
2022-09-16 20:48:21 +02:00
@Override
protected void onEmojiSelected(View emojiView, Long documentId, TLRPC.Document document, Integer until) {
2023-02-03 20:11:36 +01:00
TLRPC.EmojiStatus emojiStatus;
2022-09-16 20:48:21 +02:00
if (documentId == null) {
2023-02-03 20:11:36 +01:00
emojiStatus = new TLRPC.TL_emojiStatusEmpty();
2022-09-16 20:48:21 +02:00
} else if (until != null) {
2023-02-03 20:11:36 +01:00
emojiStatus = new TLRPC.TL_emojiStatusUntil();
((TLRPC.TL_emojiStatusUntil) emojiStatus).document_id = documentId;
((TLRPC.TL_emojiStatusUntil) emojiStatus).until = until;
2022-09-16 20:48:21 +02:00
} else {
2023-02-03 20:11:36 +01:00
emojiStatus = new TLRPC.TL_emojiStatus();
((TLRPC.TL_emojiStatus) emojiStatus).document_id = documentId;
2022-09-16 20:48:21 +02:00
}
2023-02-03 20:11:36 +01:00
MessagesController.getInstance(currentAccount).updateEmojiStatus(emojiStatus);
TLRPC.User user = UserConfig.getInstance(currentAccount).getCurrentUser();
2022-09-16 20:48:21 +02:00
if (user != null) {
for (int i = 0; i < sideMenu.getChildCount(); ++i) {
View child = sideMenu.getChildAt(i);
if (child instanceof DrawerUserCell) {
((DrawerUserCell) child).setAccount(((DrawerUserCell) child).getAccountNumber());
} else if (child instanceof DrawerProfileCell) {
if (documentId != null) {
((DrawerProfileCell) child).animateStateChange(documentId);
}
((DrawerProfileCell) child).setUser(user, drawerLayoutAdapter.isAccountsShown());
} else if (child instanceof DrawerActionCell && drawerLayoutAdapter.getId(sideMenu.getChildAdapterPosition(child)) == 15) {
boolean hasStatus =
user.emoji_status instanceof TLRPC.TL_emojiStatus ||
user.emoji_status instanceof TLRPC.TL_emojiStatusUntil && ((TLRPC.TL_emojiStatusUntil) user.emoji_status).until > (int) (System.currentTimeMillis() / 1000);
((DrawerActionCell) child).updateText(
hasStatus ?
LocaleController.getString("ChangeEmojiStatus", R.string.ChangeEmojiStatus) :
LocaleController.getString("SetEmojiStatus", R.string.SetEmojiStatus)
);
((DrawerActionCell) child).updateIcon(
hasStatus ?
R.raw.emoji_status_change_to_set :
R.raw.emoji_status_set_to_change
);
}
}
}
if (popup[0] != null) {
selectAnimatedEmojiDialog = null;
popup[0].dismiss();
}
}
};
if (user != null && user.emoji_status instanceof TLRPC.TL_emojiStatusUntil && ((TLRPC.TL_emojiStatusUntil) user.emoji_status).until > (int) (System.currentTimeMillis() / 1000)) {
popupLayout.setExpireDateHint(((TLRPC.TL_emojiStatusUntil) user.emoji_status).until);
}
popupLayout.setSelected(scrimDrawable != null && scrimDrawable.getDrawable() instanceof AnimatedEmojiDrawable ? ((AnimatedEmojiDrawable) scrimDrawable.getDrawable()).getDocumentId() : null);
popupLayout.setSaveState(2);
popupLayout.setScrimDrawable(scrimDrawable, scrimDrawableParent);
popup[0] = selectAnimatedEmojiDialog = new SelectAnimatedEmojiDialog.SelectAnimatedEmojiDialogWindow(popupLayout, LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT) {
@Override
public void dismiss() {
super.dismiss();
selectAnimatedEmojiDialog = null;
}
};
popup[0].showAsDropDown(sideMenu.getChildAt(0), 0, yoff, Gravity.TOP);
popup[0].dimBehind();
}
2022-03-11 17:49:54 +01:00
public FireworksOverlay getFireworksOverlay() {
return fireworksOverlay;
2016-10-11 13:57:01 +02:00
}
2020-07-26 10:03:38 +02:00
private void openSettings(boolean expanded) {
Bundle args = new Bundle();
2021-09-20 07:54:41 +02:00
args.putLong("user_id", UserConfig.getInstance(currentAccount).clientUserId);
2020-07-26 10:03:38 +02:00
if (expanded) {
args.putBoolean("expandPhoto", true);
}
ProfileActivity fragment = new ProfileActivity(args);
presentFragment(fragment);
drawerLayoutContainer.closeDrawer(false);
}
2019-12-31 14:08:08 +01:00
private void checkSystemBarColors() {
2022-06-21 04:51:00 +02:00
checkSystemBarColors(false, true, !isNavigationBarColorFrozen);
}
private void checkSystemBarColors(boolean useCurrentFragment) {
checkSystemBarColors(useCurrentFragment, true, !isNavigationBarColorFrozen);
2021-09-20 07:54:41 +02:00
}
private void checkSystemBarColors(boolean checkStatusBar, boolean checkNavigationBar) {
2022-06-21 04:51:00 +02:00
checkSystemBarColors(false, checkStatusBar, checkNavigationBar);
}
private void checkSystemBarColors(boolean useCurrentFragment, boolean checkStatusBar, boolean checkNavigationBar) {
2022-03-11 17:49:54 +01:00
BaseFragment currentFragment = !mainFragmentsStack.isEmpty() ? mainFragmentsStack.get(mainFragmentsStack.size() - 1) : null;
if (currentFragment != null && (currentFragment.isRemovingFromStack() || currentFragment.isInPreviewMode())) {
currentFragment = mainFragmentsStack.size() > 1 ? mainFragmentsStack.get(mainFragmentsStack.size() - 2) : null;
}
boolean forceLightStatusBar = currentFragment != null && currentFragment.hasForceLightStatusBar();
2019-12-31 14:08:08 +01:00
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
2021-09-20 07:54:41 +02:00
if (checkStatusBar) {
2022-03-11 17:49:54 +01:00
boolean enable;
if (currentFragment != null) {
enable = currentFragment.isLightStatusBar();
} else {
int color = Theme.getColor(Theme.key_actionBarDefault, null, true);
enable = ColorUtils.calculateLuminance(color) > 0.7f;
}
AndroidUtilities.setLightStatusBar(getWindow(), enable, forceLightStatusBar);
2021-09-20 07:54:41 +02:00
}
2022-06-21 04:51:00 +02:00
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && checkNavigationBar && (!useCurrentFragment || currentFragment == null || !currentFragment.isInPreviewMode())) {
2019-12-31 14:08:08 +01:00
final Window window = getWindow();
2022-06-21 04:51:00 +02:00
final int color = currentFragment != null && useCurrentFragment ? currentFragment.getNavigationBarColor() : Theme.getColor(Theme.key_windowBackgroundGray, null, true);
// Theme.ResourcesProvider resourcesProvider = currentFragment != null ? currentFragment.getResourceProvider() : null;
// if (resourcesProvider != null) {
// color = resourcesProvider.getColor(Theme.key_windowBackgroundGray);
// }
// if (color == null) {
// color = Theme.getColor(Theme.key_windowBackgroundGray, null, true);
// }
2019-12-31 14:08:08 +01:00
if (window.getNavigationBarColor() != color) {
window.setNavigationBarColor(color);
final float brightness = AndroidUtilities.computePerceivedBrightness(color);
AndroidUtilities.setLightNavigationBar(getWindow(), brightness >= 0.721f);
}
}
}
2022-03-11 17:49:54 +01:00
if ((SharedConfig.noStatusBar || forceLightStatusBar) && Build.VERSION.SDK_INT >= 21 && checkStatusBar) {
2020-12-26 06:18:43 +01:00
getWindow().setStatusBarColor(0);
}
2019-12-31 14:08:08 +01:00
}
2022-11-05 13:34:47 +01:00
public FrameLayout getMainContainerFrameLayout() {
return frameLayout;
}
2018-07-30 04:07:02 +02:00
public void switchToAccount(int account, boolean removeAll) {
2022-03-11 17:49:54 +01:00
switchToAccount(account, removeAll, obj -> new DialogsActivity(null));
}
public void switchToAccount(int account, boolean removeAll, GenericProvider<Void, DialogsActivity> dialogsActivityProvider) {
2021-04-09 15:17:32 +02:00
if (account == UserConfig.selectedAccount || !UserConfig.isValidAccount(account)) {
2018-07-30 04:07:02 +02:00
return;
}
ConnectionsManager.getInstance(currentAccount).setAppPaused(true, false);
UserConfig.selectedAccount = account;
UserConfig.getInstance(0).saveConfig(false);
checkCurrentAccount();
if (AndroidUtilities.isTablet()) {
layersActionBarLayout.removeAllFragments();
rightActionBarLayout.removeAllFragments();
if (!tabletFullSize) {
shadowTabletSide.setVisibility(View.VISIBLE);
2022-11-05 13:34:47 +01:00
if (rightActionBarLayout.getFragmentStack().isEmpty()) {
2018-07-30 04:07:02 +02:00
backgroundTablet.setVisibility(View.VISIBLE);
}
2022-11-05 13:34:47 +01:00
rightActionBarLayout.getView().setVisibility(View.GONE);
2018-07-30 04:07:02 +02:00
}
2022-11-05 13:34:47 +01:00
layersActionBarLayout.getView().setVisibility(View.GONE);
2018-07-30 04:07:02 +02:00
}
if (removeAll) {
actionBarLayout.removeAllFragments();
} else {
actionBarLayout.removeFragmentFromStack(0);
}
2022-03-11 17:49:54 +01:00
DialogsActivity dialogsActivity = dialogsActivityProvider.provide(null);
2018-07-30 04:07:02 +02:00
dialogsActivity.setSideMenu(sideMenu);
actionBarLayout.addFragmentToStack(dialogsActivity, 0);
drawerLayoutContainer.setAllowOpenDrawer(true, false);
2022-11-05 13:34:47 +01:00
actionBarLayout.rebuildFragments(INavigationLayout.REBUILD_FLAG_REBUILD_LAST);
2018-07-30 04:07:02 +02:00
if (AndroidUtilities.isTablet()) {
2022-11-05 13:34:47 +01:00
layersActionBarLayout.rebuildFragments(INavigationLayout.REBUILD_FLAG_REBUILD_LAST);
rightActionBarLayout.rebuildFragments(INavigationLayout.REBUILD_FLAG_REBUILD_LAST);
2018-07-30 04:07:02 +02:00
}
if (!ApplicationLoader.mainInterfacePaused) {
ConnectionsManager.getInstance(currentAccount).setAppPaused(false, false);
}
if (UserConfig.getInstance(account).unacceptedTermsOfService != null) {
showTosActivity(account, UserConfig.getInstance(account).unacceptedTermsOfService);
}
2020-03-30 14:00:09 +02:00
updateCurrentConnectionState(currentAccount);
2018-07-30 04:07:02 +02:00
}
private void switchToAvailableAccountOrLogout() {
int account = -1;
for (int a = 0; a < UserConfig.MAX_ACCOUNT_COUNT; a++) {
if (UserConfig.getInstance(a).isClientActivated()) {
account = a;
break;
}
}
if (termsOfServiceView != null) {
termsOfServiceView.setVisibility(View.GONE);
}
if (account != -1) {
switchToAccount(account, true);
} else {
if (drawerLayoutAdapter != null) {
drawerLayoutAdapter.notifyDataSetChanged();
}
2023-02-03 20:11:36 +01:00
RestrictedLanguagesSelectActivity.checkRestrictedLanguages(true);
2021-03-19 11:25:58 +01:00
clearFragments();
2022-03-11 17:49:54 +01:00
actionBarLayout.rebuildLogout();
if (AndroidUtilities.isTablet()) {
layersActionBarLayout.rebuildLogout();
rightActionBarLayout.rebuildLogout();
}
presentFragment(new IntroActivity().setOnLogout());
2018-07-30 04:07:02 +02:00
}
}
2021-03-19 11:25:58 +01:00
public static void clearFragments() {
for (BaseFragment fragment : mainFragmentsStack) {
fragment.onFragmentDestroy();
}
mainFragmentsStack.clear();
if (AndroidUtilities.isTablet()) {
for (BaseFragment fragment : layerFragmentsStack) {
fragment.onFragmentDestroy();
}
layerFragmentsStack.clear();
for (BaseFragment fragment : rightFragmentsStack) {
fragment.onFragmentDestroy();
}
rightFragmentsStack.clear();
}
}
2018-07-30 04:07:02 +02:00
public int getMainFragmentsCount() {
return mainFragmentsStack.size();
}
private void checkCurrentAccount() {
if (currentAccount != UserConfig.selectedAccount) {
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.appDidLogout);
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.mainUserInfoChanged);
2019-01-23 18:03:33 +01:00
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.didUpdateConnectionState);
2018-07-30 04:07:02 +02:00
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.needShowAlert);
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.wasUnableToFindCurrentLocation);
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.openArticle);
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.hasNewContactsToImport);
2019-07-18 15:01:39 +02:00
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.needShowPlayServicesAlert);
2021-06-25 02:43:10 +02:00
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.fileLoaded);
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.fileLoadProgressChanged);
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.fileLoadFailed);
2021-01-28 15:15:51 +01:00
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.historyImportProgressChanged);
2021-03-19 11:25:58 +01:00
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.groupCallUpdated);
2021-06-25 02:43:10 +02:00
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.stickersImportComplete);
2021-07-15 16:24:57 +02:00
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.newSuggestionsAvailable);
2022-09-16 20:48:21 +02:00
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.currentUserPremiumStatusChanged);
2022-11-05 13:34:47 +01:00
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.chatSwithcedToForum);
2018-07-30 04:07:02 +02:00
}
currentAccount = UserConfig.selectedAccount;
NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.appDidLogout);
NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.mainUserInfoChanged);
2019-01-23 18:03:33 +01:00
NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.didUpdateConnectionState);
2018-07-30 04:07:02 +02:00
NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.needShowAlert);
NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.wasUnableToFindCurrentLocation);
NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.openArticle);
NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.hasNewContactsToImport);
2019-07-18 15:01:39 +02:00
NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.needShowPlayServicesAlert);
2021-06-25 02:43:10 +02:00
NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.fileLoaded);
NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.fileLoadProgressChanged);
NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.fileLoadFailed);
2021-01-28 15:15:51 +01:00
NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.historyImportProgressChanged);
2021-03-19 11:25:58 +01:00
NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.groupCallUpdated);
2021-06-25 02:43:10 +02:00
NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.stickersImportComplete);
2021-07-15 16:24:57 +02:00
NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.newSuggestionsAvailable);
2022-06-21 04:51:00 +02:00
NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.currentUserShowLimitReachedDialog);
2022-09-16 20:48:21 +02:00
NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.currentUserPremiumStatusChanged);
2022-11-05 13:34:47 +01:00
NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.chatSwithcedToForum);
2018-07-30 04:07:02 +02:00
}
2016-10-11 13:57:01 +02:00
private void checkLayout() {
2022-11-05 13:34:47 +01:00
if (!AndroidUtilities.isTablet() || rightActionBarLayout == null || AndroidUtilities.getWasTablet() != null && AndroidUtilities.getWasTablet() != AndroidUtilities.isTabletForce()) {
2016-10-11 13:57:01 +02:00
return;
}
2017-03-31 01:58:05 +02:00
2016-10-11 13:57:01 +02:00
if (!AndroidUtilities.isInMultiwindow && (!AndroidUtilities.isSmallTablet() || getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)) {
tabletFullSize = false;
2023-03-10 21:20:59 +01:00
List<BaseFragment> fragmentStack = actionBarLayout.getFragmentStack();
if (fragmentStack.size() >= 2) {
for (int a = 1; a < fragmentStack.size(); a++) {
BaseFragment chatFragment = fragmentStack.get(a);
2017-03-31 01:58:05 +02:00
if (chatFragment instanceof ChatActivity) {
((ChatActivity) chatFragment).setIgnoreAttachOnPause(true);
}
2016-10-11 13:57:01 +02:00
chatFragment.onPause();
2023-03-10 21:20:59 +01:00
chatFragment.onFragmentDestroy();
chatFragment.setParentLayout(null);
fragmentStack.remove(chatFragment);
2022-11-05 13:34:47 +01:00
rightActionBarLayout.addFragmentToStack(chatFragment);
2016-10-11 13:57:01 +02:00
a--;
}
2021-07-15 16:24:57 +02:00
if (passcodeView == null || passcodeView.getVisibility() != View.VISIBLE) {
2022-11-05 13:34:47 +01:00
actionBarLayout.rebuildFragments(INavigationLayout.REBUILD_FLAG_REBUILD_LAST);
rightActionBarLayout.rebuildFragments(INavigationLayout.REBUILD_FLAG_REBUILD_LAST);
2015-11-26 22:04:02 +01:00
}
}
2022-11-05 13:34:47 +01:00
rightActionBarLayout.getView().setVisibility(rightActionBarLayout.getFragmentStack().isEmpty() ? View.GONE : View.VISIBLE);
backgroundTablet.setVisibility(rightActionBarLayout.getFragmentStack().isEmpty() ? View.VISIBLE : View.GONE);
shadowTabletSide.setVisibility(!actionBarLayout.getFragmentStack().isEmpty() ? View.VISIBLE : View.GONE);
2016-10-11 13:57:01 +02:00
} else {
tabletFullSize = true;
2023-03-10 21:20:59 +01:00
List<BaseFragment> fragmentStack = rightActionBarLayout.getFragmentStack();
if (!fragmentStack.isEmpty()) {
for (int a = 0; a < fragmentStack.size(); a++) {
BaseFragment chatFragment = fragmentStack.get(a);
2017-03-31 01:58:05 +02:00
if (chatFragment instanceof ChatActivity) {
((ChatActivity) chatFragment).setIgnoreAttachOnPause(true);
}
2016-10-11 13:57:01 +02:00
chatFragment.onPause();
2023-03-10 21:20:59 +01:00
chatFragment.onFragmentDestroy();
chatFragment.setParentLayout(null);
fragmentStack.remove(chatFragment);
2022-11-05 13:34:47 +01:00
actionBarLayout.addFragmentToStack(chatFragment);
2016-10-11 13:57:01 +02:00
a--;
}
2021-07-15 16:24:57 +02:00
if (passcodeView == null || passcodeView.getVisibility() != View.VISIBLE) {
2022-11-05 13:34:47 +01:00
actionBarLayout.rebuildFragments(INavigationLayout.REBUILD_FLAG_REBUILD_LAST);
2016-10-11 13:57:01 +02:00
}
}
shadowTabletSide.setVisibility(View.GONE);
2022-11-05 13:34:47 +01:00
rightActionBarLayout.getView().setVisibility(View.GONE);
backgroundTablet.setVisibility(!actionBarLayout.getFragmentStack().isEmpty() ? View.GONE : View.VISIBLE);
2016-10-11 13:57:01 +02:00
}
2013-10-25 17:19:00 +02:00
}
2019-08-22 01:53:26 +02:00
private void showUpdateActivity(int account, TLRPC.TL_help_appUpdate update, boolean check) {
2018-07-30 04:07:02 +02:00
if (blockingUpdateView == null) {
blockingUpdateView = new BlockingUpdateView(LaunchActivity.this) {
@Override
public void setVisibility(int visibility) {
super.setVisibility(visibility);
if (visibility == View.GONE) {
drawerLayoutContainer.setAllowOpenDrawer(true, false);
}
}
};
drawerLayoutContainer.addView(blockingUpdateView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
}
2019-08-22 01:53:26 +02:00
blockingUpdateView.show(account, update, check);
2018-07-30 04:07:02 +02:00
drawerLayoutContainer.setAllowOpenDrawer(false, false);
}
private void showTosActivity(int account, TLRPC.TL_help_termsOfService tos) {
if (termsOfServiceView == null) {
termsOfServiceView = new TermsOfServiceView(this);
2019-12-31 14:08:08 +01:00
termsOfServiceView.setAlpha(0f);
2018-07-30 04:07:02 +02:00
drawerLayoutContainer.addView(termsOfServiceView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
termsOfServiceView.setDelegate(new TermsOfServiceView.TermsOfServiceViewDelegate() {
@Override
public void onAcceptTerms(int account) {
UserConfig.getInstance(account).unacceptedTermsOfService = null;
UserConfig.getInstance(account).saveConfig(false);
drawerLayoutContainer.setAllowOpenDrawer(true, false);
2019-12-31 14:08:08 +01:00
if (mainFragmentsStack.size() > 0) {
mainFragmentsStack.get(mainFragmentsStack.size() - 1).onResume();
}
termsOfServiceView.animate()
.alpha(0f)
.setDuration(150)
.setInterpolator(AndroidUtilities.accelerateInterpolator)
.withEndAction(() -> termsOfServiceView.setVisibility(View.GONE))
.start();
2018-07-30 04:07:02 +02:00
}
@Override
public void onDeclineTerms(int account) {
drawerLayoutContainer.setAllowOpenDrawer(true, false);
termsOfServiceView.setVisibility(View.GONE);
}
});
}
TLRPC.TL_help_termsOfService currentTos = UserConfig.getInstance(account).unacceptedTermsOfService;
if (currentTos != tos && (currentTos == null || !currentTos.id.data.equals(tos.id.data))) {
UserConfig.getInstance(account).unacceptedTermsOfService = tos;
UserConfig.getInstance(account).saveConfig(false);
}
termsOfServiceView.show(account, tos);
drawerLayoutContainer.setAllowOpenDrawer(false, false);
2019-12-31 14:08:08 +01:00
termsOfServiceView.animate().alpha(1f).setDuration(150).setInterpolator(AndroidUtilities.decelerateInterpolator).setListener(null).start();
2018-07-30 04:07:02 +02:00
}
2021-07-15 16:24:57 +02:00
public void showPasscodeActivity(boolean fingerprint, boolean animated, int x, int y, Runnable onShow, Runnable onStart) {
if (drawerLayoutContainer == null) {
return;
}
2021-07-15 16:24:57 +02:00
if (passcodeView == null) {
passcodeView = new PasscodeView(this);
drawerLayoutContainer.addView(passcodeView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
}
2022-09-21 16:20:30 +02:00
if (selectAnimatedEmojiDialog != null) {
selectAnimatedEmojiDialog.dismiss();
selectAnimatedEmojiDialog = null;
}
2018-07-30 04:07:02 +02:00
SharedConfig.appLocked = true;
if (SecretMediaViewer.hasInstance() && SecretMediaViewer.getInstance().isVisible()) {
SecretMediaViewer.getInstance().closePhoto(false, false);
2018-07-30 04:07:02 +02:00
} else if (PhotoViewer.hasInstance() && PhotoViewer.getInstance().isVisible()) {
PhotoViewer.getInstance().closePhoto(false, true);
2018-07-30 04:07:02 +02:00
} else if (ArticleViewer.hasInstance() && ArticleViewer.getInstance().isVisible()) {
2017-03-31 01:58:05 +02:00
ArticleViewer.getInstance().close(false, true);
}
2021-06-25 02:43:10 +02:00
MessageObject messageObject = MediaController.getInstance().getPlayingMessageObject();
if (messageObject != null && messageObject.isRoundVideo()) {
MediaController.getInstance().cleanupPlayer(true, true);
}
2023-02-03 20:11:36 +01:00
passcodeView.onShow(overlayPasscodeViews.isEmpty() && fingerprint, animated, x, y, () -> {
2022-11-05 13:34:47 +01:00
actionBarLayout.getView().setVisibility(View.INVISIBLE);
2021-07-15 16:24:57 +02:00
if (AndroidUtilities.isTablet()) {
2022-11-05 13:34:47 +01:00
if (layersActionBarLayout != null && layersActionBarLayout.getView() != null && layersActionBarLayout.getView().getVisibility() == View.VISIBLE) {
layersActionBarLayout.getView().setVisibility(View.INVISIBLE);
}
if (rightActionBarLayout != null && rightActionBarLayout.getView() != null) {
rightActionBarLayout.getView().setVisibility(View.INVISIBLE);
2021-07-15 16:24:57 +02:00
}
}
if (onShow != null) {
onShow.run();
}
}, onStart);
2023-02-03 20:11:36 +01:00
for (int i = 0; i < overlayPasscodeViews.size(); i++) {
PasscodeView overlay = overlayPasscodeViews.get(i);
overlay.onShow(fingerprint && i == overlayPasscodeViews.size() - 1, animated, x, y, null, null);
}
2018-07-30 04:07:02 +02:00
SharedConfig.isWaitingForPasscodeEnter = true;
drawerLayoutContainer.setAllowOpenDrawer(false, false);
2023-02-03 20:11:36 +01:00
PasscodeView.PasscodeViewDelegate delegate = view -> {
2018-08-27 10:33:11 +02:00
SharedConfig.isWaitingForPasscodeEnter = false;
if (passcodeSaveIntent != null) {
handleIntent(passcodeSaveIntent, passcodeSaveIntentIsNew, passcodeSaveIntentIsRestore, true);
passcodeSaveIntent = null;
}
drawerLayoutContainer.setAllowOpenDrawer(true, false);
2022-11-05 13:34:47 +01:00
actionBarLayout.getView().setVisibility(View.VISIBLE);
actionBarLayout.rebuildFragments(INavigationLayout.REBUILD_FLAG_REBUILD_LAST);
2018-08-27 10:33:11 +02:00
if (AndroidUtilities.isTablet()) {
2022-11-05 13:34:47 +01:00
layersActionBarLayout.rebuildFragments(INavigationLayout.REBUILD_FLAG_REBUILD_LAST);
rightActionBarLayout.rebuildFragments(INavigationLayout.REBUILD_FLAG_REBUILD_LAST);
if (layersActionBarLayout.getView().getVisibility() == View.INVISIBLE) {
layersActionBarLayout.getView().setVisibility(View.VISIBLE);
2019-05-14 14:08:05 +02:00
}
2022-11-05 13:34:47 +01:00
rightActionBarLayout.getView().setVisibility(View.VISIBLE);
}
2023-02-03 20:11:36 +01:00
NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.passcodeDismissed, view);
2023-02-06 12:08:24 +01:00
try {
NotificationsController.getInstance(UserConfig.selectedAccount).showNotifications();
} catch (Exception e) {
FileLog.e(e);
}
2023-02-03 20:11:36 +01:00
};
passcodeView.setDelegate(delegate);
for (PasscodeView overlay : overlayPasscodeViews) {
overlay.setDelegate(delegate);
}
2023-02-06 12:08:24 +01:00
try {
NotificationsController.getInstance(UserConfig.selectedAccount).showNotifications();
} catch (Exception e) {
FileLog.e(e);
}
2023-02-03 20:11:36 +01:00
}
public boolean allowShowFingerprintDialog(PasscodeView passcodeView) {
return overlayPasscodeViews.isEmpty() ? passcodeView == this.passcodeView : overlayPasscodeViews.get(overlayPasscodeViews.size() - 1) == passcodeView;
}
private boolean handleIntent(Intent intent, boolean isNew, boolean restore, boolean fromPassword) {
2022-12-30 13:32:20 +01:00
return handleIntent(intent, isNew, restore, fromPassword, null);
}
@SuppressLint("Range")
private boolean handleIntent(Intent intent, boolean isNew, boolean restore, boolean fromPassword, Browser.Progress progress) {
2017-07-08 18:32:04 +02:00
if (AndroidUtilities.handleProxyIntent(this, intent)) {
return true;
}
2018-07-30 04:07:02 +02:00
if (PhotoViewer.hasInstance() && PhotoViewer.getInstance().isVisible()) {
if (intent == null || !Intent.ACTION_MAIN.equals(intent.getAction())) {
PhotoViewer.getInstance().closePhoto(false, true);
}
}
int flags = intent.getFlags();
2020-12-23 08:48:30 +01:00
String action = intent.getAction();
2019-06-04 12:14:50 +02:00
final int[] intentAccount = new int[]{intent.getIntExtra("currentAccount", UserConfig.selectedAccount)};
2018-07-30 04:07:02 +02:00
switchToAccount(intentAccount[0], true);
2020-12-23 08:48:30 +01:00
boolean isVoipIntent = action != null && action.equals("voip");
2018-07-30 04:07:02 +02:00
if (!fromPassword && (AndroidUtilities.needShowPasscode(true) || SharedConfig.isWaitingForPasscodeEnter)) {
2021-07-15 16:24:57 +02:00
showPasscodeActivity(true, false, -1, -1, null, null);
2018-07-30 04:07:02 +02:00
UserConfig.getInstance(currentAccount).saveConfig(false);
2020-08-15 23:06:36 +02:00
if (!isVoipIntent) {
passcodeSaveIntent = intent;
passcodeSaveIntentIsNew = isNew;
passcodeSaveIntentIsRestore = restore;
return false;
}
}
boolean pushOpened = false;
2021-09-20 07:54:41 +02:00
long push_user_id = 0;
long push_chat_id = 0;
2022-11-05 13:34:47 +01:00
int push_topic_id = 0;
2020-08-15 23:06:36 +02:00
int push_enc_id = 0;
int push_msg_id = 0;
int open_settings = 0;
2021-02-23 12:53:38 +01:00
int open_widget_edit = -1;
int open_widget_edit_type = -1;
2020-08-15 23:06:36 +02:00
int open_new_dialog = 0;
long dialogId = 0;
boolean showDialogsList = false;
boolean showPlayer = false;
boolean showLocations = false;
2020-12-23 08:48:30 +01:00
boolean showGroupVoip = false;
2020-09-30 15:48:47 +02:00
boolean showCallLog = false;
2020-08-15 23:06:36 +02:00
boolean audioCallUser = false;
boolean videoCallUser = false;
2020-09-30 15:48:47 +02:00
boolean needCallAlert = false;
boolean newContact = false;
2020-10-05 00:13:31 +02:00
boolean newContactAlert = false;
2020-09-30 15:48:47 +02:00
boolean scanQr = false;
String searchQuery = null;
String callSearchQuery = null;
String newContactName = null;
String newContactPhone = null;
2020-08-15 23:06:36 +02:00
photoPathsArray = null;
videoPath = null;
sendingText = null;
documentsPathsArray = null;
documentsOriginalPathsArray = null;
documentsMimeType = null;
documentsUrisArray = null;
2021-01-28 15:15:51 +01:00
exportingChatUri = null;
2020-08-15 23:06:36 +02:00
contactsToSend = null;
contactsToSendUri = null;
2021-06-25 02:43:10 +02:00
importingStickers = null;
importingStickersEmoji = null;
importingStickersSoftware = null;
2020-08-15 23:06:36 +02:00
if ((flags & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) == 0) {
if (intent != null && intent.getAction() != null && !restore) {
if (Intent.ACTION_SEND.equals(intent.getAction())) {
if (SharedConfig.directShare && intent != null && intent.getExtras() != null) {
dialogId = intent.getExtras().getLong("dialogId", 0);
String hash = null;
if (dialogId == 0) {
try {
String id = intent.getExtras().getString(ShortcutManagerCompat.EXTRA_SHORTCUT_ID);
if (id != null) {
List<ShortcutInfoCompat> list = ShortcutManagerCompat.getDynamicShortcuts(ApplicationLoader.applicationContext);
for (int a = 0, N = list.size(); a < N; a++) {
ShortcutInfoCompat info = list.get(a);
if (id.equals(info.getId())) {
Bundle extras = info.getIntent().getExtras();
dialogId = extras.getLong("dialogId", 0);
hash = extras.getString("hash", null);
break;
2020-07-26 10:03:38 +02:00
}
}
}
2020-08-15 23:06:36 +02:00
} catch (Throwable e) {
FileLog.e(e);
2020-07-26 10:03:38 +02:00
}
2020-08-15 23:06:36 +02:00
} else {
hash = intent.getExtras().getString("hash", null);
2020-07-26 10:03:38 +02:00
}
2020-08-15 23:06:36 +02:00
if (SharedConfig.directShareHash == null || !SharedConfig.directShareHash.equals(hash)) {
dialogId = 0;
}
}
2020-07-26 10:03:38 +02:00
2020-08-15 23:06:36 +02:00
boolean error = false;
String type = intent.getType();
if (type != null && type.equals(ContactsContract.Contacts.CONTENT_VCARD_TYPE)) {
try {
Uri uri = (Uri) intent.getExtras().get(Intent.EXTRA_STREAM);
if (uri != null) {
contactsToSend = AndroidUtilities.loadVCardFromStream(uri, currentAccount, false, null, null);
if (contactsToSend.size() > 5) {
contactsToSend = null;
documentsUrisArray = new ArrayList<>();
documentsUrisArray.add(uri);
documentsMimeType = type;
} else {
2020-08-15 23:06:36 +02:00
contactsToSendUri = uri;
}
2020-08-15 23:06:36 +02:00
} else {
error = true;
}
2020-08-15 23:06:36 +02:00
} catch (Exception e) {
FileLog.e(e);
error = true;
}
} else {
String text = intent.getStringExtra(Intent.EXTRA_TEXT);
if (text == null) {
CharSequence textSequence = intent.getCharSequenceExtra(Intent.EXTRA_TEXT);
if (textSequence != null) {
text = textSequence.toString();
2016-04-22 15:49:00 +02:00
}
2020-08-15 23:06:36 +02:00
}
String subject = intent.getStringExtra(Intent.EXTRA_SUBJECT);
2015-05-21 23:27:27 +02:00
2020-08-15 23:06:36 +02:00
if (!TextUtils.isEmpty(text)) {
if ((text.startsWith("http://") || text.startsWith("https://")) && !TextUtils.isEmpty(subject)) {
text = subject + "\n" + text;
2015-05-21 23:27:27 +02:00
}
2020-08-15 23:06:36 +02:00
sendingText = text;
} else if (!TextUtils.isEmpty(subject)) {
sendingText = subject;
}
2016-04-22 15:49:00 +02:00
2020-08-15 23:06:36 +02:00
Parcelable parcelable = intent.getParcelableExtra(Intent.EXTRA_STREAM);
if (parcelable != null) {
String path;
if (!(parcelable instanceof Uri)) {
parcelable = Uri.parse(parcelable.toString());
}
Uri uri = (Uri) parcelable;
if (uri != null) {
if (AndroidUtilities.isInternalUri(uri)) {
error = true;
}
2020-08-15 23:06:36 +02:00
}
2021-01-28 15:15:51 +01:00
if (!error && uri != null) {
if (type != null && type.startsWith("image/") || uri.toString().toLowerCase().endsWith(".jpg")) {
2020-08-15 23:06:36 +02:00
if (photoPathsArray == null) {
photoPathsArray = new ArrayList<>();
}
2020-08-15 23:06:36 +02:00
SendMessagesHelper.SendingMediaInfo info = new SendMessagesHelper.SendingMediaInfo();
info.uri = uri;
photoPathsArray.add(info);
} else {
2021-01-28 15:15:51 +01:00
String originalPath = uri.toString();
if (dialogId == 0 && originalPath != null) {
2021-01-29 08:12:33 +01:00
if (BuildVars.LOGS_ENABLED) {
FileLog.d("export path = " + originalPath);
}
2021-01-28 15:15:51 +01:00
Set<String> exportUris = MessagesController.getInstance(intentAccount[0]).exportUri;
2021-01-29 08:12:33 +01:00
String fileName = FileLoader.fixFileName(MediaController.getFileName(uri));
2021-01-28 15:15:51 +01:00
for (String u : exportUris) {
2021-01-29 08:12:33 +01:00
try {
Pattern pattern = Pattern.compile(u);
if (pattern.matcher(originalPath).find() || pattern.matcher(fileName).find()) {
exportingChatUri = uri;
break;
}
} catch (Exception e) {
FileLog.e(e);
2021-01-28 15:15:51 +01:00
}
}
2021-01-28 15:15:51 +01:00
if (exportingChatUri == null) {
if (originalPath.startsWith("content://com.kakao.talk") && originalPath.endsWith("KakaoTalkChats.txt")) {
exportingChatUri = uri;
}
2020-08-15 23:06:36 +02:00
}
2021-01-28 15:15:51 +01:00
}
if (exportingChatUri == null) {
path = AndroidUtilities.getPath(uri);
2021-11-05 11:06:49 +01:00
if (!BuildVars.NO_SCOPED_STORAGE) {
path = MediaController.copyFileToCache(uri, "file");
}
2021-01-28 15:15:51 +01:00
if (path != null) {
if (path.startsWith("file:")) {
path = path.replace("file://", "");
}
if (type != null && type.startsWith("video/")) {
videoPath = path;
} else {
if (documentsPathsArray == null) {
documentsPathsArray = new ArrayList<>();
documentsOriginalPathsArray = new ArrayList<>();
}
documentsPathsArray.add(path);
documentsOriginalPathsArray.add(uri.toString());
}
} else {
if (documentsUrisArray == null) {
documentsUrisArray = new ArrayList<>();
}
documentsUrisArray.add(uri);
documentsMimeType = type;
}
}
2015-06-29 19:12:11 +02:00
}
}
2020-08-15 23:06:36 +02:00
} else if (sendingText == null) {
error = true;
2015-05-21 23:27:27 +02:00
}
2020-08-15 23:06:36 +02:00
}
if (error) {
Toast.makeText(this, "Unsupported content", Toast.LENGTH_SHORT).show();
}
2021-06-25 02:43:10 +02:00
} else if ("org.telegram.messenger.CREATE_STICKER_PACK".equals(intent.getAction())) {
try {
importingStickers = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
importingStickersEmoji = intent.getStringArrayListExtra("STICKER_EMOJIS");
importingStickersSoftware = intent.getStringExtra("IMPORTER");
} catch (Throwable e) {
FileLog.e(e);
importingStickers = null;
importingStickersEmoji = null;
importingStickersSoftware = null;
}
2020-08-15 23:06:36 +02:00
} else if (Intent.ACTION_SEND_MULTIPLE.equals(intent.getAction())) {
boolean error = false;
try {
ArrayList<Parcelable> uris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
String type = intent.getType();
if (uris != null) {
for (int a = 0; a < uris.size(); a++) {
Parcelable parcelable = uris.get(a);
if (!(parcelable instanceof Uri)) {
parcelable = Uri.parse(parcelable.toString());
}
Uri uri = (Uri) parcelable;
if (uri != null) {
if (AndroidUtilities.isInternalUri(uri)) {
uris.remove(a);
a--;
}
}
}
if (uris.isEmpty()) {
uris = null;
}
}
2020-08-15 23:06:36 +02:00
if (uris != null) {
if (type != null && type.startsWith("image/")) {
2016-03-06 02:49:31 +01:00
for (int a = 0; a < uris.size(); a++) {
Parcelable parcelable = uris.get(a);
if (!(parcelable instanceof Uri)) {
parcelable = Uri.parse(parcelable.toString());
}
Uri uri = (Uri) parcelable;
2020-08-15 23:06:36 +02:00
if (photoPathsArray == null) {
photoPathsArray = new ArrayList<>();
2016-03-06 02:49:31 +01:00
}
2020-08-15 23:06:36 +02:00
SendMessagesHelper.SendingMediaInfo info = new SendMessagesHelper.SendingMediaInfo();
info.uri = uri;
photoPathsArray.add(info);
2016-03-06 02:49:31 +01:00
}
2020-08-15 23:06:36 +02:00
} else {
2021-01-28 15:15:51 +01:00
Set<String> exportUris = MessagesController.getInstance(intentAccount[0]).exportUri;
2020-08-15 23:06:36 +02:00
for (int a = 0; a < uris.size(); a++) {
Parcelable parcelable = uris.get(a);
if (!(parcelable instanceof Uri)) {
parcelable = Uri.parse(parcelable.toString());
2015-01-02 23:15:07 +01:00
}
2020-08-15 23:06:36 +02:00
Uri uri = (Uri) parcelable;
String path = AndroidUtilities.getPath(uri);
String originalPath = parcelable.toString();
if (originalPath == null) {
originalPath = path;
}
2021-01-28 15:15:51 +01:00
2021-01-29 08:12:33 +01:00
if (BuildVars.LOGS_ENABLED) {
FileLog.d("export path = " + originalPath);
}
2021-01-28 15:15:51 +01:00
if (dialogId == 0 && originalPath != null && exportingChatUri == null) {
boolean ok = false;
2021-01-29 08:12:33 +01:00
String fileName = FileLoader.fixFileName(MediaController.getFileName(uri));
2021-01-28 15:15:51 +01:00
for (String u : exportUris) {
2021-01-29 08:12:33 +01:00
try {
Pattern pattern = Pattern.compile(u);
if (pattern.matcher(originalPath).find() || pattern.matcher(fileName).find()) {
exportingChatUri = uri;
ok = true;
break;
}
} catch (Exception e) {
FileLog.e(e);
2021-01-28 15:15:51 +01:00
}
}
if (ok) {
continue;
} else if (originalPath.startsWith("content://com.kakao.talk") && originalPath.endsWith("KakaoTalkChats.txt")) {
exportingChatUri = uri;
continue;
}
}
2020-08-15 23:06:36 +02:00
if (path != null) {
if (path.startsWith("file:")) {
path = path.replace("file://", "");
}
2020-08-15 23:06:36 +02:00
if (documentsPathsArray == null) {
documentsPathsArray = new ArrayList<>();
documentsOriginalPathsArray = new ArrayList<>();
}
2020-08-15 23:06:36 +02:00
documentsPathsArray.add(path);
documentsOriginalPathsArray.add(originalPath);
} else {
if (documentsUrisArray == null) {
documentsUrisArray = new ArrayList<>();
}
2020-08-15 23:06:36 +02:00
documentsUrisArray.add(uri);
documentsMimeType = type;
}
}
}
2020-08-15 23:06:36 +02:00
} else {
2015-01-02 23:15:07 +01:00
error = true;
}
2020-08-15 23:06:36 +02:00
} catch (Exception e) {
FileLog.e(e);
error = true;
}
if (error) {
Toast.makeText(this, "Unsupported content", Toast.LENGTH_SHORT).show();
}
} else if (Intent.ACTION_VIEW.equals(intent.getAction())) {
Uri data = intent.getData();
if (data != null) {
String username = null;
String login = null;
String group = null;
String sticker = null;
2022-08-12 17:23:51 +02:00
String emoji = null;
2020-08-15 23:06:36 +02:00
HashMap<String, String> auth = null;
String unsupportedUrl = null;
2023-03-08 08:27:18 +01:00
String botAppMaybe = null;
String startApp = null;
2020-08-15 23:06:36 +02:00
String botUser = null;
String botChat = null;
2022-06-21 04:51:00 +02:00
String botChannel = null;
2022-04-16 16:43:17 +02:00
String botChatAdminParams = null;
2020-08-15 23:06:36 +02:00
String message = null;
String phone = null;
String game = null;
2021-03-19 11:25:58 +01:00
String voicechat = null;
2022-02-12 06:22:45 +01:00
String livestream = null;
2020-08-15 23:06:36 +02:00
String phoneHash = null;
String lang = null;
String theme = null;
String code = null;
2022-12-06 20:13:44 +01:00
String contactToken = null;
2020-08-15 23:06:36 +02:00
TLRPC.TL_wallPaper wallPaper = null;
2022-06-21 04:51:00 +02:00
String inputInvoiceSlug = null;
2020-08-15 23:06:36 +02:00
Integer messageId = null;
2021-09-20 07:54:41 +02:00
Long channelId = null;
2020-09-30 15:48:47 +02:00
Integer threadId = null;
Integer commentId = null;
2021-07-15 16:24:57 +02:00
int videoTimestamp = -1;
2020-08-15 23:06:36 +02:00
boolean hasUrl = false;
2022-04-16 16:43:17 +02:00
String setAsAttachBot = null;
String attachMenuBotToOpen = null;
2022-06-21 04:51:00 +02:00
String attachMenuBotChoose = null;
2020-09-30 15:48:47 +02:00
final String scheme = data.getScheme();
2020-08-15 23:06:36 +02:00
if (scheme != null) {
switch (scheme) {
case "http":
case "https": {
String host = data.getHost().toLowerCase();
2022-09-16 20:48:21 +02:00
Matcher prefixMatcher = PREFIX_T_ME_PATTERN.matcher(host);
boolean isPrefix = prefixMatcher.find();
if (host.equals("telegram.me") || host.equals("t.me") || host.equals("telegram.dog") || isPrefix) {
if (isPrefix) {
data = Uri.parse("https://t.me/" + prefixMatcher.group(1) + (TextUtils.isEmpty(data.getPath()) ? "" : data.getPath()) + (TextUtils.isEmpty(data.getQuery()) ? "" : "?" + data.getQuery()));
}
2020-08-15 23:06:36 +02:00
String path = data.getPath();
if (path != null && path.length() > 1) {
path = path.substring(1);
2022-06-21 04:51:00 +02:00
if (path.startsWith("$")) {
inputInvoiceSlug = path.substring(1);
} else if (path.startsWith("invoice/")) {
inputInvoiceSlug = path.substring(path.indexOf('/') + 1);
} else if (path.startsWith("bg/")) {
2020-08-15 23:06:36 +02:00
wallPaper = new TLRPC.TL_wallPaper();
wallPaper.settings = new TLRPC.TL_wallPaperSettings();
wallPaper.slug = path.replace("bg/", "");
2021-08-31 21:06:39 +02:00
boolean ok = false;
2020-08-15 23:06:36 +02:00
if (wallPaper.slug != null && wallPaper.slug.length() == 6) {
try {
wallPaper.settings.background_color = Integer.parseInt(wallPaper.slug, 16) | 0xff000000;
2021-08-31 21:06:39 +02:00
wallPaper.slug = null;
ok = true;
2020-08-15 23:06:36 +02:00
} catch (Exception ignore) {
2019-02-08 03:30:32 +01:00
2020-08-15 23:06:36 +02:00
}
2021-06-25 02:43:10 +02:00
} else if (wallPaper.slug != null && wallPaper.slug.length() >= 13 && AndroidUtilities.isValidWallChar(wallPaper.slug.charAt(6))) {
2020-08-15 23:06:36 +02:00
try {
wallPaper.settings.background_color = Integer.parseInt(wallPaper.slug.substring(0, 6), 16) | 0xff000000;
2021-06-25 02:43:10 +02:00
wallPaper.settings.second_background_color = Integer.parseInt(wallPaper.slug.substring(7, 13), 16) | 0xff000000;
if (wallPaper.slug.length() >= 20 && AndroidUtilities.isValidWallChar(wallPaper.slug.charAt(13))) {
wallPaper.settings.third_background_color = Integer.parseInt(wallPaper.slug.substring(14, 20), 16) | 0xff000000;
}
if (wallPaper.slug.length() == 27 && AndroidUtilities.isValidWallChar(wallPaper.slug.charAt(20))) {
wallPaper.settings.fourth_background_color = Integer.parseInt(wallPaper.slug.substring(21), 16) | 0xff000000;
}
2021-08-31 21:06:39 +02:00
try {
String rotation = data.getQueryParameter("rotation");
if (!TextUtils.isEmpty(rotation)) {
wallPaper.settings.rotation = Utilities.parseInt(rotation);
}
} catch (Exception ignore) {
2019-12-31 14:08:08 +01:00
}
2021-08-31 21:06:39 +02:00
wallPaper.slug = null;
ok = true;
2020-08-15 23:06:36 +02:00
} catch (Exception ignore) {
2019-12-31 14:08:08 +01:00
2020-08-15 23:06:36 +02:00
}
2021-08-31 21:06:39 +02:00
}
if (!ok) {
2020-08-15 23:06:36 +02:00
String mode = data.getQueryParameter("mode");
if (mode != null) {
mode = mode.toLowerCase();
String[] modes = mode.split(" ");
if (modes != null && modes.length > 0) {
for (int a = 0; a < modes.length; a++) {
if ("blur".equals(modes[a])) {
wallPaper.settings.blur = true;
} else if ("motion".equals(modes[a])) {
wallPaper.settings.motion = true;
2019-12-31 14:08:08 +01:00
}
}
}
2020-08-15 23:06:36 +02:00
}
String intensity = data.getQueryParameter("intensity");
if (!TextUtils.isEmpty(intensity)) {
wallPaper.settings.intensity = Utilities.parseInt(intensity);
} else {
wallPaper.settings.intensity = 50;
}
try {
String bgColor = data.getQueryParameter("bg_color");
if (!TextUtils.isEmpty(bgColor)) {
wallPaper.settings.background_color = Integer.parseInt(bgColor.substring(0, 6), 16) | 0xff000000;
2021-06-25 02:43:10 +02:00
if (bgColor.length() >= 13) {
wallPaper.settings.second_background_color = Integer.parseInt(bgColor.substring(7, 13), 16) | 0xff000000;
if (bgColor.length() >= 20 && AndroidUtilities.isValidWallChar(bgColor.charAt(13))) {
wallPaper.settings.third_background_color = Integer.parseInt(bgColor.substring(14, 20), 16) | 0xff000000;
}
if (bgColor.length() == 27 && AndroidUtilities.isValidWallChar(bgColor.charAt(20))) {
wallPaper.settings.fourth_background_color = Integer.parseInt(bgColor.substring(21), 16) | 0xff000000;
}
2019-12-31 14:08:08 +01:00
}
2020-08-15 23:06:36 +02:00
} else {
wallPaper.settings.background_color = 0xffffffff;
2019-02-08 03:30:32 +01:00
}
2020-08-15 23:06:36 +02:00
} catch (Exception ignore) {
2019-02-08 03:30:32 +01:00
2015-10-29 18:10:07 +01:00
}
2020-08-15 23:06:36 +02:00
try {
String rotation = data.getQueryParameter("rotation");
if (!TextUtils.isEmpty(rotation)) {
wallPaper.settings.rotation = Utilities.parseInt(rotation);
2019-12-31 14:08:08 +01:00
}
2020-08-15 23:06:36 +02:00
} catch (Exception ignore) {
2019-05-14 14:08:05 +02:00
}
2020-08-15 23:06:36 +02:00
}
} else if (path.startsWith("login/")) {
2020-12-23 08:48:30 +01:00
int intCode = Utilities.parseInt(path.replace("login/", ""));
if (intCode != 0) {
code = "" + intCode;
}
2020-08-15 23:06:36 +02:00
} else if (path.startsWith("joinchat/")) {
group = path.replace("joinchat/", "");
2021-02-23 12:53:38 +01:00
} else if (path.startsWith("+")) {
group = path.replace("+", "");
2022-03-13 02:58:00 +01:00
if (AndroidUtilities.isNumeric(group)) {
username = group;
group = null;
}
2020-08-15 23:06:36 +02:00
} else if (path.startsWith("addstickers/")) {
sticker = path.replace("addstickers/", "");
2022-08-12 17:23:51 +02:00
} else if (path.startsWith("addemoji/")) {
emoji = path.replace("addemoji/", "");
2020-08-15 23:06:36 +02:00
} else if (path.startsWith("msg/") || path.startsWith("share/")) {
message = data.getQueryParameter("url");
if (message == null) {
message = "";
}
if (data.getQueryParameter("text") != null) {
if (message.length() > 0) {
hasUrl = true;
message += "\n";
2019-12-31 14:08:08 +01:00
}
2020-08-15 23:06:36 +02:00
message += data.getQueryParameter("text");
}
if (message.length() > 4096 * 4) {
message = message.substring(0, 4096 * 4);
}
while (message.endsWith("\n")) {
message = message.substring(0, message.length() - 1);
}
} else if (path.startsWith("confirmphone")) {
phone = data.getQueryParameter("phone");
phoneHash = data.getQueryParameter("hash");
} else if (path.startsWith("setlanguage/")) {
lang = path.substring(12);
} else if (path.startsWith("addtheme/")) {
theme = path.substring(9);
} else if (path.startsWith("c/")) {
List<String> segments = data.getPathSegments();
2022-12-06 20:13:44 +01:00
if (segments.size() >= 3) {
2021-09-20 07:54:41 +02:00
channelId = Utilities.parseLong(segments.get(1));
2020-08-15 23:06:36 +02:00
messageId = Utilities.parseInt(segments.get(2));
if (messageId == 0 || channelId == 0) {
messageId = null;
channelId = null;
2019-12-31 14:08:08 +01:00
}
2020-09-30 15:48:47 +02:00
threadId = Utilities.parseInt(data.getQueryParameter("thread"));
if (threadId == 0) {
threadId = null;
}
2022-11-05 13:34:47 +01:00
if (threadId == null) {
threadId = Utilities.parseInt(data.getQueryParameter("topic"));
if (threadId == 0) {
threadId = null;
}
}
2022-12-06 20:13:44 +01:00
if (threadId == null && messageId != null && segments.size() >= 4) {
threadId = messageId;
messageId = Utilities.parseInt(segments.get(3));
}
2020-08-15 23:06:36 +02:00
}
2022-12-06 20:13:44 +01:00
} else if (path.startsWith("contact/")) {
contactToken = path.substring(8);
2020-08-15 23:06:36 +02:00
} else if (path.length() >= 1) {
2023-03-08 08:27:18 +01:00
botAppMaybe = null;
2020-08-15 23:06:36 +02:00
ArrayList<String> segments = new ArrayList<>(data.getPathSegments());
if (segments.size() > 0 && segments.get(0).equals("s")) {
segments.remove(0);
}
if (segments.size() > 0) {
username = segments.get(0);
if (segments.size() > 1) {
2023-03-08 08:27:18 +01:00
botAppMaybe = segments.get(1);
startApp = data.getQueryParameter("startapp");
try {
messageId = Utilities.parseInt(segments.get(1));
if (messageId == 0) {
messageId = null;
}
} catch (NumberFormatException ignored) {
2016-03-06 02:49:31 +01:00
messageId = null;
2019-12-31 14:08:08 +01:00
}
}
2016-03-06 02:49:31 +01:00
}
2021-07-30 16:49:55 +02:00
if (messageId != null) {
videoTimestamp = getTimestampFromLink(data);
2021-07-15 16:24:57 +02:00
}
2020-08-15 23:06:36 +02:00
botUser = data.getQueryParameter("start");
botChat = data.getQueryParameter("startgroup");
2022-06-21 04:51:00 +02:00
botChannel = data.getQueryParameter("startchannel");
2022-04-16 16:43:17 +02:00
botChatAdminParams = data.getQueryParameter("admin");
2020-08-15 23:06:36 +02:00
game = data.getQueryParameter("game");
2021-03-19 11:25:58 +01:00
voicechat = data.getQueryParameter("voicechat");
2022-02-12 06:22:45 +01:00
livestream = data.getQueryParameter("livestream");
2022-04-16 16:43:17 +02:00
setAsAttachBot = data.getQueryParameter("startattach");
2022-06-21 04:51:00 +02:00
attachMenuBotChoose = data.getQueryParameter("choose");
2022-04-16 16:43:17 +02:00
attachMenuBotToOpen = data.getQueryParameter("attach");
2020-09-30 15:48:47 +02:00
threadId = Utilities.parseInt(data.getQueryParameter("thread"));
if (threadId == 0) {
threadId = null;
}
2022-11-05 13:34:47 +01:00
if (threadId == null) {
threadId = Utilities.parseInt(data.getQueryParameter("topic"));
if (threadId == 0) {
threadId = null;
}
}
2022-12-06 20:13:44 +01:00
if (threadId == null && messageId != null && segments.size() >= 3) {
threadId = messageId;
messageId = Utilities.parseInt(segments.get(2));
}
2020-09-30 15:48:47 +02:00
commentId = Utilities.parseInt(data.getQueryParameter("comment"));
if (commentId == 0) {
commentId = null;
}
}
}
}
2020-08-15 23:06:36 +02:00
break;
}
case "tg": {
String url = data.toString();
2022-08-12 17:23:51 +02:00
if (url.startsWith("tg:premium_offer") || url.startsWith("tg://premium_offer")) {
String finalUrl = url;
AndroidUtilities.runOnUIThread(() -> {
2022-11-05 13:34:47 +01:00
if (!actionBarLayout.getFragmentStack().isEmpty()) {
BaseFragment fragment = actionBarLayout.getFragmentStack().get(0);
2022-08-12 17:23:51 +02:00
Uri uri = Uri.parse(finalUrl);
fragment.presentFragment(new PremiumPreviewFragment(uri.getQueryParameter("ref")));
}});
} else if (url.startsWith("tg:resolve") || url.startsWith("tg://resolve")) {
2020-08-15 23:06:36 +02:00
url = url.replace("tg:resolve", "tg://telegram.org").replace("tg://resolve", "tg://telegram.org");
data = Uri.parse(url);
username = data.getQueryParameter("domain");
2022-06-21 04:51:00 +02:00
if (username == null) {
username = data.getQueryParameter("phone");
if (username != null && username.startsWith("+")) {
username = username.substring(1);
}
}
2023-03-08 08:27:18 +01:00
botAppMaybe = data.getQueryParameter("appname");
startApp = data.getQueryParameter("startapp");
2020-08-15 23:06:36 +02:00
if ("telegrampassport".equals(username)) {
username = null;
auth = new HashMap<>();
String scope = data.getQueryParameter("scope");
if (!TextUtils.isEmpty(scope) && scope.startsWith("{") && scope.endsWith("}")) {
auth.put("nonce", data.getQueryParameter("nonce"));
2018-08-27 10:33:11 +02:00
} else {
2020-08-15 23:06:36 +02:00
auth.put("payload", data.getQueryParameter("payload"));
2018-08-27 10:33:11 +02:00
}
2020-08-15 23:06:36 +02:00
auth.put("bot_id", data.getQueryParameter("bot_id"));
auth.put("scope", scope);
auth.put("public_key", data.getQueryParameter("public_key"));
auth.put("callback_url", data.getQueryParameter("callback_url"));
} else {
botUser = data.getQueryParameter("start");
botChat = data.getQueryParameter("startgroup");
2022-06-21 04:51:00 +02:00
botChannel = data.getQueryParameter("startchannel");
2022-04-16 16:43:17 +02:00
botChatAdminParams = data.getQueryParameter("admin");
2020-08-15 23:06:36 +02:00
game = data.getQueryParameter("game");
2021-03-19 11:25:58 +01:00
voicechat = data.getQueryParameter("voicechat");
2022-02-12 06:22:45 +01:00
livestream = data.getQueryParameter("livestream");
2022-04-16 16:43:17 +02:00
setAsAttachBot = data.getQueryParameter("startattach");
2022-06-21 04:51:00 +02:00
attachMenuBotChoose = data.getQueryParameter("choose");
2022-04-16 16:43:17 +02:00
attachMenuBotToOpen = data.getQueryParameter("attach");
2018-07-30 04:07:02 +02:00
messageId = Utilities.parseInt(data.getQueryParameter("post"));
2020-08-15 23:06:36 +02:00
if (messageId == 0) {
2018-07-30 04:07:02 +02:00
messageId = null;
}
2020-09-30 15:48:47 +02:00
threadId = Utilities.parseInt(data.getQueryParameter("thread"));
if (threadId == 0) {
threadId = null;
}
2022-11-05 13:34:47 +01:00
if (threadId == null) {
threadId = Utilities.parseInt(data.getQueryParameter("topic"));
if (threadId == 0) {
threadId = null;
}
}
2020-09-30 15:48:47 +02:00
commentId = Utilities.parseInt(data.getQueryParameter("comment"));
if (commentId == 0) {
commentId = null;
}
2020-08-15 23:06:36 +02:00
}
2022-12-06 20:13:44 +01:00
} else if (url.startsWith("tg:invoice") || url.startsWith("tg://invoice")) {
2022-06-21 04:51:00 +02:00
url = url.replace("tg:invoice", "tg://invoice");
data = Uri.parse(url);
inputInvoiceSlug = data.getQueryParameter("slug");
2022-12-06 20:13:44 +01:00
} else if (url.startsWith("tg:contact") || url.startsWith("tg://contact")) {
url = url.replace("tg:contact", "tg://contact");
data = Uri.parse(url);
contactToken = data.getQueryParameter("token");
2020-08-15 23:06:36 +02:00
} else if (url.startsWith("tg:privatepost") || url.startsWith("tg://privatepost")) {
url = url.replace("tg:privatepost", "tg://telegram.org").replace("tg://privatepost", "tg://telegram.org");
data = Uri.parse(url);
messageId = Utilities.parseInt(data.getQueryParameter("post"));
2021-09-20 07:54:41 +02:00
channelId = Utilities.parseLong(data.getQueryParameter("channel"));
2020-08-15 23:06:36 +02:00
if (messageId == 0 || channelId == 0) {
messageId = null;
channelId = null;
}
2020-09-30 15:48:47 +02:00
threadId = Utilities.parseInt(data.getQueryParameter("thread"));
if (threadId == 0) {
threadId = null;
}
2022-11-05 13:34:47 +01:00
if (threadId == null) {
threadId = Utilities.parseInt(data.getQueryParameter("topic"));
if (threadId == 0) {
threadId = null;
}
}
2020-09-30 15:48:47 +02:00
commentId = Utilities.parseInt(data.getQueryParameter("comment"));
if (commentId == 0) {
commentId = null;
}
2020-08-15 23:06:36 +02:00
} else if (url.startsWith("tg:bg") || url.startsWith("tg://bg")) {
url = url.replace("tg:bg", "tg://telegram.org").replace("tg://bg", "tg://telegram.org");
data = Uri.parse(url);
wallPaper = new TLRPC.TL_wallPaper();
wallPaper.settings = new TLRPC.TL_wallPaperSettings();
wallPaper.slug = data.getQueryParameter("slug");
if (wallPaper.slug == null) {
wallPaper.slug = data.getQueryParameter("color");
}
2021-08-31 21:06:39 +02:00
boolean ok = false;
2020-08-15 23:06:36 +02:00
if (wallPaper.slug != null && wallPaper.slug.length() == 6) {
try {
wallPaper.settings.background_color = Integer.parseInt(wallPaper.slug, 16) | 0xff000000;
2021-08-31 21:06:39 +02:00
wallPaper.slug = null;
ok = true;
2020-08-15 23:06:36 +02:00
} catch (Exception ignore) {
2019-12-31 14:08:08 +01:00
2020-08-15 23:06:36 +02:00
}
2021-06-25 02:43:10 +02:00
} else if (wallPaper.slug != null && wallPaper.slug.length() >= 13 && AndroidUtilities.isValidWallChar(wallPaper.slug.charAt(6))) {
2020-08-15 23:06:36 +02:00
try {
wallPaper.settings.background_color = Integer.parseInt(wallPaper.slug.substring(0, 6), 16) | 0xff000000;
2021-06-25 02:43:10 +02:00
wallPaper.settings.second_background_color = Integer.parseInt(wallPaper.slug.substring(7, 13), 16) | 0xff000000;
if (wallPaper.slug.length() >= 20 && AndroidUtilities.isValidWallChar(wallPaper.slug.charAt(13))) {
wallPaper.settings.third_background_color = Integer.parseInt(wallPaper.slug.substring(14, 20), 16) | 0xff000000;
}
if (wallPaper.slug.length() == 27 && AndroidUtilities.isValidWallChar(wallPaper.slug.charAt(20))) {
wallPaper.settings.fourth_background_color = Integer.parseInt(wallPaper.slug.substring(21), 16) | 0xff000000;
}
2021-08-31 21:06:39 +02:00
try {
String rotation = data.getQueryParameter("rotation");
if (!TextUtils.isEmpty(rotation)) {
wallPaper.settings.rotation = Utilities.parseInt(rotation);
}
} catch (Exception ignore) {
2019-12-31 14:08:08 +01:00
}
2021-08-31 21:06:39 +02:00
wallPaper.slug = null;
ok = true;
2020-08-15 23:06:36 +02:00
} catch (Exception ignore) {
2019-12-31 14:08:08 +01:00
2020-08-15 23:06:36 +02:00
}
2021-08-31 21:06:39 +02:00
}
if (!ok) {
2020-08-15 23:06:36 +02:00
String mode = data.getQueryParameter("mode");
if (mode != null) {
mode = mode.toLowerCase();
String[] modes = mode.split(" ");
if (modes != null && modes.length > 0) {
for (int a = 0; a < modes.length; a++) {
if ("blur".equals(modes[a])) {
wallPaper.settings.blur = true;
} else if ("motion".equals(modes[a])) {
wallPaper.settings.motion = true;
2019-02-08 03:30:32 +01:00
}
2019-01-23 18:03:33 +01:00
}
}
2020-08-15 23:06:36 +02:00
}
wallPaper.settings.intensity = Utilities.parseInt(data.getQueryParameter("intensity"));
try {
String bgColor = data.getQueryParameter("bg_color");
if (!TextUtils.isEmpty(bgColor)) {
wallPaper.settings.background_color = Integer.parseInt(bgColor.substring(0, 6), 16) | 0xff000000;
2021-06-25 02:43:10 +02:00
if (bgColor.length() >= 13) {
wallPaper.settings.second_background_color = Integer.parseInt(bgColor.substring(8, 13), 16) | 0xff000000;
if (bgColor.length() >= 20 && AndroidUtilities.isValidWallChar(bgColor.charAt(13))) {
wallPaper.settings.third_background_color = Integer.parseInt(bgColor.substring(14, 20), 16) | 0xff000000;
}
if (bgColor.length() == 27 && AndroidUtilities.isValidWallChar(bgColor.charAt(20))) {
wallPaper.settings.fourth_background_color = Integer.parseInt(bgColor.substring(21), 16) | 0xff000000;
}
2019-12-31 14:08:08 +01:00
}
2019-02-08 03:30:32 +01:00
}
2020-08-15 23:06:36 +02:00
} catch (Exception ignore) {
2019-02-08 03:30:32 +01:00
}
2020-08-15 23:06:36 +02:00
try {
String rotation = data.getQueryParameter("rotation");
if (!TextUtils.isEmpty(rotation)) {
wallPaper.settings.rotation = Utilities.parseInt(rotation);
2019-12-31 14:08:08 +01:00
}
2020-08-15 23:06:36 +02:00
} catch (Exception ignore) {
2019-12-31 14:08:08 +01:00
}
2020-08-15 23:06:36 +02:00
}
} else if (url.startsWith("tg:join") || url.startsWith("tg://join")) {
url = url.replace("tg:join", "tg://telegram.org").replace("tg://join", "tg://telegram.org");
data = Uri.parse(url);
group = data.getQueryParameter("invite");
} else if (url.startsWith("tg:addstickers") || url.startsWith("tg://addstickers")) {
url = url.replace("tg:addstickers", "tg://telegram.org").replace("tg://addstickers", "tg://telegram.org");
data = Uri.parse(url);
sticker = data.getQueryParameter("set");
2022-08-12 17:23:51 +02:00
} else if (url.startsWith("tg:addemoji") || url.startsWith("tg://addemoji")) {
url = url.replace("tg:addemoji", "tg://telegram.org").replace("tg://addemoji", "tg://telegram.org");
data = Uri.parse(url);
emoji = data.getQueryParameter("set");
2020-08-15 23:06:36 +02:00
} else if (url.startsWith("tg:msg") || url.startsWith("tg://msg") || url.startsWith("tg://share") || url.startsWith("tg:share")) {
url = url.replace("tg:msg", "tg://telegram.org").replace("tg://msg", "tg://telegram.org").replace("tg://share", "tg://telegram.org").replace("tg:share", "tg://telegram.org");
data = Uri.parse(url);
message = data.getQueryParameter("url");
if (message == null) {
message = "";
}
if (data.getQueryParameter("text") != null) {
if (message.length() > 0) {
hasUrl = true;
message += "\n";
2019-12-31 14:08:08 +01:00
}
2020-08-15 23:06:36 +02:00
message += data.getQueryParameter("text");
}
if (message.length() > 4096 * 4) {
message = message.substring(0, 4096 * 4);
}
while (message.endsWith("\n")) {
message = message.substring(0, message.length() - 1);
}
} else if (url.startsWith("tg:confirmphone") || url.startsWith("tg://confirmphone")) {
url = url.replace("tg:confirmphone", "tg://telegram.org").replace("tg://confirmphone", "tg://telegram.org");
data = Uri.parse(url);
phone = data.getQueryParameter("phone");
phoneHash = data.getQueryParameter("hash");
} else if (url.startsWith("tg:login") || url.startsWith("tg://login")) {
url = url.replace("tg:login", "tg://telegram.org").replace("tg://login", "tg://telegram.org");
data = Uri.parse(url);
login = data.getQueryParameter("token");
2020-12-23 08:48:30 +01:00
int intCode = Utilities.parseInt(data.getQueryParameter("code"));
if (intCode != 0) {
code = "" + intCode;
}
2020-08-15 23:06:36 +02:00
} else if (url.startsWith("tg:openmessage") || url.startsWith("tg://openmessage")) {
url = url.replace("tg:openmessage", "tg://telegram.org").replace("tg://openmessage", "tg://telegram.org");
data = Uri.parse(url);
String userID = data.getQueryParameter("user_id");
String chatID = data.getQueryParameter("chat_id");
String msgID = data.getQueryParameter("message_id");
if (userID != null) {
try {
2021-12-09 17:28:33 +01:00
push_user_id = Long.parseLong(userID);
2020-08-15 23:06:36 +02:00
} catch (NumberFormatException ignore) {
2019-12-31 14:08:08 +01:00
}
2020-08-15 23:06:36 +02:00
} else if (chatID != null) {
try {
2021-12-09 17:28:33 +01:00
push_chat_id = Long.parseLong(chatID);
2020-08-15 23:06:36 +02:00
} catch (NumberFormatException ignore) {
2019-12-31 14:08:08 +01:00
}
2020-08-15 23:06:36 +02:00
}
if (msgID != null) {
try {
push_msg_id = Integer.parseInt(msgID);
} catch (NumberFormatException ignore) {
2017-03-31 01:58:05 +02:00
}
2020-08-15 23:06:36 +02:00
}
} else if (url.startsWith("tg:passport") || url.startsWith("tg://passport") || url.startsWith("tg:secureid")) {
url = url.replace("tg:passport", "tg://telegram.org").replace("tg://passport", "tg://telegram.org").replace("tg:secureid", "tg://telegram.org");
data = Uri.parse(url);
auth = new HashMap<>();
String scope = data.getQueryParameter("scope");
if (!TextUtils.isEmpty(scope) && scope.startsWith("{") && scope.endsWith("}")) {
auth.put("nonce", data.getQueryParameter("nonce"));
2018-08-27 10:33:11 +02:00
} else {
2020-08-15 23:06:36 +02:00
auth.put("payload", data.getQueryParameter("payload"));
}
auth.put("bot_id", data.getQueryParameter("bot_id"));
auth.put("scope", scope);
auth.put("public_key", data.getQueryParameter("public_key"));
auth.put("callback_url", data.getQueryParameter("callback_url"));
} else if (url.startsWith("tg:setlanguage") || url.startsWith("tg://setlanguage")) {
url = url.replace("tg:setlanguage", "tg://telegram.org").replace("tg://setlanguage", "tg://telegram.org");
data = Uri.parse(url);
lang = data.getQueryParameter("lang");
} else if (url.startsWith("tg:addtheme") || url.startsWith("tg://addtheme")) {
url = url.replace("tg:addtheme", "tg://telegram.org").replace("tg://addtheme", "tg://telegram.org");
data = Uri.parse(url);
theme = data.getQueryParameter("slug");
} else if (url.startsWith("tg:settings") || url.startsWith("tg://settings")) {
if (url.contains("themes")) {
open_settings = 2;
} else if (url.contains("devices")) {
open_settings = 3;
} else if (url.contains("folders")) {
open_settings = 4;
} else if (url.contains("change_number")) {
open_settings = 5;
2023-03-18 14:33:38 +01:00
} else if (url.contains("?enablelogs")) {
open_settings = 7;
} else if (url.contains("?sendlogs")) {
open_settings = 8;
} else if (url.contains("?disablelogs")) {
open_settings = 9;
2020-09-30 15:48:47 +02:00
} else {
open_settings = 1;
}
2020-10-05 00:13:31 +02:00
} else if ((url.startsWith("tg:search") || url.startsWith("tg://search"))) {
2020-09-30 15:48:47 +02:00
url = url.replace("tg:search", "tg://telegram.org").replace("tg://search", "tg://telegram.org");
data = Uri.parse(url);
searchQuery = data.getQueryParameter("query");
if (searchQuery != null) {
searchQuery = searchQuery.trim();
} else {
searchQuery = "";
}
2020-10-05 00:13:31 +02:00
} else if ((url.startsWith("tg:calllog") || url.startsWith("tg://calllog"))) {
2020-09-30 15:48:47 +02:00
showCallLog = true;
2020-10-05 00:13:31 +02:00
} else if ((url.startsWith("tg:call") || url.startsWith("tg://call"))) {
2020-09-30 15:48:47 +02:00
if (UserConfig.getInstance(currentAccount).isClientActivated()) {
final String extraForceCall = "extra_force_call";
if (ContactsController.getInstance(currentAccount).contactsLoaded || intent.hasExtra(extraForceCall)) {
final String callFormat = data.getQueryParameter("format");
final String callUserName = data.getQueryParameter("name");
final String callPhone = data.getQueryParameter("phone");
final List<TLRPC.TL_contact> contacts = findContacts(callUserName, callPhone, false);
2020-10-05 00:13:31 +02:00
if (contacts.isEmpty() && callPhone != null) {
newContactName = callUserName;
newContactPhone = callPhone;
newContactAlert = true;
} else {
if (contacts.size() == 1) {
push_user_id = contacts.get(0).user_id;
}
2020-09-30 15:48:47 +02:00
2020-10-05 00:13:31 +02:00
if (push_user_id == 0) {
callSearchQuery = callUserName != null ? callUserName : "";
}
2020-09-30 15:48:47 +02:00
2020-10-05 00:13:31 +02:00
if ("video".equalsIgnoreCase(callFormat)) {
videoCallUser = true;
} else {
audioCallUser = true;
}
2020-09-30 15:48:47 +02:00
2020-10-05 00:13:31 +02:00
needCallAlert = true;
}
2020-09-30 15:48:47 +02:00
} else {
final Intent copyIntent = new Intent(intent);
copyIntent.removeExtra(EXTRA_ACTION_TOKEN);
copyIntent.putExtra(extraForceCall, true);
ContactsLoadingObserver.observe((contactsLoaded) -> handleIntent(copyIntent, true, false, false), 1000);
}
2020-08-15 23:06:36 +02:00
}
2020-10-05 00:13:31 +02:00
} else if ((url.startsWith("tg:scanqr") || url.startsWith("tg://scanqr"))) {
2020-09-30 15:48:47 +02:00
scanQr = true;
2020-10-05 00:13:31 +02:00
} else if ((url.startsWith("tg:addcontact") || url.startsWith("tg://addcontact"))) {
2020-09-30 15:48:47 +02:00
url = url.replace("tg:addcontact", "tg://telegram.org").replace("tg://addcontact", "tg://telegram.org");
data = Uri.parse(url);
newContactName = data.getQueryParameter("name");
newContactPhone = data.getQueryParameter("phone");
newContact = true;
2020-08-15 23:06:36 +02:00
} else {
unsupportedUrl = url.replace("tg://", "").replace("tg:", "");
int index;
if ((index = unsupportedUrl.indexOf('?')) >= 0) {
unsupportedUrl = unsupportedUrl.substring(0, index);
2018-07-30 04:07:02 +02:00
}
}
2020-08-15 23:06:36 +02:00
break;
}
}
2020-08-15 23:06:36 +02:00
}
2020-09-30 15:48:47 +02:00
if (intent.hasExtra(EXTRA_ACTION_TOKEN)) {
final boolean success = UserConfig.getInstance(currentAccount).isClientActivated() && "tg".equals(scheme) && unsupportedUrl == null;
2020-12-23 08:48:30 +01:00
final Action assistAction = new AssistActionBuilder()
2020-09-30 15:48:47 +02:00
.setActionToken(intent.getStringExtra(EXTRA_ACTION_TOKEN))
.setActionStatus(success ? Action.Builder.STATUS_TYPE_COMPLETED : Action.Builder.STATUS_TYPE_FAILED)
.build();
2021-06-25 02:43:10 +02:00
FirebaseUserActions.getInstance(this).end(assistAction);
2020-09-30 15:48:47 +02:00
intent.removeExtra(EXTRA_ACTION_TOKEN);
}
2020-08-15 23:06:36 +02:00
if (code != null || UserConfig.getInstance(currentAccount).isClientActivated()) {
if (phone != null || phoneHash != null) {
2022-12-30 13:32:20 +01:00
AlertDialog cancelDeleteProgressDialog = new AlertDialog(LaunchActivity.this, AlertDialog.ALERT_TYPE_SPINNER);
2022-03-11 17:49:54 +01:00
cancelDeleteProgressDialog.setCanCancel(false);
cancelDeleteProgressDialog.show();
TLRPC.TL_account_sendConfirmPhoneCode req = new TLRPC.TL_account_sendConfirmPhoneCode();
req.hash = phoneHash;
req.settings = new TLRPC.TL_codeSettings();
req.settings.allow_flashcall = false;
2023-02-03 20:11:36 +01:00
req.settings.allow_app_hash = req.settings.allow_firebase = PushListenerController.GooglePushListenerServiceProvider.INSTANCE.hasServices();
2022-03-11 17:49:54 +01:00
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("mainconfig", Activity.MODE_PRIVATE);
if (req.settings.allow_app_hash) {
preferences.edit().putString("sms_hash", BuildVars.SMS_HASH).apply();
} else {
preferences.edit().remove("sms_hash").apply();
}
Bundle params = new Bundle();
params.putString("phone", phone);
String finalPhone = phone;
ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
cancelDeleteProgressDialog.dismiss();
if (error == null) {
presentFragment(new LoginActivity().cancelAccountDeletion(finalPhone, params, (TLRPC.TL_auth_sentCode) response));
} else {
AlertsCreator.processError(currentAccount, error, getActionBarLayout().getLastFragment(), req);
}
}), ConnectionsManager.RequestFlagFailOnServerErrors);
2022-12-06 20:13:44 +01:00
} else if (username != null || group != null || sticker != null || emoji != null || contactToken != null || message != null || game != null || voicechat != null || auth != null || unsupportedUrl != null || lang != null || code != null || wallPaper != null || inputInvoiceSlug != null || channelId != null || theme != null || login != null) {
2020-08-15 23:06:36 +02:00
if (message != null && message.startsWith("@")) {
message = " " + message;
}
2023-03-08 08:27:18 +01:00
runLinkRequest(intentAccount[0], username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, login, wallPaper, inputInvoiceSlug, theme, voicechat, livestream, 0, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, botAppMaybe, startApp, progress);
2020-08-15 23:06:36 +02:00
} else {
try (Cursor cursor = getContentResolver().query(intent.getData(), null, null, null, null)) {
if (cursor != null) {
if (cursor.moveToFirst()) {
int accountId = Utilities.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.RawContacts.ACCOUNT_NAME)));
for (int a = 0; a < UserConfig.MAX_ACCOUNT_COUNT; a++) {
if (UserConfig.getInstance(a).getClientUserId() == accountId) {
intentAccount[0] = a;
switchToAccount(intentAccount[0], true);
break;
2020-08-14 18:58:22 +02:00
}
2018-07-30 04:07:02 +02:00
}
2021-09-20 07:54:41 +02:00
long userId = cursor.getLong(cursor.getColumnIndex(ContactsContract.Data.DATA4));
2020-08-15 23:06:36 +02:00
NotificationCenter.getInstance(intentAccount[0]).postNotificationName(NotificationCenter.closeChats);
push_user_id = userId;
String mimeType = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.MIMETYPE));
if (TextUtils.equals(mimeType, "vnd.android.cursor.item/vnd.org.telegram.messenger.android.call")) {
audioCallUser = true;
} else if (TextUtils.equals(mimeType, "vnd.android.cursor.item/vnd.org.telegram.messenger.android.call.video")) {
videoCallUser = true;
}
}
2018-07-30 04:07:02 +02:00
}
2020-08-15 23:06:36 +02:00
} catch (Exception e) {
FileLog.e(e);
}
}
}
}
2020-08-15 23:06:36 +02:00
} else if (intent.getAction().equals("org.telegram.messenger.OPEN_ACCOUNT")) {
open_settings = 1;
} else if (intent.getAction().equals("new_dialog")) {
open_new_dialog = 1;
} else if (intent.getAction().startsWith("com.tmessages.openchat")) {
2022-08-12 17:23:51 +02:00
// Integer chatIdInt = intent.getIntExtra("chatId", 0);
long chatId = intent.getLongExtra("chatId", 0);
// Integer userIdInt = intent.getIntExtra("userId", 0);
long userId = intent.getLongExtra("userId", 0);
2020-08-15 23:06:36 +02:00
int encId = intent.getIntExtra("encId", 0);
2021-02-23 12:53:38 +01:00
int widgetId = intent.getIntExtra("appWidgetId", 0);
2022-11-05 13:34:47 +01:00
int topicId = intent.getIntExtra("topicId", 0);
2021-02-23 12:53:38 +01:00
if (widgetId != 0) {
open_settings = 6;
open_widget_edit = widgetId;
open_widget_edit_type = intent.getIntExtra("appWidgetType", 0);
2020-08-15 23:06:36 +02:00
} else {
2021-02-23 12:53:38 +01:00
if (push_msg_id == 0) {
push_msg_id = intent.getIntExtra("message_id", 0);
}
if (chatId != 0) {
NotificationCenter.getInstance(intentAccount[0]).postNotificationName(NotificationCenter.closeChats);
push_chat_id = chatId;
2022-11-05 13:34:47 +01:00
push_topic_id = topicId;
2021-02-23 12:53:38 +01:00
} else if (userId != 0) {
NotificationCenter.getInstance(intentAccount[0]).postNotificationName(NotificationCenter.closeChats);
push_user_id = userId;
} else if (encId != 0) {
NotificationCenter.getInstance(intentAccount[0]).postNotificationName(NotificationCenter.closeChats);
push_enc_id = encId;
} else {
showDialogsList = true;
}
2020-08-15 23:06:36 +02:00
}
} else if (intent.getAction().equals("com.tmessages.openplayer")) {
showPlayer = true;
} else if (intent.getAction().equals("org.tmessages.openlocations")) {
showLocations = true;
2020-12-23 08:48:30 +01:00
} else if (action.equals("voip_chat")) {
showGroupVoip = true;
}
}
2020-08-15 23:06:36 +02:00
}
if (UserConfig.getInstance(currentAccount).isClientActivated()) {
2020-09-30 15:48:47 +02:00
if (searchQuery != null) {
final BaseFragment lastFragment = actionBarLayout.getLastFragment();
if (lastFragment instanceof DialogsActivity) {
final DialogsActivity dialogsActivity = (DialogsActivity) lastFragment;
if (dialogsActivity.isMainDialogList()) {
if (dialogsActivity.getFragmentView() != null) {
dialogsActivity.search(searchQuery, true);
} else {
dialogsActivity.setInitialSearchString(searchQuery);
}
}
} else {
showDialogsList = true;
}
}
2020-08-15 23:06:36 +02:00
if (push_user_id != 0) {
2020-09-30 15:48:47 +02:00
if (audioCallUser || videoCallUser) {
if (needCallAlert) {
final BaseFragment lastFragment = actionBarLayout.getLastFragment();
if (lastFragment != null) {
AlertsCreator.createCallDialogAlert(lastFragment, lastFragment.getMessagesController().getUser(push_user_id), videoCallUser);
}
} else {
2021-03-19 11:25:58 +01:00
VoIPPendingCall.startOrSchedule(this, push_user_id, videoCallUser, AccountInstance.getInstance(intentAccount[0]));
2020-09-30 15:48:47 +02:00
}
2020-08-15 23:06:36 +02:00
} else {
2019-01-23 18:03:33 +01:00
Bundle args = new Bundle();
2021-09-20 07:54:41 +02:00
args.putLong("user_id", push_user_id);
2020-08-15 23:06:36 +02:00
if (push_msg_id != 0) {
2019-01-23 18:03:33 +01:00
args.putInt("message_id", push_msg_id);
2020-08-15 23:06:36 +02:00
}
2019-01-23 18:03:33 +01:00
if (mainFragmentsStack.isEmpty() || MessagesController.getInstance(intentAccount[0]).checkCanOpenChat(args, mainFragmentsStack.get(mainFragmentsStack.size() - 1))) {
ChatActivity fragment = new ChatActivity(args);
2022-11-05 13:34:47 +01:00
if (actionBarLayout.presentFragment(new INavigationLayout.NavigationParams(fragment).setNoAnimation(true))) {
2019-01-23 18:03:33 +01:00
pushOpened = true;
2021-02-23 12:53:38 +01:00
drawerLayoutContainer.closeDrawer();
2019-01-23 18:03:33 +01:00
}
}
2020-08-15 23:06:36 +02:00
}
} else if (push_chat_id != 0) {
Bundle args = new Bundle();
2021-09-20 07:54:41 +02:00
args.putLong("chat_id", push_chat_id);
2021-02-23 12:53:38 +01:00
if (push_msg_id != 0) {
2020-08-15 23:06:36 +02:00
args.putInt("message_id", push_msg_id);
2021-02-23 12:53:38 +01:00
}
2020-08-15 23:06:36 +02:00
if (mainFragmentsStack.isEmpty() || MessagesController.getInstance(intentAccount[0]).checkCanOpenChat(args, mainFragmentsStack.get(mainFragmentsStack.size() - 1))) {
2016-03-16 13:26:32 +01:00
ChatActivity fragment = new ChatActivity(args);
2022-11-05 13:34:47 +01:00
if (push_topic_id > 0) {
TLRPC.TL_forumTopic topic = MessagesController.getInstance(currentAccount).getTopicsController().findTopic(push_chat_id, push_topic_id);
2023-02-03 20:11:36 +01:00
FileLog.d(push_chat_id + " " + push_topic_id + " TL_forumTopic " + topic);
2022-11-05 13:34:47 +01:00
if (topic != null) {
TLRPC.Message message = topic.topicStartMessage;
ArrayList<MessageObject> messageObjects = new ArrayList<>();
TLRPC.Chat chatLocal = MessagesController.getInstance(currentAccount).getChat(push_chat_id);
messageObjects.add(new MessageObject(currentAccount, message, false, false));
fragment.setThreadMessages(messageObjects, chatLocal, topic.id, topic.read_inbox_max_id, topic.read_outbox_max_id, topic);
2023-02-03 20:11:36 +01:00
} else {
boolean finalIsNew = isNew;
MessagesController.getInstance(currentAccount).getTopicsController().loadTopic(push_chat_id, push_topic_id, () -> {
handleIntent(intent, finalIsNew, restore, fromPassword, progress);
});
return true;
2022-11-05 13:34:47 +01:00
}
}
if (actionBarLayout.presentFragment(new INavigationLayout.NavigationParams(fragment).setNoAnimation(true))) {
2016-03-16 13:26:32 +01:00
pushOpened = true;
2021-02-23 12:53:38 +01:00
drawerLayoutContainer.closeDrawer();
2016-03-16 13:26:32 +01:00
}
2020-08-15 23:06:36 +02:00
}
} else if (push_enc_id != 0) {
Bundle args = new Bundle();
args.putInt("enc_id", push_enc_id);
ChatActivity fragment = new ChatActivity(args);
2022-11-05 13:34:47 +01:00
if (actionBarLayout.presentFragment(new INavigationLayout.NavigationParams(fragment).setNoAnimation(true))) {
2020-08-15 23:06:36 +02:00
pushOpened = true;
2021-02-23 12:53:38 +01:00
drawerLayoutContainer.closeDrawer();
2020-08-15 23:06:36 +02:00
}
} else if (showDialogsList) {
if (!AndroidUtilities.isTablet()) {
actionBarLayout.removeAllFragments();
} else {
2022-11-05 13:34:47 +01:00
if (!layersActionBarLayout.getFragmentStack().isEmpty()) {
for (int a = 0; a < layersActionBarLayout.getFragmentStack().size() - 1; a++) {
layersActionBarLayout.removeFragmentFromStack(layersActionBarLayout.getFragmentStack().get(0));
2020-08-15 23:06:36 +02:00
a--;
}
2020-08-15 23:06:36 +02:00
layersActionBarLayout.closeLastFragment(false);
2015-02-01 19:51:02 +01:00
}
2020-08-15 23:06:36 +02:00
}
pushOpened = false;
isNew = false;
} else if (showPlayer) {
2022-11-05 13:34:47 +01:00
if (!actionBarLayout.getFragmentStack().isEmpty()) {
BaseFragment fragment = actionBarLayout.getFragmentStack().get(0);
2021-09-20 07:54:41 +02:00
fragment.showDialog(new AudioPlayerAlert(this, null));
2020-08-15 23:06:36 +02:00
}
pushOpened = false;
} else if (showLocations) {
2022-11-05 13:34:47 +01:00
if (!actionBarLayout.getFragmentStack().isEmpty()) {
BaseFragment fragment = actionBarLayout.getFragmentStack().get(0);
2020-08-15 23:06:36 +02:00
fragment.showDialog(new SharingLocationsAlert(this, info -> {
intentAccount[0] = info.messageObject.currentAccount;
switchToAccount(intentAccount[0], true);
LocationActivity locationActivity = new LocationActivity(2);
locationActivity.setMessageObject(info.messageObject);
final long dialog_id = info.messageObject.getDialogId();
2020-09-30 15:48:47 +02:00
locationActivity.setDelegate((location, live, notify, scheduleDate) -> SendMessagesHelper.getInstance(intentAccount[0]).sendMessage(location, dialog_id, null, null, null, null, notify, scheduleDate));
2020-08-15 23:06:36 +02:00
presentFragment(locationActivity);
2021-09-20 07:54:41 +02:00
}, null));
2020-08-15 23:06:36 +02:00
}
pushOpened = false;
2021-01-28 15:15:51 +01:00
} else if (exportingChatUri != null) {
runImportRequest(exportingChatUri, documentsUrisArray);
2021-06-25 02:43:10 +02:00
} else if (importingStickers != null) {
AndroidUtilities.runOnUIThread(() -> {
2022-11-05 13:34:47 +01:00
if (!actionBarLayout.getFragmentStack().isEmpty()) {
BaseFragment fragment = actionBarLayout.getFragmentStack().get(0);
2021-09-20 07:54:41 +02:00
fragment.showDialog(new StickersAlert(this, importingStickersSoftware, importingStickers, importingStickersEmoji, null));
2021-06-25 02:43:10 +02:00
}
});
pushOpened = false;
2020-08-15 23:06:36 +02:00
} else if (videoPath != null || photoPathsArray != null || sendingText != null || documentsPathsArray != null || contactsToSend != null || documentsUrisArray != null) {
if (!AndroidUtilities.isTablet()) {
NotificationCenter.getInstance(intentAccount[0]).postNotificationName(NotificationCenter.closeChats);
}
if (dialogId == 0) {
2021-01-28 15:15:51 +01:00
openDialogsToSend(false);
2015-10-29 18:10:07 +01:00
pushOpened = true;
2020-08-15 23:06:36 +02:00
} else {
2022-11-05 13:34:47 +01:00
ArrayList<MessagesStorage.TopicKey> dids = new ArrayList<>();
dids.add(MessagesStorage.TopicKey.of(dialogId, 0));
2023-02-06 12:08:24 +01:00
didSelectDialogs(null, dids, null, false, null);
2020-08-15 23:06:36 +02:00
}
2023-03-18 14:33:38 +01:00
} else if (open_settings == 7 || open_settings == 8 || open_settings == 9) {
CharSequence bulletinText = null;
boolean can = BuildVars.DEBUG_PRIVATE_VERSION; // TODO: check source
if (!can) {
bulletinText = "Locked in release.";
} else if (open_settings == 7) {
bulletinText = "Logs enabled.";
ApplicationLoader.applicationContext.getSharedPreferences("systemConfig", Context.MODE_PRIVATE).edit().putBoolean("logsEnabled", BuildVars.LOGS_ENABLED = true).commit();
} else if (open_settings == 8) {
ProfileActivity.sendLogs(LaunchActivity.this, false);
} else if (open_settings == 9) {
bulletinText = "Logs disabled.";
ApplicationLoader.applicationContext.getSharedPreferences("systemConfig", Context.MODE_PRIVATE).edit().putBoolean("logsEnabled", BuildVars.LOGS_ENABLED = false).commit();
}
if (bulletinText != null) {
BaseFragment fragment = actionBarLayout.getLastFragment();
if (fragment != null) {
BulletinFactory.of(fragment).createSimpleBulletin(R.raw.info, bulletinText).show();
}
}
2020-08-15 23:06:36 +02:00
} else if (open_settings != 0) {
BaseFragment fragment;
boolean closePrevious = false;
if (open_settings == 1) {
Bundle args = new Bundle();
2021-09-20 07:54:41 +02:00
args.putLong("user_id", UserConfig.getInstance(currentAccount).clientUserId);
2020-08-15 23:06:36 +02:00
fragment = new ProfileActivity(args);
} else if (open_settings == 2) {
fragment = new ThemeActivity(ThemeActivity.THEME_TYPE_BASIC);
} else if (open_settings == 3) {
fragment = new SessionsActivity(0);
} else if (open_settings == 4) {
fragment = new FiltersSetupActivity();
} else if (open_settings == 5) {
fragment = new ActionIntroActivity(ActionIntroActivity.ACTION_TYPE_CHANGE_PHONE_NUMBER);
closePrevious = true;
2021-02-23 12:53:38 +01:00
} else if (open_settings == 6) {
fragment = new EditWidgetActivity(open_widget_edit_type, open_widget_edit);
2020-08-15 23:06:36 +02:00
} else {
fragment = null;
2017-03-31 01:58:05 +02:00
}
2020-08-15 23:06:36 +02:00
boolean closePreviousFinal = closePrevious;
2021-02-23 12:53:38 +01:00
if (open_settings == 6) {
2022-11-05 13:34:47 +01:00
actionBarLayout.presentFragment(new INavigationLayout.NavigationParams(fragment).setNoAnimation(true));
2021-02-23 12:53:38 +01:00
} else {
AndroidUtilities.runOnUIThread(() -> presentFragment(fragment, closePreviousFinal, false));
}
2020-08-15 23:06:36 +02:00
if (AndroidUtilities.isTablet()) {
2022-11-05 13:34:47 +01:00
actionBarLayout.rebuildFragments(INavigationLayout.REBUILD_FLAG_REBUILD_LAST);
rightActionBarLayout.rebuildFragments(INavigationLayout.REBUILD_FLAG_REBUILD_LAST);
2020-08-15 23:06:36 +02:00
drawerLayoutContainer.setAllowOpenDrawer(false, false);
} else {
drawerLayoutContainer.setAllowOpenDrawer(true, false);
}
pushOpened = true;
} else if (open_new_dialog != 0) {
Bundle args = new Bundle();
args.putBoolean("destroyAfterSelect", true);
2022-11-05 13:34:47 +01:00
actionBarLayout.presentFragment(new INavigationLayout.NavigationParams(new ContactsActivity(args)).setNoAnimation(true));
2020-08-15 23:06:36 +02:00
if (AndroidUtilities.isTablet()) {
2022-11-05 13:34:47 +01:00
actionBarLayout.rebuildFragments(INavigationLayout.REBUILD_FLAG_REBUILD_LAST);
rightActionBarLayout.rebuildFragments(INavigationLayout.REBUILD_FLAG_REBUILD_LAST);
2020-08-15 23:06:36 +02:00
drawerLayoutContainer.setAllowOpenDrawer(false, false);
} else {
drawerLayoutContainer.setAllowOpenDrawer(true, false);
}
pushOpened = true;
2020-09-30 15:48:47 +02:00
} else if (callSearchQuery != null) {
final Bundle args = new Bundle();
args.putBoolean("destroyAfterSelect", true);
args.putBoolean("returnAsResult", true);
args.putBoolean("onlyUsers", true);
args.putBoolean("allowSelf", false);
final ContactsActivity contactsFragment = new ContactsActivity(args);
contactsFragment.setInitialSearchString(callSearchQuery);
final boolean videoCall = videoCallUser;
contactsFragment.setDelegate((user, param, activity) -> {
final TLRPC.UserFull userFull = MessagesController.getInstance(currentAccount).getUserFull(user.id);
2021-03-19 11:25:58 +01:00
VoIPHelper.startCall(user, videoCall, userFull != null && userFull.video_calls_available, LaunchActivity.this, userFull, AccountInstance.getInstance(intentAccount[0]));
2020-09-30 15:48:47 +02:00
});
2022-11-05 13:34:47 +01:00
actionBarLayout.presentFragment(new INavigationLayout.NavigationParams(contactsFragment).setRemoveLast(actionBarLayout.getLastFragment() instanceof ContactsActivity));
2020-09-30 15:48:47 +02:00
if (AndroidUtilities.isTablet()) {
2022-11-05 13:34:47 +01:00
actionBarLayout.rebuildFragments(INavigationLayout.REBUILD_FLAG_REBUILD_LAST);
rightActionBarLayout.rebuildFragments(INavigationLayout.REBUILD_FLAG_REBUILD_LAST);
2020-09-30 15:48:47 +02:00
drawerLayoutContainer.setAllowOpenDrawer(false, false);
} else {
drawerLayoutContainer.setAllowOpenDrawer(true, false);
}
pushOpened = true;
} else if (scanQr) {
ActionIntroActivity fragment = new ActionIntroActivity(ActionIntroActivity.ACTION_TYPE_QR_LOGIN);
fragment.setQrLoginDelegate(code -> {
2022-12-30 13:32:20 +01:00
AlertDialog progressDialog = new AlertDialog(LaunchActivity.this, AlertDialog.ALERT_TYPE_SPINNER);
2022-03-11 17:49:54 +01:00
progressDialog.setCanCancel(false);
2020-09-30 15:48:47 +02:00
progressDialog.show();
byte[] token = Base64.decode(code.substring("tg://login?token=".length()), Base64.URL_SAFE);
TLRPC.TL_auth_acceptLoginToken req = new TLRPC.TL_auth_acceptLoginToken();
req.token = token;
ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
try {
progressDialog.dismiss();
} catch (Exception ignore) {
}
if (!(response instanceof TLRPC.TL_authorization)) {
AndroidUtilities.runOnUIThread(() -> AlertsCreator.showSimpleAlert(fragment, LocaleController.getString("AuthAnotherClient", R.string.AuthAnotherClient), LocaleController.getString("ErrorOccurred", R.string.ErrorOccurred) + "\n" + error.text));
}
}));
});
2022-11-05 13:34:47 +01:00
actionBarLayout.presentFragment(new INavigationLayout.NavigationParams(fragment).setNoAnimation(true));
2020-09-30 15:48:47 +02:00
if (AndroidUtilities.isTablet()) {
2022-11-05 13:34:47 +01:00
actionBarLayout.rebuildFragments(INavigationLayout.REBUILD_FLAG_REBUILD_LAST);
rightActionBarLayout.rebuildFragments(INavigationLayout.REBUILD_FLAG_REBUILD_LAST);
2020-09-30 15:48:47 +02:00
drawerLayoutContainer.setAllowOpenDrawer(false, false);
} else {
drawerLayoutContainer.setAllowOpenDrawer(true, false);
}
pushOpened = true;
} else if (newContact) {
2022-12-30 13:32:20 +01:00
final NewContactBottomSheet fragment = new NewContactBottomSheet(actionBarLayout.getLastFragment(), this);
2020-09-30 15:48:47 +02:00
if (newContactName != null) {
final String[] names = newContactName.split(" ", 2);
fragment.setInitialName(names[0], names.length > 1 ? names[1] : null);
}
if (newContactPhone != null) {
2020-10-02 23:48:16 +02:00
fragment.setInitialPhoneNumber(PhoneFormat.stripExceptNumbers(newContactPhone, true), false);
2020-09-30 15:48:47 +02:00
}
2022-12-30 13:32:20 +01:00
fragment.show();
// actionBarLayout.presentFragment(new INavigationLayout.NavigationParams(fragment).setNoAnimation(true));
2020-09-30 15:48:47 +02:00
if (AndroidUtilities.isTablet()) {
2022-11-05 13:34:47 +01:00
actionBarLayout.rebuildFragments(INavigationLayout.REBUILD_FLAG_REBUILD_LAST);
rightActionBarLayout.rebuildFragments(INavigationLayout.REBUILD_FLAG_REBUILD_LAST);
2020-09-30 15:48:47 +02:00
drawerLayoutContainer.setAllowOpenDrawer(false, false);
} else {
drawerLayoutContainer.setAllowOpenDrawer(true, false);
}
pushOpened = true;
2020-12-23 08:48:30 +01:00
} else if (showGroupVoip) {
2021-04-14 03:44:46 +02:00
GroupCallActivity.create(this, AccountInstance.getInstance(currentAccount), null, null, false, null);
2020-12-23 08:48:30 +01:00
if (GroupCallActivity.groupCallInstance != null) {
GroupCallActivity.groupCallUiVisible = true;
}
2020-10-05 00:13:31 +02:00
} else if (newContactAlert) {
final BaseFragment lastFragment = actionBarLayout.getLastFragment();
if (lastFragment != null && lastFragment.getParentActivity() != null) {
final String finalNewContactName = newContactName;
2022-12-30 13:32:20 +01:00
final String finalNewContactPhone = NewContactBottomSheet.getPhoneNumber(this, UserConfig.getInstance(currentAccount).getCurrentUser(), newContactPhone, false);
2020-10-05 00:13:31 +02:00
final AlertDialog newContactAlertDialog = new AlertDialog.Builder(lastFragment.getParentActivity())
.setTitle(LocaleController.getString("NewContactAlertTitle", R.string.NewContactAlertTitle))
.setMessage(AndroidUtilities.replaceTags(LocaleController.formatString("NewContactAlertMessage", R.string.NewContactAlertMessage, PhoneFormat.getInstance().format(finalNewContactPhone))))
.setPositiveButton(LocaleController.getString("NewContactAlertButton", R.string.NewContactAlertButton), (d, i) -> {
2022-12-30 13:32:20 +01:00
final NewContactBottomSheet fragment = new NewContactBottomSheet(lastFragment, this);
2020-10-05 00:13:31 +02:00
fragment.setInitialPhoneNumber(finalNewContactPhone, false);
if (finalNewContactName != null) {
final String[] names = finalNewContactName.split(" ", 2);
fragment.setInitialName(names[0], names.length > 1 ? names[1] : null);
}
2022-12-30 13:32:20 +01:00
fragment.show();
//lastFragment.presentFragment(fragment);
2020-10-05 00:13:31 +02:00
})
.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null)
.create();
lastFragment.showDialog(newContactAlertDialog);
pushOpened = true;
}
2020-09-30 15:48:47 +02:00
} else if (showCallLog) {
2022-11-05 13:34:47 +01:00
actionBarLayout.presentFragment(new INavigationLayout.NavigationParams(new CallLogActivity()).setNoAnimation(true));
2020-09-30 15:48:47 +02:00
if (AndroidUtilities.isTablet()) {
2022-11-05 13:34:47 +01:00
actionBarLayout.rebuildFragments(INavigationLayout.REBUILD_FLAG_REBUILD_LAST);
rightActionBarLayout.rebuildFragments(INavigationLayout.REBUILD_FLAG_REBUILD_LAST);
2020-09-30 15:48:47 +02:00
drawerLayoutContainer.setAllowOpenDrawer(false, false);
} else {
drawerLayoutContainer.setAllowOpenDrawer(true, false);
}
pushOpened = true;
2014-11-19 02:23:46 +01:00
}
2020-08-15 23:06:36 +02:00
}
if (!pushOpened && !isNew) {
if (AndroidUtilities.isTablet()) {
if (!UserConfig.getInstance(currentAccount).isClientActivated()) {
2022-11-05 13:34:47 +01:00
if (layersActionBarLayout.getFragmentStack().isEmpty()) {
2023-02-27 11:35:15 +01:00
layersActionBarLayout.addFragmentToStack(getClientNotActivatedFragment(), INavigationLayout.FORCE_NOT_ATTACH_VIEW);
2020-08-15 23:06:36 +02:00
drawerLayoutContainer.setAllowOpenDrawer(false, false);
2014-09-28 15:37:26 +02:00
}
2015-01-02 23:15:07 +01:00
} else {
2022-11-05 13:34:47 +01:00
if (actionBarLayout.getFragmentStack().isEmpty()) {
2020-08-15 23:06:36 +02:00
DialogsActivity dialogsActivity = new DialogsActivity(null);
dialogsActivity.setSideMenu(sideMenu);
2020-09-30 15:48:47 +02:00
if (searchQuery != null) {
dialogsActivity.setInitialSearchString(searchQuery);
}
2023-02-27 11:35:15 +01:00
actionBarLayout.addFragmentToStack(dialogsActivity, INavigationLayout.FORCE_NOT_ATTACH_VIEW);
2020-08-15 23:06:36 +02:00
drawerLayoutContainer.setAllowOpenDrawer(true, false);
2015-01-02 23:15:07 +01:00
}
2014-09-28 15:37:26 +02:00
}
2020-08-15 23:06:36 +02:00
} else {
2022-11-05 13:34:47 +01:00
if (actionBarLayout.getFragmentStack().isEmpty()) {
2020-08-15 23:06:36 +02:00
if (!UserConfig.getInstance(currentAccount).isClientActivated()) {
2023-02-27 11:35:15 +01:00
actionBarLayout.addFragmentToStack(getClientNotActivatedFragment(), INavigationLayout.FORCE_NOT_ATTACH_VIEW);
2020-08-15 23:06:36 +02:00
drawerLayoutContainer.setAllowOpenDrawer(false, false);
} else {
DialogsActivity dialogsActivity = new DialogsActivity(null);
dialogsActivity.setSideMenu(sideMenu);
2020-09-30 15:48:47 +02:00
if (searchQuery != null) {
dialogsActivity.setInitialSearchString(searchQuery);
}
2023-02-27 11:35:15 +01:00
actionBarLayout.addFragmentToStack(dialogsActivity, INavigationLayout.FORCE_NOT_ATTACH_VIEW);
2020-08-15 23:06:36 +02:00
drawerLayoutContainer.setAllowOpenDrawer(true, false);
}
}
}
2023-02-27 11:35:15 +01:00
actionBarLayout.rebuildFragments(INavigationLayout.REBUILD_FLAG_REBUILD_LAST);
2020-08-15 23:06:36 +02:00
if (AndroidUtilities.isTablet()) {
2022-11-05 13:34:47 +01:00
layersActionBarLayout.rebuildFragments(INavigationLayout.REBUILD_FLAG_REBUILD_LAST);
rightActionBarLayout.rebuildFragments(INavigationLayout.REBUILD_FLAG_REBUILD_LAST);
2020-08-14 18:58:22 +02:00
}
2020-08-15 23:06:36 +02:00
}
if (isVoipIntent) {
2020-10-31 22:13:37 +01:00
VoIPFragment.show(this, intentAccount[0]);
}
2021-07-15 16:24:57 +02:00
if (!showGroupVoip && (intent == null || !Intent.ACTION_MAIN.equals(intent.getAction())) && GroupCallActivity.groupCallInstance != null) {
2021-03-19 11:25:58 +01:00
GroupCallActivity.groupCallInstance.dismiss();
}
2020-08-15 23:06:36 +02:00
intent.setAction(null);
return pushOpened;
}
2021-07-30 16:49:55 +02:00
public static int getTimestampFromLink(Uri data) {
List<String> segments = data.getPathSegments();
String timestampStr = null;
if (segments.contains("video")) {
timestampStr = data.getQuery();
} else if (data.getQueryParameter("t") != null) {
timestampStr = data.getQueryParameter("t");
}
int videoTimestamp = -1;
if (timestampStr != null) {
try {
videoTimestamp = Integer.parseInt(timestampStr);
} catch (Throwable ignore) {
}
2022-06-21 04:51:00 +02:00
if (videoTimestamp == -1) {
2021-07-30 16:49:55 +02:00
DateFormat dateFormat = new SimpleDateFormat("mm:ss");
Date reference = null;
try {
reference = dateFormat.parse("00:00");
Date date = dateFormat.parse(timestampStr);
videoTimestamp = (int) ((date.getTime() - reference.getTime()) / 1000L);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
return videoTimestamp;
}
2021-01-28 15:15:51 +01:00
private void openDialogsToSend(boolean animated) {
Bundle args = new Bundle();
args.putBoolean("onlySelect", true);
2022-12-06 20:13:44 +01:00
args.putBoolean("canSelectTopics", true);
2023-02-03 20:11:36 +01:00
args.putInt("dialogsType", DialogsActivity.DIALOGS_TYPE_FORWARD);
2021-01-28 15:15:51 +01:00
args.putBoolean("allowSwitchAccount", true);
if (contactsToSend != null) {
if (contactsToSend.size() != 1) {
args.putString("selectAlertString", LocaleController.getString("SendContactToText", R.string.SendMessagesToText));
args.putString("selectAlertStringGroup", LocaleController.getString("SendContactToGroupText", R.string.SendContactToGroupText));
}
} else {
args.putString("selectAlertString", LocaleController.getString("SendMessagesToText", R.string.SendMessagesToText));
args.putString("selectAlertStringGroup", LocaleController.getString("SendMessagesToGroupText", R.string.SendMessagesToGroupText));
}
2022-02-15 21:18:49 +01:00
DialogsActivity fragment = new DialogsActivity(args) {
@Override
public boolean shouldShowNextButton(DialogsActivity dialogsFragment, ArrayList<Long> dids, CharSequence message, boolean param) {
if (exportingChatUri != null) {
return false;
} else {
if (contactsToSend != null && contactsToSend.size() == 1 && !mainFragmentsStack.isEmpty()) {
return true;
} else {
if (dids.size() <= 1) {
if (videoPath != null) {
return true;
} else if (photoPathsArray != null && photoPathsArray.size() > 0) {
return true;
}
}
}
}
return false;
}
};
2021-01-28 15:15:51 +01:00
fragment.setDelegate(this);
boolean removeLast;
if (AndroidUtilities.isTablet()) {
2022-11-05 13:34:47 +01:00
removeLast = layersActionBarLayout.getFragmentStack().size() > 0 && layersActionBarLayout.getFragmentStack().get(layersActionBarLayout.getFragmentStack().size() - 1) instanceof DialogsActivity;
2021-01-28 15:15:51 +01:00
} else {
2022-11-05 13:34:47 +01:00
removeLast = actionBarLayout.getFragmentStack().size() > 1 && actionBarLayout.getFragmentStack().get(actionBarLayout.getFragmentStack().size() - 1) instanceof DialogsActivity;
2021-01-28 15:15:51 +01:00
}
actionBarLayout.presentFragment(fragment, removeLast, !animated, true, false);
if (SecretMediaViewer.hasInstance() && SecretMediaViewer.getInstance().isVisible()) {
SecretMediaViewer.getInstance().closePhoto(false, false);
} else if (PhotoViewer.hasInstance() && PhotoViewer.getInstance().isVisible()) {
PhotoViewer.getInstance().closePhoto(false, true);
} else if (ArticleViewer.hasInstance() && ArticleViewer.getInstance().isVisible()) {
ArticleViewer.getInstance().close(false, true);
}
2021-03-19 11:25:58 +01:00
if (GroupCallActivity.groupCallInstance != null) {
GroupCallActivity.groupCallInstance.dismiss();
}
2021-01-28 15:15:51 +01:00
if (!animated) {
drawerLayoutContainer.setAllowOpenDrawer(false, false);
if (AndroidUtilities.isTablet()) {
2022-11-05 13:34:47 +01:00
actionBarLayout.rebuildFragments(INavigationLayout.REBUILD_FLAG_REBUILD_LAST);
rightActionBarLayout.rebuildFragments(INavigationLayout.REBUILD_FLAG_REBUILD_LAST);
2021-01-28 15:15:51 +01:00
} else {
drawerLayoutContainer.setAllowOpenDrawer(true, false);
}
}
}
2022-12-30 13:32:20 +01:00
private int runCommentRequest(int intentAccount, Runnable dismissLoading, Integer messageId, Integer commentId, Integer threadId, TLRPC.Chat chat) {
return runCommentRequest(intentAccount, dismissLoading, messageId, commentId, threadId, chat, null);
2022-11-06 02:16:18 +01:00
}
2022-12-30 13:32:20 +01:00
private int runCommentRequest(int intentAccount, Runnable dismissLoading, Integer messageId, Integer commentId, Integer threadId, TLRPC.Chat chat, Runnable onOpened) {
2020-09-30 15:48:47 +02:00
if (chat == null) {
return 0;
}
TLRPC.TL_messages_getDiscussionMessage req = new TLRPC.TL_messages_getDiscussionMessage();
req.peer = MessagesController.getInputPeer(chat);
req.msg_id = commentId != null ? messageId : threadId;
return ConnectionsManager.getInstance(intentAccount).sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
boolean chatOpened = false;
if (response instanceof TLRPC.TL_messages_discussionMessage) {
TLRPC.TL_messages_discussionMessage res = (TLRPC.TL_messages_discussionMessage) response;
MessagesController.getInstance(intentAccount).putUsers(res.users, false);
MessagesController.getInstance(intentAccount).putChats(res.chats, false);
ArrayList<MessageObject> arrayList = new ArrayList<>();
for (int a = 0, N = res.messages.size(); a < N; a++) {
arrayList.add(new MessageObject(UserConfig.selectedAccount, res.messages.get(a), true, true));
}
2022-12-07 16:13:09 +01:00
if (!arrayList.isEmpty() || chat.forum && threadId != null && threadId == 1) {
2022-11-05 13:34:47 +01:00
if (chat.forum) {
TLRPC.TL_channels_getForumTopicsByID getForumTopicsByID = new TLRPC.TL_channels_getForumTopicsByID();
getForumTopicsByID.channel = MessagesController.getInstance(currentAccount).getInputChannel(chat.id);
getForumTopicsByID.topics.add(threadId);
ConnectionsManager.getInstance(currentAccount).sendRequest(getForumTopicsByID, (response2, error2) -> AndroidUtilities.runOnUIThread(() -> {
if (error2 == null) {
TLRPC.TL_messages_forumTopics topics = (TLRPC.TL_messages_forumTopics) response2;
SparseArray<TLRPC.Message> messagesMap = new SparseArray<>();
for (int i = 0; i < topics.messages.size(); i++) {
messagesMap.put(topics.messages.get(i).id, topics.messages.get(i));
}
MessagesController.getInstance(currentAccount).putUsers(topics.users, false);
MessagesController.getInstance(currentAccount).putChats(topics.chats, false);
MessagesController.getInstance(currentAccount).getTopicsController().processTopics(chat.id, topics.topics, messagesMap, false, TopicsController.LOAD_TYPE_LOAD_UNKNOWN, -1);
}
TLRPC.TL_forumTopic topic = MessagesController.getInstance(currentAccount).getTopicsController().findTopic(chat.id, threadId);
if (topic != null) {
Bundle args = new Bundle();
2022-12-07 16:13:09 +01:00
args.putLong("chat_id", chat.id);
2022-11-06 02:16:18 +01:00
if (messageId != topic.id) {
args.putInt("message_id", Math.max(1, messageId));
}
2022-11-05 13:34:47 +01:00
ChatActivity chatActivity = new ChatActivity(args);
2022-12-07 16:13:09 +01:00
if (arrayList.isEmpty()) {
TLRPC.Message message = new TLRPC.Message();
message.id = 1;
message.action = new TLRPC.TL_messageActionChannelMigrateFrom();
arrayList.add(new MessageObject(currentAccount, message, false, false));
}
2022-11-06 02:16:18 +01:00
chatActivity.setThreadMessages(arrayList, chat, req.msg_id, topic.read_inbox_max_id, topic.read_outbox_max_id, topic);
2022-11-05 13:34:47 +01:00
if (commentId != null) {
chatActivity.setHighlightMessageId(commentId);
2022-11-06 02:16:18 +01:00
} else if (threadId != null && messageId != topic.id) {
2022-11-05 13:34:47 +01:00
chatActivity.setHighlightMessageId(messageId);
}
presentFragment(chatActivity);
2022-11-06 02:16:18 +01:00
if (onOpened != null) {
onOpened.run();
}
2022-11-05 13:34:47 +01:00
}
}));
chatOpened = true;
} else {
Bundle args = new Bundle();
args.putLong("chat_id", -arrayList.get(0).getDialogId());
args.putInt("message_id", Math.max(1, messageId));
ChatActivity chatActivity = new ChatActivity(args);
chatActivity.setThreadMessages(arrayList, chat, req.msg_id, res.read_inbox_max_id, res.read_outbox_max_id, null);
if (commentId != null) {
chatActivity.setHighlightMessageId(commentId);
} else if (threadId != null) {
chatActivity.setHighlightMessageId(messageId);
}
presentFragment(chatActivity);
chatOpened = true;
2020-09-30 15:48:47 +02:00
}
}
}
if (!chatOpened) {
try {
2021-02-23 12:53:38 +01:00
if (!mainFragmentsStack.isEmpty()) {
BulletinFactory.of(mainFragmentsStack.get(mainFragmentsStack.size() - 1)).createErrorBulletin(LocaleController.getString("ChannelPostDeleted", R.string.ChannelPostDeleted)).show();
}
2020-09-30 15:48:47 +02:00
} catch (Exception e) {
FileLog.e(e);
}
}
try {
2022-12-30 13:32:20 +01:00
if (dismissLoading != null) {
dismissLoading.run();
2022-11-06 02:16:18 +01:00
}
if (onOpened != null) {
onOpened.run();
}
2020-09-30 15:48:47 +02:00
} catch (Exception e) {
FileLog.e(e);
}
}));
}
2021-01-28 15:15:51 +01:00
private void runImportRequest(final Uri importUri,
2022-06-21 04:51:00 +02:00
ArrayList<Uri> documents) {
2021-01-28 15:15:51 +01:00
final int intentAccount = UserConfig.selectedAccount;
2022-12-30 13:32:20 +01:00
final AlertDialog progressDialog = new AlertDialog(this, AlertDialog.ALERT_TYPE_SPINNER);
2021-01-28 15:15:51 +01:00
final int[] requestId = new int[]{0};
Runnable cancelRunnable = null;
String content;
2021-01-28 16:42:39 +01:00
InputStream inputStream = null;
2021-01-28 15:15:51 +01:00
try {
int linesCount = 0;
2021-01-28 16:42:39 +01:00
inputStream = getContentResolver().openInputStream(importUri);
BufferedReader r = new BufferedReader(new InputStreamReader(inputStream));
2021-01-28 15:15:51 +01:00
StringBuilder total = new StringBuilder();
for (String line; (line = r.readLine()) != null && linesCount < 100; ) {
total.append(line).append('\n');
linesCount++;
}
content = total.toString();
} catch (Exception e) {
FileLog.e(e);
return;
2021-01-28 16:42:39 +01:00
} finally {
try {
if (inputStream != null) {
inputStream.close();
}
} catch (Exception e2) {
FileLog.e(e2);
}
2021-01-28 15:15:51 +01:00
}
final TLRPC.TL_messages_checkHistoryImport req = new TLRPC.TL_messages_checkHistoryImport();
req.import_head = content;
requestId[0] = ConnectionsManager.getInstance(intentAccount).sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
if (!LaunchActivity.this.isFinishing()) {
if (response != null && actionBarLayout != null) {
final TLRPC.TL_messages_historyImportParsed res = (TLRPC.TL_messages_historyImportParsed) response;
Bundle args = new Bundle();
args.putBoolean("onlySelect", true);
args.putString("importTitle", res.title);
args.putBoolean("allowSwitchAccount", true);
if (res.pm) {
2023-02-03 20:11:36 +01:00
args.putInt("dialogsType", DialogsActivity.DIALOGS_TYPE_IMPORT_HISTORY_USERS);
2021-01-28 15:15:51 +01:00
} else if (res.group) {
2023-02-03 20:11:36 +01:00
args.putInt("dialogsType", DialogsActivity.DIALOGS_TYPE_IMPORT_HISTORY_GROUPS);
2021-01-28 15:15:51 +01:00
} else {
String uri = importUri.toString();
Set<String> uris = MessagesController.getInstance(intentAccount).exportPrivateUri;
boolean ok = false;
for (String u : uris) {
if (uri.contains(u)) {
2023-02-03 20:11:36 +01:00
args.putInt("dialogsType", DialogsActivity.DIALOGS_TYPE_IMPORT_HISTORY_USERS);
2021-01-28 15:15:51 +01:00
ok = true;
break;
}
}
if (!ok) {
uris = MessagesController.getInstance(intentAccount).exportGroupUri;
for (String u : uris) {
if (uri.contains(u)) {
2023-02-03 20:11:36 +01:00
args.putInt("dialogsType", DialogsActivity.DIALOGS_TYPE_IMPORT_HISTORY_GROUPS);
2021-01-28 15:15:51 +01:00
ok = true;
break;
}
}
if (!ok) {
2023-02-03 20:11:36 +01:00
args.putInt("dialogsType", DialogsActivity.DIALOGS_TYPE_IMPORT_HISTORY);
2021-01-28 15:15:51 +01:00
}
}
}
if (SecretMediaViewer.hasInstance() && SecretMediaViewer.getInstance().isVisible()) {
SecretMediaViewer.getInstance().closePhoto(false, false);
} else if (PhotoViewer.hasInstance() && PhotoViewer.getInstance().isVisible()) {
PhotoViewer.getInstance().closePhoto(false, true);
} else if (ArticleViewer.hasInstance() && ArticleViewer.getInstance().isVisible()) {
ArticleViewer.getInstance().close(false, true);
}
2021-03-19 11:25:58 +01:00
if (GroupCallActivity.groupCallInstance != null) {
GroupCallActivity.groupCallInstance.dismiss();
}
2021-01-28 15:15:51 +01:00
drawerLayoutContainer.setAllowOpenDrawer(false, false);
if (AndroidUtilities.isTablet()) {
2022-11-05 13:34:47 +01:00
actionBarLayout.rebuildFragments(INavigationLayout.REBUILD_FLAG_REBUILD_LAST);
rightActionBarLayout.rebuildFragments(INavigationLayout.REBUILD_FLAG_REBUILD_LAST);
2021-01-28 15:15:51 +01:00
} else {
drawerLayoutContainer.setAllowOpenDrawer(true, false);
}
DialogsActivity fragment = new DialogsActivity(args);
fragment.setDelegate(this);
boolean removeLast;
if (AndroidUtilities.isTablet()) {
2022-11-05 13:34:47 +01:00
removeLast = layersActionBarLayout.getFragmentStack().size() > 0 && layersActionBarLayout.getFragmentStack().get(layersActionBarLayout.getFragmentStack().size() - 1) instanceof DialogsActivity;
2021-01-28 15:15:51 +01:00
} else {
2022-11-05 13:34:47 +01:00
removeLast = actionBarLayout.getFragmentStack().size() > 1 && actionBarLayout.getFragmentStack().get(actionBarLayout.getFragmentStack().size() - 1) instanceof DialogsActivity;
2021-01-28 15:15:51 +01:00
}
actionBarLayout.presentFragment(fragment, removeLast, false, true, false);
} else {
if (documentsUrisArray == null) {
documentsUrisArray = new ArrayList<>();
}
documentsUrisArray.add(0, exportingChatUri);
exportingChatUri = null;
openDialogsToSend(true);
}
try {
progressDialog.dismiss();
} catch (Exception e) {
FileLog.e(e);
}
}
}, ConnectionsManager.RequestFlagFailOnServerErrors));
final Runnable cancelRunnableFinal = cancelRunnable;
progressDialog.setOnCancelListener(dialog -> {
ConnectionsManager.getInstance(intentAccount).cancelRequest(requestId[0], true);
if (cancelRunnableFinal != null) {
cancelRunnableFinal.run();
}
});
try {
progressDialog.showDelayed(300);
} catch (Exception ignore) {
}
}
2021-03-19 11:25:58 +01:00
private void openGroupCall(AccountInstance accountInstance, TLRPC.Chat chat, String hash) {
VoIPHelper.startCall(chat, null, hash, false, this, mainFragmentsStack.get(mainFragmentsStack.size() - 1), accountInstance);
}
2019-01-23 18:03:33 +01:00
private void runLinkRequest(final int intentAccount,
final String username,
final String group,
final String sticker,
2022-08-12 17:23:51 +02:00
final String emoji,
2019-01-23 18:03:33 +01:00
final String botUser,
final String botChat,
2022-06-21 04:51:00 +02:00
final String botChannel,
2022-04-16 16:43:17 +02:00
final String botChatAdminParams,
2019-01-23 18:03:33 +01:00
final String message,
2022-12-06 20:13:44 +01:00
final String contactToken,
2019-01-23 18:03:33 +01:00
final boolean hasUrl,
final Integer messageId,
2021-09-20 07:54:41 +02:00
final Long channelId,
2020-09-30 15:48:47 +02:00
final Integer threadId,
final Integer commentId,
2019-01-23 18:03:33 +01:00
final String game,
final HashMap<String, String> auth,
final String lang,
final String unsupportedUrl,
final String code,
2019-12-31 14:08:08 +01:00
final String loginToken,
2019-02-08 03:30:32 +01:00
final TLRPC.TL_wallPaper wallPaper,
2022-06-21 04:51:00 +02:00
final String inputInvoiceSlug,
2019-09-10 12:56:11 +02:00
final String theme,
2021-03-19 11:25:58 +01:00
final String voicechat,
2022-02-12 06:22:45 +01:00
final String livestream,
2021-07-15 16:24:57 +02:00
final int state,
2022-04-16 16:43:17 +02:00
final int videoTimestamp,
final String setAsAttachBot,
2022-06-21 04:51:00 +02:00
final String attachMenuBotToOpen,
2022-12-30 13:32:20 +01:00
final String attachMenuBotChoose,
2023-03-08 08:27:18 +01:00
final String botAppMaybe,
final String botAppStartParam,
2022-12-30 13:32:20 +01:00
final Browser.Progress progress) {
if (state == 0 && ChatActivity.SCROLL_DEBUG_DELAY && progress != null) {
2023-03-08 08:27:18 +01:00
Runnable runnable = () -> runLinkRequest(intentAccount, username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, loginToken, wallPaper, inputInvoiceSlug, theme, voicechat, livestream, 1, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, botAppMaybe, botAppStartParam, progress);
2022-12-30 13:32:20 +01:00
progress.init();
progress.onCancel(() -> AndroidUtilities.cancelRunOnUIThread(runnable));
AndroidUtilities.runOnUIThread(runnable, 7500);
return;
} else if (state == 0 && UserConfig.getActivatedAccountsCount() >= 2 && auth != null) {
2018-08-27 10:33:11 +02:00
AlertsCreator.createAccountSelectDialog(this, account -> {
if (account != intentAccount) {
switchToAccount(account, true);
2018-07-30 04:07:02 +02:00
}
2023-03-08 08:27:18 +01:00
runLinkRequest(account, username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, loginToken, wallPaper, inputInvoiceSlug, theme, voicechat, livestream, 1, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, botAppMaybe, botAppStartParam, progress);
2018-07-30 04:07:02 +02:00
}).show();
return;
2019-01-23 18:03:33 +01:00
} else if (code != null) {
if (NotificationCenter.getGlobalInstance().hasObservers(NotificationCenter.didReceiveSmsCode)) {
NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.didReceiveSmsCode, code);
} else {
AlertDialog.Builder builder = new AlertDialog.Builder(LaunchActivity.this);
builder.setTitle(LocaleController.getString("AppName", R.string.AppName));
builder.setMessage(AndroidUtilities.replaceTags(LocaleController.formatString("OtherLoginCode", R.string.OtherLoginCode, code)));
builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), null);
showAlertDialog(builder);
}
return;
2019-12-31 14:08:08 +01:00
} else if (loginToken != null) {
AlertDialog.Builder builder = new AlertDialog.Builder(LaunchActivity.this);
builder.setTitle(LocaleController.getString("AuthAnotherClient", R.string.AuthAnotherClient));
builder.setMessage(LocaleController.getString("AuthAnotherClientUrl", R.string.AuthAnotherClientUrl));
builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), null);
showAlertDialog(builder);
return;
2018-07-30 04:07:02 +02:00
}
2022-12-30 13:32:20 +01:00
final AlertDialog progressDialog = new AlertDialog(this, AlertDialog.ALERT_TYPE_SPINNER);
final Runnable dismissLoading = () -> {
if (progress != null) {
progress.end();
}
if (progressDialog != null) {
progressDialog.dismiss();
}
};
2018-07-30 04:07:02 +02:00
final int[] requestId = new int[]{0};
2019-09-10 12:56:11 +02:00
Runnable cancelRunnable = null;
2022-12-06 20:13:44 +01:00
if (contactToken != null) {
TLRPC.TL_contacts_importContactToken req = new TLRPC.TL_contacts_importContactToken();
req.token = contactToken;
requestId[0] = ConnectionsManager.getInstance(intentAccount).sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
if (response instanceof TLRPC.User) {
TLRPC.User user = (TLRPC.User) response;
MessagesController.getInstance(intentAccount).putUser(user, false);
Bundle args = new Bundle();
args.putLong("user_id", user.id);
presentFragment(new ChatActivity(args));
} else {
FileLog.e("cant import contact token. token=" + contactToken + " err=" + (error == null ? null : error.text));
BulletinFactory.of(mainFragmentsStack.get(mainFragmentsStack.size() - 1)).createErrorBulletin(LocaleController.getString(R.string.NoUsernameFound)).show();
}
try {
2022-12-30 13:32:20 +01:00
dismissLoading.run();
2022-12-06 20:13:44 +01:00
} catch (Exception e) {
FileLog.e(e);
}
}));
} else if (inputInvoiceSlug != null) {
2022-06-21 04:51:00 +02:00
TLRPC.TL_payments_getPaymentForm req = new TLRPC.TL_payments_getPaymentForm();
TLRPC.TL_inputInvoiceSlug invoiceSlug = new TLRPC.TL_inputInvoiceSlug();
invoiceSlug.slug = inputInvoiceSlug;
req.invoice = invoiceSlug;
requestId[0] = ConnectionsManager.getInstance(intentAccount).sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
if (error != null) {
BulletinFactory.of(mainFragmentsStack.get(mainFragmentsStack.size() - 1)).createErrorBulletin(LocaleController.getString(R.string.PaymentInvoiceLinkInvalid)).show();
} else if (!LaunchActivity.this.isFinishing()) {
2022-08-12 17:23:51 +02:00
PaymentFormActivity paymentFormActivity = null;
2022-06-21 04:51:00 +02:00
if (response instanceof TLRPC.TL_payments_paymentForm) {
TLRPC.TL_payments_paymentForm form = (TLRPC.TL_payments_paymentForm) response;
MessagesController.getInstance(intentAccount).putUsers(form.users, false);
2022-08-12 17:23:51 +02:00
paymentFormActivity = new PaymentFormActivity(form, inputInvoiceSlug, getActionBarLayout().getLastFragment());
2022-06-21 04:51:00 +02:00
} else if (response instanceof TLRPC.TL_payments_paymentReceipt) {
2022-08-12 17:23:51 +02:00
paymentFormActivity = new PaymentFormActivity((TLRPC.TL_payments_paymentReceipt) response);
}
if (paymentFormActivity != null) {
if (navigateToPremiumGiftCallback != null) {
Runnable callback = navigateToPremiumGiftCallback;
navigateToPremiumGiftCallback = null;
paymentFormActivity.setPaymentFormCallback(status -> {
if (status == PaymentFormActivity.InvoiceStatus.PAID) {
callback.run();
}
});
}
presentFragment(paymentFormActivity);
2022-06-21 04:51:00 +02:00
}
}
try {
2022-12-30 13:32:20 +01:00
dismissLoading.run();
2022-06-21 04:51:00 +02:00
} catch (Exception e) {
FileLog.e(e);
}
}));
} else if (username != null) {
2022-03-13 02:58:00 +01:00
TLObject req;
if (AndroidUtilities.isNumeric(username)) {
TLRPC.TL_contacts_resolvePhone resolvePhone = new TLRPC.TL_contacts_resolvePhone();
resolvePhone.phone = username;
req = resolvePhone;
} else {
TLRPC.TL_contacts_resolveUsername resolveUsername = new TLRPC.TL_contacts_resolveUsername();
resolveUsername.username = username;
req = resolveUsername;
}
2018-08-27 10:33:11 +02:00
requestId[0] = ConnectionsManager.getInstance(intentAccount).sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
if (!LaunchActivity.this.isFinishing()) {
2019-12-31 14:08:08 +01:00
boolean hideProgressDialog = true;
2022-04-16 16:43:17 +02:00
TLRPC.TL_contacts_resolvedPeer res = (TLRPC.TL_contacts_resolvedPeer) response;
2022-02-12 06:22:45 +01:00
if (error == null && actionBarLayout != null && (game == null && voicechat == null || game != null && !res.users.isEmpty() || voicechat != null && !res.chats.isEmpty() || livestream != null && !res.chats.isEmpty())) {
2018-08-27 10:33:11 +02:00
MessagesController.getInstance(intentAccount).putUsers(res.users, false);
MessagesController.getInstance(intentAccount).putChats(res.chats, false);
MessagesStorage.getInstance(intentAccount).putUsersAndChats(res.users, res.chats, false, true);
2023-03-08 08:27:18 +01:00
if (!TextUtils.isEmpty(botAppMaybe)) {
TLRPC.User user = MessagesController.getInstance(intentAccount).getUser(res.peer.user_id);
if (user != null && user.bot) {
TLRPC.TL_messages_getBotApp getBotApp = new TLRPC.TL_messages_getBotApp();
TLRPC.TL_inputBotAppShortName app = new TLRPC.TL_inputBotAppShortName();
app.bot_id = MessagesController.getInstance(currentAccount).getInputUser(user);
app.short_name = botAppMaybe;
getBotApp.app = app;
ConnectionsManager.getInstance(currentAccount).sendRequest(getBotApp, (response1, error1) -> {
if (error1 != null) {
AndroidUtilities.runOnUIThread(()-> runLinkRequest(currentAccount, username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, loginToken, wallPaper, inputInvoiceSlug, theme, voicechat, livestream, state, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, null, null, progress));
} else {
TLRPC.TL_messages_botApp botApp = (TLRPC.TL_messages_botApp) response1;
AndroidUtilities.runOnUIThread(()->{
dismissLoading.run();
AtomicBoolean allowWrite = new AtomicBoolean();
BaseFragment lastFragment = mainFragmentsStack.get(mainFragmentsStack.size() - 1);
Runnable loadBotSheet = ()->{
BotWebViewSheet sheet = new BotWebViewSheet(LaunchActivity.this, lastFragment.getResourceProvider());
sheet.setParentActivity(LaunchActivity.this);
sheet.requestWebView(currentAccount, user.id, user.id, null, null, BotWebViewSheet.TYPE_WEB_VIEW_BOT_APP, 0, false, lastFragment, botApp.app, allowWrite.get(), botAppStartParam, user);
sheet.show();
};
if (botApp.inactive) {
AlertDialog.Builder builder = new AlertDialog.Builder(LaunchActivity.this)
.setTopAnimation(R.raw.permission_request_apk, AlertsCreator.PERMISSIONS_REQUEST_TOP_ICON_SIZE, false, Theme.getColor(Theme.key_dialogTopBackground))
.setMessage(AndroidUtilities.replaceTags(LocaleController.formatString(R.string.BotStartAppPermission, botApp.app.title, UserObject.getUserName(user))))
.setPositiveButton(LocaleController.getString(R.string.Start), (dialog, which) -> loadBotSheet.run())
.setNegativeButton(LocaleController.getString(R.string.Cancel), null);
if (botApp.request_write_access) {
allowWrite.set(true);
CheckBoxCell cell = new CheckBoxCell(LaunchActivity.this, 5, lastFragment.getResourceProvider());
cell.setBackground(Theme.getSelectorDrawable(false));
cell.setMultiline(true);
cell.setText(AndroidUtilities.replaceTags(LocaleController.formatString("OpenUrlOption2", R.string.OpenUrlOption2, UserObject.getUserName(user))), "", true, false);
cell.setPadding(LocaleController.isRTL ? AndroidUtilities.dp(16) : AndroidUtilities.dp(8), 0, LocaleController.isRTL ? AndroidUtilities.dp(8) : AndroidUtilities.dp(16), 0);
cell.setOnClickListener(v -> {
boolean allow = !cell.isChecked();
cell.setChecked(allow, true);
allowWrite.set(allow);
});
builder.setView(cell);
}
builder.show();
} else {
loadBotSheet.run();
}
});
}
});
return;
}
}
2022-04-16 16:43:17 +02:00
if (setAsAttachBot != null && attachMenuBotToOpen == null) {
TLRPC.User user = MessagesController.getInstance(intentAccount).getUser(res.peer.user_id);
if (user != null && user.bot) {
if (user.bot_attach_menu) {
TLRPC.TL_messages_getAttachMenuBot getAttachMenuBot = new TLRPC.TL_messages_getAttachMenuBot();
getAttachMenuBot.bot = MessagesController.getInstance(intentAccount).getInputUser(res.peer.user_id);
2022-06-21 04:51:00 +02:00
ConnectionsManager.getInstance(intentAccount).sendRequest(getAttachMenuBot, (response1, error1) -> AndroidUtilities.runOnUIThread(() -> {
2022-04-16 16:43:17 +02:00
if (response1 instanceof TLRPC.TL_attachMenuBotsBot) {
TLRPC.TL_attachMenuBotsBot attachMenuBotsBot = (TLRPC.TL_attachMenuBotsBot) response1;
MessagesController.getInstance(intentAccount).putUsers(attachMenuBotsBot.users, false);
TLRPC.TL_attachMenuBot attachMenuBot = attachMenuBotsBot.bot;
BaseFragment lastFragment = mainFragmentsStack.get(mainFragmentsStack.size() - 1);
2022-06-21 04:51:00 +02:00
List<String> chooserTargets = new ArrayList<>();
if (!TextUtils.isEmpty(attachMenuBotChoose)) {
for (String target : attachMenuBotChoose.split(" ")) {
if (MediaDataController.canShowAttachMenuBotForTarget(attachMenuBot, target)) {
chooserTargets.add(target);
}
}
}
DialogsActivity dialogsActivity;
if (!chooserTargets.isEmpty()) {
Bundle args = new Bundle();
args.putInt("dialogsType", DialogsActivity.DIALOGS_TYPE_START_ATTACH_BOT);
args.putBoolean("onlySelect", true);
args.putBoolean("allowGroups", chooserTargets.contains("groups"));
args.putBoolean("allowUsers", chooserTargets.contains("users"));
args.putBoolean("allowChannels", chooserTargets.contains("channels"));
args.putBoolean("allowBots", chooserTargets.contains("bots"));
dialogsActivity = new DialogsActivity(args);
2023-02-06 12:08:24 +01:00
dialogsActivity.setDelegate((fragment, dids, message1, param, topicsFragment) -> {
2022-11-05 13:34:47 +01:00
long did = dids.get(0).dialogId;
2022-06-21 04:51:00 +02:00
Bundle args1 = new Bundle();
args1.putBoolean("scrollToTopOnResume", true);
if (DialogObject.isEncryptedDialog(did)) {
args1.putInt("enc_id", DialogObject.getEncryptedChatId(did));
} else if (DialogObject.isUserDialog(did)) {
args1.putLong("user_id", did);
} else {
args1.putLong("chat_id", -did);
}
2022-11-06 02:16:18 +01:00
args1.putString("attach_bot", UserObject.getPublicUsername(user));
2022-06-21 04:51:00 +02:00
if (setAsAttachBot != null) {
args1.putString("attach_bot_start_command", setAsAttachBot);
}
if (MessagesController.getInstance(intentAccount).checkCanOpenChat(args1, fragment)) {
NotificationCenter.getInstance(intentAccount).postNotificationName(NotificationCenter.closeChats);
actionBarLayout.presentFragment(new ChatActivity(args1), true, false, true, false);
}
2023-02-03 20:11:36 +01:00
return true;
2022-06-21 04:51:00 +02:00
});
} else {
dialogsActivity = null;
}
2022-04-16 16:43:17 +02:00
if (!attachMenuBot.inactive) {
2022-06-21 04:51:00 +02:00
if (dialogsActivity != null) {
presentFragment(dialogsActivity);
} else if (lastFragment instanceof ChatActivity) {
2022-08-12 17:23:51 +02:00
ChatActivity chatActivity = (ChatActivity) lastFragment;
if (!MediaDataController.canShowAttachMenuBot(attachMenuBot, chatActivity.getCurrentUser() != null ? chatActivity.getCurrentUser() : chatActivity.getCurrentChat())) {
BulletinFactory.of(lastFragment).createErrorBulletin(LocaleController.getString(R.string.BotAlreadyAddedToAttachMenu)).show();
return;
}
chatActivity.openAttachBotLayout(user.id, setAsAttachBot);
2022-04-16 16:43:17 +02:00
} else {
BulletinFactory.of(lastFragment).createErrorBulletin(LocaleController.getString(R.string.BotAlreadyAddedToAttachMenu)).show();
}
} else {
AttachBotIntroTopView introTopView = new AttachBotIntroTopView(LaunchActivity.this);
2023-03-08 08:27:18 +01:00
introTopView.setColor(Theme.getColor(Theme.key_chat_attachIcon));
2022-04-16 16:43:17 +02:00
introTopView.setBackgroundColor(Theme.getColor(Theme.key_dialogTopBackground));
introTopView.setAttachBot(attachMenuBot);
2022-12-30 13:32:20 +01:00
AtomicBoolean allowWrite = new AtomicBoolean();
AlertDialog.Builder builder = new AlertDialog.Builder(LaunchActivity.this)
2022-04-16 16:43:17 +02:00
.setTopView(introTopView)
.setMessage(AndroidUtilities.replaceTags(LocaleController.formatString("BotRequestAttachPermission", R.string.BotRequestAttachPermission, UserObject.getUserName(user))))
.setPositiveButton(LocaleController.getString(R.string.BotAddToMenu), (dialog, which) -> {
TLRPC.TL_messages_toggleBotInAttachMenu botRequest = new TLRPC.TL_messages_toggleBotInAttachMenu();
botRequest.bot = MessagesController.getInstance(intentAccount).getInputUser(res.peer.user_id);
botRequest.enabled = true;
2022-12-30 13:32:20 +01:00
botRequest.write_allowed = allowWrite.get();
2022-04-16 16:43:17 +02:00
ConnectionsManager.getInstance(intentAccount).sendRequest(botRequest, (response2, error2) -> AndroidUtilities.runOnUIThread(() -> {
2022-06-21 04:51:00 +02:00
if (response2 instanceof TLRPC.TL_boolTrue) {
2022-04-16 16:43:17 +02:00
MediaDataController.getInstance(intentAccount).loadAttachMenuBots(false, true);
2022-06-21 04:51:00 +02:00
if (dialogsActivity != null) {
presentFragment(dialogsActivity);
} else if (lastFragment instanceof ChatActivity) {
2022-04-16 16:43:17 +02:00
((ChatActivity) lastFragment).openAttachBotLayout(user.id, setAsAttachBot);
}
}
}), ConnectionsManager.RequestFlagInvokeAfter | ConnectionsManager.RequestFlagFailOnServerErrors);
})
2022-12-30 13:32:20 +01:00
.setNegativeButton(LocaleController.getString(R.string.Cancel), null);
if (attachMenuBot.request_write_access) {
allowWrite.set(true);
CheckBoxCell cell = new CheckBoxCell(LaunchActivity.this, 5, lastFragment.getResourceProvider());
cell.setBackground(Theme.getSelectorDrawable(false));
cell.setMultiline(true);
cell.setText(AndroidUtilities.replaceTags(LocaleController.formatString("OpenUrlOption2", R.string.OpenUrlOption2, UserObject.getUserName(user))), "", true, false);
cell.setPadding(LocaleController.isRTL ? AndroidUtilities.dp(16) : AndroidUtilities.dp(8), 0, LocaleController.isRTL ? AndroidUtilities.dp(8) : AndroidUtilities.dp(16), 0);
cell.setOnClickListener(v -> {
boolean allow = !cell.isChecked();
cell.setChecked(allow, true);
allowWrite.set(allow);
});
builder.setView(cell);
}
builder.show();
2022-04-16 16:43:17 +02:00
}
2022-04-21 20:03:20 +02:00
} else {
BulletinFactory.of(mainFragmentsStack.get(mainFragmentsStack.size() - 1)).createErrorBulletin(LocaleController.getString(R.string.BotCantAddToAttachMenu)).show();
2022-04-16 16:43:17 +02:00
}
}));
} else {
BulletinFactory.of(mainFragmentsStack.get(mainFragmentsStack.size() - 1)).createErrorBulletin(LocaleController.getString(R.string.BotCantAddToAttachMenu)).show();
}
} else {
BulletinFactory.of(mainFragmentsStack.get(mainFragmentsStack.size() - 1)).createErrorBulletin(LocaleController.getString(R.string.BotSetAttachLinkNotBot)).show();
}
} else if (messageId != null && (commentId != null || threadId != null) && !res.chats.isEmpty()) {
2022-12-30 13:32:20 +01:00
requestId[0] = runCommentRequest(intentAccount, dismissLoading, messageId, commentId, threadId, res.chats.get(0));
2020-09-30 15:48:47 +02:00
if (requestId[0] != 0) {
hideProgressDialog = false;
}
} else if (game != null) {
2018-08-27 10:33:11 +02:00
Bundle args = new Bundle();
args.putBoolean("onlySelect", true);
args.putBoolean("cantSendToChannels", true);
2023-02-03 20:11:36 +01:00
args.putInt("dialogsType", DialogsActivity.DIALOGS_TYPE_BOT_SHARE);
2019-12-31 14:08:08 +01:00
args.putString("selectAlertString", LocaleController.getString("SendGameToText", R.string.SendGameToText));
args.putString("selectAlertStringGroup", LocaleController.getString("SendGameToGroupText", R.string.SendGameToGroupText));
2018-08-27 10:33:11 +02:00
DialogsActivity fragment = new DialogsActivity(args);
2023-02-06 12:08:24 +01:00
fragment.setDelegate((fragment1, dids, message1, param, topicsFragment) -> {
2022-11-05 13:34:47 +01:00
long did = dids.get(0).dialogId;
2018-08-27 10:33:11 +02:00
TLRPC.TL_inputMediaGame inputMediaGame = new TLRPC.TL_inputMediaGame();
inputMediaGame.id = new TLRPC.TL_inputGameShortName();
inputMediaGame.id.short_name = game;
inputMediaGame.id.bot_id = MessagesController.getInstance(intentAccount).getInputUser(res.users.get(0));
2021-09-20 07:54:41 +02:00
SendMessagesHelper.getInstance(intentAccount).sendGame(MessagesController.getInstance(intentAccount).getInputPeer(did), inputMediaGame, 0, 0);
2018-08-27 10:33:11 +02:00
Bundle args1 = new Bundle();
args1.putBoolean("scrollToTopOnResume", true);
2021-09-20 07:54:41 +02:00
if (DialogObject.isEncryptedDialog(did)) {
args1.putInt("enc_id", DialogObject.getEncryptedChatId(did));
} else if (DialogObject.isUserDialog(did)) {
args1.putLong("user_id", did);
2018-08-27 10:33:11 +02:00
} else {
2021-09-20 07:54:41 +02:00
args1.putLong("chat_id", -did);
2018-08-27 10:33:11 +02:00
}
if (MessagesController.getInstance(intentAccount).checkCanOpenChat(args1, fragment1)) {
NotificationCenter.getInstance(intentAccount).postNotificationName(NotificationCenter.closeChats);
actionBarLayout.presentFragment(new ChatActivity(args1), true, false, true, false);
}
2023-02-03 20:11:36 +01:00
return true;
2018-08-27 10:33:11 +02:00
});
boolean removeLast;
if (AndroidUtilities.isTablet()) {
2022-11-05 13:34:47 +01:00
removeLast = layersActionBarLayout.getFragmentStack().size() > 0 && layersActionBarLayout.getFragmentStack().get(layersActionBarLayout.getFragmentStack().size() - 1) instanceof DialogsActivity;
2018-08-27 10:33:11 +02:00
} else {
2022-11-05 13:34:47 +01:00
removeLast = actionBarLayout.getFragmentStack().size() > 1 && actionBarLayout.getFragmentStack().get(actionBarLayout.getFragmentStack().size() - 1) instanceof DialogsActivity;
2018-08-27 10:33:11 +02:00
}
actionBarLayout.presentFragment(fragment, removeLast, true, true, false);
if (SecretMediaViewer.hasInstance() && SecretMediaViewer.getInstance().isVisible()) {
SecretMediaViewer.getInstance().closePhoto(false, false);
} else if (PhotoViewer.hasInstance() && PhotoViewer.getInstance().isVisible()) {
PhotoViewer.getInstance().closePhoto(false, true);
} else if (ArticleViewer.hasInstance() && ArticleViewer.getInstance().isVisible()) {
ArticleViewer.getInstance().close(false, true);
}
2021-03-19 11:25:58 +01:00
if (GroupCallActivity.groupCallInstance != null) {
GroupCallActivity.groupCallInstance.dismiss();
}
2018-08-27 10:33:11 +02:00
drawerLayoutContainer.setAllowOpenDrawer(false, false);
if (AndroidUtilities.isTablet()) {
2022-11-05 13:34:47 +01:00
actionBarLayout.rebuildFragments(INavigationLayout.REBUILD_FLAG_REBUILD_LAST);
rightActionBarLayout.rebuildFragments(INavigationLayout.REBUILD_FLAG_REBUILD_LAST);
2018-08-27 10:33:11 +02:00
} else {
drawerLayoutContainer.setAllowOpenDrawer(true, false);
}
2022-06-21 04:51:00 +02:00
} else if (botChat != null || botChannel != null) {
2018-08-27 10:33:11 +02:00
final TLRPC.User user = !res.users.isEmpty() ? res.users.get(0) : null;
if (user == null || user.bot && user.bot_nochats) {
try {
2021-02-23 12:53:38 +01:00
if (!mainFragmentsStack.isEmpty()) {
BulletinFactory.of(mainFragmentsStack.get(mainFragmentsStack.size() - 1)).createErrorBulletin(LocaleController.getString("BotCantJoinGroups", R.string.BotCantJoinGroups)).show();
}
} catch (Exception e) {
2017-03-31 01:58:05 +02:00
FileLog.e(e);
}
2018-08-27 10:33:11 +02:00
return;
}
Bundle args = new Bundle();
args.putBoolean("onlySelect", true);
2023-02-03 20:11:36 +01:00
args.putInt("dialogsType", DialogsActivity.DIALOGS_TYPE_ADD_USERS_TO);
2022-04-16 16:43:17 +02:00
args.putBoolean("resetDelegate", false);
args.putBoolean("closeFragment", false);
2022-06-21 04:51:00 +02:00
args.putBoolean("allowGroups", botChat != null);
args.putBoolean("allowChannels", botChannel != null);
final String botHash = TextUtils.isEmpty(botChat) ? (TextUtils.isEmpty(botChannel) ? null : botChannel) : botChat;
2022-04-16 16:43:17 +02:00
// args.putString("addToGroupAlertString", LocaleController.formatString("AddToTheGroupAlertText", R.string.AddToTheGroupAlertText, UserObject.getUserName(user), "%1$s"));
2018-08-27 10:33:11 +02:00
DialogsActivity fragment = new DialogsActivity(args);
2023-02-06 12:08:24 +01:00
fragment.setDelegate((fragment12, dids, message1, param, topicsFragment) -> {
2022-11-05 13:34:47 +01:00
long did = dids.get(0).dialogId;
2022-04-16 16:43:17 +02:00
TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-did);
if (chat != null && (chat.creator || chat.admin_rights != null && chat.admin_rights.add_admins)) {
2022-12-06 20:13:44 +01:00
MessagesController.getInstance(intentAccount).checkIsInChat(false, chat, user, (isInChatAlready, currentRights, currentRank) -> AndroidUtilities.runOnUIThread(() -> {
2022-04-16 16:43:17 +02:00
TLRPC.TL_chatAdminRights requestingRights = null;
if (botChatAdminParams != null) {
2022-04-23 11:51:09 +02:00
String[] adminParams = botChatAdminParams.split("\\+| ");
2022-04-16 16:43:17 +02:00
requestingRights = new TLRPC.TL_chatAdminRights();
final int count = adminParams.length;
for (int i = 0; i < count; ++i) {
String adminParam = adminParams[i];
switch (adminParam) {
case "change_info":
requestingRights.change_info = true;
break;
case "post_messages":
requestingRights.post_messages = true;
break;
case "edit_messages":
requestingRights.edit_messages = true;
break;
case "add_admins":
2022-04-23 11:51:09 +02:00
case "promote_members":
2022-04-16 16:43:17 +02:00
requestingRights.add_admins = true;
break;
case "delete_messages":
requestingRights.delete_messages = true;
break;
case "ban_users":
2022-04-23 11:51:09 +02:00
case "restrict_members":
2022-04-16 16:43:17 +02:00
requestingRights.ban_users = true;
break;
case "invite_users":
requestingRights.invite_users = true;
break;
case "pin_messages":
requestingRights.pin_messages = true;
break;
2022-04-23 11:51:09 +02:00
case "manage_video_chats":
2022-04-16 16:43:17 +02:00
case "manage_call":
requestingRights.manage_call = true;
break;
2022-04-23 11:51:09 +02:00
case "manage_chat":
2022-06-21 04:51:00 +02:00
case "other":
2022-04-23 11:51:09 +02:00
requestingRights.other = true;
break;
2022-04-16 16:43:17 +02:00
case "anonymous":
requestingRights.anonymous = true;
break;
}
}
}
TLRPC.TL_chatAdminRights editRights = null;
if (requestingRights != null || currentRights != null) {
if (requestingRights == null) {
editRights = currentRights;
} else if (currentRights == null) {
editRights = requestingRights;
} else {
editRights = currentRights;
editRights.change_info = requestingRights.change_info || editRights.change_info;
editRights.post_messages = requestingRights.post_messages || editRights.post_messages;
editRights.edit_messages = requestingRights.edit_messages || editRights.edit_messages;
editRights.add_admins = requestingRights.add_admins || editRights.add_admins;
editRights.delete_messages = requestingRights.delete_messages || editRights.delete_messages;
editRights.ban_users = requestingRights.ban_users || editRights.ban_users;
editRights.invite_users = requestingRights.invite_users || editRights.invite_users;
editRights.pin_messages = requestingRights.pin_messages || editRights.pin_messages;
editRights.manage_call = requestingRights.manage_call || editRights.manage_call;
editRights.anonymous = requestingRights.anonymous || editRights.anonymous;
2022-04-23 11:51:09 +02:00
editRights.other = requestingRights.other || editRights.other;
2022-04-16 16:43:17 +02:00
}
}
2022-06-21 04:51:00 +02:00
if (isInChatAlready && requestingRights == null && !TextUtils.isEmpty(botHash)) {
Runnable onFinish = () -> {
2022-04-16 16:43:17 +02:00
NotificationCenter.getInstance(intentAccount).postNotificationName(NotificationCenter.closeChats);
2022-06-21 04:51:00 +02:00
Bundle args1 = new Bundle();
args1.putBoolean("scrollToTopOnResume", true);
args1.putLong("chat_id", chat.id);
if (!MessagesController.getInstance(currentAccount).checkCanOpenChat(args1, fragment)) {
return;
}
ChatActivity chatActivity = new ChatActivity(args1);
presentFragment(chatActivity, true, false);
};
MessagesController.getInstance(currentAccount).addUserToChat(chat.id, user, 0, botHash, fragment, true, onFinish, null);
} else {
ChatRightsEditActivity editRightsActivity = new ChatRightsEditActivity(user.id, -did, editRights, null, null, currentRank, ChatRightsEditActivity.TYPE_ADD_BOT, true, !isInChatAlready, botHash);
editRightsActivity.setDelegate(new ChatRightsEditActivity.ChatRightsEditActivityDelegate() {
@Override
public void didSetRights(int rights, TLRPC.TL_chatAdminRights rightsAdmin, TLRPC.TL_chatBannedRights rightsBanned, String rank) {
fragment.removeSelfFromStack();
NotificationCenter.getInstance(intentAccount).postNotificationName(NotificationCenter.closeChats);
}
@Override
public void didChangeOwner(TLRPC.User user) {
}
});
actionBarLayout.presentFragment(editRightsActivity, false);
}
2022-04-16 16:43:17 +02:00
}));
} else {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(LocaleController.getString("AddBot", R.string.AddBot));
String chatName = chat == null ? "" : chat.title;
builder.setMessage(AndroidUtilities.replaceTags(LocaleController.formatString("AddMembersAlertNamesText", R.string.AddMembersAlertNamesText, UserObject.getUserName(user), chatName)));
builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
builder.setPositiveButton(LocaleController.getString("AddBot", R.string.AddBot), (di, i) -> {
Bundle args12 = new Bundle();
args12.putBoolean("scrollToTopOnResume", true);
args12.putLong("chat_id", -did);
ChatActivity chatActivity = new ChatActivity(args12);
NotificationCenter.getInstance(intentAccount).postNotificationName(NotificationCenter.closeChats);
2022-06-21 04:51:00 +02:00
MessagesController.getInstance(intentAccount).addUserToChat(-did, user, 0, botHash, chatActivity, null);
2022-04-16 16:43:17 +02:00
actionBarLayout.presentFragment(chatActivity, true, false, true, false);
});
builder.show();
2018-08-27 10:33:11 +02:00
}
2023-02-03 20:11:36 +01:00
return true;
2018-08-27 10:33:11 +02:00
});
presentFragment(fragment);
} else {
2022-11-05 13:34:47 +01:00
2018-08-27 10:33:11 +02:00
long dialog_id;
boolean isBot = false;
Bundle args = new Bundle();
if (!res.chats.isEmpty()) {
2021-09-20 07:54:41 +02:00
args.putLong("chat_id", res.chats.get(0).id);
2018-08-27 10:33:11 +02:00
dialog_id = -res.chats.get(0).id;
} else {
2021-09-20 07:54:41 +02:00
args.putLong("user_id", res.users.get(0).id);
2018-08-27 10:33:11 +02:00
dialog_id = res.users.get(0).id;
}
if (botUser != null && res.users.size() > 0 && res.users.get(0).bot) {
args.putString("botUser", botUser);
isBot = true;
}
2022-06-21 04:51:00 +02:00
if (navigateToPremiumBot) {
navigateToPremiumBot = false;
args.putBoolean("premium_bot", true);
}
2018-08-27 10:33:11 +02:00
if (messageId != null) {
args.putInt("message_id", messageId);
}
2021-03-19 11:25:58 +01:00
if (voicechat != null) {
args.putString("voicechat", voicechat);
}
2022-02-12 06:22:45 +01:00
if (livestream != null) {
args.putString("livestream", livestream);
}
2021-07-15 16:24:57 +02:00
if (videoTimestamp >= 0) {
args.putInt("video_timestamp", videoTimestamp);
}
2022-04-16 16:43:17 +02:00
if (attachMenuBotToOpen != null) {
args.putString("attach_bot", attachMenuBotToOpen);
}
if (setAsAttachBot != null) {
args.putString("attach_bot_start_command", setAsAttachBot);
}
2021-03-19 11:25:58 +01:00
BaseFragment lastFragment = !mainFragmentsStack.isEmpty() && voicechat == null ? mainFragmentsStack.get(mainFragmentsStack.size() - 1) : null;
2018-08-27 10:33:11 +02:00
if (lastFragment == null || MessagesController.getInstance(intentAccount).checkCanOpenChat(args, lastFragment)) {
2019-01-23 18:03:33 +01:00
if (isBot && lastFragment instanceof ChatActivity && ((ChatActivity) lastFragment).getDialogId() == dialog_id) {
2018-08-27 10:33:11 +02:00
((ChatActivity) lastFragment).setBotUser(botUser);
2015-06-29 19:12:11 +02:00
} else {
2022-11-05 13:34:47 +01:00
TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-dialog_id);
if (chat != null && chat.forum) {
Integer topicId = threadId;
if (topicId == null) {
topicId = messageId;
}
if (topicId != null && topicId != 0) {
2022-11-06 02:16:18 +01:00
openForumFromLink(dialog_id, topicId, messageId, () -> {
2022-11-05 13:34:47 +01:00
try {
2022-12-30 13:32:20 +01:00
dismissLoading.run();
2022-11-05 13:34:47 +01:00
} catch (Exception e) {
FileLog.e(e);
}
});
} else {
Bundle bundle = new Bundle();
bundle.putLong("chat_id", -dialog_id);
presentFragment(new TopicsFragment(bundle));
2020-12-23 08:48:30 +01:00
try {
2022-12-30 13:32:20 +01:00
dismissLoading.run();
2020-12-23 08:48:30 +01:00
} catch (Exception e) {
FileLog.e(e);
}
2022-11-05 13:34:47 +01:00
}
} else {
MessagesController.getInstance(intentAccount).ensureMessagesLoaded(dialog_id, messageId == null ? 0 : messageId, new MessagesController.MessagesLoadedCallback() {
@Override
public void onMessagesLoaded(boolean fromCache) {
try {
2022-12-30 13:32:20 +01:00
dismissLoading.run();
2022-11-05 13:34:47 +01:00
} catch (Exception e) {
FileLog.e(e);
2022-04-16 16:43:17 +02:00
}
2022-11-05 13:34:47 +01:00
if (!LaunchActivity.this.isFinishing()) {
BaseFragment voipLastFragment;
if (livestream == null || !(lastFragment instanceof ChatActivity) || ((ChatActivity) lastFragment).getDialogId() != dialog_id) {
2022-11-06 02:16:18 +01:00
if (lastFragment instanceof ChatActivity && ((ChatActivity) lastFragment).getDialogId() == dialog_id && messageId == null) {
2022-11-05 13:34:47 +01:00
ChatActivity chatActivity = (ChatActivity) lastFragment;
ViewGroup v = chatActivity.getChatListView();
AndroidUtilities.shakeViewSpring(v, 5);
BotWebViewVibrationEffect.APP_ERROR.vibrate();
v = chatActivity.getChatActivityEnterView();
for (int i = 0; i < v.getChildCount(); i++) {
AndroidUtilities.shakeViewSpring(v.getChildAt(i), 5);
}
v = chatActivity.getActionBar();
for (int i = 0; i < v.getChildCount(); i++) {
AndroidUtilities.shakeViewSpring(v.getChildAt(i), 5);
}
voipLastFragment = lastFragment;
2022-03-20 21:22:37 +01:00
} else {
2022-11-05 13:34:47 +01:00
ChatActivity fragment = new ChatActivity(args);
actionBarLayout.presentFragment(fragment);
voipLastFragment = fragment;
}
} else {
voipLastFragment = lastFragment;
}
AndroidUtilities.runOnUIThread(() -> {
if (livestream != null) {
AccountInstance accountInstance = AccountInstance.getInstance(currentAccount);
ChatObject.Call cachedCall = accountInstance.getMessagesController().getGroupCall(-dialog_id, false);
if (cachedCall != null) {
VoIPHelper.startCall(accountInstance.getMessagesController().getChat(-dialog_id), accountInstance.getMessagesController().getInputPeer(dialog_id), null, false, cachedCall == null || !cachedCall.call.rtmp_stream, LaunchActivity.this, voipLastFragment, accountInstance);
} else {
TLRPC.ChatFull chatFull = accountInstance.getMessagesController().getChatFull(-dialog_id);
if (chatFull != null) {
if (chatFull.call == null) {
if (voipLastFragment.getParentActivity() != null) {
BulletinFactory.of(voipLastFragment).createSimpleBulletin(R.raw.linkbroken, LocaleController.getString("InviteExpired", R.string.InviteExpired)).show();
}
} else {
accountInstance.getMessagesController().getGroupCall(-dialog_id, true, () -> AndroidUtilities.runOnUIThread(() -> {
ChatObject.Call call = accountInstance.getMessagesController().getGroupCall(-dialog_id, false);
VoIPHelper.startCall(accountInstance.getMessagesController().getChat(-dialog_id), accountInstance.getMessagesController().getInputPeer(dialog_id), null, false, call == null || !call.call.rtmp_stream, LaunchActivity.this, voipLastFragment, accountInstance);
}));
2022-04-16 16:43:17 +02:00
}
}
}
2022-03-20 21:22:37 +01:00
}
2022-11-05 13:34:47 +01:00
}, 150);
}
2020-12-23 08:48:30 +01:00
}
2022-11-05 13:34:47 +01:00
@Override
public void onError() {
if (!LaunchActivity.this.isFinishing()) {
BaseFragment fragment = mainFragmentsStack.get(mainFragmentsStack.size() - 1);
AlertsCreator.showSimpleAlert(fragment, LocaleController.getString("JoinToGroupErrorNotExist", R.string.JoinToGroupErrorNotExist));
}
try {
2022-12-30 13:32:20 +01:00
dismissLoading.run();
2022-11-05 13:34:47 +01:00
} catch (Exception e) {
FileLog.e(e);
}
2020-12-23 08:48:30 +01:00
}
2022-11-05 13:34:47 +01:00
});
}
2019-12-31 14:08:08 +01:00
hideProgressDialog = false;
}
}
}
2018-08-27 10:33:11 +02:00
} else {
try {
2021-02-23 12:53:38 +01:00
if (!mainFragmentsStack.isEmpty()) {
BaseFragment fragment = mainFragmentsStack.get(mainFragmentsStack.size() - 1);
2022-11-05 13:34:47 +01:00
if (fragment instanceof ChatActivity) {
((ChatActivity) fragment).shakeContent();
}
2021-02-23 12:53:38 +01:00
if (error != null && error.text != null && error.text.startsWith("FLOOD_WAIT")) {
BulletinFactory.of(fragment).createErrorBulletin(LocaleController.getString("FloodWait", R.string.FloodWait)).show();
2022-06-21 04:51:00 +02:00
} else if (AndroidUtilities.isNumeric(username)) {
BulletinFactory.of(fragment).createErrorBulletin(LocaleController.getString("NoPhoneFound", R.string.NoPhoneFound)).show();
2021-02-23 12:53:38 +01:00
} else {
BulletinFactory.of(fragment).createErrorBulletin(LocaleController.getString("NoUsernameFound", R.string.NoUsernameFound)).show();
}
2020-12-23 08:48:30 +01:00
}
2018-08-27 10:33:11 +02:00
} catch (Exception e) {
FileLog.e(e);
}
}
2019-12-31 14:08:08 +01:00
if (hideProgressDialog) {
try {
2022-12-30 13:32:20 +01:00
dismissLoading.run();
2019-12-31 14:08:08 +01:00
} catch (Exception e) {
FileLog.e(e);
}
}
}
2020-12-23 08:48:30 +01:00
}, ConnectionsManager.RequestFlagFailOnServerErrors));
} else if (group != null) {
if (state == 0) {
final TLRPC.TL_messages_checkChatInvite req = new TLRPC.TL_messages_checkChatInvite();
req.hash = group;
2018-08-27 10:33:11 +02:00
requestId[0] = ConnectionsManager.getInstance(intentAccount).sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
if (!LaunchActivity.this.isFinishing()) {
2019-12-31 14:08:08 +01:00
boolean hideProgressDialog = true;
2018-08-27 10:33:11 +02:00
if (error == null && actionBarLayout != null) {
TLRPC.ChatInvite invite = (TLRPC.ChatInvite) response;
2022-11-05 13:34:47 +01:00
if (invite.chat != null && (!ChatObject.isLeftFromChat(invite.chat) || !invite.chat.kicked && (ChatObject.isPublic(invite.chat) || invite instanceof TLRPC.TL_chatInvitePeek || invite.chat.has_geo))) {
2018-08-27 10:33:11 +02:00
MessagesController.getInstance(intentAccount).putChat(invite.chat, false);
ArrayList<TLRPC.Chat> chats = new ArrayList<>();
chats.add(invite.chat);
MessagesStorage.getInstance(intentAccount).putUsersAndChats(null, chats, false, true);
Bundle args = new Bundle();
2021-09-20 07:54:41 +02:00
args.putLong("chat_id", invite.chat.id);
2018-08-27 10:33:11 +02:00
if (mainFragmentsStack.isEmpty() || MessagesController.getInstance(intentAccount).checkCanOpenChat(args, mainFragmentsStack.get(mainFragmentsStack.size() - 1))) {
2019-12-31 14:08:08 +01:00
boolean[] canceled = new boolean[1];
progressDialog.setOnCancelListener(dialog -> canceled[0] = true);
2022-11-05 13:34:47 +01:00
if (invite.chat.forum) {
Bundle bundle = new Bundle();
bundle.putLong("chat_id", invite.chat.id);
presentFragment(new TopicsFragment(bundle));
} else {
MessagesController.getInstance(intentAccount).ensureMessagesLoaded(-invite.chat.id, 0, new MessagesController.MessagesLoadedCallback() {
@Override
public void onMessagesLoaded(boolean fromCache) {
try {
2022-12-30 13:32:20 +01:00
dismissLoading.run();
2022-11-05 13:34:47 +01:00
} catch (Exception e) {
FileLog.e(e);
}
if (canceled[0]) {
return;
}
ChatActivity fragment = new ChatActivity(args);
if (invite instanceof TLRPC.TL_chatInvitePeek) {
fragment.setChatInvite(invite);
}
actionBarLayout.presentFragment(fragment);
2020-12-23 08:48:30 +01:00
}
2022-11-05 13:34:47 +01:00
@Override
public void onError() {
if (!LaunchActivity.this.isFinishing()) {
BaseFragment fragment = mainFragmentsStack.get(mainFragmentsStack.size() - 1);
AlertsCreator.showSimpleAlert(fragment, LocaleController.getString("JoinToGroupErrorNotExist", R.string.JoinToGroupErrorNotExist));
}
try {
2022-12-30 13:32:20 +01:00
dismissLoading.run();
2022-11-05 13:34:47 +01:00
} catch (Exception e) {
FileLog.e(e);
}
2020-12-23 08:48:30 +01:00
}
2022-11-05 13:34:47 +01:00
});
hideProgressDialog = false;
}
2018-08-27 10:33:11 +02:00
}
} else {
2019-12-31 14:08:08 +01:00
BaseFragment fragment = mainFragmentsStack.get(mainFragmentsStack.size() - 1);
2022-06-21 04:51:00 +02:00
fragment.showDialog(new JoinGroupAlert(LaunchActivity.this, invite, group, fragment, (fragment instanceof ChatActivity ? ((ChatActivity) fragment).themeDelegate : null)));
}
2018-08-27 10:33:11 +02:00
} else {
AlertDialog.Builder builder = new AlertDialog.Builder(LaunchActivity.this);
builder.setTitle(LocaleController.getString("AppName", R.string.AppName));
if (error.text.startsWith("FLOOD_WAIT")) {
builder.setMessage(LocaleController.getString("FloodWait", R.string.FloodWait));
2021-02-23 12:53:38 +01:00
} else if (error.text.startsWith("INVITE_HASH_EXPIRED")) {
builder.setTitle(LocaleController.getString("ExpiredLink", R.string.ExpiredLink));
builder.setMessage(LocaleController.getString("InviteExpired", R.string.InviteExpired));
2018-08-27 10:33:11 +02:00
} else {
builder.setMessage(LocaleController.getString("JoinToGroupErrorNotExist", R.string.JoinToGroupErrorNotExist));
}
builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), null);
showAlertDialog(builder);
}
2019-12-31 14:08:08 +01:00
try {
if (hideProgressDialog) {
2022-12-30 13:32:20 +01:00
dismissLoading.run();
2019-12-31 14:08:08 +01:00
}
} catch (Exception e) {
FileLog.e(e);
}
}
2018-08-27 10:33:11 +02:00
}), ConnectionsManager.RequestFlagFailOnServerErrors);
} else if (state == 1) {
TLRPC.TL_messages_importChatInvite req = new TLRPC.TL_messages_importChatInvite();
req.hash = group;
2018-08-27 10:33:11 +02:00
ConnectionsManager.getInstance(intentAccount).sendRequest(req, (response, error) -> {
if (error == null) {
TLRPC.Updates updates = (TLRPC.Updates) response;
MessagesController.getInstance(intentAccount).processUpdates(updates, false);
}
AndroidUtilities.runOnUIThread(() -> {
if (!LaunchActivity.this.isFinishing()) {
try {
2022-12-30 13:32:20 +01:00
dismissLoading.run();
2018-08-27 10:33:11 +02:00
} catch (Exception e) {
FileLog.e(e);
}
if (error == null) {
if (actionBarLayout != null) {
TLRPC.Updates updates = (TLRPC.Updates) response;
if (!updates.chats.isEmpty()) {
TLRPC.Chat chat = updates.chats.get(0);
chat.left = false;
chat.kicked = false;
MessagesController.getInstance(intentAccount).putUsers(updates.users, false);
MessagesController.getInstance(intentAccount).putChats(updates.chats, false);
Bundle args = new Bundle();
2021-09-20 07:54:41 +02:00
args.putLong("chat_id", chat.id);
2018-08-27 10:33:11 +02:00
if (mainFragmentsStack.isEmpty() || MessagesController.getInstance(intentAccount).checkCanOpenChat(args, mainFragmentsStack.get(mainFragmentsStack.size() - 1))) {
ChatActivity fragment = new ChatActivity(args);
NotificationCenter.getInstance(intentAccount).postNotificationName(NotificationCenter.closeChats);
actionBarLayout.presentFragment(fragment, false, true, true, false);
}
}
}
2018-08-27 10:33:11 +02:00
} else {
AlertDialog.Builder builder = new AlertDialog.Builder(LaunchActivity.this);
builder.setTitle(LocaleController.getString("AppName", R.string.AppName));
if (error.text.startsWith("FLOOD_WAIT")) {
builder.setMessage(LocaleController.getString("FloodWait", R.string.FloodWait));
} else if (error.text.equals("USERS_TOO_MUCH")) {
builder.setMessage(LocaleController.getString("JoinToGroupErrorFull", R.string.JoinToGroupErrorFull));
} else {
builder.setMessage(LocaleController.getString("JoinToGroupErrorNotExist", R.string.JoinToGroupErrorNotExist));
}
builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), null);
showAlertDialog(builder);
}
2018-08-27 10:33:11 +02:00
}
});
2015-12-09 19:27:52 +01:00
}, ConnectionsManager.RequestFlagFailOnServerErrors);
}
2015-05-21 23:27:27 +02:00
} else if (sticker != null) {
if (!mainFragmentsStack.isEmpty()) {
TLRPC.TL_inputStickerSetShortName stickerset = new TLRPC.TL_inputStickerSetShortName();
2022-08-12 17:23:51 +02:00
stickerset.short_name = sticker != null ? sticker : emoji;
2016-10-11 13:57:01 +02:00
BaseFragment fragment = mainFragmentsStack.get(mainFragmentsStack.size() - 1);
2020-07-26 10:03:38 +02:00
StickersAlert alert;
2019-12-31 14:08:08 +01:00
if (fragment instanceof ChatActivity) {
2020-07-26 10:03:38 +02:00
ChatActivity chatActivity = (ChatActivity) fragment;
2021-09-20 07:54:41 +02:00
alert = new StickersAlert(LaunchActivity.this, fragment, stickerset, null, chatActivity.getChatActivityEnterViewForStickers(), chatActivity.getResourceProvider());
2020-07-26 10:03:38 +02:00
alert.setCalcMandatoryInsets(chatActivity.isKeyboardVisible());
2019-12-31 14:08:08 +01:00
} else {
2020-07-26 10:03:38 +02:00
alert = new StickersAlert(LaunchActivity.this, fragment, stickerset, null, null);
2019-12-31 14:08:08 +01:00
}
2022-08-12 17:23:51 +02:00
alert.probablyEmojis = emoji != null;
fragment.showDialog(alert);
}
return;
} else if (emoji != null) {
if (!mainFragmentsStack.isEmpty()) {
TLRPC.TL_inputStickerSetShortName stickerset = new TLRPC.TL_inputStickerSetShortName();
stickerset.short_name = sticker != null ? sticker : emoji;
ArrayList<TLRPC.InputStickerSet> sets = new ArrayList<>(1);
sets.add(stickerset);
BaseFragment fragment = mainFragmentsStack.get(mainFragmentsStack.size() - 1);
EmojiPacksAlert alert;
if (fragment instanceof ChatActivity) {
ChatActivity chatActivity = (ChatActivity) fragment;
alert = new EmojiPacksAlert(fragment, LaunchActivity.this, chatActivity.getResourceProvider(), sets);
alert.setCalcMandatoryInsets(chatActivity.isKeyboardVisible());
} else {
alert = new EmojiPacksAlert(fragment, LaunchActivity.this, null, sets);
}
2020-07-26 10:03:38 +02:00
fragment.showDialog(alert);
2015-05-21 23:27:27 +02:00
}
return;
2015-08-13 11:23:31 +02:00
} else if (message != null) {
Bundle args = new Bundle();
args.putBoolean("onlySelect", true);
2023-02-03 20:11:36 +01:00
args.putInt("dialogsType", DialogsActivity.DIALOGS_TYPE_FORWARD);
2015-08-13 11:23:31 +02:00
DialogsActivity fragment = new DialogsActivity(args);
2023-02-06 12:08:24 +01:00
fragment.setDelegate((fragment13, dids, m, param, topicsFragment) -> {
2022-11-05 13:34:47 +01:00
long did = dids.get(0).dialogId;
2018-08-27 10:33:11 +02:00
Bundle args13 = new Bundle();
args13.putBoolean("scrollToTopOnResume", true);
args13.putBoolean("hasUrl", hasUrl);
2021-09-20 07:54:41 +02:00
if (DialogObject.isEncryptedDialog(did)) {
args13.putInt("enc_id", DialogObject.getEncryptedChatId(did));
} else if (DialogObject.isUserDialog(did)) {
args13.putLong("user_id", did);
2018-08-27 10:33:11 +02:00
} else {
2021-09-20 07:54:41 +02:00
args13.putLong("chat_id", -did);
2018-08-27 10:33:11 +02:00
}
if (MessagesController.getInstance(intentAccount).checkCanOpenChat(args13, fragment13)) {
NotificationCenter.getInstance(intentAccount).postNotificationName(NotificationCenter.closeChats);
2020-09-30 15:48:47 +02:00
MediaDataController.getInstance(intentAccount).saveDraft(did, 0, message, null, null, false);
2018-08-27 10:33:11 +02:00
actionBarLayout.presentFragment(new ChatActivity(args13), true, false, true, false);
2015-08-13 11:23:31 +02:00
}
2023-02-03 20:11:36 +01:00
return true;
2015-08-13 11:23:31 +02:00
});
2015-10-29 18:10:07 +01:00
presentFragment(fragment, false, true);
2018-07-30 04:07:02 +02:00
} else if (auth != null) {
final int bot_id = Utilities.parseInt(auth.get("bot_id"));
if (bot_id == 0) {
return;
}
final String payload = auth.get("payload");
2018-08-29 00:59:16 +02:00
final String nonce = auth.get("nonce");
2018-07-30 04:07:02 +02:00
final String callbackUrl = auth.get("callback_url");
final TLRPC.TL_account_getAuthorizationForm req = new TLRPC.TL_account_getAuthorizationForm();
req.bot_id = bot_id;
req.scope = auth.get("scope");
req.public_key = auth.get("public_key");
2018-08-27 10:33:11 +02:00
requestId[0] = ConnectionsManager.getInstance(intentAccount).sendRequest(req, (response, error) -> {
final TLRPC.TL_account_authorizationForm authorizationForm = (TLRPC.TL_account_authorizationForm) response;
if (authorizationForm != null) {
TLRPC.TL_account_getPassword req2 = new TLRPC.TL_account_getPassword();
requestId[0] = ConnectionsManager.getInstance(intentAccount).sendRequest(req2, (response1, error1) -> AndroidUtilities.runOnUIThread(() -> {
try {
2022-12-30 13:32:20 +01:00
dismissLoading.run();
2018-08-27 10:33:11 +02:00
} catch (Exception e) {
FileLog.e(e);
}
if (response1 != null) {
2022-09-16 20:48:21 +02:00
TLRPC.account_Password accountPassword = (TLRPC.account_Password) response1;
2018-08-27 10:33:11 +02:00
MessagesController.getInstance(intentAccount).putUsers(authorizationForm.users, false);
2018-08-29 00:59:16 +02:00
presentFragment(new PassportActivity(PassportActivity.TYPE_PASSWORD, req.bot_id, req.scope, req.public_key, payload, nonce, callbackUrl, authorizationForm, accountPassword));
2018-08-27 10:33:11 +02:00
}
}));
} else {
AndroidUtilities.runOnUIThread(() -> {
try {
2022-12-30 13:32:20 +01:00
dismissLoading.run();
2018-08-27 10:33:11 +02:00
if ("APP_VERSION_OUTDATED".equals(error.text)) {
AlertsCreator.showUpdateAppAlert(LaunchActivity.this, LocaleController.getString("UpdateAppAlert", R.string.UpdateAppAlert), true);
} else {
showAlertDialog(AlertsCreator.createSimpleAlert(LaunchActivity.this, LocaleController.getString("ErrorOccurred", R.string.ErrorOccurred) + "\n" + error.text));
2018-07-30 04:07:02 +02:00
}
2018-08-27 10:33:11 +02:00
} catch (Exception e) {
FileLog.e(e);
}
});
2018-07-30 04:07:02 +02:00
}
});
} else if (unsupportedUrl != null) {
TLRPC.TL_help_getDeepLinkInfo req = new TLRPC.TL_help_getDeepLinkInfo();
req.path = unsupportedUrl;
2018-08-27 10:33:11 +02:00
requestId[0] = ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
try {
2022-12-30 13:32:20 +01:00
dismissLoading.run();
2018-08-27 10:33:11 +02:00
} catch (Exception e) {
FileLog.e(e);
}
2018-07-30 04:07:02 +02:00
2018-08-27 10:33:11 +02:00
if (response instanceof TLRPC.TL_help_deepLinkInfo) {
TLRPC.TL_help_deepLinkInfo res = (TLRPC.TL_help_deepLinkInfo) response;
AlertsCreator.showUpdateAppAlert(LaunchActivity.this, res.message, res.update_app);
2018-07-30 04:07:02 +02:00
}
2018-08-27 10:33:11 +02:00
}));
2019-01-23 18:03:33 +01:00
} else if (lang != null) {
TLRPC.TL_langpack_getLanguage req = new TLRPC.TL_langpack_getLanguage();
req.lang_code = lang;
req.lang_pack = "android";
requestId[0] = ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
2018-08-27 10:33:11 +02:00
try {
2022-12-30 13:32:20 +01:00
dismissLoading.run();
2018-08-27 10:33:11 +02:00
} catch (Exception e) {
FileLog.e(e);
}
2019-01-23 18:03:33 +01:00
if (response instanceof TLRPC.TL_langPackLanguage) {
TLRPC.TL_langPackLanguage res = (TLRPC.TL_langPackLanguage) response;
showAlertDialog(AlertsCreator.createLanguageAlert(LaunchActivity.this, res));
} else if (error != null) {
if ("LANG_CODE_NOT_SUPPORTED".equals(error.text)) {
showAlertDialog(AlertsCreator.createSimpleAlert(LaunchActivity.this, LocaleController.getString("LanguageUnsupportedError", R.string.LanguageUnsupportedError)));
} else {
showAlertDialog(AlertsCreator.createSimpleAlert(LaunchActivity.this, LocaleController.getString("ErrorOccurred", R.string.ErrorOccurred) + "\n" + error.text));
}
}
}));
2019-02-08 03:30:32 +01:00
} else if (wallPaper != null) {
boolean ok = false;
if (TextUtils.isEmpty(wallPaper.slug)) {
2019-01-23 18:03:33 +01:00
try {
2021-06-25 02:43:10 +02:00
WallpapersListActivity.ColorWallpaper colorWallpaper;
if (wallPaper.settings.third_background_color != 0) {
colorWallpaper = new WallpapersListActivity.ColorWallpaper(Theme.COLOR_BACKGROUND_SLUG, wallPaper.settings.background_color, wallPaper.settings.second_background_color, wallPaper.settings.third_background_color, wallPaper.settings.fourth_background_color);
} else {
colorWallpaper = new WallpapersListActivity.ColorWallpaper(Theme.COLOR_BACKGROUND_SLUG, wallPaper.settings.background_color, wallPaper.settings.second_background_color, AndroidUtilities.getWallpaperRotation(wallPaper.settings.rotation, false));
}
ThemePreviewActivity wallpaperActivity = new ThemePreviewActivity(colorWallpaper, null, true, false);
2019-02-08 03:30:32 +01:00
AndroidUtilities.runOnUIThread(() -> presentFragment(wallpaperActivity));
ok = true;
2019-01-23 18:03:33 +01:00
} catch (Exception e) {
FileLog.e(e);
}
2019-02-08 03:30:32 +01:00
}
if (!ok) {
TLRPC.TL_account_getWallPaper req = new TLRPC.TL_account_getWallPaper();
TLRPC.TL_inputWallPaperSlug inputWallPaperSlug = new TLRPC.TL_inputWallPaperSlug();
inputWallPaperSlug.slug = wallPaper.slug;
req.wallpaper = inputWallPaperSlug;
requestId[0] = ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
try {
2022-12-30 13:32:20 +01:00
dismissLoading.run();
2019-02-08 03:30:32 +01:00
} catch (Exception e) {
FileLog.e(e);
}
if (response instanceof TLRPC.TL_wallPaper) {
TLRPC.TL_wallPaper res = (TLRPC.TL_wallPaper) response;
Object object;
2019-05-14 14:08:05 +02:00
if (res.pattern) {
2021-06-25 02:43:10 +02:00
WallpapersListActivity.ColorWallpaper colorWallpaper = new WallpapersListActivity.ColorWallpaper(res.slug, wallPaper.settings.background_color, wallPaper.settings.second_background_color, wallPaper.settings.third_background_color, wallPaper.settings.fourth_background_color, AndroidUtilities.getWallpaperRotation(wallPaper.settings.rotation, false), wallPaper.settings.intensity / 100.0f, wallPaper.settings.motion, null);
2019-02-08 03:30:32 +01:00
colorWallpaper.pattern = res;
object = colorWallpaper;
} else {
object = res;
}
2021-06-25 02:43:10 +02:00
ThemePreviewActivity wallpaperActivity = new ThemePreviewActivity(object, null, true, false);
2019-02-08 03:30:32 +01:00
wallpaperActivity.setInitialModes(wallPaper.settings.blur, wallPaper.settings.motion);
presentFragment(wallpaperActivity);
} else {
showAlertDialog(AlertsCreator.createSimpleAlert(LaunchActivity.this, LocaleController.getString("ErrorOccurred", R.string.ErrorOccurred) + "\n" + error.text));
}
}));
}
2019-09-10 12:56:11 +02:00
} else if (theme != null) {
cancelRunnable = () -> {
loadingThemeFileName = null;
loadingThemeWallpaperName = null;
2019-12-31 14:08:08 +01:00
loadingThemeWallpaper = null;
2019-09-10 12:56:11 +02:00
loadingThemeInfo = null;
loadingThemeProgressDialog = null;
loadingTheme = null;
2022-12-30 13:32:20 +01:00
if (progress != null) {
progress.end();
}
2019-09-10 12:56:11 +02:00
};
TLRPC.TL_account_getTheme req = new TLRPC.TL_account_getTheme();
req.format = "android";
TLRPC.TL_inputThemeSlug inputThemeSlug = new TLRPC.TL_inputThemeSlug();
inputThemeSlug.slug = theme;
req.theme = inputThemeSlug;
requestId[0] = ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
int notFound = 2;
if (response instanceof TLRPC.TL_theme) {
TLRPC.TL_theme t = (TLRPC.TL_theme) response;
2021-11-05 11:06:49 +01:00
TLRPC.ThemeSettings settings = null;
if (t.settings.size() > 0) {
settings = t.settings.get(0);
}
if (settings != null) {
String key = Theme.getBaseThemeKey(settings);
2019-12-31 14:08:08 +01:00
Theme.ThemeInfo info = Theme.getTheme(key);
if (info != null) {
TLRPC.TL_wallPaper object;
2021-11-05 11:06:49 +01:00
if (settings.wallpaper instanceof TLRPC.TL_wallPaper) {
object = (TLRPC.TL_wallPaper) settings.wallpaper;
2022-06-21 04:51:00 +02:00
File path = FileLoader.getInstance(currentAccount).getPathToAttach(object.document, true);
2019-12-31 14:08:08 +01:00
if (!path.exists()) {
loadingThemeProgressDialog = progressDialog;
loadingThemeAccent = true;
loadingThemeInfo = info;
loadingTheme = t;
loadingThemeWallpaper = object;
loadingThemeWallpaperName = FileLoader.getAttachFileName(object.document);
2022-09-16 20:48:21 +02:00
FileLoader.getInstance(currentAccount).loadFile(object.document, object, FileLoader.PRIORITY_NORMAL, 1);
2019-12-31 14:08:08 +01:00
return;
}
} else {
object = null;
}
try {
2022-12-30 13:32:20 +01:00
dismissLoading.run();
2019-12-31 14:08:08 +01:00
} catch (Exception e) {
FileLog.e(e);
}
notFound = 0;
openThemeAccentPreview(t, object, info);
} else {
notFound = 1;
}
} else if (t.document != null) {
loadingThemeAccent = false;
2019-09-10 12:56:11 +02:00
loadingTheme = t;
loadingThemeFileName = FileLoader.getAttachFileName(loadingTheme.document);
loadingThemeProgressDialog = progressDialog;
2022-09-16 20:48:21 +02:00
FileLoader.getInstance(currentAccount).loadFile(loadingTheme.document, t, FileLoader.PRIORITY_NORMAL, 1);
2019-09-10 12:56:11 +02:00
notFound = 0;
} else {
notFound = 1;
}
} else if (error != null && "THEME_FORMAT_INVALID".equals(error.text)) {
notFound = 1;
}
if (notFound != 0) {
try {
2022-12-30 13:32:20 +01:00
dismissLoading.run();
2019-09-10 12:56:11 +02:00
} catch (Exception e) {
FileLog.e(e);
}
if (notFound == 1) {
showAlertDialog(AlertsCreator.createSimpleAlert(LaunchActivity.this, LocaleController.getString("Theme", R.string.Theme), LocaleController.getString("ThemeNotSupported", R.string.ThemeNotSupported)));
} else {
showAlertDialog(AlertsCreator.createSimpleAlert(LaunchActivity.this, LocaleController.getString("Theme", R.string.Theme), LocaleController.getString("ThemeNotFound", R.string.ThemeNotFound)));
}
}
}));
2019-05-14 14:08:05 +02:00
} else if (channelId != null && messageId != null) {
2020-09-30 15:48:47 +02:00
if (threadId != null) {
TLRPC.Chat chat = MessagesController.getInstance(intentAccount).getChat(channelId);
if (chat != null) {
2022-12-30 13:32:20 +01:00
requestId[0] = runCommentRequest(intentAccount, dismissLoading, messageId, commentId, threadId, chat);
2020-09-30 15:48:47 +02:00
} else {
TLRPC.TL_channels_getChannels req = new TLRPC.TL_channels_getChannels();
TLRPC.TL_inputChannel inputChannel = new TLRPC.TL_inputChannel();
inputChannel.channel_id = channelId;
req.id.add(inputChannel);
requestId[0] = ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
boolean notFound = true;
if (response instanceof TLRPC.TL_messages_chats) {
TLRPC.TL_messages_chats res = (TLRPC.TL_messages_chats) response;
if (!res.chats.isEmpty()) {
notFound = false;
MessagesController.getInstance(currentAccount).putChats(res.chats, false);
2022-12-30 13:32:20 +01:00
requestId[0] = runCommentRequest(intentAccount, dismissLoading, messageId, commentId, threadId, res.chats.get(0));
2020-09-30 15:48:47 +02:00
}
}
if (notFound) {
2019-05-14 14:08:05 +02:00
try {
2022-12-30 13:32:20 +01:00
dismissLoading.run();
2019-05-14 14:08:05 +02:00
} catch (Exception e) {
FileLog.e(e);
}
2022-11-05 13:34:47 +01:00
showAlertDialog(AlertsCreator.createNoAccessAlert(LaunchActivity.this, LocaleController.getString(R.string.DialogNotAvailable), LocaleController.getString(R.string.LinkNotFound), null));
2020-09-30 15:48:47 +02:00
}
}));
}
} else {
Bundle args = new Bundle();
2021-09-20 07:54:41 +02:00
args.putLong("chat_id", channelId);
2020-09-30 15:48:47 +02:00
args.putInt("message_id", messageId);
2022-11-05 13:34:47 +01:00
TLRPC.Chat chatLocal = MessagesController.getInstance(currentAccount).getChat(channelId);
if (chatLocal != null && chatLocal.forum) {
2022-11-06 02:16:18 +01:00
openForumFromLink(-channelId, 0, messageId, () -> {
try {
2022-12-30 13:32:20 +01:00
dismissLoading.run();
2022-11-06 02:16:18 +01:00
} catch (Exception e) {
FileLog.e(e);
}
});
2022-11-05 13:34:47 +01:00
} else {
BaseFragment lastFragment = !mainFragmentsStack.isEmpty() ? mainFragmentsStack.get(mainFragmentsStack.size() - 1) : null;
if (lastFragment == null || MessagesController.getInstance(intentAccount).checkCanOpenChat(args, lastFragment)) {
AndroidUtilities.runOnUIThread(() -> {
if (!actionBarLayout.presentFragment(new ChatActivity(args))) {
TLRPC.TL_channels_getChannels req = new TLRPC.TL_channels_getChannels();
TLRPC.TL_inputChannel inputChannel = new TLRPC.TL_inputChannel();
inputChannel.channel_id = channelId;
req.id.add(inputChannel);
requestId[0] = ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
try {
2022-12-30 13:32:20 +01:00
dismissLoading.run();
2022-11-05 13:34:47 +01:00
} catch (Exception e) {
FileLog.e(e);
}
boolean notFound = true;
if (response instanceof TLRPC.TL_messages_chats) {
TLRPC.TL_messages_chats res = (TLRPC.TL_messages_chats) response;
if (!res.chats.isEmpty()) {
notFound = false;
MessagesController.getInstance(currentAccount).putChats(res.chats, false);
TLRPC.Chat chat = res.chats.get(0);
if (chat != null && chat.forum) {
if (threadId != null) {
openForumFromLink(-channelId, threadId, messageId, null);
} else {
openForumFromLink(-channelId, messageId, null, null);
}
}
if (lastFragment == null || MessagesController.getInstance(intentAccount).checkCanOpenChat(args, lastFragment)) {
actionBarLayout.presentFragment(new ChatActivity(args));
}
2020-09-30 15:48:47 +02:00
}
2019-05-14 14:08:05 +02:00
}
2022-11-05 13:34:47 +01:00
if (notFound) {
showAlertDialog(AlertsCreator.createNoAccessAlert(LaunchActivity.this, LocaleController.getString(R.string.DialogNotAvailable), LocaleController.getString(R.string.LinkNotFound), null));
}
}));
}
});
}
2020-09-30 15:48:47 +02:00
}
2019-05-14 14:08:05 +02:00
}
2019-01-23 18:03:33 +01:00
}
if (requestId[0] != 0) {
2019-09-10 12:56:11 +02:00
final Runnable cancelRunnableFinal = cancelRunnable;
progressDialog.setOnCancelListener(dialog -> {
ConnectionsManager.getInstance(intentAccount).cancelRequest(requestId[0], true);
if (cancelRunnableFinal != null) {
cancelRunnableFinal.run();
}
});
2022-12-30 13:32:20 +01:00
if (progress != null) {
progress.onCancel(() -> {
ConnectionsManager.getInstance(intentAccount).cancelRequest(requestId[0], true);
if (cancelRunnableFinal != null) {
cancelRunnableFinal.run();
}
});
2017-12-08 18:35:59 +01:00
}
2022-12-30 13:32:20 +01:00
try {
if (progress != null) {
progress.init();
} else {
progressDialog.showDelayed(300);
}
} catch (Exception ignore) {}
2015-08-13 11:23:31 +02:00
}
}
2022-11-05 13:34:47 +01:00
private void openForumFromLink(long dialogId, int topicId, Integer messageId, Runnable onOpened) {
2022-11-06 02:16:18 +01:00
if (messageId == null) {
Bundle bundle = new Bundle();
bundle.putLong("chat_id", -dialogId);
presentFragment(new TopicsFragment(bundle));
2022-11-05 13:34:47 +01:00
2022-11-06 02:16:18 +01:00
if (onOpened != null) {
onOpened.run();
2022-11-05 13:34:47 +01:00
}
2022-11-06 02:16:18 +01:00
return;
}
TLRPC.TL_channels_getMessages req = new TLRPC.TL_channels_getMessages();
req.channel = MessagesController.getInstance(currentAccount).getInputChannel(-dialogId);
req.id.add(messageId);
ConnectionsManager.getInstance(currentAccount).sendRequest(req, (res, err) -> {
AndroidUtilities.runOnUIThread(() -> {
TLRPC.Message message = null;
if (res instanceof TLRPC.messages_Messages) {
ArrayList<TLRPC.Message> messages = ((TLRPC.messages_Messages) res).messages;
for (int i = 0; i < messages.size(); ++i) {
if (messages.get(i) != null && messages.get(i).id == messageId) {
message = messages.get(i);
break;
}
}
2022-11-05 13:34:47 +01:00
}
2022-11-06 02:16:18 +01:00
if (message != null) {
2022-12-06 20:13:44 +01:00
runCommentRequest(currentAccount, null, message.id, null, MessageObject.getTopicId(message, MessagesController.getInstance(currentAccount).isForum(message)), MessagesController.getInstance(currentAccount).getChat(-dialogId), onOpened);
2022-11-06 02:16:18 +01:00
return;
}
2022-11-05 13:34:47 +01:00
Bundle bundle = new Bundle();
bundle.putLong("chat_id", -dialogId);
presentFragment(new TopicsFragment(bundle));
2022-11-06 02:16:18 +01:00
if (onOpened != null) {
onOpened.run();
}
});
});
2022-11-05 13:34:47 +01:00
}
2020-09-30 15:48:47 +02:00
private List<TLRPC.TL_contact> findContacts(String userName, String userPhone, boolean allowSelf) {
final MessagesController messagesController = MessagesController.getInstance(currentAccount);
final ContactsController contactsController = ContactsController.getInstance(currentAccount);
final List<TLRPC.TL_contact> contacts = new ArrayList<>(contactsController.contacts);
final List<TLRPC.TL_contact> foundContacts = new ArrayList<>();
if (userPhone != null) {
userPhone = PhoneFormat.stripExceptNumbers(userPhone);
2020-10-05 00:13:31 +02:00
TLRPC.TL_contact contact = contactsController.contactsByPhone.get(userPhone);
if (contact == null) {
String shortUserPhone = userPhone.substring(Math.max(0, userPhone.length() - 7));
contact = contactsController.contactsByShortPhone.get(shortUserPhone);
}
2020-09-30 15:48:47 +02:00
if (contact != null) {
final TLRPC.User user = messagesController.getUser(contact.user_id);
if (user != null && (!user.self || allowSelf)) {
foundContacts.add(contact);
} else {
// disable search by name
userName = null;
}
}
}
if (foundContacts.isEmpty() && userName != null) {
final String query1 = userName.trim().toLowerCase();
if (!TextUtils.isEmpty(query1)) {
String query2 = LocaleController.getInstance().getTranslitString(query1);
if (query1.equals(query2) || query2.length() == 0) {
query2 = null;
}
final String[] queries = new String[]{query1, query2};
for (int i = 0, size = contacts.size(); i < size; i++) {
final TLRPC.TL_contact contact = contacts.get(i);
if (contact != null) {
final TLRPC.User user = messagesController.getUser(contact.user_id);
if (user != null) {
if (user.self && !allowSelf) {
continue;
}
final String[] names = new String[3];
names[0] = ContactsController.formatName(user.first_name, user.last_name).toLowerCase();
names[1] = LocaleController.getInstance().getTranslitString(names[0]);
if (names[0].equals(names[1])) {
names[1] = null;
}
if (UserObject.isReplyUser(user)) {
names[2] = LocaleController.getString("RepliesTitle", R.string.RepliesTitle).toLowerCase();
} else if (user.self) {
names[2] = LocaleController.getString("SavedMessages", R.string.SavedMessages).toLowerCase();
}
boolean found = false;
for (String q : queries) {
if (q == null) {
continue;
}
for (int j = 0; j < names.length; j++) {
final String name = names[j];
if (name != null && (name.startsWith(q) || name.contains(" " + q))) {
found = true;
break;
}
}
2022-11-06 02:16:18 +01:00
String username = UserObject.getPublicUsername(user);
if (!found && username != null && username.startsWith(q)) {
2020-09-30 15:48:47 +02:00
found = true;
}
if (found) {
foundContacts.add(contact);
break;
}
}
}
}
}
}
}
return foundContacts;
}
2021-07-15 16:24:57 +02:00
private void createUpdateUI() {
if (sideMenuContainer == null) {
return;
}
updateLayout = new FrameLayout(this) {
private Paint paint = new Paint();
private Matrix matrix = new Matrix();
private LinearGradient updateGradient;
private int lastGradientWidth;
@Override
2022-02-01 14:00:45 +01:00
public void draw(Canvas canvas) {
if (updateGradient != null) {
paint.setColor(0xffffffff);
paint.setShader(updateGradient);
updateGradient.setLocalMatrix(matrix);
canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), paint);
updateLayoutIcon.setBackgroundGradientDrawable(updateGradient);
updateLayoutIcon.draw(canvas);
2021-07-15 16:24:57 +02:00
}
2022-02-01 14:00:45 +01:00
super.draw(canvas);
2021-07-15 16:24:57 +02:00
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int width = MeasureSpec.getSize(widthMeasureSpec);
if (lastGradientWidth != width) {
updateGradient = new LinearGradient(0, 0, width, 0, new int[]{0xff69BF72, 0xff53B3AD}, new float[]{0.0f, 1.0f}, Shader.TileMode.CLAMP);
lastGradientWidth = width;
}
}
};
updateLayout.setWillNotDraw(false);
updateLayout.setVisibility(View.INVISIBLE);
updateLayout.setTranslationY(AndroidUtilities.dp(44));
if (Build.VERSION.SDK_INT >= 21) {
2022-02-01 14:00:45 +01:00
updateLayout.setBackground(Theme.getSelectorDrawable(0x40ffffff, false));
2021-07-15 16:24:57 +02:00
}
sideMenuContainer.addView(updateLayout, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 44, Gravity.LEFT | Gravity.BOTTOM));
updateLayout.setOnClickListener(v -> {
if (!SharedConfig.isAppUpdateAvailable()) {
return;
}
if (updateLayoutIcon.getIcon() == MediaActionDrawable.ICON_DOWNLOAD) {
2022-09-16 20:48:21 +02:00
FileLoader.getInstance(currentAccount).loadFile(SharedConfig.pendingAppUpdate.document, "update", FileLoader.PRIORITY_NORMAL, 1);
2021-07-15 16:24:57 +02:00
updateAppUpdateViews(true);
} else if (updateLayoutIcon.getIcon() == MediaActionDrawable.ICON_CANCEL) {
FileLoader.getInstance(currentAccount).cancelLoadFile(SharedConfig.pendingAppUpdate.document);
updateAppUpdateViews(true);
} else {
AndroidUtilities.openForView(SharedConfig.pendingAppUpdate.document, true, this);
}
});
updateLayoutIcon = new RadialProgress2(updateLayout);
updateLayoutIcon.setColors(0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff);
updateLayoutIcon.setProgressRect(AndroidUtilities.dp(22), AndroidUtilities.dp(11), AndroidUtilities.dp(22 + 22), AndroidUtilities.dp(11 + 22));
updateLayoutIcon.setCircleRadius(AndroidUtilities.dp(11));
updateLayoutIcon.setAsMini();
updateTextView = new SimpleTextView(this);
updateTextView.setTextSize(15);
updateTextView.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf"));
updateTextView.setText(LocaleController.getString("AppUpdate", R.string.AppUpdate));
updateTextView.setTextColor(0xffffffff);
updateTextView.setGravity(Gravity.LEFT);
updateLayout.addView(updateTextView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_VERTICAL, 74, 0, 0, 0));
updateSizeTextView = new TextView(this);
updateSizeTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
updateSizeTextView.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf"));
updateSizeTextView.setGravity(Gravity.RIGHT);
updateSizeTextView.setTextColor(0xffffffff);
updateLayout.addView(updateSizeTextView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_VERTICAL | Gravity.RIGHT, 0, 0, 17, 0));
}
2021-06-25 02:43:10 +02:00
private void updateAppUpdateViews(boolean animated) {
2021-07-15 16:24:57 +02:00
if (sideMenuContainer == null) {
2021-06-25 02:43:10 +02:00
return;
}
if (SharedConfig.isAppUpdateAvailable()) {
2022-02-12 06:22:45 +01:00
View prevUpdateLayout = updateLayout;
2021-07-15 16:24:57 +02:00
createUpdateUI();
2021-06-25 02:43:10 +02:00
updateSizeTextView.setText(AndroidUtilities.formatFileSize(SharedConfig.pendingAppUpdate.document.size));
String fileName = FileLoader.getAttachFileName(SharedConfig.pendingAppUpdate.document);
2022-06-21 04:51:00 +02:00
File path = FileLoader.getInstance(currentAccount).getPathToAttach(SharedConfig.pendingAppUpdate.document, true);
2021-06-25 02:43:10 +02:00
boolean showSize;
if (path.exists()) {
2022-02-12 06:22:45 +01:00
updateLayoutIcon.setIcon(MediaActionDrawable.ICON_UPDATE, true, false);
2021-06-25 02:43:10 +02:00
updateTextView.setText(LocaleController.getString("AppUpdateNow", R.string.AppUpdateNow));
showSize = false;
} else {
if (FileLoader.getInstance(currentAccount).isLoadingFile(fileName)) {
2022-02-12 06:22:45 +01:00
updateLayoutIcon.setIcon(MediaActionDrawable.ICON_CANCEL, true, false);
updateLayoutIcon.setProgress(0, false);
2021-06-25 02:43:10 +02:00
Float p = ImageLoader.getInstance().getFileProgress(fileName);
updateTextView.setText(LocaleController.formatString("AppUpdateDownloading", R.string.AppUpdateDownloading, (int) ((p != null ? p : 0.0f) * 100)));
showSize = false;
} else {
2022-02-12 06:22:45 +01:00
updateLayoutIcon.setIcon(MediaActionDrawable.ICON_DOWNLOAD, true, false);
2021-06-25 02:43:10 +02:00
updateTextView.setText(LocaleController.getString("AppUpdate", R.string.AppUpdate));
showSize = true;
}
}
if (showSize) {
if (updateSizeTextView.getTag() != null) {
if (animated) {
updateSizeTextView.setTag(null);
updateSizeTextView.animate().alpha(1.0f).scaleX(1.0f).scaleY(1.0f).setDuration(180).start();
} else {
updateSizeTextView.setAlpha(1.0f);
updateSizeTextView.setScaleX(1.0f);
updateSizeTextView.setScaleY(1.0f);
}
}
} else {
if (updateSizeTextView.getTag() == null) {
if (animated) {
updateSizeTextView.setTag(1);
updateSizeTextView.animate().alpha(0.0f).scaleX(0.0f).scaleY(0.0f).setDuration(180).start();
} else {
updateSizeTextView.setAlpha(0.0f);
updateSizeTextView.setScaleX(0.0f);
updateSizeTextView.setScaleY(0.0f);
}
}
}
if (updateLayout.getTag() != null) {
return;
}
updateLayout.setVisibility(View.VISIBLE);
updateLayout.setTag(1);
if (animated) {
2022-02-12 06:22:45 +01:00
updateLayout.animate().translationY(0).setInterpolator(CubicBezierInterpolator.EASE_OUT).setListener(null).setDuration(180).withEndAction(() -> {
if (prevUpdateLayout != null) {
ViewGroup parent = (ViewGroup) prevUpdateLayout.getParent();
parent.removeView(prevUpdateLayout);
}
}).start();
2021-06-25 02:43:10 +02:00
} else {
updateLayout.setTranslationY(0);
2022-02-12 06:22:45 +01:00
if (prevUpdateLayout != null) {
ViewGroup parent = (ViewGroup) prevUpdateLayout.getParent();
parent.removeView(prevUpdateLayout);
}
2021-06-25 02:43:10 +02:00
}
sideMenu.setPadding(0, 0, 0, AndroidUtilities.dp(44));
} else {
2021-07-15 16:24:57 +02:00
if (updateLayout == null || updateLayout.getTag() == null) {
2021-06-25 02:43:10 +02:00
return;
}
updateLayout.setTag(null);
if (animated) {
updateLayout.animate().translationY(AndroidUtilities.dp(44)).setInterpolator(CubicBezierInterpolator.EASE_OUT).setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
if (updateLayout.getTag() == null) {
updateLayout.setVisibility(View.INVISIBLE);
}
}
}).setDuration(180).start();
} else {
updateLayout.setTranslationY(AndroidUtilities.dp(44));
updateLayout.setVisibility(View.INVISIBLE);
}
sideMenu.setPadding(0, 0, 0, 0);
}
}
2018-07-30 04:07:02 +02:00
public void checkAppUpdate(boolean force) {
if (!force && BuildVars.DEBUG_VERSION || !force && !BuildVars.CHECK_UPDATES) {
return;
}
2021-06-25 02:43:10 +02:00
if (!force && Math.abs(System.currentTimeMillis() - SharedConfig.lastUpdateCheckTime) < MessagesController.getInstance(0).updateCheckDelay * 1000) {
2018-07-30 04:07:02 +02:00
return;
}
TLRPC.TL_help_getAppUpdate req = new TLRPC.TL_help_getAppUpdate();
try {
req.source = ApplicationLoader.applicationContext.getPackageManager().getInstallerPackageName(ApplicationLoader.applicationContext.getPackageName());
} catch (Exception ignore) {
}
if (req.source == null) {
req.source = "";
}
final int accountNum = currentAccount;
2018-08-27 10:33:11 +02:00
ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response, error) -> {
2021-06-25 02:43:10 +02:00
SharedConfig.lastUpdateCheckTime = System.currentTimeMillis();
SharedConfig.saveConfig();
2018-08-27 10:33:11 +02:00
if (response instanceof TLRPC.TL_help_appUpdate) {
final TLRPC.TL_help_appUpdate res = (TLRPC.TL_help_appUpdate) response;
AndroidUtilities.runOnUIThread(() -> {
2021-07-15 16:24:57 +02:00
if (SharedConfig.pendingAppUpdate != null && SharedConfig.pendingAppUpdate.version.equals(res.version)) {
return;
}
if (SharedConfig.setNewAppVersionAvailable(res)) {
if (res.can_not_skip) {
showUpdateActivity(accountNum, res, false);
} else {
drawerLayoutAdapter.notifyDataSetChanged();
try {
(new UpdateAppAlertDialog(LaunchActivity.this, res, accountNum)).show();
} catch (Exception e) {
FileLog.e(e);
}
2018-07-30 04:07:02 +02:00
}
NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.appUpdateAvailable);
2018-08-27 10:33:11 +02:00
}
});
2018-07-30 04:07:02 +02:00
}
});
}
public AlertDialog showAlertDialog(AlertDialog.Builder builder) {
try {
if (visibleDialog != null) {
visibleDialog.dismiss();
visibleDialog = null;
}
} catch (Exception e) {
2017-03-31 01:58:05 +02:00
FileLog.e(e);
}
try {
visibleDialog = builder.show();
visibleDialog.setCanceledOnTouchOutside(true);
2019-12-31 14:08:08 +01:00
visibleDialog.setOnDismissListener(dialog -> {
if (visibleDialog != null) {
if (visibleDialog == localeDialog) {
2023-03-24 12:38:14 +01:00
BaseFragment fragment = actionBarLayout == null ? null : actionBarLayout.getLastFragment();
2019-12-31 14:08:08 +01:00
try {
String shorname = LocaleController.getInstance().getCurrentLocaleInfo().shortName;
2023-03-24 12:38:14 +01:00
if (fragment != null) {
BulletinFactory.of(fragment).createSimpleBulletin(
R.raw.msg_translate,
getStringForLanguageAlert(shorname.equals("en") ? englishLocaleStrings : systemLocaleStrings, "ChangeLanguageLater", R.string.ChangeLanguageLater)
).setDuration(Bulletin.DURATION_PROLONG).show();
} else {
BulletinFactory.of(Bulletin.BulletinWindow.make(LaunchActivity.this), null).createSimpleBulletin(
R.raw.msg_translate,
getStringForLanguageAlert(shorname.equals("en") ? englishLocaleStrings : systemLocaleStrings, "ChangeLanguageLater", R.string.ChangeLanguageLater)
).setDuration(Bulletin.DURATION_PROLONG).show();
}
2019-12-31 14:08:08 +01:00
} catch (Exception e) {
FileLog.e(e);
2017-07-08 18:32:04 +02:00
}
2019-12-31 14:08:08 +01:00
localeDialog = null;
} else if (visibleDialog == proxyErrorDialog) {
SharedPreferences preferences = MessagesController.getGlobalMainSettings();
SharedPreferences.Editor editor = MessagesController.getGlobalMainSettings().edit();
editor.putBoolean("proxy_enabled", false);
editor.putBoolean("proxy_enabled_calls", false);
editor.commit();
ConnectionsManager.setProxySettings(false, "", 1080, "", "", "");
NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.proxySettingsChanged);
proxyErrorDialog = null;
2017-07-08 18:32:04 +02:00
}
}
2019-12-31 14:08:08 +01:00
visibleDialog = null;
});
return visibleDialog;
} catch (Exception e) {
2017-03-31 01:58:05 +02:00
FileLog.e(e);
}
return null;
}
2020-12-23 08:48:30 +01:00
public void showBulletin(Function<BulletinFactory, Bulletin> createBulletin) {
BaseFragment topFragment = null;
if (!layerFragmentsStack.isEmpty()) {
2022-06-21 04:51:00 +02:00
topFragment = layerFragmentsStack.get(layerFragmentsStack.size() - 1);
2020-12-23 08:48:30 +01:00
} else if (!rightFragmentsStack.isEmpty()) {
topFragment = rightFragmentsStack.get(rightFragmentsStack.size() - 1);
} else if (!mainFragmentsStack.isEmpty()) {
topFragment = mainFragmentsStack.get(mainFragmentsStack.size() - 1);
}
if (BulletinFactory.canShowBulletin(topFragment)) {
createBulletin.apply(BulletinFactory.of(topFragment)).show();
}
}
2022-06-21 04:51:00 +02:00
public void setNavigateToPremiumBot(boolean val) {
navigateToPremiumBot = val;
}
2022-08-12 17:23:51 +02:00
public void setNavigateToPremiumGiftCallback(Runnable val) {
navigateToPremiumGiftCallback = val;
}
@Override
2022-06-21 04:51:00 +02:00
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
handleIntent(intent, true, false, false);
2013-10-25 17:19:00 +02:00
}
2022-12-30 13:32:20 +01:00
public void onNewIntent(Intent intent, Browser.Progress progress) {
super.onNewIntent(intent);
handleIntent(intent, true, false, false, progress);
}
2013-10-25 17:19:00 +02:00
@Override
2023-02-06 12:08:24 +01:00
public boolean didSelectDialogs(DialogsActivity dialogsFragment, ArrayList<MessagesStorage.TopicKey> dids, CharSequence message, boolean param, TopicsFragment topicsFragment) {
2018-07-30 04:07:02 +02:00
final int account = dialogsFragment != null ? dialogsFragment.getCurrentAccount() : currentAccount;
2019-12-31 14:08:08 +01:00
2021-01-28 15:15:51 +01:00
if (exportingChatUri != null) {
2021-01-28 16:42:39 +01:00
Uri uri = exportingChatUri;
ArrayList<Uri> documentsUris = documentsUrisArray != null ? new ArrayList<>(documentsUrisArray) : null;
2022-12-30 13:32:20 +01:00
final AlertDialog progressDialog = new AlertDialog(this, AlertDialog.ALERT_TYPE_SPINNER);
2022-11-05 13:34:47 +01:00
SendMessagesHelper.getInstance(account).prepareImportHistory(dids.get(0).dialogId, exportingChatUri, documentsUrisArray, (result) -> {
2021-01-28 15:15:51 +01:00
if (result != 0) {
Bundle args = new Bundle();
args.putBoolean("scrollToTopOnResume", true);
if (!AndroidUtilities.isTablet()) {
NotificationCenter.getInstance(account).postNotificationName(NotificationCenter.closeChats);
}
2021-09-20 07:54:41 +02:00
if (DialogObject.isUserDialog(result)) {
args.putLong("user_id", result);
2021-01-28 15:15:51 +01:00
} else {
2021-09-20 07:54:41 +02:00
args.putLong("chat_id", -result);
2021-01-28 15:15:51 +01:00
}
ChatActivity fragment = new ChatActivity(args);
fragment.setOpenImport();
actionBarLayout.presentFragment(fragment, dialogsFragment != null || param, dialogsFragment == null, true, false);
} else {
2021-01-28 16:42:39 +01:00
documentsUrisArray = documentsUris;
if (documentsUrisArray == null) {
documentsUrisArray = new ArrayList<>();
}
documentsUrisArray.add(0, uri);
openDialogsToSend(true);
2019-12-31 14:08:08 +01:00
}
2021-01-28 15:15:51 +01:00
try {
progressDialog.dismiss();
} catch (Exception e) {
FileLog.e(e);
}
});
try {
progressDialog.showDelayed(300);
} catch (Exception ignore) {
2019-12-31 14:08:08 +01:00
}
2017-12-08 18:35:59 +01:00
} else {
2022-02-15 21:18:49 +01:00
boolean notify = dialogsFragment == null || dialogsFragment.notify;
2021-01-28 15:15:51 +01:00
final ChatActivity fragment;
if (dids.size() <= 1) {
2022-11-05 13:34:47 +01:00
final long did = dids.get(0).dialogId;
2019-12-31 14:08:08 +01:00
2021-01-28 15:15:51 +01:00
Bundle args = new Bundle();
args.putBoolean("scrollToTopOnResume", true);
if (!AndroidUtilities.isTablet()) {
NotificationCenter.getInstance(account).postNotificationName(NotificationCenter.closeChats);
2019-12-31 14:08:08 +01:00
}
2021-09-20 07:54:41 +02:00
if (DialogObject.isEncryptedDialog(did)) {
args.putInt("enc_id", DialogObject.getEncryptedChatId(did));
} else if (DialogObject.isUserDialog(did)) {
args.putLong("user_id", did);
2021-01-28 15:15:51 +01:00
} else {
2021-09-20 07:54:41 +02:00
args.putLong("chat_id", -did);
2019-12-31 14:08:08 +01:00
}
2021-01-28 15:15:51 +01:00
if (!MessagesController.getInstance(account).checkCanOpenChat(args, dialogsFragment)) {
2023-02-03 20:11:36 +01:00
return false;
2021-01-28 15:15:51 +01:00
}
fragment = new ChatActivity(args);
2022-12-09 08:34:00 +01:00
ForumUtilities.applyTopic(fragment, dids.get(0));
2021-01-28 15:15:51 +01:00
} else {
fragment = null;
}
int attachesCount = 0;
if (contactsToSend != null) {
attachesCount += contactsToSend.size();
}
if (videoPath != null) {
attachesCount++;
}
if (photoPathsArray != null) {
attachesCount += photoPathsArray.size();
}
if (documentsPathsArray != null) {
attachesCount += documentsPathsArray.size();
}
if (documentsUrisArray != null) {
attachesCount += documentsUrisArray.size();
}
if (videoPath == null && photoPathsArray == null && documentsPathsArray == null && documentsUrisArray == null && sendingText != null) {
attachesCount++;
}
2019-12-31 14:08:08 +01:00
for (int i = 0; i < dids.size(); i++) {
2022-11-05 13:34:47 +01:00
final long did = dids.get(i).dialogId;
2021-01-28 15:15:51 +01:00
if (AlertsCreator.checkSlowMode(this, currentAccount, did, attachesCount > 1)) {
2023-02-03 20:11:36 +01:00
return false;
2021-01-28 15:15:51 +01:00
}
}
2019-12-31 14:08:08 +01:00
2023-02-06 12:08:24 +01:00
if (topicsFragment != null) {
topicsFragment.removeSelfFromStack();
}
boolean presentedFragmentWithRemoveLast = false;
2021-01-28 15:15:51 +01:00
if (contactsToSend != null && contactsToSend.size() == 1 && !mainFragmentsStack.isEmpty()) {
2023-02-06 12:08:24 +01:00
presentedFragmentWithRemoveLast = true;
2021-01-28 15:15:51 +01:00
PhonebookShareAlert alert = new PhonebookShareAlert(mainFragmentsStack.get(mainFragmentsStack.size() - 1), null, null, contactsToSendUri, null, null, null);
2022-02-15 21:18:49 +01:00
alert.setDelegate((user, notify2, scheduleDate) -> {
2021-01-28 15:15:51 +01:00
if (fragment != null) {
actionBarLayout.presentFragment(fragment, true, false, true, false);
2019-12-31 14:08:08 +01:00
}
2022-03-20 21:22:37 +01:00
AccountInstance accountInstance = AccountInstance.getInstance(UserConfig.selectedAccount);
2021-01-28 15:15:51 +01:00
for (int i = 0; i < dids.size(); i++) {
2022-11-05 13:34:47 +01:00
long did = dids.get(i).dialogId;
2023-02-06 12:08:24 +01:00
int topicId = dids.get(i).topicId;
MessageObject replyToMsg = null;
if (topicId != 0) {
TLRPC.TL_forumTopic topic = accountInstance.getMessagesController().getTopicsController().findTopic(-did, topicId);
if (topic != null && topic.topicStartMessage != null) {
replyToMsg = new MessageObject(accountInstance.getCurrentAccount(), topic.topicStartMessage, false, false);
replyToMsg.isTopicMainMessage = true;
}
}
SendMessagesHelper.getInstance(account).sendMessage(user, did, replyToMsg, replyToMsg, null, null, notify2, scheduleDate);
2022-03-20 21:22:37 +01:00
if (!TextUtils.isEmpty(message)) {
SendMessagesHelper.prepareSendingText(accountInstance, message.toString(), did, notify, 0);
}
2021-01-28 15:15:51 +01:00
}
});
mainFragmentsStack.get(mainFragmentsStack.size() - 1).showDialog(alert);
} else {
String captionToSend = null;
for (int i = 0; i < dids.size(); i++) {
2022-11-05 13:34:47 +01:00
final long did = dids.get(i).dialogId;
2023-01-04 00:17:33 +01:00
final int topicId = dids.get(i).topicId;
2021-01-28 15:15:51 +01:00
AccountInstance accountInstance = AccountInstance.getInstance(UserConfig.selectedAccount);
2023-01-04 00:17:33 +01:00
MessageObject replyToMsg = null;
if (topicId != 0) {
TLRPC.TL_forumTopic topic = accountInstance.getMessagesController().getTopicsController().findTopic(-did, topicId);
if (topic != null && topic.topicStartMessage != null) {
replyToMsg = new MessageObject(accountInstance.getCurrentAccount(), topic.topicStartMessage, false, false);
2023-02-06 12:08:24 +01:00
replyToMsg.isTopicMainMessage = true;
2023-01-04 00:17:33 +01:00
}
}
2022-03-20 21:22:37 +01:00
boolean photosEditorOpened = false, videoEditorOpened = false;
2021-01-28 15:15:51 +01:00
if (fragment != null) {
2022-02-15 21:18:49 +01:00
boolean withoutAnimation = dialogsFragment == null || (videoPath != null || (photoPathsArray != null && photoPathsArray.size() > 0));
actionBarLayout.presentFragment(fragment, dialogsFragment != null, withoutAnimation, true, false);
2023-02-06 12:08:24 +01:00
presentedFragmentWithRemoveLast = dialogsFragment != null;
2023-03-13 23:39:50 +01:00
if (videoPath != null && topicId == 0) {
2021-01-28 15:15:51 +01:00
fragment.openVideoEditor(videoPath, sendingText);
2022-03-20 21:22:37 +01:00
videoEditorOpened = true;
2021-01-28 15:15:51 +01:00
sendingText = null;
2023-03-13 23:39:50 +01:00
} else if (photoPathsArray != null && photoPathsArray.size() > 0 && topicId == 0) {
2022-02-12 06:22:45 +01:00
photosEditorOpened = fragment.openPhotosEditor(photoPathsArray, message == null || message.length() == 0 ? sendingText : message);
if (photosEditorOpened) {
sendingText = null;
}
2021-01-28 15:15:51 +01:00
}
} else {
if (videoPath != null) {
if (sendingText != null && sendingText.length() <= 1024) {
captionToSend = sendingText;
sendingText = null;
}
ArrayList<String> arrayList = new ArrayList<>();
arrayList.add(videoPath);
2023-01-04 00:17:33 +01:00
SendMessagesHelper.prepareSendingDocuments(accountInstance, arrayList, arrayList, null, captionToSend, null, did, replyToMsg, replyToMsg, null, null, notify, 0);
2021-01-28 15:15:51 +01:00
}
}
2022-02-12 06:22:45 +01:00
if (photoPathsArray != null && !photosEditorOpened) {
2021-01-28 15:15:51 +01:00
if (sendingText != null && sendingText.length() <= 1024 && photoPathsArray.size() == 1) {
photoPathsArray.get(0).caption = sendingText;
sendingText = null;
}
2023-01-04 00:17:33 +01:00
SendMessagesHelper.prepareSendingMedia(accountInstance, photoPathsArray, did, replyToMsg, replyToMsg, null, false, false, null, notify, 0, false);
2021-01-28 15:15:51 +01:00
}
if (documentsPathsArray != null || documentsUrisArray != null) {
if (sendingText != null && sendingText.length() <= 1024 && ((documentsPathsArray != null ? documentsPathsArray.size() : 0) + (documentsUrisArray != null ? documentsUrisArray.size() : 0)) == 1) {
2020-10-02 13:25:02 +02:00
captionToSend = sendingText;
2020-04-24 11:21:58 +02:00
sendingText = null;
}
2023-02-06 12:08:24 +01:00
SendMessagesHelper.prepareSendingDocuments(accountInstance, documentsPathsArray, documentsOriginalPathsArray, documentsUrisArray, captionToSend, documentsMimeType, did, replyToMsg, replyToMsg, null, null, notify, 0);
2020-04-24 11:21:58 +02:00
}
2021-01-28 15:15:51 +01:00
if (sendingText != null) {
2023-01-04 00:17:33 +01:00
SendMessagesHelper.prepareSendingText(accountInstance, sendingText, did, topicId, notify, 0);
2019-12-31 14:08:08 +01:00
}
2021-01-28 15:15:51 +01:00
if (contactsToSend != null && !contactsToSend.isEmpty()) {
for (int a = 0; a < contactsToSend.size(); a++) {
TLRPC.User user = contactsToSend.get(a);
2023-01-04 00:17:33 +01:00
SendMessagesHelper.getInstance(account).sendMessage(user, did, replyToMsg, replyToMsg, null, null, notify, 0);
2021-01-28 15:15:51 +01:00
}
2019-12-31 14:08:08 +01:00
}
2022-03-20 21:22:37 +01:00
if (!TextUtils.isEmpty(message) && !videoEditorOpened && !photosEditorOpened) {
2023-01-04 00:17:33 +01:00
SendMessagesHelper.prepareSendingText(accountInstance, message.toString(), did, topicId, notify, 0);
2019-12-31 14:08:08 +01:00
}
}
2013-10-25 17:19:00 +02:00
}
2021-01-28 15:15:51 +01:00
if (dialogsFragment != null && fragment == null) {
2023-02-06 12:08:24 +01:00
if (!presentedFragmentWithRemoveLast) {
dialogsFragment.finishFragment();
}
2021-01-28 15:15:51 +01:00
}
2019-12-31 14:08:08 +01:00
}
2017-12-08 18:35:59 +01:00
photoPathsArray = null;
videoPath = null;
sendingText = null;
documentsPathsArray = null;
documentsOriginalPathsArray = null;
contactsToSend = null;
2018-07-30 04:07:02 +02:00
contactsToSendUri = null;
2021-01-28 15:15:51 +01:00
exportingChatUri = null;
2023-02-03 20:11:36 +01:00
return true;
2013-10-25 17:19:00 +02:00
}
private void onFinish() {
if (lockRunnable != null) {
AndroidUtilities.cancelRunOnUIThread(lockRunnable);
lockRunnable = null;
}
if (finished) {
return;
}
finished = true;
2018-07-30 04:07:02 +02:00
if (currentAccount != -1) {
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.appDidLogout);
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.mainUserInfoChanged);
2019-01-23 18:03:33 +01:00
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.didUpdateConnectionState);
2018-07-30 04:07:02 +02:00
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.needShowAlert);
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.wasUnableToFindCurrentLocation);
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.openArticle);
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.hasNewContactsToImport);
2020-04-24 11:21:58 +02:00
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.needShowPlayServicesAlert);
2021-06-25 02:43:10 +02:00
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.fileLoaded);
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.fileLoadProgressChanged);
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.fileLoadFailed);
2021-01-28 15:15:51 +01:00
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.historyImportProgressChanged);
2021-03-19 11:25:58 +01:00
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.groupCallUpdated);
2021-06-25 02:43:10 +02:00
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.stickersImportComplete);
2021-07-15 16:24:57 +02:00
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.newSuggestionsAvailable);
2022-06-21 04:51:00 +02:00
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.currentUserShowLimitReachedDialog);
2022-09-16 20:48:21 +02:00
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.currentUserPremiumStatusChanged);
2018-07-30 04:07:02 +02:00
}
NotificationCenter.getGlobalInstance().removeObserver(this, NotificationCenter.needShowAlert);
NotificationCenter.getGlobalInstance().removeObserver(this, NotificationCenter.didSetNewWallpapper);
NotificationCenter.getGlobalInstance().removeObserver(this, NotificationCenter.suggestedLangpack);
NotificationCenter.getGlobalInstance().removeObserver(this, NotificationCenter.reloadInterface);
NotificationCenter.getGlobalInstance().removeObserver(this, NotificationCenter.didSetNewTheme);
NotificationCenter.getGlobalInstance().removeObserver(this, NotificationCenter.needSetDayNightTheme);
2019-12-31 14:08:08 +01:00
NotificationCenter.getGlobalInstance().removeObserver(this, NotificationCenter.needCheckSystemBarColors);
2018-07-30 04:07:02 +02:00
NotificationCenter.getGlobalInstance().removeObserver(this, NotificationCenter.closeOtherAppActivities);
NotificationCenter.getGlobalInstance().removeObserver(this, NotificationCenter.didSetPasscode);
NotificationCenter.getGlobalInstance().removeObserver(this, NotificationCenter.notificationsCountUpdated);
2019-12-31 14:08:08 +01:00
NotificationCenter.getGlobalInstance().removeObserver(this, NotificationCenter.screenStateChanged);
2021-02-23 12:53:38 +01:00
NotificationCenter.getGlobalInstance().removeObserver(this, NotificationCenter.showBulletin);
2021-06-25 02:43:10 +02:00
NotificationCenter.getGlobalInstance().removeObserver(this, NotificationCenter.appUpdateAvailable);
2022-09-16 20:48:21 +02:00
NotificationCenter.getGlobalInstance().removeObserver(this, NotificationCenter.requestPermissions);
2023-03-08 08:27:18 +01:00
LiteMode.removeOnPowerSaverAppliedListener(this::onPowerSaver);
}
private void onPowerSaver(boolean applied) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP || actionBarLayout == null || !applied || LiteMode.getPowerSaverLevel() >= 100) {
return;
}
BaseFragment lastFragment = actionBarLayout.getLastFragment();
if (lastFragment == null || lastFragment instanceof LiteModeSettingsActivity) {
return;
}
int percent = LiteMode.getBatteryLevel();
BulletinFactory.of(lastFragment).createSimpleBulletin(
new BatteryDrawable(percent / 100F, Color.WHITE, lastFragment.getThemedColor(Theme.key_dialogSwipeRemove), 1.3f),
LocaleController.getString("LowPowerEnabledTitle", R.string.LowPowerEnabledTitle),
LocaleController.formatString("LowPowerEnabledSubtitle", R.string.LowPowerEnabledSubtitle, String.format("%d%%", percent)),
LocaleController.getString("Disable", R.string.Disable),
() -> presentFragment(new LiteModeSettingsActivity())
).setDuration(Bulletin.DURATION_PROLONG).show();
}
2022-11-05 13:34:47 +01:00
public void presentFragment(INavigationLayout.NavigationParams params) {
actionBarLayout.presentFragment(params);
}
public void presentFragment(BaseFragment fragment) {
actionBarLayout.presentFragment(fragment);
}
public boolean presentFragment(final BaseFragment fragment, final boolean removeLast, boolean forceWithoutAnimation) {
2018-07-30 04:07:02 +02:00
return actionBarLayout.presentFragment(fragment, removeLast, forceWithoutAnimation, true, false);
}
2022-11-05 13:34:47 +01:00
public INavigationLayout getActionBarLayout() {
2017-03-31 01:58:05 +02:00
return actionBarLayout;
}
2022-11-05 13:34:47 +01:00
public INavigationLayout getLayersActionBarLayout() {
2017-03-31 01:58:05 +02:00
return layersActionBarLayout;
}
2022-11-05 13:34:47 +01:00
public INavigationLayout getRightActionBarLayout() {
2017-03-31 01:58:05 +02:00
return rightActionBarLayout;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
2018-07-30 04:07:02 +02:00
if (SharedConfig.passcodeHash.length() != 0 && SharedConfig.lastPauseTime != 0) {
SharedConfig.lastPauseTime = 0;
2020-01-23 07:15:40 +01:00
if (BuildVars.LOGS_ENABLED) {
FileLog.d("reset lastPauseTime onActivityResult");
}
2018-07-30 04:07:02 +02:00
UserConfig.getInstance(currentAccount).saveConfig(false);
}
2020-12-23 08:48:30 +01:00
if (requestCode == 105) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ApplicationLoader.canDrawOverlays = Settings.canDrawOverlays(this)) {
2020-12-24 06:36:01 +01:00
if (GroupCallActivity.groupCallInstance != null) {
GroupCallActivity.groupCallInstance.dismissInternal();
}
2020-12-23 08:48:30 +01:00
AndroidUtilities.runOnUIThread(() -> {
GroupCallPip.clearForce();
GroupCallPip.updateVisibility(LaunchActivity.this);
}, 200);
}
}
return;
}
super.onActivityResult(requestCode, resultCode, data);
2021-06-25 02:43:10 +02:00
if (requestCode == SCREEN_CAPTURE_REQUEST_CODE) {
if (resultCode == Activity.RESULT_OK) {
VoIPService service = VoIPService.getSharedInstance();
2021-07-30 16:49:55 +02:00
if (service != null) {
2021-06-25 02:43:10 +02:00
VideoCapturerDevice.mediaProjectionPermissionResultData = data;
service.createCaptureDevice(true);
}
}
} else if (requestCode == PLAY_SERVICES_REQUEST_CHECK_SETTINGS) {
2019-07-18 15:01:39 +02:00
LocationController.getInstance(currentAccount).startFusedLocationRequest(resultCode == Activity.RESULT_OK);
} else {
ThemeEditorView editorView = ThemeEditorView.getInstance();
if (editorView != null) {
editorView.onActivityResult(requestCode, resultCode, data);
}
2022-11-05 13:34:47 +01:00
if (actionBarLayout.getFragmentStack().size() != 0) {
BaseFragment fragment = actionBarLayout.getFragmentStack().get(actionBarLayout.getFragmentStack().size() - 1);
fragment.onActivityResultFragment(requestCode, resultCode, data);
}
2019-07-18 15:01:39 +02:00
if (AndroidUtilities.isTablet()) {
2022-11-05 13:34:47 +01:00
if (rightActionBarLayout.getFragmentStack().size() != 0) {
BaseFragment fragment = rightActionBarLayout.getFragmentStack().get(rightActionBarLayout.getFragmentStack().size() - 1);
2019-07-18 15:01:39 +02:00
fragment.onActivityResultFragment(requestCode, resultCode, data);
}
2022-11-05 13:34:47 +01:00
if (layersActionBarLayout.getFragmentStack().size() != 0) {
BaseFragment fragment = layersActionBarLayout.getFragmentStack().get(layersActionBarLayout.getFragmentStack().size() - 1);
2019-07-18 15:01:39 +02:00
fragment.onActivityResultFragment(requestCode, resultCode, data);
}
}
2022-04-16 16:43:17 +02:00
NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.onActivityResultReceived, requestCode, resultCode, data);
}
}
2015-10-29 18:10:07 +01:00
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
2022-03-11 17:49:54 +01:00
if (!checkPermissionsResult(requestCode, permissions, grantResults)) return;
2019-08-22 01:53:26 +02:00
2022-11-05 13:34:47 +01:00
if (actionBarLayout.getFragmentStack().size() != 0) {
BaseFragment fragment = actionBarLayout.getFragmentStack().get(actionBarLayout.getFragmentStack().size() - 1);
2015-10-29 18:10:07 +01:00
fragment.onRequestPermissionsResultFragment(requestCode, permissions, grantResults);
}
if (AndroidUtilities.isTablet()) {
2022-11-05 13:34:47 +01:00
if (rightActionBarLayout.getFragmentStack().size() != 0) {
BaseFragment fragment = rightActionBarLayout.getFragmentStack().get(rightActionBarLayout.getFragmentStack().size() - 1);
2015-10-29 18:10:07 +01:00
fragment.onRequestPermissionsResultFragment(requestCode, permissions, grantResults);
}
2022-11-05 13:34:47 +01:00
if (layersActionBarLayout.getFragmentStack().size() != 0) {
BaseFragment fragment = layersActionBarLayout.getFragmentStack().get(layersActionBarLayout.getFragmentStack().size() - 1);
2015-10-29 18:10:07 +01:00
fragment.onRequestPermissionsResultFragment(requestCode, permissions, grantResults);
}
}
2020-08-14 18:58:22 +02:00
VoIPFragment.onRequestPermissionsResult(requestCode, permissions, grantResults);
2022-04-16 16:43:17 +02:00
NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.onRequestPermissionResultReceived, requestCode, permissions, grantResults);
2022-09-16 20:48:21 +02:00
if (requestedPermissions.get(requestCode, -1) >= 0) {
int type = requestedPermissions.get(requestCode, -1);
requestedPermissions.delete(requestCode);
NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.permissionsGranted, type);
}
2015-10-29 18:10:07 +01:00
}
2013-10-25 17:19:00 +02:00
@Override
protected void onPause() {
super.onPause();
2022-04-16 16:43:17 +02:00
isResumed = false;
2019-08-22 01:53:26 +02:00
NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.stopAllHeavyOperations, 4096);
2015-10-29 18:10:07 +01:00
ApplicationLoader.mainInterfacePaused = true;
2020-08-15 23:06:36 +02:00
int account = currentAccount;
2018-08-27 10:33:11 +02:00
Utilities.stageQueue.postRunnable(() -> {
ApplicationLoader.mainInterfacePausedStageQueue = true;
ApplicationLoader.mainInterfacePausedStageQueueTime = 0;
2020-08-15 23:06:36 +02:00
if (VoIPService.getSharedInstance() == null) {
MessagesController.getInstance(account).ignoreSetOnline = false;
}
2017-03-31 01:58:05 +02:00
});
onPasscodePause();
actionBarLayout.onPause();
if (AndroidUtilities.isTablet()) {
2022-09-16 20:48:21 +02:00
if (rightActionBarLayout != null) {
rightActionBarLayout.onPause();
}
if (layersActionBarLayout != null) {
layersActionBarLayout.onPause();
}
}
2015-10-29 18:10:07 +01:00
if (passcodeView != null) {
passcodeView.onPause();
}
2023-02-03 20:11:36 +01:00
for (PasscodeView overlay : overlayPasscodeViews) {
overlay.onPause();
}
2018-07-30 04:07:02 +02:00
ConnectionsManager.getInstance(currentAccount).setAppPaused(true, false);
if (PhotoViewer.hasInstance() && PhotoViewer.getInstance().isVisible()) {
2016-05-25 23:49:47 +02:00
PhotoViewer.getInstance().onPause();
}
2020-08-14 18:58:22 +02:00
if (VoIPFragment.getInstance() != null) {
VoIPFragment.onPause();
}
2013-10-25 17:19:00 +02:00
}
2016-04-22 15:49:00 +02:00
@Override
protected void onStart() {
super.onStart();
Browser.bindCustomTabsService(this);
2020-12-23 08:48:30 +01:00
ApplicationLoader.mainInterfaceStopped = false;
GroupCallPip.updateVisibility(this);
2021-06-25 02:43:10 +02:00
if (GroupCallActivity.groupCallInstance != null) {
GroupCallActivity.groupCallInstance.onResume();
}
2016-04-22 15:49:00 +02:00
}
@Override
protected void onStop() {
super.onStop();
Browser.unbindCustomTabsService(this);
2020-12-23 08:48:30 +01:00
ApplicationLoader.mainInterfaceStopped = true;
GroupCallPip.updateVisibility(this);
2021-06-25 02:43:10 +02:00
if (GroupCallActivity.groupCallInstance != null) {
GroupCallActivity.groupCallInstance.onPause();
}
2016-04-22 15:49:00 +02:00
}
2013-10-25 17:19:00 +02:00
@Override
protected void onDestroy() {
2018-07-30 04:07:02 +02:00
if (PhotoViewer.getPipInstance() != null) {
PhotoViewer.getPipInstance().destroyPhotoViewer();
}
if (PhotoViewer.hasInstance()) {
PhotoViewer.getInstance().destroyPhotoViewer();
}
if (SecretMediaViewer.hasInstance()) {
SecretMediaViewer.getInstance().destroyPhotoViewer();
}
if (ArticleViewer.hasInstance()) {
ArticleViewer.getInstance().destroyArticleViewer();
}
2019-05-14 14:08:05 +02:00
if (ContentPreviewViewer.hasInstance()) {
ContentPreviewViewer.getInstance().destroy();
2018-07-30 04:07:02 +02:00
}
2020-12-23 08:48:30 +01:00
if (GroupCallActivity.groupCallInstance != null) {
GroupCallActivity.groupCallInstance.dismissInternal();
}
2017-07-08 18:32:04 +02:00
PipRoundVideoView pipRoundVideoView = PipRoundVideoView.getInstance();
MediaController.getInstance().setBaseActivity(this, false);
2022-11-24 13:30:01 +01:00
MediaController.getInstance().setFeedbackView(feedbackView, false);
2017-07-08 18:32:04 +02:00
if (pipRoundVideoView != null) {
pipRoundVideoView.close(false);
}
2017-03-31 01:58:05 +02:00
Theme.destroyResources();
EmbedBottomSheet embedBottomSheet = EmbedBottomSheet.getInstance();
if (embedBottomSheet != null) {
embedBottomSheet.destroy();
}
ThemeEditorView editorView = ThemeEditorView.getInstance();
if (editorView != null) {
editorView.destroy();
}
try {
if (visibleDialog != null) {
visibleDialog.dismiss();
visibleDialog = null;
}
} catch (Exception e) {
2017-03-31 01:58:05 +02:00
FileLog.e(e);
}
2015-11-26 22:04:02 +01:00
try {
if (onGlobalLayoutListener != null) {
final View view = getWindow().getDecorView().getRootView();
view.getViewTreeObserver().removeOnGlobalLayoutListener(onGlobalLayoutListener);
2015-11-26 22:04:02 +01:00
}
} catch (Exception e) {
2017-03-31 01:58:05 +02:00
FileLog.e(e);
2015-11-26 22:04:02 +01:00
}
2013-10-25 17:19:00 +02:00
super.onDestroy();
onFinish();
2022-11-05 13:34:47 +01:00
FloatingDebugController.onDestroy();
2013-10-25 17:19:00 +02:00
}
2022-06-21 04:51:00 +02:00
@Override
protected void onUserLeaveHint() {
for (Runnable callback : onUserLeaveHintListeners) {
callback.run();
}
2023-02-25 09:01:39 +01:00
if (actionBarLayout != null) {
actionBarLayout.onUserLeaveHint();
}
2022-06-21 04:51:00 +02:00
}
2022-11-24 13:30:01 +01:00
View feedbackView;
2013-10-25 17:19:00 +02:00
@Override
protected void onResume() {
2019-09-10 12:56:11 +02:00
super.onResume();
2022-04-16 16:43:17 +02:00
isResumed = true;
if (onResumeStaticCallback != null) {
onResumeStaticCallback.run();
onResumeStaticCallback = null;
}
2021-01-30 20:47:24 +01:00
if (Theme.selectedAutoNightType == Theme.AUTO_NIGHT_TYPE_SYSTEM) {
Theme.checkAutoNightThemeConditions();
}
2021-03-19 11:25:58 +01:00
checkWasMutedByAdmin(true);
2020-12-23 08:48:30 +01:00
//FileLog.d("UI resume time = " + (SystemClock.elapsedRealtime() - ApplicationLoader.startTime));
2019-08-22 01:53:26 +02:00
NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.startAllHeavyOperations, 4096);
2022-11-24 13:30:01 +01:00
MediaController.getInstance().setFeedbackView(feedbackView = actionBarLayout.getView(), true);
2015-10-29 18:10:07 +01:00
ApplicationLoader.mainInterfacePaused = false;
2023-02-25 09:01:39 +01:00
MessagesController.getInstance(currentAccount).sortDialogs(null);
2019-01-23 18:03:33 +01:00
showLanguageAlert(false);
2018-08-27 10:33:11 +02:00
Utilities.stageQueue.postRunnable(() -> {
ApplicationLoader.mainInterfacePausedStageQueue = false;
ApplicationLoader.mainInterfacePausedStageQueueTime = System.currentTimeMillis();
2017-03-31 01:58:05 +02:00
});
2022-11-05 13:34:47 +01:00
checkFreeDiscSpace(0);
2017-12-08 18:35:59 +01:00
MediaController.checkGallery();
onPasscodeResume();
2021-07-15 16:24:57 +02:00
if (passcodeView == null || passcodeView.getVisibility() != View.VISIBLE) {
actionBarLayout.onResume();
if (AndroidUtilities.isTablet()) {
2022-09-16 20:48:21 +02:00
if (rightActionBarLayout != null) {
rightActionBarLayout.onResume();
}
if (layersActionBarLayout != null) {
layersActionBarLayout.onResume();
}
}
} else {
2016-10-11 13:57:01 +02:00
actionBarLayout.dismissDialogs();
if (AndroidUtilities.isTablet()) {
2022-09-16 20:48:21 +02:00
if (rightActionBarLayout != null) {
rightActionBarLayout.dismissDialogs();
}
if (layersActionBarLayout != null) {
layersActionBarLayout.dismissDialogs();
}
2016-10-11 13:57:01 +02:00
}
passcodeView.onResume();
2023-02-03 20:11:36 +01:00
for (PasscodeView overlay : overlayPasscodeViews) {
overlay.onResume();
}
}
2018-07-30 04:07:02 +02:00
ConnectionsManager.getInstance(currentAccount).setAppPaused(false, false);
updateCurrentConnectionState(currentAccount);
if (PhotoViewer.hasInstance() && PhotoViewer.getInstance().isVisible()) {
PhotoViewer.getInstance().onResume();
}
2017-07-08 18:32:04 +02:00
PipRoundVideoView pipRoundVideoView = PipRoundVideoView.getInstance();
if (pipRoundVideoView != null && MediaController.getInstance().isMessagePaused()) {
MessageObject messageObject = MediaController.getInstance().getPlayingMessageObject();
if (messageObject != null) {
MediaController.getInstance().seekToProgress(messageObject, messageObject.audioProgress);
}
}
2018-07-30 04:07:02 +02:00
if (UserConfig.getInstance(UserConfig.selectedAccount).unacceptedTermsOfService != null) {
showTosActivity(UserConfig.selectedAccount, UserConfig.getInstance(UserConfig.selectedAccount).unacceptedTermsOfService);
2021-06-25 02:43:10 +02:00
} else if (SharedConfig.pendingAppUpdate != null && SharedConfig.pendingAppUpdate.can_not_skip) {
showUpdateActivity(UserConfig.selectedAccount, SharedConfig.pendingAppUpdate, true);
2018-07-30 04:07:02 +02:00
}
checkAppUpdate(false);
2020-08-14 18:58:22 +02:00
2020-12-23 08:48:30 +01:00
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
ApplicationLoader.canDrawOverlays = Settings.canDrawOverlays(this);
}
2020-08-14 18:58:22 +02:00
if (VoIPFragment.getInstance() != null) {
2020-08-15 23:06:36 +02:00
VoIPFragment.onResume();
2020-08-14 18:58:22 +02:00
}
2022-09-16 20:48:21 +02:00
invalidateTabletMode();
}
private void invalidateTabletMode() {
Boolean wasTablet = AndroidUtilities.getWasTablet();
if (wasTablet == null) {
return;
}
AndroidUtilities.resetWasTabletFlag();
if (wasTablet != AndroidUtilities.isTablet()) {
long dialogId = 0;
2022-12-06 20:13:44 +01:00
int topicId = 0;
2022-09-16 20:48:21 +02:00
if (wasTablet) {
mainFragmentsStack.addAll(rightFragmentsStack);
mainFragmentsStack.addAll(layerFragmentsStack);
rightFragmentsStack.clear();
layerFragmentsStack.clear();
2022-11-05 13:34:47 +01:00
} else {
2022-09-16 20:48:21 +02:00
List<BaseFragment> fragments = new ArrayList<>(mainFragmentsStack);
mainFragmentsStack.clear();
rightFragmentsStack.clear();
layerFragmentsStack.clear();
for (BaseFragment fragment : fragments) {
2022-11-05 13:34:47 +01:00
if (fragment instanceof DialogsActivity && ((DialogsActivity) fragment).isMainDialogList() && !((DialogsActivity) fragment).isArchive()) {
2022-09-16 20:48:21 +02:00
mainFragmentsStack.add(fragment);
} else if (fragment instanceof ChatActivity && !((ChatActivity) fragment).isInScheduleMode()) {
rightFragmentsStack.add(fragment);
if (dialogId == 0) {
dialogId = ((ChatActivity) fragment).getDialogId();
2022-12-06 20:13:44 +01:00
topicId = ((ChatActivity) fragment).getTopicId();
2022-09-16 20:48:21 +02:00
}
} else {
layerFragmentsStack.add(fragment);
}
}
}
setupActionBarLayout();
2022-11-05 13:34:47 +01:00
actionBarLayout.rebuildFragments(INavigationLayout.REBUILD_FLAG_REBUILD_LAST);
2022-09-16 20:48:21 +02:00
if (AndroidUtilities.isTablet()) {
2022-11-05 13:34:47 +01:00
rightActionBarLayout.rebuildFragments(INavigationLayout.REBUILD_FLAG_REBUILD_LAST);
layersActionBarLayout.rebuildFragments(INavigationLayout.REBUILD_FLAG_REBUILD_LAST);
2022-09-16 20:48:21 +02:00
for (BaseFragment fragment : mainFragmentsStack) {
if (fragment instanceof DialogsActivity && ((DialogsActivity) fragment).isMainDialogList()) {
2022-12-06 20:13:44 +01:00
((DialogsActivity) fragment).setOpenedDialogId(dialogId, topicId);
2022-09-16 20:48:21 +02:00
}
}
}
}
2013-10-25 17:19:00 +02:00
}
@Override
2016-10-11 13:57:01 +02:00
public void onConfigurationChanged(Configuration newConfig) {
AndroidUtilities.checkDisplaySize(this, newConfig);
super.onConfigurationChanged(newConfig);
2016-10-11 13:57:01 +02:00
checkLayout();
2017-07-08 18:32:04 +02:00
PipRoundVideoView pipRoundVideoView = PipRoundVideoView.getInstance();
if (pipRoundVideoView != null) {
pipRoundVideoView.onConfigurationChanged();
}
2017-03-31 01:58:05 +02:00
EmbedBottomSheet embedBottomSheet = EmbedBottomSheet.getInstance();
if (embedBottomSheet != null) {
embedBottomSheet.onConfigurationChanged(newConfig);
}
2018-07-30 04:07:02 +02:00
PhotoViewer photoViewer = PhotoViewer.getPipInstance();
if (photoViewer != null) {
photoViewer.onConfigurationChanged(newConfig);
}
2017-03-31 01:58:05 +02:00
ThemeEditorView editorView = ThemeEditorView.getInstance();
if (editorView != null) {
editorView.onConfigurationChanged();
}
2019-12-31 14:08:08 +01:00
if (Theme.selectedAutoNightType == Theme.AUTO_NIGHT_TYPE_SYSTEM) {
Theme.checkAutoNightThemeConditions();
}
2016-10-11 13:57:01 +02:00
}
@Override
public void onMultiWindowModeChanged(boolean isInMultiWindowMode) {
AndroidUtilities.isInMultiwindow = isInMultiWindowMode;
checkLayout();
2013-10-25 17:19:00 +02:00
}
@Override
@SuppressWarnings("unchecked")
2018-07-30 04:07:02 +02:00
public void didReceivedNotification(int id, final int account, Object... args) {
if (id == NotificationCenter.appDidLogout) {
2018-07-30 04:07:02 +02:00
switchToAvailableAccountOrLogout();
} else if (id == NotificationCenter.closeOtherAppActivities) {
2013-10-25 17:19:00 +02:00
if (args[0] != this) {
onFinish();
finish();
2013-10-25 17:19:00 +02:00
}
2019-01-23 18:03:33 +01:00
} else if (id == NotificationCenter.didUpdateConnectionState) {
2018-07-30 04:07:02 +02:00
int state = ConnectionsManager.getInstance(account).getConnectionState();
2013-10-25 17:19:00 +02:00
if (currentConnectionState != state) {
2018-07-30 04:07:02 +02:00
if (BuildVars.LOGS_ENABLED) {
FileLog.d("switch to state " + state);
}
2013-10-25 17:19:00 +02:00
currentConnectionState = state;
2018-07-30 04:07:02 +02:00
updateCurrentConnectionState(account);
2013-10-25 17:19:00 +02:00
}
2014-11-17 03:44:57 +01:00
} else if (id == NotificationCenter.mainUserInfoChanged) {
drawerLayoutAdapter.notifyDataSetChanged();
2015-12-09 19:27:52 +01:00
} else if (id == NotificationCenter.needShowAlert) {
2015-09-24 22:52:02 +02:00
final Integer reason = (Integer) args[0];
2020-12-23 08:48:30 +01:00
if (reason == 6 || reason == 3 && proxyErrorDialog != null) {
2018-07-30 04:07:02 +02:00
return;
} else if (reason == 4) {
showTosActivity(account, (TLRPC.TL_help_termsOfService) args[1]);
return;
}
2022-09-21 16:20:30 +02:00
BaseFragment fragment = null;
if (!mainFragmentsStack.isEmpty()) {
fragment = mainFragmentsStack.get(mainFragmentsStack.size() - 1);
}
2015-09-24 22:52:02 +02:00
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(LocaleController.getString("AppName", R.string.AppName));
2022-11-05 13:34:47 +01:00
if (fragment != null) {
Map<String, Integer> colorsReplacement = new HashMap<>();
colorsReplacement.put("info1.**", fragment.getThemedColor(Theme.key_dialogTopBackground));
colorsReplacement.put("info2.**", fragment.getThemedColor(Theme.key_dialogTopBackground));
builder.setTopAnimation(R.raw.not_available, AlertsCreator.NEW_DENY_DIALOG_TOP_ICON_SIZE, false, fragment.getThemedColor(Theme.key_dialogTopBackground), colorsReplacement);
builder.setTopAnimationIsNew(true);
}
2021-09-20 07:54:41 +02:00
if (reason != 2 && reason != 3) {
2018-08-27 10:33:11 +02:00
builder.setNegativeButton(LocaleController.getString("MoreInfo", R.string.MoreInfo), (dialogInterface, i) -> {
if (!mainFragmentsStack.isEmpty()) {
MessagesController.getInstance(account).openByUserName("spambot", mainFragmentsStack.get(mainFragmentsStack.size() - 1), 1);
2015-09-24 22:52:02 +02:00
}
2015-12-09 19:27:52 +01:00
});
}
2019-01-23 18:03:33 +01:00
if (reason == 5) {
builder.setMessage(LocaleController.getString("NobodyLikesSpam3", R.string.NobodyLikesSpam3));
builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), null);
} else if (reason == 0) {
2015-09-24 22:52:02 +02:00
builder.setMessage(LocaleController.getString("NobodyLikesSpam1", R.string.NobodyLikesSpam1));
2018-07-30 04:07:02 +02:00
builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), null);
2015-09-24 22:52:02 +02:00
} else if (reason == 1) {
builder.setMessage(LocaleController.getString("NobodyLikesSpam2", R.string.NobodyLikesSpam2));
2018-07-30 04:07:02 +02:00
builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), null);
2015-12-09 19:27:52 +01:00
} else if (reason == 2) {
2023-02-03 20:11:36 +01:00
SpannableStringBuilder span = SpannableStringBuilder.valueOf((String) args[1]);
2018-07-30 04:07:02 +02:00
String type = (String) args[2];
2023-02-03 20:11:36 +01:00
if (type.startsWith("PREMIUM_GIFT_SELF_REQUIRED_")) {
String msg = (String) args[1];
int start = msg.indexOf('*'), end = msg.indexOf('*', start + 1);
if (start != -1 && end != -1 && start != end) {
span.replace(start, end + 1, msg.substring(start + 1, end));
span.setSpan(new ClickableSpan() {
@Override
public void onClick(@NonNull View widget) {
getActionBarLayout().presentFragment(new PremiumPreviewFragment("gift"));
}
@Override
public void updateDrawState(@NonNull TextPaint ds) {
super.updateDrawState(ds);
ds.setUnderlineText(false);
}
}, start, end - 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
builder.setMessage(span);
2018-07-30 04:07:02 +02:00
if (type.startsWith("AUTH_KEY_DROP_")) {
builder.setPositiveButton(LocaleController.getString("Cancel", R.string.Cancel), null);
2018-08-27 10:33:11 +02:00
builder.setNegativeButton(LocaleController.getString("LogOut", R.string.LogOut), (dialog, which) -> MessagesController.getInstance(currentAccount).performLogout(2));
2022-11-05 13:34:47 +01:00
} else if (type.startsWith("PREMIUM_")) {
builder.setTitle(LocaleController.getString(R.string.TelegramPremium));
builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), null);
2018-07-30 04:07:02 +02:00
} else {
builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), null);
}
} else if (reason == 3) {
2019-12-31 14:08:08 +01:00
builder.setTitle(LocaleController.getString("Proxy", R.string.Proxy));
2018-07-30 04:07:02 +02:00
builder.setMessage(LocaleController.getString("UseProxyTelegramError", R.string.UseProxyTelegramError));
builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), null);
proxyErrorDialog = showAlertDialog(builder);
return;
2015-09-24 22:52:02 +02:00
}
if (!mainFragmentsStack.isEmpty()) {
mainFragmentsStack.get(mainFragmentsStack.size() - 1).showDialog(builder.create());
}
2016-04-22 15:49:00 +02:00
} else if (id == NotificationCenter.wasUnableToFindCurrentLocation) {
final HashMap<String, MessageObject> waitingForLocation = (HashMap<String, MessageObject>) args[0];
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(LocaleController.getString("AppName", R.string.AppName));
builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), null);
2018-08-27 10:33:11 +02:00
builder.setNegativeButton(LocaleController.getString("ShareYouLocationUnableManually", R.string.ShareYouLocationUnableManually), (dialogInterface, i) -> {
if (mainFragmentsStack.isEmpty()) {
return;
}
BaseFragment lastFragment = mainFragmentsStack.get(mainFragmentsStack.size() - 1);
2022-08-12 17:23:51 +02:00
if (!AndroidUtilities.isMapsInstalled(lastFragment)) {
2018-08-27 10:33:11 +02:00
return;
2016-04-22 15:49:00 +02:00
}
2018-08-27 10:33:11 +02:00
LocationActivity fragment = new LocationActivity(0);
2019-09-10 12:56:11 +02:00
fragment.setDelegate((location, live, notify, scheduleDate) -> {
2018-08-27 10:33:11 +02:00
for (HashMap.Entry<String, MessageObject> entry : waitingForLocation.entrySet()) {
MessageObject messageObject = entry.getValue();
2020-09-30 15:48:47 +02:00
SendMessagesHelper.getInstance(account).sendMessage(location, messageObject.getDialogId(), messageObject, null, null, null, notify, scheduleDate);
2018-08-27 10:33:11 +02:00
}
});
presentFragment(fragment);
2016-04-22 15:49:00 +02:00
});
builder.setMessage(LocaleController.getString("ShareYouLocationUnable", R.string.ShareYouLocationUnable));
if (!mainFragmentsStack.isEmpty()) {
mainFragmentsStack.get(mainFragmentsStack.size() - 1).showDialog(builder.create());
}
2016-10-11 13:57:01 +02:00
} else if (id == NotificationCenter.didSetNewWallpapper) {
2017-03-31 01:58:05 +02:00
if (sideMenu != null) {
View child = sideMenu.getChildAt(0);
2016-10-11 13:57:01 +02:00
if (child != null) {
child.invalidate();
}
}
2021-06-25 02:43:10 +02:00
if (backgroundTablet != null) {
backgroundTablet.setBackgroundImage(Theme.getCachedWallpaper(), Theme.isWallpaperMotion());
}
2017-03-31 01:58:05 +02:00
} else if (id == NotificationCenter.didSetPasscode) {
2018-07-30 04:07:02 +02:00
if (SharedConfig.passcodeHash.length() > 0 && !SharedConfig.allowScreenCapture) {
2017-03-31 01:58:05 +02:00
try {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
} catch (Exception e) {
FileLog.e(e);
}
2019-12-31 14:08:08 +01:00
} else if (!AndroidUtilities.hasFlagSecureFragment()) {
2017-03-31 01:58:05 +02:00
try {
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE);
} catch (Exception e) {
FileLog.e(e);
}
}
2017-07-08 18:32:04 +02:00
} else if (id == NotificationCenter.reloadInterface) {
2020-07-26 10:03:38 +02:00
boolean last = mainFragmentsStack.size() > 1 && mainFragmentsStack.get(mainFragmentsStack.size() - 1) instanceof ProfileActivity;
if (last) {
ProfileActivity profileActivity = (ProfileActivity) mainFragmentsStack.get(mainFragmentsStack.size() - 1);
if (!profileActivity.isSettings()) {
last = false;
}
}
2019-01-23 18:03:33 +01:00
rebuildAllFragments(last);
2017-07-08 18:32:04 +02:00
} else if (id == NotificationCenter.suggestedLangpack) {
showLanguageAlert(false);
2017-12-08 18:35:59 +01:00
} else if (id == NotificationCenter.openArticle) {
if (mainFragmentsStack.isEmpty()) {
return;
}
ArticleViewer.getInstance().setParentActivity(this, mainFragmentsStack.get(mainFragmentsStack.size() - 1));
ArticleViewer.getInstance().open((TLRPC.TL_webPage) args[0], (String) args[1]);
} else if (id == NotificationCenter.hasNewContactsToImport) {
2022-11-05 13:34:47 +01:00
if (actionBarLayout == null || actionBarLayout.getFragmentStack().isEmpty()) {
2017-12-08 18:35:59 +01:00
return;
}
final int type = (Integer) args[0];
final HashMap<String, ContactsController.Contact> contactHashMap = (HashMap<String, ContactsController.Contact>) args[1];
final boolean first = (Boolean) args[2];
final boolean schedule = (Boolean) args[3];
2022-11-05 13:34:47 +01:00
BaseFragment fragment = actionBarLayout.getFragmentStack().get(actionBarLayout.getFragmentStack().size() - 1);
2017-12-08 18:35:59 +01:00
AlertDialog.Builder builder = new AlertDialog.Builder(LaunchActivity.this);
2022-03-11 17:49:54 +01:00
builder.setTopAnimation(R.raw.permission_request_contacts, AlertsCreator.PERMISSIONS_REQUEST_TOP_ICON_SIZE, false, Theme.getColor(Theme.key_dialogTopBackground));
2017-12-08 18:35:59 +01:00
builder.setTitle(LocaleController.getString("UpdateContactsTitle", R.string.UpdateContactsTitle));
builder.setMessage(LocaleController.getString("UpdateContactsMessage", R.string.UpdateContactsMessage));
2018-08-27 10:33:11 +02:00
builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), (dialogInterface, i) -> ContactsController.getInstance(account).syncPhoneBookByAlert(contactHashMap, first, schedule, false));
builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), (dialog, which) -> ContactsController.getInstance(account).syncPhoneBookByAlert(contactHashMap, first, schedule, true));
builder.setOnBackButtonListener((dialogInterface, i) -> ContactsController.getInstance(account).syncPhoneBookByAlert(contactHashMap, first, schedule, true));
2017-12-08 18:35:59 +01:00
AlertDialog dialog = builder.create();
fragment.showDialog(dialog);
dialog.setCanceledOnTouchOutside(false);
} else if (id == NotificationCenter.didSetNewTheme) {
2018-07-30 04:07:02 +02:00
Boolean nightTheme = (Boolean) args[0];
if (!nightTheme) {
if (sideMenu != null) {
sideMenu.setBackgroundColor(Theme.getColor(Theme.key_chats_menuBackground));
sideMenu.setGlowColor(Theme.getColor(Theme.key_chats_menuBackground));
2019-05-14 14:08:05 +02:00
sideMenu.setListSelectorColor(Theme.getColor(Theme.key_listSelector));
2018-07-30 04:07:02 +02:00
sideMenu.getAdapter().notifyDataSetChanged();
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
try {
setTaskDescription(new ActivityManager.TaskDescription(null, null, Theme.getColor(Theme.key_actionBarDefault) | 0xff000000));
} catch (Exception ignore) {
}
}
2017-12-08 18:35:59 +01:00
}
2019-05-14 14:08:05 +02:00
drawerLayoutContainer.setBehindKeyboardColor(Theme.getColor(Theme.key_windowBackgroundWhite));
2021-09-20 07:54:41 +02:00
boolean checkNavigationBarColor = true;
if (args.length > 1) {
checkNavigationBarColor = (boolean) args[1];
}
2022-06-21 04:51:00 +02:00
checkSystemBarColors(args.length > 2 && (boolean) args[2], true, checkNavigationBarColor && !isNavigationBarColorFrozen && !actionBarLayout.isTransitionAnimationInProgress());
2018-07-30 04:07:02 +02:00
} else if (id == NotificationCenter.needSetDayNightTheme) {
2019-12-31 14:08:08 +01:00
boolean instant = false;
if (Build.VERSION.SDK_INT >= 21 && args[2] != null) {
if (themeSwitchImageView.getVisibility() == View.VISIBLE) {
return;
}
try {
int[] pos = (int[]) args[2];
2020-09-30 15:48:47 +02:00
boolean toDark = (Boolean) args[4];
RLottieImageView darkThemeView = (RLottieImageView) args[5];
2019-12-31 14:08:08 +01:00
int w = drawerLayoutContainer.getMeasuredWidth();
int h = drawerLayoutContainer.getMeasuredHeight();
2020-09-30 15:48:47 +02:00
if (!toDark) {
darkThemeView.setVisibility(View.INVISIBLE);
}
2022-06-21 04:51:00 +02:00
rippleAbove = null;
if (args.length > 6) {
rippleAbove = (View) args[6];
}
2022-03-11 17:49:54 +01:00
isNavigationBarColorFrozen = true;
2021-04-14 03:44:46 +02:00
invalidateCachedViews(drawerLayoutContainer);
2022-06-21 04:51:00 +02:00
if (rippleAbove != null && rippleAbove.getBackground() != null) {
rippleAbove.getBackground().setAlpha(0);
}
2022-03-11 17:49:54 +01:00
Bitmap bitmap = AndroidUtilities.snapshotView(drawerLayoutContainer);
2022-06-21 04:51:00 +02:00
if (rippleAbove != null && rippleAbove.getBackground() != null) {
rippleAbove.getBackground().setAlpha(255);
}
2020-09-30 15:48:47 +02:00
frameLayout.removeView(themeSwitchImageView);
if (toDark) {
frameLayout.addView(themeSwitchImageView, 0, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
themeSwitchSunView.setVisibility(View.GONE);
} else {
frameLayout.addView(themeSwitchImageView, 1, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
themeSwitchSunView.setTranslationX(pos[0] - AndroidUtilities.dp(14));
themeSwitchSunView.setTranslationY(pos[1] - AndroidUtilities.dp(14));
themeSwitchSunView.setVisibility(View.VISIBLE);
themeSwitchSunView.invalidate();
}
2019-12-31 14:08:08 +01:00
themeSwitchImageView.setImageBitmap(bitmap);
themeSwitchImageView.setVisibility(View.VISIBLE);
2020-09-30 15:48:47 +02:00
themeSwitchSunDrawable = darkThemeView.getAnimatedDrawable();
2019-12-31 14:08:08 +01:00
float finalRadius = (float) Math.max(Math.sqrt((w - pos[0]) * (w - pos[0]) + (h - pos[1]) * (h - pos[1])), Math.sqrt(pos[0] * pos[0] + (h - pos[1]) * (h - pos[1])));
2021-11-05 11:06:49 +01:00
float finalRadius2 = (float) Math.max(Math.sqrt((w - pos[0]) * (w - pos[0]) + pos[1] * pos[1]), Math.sqrt(pos[0] * pos[0] + pos[1] * pos[1]));
finalRadius = Math.max(finalRadius, finalRadius2);
2020-09-30 15:48:47 +02:00
Animator anim = ViewAnimationUtils.createCircularReveal(toDark ? drawerLayoutContainer : themeSwitchImageView, pos[0], pos[1], toDark ? 0 : finalRadius, toDark ? finalRadius : 0);
2019-12-31 14:08:08 +01:00
anim.setDuration(400);
2020-03-30 14:00:09 +02:00
anim.setInterpolator(Easings.easeInOutQuad);
2019-12-31 14:08:08 +01:00
anim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
2022-06-21 04:51:00 +02:00
rippleAbove = null;
drawerLayoutContainer.invalidate();
themeSwitchImageView.invalidate();
2019-12-31 14:08:08 +01:00
themeSwitchImageView.setImageDrawable(null);
themeSwitchImageView.setVisibility(View.GONE);
2020-09-30 15:48:47 +02:00
themeSwitchSunView.setVisibility(View.GONE);
NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.themeAccentListUpdated);
if (!toDark) {
darkThemeView.setVisibility(View.VISIBLE);
}
DrawerProfileCell.switchingTheme = false;
2019-12-31 14:08:08 +01:00
}
});
2022-06-21 04:51:00 +02:00
if (rippleAbove != null) {
ValueAnimator invalidateAnimator = ValueAnimator.ofFloat(0, 1);
invalidateAnimator.addUpdateListener(a -> frameLayout.invalidate());
invalidateAnimator.setDuration(anim.getDuration());
invalidateAnimator.start();
}
AndroidUtilities.runOnUIThread(() -> {
2022-03-11 17:49:54 +01:00
if (isNavigationBarColorFrozen) {
isNavigationBarColorFrozen = false;
checkSystemBarColors(false, true);
}
}, toDark ? (h - pos[1]) / AndroidUtilities.dp(2.25f) : 50);
2019-12-31 14:08:08 +01:00
anim.start();
instant = true;
2020-09-30 15:48:47 +02:00
} catch (Throwable e) {
FileLog.e(e);
try {
themeSwitchImageView.setImageDrawable(null);
frameLayout.removeView(themeSwitchImageView);
DrawerProfileCell.switchingTheme = false;
} catch (Exception e2) {
FileLog.e(e2);
}
2019-12-31 14:08:08 +01:00
}
2021-07-15 16:24:57 +02:00
} else {
DrawerProfileCell.switchingTheme = false;
2019-12-31 14:08:08 +01:00
}
2018-07-30 04:07:02 +02:00
Theme.ThemeInfo theme = (Theme.ThemeInfo) args[0];
2022-06-21 04:51:00 +02:00
boolean nightTheme = (Boolean) args[1];
2019-12-31 14:08:08 +01:00
int accentId = (Integer) args[3];
2022-08-12 17:23:51 +02:00
Runnable calcInBackgroundEnd = args.length > 7 ? (Runnable) args[7] : null;
actionBarLayout.animateThemedValues(theme, accentId, nightTheme, instant, calcInBackgroundEnd);
2018-07-30 04:07:02 +02:00
if (AndroidUtilities.isTablet()) {
2022-06-21 04:51:00 +02:00
layersActionBarLayout.animateThemedValues(theme, accentId, nightTheme, instant);
rightActionBarLayout.animateThemedValues(theme, accentId, nightTheme, instant);
2018-07-30 04:07:02 +02:00
}
} else if (id == NotificationCenter.notificationsCountUpdated) {
if (sideMenu != null) {
Integer accountNum = (Integer) args[0];
int count = sideMenu.getChildCount();
for (int a = 0; a < count; a++) {
View child = sideMenu.getChildAt(a);
if (child instanceof DrawerUserCell) {
if (((DrawerUserCell) child).getAccountNumber() == accountNum) {
child.invalidate();
break;
}
}
2017-12-08 18:35:59 +01:00
}
}
2019-07-18 15:01:39 +02:00
} else if (id == NotificationCenter.needShowPlayServicesAlert) {
try {
final Status status = (Status) args[0];
status.startResolutionForResult(this, PLAY_SERVICES_REQUEST_CHECK_SETTINGS);
} catch (Throwable ignore) {
}
2021-06-25 02:43:10 +02:00
} else if (id == NotificationCenter.fileLoaded) {
String path = (String) args[0];
if (SharedConfig.isAppUpdateAvailable()) {
String name = FileLoader.getAttachFileName(SharedConfig.pendingAppUpdate.document);
if (name.equals(path)) {
updateAppUpdateViews(true);
}
}
2019-09-10 12:56:11 +02:00
if (loadingThemeFileName != null) {
if (loadingThemeFileName.equals(path)) {
loadingThemeFileName = null;
File locFile = new File(ApplicationLoader.getFilesDirFixed(), "remote" + loadingTheme.id + ".attheme");
Theme.ThemeInfo themeInfo = Theme.fillThemeValues(locFile, loadingTheme.title, loadingTheme);
if (themeInfo != null) {
if (themeInfo.pathToWallpaper != null) {
File file = new File(themeInfo.pathToWallpaper);
if (!file.exists()) {
TLRPC.TL_account_getWallPaper req = new TLRPC.TL_account_getWallPaper();
TLRPC.TL_inputWallPaperSlug inputWallPaperSlug = new TLRPC.TL_inputWallPaperSlug();
inputWallPaperSlug.slug = themeInfo.slug;
req.wallpaper = inputWallPaperSlug;
ConnectionsManager.getInstance(themeInfo.account).sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
if (response instanceof TLRPC.TL_wallPaper) {
TLRPC.TL_wallPaper wallPaper = (TLRPC.TL_wallPaper) response;
loadingThemeInfo = themeInfo;
loadingThemeWallpaperName = FileLoader.getAttachFileName(wallPaper.document);
2019-12-31 14:08:08 +01:00
loadingThemeWallpaper = wallPaper;
2022-09-16 20:48:21 +02:00
FileLoader.getInstance(themeInfo.account).loadFile(wallPaper.document, wallPaper, FileLoader.PRIORITY_NORMAL, 1);
2019-09-10 12:56:11 +02:00
} else {
onThemeLoadFinish();
}
}));
return;
}
}
Theme.ThemeInfo finalThemeInfo = Theme.applyThemeFile(locFile, loadingTheme.title, loadingTheme, true);
if (finalThemeInfo != null) {
2019-12-31 14:08:08 +01:00
presentFragment(new ThemePreviewActivity(finalThemeInfo, true, ThemePreviewActivity.SCREEN_TYPE_PREVIEW, false, false));
2019-09-10 12:56:11 +02:00
}
}
onThemeLoadFinish();
}
} else if (loadingThemeWallpaperName != null) {
if (loadingThemeWallpaperName.equals(path)) {
loadingThemeWallpaperName = null;
File file = (File) args[1];
2019-12-31 14:08:08 +01:00
if (loadingThemeAccent) {
openThemeAccentPreview(loadingTheme, loadingThemeWallpaper, loadingThemeInfo);
onThemeLoadFinish();
} else {
2020-01-05 12:50:11 +01:00
Theme.ThemeInfo info = loadingThemeInfo;
2019-12-31 14:08:08 +01:00
Utilities.globalQueue.postRunnable(() -> {
2020-01-05 12:50:11 +01:00
info.createBackground(file, info.pathToWallpaper);
2019-12-31 14:08:08 +01:00
AndroidUtilities.runOnUIThread(() -> {
2020-01-05 12:50:11 +01:00
if (loadingTheme == null) {
return;
}
2019-12-31 14:08:08 +01:00
File locFile = new File(ApplicationLoader.getFilesDirFixed(), "remote" + loadingTheme.id + ".attheme");
Theme.ThemeInfo finalThemeInfo = Theme.applyThemeFile(locFile, loadingTheme.title, loadingTheme, true);
if (finalThemeInfo != null) {
presentFragment(new ThemePreviewActivity(finalThemeInfo, true, ThemePreviewActivity.SCREEN_TYPE_PREVIEW, false, false));
}
onThemeLoadFinish();
});
2019-09-10 12:56:11 +02:00
});
2019-12-31 14:08:08 +01:00
}
2019-09-10 12:56:11 +02:00
}
}
2021-06-25 02:43:10 +02:00
} else if (id == NotificationCenter.fileLoadFailed) {
2019-09-10 12:56:11 +02:00
String path = (String) args[0];
if (path.equals(loadingThemeFileName) || path.equals(loadingThemeWallpaperName)) {
onThemeLoadFinish();
}
2021-06-25 02:43:10 +02:00
if (SharedConfig.isAppUpdateAvailable()) {
String name = FileLoader.getAttachFileName(SharedConfig.pendingAppUpdate.document);
if (name.equals(path)) {
updateAppUpdateViews(true);
}
}
2019-12-31 14:08:08 +01:00
} else if (id == NotificationCenter.screenStateChanged) {
if (ApplicationLoader.mainInterfacePaused) {
return;
}
if (ApplicationLoader.isScreenOn) {
onPasscodeResume();
} else {
onPasscodePause();
}
} else if (id == NotificationCenter.needCheckSystemBarColors) {
2022-06-21 04:51:00 +02:00
boolean useCurrentFragment = args.length > 0 && (boolean) args[0];
checkSystemBarColors(useCurrentFragment);
2021-01-28 15:15:51 +01:00
} else if (id == NotificationCenter.historyImportProgressChanged) {
if (args.length > 1 && !mainFragmentsStack.isEmpty()) {
AlertsCreator.processError(currentAccount, (TLRPC.TL_error) args[2], mainFragmentsStack.get(mainFragmentsStack.size() - 1), (TLObject) args[1]);
}
2021-06-25 02:43:10 +02:00
} else if (id == NotificationCenter.stickersImportComplete) {
MediaDataController.getInstance(account).toggleStickerSet(this, (TLObject) args[0], 2, !mainFragmentsStack.isEmpty() ? mainFragmentsStack.get(mainFragmentsStack.size() - 1) : null, false, true);
2021-07-15 16:24:57 +02:00
} else if (id == NotificationCenter.newSuggestionsAvailable) {
sideMenu.invalidateViews();
2021-02-23 12:53:38 +01:00
} else if (id == NotificationCenter.showBulletin) {
if (!mainFragmentsStack.isEmpty()) {
int type = (int) args[0];
2021-04-14 03:44:46 +02:00
FrameLayout container = null;
BaseFragment fragment = null;
if (GroupCallActivity.groupCallUiVisible && GroupCallActivity.groupCallInstance != null) {
container = GroupCallActivity.groupCallInstance.getContainer();
}
if (container == null) {
fragment = mainFragmentsStack.get(mainFragmentsStack.size() - 1);
}
2022-06-21 04:51:00 +02:00
switch (type) {
case Bulletin.TYPE_NAME_CHANGED: {
long peerId = (long) args[1];
2023-03-08 08:27:18 +01:00
String text = peerId > 0 ? LocaleController.getString("YourNameChanged", R.string.YourNameChanged) : LocaleController.getString("ChannelTitleChanged", R.string.ChannelTitleChanged);
2022-06-21 04:51:00 +02:00
(container != null ? BulletinFactory.of(container, null) : BulletinFactory.of(fragment)).createErrorBulletin(text).show();
break;
2021-04-14 03:44:46 +02:00
}
2022-06-21 04:51:00 +02:00
case Bulletin.TYPE_BIO_CHANGED: {
long peerId = (long) args[1];
2023-03-08 08:27:18 +01:00
String text = peerId > 0 ? LocaleController.getString("YourBioChanged", R.string.YourBioChanged) : LocaleController.getString("ChannelDescriptionChanged", R.string.ChannelDescriptionChanged);
2022-06-21 04:51:00 +02:00
(container != null ? BulletinFactory.of(container, null) : BulletinFactory.of(fragment)).createErrorBulletin(text).show();
break;
2021-04-14 03:44:46 +02:00
}
2022-06-21 04:51:00 +02:00
case Bulletin.TYPE_STICKER: {
TLRPC.Document sticker = (TLRPC.Document) args[1];
int bulletinType = (int) args[2];
StickerSetBulletinLayout layout = new StickerSetBulletinLayout(this, null, bulletinType, sticker, null);
int duration = Bulletin.DURATION_SHORT;
if (bulletinType == StickerSetBulletinLayout.TYPE_REPLACED_TO_FAVORITES || bulletinType == StickerSetBulletinLayout.TYPE_REPLACED_TO_FAVORITES_GIFS) {
duration = 3500;
}
if (fragment != null) {
Bulletin.make(fragment, layout, duration).show();
} else {
Bulletin.make(container, layout, duration).show();
}
break;
}
case Bulletin.TYPE_ERROR:
if (fragment != null) {
BulletinFactory.of(fragment).createErrorBulletin((String) args[1]).show();
} else {
BulletinFactory.of(container, null).createErrorBulletin((String) args[1]).show();
}
break;
2022-12-30 13:32:20 +01:00
case Bulletin.TYPE_SUCCESS:
if (fragment != null) {
BulletinFactory.of(fragment).createSuccessBulletin((String) args[1]).show();
} else {
BulletinFactory.of(container, null).createSuccessBulletin((String) args[1]).show();
}
break;
2022-06-21 04:51:00 +02:00
case Bulletin.TYPE_ERROR_SUBTITLE:
if (fragment != null) {
BulletinFactory.of(fragment).createErrorBulletinSubtitle((String) args[1], (String) args[2], fragment.getResourceProvider()).show();
} else {
BulletinFactory.of(container, null).createErrorBulletinSubtitle((String) args[1], (String) args[2], null).show();
}
break;
case Bulletin.TYPE_APP_ICON: {
LauncherIconController.LauncherIcon icon = (LauncherIconController.LauncherIcon) args[1];
AppIconBulletinLayout layout = new AppIconBulletinLayout(this, icon, null);
int duration = Bulletin.DURATION_SHORT;
if (fragment != null) {
Bulletin.make(fragment, layout, duration).show();
} else {
Bulletin.make(container, layout, duration).show();
}
break;
2022-04-16 16:43:17 +02:00
}
2021-02-23 12:53:38 +01:00
}
}
2021-03-19 11:25:58 +01:00
} else if (id == NotificationCenter.groupCallUpdated) {
checkWasMutedByAdmin(false);
2021-06-25 02:43:10 +02:00
} else if (id == NotificationCenter.fileLoadProgressChanged) {
if (updateTextView != null && SharedConfig.isAppUpdateAvailable()) {
String location = (String) args[0];
String fileName = FileLoader.getAttachFileName(SharedConfig.pendingAppUpdate.document);
if (fileName != null && fileName.equals(location)) {
Long loadedSize = (Long) args[1];
Long totalSize = (Long) args[2];
float loadProgress = loadedSize / (float) totalSize;
updateLayoutIcon.setProgress(loadProgress, true);
updateTextView.setText(LocaleController.formatString("AppUpdateDownloading", R.string.AppUpdateDownloading, (int) (loadProgress * 100)));
}
}
} else if (id == NotificationCenter.appUpdateAvailable) {
updateAppUpdateViews(mainFragmentsStack.size() == 1);
2022-06-21 04:51:00 +02:00
} else if (id == NotificationCenter.currentUserShowLimitReachedDialog) {
if (!mainFragmentsStack.isEmpty()) {
BaseFragment fragment = mainFragmentsStack.get(mainFragmentsStack.size() - 1);
if (fragment.getParentActivity() != null) {
fragment.showDialog(new LimitReachedBottomSheet(fragment, fragment.getParentActivity(), (int) args[0], currentAccount));
}
}
2022-09-16 20:48:21 +02:00
} else if (id == NotificationCenter.currentUserPremiumStatusChanged) {
if (drawerLayoutAdapter != null) {
drawerLayoutAdapter.notifyDataSetChanged();
}
2022-11-12 09:41:35 +01:00
MessagesController.getMainSettings(currentAccount).edit().remove("transcribeButtonPressed").apply();
2022-09-16 20:48:21 +02:00
} else if (id == NotificationCenter.requestPermissions) {
int type = (int) args[0];
String[] permissions = null;
if (type == BLUETOOTH_CONNECT_TYPE) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
permissions = new String[]{
Manifest.permission.BLUETOOTH_CONNECT
};
}
}
if (permissions != null) {
requsetPermissionsPointer++;
requestedPermissions.put(requsetPermissionsPointer, type);
ActivityCompat.requestPermissions(
this,
permissions,
requsetPermissionsPointer
);
}
2022-11-05 13:34:47 +01:00
} else if (id == NotificationCenter.chatSwithcedToForum) {
long chatId = (long) args[0];
ForumUtilities.switchAllFragmentsInStackToForum(chatId, actionBarLayout);
2021-03-19 11:25:58 +01:00
}
}
2021-04-14 03:44:46 +02:00
private void invalidateCachedViews(View parent) {
int layerType = parent.getLayerType();
if (layerType != View.LAYER_TYPE_NONE) {
parent.invalidate();
}
if (parent instanceof ViewGroup) {
ViewGroup viewGroup = (ViewGroup) parent;
for (int i = 0; i < viewGroup.getChildCount(); i++) {
invalidateCachedViews(viewGroup.getChildAt(i));
}
}
}
2021-03-19 11:25:58 +01:00
private void checkWasMutedByAdmin(boolean checkOnly) {
VoIPService voIPService = VoIPService.getSharedInstance();
if (voIPService != null && voIPService.groupCall != null) {
2021-04-09 15:17:32 +02:00
boolean wasMuted = wasMutedByAdminRaisedHand;
2021-03-19 11:25:58 +01:00
ChatObject.Call call = voIPService.groupCall;
TLRPC.InputPeer peer = voIPService.getGroupCallPeer();
2021-09-20 07:54:41 +02:00
long did;
2021-03-19 11:25:58 +01:00
if (peer != null) {
if (peer.user_id != 0) {
did = peer.user_id;
} else if (peer.chat_id != 0) {
did = -peer.chat_id;
} else {
did = -peer.channel_id;
}
} else {
did = UserConfig.getInstance(currentAccount).clientUserId;
}
TLRPC.TL_groupCallParticipant participant = call.participants.get(did);
2021-04-09 15:17:32 +02:00
boolean mutedByAdmin = participant != null && !participant.can_self_unmute && participant.muted;
wasMutedByAdminRaisedHand = mutedByAdmin && participant.raise_hand_rating != 0;
2021-03-19 11:25:58 +01:00
2021-04-09 15:17:32 +02:00
if (!checkOnly && wasMuted && !wasMutedByAdminRaisedHand && !mutedByAdmin && GroupCallActivity.groupCallInstance == null) {
showVoiceChatTooltip(UndoView.ACTION_VOIP_CAN_NOW_SPEAK);
2021-03-19 11:25:58 +01:00
}
} else {
2021-04-09 15:17:32 +02:00
wasMutedByAdminRaisedHand = false;
}
}
private void showVoiceChatTooltip(int action) {
VoIPService voIPService = VoIPService.getSharedInstance();
if (voIPService == null || mainFragmentsStack.isEmpty() || voIPService.groupCall == null) {
return;
}
2023-02-25 09:01:39 +01:00
TLRPC.Chat chat = voIPService.getChat();
BaseFragment fragment = actionBarLayout.getFragmentStack().get(actionBarLayout.getFragmentStack().size() - 1);
if (fragment instanceof ChatActivity) {
ChatActivity chatActivity = (ChatActivity) fragment;
if (chatActivity.getDialogId() == -chat.id) {
chat = null;
2021-04-09 15:17:32 +02:00
}
2023-02-25 09:01:39 +01:00
UndoView undoView = chatActivity.getUndoView();
if (undoView != null) {
undoView.showWithAction(0, action, chat);
2021-04-09 15:17:32 +02:00
}
2023-02-25 09:01:39 +01:00
} else if (fragment instanceof DialogsActivity) {
DialogsActivity dialogsActivity = (DialogsActivity) fragment;
dialogsActivity.getUndoView().showWithAction(0, action, chat);
} else if (fragment instanceof ProfileActivity) {
ProfileActivity profileActivity = (ProfileActivity) fragment;
profileActivity.getUndoView().showWithAction(0, action, chat);
}
if (action == UndoView.ACTION_VOIP_CAN_NOW_SPEAK && VoIPService.getSharedInstance() != null) {
VoIPService.getSharedInstance().playAllowTalkSound();
2017-07-08 18:32:04 +02:00
}
}
private String getStringForLanguageAlert(HashMap<String, String> map, String key, int intKey) {
String value = map.get(key);
if (value == null) {
return LocaleController.getString(key, intKey);
}
return value;
}
2019-12-31 14:08:08 +01:00
private void openThemeAccentPreview(TLRPC.TL_theme t, TLRPC.TL_wallPaper wallPaper, Theme.ThemeInfo info) {
int lastId = info.lastAccentId;
Theme.ThemeAccent accent = info.createNewAccent(t, currentAccount);
info.prevAccentId = info.currentAccentId;
info.setCurrentAccentId(accent.id);
accent.pattern = wallPaper;
presentFragment(new ThemePreviewActivity(info, lastId != info.lastAccentId, ThemePreviewActivity.SCREEN_TYPE_PREVIEW, false, false));
}
2019-09-10 12:56:11 +02:00
private void onThemeLoadFinish() {
if (loadingThemeProgressDialog != null) {
try {
loadingThemeProgressDialog.dismiss();
} finally {
loadingThemeProgressDialog = null;
}
}
loadingThemeWallpaperName = null;
2019-12-31 14:08:08 +01:00
loadingThemeWallpaper = null;
2019-09-10 12:56:11 +02:00
loadingThemeInfo = null;
loadingThemeFileName = null;
loadingTheme = null;
}
2022-11-05 13:34:47 +01:00
private boolean checkFreeDiscSpaceShown;
private long alreadyShownFreeDiscSpaceAlertForced;
2023-03-08 08:27:18 +01:00
private long lastSpaceAlert;
2022-11-05 13:34:47 +01:00
private static LaunchActivity staticInstanceForAlerts;
private void checkFreeDiscSpace(final int force) {
staticInstanceForAlerts = this;
2023-02-25 09:01:39 +01:00
AutoDeleteMediaTask.run();
2021-06-25 02:43:10 +02:00
SharedConfig.checkLogsToDelete();
2022-11-05 13:34:47 +01:00
if (Build.VERSION.SDK_INT >= 26 && force == 0 || checkFreeDiscSpaceShown) {
2017-12-08 18:35:59 +01:00
return;
}
2018-08-27 10:33:11 +02:00
Utilities.globalQueue.postRunnable(() -> {
if (!UserConfig.getInstance(currentAccount).isClientActivated()) {
return;
}
try {
SharedPreferences preferences = MessagesController.getGlobalMainSettings();
2023-03-08 08:27:18 +01:00
if ((force == 2 || force == 1) && Math.abs(alreadyShownFreeDiscSpaceAlertForced - System.currentTimeMillis()) > 1000 * 60 * 4 || Math.abs(preferences.getLong("last_space_check", 0) - System.currentTimeMillis()) >= 3 * 24 * 3600 * 1000) {
2018-08-27 10:33:11 +02:00
File path = FileLoader.getDirectory(FileLoader.MEDIA_DIR_CACHE);
if (path == null) {
return;
2017-12-08 18:35:59 +01:00
}
2018-08-27 10:33:11 +02:00
long freeSpace;
StatFs statFs = new StatFs(path.getAbsolutePath());
if (Build.VERSION.SDK_INT < 18) {
freeSpace = Math.abs(statFs.getAvailableBlocks() * statFs.getBlockSize());
} else {
freeSpace = statFs.getAvailableBlocksLong() * statFs.getBlockSizeLong();
}
2022-11-05 13:34:47 +01:00
if (force > 0 || freeSpace < 1024 * 1024 * 50) {
if (force > 0) {
alreadyShownFreeDiscSpaceAlertForced = System.currentTimeMillis();
}
2019-01-23 18:03:33 +01:00
preferences.edit().putLong("last_space_check", System.currentTimeMillis()).commit();
2018-08-27 10:33:11 +02:00
AndroidUtilities.runOnUIThread(() -> {
2022-11-05 13:34:47 +01:00
if (checkFreeDiscSpaceShown) {
return;
}
2018-08-27 10:33:11 +02:00
try {
2022-11-05 13:34:47 +01:00
Dialog dialog = AlertsCreator.createFreeSpaceDialog(LaunchActivity.this);
dialog.setOnDismissListener(di -> {
checkFreeDiscSpaceShown = false;
});
checkFreeDiscSpaceShown = true;
dialog.show();
2018-08-27 10:33:11 +02:00
} catch (Throwable ignore) {
2017-12-08 18:35:59 +01:00
2018-08-27 10:33:11 +02:00
}
});
}
2017-12-08 18:35:59 +01:00
}
2018-08-27 10:33:11 +02:00
} catch (Throwable ignore) {
2017-12-08 18:35:59 +01:00
}
}, 2000);
}
2022-11-05 13:34:47 +01:00
public static void checkFreeDiscSpaceStatic(final int force) {
if (staticInstanceForAlerts != null) {
staticInstanceForAlerts.checkFreeDiscSpace(force);
}
}
2017-12-08 18:35:59 +01:00
2017-07-08 18:32:04 +02:00
private void showLanguageAlertInternal(LocaleController.LocaleInfo systemInfo, LocaleController.LocaleInfo englishInfo, String systemLang) {
try {
loadingLocaleDialog = false;
boolean firstSystem = systemInfo.builtIn || LocaleController.getInstance().isCurrentLocalLocale();
AlertDialog.Builder builder = new AlertDialog.Builder(LaunchActivity.this);
builder.setTitle(getStringForLanguageAlert(systemLocaleStrings, "ChooseYourLanguage", R.string.ChooseYourLanguage));
builder.setSubtitle(getStringForLanguageAlert(englishLocaleStrings, "ChooseYourLanguage", R.string.ChooseYourLanguage));
LinearLayout linearLayout = new LinearLayout(LaunchActivity.this);
linearLayout.setOrientation(LinearLayout.VERTICAL);
final LanguageCell[] cells = new LanguageCell[2];
final LocaleController.LocaleInfo[] selectedLanguage = new LocaleController.LocaleInfo[1];
final LocaleController.LocaleInfo[] locales = new LocaleController.LocaleInfo[2];
final String englishName = getStringForLanguageAlert(systemLocaleStrings, "English", R.string.English);
locales[0] = firstSystem ? systemInfo : englishInfo;
locales[1] = firstSystem ? englishInfo : systemInfo;
selectedLanguage[0] = firstSystem ? systemInfo : englishInfo;
for (int a = 0; a < 2; a++) {
2022-03-11 17:49:54 +01:00
cells[a] = new LanguageCell(LaunchActivity.this);
2017-07-08 18:32:04 +02:00
cells[a].setLanguage(locales[a], locales[a] == englishInfo ? englishName : null, true);
cells[a].setTag(a);
2022-03-11 17:49:54 +01:00
cells[a].setBackground(Theme.createSelectorDrawable(Theme.getColor(Theme.key_dialogButtonSelector), 2));
cells[a].setLanguageSelected(a == 0, false);
2019-01-23 18:03:33 +01:00
linearLayout.addView(cells[a], LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 50));
2018-08-27 10:33:11 +02:00
cells[a].setOnClickListener(v -> {
Integer tag = (Integer) v.getTag();
selectedLanguage[0] = ((LanguageCell) v).getCurrentLocale();
for (int a1 = 0; a1 < cells.length; a1++) {
2022-03-11 17:49:54 +01:00
cells[a1].setLanguageSelected(a1 == tag, true);
2017-07-08 18:32:04 +02:00
}
});
}
2022-03-11 17:49:54 +01:00
LanguageCell cell = new LanguageCell(LaunchActivity.this);
2017-07-08 18:32:04 +02:00
cell.setValue(getStringForLanguageAlert(systemLocaleStrings, "ChooseYourLanguageOther", R.string.ChooseYourLanguageOther), getStringForLanguageAlert(englishLocaleStrings, "ChooseYourLanguageOther", R.string.ChooseYourLanguageOther));
2022-03-11 17:49:54 +01:00
cell.setBackground(Theme.createSelectorDrawable(Theme.getColor(Theme.key_dialogButtonSelector), 2));
2018-08-27 10:33:11 +02:00
cell.setOnClickListener(v -> {
localeDialog = null;
drawerLayoutContainer.closeDrawer(true);
presentFragment(new LanguageSelectActivity());
if (visibleDialog != null) {
visibleDialog.dismiss();
visibleDialog = null;
2017-07-08 18:32:04 +02:00
}
});
2019-01-23 18:03:33 +01:00
linearLayout.addView(cell, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 50));
2017-07-08 18:32:04 +02:00
builder.setView(linearLayout);
2018-08-27 10:33:11 +02:00
builder.setNegativeButton(LocaleController.getString("OK", R.string.OK), (dialog, which) -> {
LocaleController.getInstance().applyLanguage(selectedLanguage[0], true, false, currentAccount);
rebuildAllFragments(true);
2017-07-08 18:32:04 +02:00
});
localeDialog = showAlertDialog(builder);
2018-07-30 04:07:02 +02:00
SharedPreferences preferences = MessagesController.getGlobalMainSettings();
2017-07-08 18:32:04 +02:00
preferences.edit().putString("language_showed2", systemLang).commit();
} catch (Exception e) {
FileLog.e(e);
}
}
2022-06-21 04:51:00 +02:00
private int[] tempLocation;
private void drawRippleAbove(Canvas canvas, View parent) {
if (parent == null || rippleAbove == null || rippleAbove.getBackground() == null) {
return;
}
if (tempLocation == null) {
tempLocation = new int[2];
}
rippleAbove.getLocationInWindow(tempLocation);
int x = tempLocation[0], y = tempLocation[1];
parent.getLocationInWindow(tempLocation);
x -= tempLocation[0];
y -= tempLocation[1];
canvas.save();
canvas.translate(x, y);
rippleAbove.getBackground().draw(canvas);
canvas.restore();
}
2017-07-08 18:32:04 +02:00
private void showLanguageAlert(boolean force) {
2022-03-11 17:49:54 +01:00
if (!UserConfig.getInstance(currentAccount).isClientActivated()) {
return;
}
2017-07-08 18:32:04 +02:00
try {
2019-01-23 18:03:33 +01:00
if (loadingLocaleDialog || ApplicationLoader.mainInterfacePaused) {
2017-07-08 18:32:04 +02:00
return;
}
2018-07-30 04:07:02 +02:00
SharedPreferences preferences = MessagesController.getGlobalMainSettings();
2017-07-08 18:32:04 +02:00
String showedLang = preferences.getString("language_showed2", "");
2019-01-23 18:03:33 +01:00
final String systemLang = MessagesController.getInstance(currentAccount).suggestedLangCode;
2017-07-08 18:32:04 +02:00
if (!force && showedLang.equals(systemLang)) {
2018-07-30 04:07:02 +02:00
if (BuildVars.LOGS_ENABLED) {
FileLog.d("alert already showed for " + showedLang);
}
2017-07-08 18:32:04 +02:00
return;
}
2019-06-04 12:14:50 +02:00
final LocaleController.LocaleInfo[] infos = new LocaleController.LocaleInfo[2];
2017-07-08 18:32:04 +02:00
String arg = systemLang.contains("-") ? systemLang.split("-")[0] : systemLang;
2017-12-08 18:35:59 +01:00
String alias;
if ("in".equals(arg)) {
alias = "id";
} else if ("iw".equals(arg)) {
alias = "he";
} else if ("jw".equals(arg)) {
alias = "jv";
} else {
alias = null;
}
2017-07-08 18:32:04 +02:00
for (int a = 0; a < LocaleController.getInstance().languages.size(); a++) {
LocaleController.LocaleInfo info = LocaleController.getInstance().languages.get(a);
if (info.shortName.equals("en")) {
infos[0] = info;
}
2019-01-23 18:03:33 +01:00
if (info.shortName.replace("_", "-").equals(systemLang) || info.shortName.equals(arg) || info.shortName.equals(alias)) {
2017-07-08 18:32:04 +02:00
infos[1] = info;
}
if (infos[0] != null && infos[1] != null) {
break;
}
}
if (infos[0] == null || infos[1] == null || infos[0] == infos[1]) {
return;
}
2018-07-30 04:07:02 +02:00
if (BuildVars.LOGS_ENABLED) {
FileLog.d("show lang alert for " + infos[0].getKey() + " and " + infos[1].getKey());
}
2017-07-08 18:32:04 +02:00
systemLocaleStrings = null;
englishLocaleStrings = null;
loadingLocaleDialog = true;
TLRPC.TL_langpack_getStrings req = new TLRPC.TL_langpack_getStrings();
2019-01-23 18:03:33 +01:00
req.lang_code = infos[1].getLangCode();
2017-07-08 18:32:04 +02:00
req.keys.add("English");
req.keys.add("ChooseYourLanguage");
req.keys.add("ChooseYourLanguageOther");
req.keys.add("ChangeLanguageLater");
2018-08-27 10:33:11 +02:00
ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response, error) -> {
final HashMap<String, String> keys = new HashMap<>();
if (response != null) {
TLRPC.Vector vector = (TLRPC.Vector) response;
for (int a = 0; a < vector.objects.size(); a++) {
final TLRPC.LangPackString string = (TLRPC.LangPackString) vector.objects.get(a);
keys.put(string.key, string.value);
2017-07-08 18:32:04 +02:00
}
}
2018-08-27 10:33:11 +02:00
AndroidUtilities.runOnUIThread(() -> {
systemLocaleStrings = keys;
if (englishLocaleStrings != null && systemLocaleStrings != null) {
showLanguageAlertInternal(infos[1], infos[0], systemLang);
}
});
2017-07-08 18:32:04 +02:00
}, ConnectionsManager.RequestFlagWithoutLogin);
req = new TLRPC.TL_langpack_getStrings();
2019-01-23 18:03:33 +01:00
req.lang_code = infos[0].getLangCode();
2017-07-08 18:32:04 +02:00
req.keys.add("English");
req.keys.add("ChooseYourLanguage");
req.keys.add("ChooseYourLanguageOther");
req.keys.add("ChangeLanguageLater");
2018-08-27 10:33:11 +02:00
ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response, error) -> {
final HashMap<String, String> keys = new HashMap<>();
if (response != null) {
TLRPC.Vector vector = (TLRPC.Vector) response;
for (int a = 0; a < vector.objects.size(); a++) {
final TLRPC.LangPackString string = (TLRPC.LangPackString) vector.objects.get(a);
keys.put(string.key, string.value);
2017-07-08 18:32:04 +02:00
}
}
2018-08-27 10:33:11 +02:00
AndroidUtilities.runOnUIThread(() -> {
englishLocaleStrings = keys;
if (englishLocaleStrings != null && systemLocaleStrings != null) {
showLanguageAlertInternal(infos[1], infos[0], systemLang);
}
});
2017-07-08 18:32:04 +02:00
}, ConnectionsManager.RequestFlagWithoutLogin);
} catch (Exception e) {
FileLog.e(e);
}
}
private void onPasscodePause() {
if (lockRunnable != null) {
2020-01-23 07:15:40 +01:00
if (BuildVars.LOGS_ENABLED) {
FileLog.d("cancel lockRunnable onPasscodePause");
}
AndroidUtilities.cancelRunOnUIThread(lockRunnable);
lockRunnable = null;
}
2018-07-30 04:07:02 +02:00
if (SharedConfig.passcodeHash.length() != 0) {
2020-01-23 07:15:40 +01:00
SharedConfig.lastPauseTime = (int) (SystemClock.elapsedRealtime() / 1000);
lockRunnable = new Runnable() {
@Override
public void run() {
if (lockRunnable == this) {
if (AndroidUtilities.needShowPasscode(true)) {
2018-07-30 04:07:02 +02:00
if (BuildVars.LOGS_ENABLED) {
FileLog.d("lock app");
}
2021-07-15 16:24:57 +02:00
showPasscodeActivity(true, false, -1, -1, null, null);
2023-02-06 12:08:24 +01:00
try {
NotificationsController.getInstance(UserConfig.selectedAccount).showNotifications();
} catch (Exception e) {
FileLog.e(e);
}
} else {
2018-07-30 04:07:02 +02:00
if (BuildVars.LOGS_ENABLED) {
FileLog.d("didn't pass lock check");
}
}
lockRunnable = null;
}
}
};
2018-07-30 04:07:02 +02:00
if (SharedConfig.appLocked) {
AndroidUtilities.runOnUIThread(lockRunnable, 1000);
2020-01-23 07:15:40 +01:00
if (BuildVars.LOGS_ENABLED) {
FileLog.d("schedule app lock in " + 1000);
}
2018-07-30 04:07:02 +02:00
} else if (SharedConfig.autoLockIn != 0) {
2020-01-23 07:15:40 +01:00
if (BuildVars.LOGS_ENABLED) {
FileLog.d("schedule app lock in " + (((long) SharedConfig.autoLockIn) * 1000 + 1000));
}
AndroidUtilities.runOnUIThread(lockRunnable, ((long) SharedConfig.autoLockIn) * 1000 + 1000);
}
} else {
2018-07-30 04:07:02 +02:00
SharedConfig.lastPauseTime = 0;
}
2018-07-30 04:07:02 +02:00
SharedConfig.saveConfig();
}
2023-02-03 20:11:36 +01:00
public void addOverlayPasscodeView(PasscodeView overlay) {
overlayPasscodeViews.add(overlay);
}
public void removeOverlayPasscodeView(PasscodeView overlay) {
overlayPasscodeViews.remove(overlay);
}
private void onPasscodeResume() {
if (lockRunnable != null) {
2020-01-23 07:15:40 +01:00
if (BuildVars.LOGS_ENABLED) {
FileLog.d("cancel lockRunnable onPasscodeResume");
}
AndroidUtilities.cancelRunOnUIThread(lockRunnable);
lockRunnable = null;
}
if (AndroidUtilities.needShowPasscode(true)) {
2021-07-15 16:24:57 +02:00
showPasscodeActivity(true, false, -1, -1, null, null);
}
2018-07-30 04:07:02 +02:00
if (SharedConfig.lastPauseTime != 0) {
SharedConfig.lastPauseTime = 0;
SharedConfig.saveConfig();
2020-01-23 07:15:40 +01:00
if (BuildVars.LOGS_ENABLED) {
FileLog.d("reset lastPauseTime onPasscodeResume");
}
2013-10-25 17:19:00 +02:00
}
}
2018-07-30 04:07:02 +02:00
private void updateCurrentConnectionState(int account) {
if (actionBarLayout == null) {
return;
}
2017-07-08 18:32:04 +02:00
String title = null;
2019-01-23 18:03:33 +01:00
int titleId = 0;
2017-07-08 18:32:04 +02:00
Runnable action = null;
2018-07-30 04:07:02 +02:00
currentConnectionState = ConnectionsManager.getInstance(currentAccount).getConnectionState();
2015-09-24 22:52:02 +02:00
if (currentConnectionState == ConnectionsManager.ConnectionStateWaitingForNetwork) {
2019-01-23 18:03:33 +01:00
title = "WaitingForNetwork";
titleId = R.string.WaitingForNetwork;
2018-07-30 04:07:02 +02:00
} else if (currentConnectionState == ConnectionsManager.ConnectionStateUpdating) {
2019-01-23 18:03:33 +01:00
title = "Updating";
titleId = R.string.Updating;
2018-07-30 04:07:02 +02:00
} else if (currentConnectionState == ConnectionsManager.ConnectionStateConnectingToProxy) {
2019-01-23 18:03:33 +01:00
title = "ConnectingToProxy";
titleId = R.string.ConnectingToProxy;
2015-09-24 22:52:02 +02:00
} else if (currentConnectionState == ConnectionsManager.ConnectionStateConnecting) {
2019-01-23 18:03:33 +01:00
title = "Connecting";
titleId = R.string.Connecting;
2018-07-30 04:07:02 +02:00
}
if (currentConnectionState == ConnectionsManager.ConnectionStateConnecting || currentConnectionState == ConnectionsManager.ConnectionStateConnectingToProxy) {
2018-08-27 10:33:11 +02:00
action = () -> {
BaseFragment lastFragment = null;
if (AndroidUtilities.isTablet()) {
if (!layerFragmentsStack.isEmpty()) {
lastFragment = layerFragmentsStack.get(layerFragmentsStack.size() - 1);
2017-07-08 18:32:04 +02:00
}
2018-08-27 10:33:11 +02:00
} else {
if (!mainFragmentsStack.isEmpty()) {
lastFragment = mainFragmentsStack.get(mainFragmentsStack.size() - 1);
2017-07-08 18:32:04 +02:00
}
}
2018-08-27 10:33:11 +02:00
if (lastFragment instanceof ProxyListActivity || lastFragment instanceof ProxySettingsActivity) {
return;
}
presentFragment(new ProxyListActivity());
2017-07-08 18:32:04 +02:00
};
2014-11-18 06:01:04 +01:00
}
2019-01-23 18:03:33 +01:00
actionBarLayout.setTitleOverlayText(title, titleId, action);
2014-11-18 06:01:04 +01:00
}
2019-05-14 14:08:05 +02:00
public void hideVisibleActionMode() {
if (visibleActionMode == null) {
return;
}
visibleActionMode.finish();
}
2013-12-20 20:25:49 +01:00
@Override
protected void onSaveInstanceState(Bundle outState) {
try {
super.onSaveInstanceState(outState);
2014-09-28 15:37:26 +02:00
BaseFragment lastFragment = null;
if (AndroidUtilities.isTablet()) {
2022-11-05 13:34:47 +01:00
if (layersActionBarLayout != null && !layersActionBarLayout.getFragmentStack().isEmpty()) {
lastFragment = layersActionBarLayout.getFragmentStack().get(layersActionBarLayout.getFragmentStack().size() - 1);
} else if (rightActionBarLayout != null && !rightActionBarLayout.getFragmentStack().isEmpty()) {
lastFragment = rightActionBarLayout.getFragmentStack().get(rightActionBarLayout.getFragmentStack().size() - 1);
} else if (!actionBarLayout.getFragmentStack().isEmpty()) {
lastFragment = actionBarLayout.getFragmentStack().get(actionBarLayout.getFragmentStack().size() - 1);
2014-09-28 15:37:26 +02:00
}
} else {
2022-11-05 13:34:47 +01:00
if (!actionBarLayout.getFragmentStack().isEmpty()) {
lastFragment = actionBarLayout.getFragmentStack().get(actionBarLayout.getFragmentStack().size() - 1);
2014-09-28 15:37:26 +02:00
}
}
if (lastFragment != null) {
Bundle args = lastFragment.getArguments();
if (lastFragment instanceof ChatActivity && args != null) {
outState.putBundle("args", args);
outState.putString("fragment", "chat");
} else if (lastFragment instanceof GroupCreateFinalActivity && args != null) {
outState.putBundle("args", args);
outState.putString("fragment", "group");
2019-01-23 18:03:33 +01:00
} else if (lastFragment instanceof WallpapersListActivity) {
outState.putString("fragment", "wallpapers");
2020-07-26 10:03:38 +02:00
} else if (lastFragment instanceof ProfileActivity) {
ProfileActivity profileActivity = (ProfileActivity) lastFragment;
if (profileActivity.isSettings()) {
outState.putString("fragment", "settings");
} else if (profileActivity.isChat() && args != null) {
outState.putBundle("args", args);
outState.putString("fragment", "chat_profile");
}
2015-09-24 22:52:02 +02:00
} else if (lastFragment instanceof ChannelCreateActivity && args != null && args.getInt("step") == 0) {
outState.putBundle("args", args);
outState.putString("fragment", "channel");
}
lastFragment.saveSelfArgs(outState);
}
2013-12-20 20:25:49 +01:00
} catch (Exception e) {
2017-03-31 01:58:05 +02:00
FileLog.e(e);
2013-12-20 20:25:49 +01:00
}
}
@Override
public void onBackPressed() {
2022-11-05 13:34:47 +01:00
if (FloatingDebugController.onBackPressed()) {
return;
}
2021-07-15 16:24:57 +02:00
if (passcodeView != null && passcodeView.getVisibility() == View.VISIBLE) {
finish();
return;
}
2022-06-21 04:51:00 +02:00
if (ContentPreviewViewer.hasInstance() && ContentPreviewViewer.getInstance().isVisible()) {
ContentPreviewViewer.getInstance().closeWithMenu();
} if (SecretMediaViewer.hasInstance() && SecretMediaViewer.getInstance().isVisible()) {
SecretMediaViewer.getInstance().closePhoto(true, false);
2018-07-30 04:07:02 +02:00
} else if (PhotoViewer.hasInstance() && PhotoViewer.getInstance().isVisible()) {
PhotoViewer.getInstance().closePhoto(true, false);
2018-07-30 04:07:02 +02:00
} else if (ArticleViewer.hasInstance() && ArticleViewer.getInstance().isVisible()) {
2017-03-31 01:58:05 +02:00
ArticleViewer.getInstance().close(true, false);
} else if (drawerLayoutContainer.isDrawerOpened()) {
drawerLayoutContainer.closeDrawer(false);
} else if (AndroidUtilities.isTablet()) {
2022-11-05 13:34:47 +01:00
if (layersActionBarLayout.getView().getVisibility() == View.VISIBLE) {
layersActionBarLayout.onBackPressed();
} else {
2022-11-05 13:34:47 +01:00
if (rightActionBarLayout.getView().getVisibility() == View.VISIBLE && !rightActionBarLayout.getFragmentStack().isEmpty()) {
BaseFragment lastFragment = rightActionBarLayout.getFragmentStack().get(rightActionBarLayout.getFragmentStack().size() - 1);
2022-09-16 20:48:21 +02:00
if (lastFragment.onBackPressed()) {
lastFragment.finishFragment();
}
} else {
actionBarLayout.onBackPressed();
}
}
} else {
actionBarLayout.onBackPressed();
}
}
@Override
public void onLowMemory() {
super.onLowMemory();
2019-12-31 14:08:08 +01:00
if (actionBarLayout != null) {
actionBarLayout.onLowMemory();
if (AndroidUtilities.isTablet()) {
2023-01-04 00:17:33 +01:00
if (rightActionBarLayout != null) {
rightActionBarLayout.onLowMemory();
}
if (layersActionBarLayout != null) {
layersActionBarLayout.onLowMemory();
}
2019-12-31 14:08:08 +01:00
}
}
}
@Override
public void onActionModeStarted(ActionMode mode) {
super.onActionModeStarted(mode);
2019-05-14 14:08:05 +02:00
visibleActionMode = mode;
2017-03-31 01:58:05 +02:00
try {
Menu menu = mode.getMenu();
if (menu != null) {
boolean extended = actionBarLayout.extendActionMode(menu);
if (!extended && AndroidUtilities.isTablet()) {
extended = rightActionBarLayout.extendActionMode(menu);
if (!extended) {
layersActionBarLayout.extendActionMode(menu);
}
}
}
} catch (Exception e) {
FileLog.e(e);
}
2015-10-29 18:10:07 +01:00
if (Build.VERSION.SDK_INT >= 23 && mode.getType() == ActionMode.TYPE_FLOATING) {
return;
}
actionBarLayout.onActionModeStarted(mode);
if (AndroidUtilities.isTablet()) {
rightActionBarLayout.onActionModeStarted(mode);
layersActionBarLayout.onActionModeStarted(mode);
}
}
@Override
public void onActionModeFinished(ActionMode mode) {
super.onActionModeFinished(mode);
2019-05-14 14:08:05 +02:00
if (visibleActionMode == mode) {
visibleActionMode = null;
}
2015-10-29 18:10:07 +01:00
if (Build.VERSION.SDK_INT >= 23 && mode.getType() == ActionMode.TYPE_FLOATING) {
return;
}
actionBarLayout.onActionModeFinished(mode);
if (AndroidUtilities.isTablet()) {
rightActionBarLayout.onActionModeFinished(mode);
layersActionBarLayout.onActionModeFinished(mode);
}
}
@Override
public boolean onPreIme() {
2018-07-30 04:07:02 +02:00
if (SecretMediaViewer.hasInstance() && SecretMediaViewer.getInstance().isVisible()) {
SecretMediaViewer.getInstance().closePhoto(true, false);
return true;
2018-07-30 04:07:02 +02:00
} else if (PhotoViewer.hasInstance() && PhotoViewer.getInstance().isVisible()) {
PhotoViewer.getInstance().closePhoto(true, false);
return true;
2018-07-30 04:07:02 +02:00
} else if (ArticleViewer.hasInstance() && ArticleViewer.getInstance().isVisible()) {
2017-03-31 01:58:05 +02:00
ArticleViewer.getInstance().close(true, false);
return true;
}
return false;
}
2014-07-10 02:15:58 +02:00
2019-03-03 21:40:48 +01:00
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
int keyCode = event.getKeyCode();
2021-04-09 15:17:32 +02:00
if (event.getAction() == KeyEvent.ACTION_DOWN && (event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_UP || event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_DOWN)) {
if (VoIPService.getSharedInstance() != null) {
2021-06-25 02:43:10 +02:00
if (Build.VERSION.SDK_INT >= 32) {
2021-04-09 15:17:32 +02:00
boolean oldValue = WebRtcAudioTrack.isSpeakerMuted();
AudioManager am = (AudioManager) getSystemService(AUDIO_SERVICE);
int minVolume = am.getStreamMinVolume(AudioManager.STREAM_VOICE_CALL);
boolean mute = am.getStreamVolume(AudioManager.STREAM_VOICE_CALL) == minVolume && event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_DOWN;
WebRtcAudioTrack.setSpeakerMute(mute);
if (oldValue != WebRtcAudioTrack.isSpeakerMuted()) {
showVoiceChatTooltip(mute ? UndoView.ACTION_VOIP_SOUND_MUTED : UndoView.ACTION_VOIP_SOUND_UNMUTED);
}
2019-03-03 21:40:48 +01:00
}
2021-04-09 15:17:32 +02:00
} else if (!mainFragmentsStack.isEmpty() && (!PhotoViewer.hasInstance() || !PhotoViewer.getInstance().isVisible()) && event.getRepeatCount() == 0) {
BaseFragment fragment = mainFragmentsStack.get(mainFragmentsStack.size() - 1);
2019-05-14 14:08:05 +02:00
if (fragment instanceof ChatActivity) {
if (((ChatActivity) fragment).maybePlayVisibleVideo()) {
return true;
}
}
2021-04-09 15:17:32 +02:00
if (AndroidUtilities.isTablet() && !rightFragmentsStack.isEmpty()) {
fragment = rightFragmentsStack.get(rightFragmentsStack.size() - 1);
if (fragment instanceof ChatActivity) {
if (((ChatActivity) fragment).maybePlayVisibleVideo()) {
return true;
}
}
}
2019-05-14 14:08:05 +02:00
}
2019-03-03 21:40:48 +01:00
}
2022-04-16 16:43:17 +02:00
try {
2023-03-08 08:27:18 +01:00
return super.dispatchKeyEvent(event);
2022-04-16 16:43:17 +02:00
} catch (Exception e) {
FileLog.e(e);
}
return false;
2019-03-03 21:40:48 +01:00
}
2014-10-01 21:55:24 +02:00
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
2018-07-30 04:07:02 +02:00
if (keyCode == KeyEvent.KEYCODE_MENU && !SharedConfig.isWaitingForPasscodeEnter) {
if (PhotoViewer.hasInstance() && PhotoViewer.getInstance().isVisible()) {
2016-10-11 13:57:01 +02:00
return super.onKeyUp(keyCode, event);
2018-07-30 04:07:02 +02:00
} else if (ArticleViewer.hasInstance() && ArticleViewer.getInstance().isVisible()) {
2017-03-31 01:58:05 +02:00
return super.onKeyUp(keyCode, event);
2016-10-11 13:57:01 +02:00
}
2014-11-21 01:14:44 +01:00
if (AndroidUtilities.isTablet()) {
2022-11-05 13:34:47 +01:00
if (layersActionBarLayout.getView().getVisibility() == View.VISIBLE && !layersActionBarLayout.getFragmentStack().isEmpty()) {
layersActionBarLayout.getView().onKeyUp(keyCode, event);
} else if (rightActionBarLayout.getView().getVisibility() == View.VISIBLE && !rightActionBarLayout.getFragmentStack().isEmpty()) {
rightActionBarLayout.getView().onKeyUp(keyCode, event);
2014-11-21 01:14:44 +01:00
} else {
2022-11-05 13:34:47 +01:00
actionBarLayout.getView().onKeyUp(keyCode, event);
2014-11-21 01:14:44 +01:00
}
2014-10-01 21:55:24 +02:00
} else {
2022-11-05 13:34:47 +01:00
if (actionBarLayout.getFragmentStack().size() == 1) {
2014-11-21 01:14:44 +01:00
if (!drawerLayoutContainer.isDrawerOpened()) {
if (getCurrentFocus() != null) {
AndroidUtilities.hideKeyboard(getCurrentFocus());
}
2014-11-21 01:14:44 +01:00
drawerLayoutContainer.openDrawer(false);
} else {
drawerLayoutContainer.closeDrawer(false);
}
} else {
2022-11-05 13:34:47 +01:00
actionBarLayout.getView().onKeyUp(keyCode, event);
2014-11-21 01:14:44 +01:00
}
2014-10-01 21:55:24 +02:00
}
}
return super.onKeyUp(keyCode, event);
}
@Override
2022-11-05 13:34:47 +01:00
public boolean needPresentFragment(INavigationLayout layout, INavigationLayout.NavigationParams params) {
BaseFragment fragment = params.fragment;
boolean removeLast = params.removeLast;
boolean forceWithoutAnimation = params.noAnimation;
2018-07-30 04:07:02 +02:00
if (ArticleViewer.hasInstance() && ArticleViewer.getInstance().isVisible()) {
2017-03-31 01:58:05 +02:00
ArticleViewer.getInstance().close(false, true);
}
if (AndroidUtilities.isTablet()) {
2023-02-25 09:01:39 +01:00
drawerLayoutContainer.setAllowOpenDrawer(!(fragment instanceof LoginActivity || fragment instanceof IntroActivity || fragment instanceof CountrySelectActivity) && (layersActionBarLayout == null || layersActionBarLayout.getView().getVisibility() != View.VISIBLE), true);
2015-07-22 20:56:37 +02:00
if (fragment instanceof DialogsActivity) {
2017-03-31 01:58:05 +02:00
DialogsActivity dialogsActivity = (DialogsActivity) fragment;
2015-07-22 20:56:37 +02:00
if (dialogsActivity.isMainDialogList() && layout != actionBarLayout) {
actionBarLayout.removeAllFragments();
2022-11-05 13:34:47 +01:00
actionBarLayout.presentFragment(params.setRemoveLast(removeLast).setNoAnimation(forceWithoutAnimation).setCheckPresentFromDelegate(false));
layersActionBarLayout.removeAllFragments();
2022-11-05 13:34:47 +01:00
layersActionBarLayout.getView().setVisibility(View.GONE);
drawerLayoutContainer.setAllowOpenDrawer(true, false);
if (!tabletFullSize) {
shadowTabletSide.setVisibility(View.VISIBLE);
2022-11-05 13:34:47 +01:00
if (rightActionBarLayout.getFragmentStack().isEmpty()) {
backgroundTablet.setVisibility(View.VISIBLE);
}
}
return false;
}
2014-09-28 15:37:26 +02:00
}
2019-09-10 12:56:11 +02:00
if (fragment instanceof ChatActivity && !((ChatActivity) fragment).isInScheduleMode()) {
2014-11-20 15:45:33 +01:00
if (!tabletFullSize && layout == rightActionBarLayout || tabletFullSize && layout == actionBarLayout) {
2022-11-05 13:34:47 +01:00
boolean result = !(tabletFullSize && layout == actionBarLayout && actionBarLayout.getFragmentStack().size() == 1);
if (!layersActionBarLayout.getFragmentStack().isEmpty()) {
for (int a = 0; a < layersActionBarLayout.getFragmentStack().size() - 1; a++) {
layersActionBarLayout.removeFragmentFromStack(layersActionBarLayout.getFragmentStack().get(0));
2014-11-20 15:45:33 +01:00
a--;
}
layersActionBarLayout.closeLastFragment(!forceWithoutAnimation);
}
2015-01-23 22:59:15 +01:00
if (!result) {
2022-11-05 13:34:47 +01:00
actionBarLayout.presentFragment(params.setNoAnimation(forceWithoutAnimation).setCheckPresentFromDelegate(false));
2015-01-23 22:59:15 +01:00
}
return result;
2014-11-20 15:45:33 +01:00
} else if (!tabletFullSize && layout != rightActionBarLayout) {
2022-11-05 13:34:47 +01:00
rightActionBarLayout.getView().setVisibility(View.VISIBLE);
backgroundTablet.setVisibility(View.GONE);
rightActionBarLayout.removeAllFragments();
2022-11-05 13:34:47 +01:00
rightActionBarLayout.presentFragment(params.setNoAnimation(true).setRemoveLast(removeLast).setCheckPresentFromDelegate(false));
if (!layersActionBarLayout.getFragmentStack().isEmpty()) {
for (int a = 0; a < layersActionBarLayout.getFragmentStack().size() - 1; a++) {
layersActionBarLayout.removeFragmentFromStack(layersActionBarLayout.getFragmentStack().get(0));
2014-09-28 15:37:26 +02:00
a--;
}
layersActionBarLayout.closeLastFragment(!forceWithoutAnimation);
}
return false;
} else if (tabletFullSize && layout != actionBarLayout) {
2022-11-05 13:34:47 +01:00
actionBarLayout.presentFragment(params.setRemoveLast(actionBarLayout.getFragmentStack().size() > 1).setNoAnimation(forceWithoutAnimation).setCheckPresentFromDelegate(false));
if (!layersActionBarLayout.getFragmentStack().isEmpty()) {
for (int a = 0; a < layersActionBarLayout.getFragmentStack().size() - 1; a++) {
layersActionBarLayout.removeFragmentFromStack(layersActionBarLayout.getFragmentStack().get(0));
2014-09-28 15:37:26 +02:00
a--;
}
layersActionBarLayout.closeLastFragment(!forceWithoutAnimation);
}
return false;
2014-09-28 15:37:26 +02:00
} else {
2022-11-05 13:34:47 +01:00
if (!layersActionBarLayout.getFragmentStack().isEmpty()) {
for (int a = 0; a < layersActionBarLayout.getFragmentStack().size() - 1; a++) {
layersActionBarLayout.removeFragmentFromStack(layersActionBarLayout.getFragmentStack().get(0));
2014-09-28 15:37:26 +02:00
a--;
}
layersActionBarLayout.closeLastFragment(!forceWithoutAnimation);
}
2022-11-05 13:34:47 +01:00
actionBarLayout.presentFragment(params.setRemoveLast(actionBarLayout.getFragmentStack().size() > 1).setNoAnimation(forceWithoutAnimation).setCheckPresentFromDelegate(false));
2014-11-17 23:04:31 +01:00
return false;
}
} else if (layout != layersActionBarLayout) {
2022-11-05 13:34:47 +01:00
layersActionBarLayout.getView().setVisibility(View.VISIBLE);
drawerLayoutContainer.setAllowOpenDrawer(false, true);
2022-11-05 13:34:47 +01:00
int account = -1;
for (int a = 0; a < UserConfig.MAX_ACCOUNT_COUNT; a++) {
if (UserConfig.getInstance(a).isClientActivated()) {
account = a;
break;
}
}
if (fragment instanceof LoginActivity && account == -1) {
backgroundTablet.setVisibility(View.VISIBLE);
shadowTabletSide.setVisibility(View.GONE);
shadowTablet.setBackgroundColor(0x00000000);
} else {
2017-03-31 01:58:05 +02:00
shadowTablet.setBackgroundColor(0x7f000000);
}
2022-11-05 13:34:47 +01:00
layersActionBarLayout.presentFragment(params.setRemoveLast(removeLast).setNoAnimation(forceWithoutAnimation).setCheckPresentFromDelegate(false));
return false;
}
} else {
2022-03-11 17:49:54 +01:00
boolean allow = true; // TODO: Make it a flag inside fragment itself, maybe BaseFragment#isDrawerOpenAllowed()?
if (fragment instanceof LoginActivity || fragment instanceof IntroActivity) {
if (mainFragmentsStack.size() == 0 || mainFragmentsStack.get(0) instanceof IntroActivity) {
2018-07-30 04:07:02 +02:00
allow = false;
}
} else if (fragment instanceof CountrySelectActivity) {
if (mainFragmentsStack.size() == 1) {
allow = false;
}
}
drawerLayoutContainer.setAllowOpenDrawer(allow, false);
}
2020-09-30 15:48:47 +02:00
return true;
}
@Override
2022-11-05 13:34:47 +01:00
public boolean needAddFragmentToStack(BaseFragment fragment, INavigationLayout layout) {
if (AndroidUtilities.isTablet()) {
2022-11-05 13:34:47 +01:00
drawerLayoutContainer.setAllowOpenDrawer(!(fragment instanceof LoginActivity || fragment instanceof IntroActivity || fragment instanceof CountrySelectActivity) && layersActionBarLayout.getView().getVisibility() != View.VISIBLE, true);
2015-07-22 20:56:37 +02:00
if (fragment instanceof DialogsActivity) {
2017-03-31 01:58:05 +02:00
DialogsActivity dialogsActivity = (DialogsActivity) fragment;
2015-07-22 20:56:37 +02:00
if (dialogsActivity.isMainDialogList() && layout != actionBarLayout) {
actionBarLayout.removeAllFragments();
actionBarLayout.addFragmentToStack(fragment);
layersActionBarLayout.removeAllFragments();
2022-11-05 13:34:47 +01:00
layersActionBarLayout.getView().setVisibility(View.GONE);
drawerLayoutContainer.setAllowOpenDrawer(true, false);
if (!tabletFullSize) {
shadowTabletSide.setVisibility(View.VISIBLE);
2022-11-05 13:34:47 +01:00
if (rightActionBarLayout.getFragmentStack().isEmpty()) {
backgroundTablet.setVisibility(View.VISIBLE);
}
}
return false;
}
2019-09-10 12:56:11 +02:00
} else if (fragment instanceof ChatActivity && !((ChatActivity) fragment).isInScheduleMode()) {
if (!tabletFullSize && layout != rightActionBarLayout) {
2022-11-05 13:34:47 +01:00
rightActionBarLayout.getView().setVisibility(View.VISIBLE);
backgroundTablet.setVisibility(View.GONE);
rightActionBarLayout.removeAllFragments();
rightActionBarLayout.addFragmentToStack(fragment);
2022-11-05 13:34:47 +01:00
if (!layersActionBarLayout.getFragmentStack().isEmpty()) {
for (int a = 0; a < layersActionBarLayout.getFragmentStack().size() - 1; a++) {
layersActionBarLayout.removeFragmentFromStack(layersActionBarLayout.getFragmentStack().get(0));
2014-09-28 15:37:26 +02:00
a--;
}
layersActionBarLayout.closeLastFragment(true);
}
return false;
} else if (tabletFullSize && layout != actionBarLayout) {
actionBarLayout.addFragmentToStack(fragment);
2022-11-05 13:34:47 +01:00
if (!layersActionBarLayout.getFragmentStack().isEmpty()) {
for (int a = 0; a < layersActionBarLayout.getFragmentStack().size() - 1; a++) {
layersActionBarLayout.removeFragmentFromStack(layersActionBarLayout.getFragmentStack().get(0));
2014-09-28 15:37:26 +02:00
a--;
}
layersActionBarLayout.closeLastFragment(true);
}
return false;
}
} else if (layout != layersActionBarLayout) {
2022-11-05 13:34:47 +01:00
layersActionBarLayout.getView().setVisibility(View.VISIBLE);
drawerLayoutContainer.setAllowOpenDrawer(false, true);
2022-11-05 13:34:47 +01:00
int account = -1;
for (int a = 0; a < UserConfig.MAX_ACCOUNT_COUNT; a++) {
if (UserConfig.getInstance(a).isClientActivated()) {
account = a;
break;
}
}
if (fragment instanceof LoginActivity && account == -1) {
backgroundTablet.setVisibility(View.VISIBLE);
shadowTabletSide.setVisibility(View.GONE);
shadowTablet.setBackgroundColor(0x00000000);
} else {
2017-03-31 01:58:05 +02:00
shadowTablet.setBackgroundColor(0x7f000000);
}
layersActionBarLayout.addFragmentToStack(fragment);
return false;
}
} else {
2018-07-30 04:07:02 +02:00
boolean allow = true;
2022-03-11 17:49:54 +01:00
if (fragment instanceof LoginActivity || fragment instanceof IntroActivity) {
if (mainFragmentsStack.size() == 0 || mainFragmentsStack.get(0) instanceof IntroActivity) {
2018-07-30 04:07:02 +02:00
allow = false;
}
} else if (fragment instanceof CountrySelectActivity) {
if (mainFragmentsStack.size() == 1) {
allow = false;
}
}
drawerLayoutContainer.setAllowOpenDrawer(allow, false);
}
2020-09-30 15:48:47 +02:00
return true;
}
@Override
2022-11-05 13:34:47 +01:00
public boolean needCloseLastFragment(INavigationLayout layout) {
if (AndroidUtilities.isTablet()) {
2022-11-05 13:34:47 +01:00
if (layout == actionBarLayout && layout.getFragmentStack().size() <= 1) {
onFinish();
finish();
return false;
} else if (layout == rightActionBarLayout) {
if (!tabletFullSize) {
backgroundTablet.setVisibility(View.VISIBLE);
}
2022-11-05 13:34:47 +01:00
} else if (layout == layersActionBarLayout && actionBarLayout.getFragmentStack().isEmpty() && layersActionBarLayout.getFragmentStack().size() == 1) {
2014-09-28 15:37:26 +02:00
onFinish();
finish();
return false;
}
} else {
2022-11-05 13:34:47 +01:00
if (layout.getFragmentStack().size() <= 1) {
onFinish();
finish();
return false;
}
2022-11-05 13:34:47 +01:00
if (layout.getFragmentStack().size() >= 2 && !(layout.getFragmentStack().get(0) instanceof LoginActivity)) {
2017-03-31 01:58:05 +02:00
drawerLayoutContainer.setAllowOpenDrawer(true, false);
}
}
return true;
}
2017-03-31 01:58:05 +02:00
public void rebuildAllFragments(boolean last) {
if (layersActionBarLayout != null) {
2018-07-30 04:07:02 +02:00
layersActionBarLayout.rebuildAllFragmentViews(last, last);
2017-03-31 01:58:05 +02:00
} else {
2018-07-30 04:07:02 +02:00
actionBarLayout.rebuildAllFragmentViews(last, last);
2017-03-31 01:58:05 +02:00
}
}
@Override
2022-11-05 13:34:47 +01:00
public void onRebuildAllFragments(INavigationLayout layout, boolean last) {
if (AndroidUtilities.isTablet()) {
if (layout == layersActionBarLayout) {
2018-07-30 04:07:02 +02:00
rightActionBarLayout.rebuildAllFragmentViews(last, last);
actionBarLayout.rebuildAllFragmentViews(last, last);
}
}
2014-11-19 02:23:46 +01:00
drawerLayoutAdapter.notifyDataSetChanged();
2014-07-10 02:15:58 +02:00
}
2023-03-08 08:27:18 +01:00
public static BaseFragment getLastFragment() {
if (instance != null && instance.getActionBarLayout() != null) {
return instance.getActionBarLayout().getLastFragment();
}
return null;
}
2013-10-25 17:19:00 +02:00
}