mirror of https://github.com/NekoX-Dev/NekoX.git
191 lines
8.4 KiB
Java
191 lines
8.4 KiB
Java
package org.telegram.ui.Components;
|
|
|
|
import android.animation.Animator;
|
|
import android.animation.AnimatorListenerAdapter;
|
|
import android.animation.AnimatorSet;
|
|
import android.animation.ObjectAnimator;
|
|
import android.app.Activity;
|
|
import android.graphics.Canvas;
|
|
import android.os.Bundle;
|
|
import android.view.View;
|
|
import android.widget.FrameLayout;
|
|
|
|
import org.telegram.messenger.AndroidUtilities;
|
|
import org.telegram.messenger.FileLoader;
|
|
import org.telegram.messenger.LocaleController;
|
|
import org.telegram.messenger.NotificationCenter;
|
|
import org.telegram.messenger.R;
|
|
import org.telegram.messenger.browser.Browser;
|
|
import org.telegram.tgnet.TLRPC;
|
|
import org.telegram.ui.ActionBar.AlertDialog;
|
|
import org.telegram.ui.ActionBar.Theme;
|
|
|
|
public class UpdateAppAlertDialog extends AlertDialog implements NotificationCenter.NotificationCenterDelegate {
|
|
|
|
private TLRPC.TL_help_appUpdate appUpdate;
|
|
private int accountNum;
|
|
private String fileName;
|
|
private RadialProgress radialProgress;
|
|
private FrameLayout radialProgressView;
|
|
private AnimatorSet progressAnimation;
|
|
private Activity parentActivity;
|
|
|
|
public UpdateAppAlertDialog(final Activity activity, TLRPC.TL_help_appUpdate update, int account) {
|
|
super(activity, 0);
|
|
appUpdate = update;
|
|
accountNum = account;
|
|
if (update.document instanceof TLRPC.TL_document) {
|
|
fileName = FileLoader.getAttachFileName(update.document);
|
|
}
|
|
parentActivity = activity;
|
|
|
|
setTopImage(R.drawable.update, Theme.getColor(Theme.key_dialogTopBackground));
|
|
setTopHeight(175);
|
|
setMessage(appUpdate.text);
|
|
if (appUpdate.document instanceof TLRPC.TL_document) {
|
|
setSecondTitle(AndroidUtilities.formatFileSize(appUpdate.document.size));
|
|
}
|
|
setDismissDialogByButtons(false);
|
|
setTitle(LocaleController.getString("UpdateTelegram", R.string.UpdateTelegram));
|
|
setPositiveButton(LocaleController.getString("UpdateNow", R.string.UpdateNow), (dialog, which) -> {
|
|
if (!BlockingUpdateView.checkApkInstallPermissions(getContext())) {
|
|
return;
|
|
}
|
|
if (appUpdate.document instanceof TLRPC.TL_document) {
|
|
if (!BlockingUpdateView.openApkInstall(parentActivity, appUpdate.document)) {
|
|
FileLoader.getInstance(accountNum).loadFile(appUpdate.document, "update", 1, 1);
|
|
showProgress(true);
|
|
}
|
|
} else if (appUpdate.url != null) {
|
|
Browser.openUrl(getContext(), appUpdate.url);
|
|
dialog.dismiss();
|
|
}
|
|
});
|
|
setNeutralButton(LocaleController.getString("Later", R.string.Later), (dialog, which) -> {
|
|
if (appUpdate.document instanceof TLRPC.TL_document) {
|
|
FileLoader.getInstance(accountNum).cancelLoadFile(appUpdate.document);
|
|
}
|
|
dialog.dismiss();
|
|
});
|
|
|
|
radialProgressView = new FrameLayout(parentActivity) {
|
|
@Override
|
|
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
|
|
super.onLayout(changed, left, top, right, bottom);
|
|
int width = right - left;
|
|
int height = bottom - top;
|
|
int w = AndroidUtilities.dp(24);
|
|
int l = (width - w) / 2;
|
|
int t = (height - w) / 2 + AndroidUtilities.dp(2);
|
|
radialProgress.setProgressRect(l, t, l + w, t + w);
|
|
}
|
|
|
|
@Override
|
|
protected void onDraw(Canvas canvas) {
|
|
radialProgress.draw(canvas);
|
|
}
|
|
};
|
|
radialProgressView.setWillNotDraw(false);
|
|
radialProgressView.setAlpha(0.0f);
|
|
radialProgressView.setScaleX(0.1f);
|
|
radialProgressView.setScaleY(0.1f);
|
|
radialProgressView.setVisibility(View.INVISIBLE);
|
|
radialProgress = new RadialProgress(radialProgressView);
|
|
radialProgress.setStrokeWidth(AndroidUtilities.dp(2));
|
|
radialProgress.setBackground(null, true, false);
|
|
radialProgress.setProgressColor(Theme.getColor(Theme.key_dialogButton));
|
|
}
|
|
|
|
@Override
|
|
public void didReceivedNotification(int id, int account, Object... args) {
|
|
if (id == NotificationCenter.fileDidLoad) {
|
|
String location = (String) args[0];
|
|
if (fileName != null && fileName.equals(location)) {
|
|
showProgress(false);
|
|
BlockingUpdateView.openApkInstall(parentActivity, appUpdate.document);
|
|
}
|
|
} else if (id == NotificationCenter.fileDidFailToLoad) {
|
|
String location = (String) args[0];
|
|
if (fileName != null && fileName.equals(location)) {
|
|
showProgress(false);
|
|
}
|
|
} else if (id == NotificationCenter.FileLoadProgressChanged) {
|
|
String location = (String) args[0];
|
|
if (fileName != null && fileName.equals(location)) {
|
|
Long loadedSize = (Long) args[1];
|
|
Long totalSize = (Long) args[2];
|
|
float loadProgress = Math.min(1f, loadedSize / (float) totalSize);
|
|
radialProgress.setProgress(loadProgress, true);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
super.onCreate(savedInstanceState);
|
|
NotificationCenter.getInstance(accountNum).addObserver(this, NotificationCenter.fileDidLoad);
|
|
NotificationCenter.getInstance(accountNum).addObserver(this, NotificationCenter.fileDidFailToLoad);
|
|
NotificationCenter.getInstance(accountNum).addObserver(this, NotificationCenter.FileLoadProgressChanged);
|
|
buttonsLayout.addView(radialProgressView, LayoutHelper.createFrame(36, 36));
|
|
}
|
|
|
|
@Override
|
|
public void dismiss() {
|
|
super.dismiss();
|
|
NotificationCenter.getInstance(accountNum).removeObserver(this, NotificationCenter.fileDidLoad);
|
|
NotificationCenter.getInstance(accountNum).removeObserver(this, NotificationCenter.fileDidFailToLoad);
|
|
NotificationCenter.getInstance(accountNum).removeObserver(this, NotificationCenter.FileLoadProgressChanged);
|
|
}
|
|
|
|
private void showProgress(final boolean show) {
|
|
if (progressAnimation != null) {
|
|
progressAnimation.cancel();
|
|
}
|
|
progressAnimation = new AnimatorSet();
|
|
final View textButton = buttonsLayout.findViewWithTag(BUTTON_POSITIVE);
|
|
if (show) {
|
|
radialProgressView.setVisibility(View.VISIBLE);
|
|
textButton.setEnabled(false);
|
|
progressAnimation.playTogether(
|
|
ObjectAnimator.ofFloat(textButton, "scaleX", 0.1f),
|
|
ObjectAnimator.ofFloat(textButton, "scaleY", 0.1f),
|
|
ObjectAnimator.ofFloat(textButton, "alpha", 0.0f),
|
|
ObjectAnimator.ofFloat(radialProgressView, "scaleX", 1.0f),
|
|
ObjectAnimator.ofFloat(radialProgressView, "scaleY", 1.0f),
|
|
ObjectAnimator.ofFloat(radialProgressView, "alpha", 1.0f));
|
|
} else {
|
|
textButton.setVisibility(View.VISIBLE);
|
|
textButton.setEnabled(true);
|
|
progressAnimation.playTogether(
|
|
ObjectAnimator.ofFloat(radialProgressView, "scaleX", 0.1f),
|
|
ObjectAnimator.ofFloat(radialProgressView, "scaleY", 0.1f),
|
|
ObjectAnimator.ofFloat(radialProgressView, "alpha", 0.0f),
|
|
ObjectAnimator.ofFloat(textButton, "scaleX", 1.0f),
|
|
ObjectAnimator.ofFloat(textButton, "scaleY", 1.0f),
|
|
ObjectAnimator.ofFloat(textButton, "alpha", 1.0f));
|
|
|
|
}
|
|
progressAnimation.addListener(new AnimatorListenerAdapter() {
|
|
@Override
|
|
public void onAnimationEnd(Animator animation) {
|
|
if (progressAnimation != null && progressAnimation.equals(animation)) {
|
|
if (!show) {
|
|
radialProgressView.setVisibility(View.INVISIBLE);
|
|
} else {
|
|
textButton.setVisibility(View.INVISIBLE);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onAnimationCancel(Animator animation) {
|
|
if (progressAnimation != null && progressAnimation.equals(animation)) {
|
|
progressAnimation = null;
|
|
}
|
|
}
|
|
});
|
|
progressAnimation.setDuration(150);
|
|
progressAnimation.start();
|
|
}
|
|
}
|