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

1184 lines
59 KiB
Java
Raw Normal View History

2016-10-11 13:57:01 +02:00
/*
2019-01-23 18:03:33 +01:00
* This is the source code of Telegram for Android v. 5.x.x.
2016-10-11 13:57:01 +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.
2016-10-11 13:57:01 +02:00
*/
package org.telegram.ui;
import android.animation.Animator;
2017-03-31 01:58:05 +02:00
import android.animation.AnimatorListenerAdapter;
2016-10-11 13:57:01 +02:00
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
2017-03-31 01:58:05 +02:00
import android.annotation.SuppressLint;
2019-09-10 12:56:11 +02:00
import android.app.Activity;
2016-10-11 13:57:01 +02:00
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
2019-09-10 12:56:11 +02:00
import android.content.SharedPreferences;
2016-10-11 13:57:01 +02:00
import android.content.pm.PackageInfo;
import android.graphics.Canvas;
import android.graphics.Paint;
2019-01-23 18:03:33 +01:00
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
2021-04-14 03:44:46 +02:00
import android.net.Uri;
2016-10-11 13:57:01 +02:00
import android.os.Build;
import android.os.Bundle;
2019-05-14 14:08:05 +02:00
import android.telephony.PhoneNumberUtils;
2016-10-11 13:57:01 +02:00
import android.telephony.TelephonyManager;
import android.text.Editable;
import android.text.InputType;
2020-07-26 10:03:38 +02:00
import android.text.SpannableStringBuilder;
import android.text.Spanned;
2017-03-31 01:58:05 +02:00
import android.text.TextUtils;
2016-10-11 13:57:01 +02:00
import android.text.TextWatcher;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.View;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.inputmethod.EditorInfo;
import android.widget.FrameLayout;
import android.widget.ImageView;
2019-01-23 18:03:33 +01:00
import android.widget.LinearLayout;
2016-10-11 13:57:01 +02:00
import android.widget.ScrollView;
import android.widget.TextView;
import org.telegram.PhoneFormat.PhoneFormat;
import org.telegram.messenger.AndroidUtilities;
import org.telegram.messenger.ApplicationLoader;
2019-09-10 12:56:11 +02:00
import org.telegram.messenger.BuildVars;
2016-10-11 13:57:01 +02:00
import org.telegram.messenger.FileLog;
import org.telegram.messenger.LocaleController;
import org.telegram.messenger.NotificationCenter;
import org.telegram.messenger.R;
import org.telegram.tgnet.ConnectionsManager;
import org.telegram.tgnet.TLRPC;
import org.telegram.ui.ActionBar.ActionBar;
import org.telegram.ui.ActionBar.ActionBarMenu;
2017-03-31 01:58:05 +02:00
import org.telegram.ui.ActionBar.AlertDialog;
2016-10-11 13:57:01 +02:00
import org.telegram.ui.ActionBar.BaseFragment;
2017-03-31 01:58:05 +02:00
import org.telegram.ui.ActionBar.Theme;
import org.telegram.ui.ActionBar.ThemeDescription;
import org.telegram.ui.Components.AlertsCreator;
2017-12-08 18:35:59 +01:00
import org.telegram.ui.Components.EditTextBoldCursor;
2016-10-11 13:57:01 +02:00
import org.telegram.ui.Components.LayoutHelper;
2021-02-23 12:53:38 +01:00
import org.telegram.ui.Components.RLottieDrawable;
import org.telegram.ui.Components.RLottieImageView;
2017-03-31 01:58:05 +02:00
import org.telegram.ui.Components.RadialProgressView;
2016-10-11 13:57:01 +02:00
import org.telegram.ui.Components.SlideView;
2020-07-26 10:03:38 +02:00
import org.telegram.ui.Components.URLSpanNoUnderline;
2016-10-11 13:57:01 +02:00
import java.util.ArrayList;
import java.util.Locale;
import java.util.Timer;
import java.util.TimerTask;
public class CancelAccountDeletionActivity extends BaseFragment {
private int currentViewNum = 0;
private SlideView[] views = new SlideView[5];
2017-03-31 01:58:05 +02:00
private AlertDialog progressDialog;
2016-10-11 13:57:01 +02:00
private View doneButton;
private String hash;
private String phone;
private Dialog errorDialog;
2019-01-23 18:03:33 +01:00
private int scrollHeight;
2016-10-11 13:57:01 +02:00
private final static int done_button = 1;
2020-07-26 10:03:38 +02:00
private static class ProgressView extends View {
2017-03-31 01:58:05 +02:00
private Paint paint = new Paint();
private Paint paint2 = new Paint();
private float progress;
public ProgressView(Context context) {
super(context);
paint.setColor(Theme.getColor(Theme.key_login_progressInner));
paint2.setColor(Theme.getColor(Theme.key_login_progressOuter));
}
public void setProgress(float value) {
progress = value;
invalidate();
}
@Override
protected void onDraw(Canvas canvas) {
int start = (int) (getMeasuredWidth() * progress);
canvas.drawRect(0, 0, start, getMeasuredHeight(), paint2);
canvas.drawRect(start, 0, getMeasuredWidth(), getMeasuredHeight(), paint);
}
}
2016-10-11 13:57:01 +02:00
public CancelAccountDeletionActivity(Bundle args) {
super(args);
hash = args.getString("hash");
phone = args.getString("phone");
}
@Override
public void onFragmentDestroy() {
super.onFragmentDestroy();
for (int a = 0; a < views.length; a++) {
if (views[a] != null) {
views[a].onDestroyActivity();
}
}
if (progressDialog != null) {
try {
progressDialog.dismiss();
} catch (Exception e) {
2017-03-31 01:58:05 +02:00
FileLog.e(e);
2016-10-11 13:57:01 +02:00
}
progressDialog = null;
}
AndroidUtilities.removeAdjustResize(getParentActivity(), classGuid);
}
@Override
public View createView(Context context) {
actionBar.setTitle(LocaleController.getString("AppName", R.string.AppName));
actionBar.setBackButtonImage(R.drawable.ic_ab_back);
actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() {
@Override
public void onItemClick(int id) {
if (id == done_button) {
views[currentViewNum].onNextPressed();
} else if (id == -1) {
finishFragment();
}
}
});
ActionBarMenu menu = actionBar.createMenu();
2020-12-24 06:36:01 +01:00
doneButton = menu.addItemWithWidth(done_button, R.drawable.ic_done, AndroidUtilities.dp(56), LocaleController.getString("Done", R.string.Done));
2016-10-11 13:57:01 +02:00
doneButton.setVisibility(View.GONE);
2019-01-23 18:03:33 +01:00
ScrollView scrollView = new ScrollView(context) {
@Override
public boolean requestChildRectangleOnScreen(View child, Rect rectangle, boolean immediate) {
if (currentViewNum == 1 || currentViewNum == 2 || currentViewNum == 4) {
rectangle.bottom += AndroidUtilities.dp(40);
}
return super.requestChildRectangleOnScreen(child, rectangle, immediate);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
scrollHeight = MeasureSpec.getSize(heightMeasureSpec) - AndroidUtilities.dp(30);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
};
2016-10-11 13:57:01 +02:00
scrollView.setFillViewport(true);
2019-01-23 18:03:33 +01:00
fragmentView = scrollView;
2016-10-11 13:57:01 +02:00
FrameLayout frameLayout = new FrameLayout(context);
scrollView.addView(frameLayout, LayoutHelper.createScroll(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.LEFT));
views[0] = new PhoneView(context);
views[1] = new LoginActivitySmsView(context, 1);
views[2] = new LoginActivitySmsView(context, 2);
views[3] = new LoginActivitySmsView(context, 3);
views[4] = new LoginActivitySmsView(context, 4);
for (int a = 0; a < views.length; a++) {
views[a].setVisibility(a == 0 ? View.VISIBLE : View.GONE);
frameLayout.addView(views[a], LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, a == 0 ? LayoutHelper.WRAP_CONTENT : LayoutHelper.MATCH_PARENT, Gravity.TOP | Gravity.LEFT, AndroidUtilities.isTablet() ? 26 : 18, 30, AndroidUtilities.isTablet() ? 26 : 18, 0));
}
actionBar.setTitle(views[0].getHeaderName());
return fragmentView;
}
@Override
public void onResume() {
super.onResume();
AndroidUtilities.requestAdjustResize(getParentActivity(), classGuid);
}
@Override
protected void onDialogDismiss(Dialog dialog) {
if (dialog == errorDialog) {
finishFragment();
}
}
@Override
public boolean onBackPressed() {
for (int a = 0; a < views.length; a++) {
if (views[a] != null) {
views[a].onDestroyActivity();
}
}
return true;
}
@Override
public void onTransitionAnimationEnd(boolean isOpen, boolean backward) {
if (isOpen) {
views[currentViewNum].onShow();
}
}
public void needShowProgress() {
if (getParentActivity() == null || getParentActivity().isFinishing() || progressDialog != null) {
return;
}
2019-01-23 18:03:33 +01:00
progressDialog = new AlertDialog(getParentActivity(), 3);
progressDialog.setCanCacnel(false);
2016-10-11 13:57:01 +02:00
progressDialog.show();
}
public void needHideProgress() {
if (progressDialog == null) {
return;
}
try {
progressDialog.dismiss();
} catch (Exception e) {
2017-03-31 01:58:05 +02:00
FileLog.e(e);
2016-10-11 13:57:01 +02:00
}
progressDialog = null;
}
public void setPage(int page, boolean animated, Bundle params, boolean back) {
if (page == 3 || page == 0) {
doneButton.setVisibility(View.GONE);
} else {
doneButton.setVisibility(View.VISIBLE);
}
final SlideView outView = views[currentViewNum];
final SlideView newView = views[page];
currentViewNum = page;
2017-03-31 01:58:05 +02:00
newView.setParams(params, false);
2016-10-11 13:57:01 +02:00
actionBar.setTitle(newView.getHeaderName());
newView.onShow();
newView.setX(back ? -AndroidUtilities.displaySize.x : AndroidUtilities.displaySize.x);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.setInterpolator(new AccelerateDecelerateInterpolator());
animatorSet.setDuration(300);
animatorSet.playTogether(
ObjectAnimator.ofFloat(outView, "translationX", back ? AndroidUtilities.displaySize.x : -AndroidUtilities.displaySize.x),
ObjectAnimator.ofFloat(newView, "translationX", 0));
2017-03-31 01:58:05 +02:00
animatorSet.addListener(new AnimatorListenerAdapter() {
2016-10-11 13:57:01 +02:00
@Override
public void onAnimationStart(Animator animation) {
newView.setVisibility(View.VISIBLE);
}
@Override
public void onAnimationEnd(Animator animation) {
outView.setVisibility(View.GONE);
outView.setX(0);
}
});
animatorSet.start();
}
private void fillNextCodeParams(Bundle params, TLRPC.TL_auth_sentCode res) {
params.putString("phoneHash", res.phone_code_hash);
if (res.next_type instanceof TLRPC.TL_auth_codeTypeCall) {
params.putInt("nextType", 4);
} else if (res.next_type instanceof TLRPC.TL_auth_codeTypeFlashCall) {
params.putInt("nextType", 3);
} else if (res.next_type instanceof TLRPC.TL_auth_codeTypeSms) {
params.putInt("nextType", 2);
}
if (res.type instanceof TLRPC.TL_auth_sentCodeTypeApp) {
params.putInt("type", 1);
params.putInt("length", res.type.length);
setPage(1, true, params, false);
} else {
if (res.timeout == 0) {
res.timeout = 60;
}
params.putInt("timeout", res.timeout * 1000);
if (res.type instanceof TLRPC.TL_auth_sentCodeTypeCall) {
params.putInt("type", 4);
params.putInt("length", res.type.length);
setPage(4, true, params, false);
} else if (res.type instanceof TLRPC.TL_auth_sentCodeTypeFlashCall) {
params.putInt("type", 3);
params.putString("pattern", res.type.pattern);
setPage(3, true, params, false);
} else if (res.type instanceof TLRPC.TL_auth_sentCodeTypeSms) {
params.putInt("type", 2);
params.putInt("length", res.type.length);
setPage(2, true, params, false);
}
}
}
public class PhoneView extends SlideView {
private boolean nextPressed = false;
2017-03-31 01:58:05 +02:00
private RadialProgressView progressBar;
2016-10-11 13:57:01 +02:00
public PhoneView(Context context) {
super(context);
setOrientation(VERTICAL);
FrameLayout frameLayout = new FrameLayout(context);
addView(frameLayout, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 200));
2017-03-31 01:58:05 +02:00
progressBar = new RadialProgressView(context);
2016-10-11 13:57:01 +02:00
frameLayout.addView(progressBar, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER));
}
@Override
public void onNextPressed() {
if (getParentActivity() == null || nextPressed) {
return;
}
TelephonyManager tm = (TelephonyManager) ApplicationLoader.applicationContext.getSystemService(Context.TELEPHONY_SERVICE);
2017-03-31 01:58:05 +02:00
final TLRPC.TL_account_sendConfirmPhoneCode req = new TLRPC.TL_account_sendConfirmPhoneCode();
2016-10-11 13:57:01 +02:00
req.hash = hash;
2019-01-23 18:03:33 +01:00
req.settings = new TLRPC.TL_codeSettings();
2020-07-26 10:03:38 +02:00
req.settings.allow_flashcall = false;
2019-08-22 01:53:26 +02:00
req.settings.allow_app_hash = ApplicationLoader.hasPlayServices;
2019-09-10 12:56:11 +02:00
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("mainconfig", Activity.MODE_PRIVATE);
if (req.settings.allow_app_hash) {
preferences.edit().putString("sms_hash", BuildVars.SMS_HASH).commit();
} else {
preferences.edit().remove("sms_hash").commit();
}
2019-01-23 18:03:33 +01:00
if (req.settings.allow_flashcall) {
2016-10-11 13:57:01 +02:00
try {
2017-03-31 01:58:05 +02:00
@SuppressLint("HardwareIds") String number = tm.getLine1Number();
if (!TextUtils.isEmpty(number)) {
2019-05-14 14:08:05 +02:00
req.settings.current_number = PhoneNumberUtils.compare(phone, number);
2019-01-23 18:03:33 +01:00
if (!req.settings.current_number) {
req.settings.allow_flashcall = false;
2017-03-31 01:58:05 +02:00
}
} else {
2019-01-23 18:03:33 +01:00
req.settings.current_number = false;
2017-03-31 01:58:05 +02:00
}
2016-10-11 13:57:01 +02:00
} catch (Exception e) {
2019-01-23 18:03:33 +01:00
req.settings.allow_flashcall = false;
2017-03-31 01:58:05 +02:00
FileLog.e(e);
2016-10-11 13:57:01 +02:00
}
}
final Bundle params = new Bundle();
params.putString("phone", phone);
nextPressed = true;
2019-01-23 18:03:33 +01:00
ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
nextPressed = false;
if (error == null) {
fillNextCodeParams(params, (TLRPC.TL_auth_sentCode) response);
} else {
errorDialog = AlertsCreator.processError(currentAccount, error, CancelAccountDeletionActivity.this, req);
2016-10-11 13:57:01 +02:00
}
2019-01-23 18:03:33 +01:00
}), ConnectionsManager.RequestFlagFailOnServerErrors);
2016-10-11 13:57:01 +02:00
}
@Override
public String getHeaderName() {
return LocaleController.getString("CancelAccountReset", R.string.CancelAccountReset);
}
@Override
public void onShow() {
super.onShow();
onNextPressed();
}
}
public class LoginActivitySmsView extends SlideView implements NotificationCenter.NotificationCenterDelegate {
private String phone;
private String phoneHash;
2019-01-23 18:03:33 +01:00
private LinearLayout codeFieldContainer;
private EditTextBoldCursor[] codeField;
2016-10-11 13:57:01 +02:00
private TextView confirmTextView;
2019-01-23 18:03:33 +01:00
private TextView titleTextView;
private ImageView blackImageView;
2021-02-23 12:53:38 +01:00
private RLottieImageView blueImageView;
2016-10-11 13:57:01 +02:00
private TextView timeText;
private TextView problemText;
private ProgressView progressView;
2021-02-23 12:53:38 +01:00
RLottieDrawable hintDrawable;
2016-10-11 13:57:01 +02:00
private Timer timeTimer;
private Timer codeTimer;
private final Object timerSync = new Object();
2019-01-23 18:03:33 +01:00
private int time = 60000;
private int codeTime = 15000;
2016-10-11 13:57:01 +02:00
private double lastCurrentTime;
private double lastCodeTime;
private boolean ignoreOnTextChange;
private boolean waitingForEvent;
private boolean nextPressed;
private String lastError = "";
private int currentType;
private int nextType;
private String pattern = "*";
private int length;
private int timeout;
public LoginActivitySmsView(Context context, final int type) {
super(context);
currentType = type;
setOrientation(VERTICAL);
confirmTextView = new TextView(context);
2020-07-26 10:03:38 +02:00
confirmTextView.setLinkTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteLinkText));
2017-03-31 01:58:05 +02:00
confirmTextView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText6));
2020-07-26 10:03:38 +02:00
confirmTextView.setHighlightColor(Theme.getColor(Theme.key_windowBackgroundWhiteLinkSelection));
2016-10-11 13:57:01 +02:00
confirmTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);
confirmTextView.setLineSpacing(AndroidUtilities.dp(2), 1.0f);
2019-01-23 18:03:33 +01:00
titleTextView = new TextView(context);
titleTextView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText));
titleTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18);
titleTextView.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf"));
titleTextView.setGravity(LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT);
titleTextView.setLineSpacing(AndroidUtilities.dp(2), 1.0f);
titleTextView.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL);
2016-10-11 13:57:01 +02:00
if (currentType == 3) {
2019-01-23 18:03:33 +01:00
confirmTextView.setGravity(Gravity.TOP | (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT));
2016-10-11 13:57:01 +02:00
FrameLayout frameLayout = new FrameLayout(context);
2019-01-23 18:03:33 +01:00
addView(frameLayout, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT));
2016-10-11 13:57:01 +02:00
ImageView imageView = new ImageView(context);
imageView.setImageResource(R.drawable.phone_activate);
if (LocaleController.isRTL) {
frameLayout.addView(imageView, LayoutHelper.createFrame(64, 76, Gravity.LEFT | Gravity.CENTER_VERTICAL, 2, 2, 0, 0));
frameLayout.addView(confirmTextView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT, 64 + 18, 0, 0, 0));
} else {
frameLayout.addView(confirmTextView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT, 0, 0, 64 + 18, 0));
frameLayout.addView(imageView, LayoutHelper.createFrame(64, 76, Gravity.RIGHT | Gravity.CENTER_VERTICAL, 0, 2, 0, 2));
}
} else {
2019-01-23 18:03:33 +01:00
confirmTextView.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL);
2016-10-11 13:57:01 +02:00
2019-01-23 18:03:33 +01:00
FrameLayout frameLayout = new FrameLayout(context);
addView(frameLayout, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.CENTER_HORIZONTAL));
2016-10-11 13:57:01 +02:00
2019-01-23 18:03:33 +01:00
if (currentType == 1) {
blackImageView = new ImageView(context);
blackImageView.setImageResource(R.drawable.sms_devices);
blackImageView.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText), PorterDuff.Mode.MULTIPLY));
frameLayout.addView(blackImageView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP, 0, 0, 0, 0));
2016-10-11 13:57:01 +02:00
2021-02-23 12:53:38 +01:00
blueImageView = new RLottieImageView(context);
2019-01-23 18:03:33 +01:00
blueImageView.setImageResource(R.drawable.sms_bubble);
blueImageView.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_chats_actionBackground), PorterDuff.Mode.MULTIPLY));
frameLayout.addView(blueImageView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP, 0, 0, 0, 0));
2016-10-11 13:57:01 +02:00
2019-01-23 18:03:33 +01:00
titleTextView.setText(LocaleController.getString("SentAppCodeTitle", R.string.SentAppCodeTitle));
} else {
2021-02-23 12:53:38 +01:00
blueImageView = new RLottieImageView(context);
hintDrawable = new RLottieDrawable(R.raw.sms_incoming_info, "" + R.raw.sms_incoming_info, AndroidUtilities.dp(48), AndroidUtilities.dp(48), true, null);
hintDrawable.setLayerColor("Bubble.**", Theme.getColor(Theme.key_chats_actionBackground));
hintDrawable.setLayerColor("Phone.**", Theme.getColor(Theme.key_chats_actionBackground));
blueImageView.setAnimation(hintDrawable);
frameLayout.addView(blueImageView, LayoutHelper.createFrame(48, 48, Gravity.LEFT | Gravity.TOP, 0, 0, 0, 0));
2019-01-23 18:03:33 +01:00
titleTextView.setText(LocaleController.getString("SentSmsCodeTitle", R.string.SentSmsCodeTitle));
2016-10-11 13:57:01 +02:00
}
2019-01-23 18:03:33 +01:00
addView(titleTextView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL | Gravity.TOP, 0, 18, 0, 0));
addView(confirmTextView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL | Gravity.TOP, 0, 17, 0, 0));
}
codeFieldContainer = new LinearLayout(context);
codeFieldContainer.setOrientation(HORIZONTAL);
addView(codeFieldContainer, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, 36, Gravity.CENTER_HORIZONTAL));
2016-10-11 13:57:01 +02:00
if (currentType == 3) {
2019-01-23 18:03:33 +01:00
codeFieldContainer.setVisibility(GONE);
2016-10-11 13:57:01 +02:00
}
2019-01-23 18:03:33 +01:00
timeText = new TextView(context) {
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(100), MeasureSpec.AT_MOST));
}
};
2017-03-31 01:58:05 +02:00
timeText.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText6));
2016-10-11 13:57:01 +02:00
timeText.setLineSpacing(AndroidUtilities.dp(2), 1.0f);
if (currentType == 3) {
2019-01-23 18:03:33 +01:00
timeText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);
addView(timeText, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT));
2016-10-11 13:57:01 +02:00
progressView = new ProgressView(context);
2019-01-23 18:03:33 +01:00
timeText.setGravity(LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT);
2016-10-11 13:57:01 +02:00
addView(progressView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 3, 0, 12, 0, 0));
2019-01-23 18:03:33 +01:00
} else {
timeText.setPadding(0, AndroidUtilities.dp(2), 0, AndroidUtilities.dp(10));
timeText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
timeText.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL);
addView(timeText, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.CENTER_HORIZONTAL));
2016-10-11 13:57:01 +02:00
}
2019-01-23 18:03:33 +01:00
problemText = new TextView(context) {
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(100), MeasureSpec.AT_MOST));
}
};
2017-03-31 01:58:05 +02:00
problemText.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlueText4));
2016-10-11 13:57:01 +02:00
problemText.setLineSpacing(AndroidUtilities.dp(2), 1.0f);
2019-01-23 18:03:33 +01:00
problemText.setPadding(0, AndroidUtilities.dp(2), 0, AndroidUtilities.dp(10));
problemText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
problemText.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.TOP);
if (currentType == 1) {
problemText.setText(LocaleController.getString("DidNotGetTheCodeSms", R.string.DidNotGetTheCodeSms));
} else {
problemText.setText(LocaleController.getString("DidNotGetTheCode", R.string.DidNotGetTheCode));
}
addView(problemText, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL | Gravity.TOP));
problemText.setOnClickListener(v -> {
if (nextPressed) {
return;
}
boolean email = nextType == 4 && currentType == 2 || nextType == 0;
if (!email) {
resendCode();
} else {
try {
PackageInfo pInfo = ApplicationLoader.applicationContext.getPackageManager().getPackageInfo(ApplicationLoader.applicationContext.getPackageName(), 0);
String version = String.format(Locale.US, "%s (%d)", pInfo.versionName, pInfo.versionCode);
2021-04-14 03:44:46 +02:00
Intent mailer = new Intent(Intent.ACTION_SENDTO);
mailer.setData(Uri.parse("mailto:"));
2019-01-23 18:03:33 +01:00
mailer.putExtra(Intent.EXTRA_EMAIL, new String[]{"sms@stel.com"});
mailer.putExtra(Intent.EXTRA_SUBJECT, "Android cancel account deletion issue " + version + " " + phone);
mailer.putExtra(Intent.EXTRA_TEXT, "Phone: " + phone + "\nApp version: " + version + "\nOS version: SDK " + Build.VERSION.SDK_INT + "\nDevice Name: " + Build.MANUFACTURER + Build.MODEL + "\nLocale: " + Locale.getDefault() + "\nError: " + lastError);
getContext().startActivity(Intent.createChooser(mailer, "Send email..."));
} catch (Exception e) {
AlertsCreator.showSimpleAlert(CancelAccountDeletionActivity.this, LocaleController.getString("NoMailInstalled", R.string.NoMailInstalled));
2016-10-11 13:57:01 +02:00
}
}
});
}
2019-01-23 18:03:33 +01:00
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
if (currentType != 3 && blueImageView != null) {
int innerHeight = blueImageView.getMeasuredHeight() + titleTextView.getMeasuredHeight() + confirmTextView.getMeasuredHeight() + AndroidUtilities.dp(18 + 17);
2020-07-26 10:03:38 +02:00
if (timeText.getVisibility() == VISIBLE) {
innerHeight += timeText.getMeasuredHeight();
}
2019-01-23 18:03:33 +01:00
int requiredHeight = AndroidUtilities.dp(80);
2020-07-26 10:03:38 +02:00
int maxHeight = AndroidUtilities.dp(340);
2019-01-23 18:03:33 +01:00
if (scrollHeight - innerHeight < requiredHeight) {
setMeasuredDimension(getMeasuredWidth(), innerHeight + requiredHeight);
} else {
2020-07-26 10:03:38 +02:00
setMeasuredDimension(getMeasuredWidth(), Math.min(scrollHeight, maxHeight));
2019-01-23 18:03:33 +01:00
}
}
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
if (currentType != 3 && blueImageView != null) {
int bottom = confirmTextView.getBottom();
int height = getMeasuredHeight() - bottom;
int h;
if (problemText.getVisibility() == VISIBLE) {
h = problemText.getMeasuredHeight();
t = bottom + height - h;
problemText.layout(problemText.getLeft(), t, problemText.getRight(), t + h);
} else if (timeText.getVisibility() == VISIBLE) {
h = timeText.getMeasuredHeight();
t = bottom + height - h;
timeText.layout(timeText.getLeft(), t, timeText.getRight(), t + h);
} else {
t = bottom + height;
}
height = t - bottom;
h = codeFieldContainer.getMeasuredHeight();
t = (height - h) / 2 + bottom;
codeFieldContainer.layout(codeFieldContainer.getLeft(), t, codeFieldContainer.getRight(), t + h);
}
}
2016-10-11 13:57:01 +02:00
private void resendCode() {
final Bundle params = new Bundle();
params.putString("phone", phone);
nextPressed = true;
needShowProgress();
2017-03-31 01:58:05 +02:00
final TLRPC.TL_auth_resendCode req = new TLRPC.TL_auth_resendCode();
2016-10-11 13:57:01 +02:00
req.phone_number = phone;
req.phone_code_hash = phoneHash;
2019-01-23 18:03:33 +01:00
ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
nextPressed = false;
if (error == null) {
fillNextCodeParams(params, (TLRPC.TL_auth_sentCode) response);
} else {
if (error.text != null) {
AlertDialog dialog = (AlertDialog) AlertsCreator.processError(currentAccount, error, CancelAccountDeletionActivity.this, req);
if (dialog != null && error.text.contains("PHONE_CODE_EXPIRED")) {
dialog.setPositiveButtonListener((dialog1, which) -> {
onBackPressed(true);
finishFragment();
});
2016-10-11 13:57:01 +02:00
}
2019-01-23 18:03:33 +01:00
}
2016-10-11 13:57:01 +02:00
}
2019-01-23 18:03:33 +01:00
needHideProgress();
}), ConnectionsManager.RequestFlagFailOnServerErrors);
2016-10-11 13:57:01 +02:00
}
@Override
public String getHeaderName() {
2019-01-23 18:03:33 +01:00
if (currentType == 1) {
return phone;
} else {
return LocaleController.getString("CancelAccountReset", R.string.CancelAccountReset);
}
}
@Override
public boolean needBackButton() {
return true;
2016-10-11 13:57:01 +02:00
}
@Override
2017-03-31 01:58:05 +02:00
public void setParams(Bundle params, boolean restore) {
2016-10-11 13:57:01 +02:00
if (params == null) {
return;
}
waitingForEvent = true;
if (currentType == 2) {
AndroidUtilities.setWaitingForSms(true);
2018-07-30 04:07:02 +02:00
NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.didReceiveSmsCode);
2016-10-11 13:57:01 +02:00
} else if (currentType == 3) {
AndroidUtilities.setWaitingForCall(true);
2018-07-30 04:07:02 +02:00
NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.didReceiveCall);
2016-10-11 13:57:01 +02:00
}
phone = params.getString("phone");
phoneHash = params.getString("phoneHash");
timeout = time = params.getInt("timeout");
nextType = params.getInt("nextType");
pattern = params.getString("pattern");
length = params.getInt("length");
2019-01-23 18:03:33 +01:00
if (length == 0) {
length = 5;
}
if (codeField == null || codeField.length != length) {
codeField = new EditTextBoldCursor[length];
for (int a = 0; a < length; a++) {
final int num = a;
codeField[a] = new EditTextBoldCursor(getContext());
codeField[a].setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText));
codeField[a].setCursorColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText));
codeField[a].setCursorSize(AndroidUtilities.dp(20));
codeField[a].setCursorWidth(1.5f);
Drawable pressedDrawable = getResources().getDrawable(R.drawable.search_dark_activated).mutate();
pressedDrawable.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_windowBackgroundWhiteInputFieldActivated), PorterDuff.Mode.MULTIPLY));
codeField[a].setBackgroundDrawable(pressedDrawable);
codeField[a].setImeOptions(EditorInfo.IME_ACTION_NEXT | EditorInfo.IME_FLAG_NO_EXTRACT_UI);
codeField[a].setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20);
codeField[a].setMaxLines(1);
codeField[a].setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf"));
codeField[a].setPadding(0, 0, 0, 0);
codeField[a].setGravity(Gravity.CENTER_HORIZONTAL | Gravity.TOP);
if (currentType == 3) {
codeField[a].setEnabled(false);
codeField[a].setInputType(InputType.TYPE_NULL);
codeField[a].setVisibility(GONE);
} else {
codeField[a].setInputType(InputType.TYPE_CLASS_PHONE);
}
codeFieldContainer.addView(codeField[a], LayoutHelper.createLinear(34, 36, Gravity.CENTER_HORIZONTAL, 0, 0, a != length - 1 ? 7 : 0, 0));
codeField[a].addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
2016-10-11 13:57:01 +02:00
2019-01-23 18:03:33 +01:00
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (ignoreOnTextChange) {
return;
}
int len = s.length();
if (len >= 1) {
if (len > 1) {
String text = s.toString();
ignoreOnTextChange = true;
for (int a = 0; a < Math.min(length - num, len); a++) {
if (a == 0) {
s.replace(0, len, text.substring(a, a + 1));
} else {
codeField[num + a].setText(text.substring(a, a + 1));
}
}
ignoreOnTextChange = false;
}
if (num != length - 1) {
codeField[num + 1].setSelection(codeField[num + 1].length());
codeField[num + 1].requestFocus();
}
if ((num == length - 1 || num == length - 2 && len >= 2) && getCode().length() == length) {
onNextPressed();
}
}
}
});
codeField[a].setOnKeyListener((v, keyCode, event) -> {
if (keyCode == KeyEvent.KEYCODE_DEL && codeField[num].length() == 0 && num > 0) {
codeField[num - 1].setSelection(codeField[num - 1].length());
codeField[num - 1].requestFocus();
codeField[num - 1].dispatchKeyEvent(event);
return true;
}
return false;
});
codeField[a].setOnEditorActionListener((textView, i, keyEvent) -> {
if (i == EditorInfo.IME_ACTION_NEXT) {
onNextPressed();
return true;
}
return false;
});
}
2016-10-11 13:57:01 +02:00
} else {
2019-01-23 18:03:33 +01:00
for (int a = 0; a < codeField.length; a++) {
codeField[a].setText("");
}
2016-10-11 13:57:01 +02:00
}
2019-01-23 18:03:33 +01:00
2016-10-11 13:57:01 +02:00
if (progressView != null) {
progressView.setVisibility(nextType != 0 ? VISIBLE : GONE);
}
if (phone == null) {
return;
}
String number = PhoneFormat.getInstance().format(phone);
2020-07-26 10:03:38 +02:00
SpannableStringBuilder spanned = new SpannableStringBuilder(AndroidUtilities.replaceTags(LocaleController.formatString("CancelAccountResetInfo2", R.string.CancelAccountResetInfo2, PhoneFormat.getInstance().format("+" + number))));
int index1 = TextUtils.indexOf(spanned, '*');
int index2 = TextUtils.lastIndexOf(spanned, '*');
if (index1 != -1 && index2 != -1 && index1 != index2) {
confirmTextView.setMovementMethod(new AndroidUtilities.LinkMovementMethodMy());
spanned.replace(index2, index2 + 1, "");
spanned.replace(index1, index1 + 1, "");
spanned.setSpan(new URLSpanNoUnderline("tg://settings/change_number"), index1, index2 - 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
confirmTextView.setText(spanned);
2016-10-11 13:57:01 +02:00
if (currentType != 3) {
2019-01-23 18:03:33 +01:00
AndroidUtilities.showKeyboard(codeField[0]);
codeField[0].requestFocus();
2016-10-11 13:57:01 +02:00
} else {
2019-01-23 18:03:33 +01:00
AndroidUtilities.hideKeyboard(codeField[0]);
2016-10-11 13:57:01 +02:00
}
destroyTimer();
destroyCodeTimer();
lastCurrentTime = System.currentTimeMillis();
if (currentType == 1) {
problemText.setVisibility(VISIBLE);
timeText.setVisibility(GONE);
} else if (currentType == 3 && (nextType == 4 || nextType == 2)) {
problemText.setVisibility(GONE);
timeText.setVisibility(VISIBLE);
if (nextType == 4) {
timeText.setText(LocaleController.formatString("CallText", R.string.CallText, 1, 0));
} else if (nextType == 2) {
timeText.setText(LocaleController.formatString("SmsText", R.string.SmsText, 1, 0));
}
createTimer();
} else if (currentType == 2 && (nextType == 4 || nextType == 3)) {
timeText.setText(LocaleController.formatString("CallText", R.string.CallText, 2, 0));
problemText.setVisibility(time < 1000 ? VISIBLE : GONE);
2019-01-23 18:03:33 +01:00
timeText.setVisibility(time < 1000 ? GONE : VISIBLE);
createTimer();
} else if (currentType == 4 && nextType == 2) {
timeText.setText(LocaleController.formatString("SmsText", R.string.SmsText, 2, 0));
problemText.setVisibility(time < 1000 ? VISIBLE : GONE);
timeText.setVisibility(time < 1000 ? GONE : VISIBLE);
2016-10-11 13:57:01 +02:00
createTimer();
} else {
timeText.setVisibility(GONE);
problemText.setVisibility(GONE);
createCodeTimer();
}
}
private void createCodeTimer() {
if (codeTimer != null) {
return;
}
codeTime = 15000;
codeTimer = new Timer();
lastCodeTime = System.currentTimeMillis();
codeTimer.schedule(new TimerTask() {
@Override
public void run() {
2019-01-23 18:03:33 +01:00
AndroidUtilities.runOnUIThread(() -> {
double currentTime = System.currentTimeMillis();
double diff = currentTime - lastCodeTime;
lastCodeTime = currentTime;
codeTime -= diff;
if (codeTime <= 1000) {
problemText.setVisibility(VISIBLE);
timeText.setVisibility(GONE);
destroyCodeTimer();
2016-10-11 13:57:01 +02:00
}
});
}
}, 0, 1000);
}
private void destroyCodeTimer() {
try {
synchronized (timerSync) {
if (codeTimer != null) {
codeTimer.cancel();
codeTimer = null;
}
}
} catch (Exception e) {
2017-03-31 01:58:05 +02:00
FileLog.e(e);
2016-10-11 13:57:01 +02:00
}
}
private void createTimer() {
if (timeTimer != null) {
return;
}
timeTimer = new Timer();
timeTimer.schedule(new TimerTask() {
@Override
public void run() {
if (timeTimer == null) {
return;
}
2020-07-26 10:03:38 +02:00
AndroidUtilities.runOnUIThread(() -> {
final double currentTime = System.currentTimeMillis();
double diff = currentTime - lastCurrentTime;
time -= diff;
lastCurrentTime = currentTime;
if (time >= 1000) {
int minutes = time / 1000 / 60;
int seconds = time / 1000 - minutes * 60;
if (nextType == 4 || nextType == 3) {
timeText.setText(LocaleController.formatString("CallText", R.string.CallText, minutes, seconds));
} else if (nextType == 2) {
timeText.setText(LocaleController.formatString("SmsText", R.string.SmsText, minutes, seconds));
}
if (progressView != null) {
progressView.setProgress(1.0f - (float) time / (float) timeout);
}
} else {
if (progressView != null) {
progressView.setProgress(1.0f);
}
destroyTimer();
if (currentType == 3) {
AndroidUtilities.setWaitingForCall(false);
NotificationCenter.getGlobalInstance().removeObserver(LoginActivitySmsView.this, NotificationCenter.didReceiveCall);
waitingForEvent = false;
destroyCodeTimer();
resendCode();
} else if (currentType == 2 || currentType == 4) {
if (nextType == 4 || nextType == 2) {
if (nextType == 4) {
timeText.setText(LocaleController.getString("Calling", R.string.Calling));
} else {
timeText.setText(LocaleController.getString("SendingSms", R.string.SendingSms));
}
createCodeTimer();
TLRPC.TL_auth_resendCode req = new TLRPC.TL_auth_resendCode();
req.phone_number = phone;
req.phone_code_hash = phoneHash;
ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response, error) -> {
if (error != null && error.text != null) {
AndroidUtilities.runOnUIThread(() -> lastError = error.text);
}
}, ConnectionsManager.RequestFlagFailOnServerErrors);
} else if (nextType == 3) {
AndroidUtilities.setWaitingForSms(false);
NotificationCenter.getGlobalInstance().removeObserver(LoginActivitySmsView.this, NotificationCenter.didReceiveSmsCode);
2016-10-11 13:57:01 +02:00
waitingForEvent = false;
destroyCodeTimer();
resendCode();
}
}
}
});
}
}, 0, 1000);
}
private void destroyTimer() {
try {
synchronized (timerSync) {
if (timeTimer != null) {
timeTimer.cancel();
timeTimer = null;
}
}
} catch (Exception e) {
2017-03-31 01:58:05 +02:00
FileLog.e(e);
2016-10-11 13:57:01 +02:00
}
}
2019-01-23 18:03:33 +01:00
private String getCode() {
if (codeField == null) {
return "";
}
StringBuilder codeBuilder = new StringBuilder();
for (int a = 0; a < codeField.length; a++) {
codeBuilder.append(PhoneFormat.stripExceptNumbers(codeField[a].getText().toString()));
}
return codeBuilder.toString();
}
2016-10-11 13:57:01 +02:00
@Override
public void onNextPressed() {
if (nextPressed) {
return;
}
2019-01-23 18:03:33 +01:00
String code = getCode();
if (TextUtils.isEmpty(code)) {
AndroidUtilities.shakeView(codeFieldContainer, 2, 0);
return;
}
2016-10-11 13:57:01 +02:00
nextPressed = true;
if (currentType == 2) {
AndroidUtilities.setWaitingForSms(false);
2018-07-30 04:07:02 +02:00
NotificationCenter.getGlobalInstance().removeObserver(this, NotificationCenter.didReceiveSmsCode);
2016-10-11 13:57:01 +02:00
} else if (currentType == 3) {
AndroidUtilities.setWaitingForCall(false);
2018-07-30 04:07:02 +02:00
NotificationCenter.getGlobalInstance().removeObserver(this, NotificationCenter.didReceiveCall);
2016-10-11 13:57:01 +02:00
}
waitingForEvent = false;
final TLRPC.TL_account_confirmPhone req = new TLRPC.TL_account_confirmPhone();
2019-01-23 18:03:33 +01:00
req.phone_code = code;
2016-10-11 13:57:01 +02:00
req.phone_code_hash = phoneHash;
destroyTimer();
needShowProgress();
2019-01-23 18:03:33 +01:00
ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
needHideProgress();
nextPressed = false;
if (error == null) {
errorDialog = AlertsCreator.showSimpleAlert(CancelAccountDeletionActivity.this, LocaleController.formatString("CancelLinkSuccess", R.string.CancelLinkSuccess, PhoneFormat.getInstance().format("+" + phone)));
} else {
lastError = error.text;
if (currentType == 3 && (nextType == 4 || nextType == 2) || currentType == 2 && (nextType == 4 || nextType == 3) || currentType == 4 && nextType == 2) {
createTimer();
}
if (currentType == 2) {
AndroidUtilities.setWaitingForSms(true);
NotificationCenter.getGlobalInstance().addObserver(LoginActivitySmsView.this, NotificationCenter.didReceiveSmsCode);
} else if (currentType == 3) {
AndroidUtilities.setWaitingForCall(true);
NotificationCenter.getGlobalInstance().addObserver(LoginActivitySmsView.this, NotificationCenter.didReceiveCall);
}
waitingForEvent = true;
if (currentType != 3) {
AlertsCreator.processError(currentAccount, error, CancelAccountDeletionActivity.this, req);
}
if (error.text.contains("PHONE_CODE_EMPTY") || error.text.contains("PHONE_CODE_INVALID")) {
for (int a = 0; a < codeField.length; a++) {
codeField[a].setText("");
2016-10-11 13:57:01 +02:00
}
2019-01-23 18:03:33 +01:00
codeField[0].requestFocus();
} else if (error.text.contains("PHONE_CODE_EXPIRED")) {
onBackPressed(true);
setPage(0, true, null, true);
}
2016-10-11 13:57:01 +02:00
}
2019-01-23 18:03:33 +01:00
}), ConnectionsManager.RequestFlagFailOnServerErrors);
2016-10-11 13:57:01 +02:00
}
@Override
public void onDestroyActivity() {
super.onDestroyActivity();
if (currentType == 2) {
AndroidUtilities.setWaitingForSms(false);
2018-07-30 04:07:02 +02:00
NotificationCenter.getGlobalInstance().removeObserver(this, NotificationCenter.didReceiveSmsCode);
2016-10-11 13:57:01 +02:00
} else if (currentType == 3) {
AndroidUtilities.setWaitingForCall(false);
2018-07-30 04:07:02 +02:00
NotificationCenter.getGlobalInstance().removeObserver(this, NotificationCenter.didReceiveCall);
2016-10-11 13:57:01 +02:00
}
waitingForEvent = false;
destroyTimer();
destroyCodeTimer();
}
@Override
public void onShow() {
super.onShow();
2019-01-23 18:03:33 +01:00
if (currentType == 3) {
return;
2016-10-11 13:57:01 +02:00
}
2021-02-23 12:53:38 +01:00
if (hintDrawable != null) {
hintDrawable.setCurrentFrame(0);
}
2019-01-23 18:03:33 +01:00
AndroidUtilities.runOnUIThread(() -> {
if (codeField != null) {
for (int a = codeField.length - 1; a >= 0; a--) {
if (a == 0 || codeField[a].length() != 0) {
codeField[a].requestFocus();
codeField[a].setSelection(codeField[a].length());
AndroidUtilities.showKeyboard(codeField[a]);
break;
}
}
}
2021-02-23 12:53:38 +01:00
if (hintDrawable != null) {
hintDrawable.start();
}
2019-01-23 18:03:33 +01:00
}, 100);
2016-10-11 13:57:01 +02:00
}
@Override
2018-07-30 04:07:02 +02:00
public void didReceivedNotification(int id, int account, Object... args) {
2016-10-11 13:57:01 +02:00
if (!waitingForEvent || codeField == null) {
return;
}
if (id == NotificationCenter.didReceiveSmsCode) {
2019-01-23 18:03:33 +01:00
codeField[0].setText("" + args[0]);
2016-10-11 13:57:01 +02:00
onNextPressed();
} else if (id == NotificationCenter.didReceiveCall) {
String num = "" + args[0];
2017-03-31 01:58:05 +02:00
if (!AndroidUtilities.checkPhonePattern(pattern, num)) {
return;
2016-10-11 13:57:01 +02:00
}
ignoreOnTextChange = true;
2019-01-23 18:03:33 +01:00
codeField[0].setText(num);
2016-10-11 13:57:01 +02:00
ignoreOnTextChange = false;
onNextPressed();
}
}
}
2017-03-31 01:58:05 +02:00
@Override
2020-04-24 11:21:58 +02:00
public ArrayList<ThemeDescription> getThemeDescriptions() {
2017-03-31 01:58:05 +02:00
PhoneView phoneView = (PhoneView) views[0];
LoginActivitySmsView smsView1 = (LoginActivitySmsView) views[1];
LoginActivitySmsView smsView2 = (LoginActivitySmsView) views[2];
LoginActivitySmsView smsView3 = (LoginActivitySmsView) views[3];
LoginActivitySmsView smsView4 = (LoginActivitySmsView) views[4];
2019-01-23 18:03:33 +01:00
ArrayList<ThemeDescription> arrayList = new ArrayList<>();
2021-02-23 12:53:38 +01:00
ThemeDescription.ThemeDescriptionDelegate descriptionDelegate = () -> {
for (int i = 0; i < views.length; i++) {
if (views[i] instanceof LoginActivity.LoginActivitySmsView) {
LoginActivity.LoginActivitySmsView smsView = (LoginActivity.LoginActivitySmsView) views[i];
if (smsView.hintDrawable != null) {
smsView.hintDrawable.setLayerColor("Bubble.**", Theme.getColor(Theme.key_chats_actionBackground));
smsView.hintDrawable.setLayerColor("Phone.**", Theme.getColor(Theme.key_chats_actionBackground));
}
}
}
};
2019-01-23 18:03:33 +01:00
arrayList.add(new ThemeDescription(fragmentView, ThemeDescription.FLAG_BACKGROUND, null, null, null, null, Theme.key_windowBackgroundWhite));
arrayList.add(new ThemeDescription(actionBar, ThemeDescription.FLAG_BACKGROUND, null, null, null, null, Theme.key_actionBarDefault));
arrayList.add(new ThemeDescription(fragmentView, ThemeDescription.FLAG_LISTGLOWCOLOR, null, null, null, null, Theme.key_actionBarDefault));
arrayList.add(new ThemeDescription(actionBar, ThemeDescription.FLAG_AB_ITEMSCOLOR, null, null, null, null, Theme.key_actionBarDefaultIcon));
arrayList.add(new ThemeDescription(actionBar, ThemeDescription.FLAG_AB_TITLECOLOR, null, null, null, null, Theme.key_actionBarDefaultTitle));
arrayList.add(new ThemeDescription(actionBar, ThemeDescription.FLAG_AB_SELECTORCOLOR, null, null, null, null, Theme.key_actionBarDefaultSelector));
arrayList.add(new ThemeDescription(phoneView.progressBar, ThemeDescription.FLAG_PROGRESSBAR, null, null, null, null, Theme.key_progressCircle));
arrayList.add(new ThemeDescription(smsView1.confirmTextView, ThemeDescription.FLAG_TEXTCOLOR, null, null, null, null, Theme.key_windowBackgroundWhiteGrayText6));
2020-07-26 10:03:38 +02:00
arrayList.add(new ThemeDescription(smsView1.confirmTextView, ThemeDescription.FLAG_LINKCOLOR, null, null, null, null, Theme.key_windowBackgroundWhiteLinkText));
2019-01-23 18:03:33 +01:00
arrayList.add(new ThemeDescription(smsView1.titleTextView, ThemeDescription.FLAG_TEXTCOLOR, null, null, null, null, Theme.key_windowBackgroundWhiteBlackText));
if (smsView1.codeField != null) {
for (int a = 0; a < smsView1.codeField.length; a++) {
arrayList.add(new ThemeDescription(smsView1.codeField[a], ThemeDescription.FLAG_TEXTCOLOR, null, null, null, null, Theme.key_windowBackgroundWhiteBlackText));
arrayList.add(new ThemeDescription(smsView1.codeField[a], ThemeDescription.FLAG_BACKGROUNDFILTER, null, null, null, null, Theme.key_windowBackgroundWhiteInputFieldActivated));
}
}
arrayList.add(new ThemeDescription(smsView1.timeText, ThemeDescription.FLAG_TEXTCOLOR, null, null, null, null, Theme.key_windowBackgroundWhiteGrayText6));
arrayList.add(new ThemeDescription(smsView1.problemText, ThemeDescription.FLAG_TEXTCOLOR, null, null, null, null, Theme.key_windowBackgroundWhiteBlueText4));
arrayList.add(new ThemeDescription(smsView1.progressView, 0, new Class[]{ProgressView.class}, new String[]{"paint"}, null, null, null, Theme.key_login_progressInner));
arrayList.add(new ThemeDescription(smsView1.progressView, 0, new Class[]{ProgressView.class}, new String[]{"paint"}, null, null, null, Theme.key_login_progressOuter));
arrayList.add(new ThemeDescription(smsView1.blackImageView, ThemeDescription.FLAG_IMAGECOLOR, null, null, null, null, Theme.key_windowBackgroundWhiteBlackText));
arrayList.add(new ThemeDescription(smsView1.blueImageView, ThemeDescription.FLAG_IMAGECOLOR, null, null, null, null, Theme.key_chats_actionBackground));
arrayList.add(new ThemeDescription(smsView2.confirmTextView, ThemeDescription.FLAG_TEXTCOLOR, null, null, null, null, Theme.key_windowBackgroundWhiteGrayText6));
arrayList.add(new ThemeDescription(smsView2.titleTextView, ThemeDescription.FLAG_TEXTCOLOR, null, null, null, null, Theme.key_windowBackgroundWhiteBlackText));
if (smsView2.codeField != null) {
for (int a = 0; a < smsView2.codeField.length; a++) {
arrayList.add(new ThemeDescription(smsView2.codeField[a], ThemeDescription.FLAG_TEXTCOLOR, null, null, null, null, Theme.key_windowBackgroundWhiteBlackText));
arrayList.add(new ThemeDescription(smsView2.codeField[a], ThemeDescription.FLAG_BACKGROUNDFILTER, null, null, null, null, Theme.key_windowBackgroundWhiteInputFieldActivated));
}
}
arrayList.add(new ThemeDescription(smsView2.timeText, ThemeDescription.FLAG_TEXTCOLOR, null, null, null, null, Theme.key_windowBackgroundWhiteGrayText6));
arrayList.add(new ThemeDescription(smsView2.problemText, ThemeDescription.FLAG_TEXTCOLOR, null, null, null, null, Theme.key_windowBackgroundWhiteBlueText4));
arrayList.add(new ThemeDescription(smsView2.progressView, 0, new Class[]{ProgressView.class}, new String[]{"paint"}, null, null, null, Theme.key_login_progressInner));
arrayList.add(new ThemeDescription(smsView2.progressView, 0, new Class[]{ProgressView.class}, new String[]{"paint"}, null, null, null, Theme.key_login_progressOuter));
arrayList.add(new ThemeDescription(smsView2.blackImageView, ThemeDescription.FLAG_IMAGECOLOR, null, null, null, null, Theme.key_windowBackgroundWhiteBlackText));
arrayList.add(new ThemeDescription(smsView2.blueImageView, ThemeDescription.FLAG_IMAGECOLOR, null, null, null, null, Theme.key_chats_actionBackground));
arrayList.add(new ThemeDescription(smsView3.confirmTextView, ThemeDescription.FLAG_TEXTCOLOR, null, null, null, null, Theme.key_windowBackgroundWhiteGrayText6));
arrayList.add(new ThemeDescription(smsView3.titleTextView, ThemeDescription.FLAG_TEXTCOLOR, null, null, null, null, Theme.key_windowBackgroundWhiteBlackText));
if (smsView3.codeField != null) {
for (int a = 0; a < smsView3.codeField.length; a++) {
arrayList.add(new ThemeDescription(smsView3.codeField[a], ThemeDescription.FLAG_TEXTCOLOR, null, null, null, null, Theme.key_windowBackgroundWhiteBlackText));
arrayList.add(new ThemeDescription(smsView3.codeField[a], ThemeDescription.FLAG_BACKGROUNDFILTER, null, null, null, null, Theme.key_windowBackgroundWhiteInputFieldActivated));
}
}
arrayList.add(new ThemeDescription(smsView3.timeText, ThemeDescription.FLAG_TEXTCOLOR, null, null, null, null, Theme.key_windowBackgroundWhiteGrayText6));
arrayList.add(new ThemeDescription(smsView3.problemText, ThemeDescription.FLAG_TEXTCOLOR, null, null, null, null, Theme.key_windowBackgroundWhiteBlueText4));
arrayList.add(new ThemeDescription(smsView3.progressView, 0, new Class[]{ProgressView.class}, new String[]{"paint"}, null, null, null, Theme.key_login_progressInner));
arrayList.add(new ThemeDescription(smsView3.progressView, 0, new Class[]{ProgressView.class}, new String[]{"paint"}, null, null, null, Theme.key_login_progressOuter));
arrayList.add(new ThemeDescription(smsView3.blackImageView, ThemeDescription.FLAG_IMAGECOLOR, null, null, null, null, Theme.key_windowBackgroundWhiteBlackText));
arrayList.add(new ThemeDescription(smsView3.blueImageView, ThemeDescription.FLAG_IMAGECOLOR, null, null, null, null, Theme.key_chats_actionBackground));
arrayList.add(new ThemeDescription(smsView4.confirmTextView, ThemeDescription.FLAG_TEXTCOLOR, null, null, null, null, Theme.key_windowBackgroundWhiteGrayText6));
arrayList.add(new ThemeDescription(smsView4.titleTextView, ThemeDescription.FLAG_TEXTCOLOR, null, null, null, null, Theme.key_windowBackgroundWhiteBlackText));
if (smsView4.codeField != null) {
for (int a = 0; a < smsView4.codeField.length; a++) {
arrayList.add(new ThemeDescription(smsView4.codeField[a], ThemeDescription.FLAG_TEXTCOLOR, null, null, null, null, Theme.key_windowBackgroundWhiteBlackText));
arrayList.add(new ThemeDescription(smsView4.codeField[a], ThemeDescription.FLAG_BACKGROUNDFILTER, null, null, null, null, Theme.key_windowBackgroundWhiteInputFieldActivated));
}
}
arrayList.add(new ThemeDescription(smsView4.timeText, ThemeDescription.FLAG_TEXTCOLOR, null, null, null, null, Theme.key_windowBackgroundWhiteGrayText6));
arrayList.add(new ThemeDescription(smsView4.problemText, ThemeDescription.FLAG_TEXTCOLOR, null, null, null, null, Theme.key_windowBackgroundWhiteBlueText4));
arrayList.add(new ThemeDescription(smsView4.progressView, 0, new Class[]{ProgressView.class}, new String[]{"paint"}, null, null, null, Theme.key_login_progressInner));
arrayList.add(new ThemeDescription(smsView4.progressView, 0, new Class[]{ProgressView.class}, new String[]{"paint"}, null, null, null, Theme.key_login_progressOuter));
arrayList.add(new ThemeDescription(smsView4.blackImageView, ThemeDescription.FLAG_IMAGECOLOR, null, null, null, null, Theme.key_windowBackgroundWhiteBlackText));
arrayList.add(new ThemeDescription(smsView4.blueImageView, ThemeDescription.FLAG_IMAGECOLOR, null, null, null, null, Theme.key_chats_actionBackground));
2021-02-23 12:53:38 +01:00
arrayList.add(new ThemeDescription(smsView4.blueImageView, 0, null, null, null, descriptionDelegate, Theme.key_chats_actionBackground));
2019-01-23 18:03:33 +01:00
2020-04-24 11:21:58 +02:00
return arrayList;
2017-03-31 01:58:05 +02:00
}
2016-10-11 13:57:01 +02:00
}