正在查看: Plus 12 v10.13.1.1 应用的 BotWebViewContainer.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
正在查看: Plus 12 v10.13.1.1 应用的 BotWebViewContainer.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
package org.telegram.ui.bots;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Canvas;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Build;
import android.os.Message;
import android.text.TextUtils;
import android.util.Property;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.webkit.GeolocationPermissions;
import android.webkit.JavascriptInterface;
import android.webkit.PermissionRequest;
import android.webkit.RenderProcessGoneDetail;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.FrameLayout;
import android.widget.TextView;
import androidx.core.graphics.ColorUtils;
import androidx.core.util.Consumer;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicBoolean;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONTokener;
import org.telegram.messenger.AndroidUtilities;
import org.telegram.messenger.ApplicationLoader;
import org.telegram.messenger.FileLog;
import org.telegram.messenger.ImageLocation;
import org.telegram.messenger.ImageReceiver;
import org.telegram.messenger.LocaleController;
import org.telegram.messenger.MediaDataController;
import org.telegram.messenger.MessageObject;
import org.telegram.messenger.MessagesController;
import org.telegram.messenger.MrzRecognizer;
import org.telegram.messenger.NotificationCenter;
import org.telegram.messenger.R;
import org.telegram.messenger.SendMessagesHelper;
import org.telegram.messenger.SvgHelper;
import org.telegram.messenger.UserConfig;
import org.telegram.messenger.UserObject;
import org.telegram.messenger.Utilities;
import org.telegram.messenger.browser.Browser;
import org.telegram.tgnet.ConnectionsManager;
import org.telegram.tgnet.RequestDelegate;
import org.telegram.tgnet.TLObject;
import org.telegram.tgnet.TLRPC;
import org.telegram.ui.ActionBar.ActionBar;
import org.telegram.ui.ActionBar.ActionBarMenuSubItem;
import org.telegram.ui.ActionBar.AlertDialog;
import org.telegram.ui.ActionBar.BottomSheet;
import org.telegram.ui.ActionBar.Theme;
import org.telegram.ui.CameraScanActivity;
import org.telegram.ui.Components.AlertsCreator;
import org.telegram.ui.Components.BackupImageView;
import org.telegram.ui.Components.Bulletin;
import org.telegram.ui.Components.BulletinFactory;
import org.telegram.ui.Components.LayoutHelper;
import org.telegram.ui.Components.voip.CellFlickerDrawable;
import org.telegram.ui.LaunchActivity;
import org.telegram.ui.bots.BotWebViewContainer;
import org.telegram.ui.bots.ChatAttachAlertBotWebViewLayout;
public abstract class BotWebViewContainer extends FrameLayout implements NotificationCenter.NotificationCenterDelegate {
public static final List<String> WHITELISTED_SCHEMES = Arrays.asList("http", "https");
public BotBiometry biometry;
public long blockedDialogsUntil;
public TLRPC.User botUser;
public String buttonData;
public BottomSheet cameraBottomSheet;
public int currentAccount;
public AlertDialog currentDialog;
public String currentPaymentSlug;
public Delegate delegate;
public int dialogSequentialOpenTimes;
public final CellFlickerDrawable flickerDrawable;
public BackupImageView flickerView;
public boolean hasQRPending;
public boolean hasUserPermissions;
public boolean isBackButtonVisible;
public boolean isFlickeringCenter;
public boolean isPageLoaded;
public boolean isRequestingPageOpen;
public boolean isSettingsButtonVisible;
public boolean isViewPortByMeasureSuppressed;
public int lastButtonColor;
public String lastButtonText;
public int lastButtonTextColor;
public long lastClickMs;
public long lastDialogClosed;
public long lastDialogCooldownTime;
public int lastDialogType;
public boolean lastExpanded;
public String lastQrText;
public ValueCallback<Uri[]> mFilePathCallback;
public Runnable onPermissionsRequestResultCallback;
public Activity parentActivity;
public Theme.ResourcesProvider resourcesProvider;
public int shownDialogsCount;
public WebView webView;
public boolean webViewNotAvailable;
public TextView webViewNotAvailableText;
public Consumer<Float> webViewProgressListener;
public WebViewScrollListener webViewScrollListener;
public interface Delegate {
public final class CC {
public static void $default$onSendWebViewData(Delegate delegate, String str) {
}
public static void $default$onWebAppReady(Delegate delegate) {
}
}
boolean isClipboardAvailable();
void onCloseRequested(Runnable callback);
void onSendWebViewData(String data);
void onSetBackButtonVisible(boolean visible);
void onSetSettingsButtonVisible(boolean visible);
void onSetupMainButton(boolean isVisible, boolean isActive, String text, int color, int textColor, boolean isProgressVisible);
void onWebAppExpand();
void onWebAppOpenInvoice(TLRPC.InputInvoice inputInvoice, String slug, TLObject response);
void onWebAppReady();
void onWebAppSetActionBarColor(int colorKey, boolean isOverrideColor);
void onWebAppSetBackgroundColor(int color);
void onWebAppSetupClosingBehavior(boolean needConfirmation);
void onWebAppSwitchInlineQuery(TLRPC.User botUser, String query, List<String> chatTypes);
}
public interface WebViewScrollListener {
void onWebViewScrolled(WebView webView, int dx, int dy);
}
public static void lambda$evaluateJs$5(String str) {
}
public void onWebViewCreated() {
}
public BotWebViewContainer(Context context, Theme.ResourcesProvider resourcesProvider, int backgroundColor) {
super(context);
CellFlickerDrawable cellFlickerDrawable = new CellFlickerDrawable();
this.flickerDrawable = cellFlickerDrawable;
this.lastButtonColor = getColor(Theme.key_featuredStickers_addButton);
this.lastButtonTextColor = getColor(Theme.key_featuredStickers_buttonText);
this.lastButtonText = "";
this.lastDialogType = -1;
this.shownDialogsCount = 0;
this.resourcesProvider = resourcesProvider;
if (context instanceof Activity) {
this.parentActivity = (Activity) context;
}
cellFlickerDrawable.drawFrame = false;
cellFlickerDrawable.setColors(backgroundColor, 153, 204);
BackupImageView backupImageView = new BackupImageView(context) {
{
((BackupImageView) this).imageReceiver = new C00071(this);
}
public class C00071 extends ImageReceiver {
public C00071(View view) {
super(view);
}
public boolean setImageBitmapByKey(Drawable drawable, String key, int type, boolean memCache, int guid) {
boolean imageBitmapByKey = super.setImageBitmapByKey(drawable, key, type, memCache, guid);
ValueAnimator duration = ValueAnimator.ofFloat(0.0f, 1.0f).setDuration(300L);
duration.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public final void onAnimationUpdate(ValueAnimator valueAnimator) {
BotWebViewContainer.AnonymousClass1.C00071.this.lambda$setImageBitmapByKey$0(valueAnimator);
}
});
duration.start();
return imageBitmapByKey;
}
public void lambda$setImageBitmapByKey$0(ValueAnimator valueAnimator) {
((BackupImageView) AnonymousClass1.this).imageReceiver.setAlpha(((Float) valueAnimator.getAnimatedValue()).floatValue());
invalidate();
}
}
public void onDraw(Canvas canvas) {
if (BotWebViewContainer.this.isFlickeringCenter) {
super.onDraw(canvas);
return;
}
if (((BackupImageView) this).imageReceiver.getDrawable() != null) {
((BackupImageView) this).imageReceiver.setImageCoords(0.0f, 0.0f, getWidth(), r0.getIntrinsicHeight() * (getWidth() / r0.getIntrinsicWidth()));
((BackupImageView) this).imageReceiver.draw(canvas);
}
}
};
this.flickerView = backupImageView;
backupImageView.setColorFilter(new PorterDuffColorFilter(getColor(Theme.key_dialogSearchHint), PorterDuff.Mode.SRC_IN));
this.flickerView.getImageReceiver().setAspectFit(true);
addView((View) this.flickerView, (ViewGroup.LayoutParams) LayoutHelper.createFrame(-1, -2, 48));
TextView textView = new TextView(context);
this.webViewNotAvailableText = textView;
textView.setText(LocaleController.getString(R.string.BotWebViewNotAvailablePlaceholder));
this.webViewNotAvailableText.setTextColor(getColor(Theme.key_windowBackgroundWhiteGrayText));
this.webViewNotAvailableText.setTextSize(1, 15.0f);
this.webViewNotAvailableText.setGravity(17);
this.webViewNotAvailableText.setVisibility(8);
int dp = AndroidUtilities.dp(16.0f);
this.webViewNotAvailableText.setPadding(dp, dp, dp, dp);
addView(this.webViewNotAvailableText, LayoutHelper.createFrame(-1, -2, 17));
setFocusable(false);
}
public void setViewPortByMeasureSuppressed(boolean viewPortByMeasureSuppressed) {
this.isViewPortByMeasureSuppressed = viewPortByMeasureSuppressed;
}
public final void checkCreateWebView() {
if (this.webView != null || this.webViewNotAvailable) {
return;
}
try {
setupWebView();
} catch (Throwable th) {
FileLog.e(th);
this.flickerView.setVisibility(8);
this.webViewNotAvailable = true;
this.webViewNotAvailableText.setVisibility(0);
if (this.webView != null) {
removeView(this.webView);
}
}
}
@SuppressLint({"SetJavaScriptEnabled", "AddJavascriptInterface"})
public final void setupWebView() {
WebView webView = this.webView;
if (webView != null) {
webView.destroy();
removeView(this.webView);
}
WebView webView2 = new WebView(getContext()) {
public int prevScrollX;
public int prevScrollY;
@Override
public void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
if (BotWebViewContainer.this.webViewScrollListener != null) {
BotWebViewContainer.this.webViewScrollListener.onWebViewScrolled(this, getScrollX() - this.prevScrollX, getScrollY() - this.prevScrollY);
}
this.prevScrollX = getScrollX();
this.prevScrollY = getScrollY();
}
@Override
public void setScrollX(int value) {
super.setScrollX(value);
this.prevScrollX = value;
}
@Override
public void setScrollY(int value) {
super.setScrollY(value);
this.prevScrollY = value;
}
@Override
public boolean onCheckIsTextEditor() {
return BotWebViewContainer.this.isFocusable();
}
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, View.MeasureSpec.makeMeasureSpec(View.MeasureSpec.getSize(heightMeasureSpec), 1073741824));
}
@Override
@SuppressLint({"ClickableViewAccessibility"})
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == 0) {
BotWebViewContainer.this.lastClickMs = System.currentTimeMillis();
}
return super.onTouchEvent(event);
}
@Override
public void onAttachedToWindow() {
AndroidUtilities.checkAndroidTheme(getContext(), true);
super.onAttachedToWindow();
}
@Override
public void onDetachedFromWindow() {
AndroidUtilities.checkAndroidTheme(getContext(), false);
super.onDetachedFromWindow();
}
};
this.webView = webView2;
webView2.setBackgroundColor(getColor(Theme.key_windowBackgroundWhite));
WebSettings settings = this.webView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setGeolocationEnabled(true);
settings.setDomStorageEnabled(true);
settings.setDatabaseEnabled(true);
settings.setSupportMultipleWindows(true);
settings.setTextSize(WebSettings.TextSize.NORMAL);
File file = new File(ApplicationLoader.getFilesDirFixed(), "webview_database");
if ((file.exists() && file.isDirectory()) || file.mkdirs()) {
settings.setDatabasePath(file.getAbsolutePath());
}
GeolocationPermissions.getInstance().clearAll();
this.webView.setVerticalScrollBarEnabled(false);
this.webView.setWebViewClient(new AnonymousClass3());
this.webView.setWebChromeClient(new AnonymousClass4());
this.webView.setAlpha(0.0f);
addView(this.webView);
if (Build.VERSION.SDK_INT >= 17) {
this.webView.addJavascriptInterface(new WebViewProxy(), "TelegramWebviewProxy");
}
onWebViewCreated();
}
public class AnonymousClass3 extends WebViewClient {
public AnonymousClass3() {
}
@Override
public boolean onRenderProcessGone(WebView view, RenderProcessGoneDetail detail) {
LaunchActivity launchActivity = LaunchActivity.instance;
if (launchActivity != null && launchActivity.isFinishing()) {
return true;
}
new AlertDialog.Builder(BotWebViewContainer.this.getContext(), BotWebViewContainer.this.resourcesProvider).setTitle(LocaleController.getString(R.string.ChromeCrashTitle)).setMessage(AndroidUtilities.replaceSingleTag(LocaleController.getString(R.string.ChromeCrashMessage), new Runnable() {
@Override
public final void run() {
BotWebViewContainer.AnonymousClass3.this.lambda$onRenderProcessGone$0();
}
})).setPositiveButton(LocaleController.getString(R.string.OK), (DialogInterface.OnClickListener) null).setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public final void onDismiss(DialogInterface dialogInterface) {
BotWebViewContainer.AnonymousClass3.this.lambda$onRenderProcessGone$1(dialogInterface);
}
}).show();
return true;
}
public void lambda$onRenderProcessGone$0() {
Browser.openUrl(BotWebViewContainer.this.getContext(), "https://play.google.com/store/apps/details?id=com.google.android.webview");
}
public void lambda$onRenderProcessGone$1(DialogInterface dialogInterface) {
if (BotWebViewContainer.this.delegate != null) {
BotWebViewContainer.this.delegate.onCloseRequested(null);
}
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Uri parse = Uri.parse(url);
if (!Browser.isInternalUri(parse, (boolean[]) null)) {
return false;
}
if (!BotWebViewContainer.WHITELISTED_SCHEMES.contains(parse.getScheme())) {
return true;
}
BotWebViewContainer.this.onOpenUri(parse);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
BotWebViewContainer.this.setPageLoaded(url);
}
}
public class AnonymousClass4 extends WebChromeClient {
public Dialog lastPermissionsDialog;
public AnonymousClass4() {
}
public class AnonymousClass1 extends WebViewClient {
public AnonymousClass1() {
}
@Override
public boolean onRenderProcessGone(WebView view, RenderProcessGoneDetail detail) {
LaunchActivity launchActivity = LaunchActivity.instance;
if (launchActivity != null && launchActivity.isFinishing()) {
return true;
}
new AlertDialog.Builder(BotWebViewContainer.this.getContext(), BotWebViewContainer.this.resourcesProvider).setTitle(LocaleController.getString(R.string.ChromeCrashTitle)).setMessage(AndroidUtilities.replaceSingleTag(LocaleController.getString(R.string.ChromeCrashMessage), new Runnable() {
@Override
public final void run() {
BotWebViewContainer.AnonymousClass4.AnonymousClass1.this.lambda$onRenderProcessGone$0();
}
})).setPositiveButton(LocaleController.getString(R.string.OK), (DialogInterface.OnClickListener) null).setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public final void onDismiss(DialogInterface dialogInterface) {
BotWebViewContainer.AnonymousClass4.AnonymousClass1.this.lambda$onRenderProcessGone$1(dialogInterface);
}
}).show();
return true;
}
public void lambda$onRenderProcessGone$0() {
Browser.openUrl(BotWebViewContainer.this.getContext(), "https://play.google.com/store/apps/details?id=com.google.android.webview");
}
public void lambda$onRenderProcessGone$1(DialogInterface dialogInterface) {
if (BotWebViewContainer.this.delegate != null) {
BotWebViewContainer.this.delegate.onCloseRequested(null);
}
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
BotWebViewContainer.this.onOpenUri(Uri.parse(url));
return true;
}
}
@Override
public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
WebView webView = new WebView(view.getContext());
webView.setWebViewClient(new AnonymousClass1());
((WebView.WebViewTransport) resultMsg.obj).setWebView(webView);
resultMsg.sendToTarget();
return true;
}
@Override
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) {
Activity findActivity = AndroidUtilities.findActivity(BotWebViewContainer.this.getContext());
if (findActivity == null) {
return false;
}
if (BotWebViewContainer.this.mFilePathCallback != null) {
BotWebViewContainer.this.mFilePathCallback.onReceiveValue(null);
}
BotWebViewContainer.this.mFilePathCallback = filePathCallback;
if (Build.VERSION.SDK_INT >= 21) {
findActivity.startActivityForResult(fileChooserParams.createIntent(), 3000);
return true;
}
Intent intent = new Intent("android.intent.action.GET_CONTENT");
intent.addCategory("android.intent.category.OPENABLE");
intent.setType("*/*");
findActivity.startActivityForResult(Intent.createChooser(intent, LocaleController.getString(R.string.BotWebViewFileChooserTitle)), 3000);
return true;
}
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (BotWebViewContainer.this.webViewProgressListener != null) {
BotWebViewContainer.this.webViewProgressListener.accept(Float.valueOf(newProgress / 100.0f));
}
}
@Override
public void onGeolocationPermissionsShowPrompt(final String origin, final GeolocationPermissions.Callback callback) {
if (BotWebViewContainer.this.parentActivity == null) {
callback.invoke(origin, false, false);
return;
}
Dialog createWebViewPermissionsRequestDialog = AlertsCreator.createWebViewPermissionsRequestDialog(BotWebViewContainer.this.parentActivity, BotWebViewContainer.this.resourcesProvider, new String[]{"android.permission.ACCESS_COARSE_LOCATION", "android.permission.ACCESS_FINE_LOCATION"}, R.raw.permission_request_location, LocaleController.formatString(R.string.BotWebViewRequestGeolocationPermission, new Object[]{UserObject.getUserName(BotWebViewContainer.this.botUser)}), LocaleController.formatString(R.string.BotWebViewRequestGeolocationPermissionWithHint, new Object[]{UserObject.getUserName(BotWebViewContainer.this.botUser)}), new Consumer() {
public final void accept(Object obj) {
BotWebViewContainer.AnonymousClass4.this.lambda$onGeolocationPermissionsShowPrompt$1(callback, origin, (Boolean) obj);
}
});
this.lastPermissionsDialog = createWebViewPermissionsRequestDialog;
createWebViewPermissionsRequestDialog.show();
}
public void lambda$onGeolocationPermissionsShowPrompt$1(final GeolocationPermissions.Callback callback, final String str, Boolean bool) {
if (this.lastPermissionsDialog != null) {
this.lastPermissionsDialog = null;
if (bool.booleanValue()) {
BotWebViewContainer.this.runWithPermissions(new String[]{"android.permission.ACCESS_COARSE_LOCATION", "android.permission.ACCESS_FINE_LOCATION"}, new Consumer() {
public final void accept(Object obj) {
BotWebViewContainer.AnonymousClass4.this.lambda$onGeolocationPermissionsShowPrompt$0(callback, str, (Boolean) obj);
}
});
} else {
callback.invoke(str, false, false);
}
}
}
public void lambda$onGeolocationPermissionsShowPrompt$0(GeolocationPermissions.Callback callback, String str, Boolean bool) {
callback.invoke(str, bool.booleanValue(), false);
if (bool.booleanValue()) {
BotWebViewContainer.this.hasUserPermissions = true;
}
}
@Override
public void onGeolocationPermissionsHidePrompt() {
Dialog dialog = this.lastPermissionsDialog;
if (dialog != null) {
dialog.dismiss();
this.lastPermissionsDialog = null;
}
}
@Override
public void onPermissionRequest(final PermissionRequest request) {
Dialog dialog = this.lastPermissionsDialog;
if (dialog != null) {
dialog.dismiss();
this.lastPermissionsDialog = null;
}
final String[] resources = request.getResources();
if (resources.length == 1) {
final String str = resources[0];
if (BotWebViewContainer.this.parentActivity == null) {
request.deny();
return;
}
str.hashCode();
if (str.equals("android.webkit.resource.VIDEO_CAPTURE")) {
Dialog createWebViewPermissionsRequestDialog = AlertsCreator.createWebViewPermissionsRequestDialog(BotWebViewContainer.this.parentActivity, BotWebViewContainer.this.resourcesProvider, new String[]{"android.permission.CAMERA"}, R.raw.permission_request_camera, LocaleController.formatString(R.string.BotWebViewRequestCameraPermission, new Object[]{UserObject.getUserName(BotWebViewContainer.this.botUser)}), LocaleController.formatString(R.string.BotWebViewRequestCameraPermissionWithHint, new Object[]{UserObject.getUserName(BotWebViewContainer.this.botUser)}), new Consumer() {
public final void accept(Object obj) {
BotWebViewContainer.AnonymousClass4.this.lambda$onPermissionRequest$5(request, str, (Boolean) obj);
}
});
this.lastPermissionsDialog = createWebViewPermissionsRequestDialog;
createWebViewPermissionsRequestDialog.show();
return;
} else {
if (str.equals("android.webkit.resource.AUDIO_CAPTURE")) {
Dialog createWebViewPermissionsRequestDialog2 = AlertsCreator.createWebViewPermissionsRequestDialog(BotWebViewContainer.this.parentActivity, BotWebViewContainer.this.resourcesProvider, new String[]{"android.permission.RECORD_AUDIO"}, R.raw.permission_request_microphone, LocaleController.formatString(R.string.BotWebViewRequestMicrophonePermission, new Object[]{UserObject.getUserName(BotWebViewContainer.this.botUser)}), LocaleController.formatString(R.string.BotWebViewRequestMicrophonePermissionWithHint, new Object[]{UserObject.getUserName(BotWebViewContainer.this.botUser)}), new Consumer() {
public final void accept(Object obj) {
BotWebViewContainer.AnonymousClass4.this.lambda$onPermissionRequest$3(request, str, (Boolean) obj);
}
});
this.lastPermissionsDialog = createWebViewPermissionsRequestDialog2;
createWebViewPermissionsRequestDialog2.show();
return;
}
return;
}
}
if (resources.length == 2) {
if ("android.webkit.resource.AUDIO_CAPTURE".equals(resources[0]) || "android.webkit.resource.VIDEO_CAPTURE".equals(resources[0])) {
if ("android.webkit.resource.AUDIO_CAPTURE".equals(resources[1]) || "android.webkit.resource.VIDEO_CAPTURE".equals(resources[1])) {
Dialog createWebViewPermissionsRequestDialog3 = AlertsCreator.createWebViewPermissionsRequestDialog(BotWebViewContainer.this.parentActivity, BotWebViewContainer.this.resourcesProvider, new String[]{"android.permission.CAMERA", "android.permission.RECORD_AUDIO"}, R.raw.permission_request_camera, LocaleController.formatString(R.string.BotWebViewRequestCameraMicPermission, new Object[]{UserObject.getUserName(BotWebViewContainer.this.botUser)}), LocaleController.formatString(R.string.BotWebViewRequestCameraMicPermissionWithHint, new Object[]{UserObject.getUserName(BotWebViewContainer.this.botUser)}), new Consumer() {
public final void accept(Object obj) {
BotWebViewContainer.AnonymousClass4.this.lambda$onPermissionRequest$7(request, resources, (Boolean) obj);
}
});
this.lastPermissionsDialog = createWebViewPermissionsRequestDialog3;
createWebViewPermissionsRequestDialog3.show();
}
}
}
}
public void lambda$onPermissionRequest$3(final PermissionRequest permissionRequest, final String str, Boolean bool) {
if (this.lastPermissionsDialog != null) {
this.lastPermissionsDialog = null;
if (bool.booleanValue()) {
BotWebViewContainer.this.runWithPermissions(new String[]{"android.permission.RECORD_AUDIO"}, new Consumer() {
public final void accept(Object obj) {
BotWebViewContainer.AnonymousClass4.this.lambda$onPermissionRequest$2(permissionRequest, str, (Boolean) obj);
}
});
} else {
permissionRequest.deny();
}
}
}
public void lambda$onPermissionRequest$2(PermissionRequest permissionRequest, String str, Boolean bool) {
if (bool.booleanValue()) {
permissionRequest.grant(new String[]{str});
BotWebViewContainer.this.hasUserPermissions = true;
} else {
permissionRequest.deny();
}
}
public void lambda$onPermissionRequest$5(final PermissionRequest permissionRequest, final String str, Boolean bool) {
if (this.lastPermissionsDialog != null) {
this.lastPermissionsDialog = null;
if (bool.booleanValue()) {
BotWebViewContainer.this.runWithPermissions(new String[]{"android.permission.CAMERA"}, new Consumer() {
public final void accept(Object obj) {
BotWebViewContainer.AnonymousClass4.this.lambda$onPermissionRequest$4(permissionRequest, str, (Boolean) obj);
}
});
} else {
permissionRequest.deny();
}
}
}
public void lambda$onPermissionRequest$4(PermissionRequest permissionRequest, String str, Boolean bool) {
if (bool.booleanValue()) {
permissionRequest.grant(new String[]{str});
BotWebViewContainer.this.hasUserPermissions = true;
} else {
permissionRequest.deny();
}
}
public void lambda$onPermissionRequest$7(final PermissionRequest permissionRequest, final String[] strArr, Boolean bool) {
if (this.lastPermissionsDialog != null) {
this.lastPermissionsDialog = null;
if (bool.booleanValue()) {
BotWebViewContainer.this.runWithPermissions(new String[]{"android.permission.CAMERA", "android.permission.RECORD_AUDIO"}, new Consumer() {
public final void accept(Object obj) {
BotWebViewContainer.AnonymousClass4.this.lambda$onPermissionRequest$6(permissionRequest, strArr, (Boolean) obj);
}
});
} else {
permissionRequest.deny();
}
}
}
public void lambda$onPermissionRequest$6(PermissionRequest permissionRequest, String[] strArr, Boolean bool) {
if (bool.booleanValue()) {
permissionRequest.grant(new String[]{strArr[0], strArr[1]});
BotWebViewContainer.this.hasUserPermissions = true;
} else {
permissionRequest.deny();
}
}
@Override
public void onPermissionRequestCanceled(PermissionRequest request) {
Dialog dialog = this.lastPermissionsDialog;
if (dialog != null) {
dialog.dismiss();
this.lastPermissionsDialog = null;
}
}
}
public final void onOpenUri(Uri uri) {
onOpenUri(uri, false, false);
}
public final void onOpenUri(Uri uri, boolean tryInstantView, boolean suppressPopup) {
if (this.isRequestingPageOpen) {
return;
}
if (System.currentTimeMillis() - this.lastClickMs <= 1000 || !suppressPopup) {
this.lastClickMs = 0L;
boolean[] zArr = {false};
if (Browser.isInternalUri(uri, zArr) && !zArr[0]) {
if (this.delegate != null) {
setDescendantFocusability(393216);
setFocusable(false);
this.webView.setFocusable(false);
this.webView.setDescendantFocusability(393216);
this.webView.clearFocus();
((InputMethodManager) getContext().getSystemService("input_method")).hideSoftInputFromWindow(getWindowToken(), 2);
Browser.openUrl(getContext(), uri, true, tryInstantView);
return;
}
Browser.openUrl(getContext(), uri, true, tryInstantView);
return;
}
Browser.openUrl(getContext(), uri, true, tryInstantView);
}
}
public static int getMainButtonRippleColor(int buttonColor) {
return ColorUtils.calculateLuminance(buttonColor) >= 0.30000001192092896d ? 301989888 : 385875967;
}
public static Drawable getMainButtonRippleDrawable(int buttonColor) {
return Theme.createSelectorWithBackgroundDrawable(buttonColor, getMainButtonRippleColor(buttonColor));
}
public void updateFlickerBackgroundColor(int backgroundColor) {
this.flickerDrawable.setColors(backgroundColor, 153, 204);
}
public boolean onBackPressed() {
if (this.webView == null || !this.isBackButtonVisible) {
return false;
}
notifyEvent("back_button_pressed", null);
return true;
}
public void setPageLoaded(String url) {
if (this.isPageLoaded) {
return;
}
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.playTogether(ObjectAnimator.ofFloat(this.webView, (Property<WebView, Float>) View.ALPHA, 1.0f), ObjectAnimator.ofFloat(this.flickerView, (Property<BackupImageView, Float>) View.ALPHA, 0.0f));
animatorSet.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
BotWebViewContainer.this.flickerView.setVisibility(8);
}
});
animatorSet.start();
this.isPageLoaded = true;
setFocusable(true);
this.delegate.onWebAppReady();
}
public boolean hasUserPermissions() {
return this.hasUserPermissions;
}
public void setBotUser(TLRPC.User botUser) {
this.botUser = botUser;
}
public final void runWithPermissions(final String[] permissions, final Consumer<Boolean> callback) {
if (Build.VERSION.SDK_INT < 23) {
callback.accept(Boolean.TRUE);
return;
}
if (checkPermissions(permissions)) {
callback.accept(Boolean.TRUE);
return;
}
this.onPermissionsRequestResultCallback = new Runnable() {
@Override
public final void run() {
BotWebViewContainer.this.lambda$runWithPermissions$0(callback, permissions);
}
};
Activity activity = this.parentActivity;
if (activity != null) {
activity.requestPermissions(permissions, 4000);
}
}
public void lambda$runWithPermissions$0(Consumer consumer, String[] strArr) {
consumer.accept(Boolean.valueOf(checkPermissions(strArr)));
}
public boolean isPageLoaded() {
return this.isPageLoaded;
}
public void setParentActivity(Activity parentActivity) {
this.parentActivity = parentActivity;
}
public final boolean checkPermissions(String[] permissions) {
for (String str : permissions) {
if (getContext().checkSelfPermission(str) != 0) {
return false;
}
}
return true;
}
public void restoreButtonData() {
String str = this.buttonData;
if (str != null) {
onEventReceived("web_app_setup_main_button", str);
}
}
public void onInvoiceStatusUpdate(String slug, String status) {
onInvoiceStatusUpdate(slug, status, false);
}
public void onInvoiceStatusUpdate(String slug, String status, boolean ignoreCurrentCheck) {
try {
JSONObject jSONObject = new JSONObject();
jSONObject.put("slug", slug);
jSONObject.put("status", status);
notifyEvent("invoice_closed", jSONObject);
FileLog.d("invoice_closed " + jSONObject);
if (ignoreCurrentCheck || !Objects.equals(this.currentPaymentSlug, slug)) {
return;
}
this.currentPaymentSlug = null;
} catch (JSONException e) {
FileLog.e(e);
}
}
public void onSettingsButtonPressed() {
this.lastClickMs = System.currentTimeMillis();
notifyEvent("settings_button_pressed", null);
}
public void onMainButtonPressed() {
this.lastClickMs = System.currentTimeMillis();
notifyEvent("main_button_pressed", null);
}
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
Runnable runnable;
if (requestCode != 4000 || (runnable = this.onPermissionsRequestResultCallback) == null) {
return;
}
runnable.run();
this.onPermissionsRequestResultCallback = null;
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode != 3000 || this.mFilePathCallback == null) {
return;
}
this.mFilePathCallback.onReceiveValue((resultCode != -1 || data == null || data.getDataString() == null) ? null : new Uri[]{Uri.parse(data.getDataString())});
this.mFilePathCallback = null;
}
@Override
public void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
if (this.isViewPortByMeasureSuppressed) {
return;
}
invalidateViewPortHeight(true);
}
public void invalidateViewPortHeight() {
invalidateViewPortHeight(false);
}
public void invalidateViewPortHeight(boolean isStable) {
invalidateViewPortHeight(isStable, false);
}
public void invalidateViewPortHeight(boolean isStable, boolean force) {
invalidate();
if ((this.isPageLoaded || force) && (getParent() instanceof ChatAttachAlertBotWebViewLayout.WebViewSwipeContainer)) {
ChatAttachAlertBotWebViewLayout.WebViewSwipeContainer webViewSwipeContainer = (ChatAttachAlertBotWebViewLayout.WebViewSwipeContainer) getParent();
if (isStable) {
this.lastExpanded = webViewSwipeContainer.getSwipeOffsetY() == (-webViewSwipeContainer.getOffsetY()) + webViewSwipeContainer.getTopActionBarOffsetY();
}
int measuredHeight = (int) (((webViewSwipeContainer.getMeasuredHeight() - webViewSwipeContainer.getOffsetY()) - webViewSwipeContainer.getSwipeOffsetY()) + webViewSwipeContainer.getTopActionBarOffsetY());
try {
JSONObject jSONObject = new JSONObject();
jSONObject.put("height", measuredHeight / AndroidUtilities.density);
jSONObject.put("is_state_stable", isStable);
jSONObject.put("is_expanded", this.lastExpanded);
notifyEvent("viewport_changed", jSONObject);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
@Override
public boolean drawChild(Canvas canvas, View child, long drawingTime) {
if (child == this.flickerView) {
if (this.isFlickeringCenter) {
canvas.save();
canvas.translate(0.0f, (ActionBar.getCurrentActionBarHeight() - ((View) getParent()).getTranslationY()) / 2.0f);
}
boolean drawChild = super.drawChild(canvas, child, drawingTime);
if (this.isFlickeringCenter) {
canvas.restore();
}
RectF rectF = AndroidUtilities.rectTmp;
rectF.set(0.0f, 0.0f, getWidth(), getHeight());
this.flickerDrawable.draw(canvas, rectF, 0.0f, this);
invalidate();
return drawChild;
}
if (child == this.webViewNotAvailableText) {
canvas.save();
canvas.translate(0.0f, (ActionBar.getCurrentActionBarHeight() - ((View) getParent()).getTranslationY()) / 2.0f);
boolean drawChild2 = super.drawChild(canvas, child, drawingTime);
canvas.restore();
return drawChild2;
}
return super.drawChild(canvas, child, drawingTime);
}
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
this.flickerDrawable.setParentWidth(getMeasuredWidth());
}
public void setWebViewProgressListener(Consumer<Float> webViewProgressListener) {
this.webViewProgressListener = webViewProgressListener;
}
public WebView getWebView() {
return this.webView;
}
public void loadFlickerAndSettingsItem(int currentAccount, long botId, ActionBarMenuSubItem settingsItem) {
TLRPC.TL_attachMenuBot tL_attachMenuBot;
boolean z;
String publicUsername = UserObject.getPublicUsername(MessagesController.getInstance(currentAccount).getUser(Long.valueOf(botId)));
if (publicUsername != null && publicUsername.equals("DurgerKingBot")) {
this.flickerView.setVisibility(0);
this.flickerView.setAlpha(1.0f);
this.flickerView.setImageDrawable(SvgHelper.getDrawable(R.raw.durgerking_placeholder, Integer.valueOf(getColor(Theme.key_windowBackgroundGray))));
setupFlickerParams(false);
return;
}
Iterator it = MediaDataController.getInstance(currentAccount).getAttachMenuBots().bots.iterator();
while (true) {
if (!it.hasNext()) {
tL_attachMenuBot = null;
break;
} else {
tL_attachMenuBot = (TLRPC.TL_attachMenuBot) it.next();
if (tL_attachMenuBot.bot_id == botId) {
break;
}
}
}
if (tL_attachMenuBot != null) {
TLRPC.TL_attachMenuBotIcon placeholderStaticAttachMenuBotIcon = MediaDataController.getPlaceholderStaticAttachMenuBotIcon(tL_attachMenuBot);
if (placeholderStaticAttachMenuBotIcon == null) {
placeholderStaticAttachMenuBotIcon = MediaDataController.getStaticAttachMenuBotIcon(tL_attachMenuBot);
z = true;
} else {
z = false;
}
if (placeholderStaticAttachMenuBotIcon != null) {
this.flickerView.setVisibility(0);
this.flickerView.setAlpha(1.0f);
this.flickerView.setImage(ImageLocation.getForDocument(placeholderStaticAttachMenuBotIcon.icon), (String) null, (Drawable) null, tL_attachMenuBot);
setupFlickerParams(z);
return;
}
return;
}
TLRPC.TL_messages_getAttachMenuBot tL_messages_getAttachMenuBot = new TLRPC.TL_messages_getAttachMenuBot();
tL_messages_getAttachMenuBot.bot = MessagesController.getInstance(currentAccount).getInputUser(botId);
ConnectionsManager.getInstance(currentAccount).sendRequest(tL_messages_getAttachMenuBot, new RequestDelegate() {
public final void run(TLObject tLObject, TLRPC.TL_error tL_error) {
BotWebViewContainer.this.lambda$loadFlickerAndSettingsItem$2(tLObject, tL_error);
}
});
}
public void lambda$loadFlickerAndSettingsItem$2(final TLObject tLObject, TLRPC.TL_error tL_error) {
AndroidUtilities.runOnUIThread(new Runnable() {
@Override
public final void run() {
BotWebViewContainer.this.lambda$loadFlickerAndSettingsItem$1(tLObject);
}
});
}
public void lambda$loadFlickerAndSettingsItem$1(TLObject tLObject) {
boolean z;
if (tLObject instanceof TLRPC.TL_attachMenuBotsBot) {
TLRPC.TL_attachMenuBot tL_attachMenuBot = ((TLRPC.TL_attachMenuBotsBot) tLObject).bot;
TLRPC.TL_attachMenuBotIcon placeholderStaticAttachMenuBotIcon = MediaDataController.getPlaceholderStaticAttachMenuBotIcon(tL_attachMenuBot);
if (placeholderStaticAttachMenuBotIcon == null) {
placeholderStaticAttachMenuBotIcon = MediaDataController.getStaticAttachMenuBotIcon(tL_attachMenuBot);
z = true;
} else {
z = false;
}
if (placeholderStaticAttachMenuBotIcon != null) {
this.flickerView.setVisibility(0);
this.flickerView.setAlpha(1.0f);
this.flickerView.setImage(ImageLocation.getForDocument(placeholderStaticAttachMenuBotIcon.icon), (String) null, (Drawable) null, tL_attachMenuBot);
setupFlickerParams(z);
}
}
}
private void setupFlickerParams(boolean center) {
this.isFlickeringCenter = center;
FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) this.flickerView.getLayoutParams();
layoutParams.gravity = center ? 17 : 48;
if (center) {
int dp = AndroidUtilities.dp(64.0f);
layoutParams.height = dp;
layoutParams.width = dp;
} else {
layoutParams.width = -1;
layoutParams.height = -2;
}
this.flickerView.requestLayout();
}
public void reload() {
NotificationCenter.getInstance(this.currentAccount).doOnIdle(new Runnable() {
@Override
public final void run() {
BotWebViewContainer.this.lambda$reload$3();
}
});
}
public void lambda$reload$3() {
if (this.isSettingsButtonVisible) {
this.isSettingsButtonVisible = false;
Delegate delegate = this.delegate;
if (delegate != null) {
delegate.onSetSettingsButtonVisible(false);
}
}
checkCreateWebView();
this.isPageLoaded = false;
this.lastClickMs = 0L;
this.hasUserPermissions = false;
WebView webView = this.webView;
if (webView != null) {
webView.reload();
}
}
public void loadUrl(int currentAccount, final String url) {
this.currentAccount = currentAccount;
NotificationCenter.getInstance(currentAccount).doOnIdle(new Runnable() {
@Override
public final void run() {
BotWebViewContainer.this.lambda$loadUrl$4(url);
}
});
}
public void lambda$loadUrl$4(String str) {
this.isPageLoaded = false;
this.lastClickMs = 0L;
this.hasUserPermissions = false;
checkCreateWebView();
WebView webView = this.webView;
if (webView != null) {
webView.loadUrl(str);
}
}
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.didSetNewTheme);
NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.onActivityResultReceived);
NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.onRequestPermissionResultReceived);
Bulletin.addDelegate(this, new Bulletin.Delegate() {
public boolean allowLayoutChanges() {
return Bulletin.Delegate.-CC.$default$allowLayoutChanges(this);
}
public boolean bottomOffsetAnimated() {
return Bulletin.Delegate.-CC.$default$bottomOffsetAnimated(this);
}
public boolean clipWithGradient(int i) {
return Bulletin.Delegate.-CC.$default$clipWithGradient(this, i);
}
public int getTopOffset(int i) {
return Bulletin.Delegate.-CC.$default$getTopOffset(this, i);
}
public void onBottomOffsetChange(float f) {
Bulletin.Delegate.-CC.$default$onBottomOffsetChange(this, f);
}
public void onHide(Bulletin bulletin) {
Bulletin.Delegate.-CC.$default$onHide(this, bulletin);
}
public void onShow(Bulletin bulletin) {
Bulletin.Delegate.-CC.$default$onShow(this, bulletin);
}
public int getBottomOffset(int tag) {
if (!(BotWebViewContainer.this.getParent() instanceof ChatAttachAlertBotWebViewLayout.WebViewSwipeContainer)) {
return 0;
}
ChatAttachAlertBotWebViewLayout.WebViewSwipeContainer webViewSwipeContainer = (ChatAttachAlertBotWebViewLayout.WebViewSwipeContainer) BotWebViewContainer.this.getParent();
return (int) ((webViewSwipeContainer.getOffsetY() + webViewSwipeContainer.getSwipeOffsetY()) - webViewSwipeContainer.getTopActionBarOffsetY());
}
});
}
@Override
public void onDetachedFromWindow() {
super.onDetachedFromWindow();
NotificationCenter.getGlobalInstance().removeObserver(this, NotificationCenter.didSetNewTheme);
NotificationCenter.getGlobalInstance().removeObserver(this, NotificationCenter.onActivityResultReceived);
NotificationCenter.getGlobalInstance().removeObserver(this, NotificationCenter.onRequestPermissionResultReceived);
Bulletin.removeDelegate(this);
}
public void destroyWebView() {
WebView webView = this.webView;
if (webView != null) {
if (webView.getParent() != null) {
removeView(this.webView);
}
this.webView.destroy();
this.isPageLoaded = false;
}
}
public boolean isBackButtonVisible() {
return this.isBackButtonVisible;
}
public void evaluateJs(final String script, final boolean create) {
NotificationCenter.getInstance(this.currentAccount).doOnIdle(new Runnable() {
@Override
public final void run() {
BotWebViewContainer.this.lambda$evaluateJs$6(create, script);
}
});
}
public void lambda$evaluateJs$6(boolean z, String str) {
if (z) {
checkCreateWebView();
}
WebView webView = this.webView;
if (webView == null) {
return;
}
if (Build.VERSION.SDK_INT >= 19) {
webView.evaluateJavascript(str, new ValueCallback() {
@Override
public final void onReceiveValue(Object obj) {
BotWebViewContainer.lambda$evaluateJs$5((String) obj);
}
});
return;
}
try {
webView.loadUrl("javascript:" + URLEncoder.encode(str, "UTF-8"));
} catch (UnsupportedEncodingException unused) {
this.webView.loadUrl("javascript:" + URLEncoder.encode(str));
}
}
public void didReceivedNotification(int id, int account, Object... args) {
if (id == NotificationCenter.didSetNewTheme) {
WebView webView = this.webView;
if (webView != null) {
webView.setBackgroundColor(getColor(Theme.key_windowBackgroundWhite));
}
this.flickerView.setColorFilter(new PorterDuffColorFilter(getColor(Theme.key_dialogSearchHint), PorterDuff.Mode.SRC_IN));
notifyThemeChanged();
return;
}
if (id == NotificationCenter.onActivityResultReceived) {
onActivityResult(((Integer) args[0]).intValue(), ((Integer) args[1]).intValue(), (Intent) args[2]);
} else if (id == NotificationCenter.onRequestPermissionResultReceived) {
onRequestPermissionsResult(((Integer) args[0]).intValue(), (String[]) args[1], (int[]) args[2]);
}
}
public final void notifyThemeChanged() {
notifyEvent("theme_changed", buildThemeParams());
}
public final void notifyEvent(String event, JSONObject eventData) {
evaluateJs("window.Telegram.WebView.receiveEvent('" + event + "', " + eventData + ");", false);
}
public void setWebViewScrollListener(WebViewScrollListener webViewScrollListener) {
this.webViewScrollListener = webViewScrollListener;
}
public void setDelegate(Delegate delegate) {
this.delegate = delegate;
}
public final void onEventReceived(java.lang.String r24, java.lang.String r25) {
throw new UnsupportedOperationException("Method not decompiled: org.telegram.ui.bots.BotWebViewContainer.onEventReceived(java.lang.String, java.lang.String):void");
}
public void lambda$onEventReceived$7(PopupButton popupButton, AtomicBoolean atomicBoolean, DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
try {
this.lastClickMs = System.currentTimeMillis();
notifyEvent("popup_closed", new JSONObject().put("button_id", popupButton.id));
atomicBoolean.set(true);
} catch (JSONException e) {
FileLog.e(e);
}
}
public void lambda$onEventReceived$8(PopupButton popupButton, AtomicBoolean atomicBoolean, DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
try {
this.lastClickMs = System.currentTimeMillis();
notifyEvent("popup_closed", new JSONObject().put("button_id", popupButton.id));
atomicBoolean.set(true);
} catch (JSONException e) {
FileLog.e(e);
}
}
public void lambda$onEventReceived$9(PopupButton popupButton, AtomicBoolean atomicBoolean, DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
try {
this.lastClickMs = System.currentTimeMillis();
notifyEvent("popup_closed", new JSONObject().put("button_id", popupButton.id));
atomicBoolean.set(true);
} catch (JSONException e) {
FileLog.e(e);
}
}
public void lambda$onEventReceived$10(AtomicBoolean atomicBoolean, DialogInterface dialogInterface) {
if (!atomicBoolean.get()) {
notifyEvent("popup_closed", new JSONObject());
}
this.currentDialog = null;
this.lastDialogClosed = System.currentTimeMillis();
}
public void lambda$onEventReceived$12(final String str, final TLRPC.TL_inputInvoiceSlug tL_inputInvoiceSlug, final TLObject tLObject, final TLRPC.TL_error tL_error) {
AndroidUtilities.runOnUIThread(new Runnable() {
@Override
public final void run() {
BotWebViewContainer.this.lambda$onEventReceived$11(tL_error, str, tL_inputInvoiceSlug, tLObject);
}
});
}
public void lambda$onEventReceived$11(TLRPC.TL_error tL_error, String str, TLRPC.TL_inputInvoiceSlug tL_inputInvoiceSlug, TLObject tLObject) {
if (tL_error != null) {
onInvoiceStatusUpdate(str, "failed");
} else {
this.delegate.onWebAppOpenInvoice(tL_inputInvoiceSlug, str, tLObject);
}
}
public void lambda$onEventReceived$19(final TLObject tLObject, final TLRPC.TL_error tL_error) {
AndroidUtilities.runOnUIThread(new Runnable() {
@Override
public final void run() {
BotWebViewContainer.this.lambda$onEventReceived$18(tLObject, tL_error);
}
});
}
public void lambda$onEventReceived$18(TLObject tLObject, TLRPC.TL_error tL_error) {
if (!(tLObject instanceof TLRPC.TL_boolTrue)) {
if (tL_error != null) {
unknownError(tL_error.text);
return;
} else {
final String[] strArr = {"cancelled"};
showDialog(3, new AlertDialog.Builder(getContext()).setTitle(LocaleController.getString(R.string.BotWebViewRequestWriteTitle)).setMessage(LocaleController.getString(R.string.BotWebViewRequestWriteMessage)).setPositiveButton(LocaleController.getString(R.string.BotWebViewRequestAllow), new DialogInterface.OnClickListener() {
@Override
public final void onClick(DialogInterface dialogInterface, int i) {
BotWebViewContainer.this.lambda$onEventReceived$15(strArr, dialogInterface, i);
}
}).setNegativeButton(LocaleController.getString(R.string.BotWebViewRequestDontAllow), new DialogInterface.OnClickListener() {
@Override
public final void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
}
}).create(), new Runnable() {
@Override
public final void run() {
BotWebViewContainer.this.lambda$onEventReceived$17(strArr);
}
});
return;
}
}
try {
JSONObject jSONObject = new JSONObject();
jSONObject.put("status", "allowed");
notifyEvent("write_access_requested", jSONObject);
} catch (Exception e) {
FileLog.e(e);
}
}
public void lambda$onEventReceived$15(final String[] strArr, final DialogInterface dialogInterface, int i) {
TLRPC.TL_bots_allowSendMessage tL_bots_allowSendMessage = new TLRPC.TL_bots_allowSendMessage();
tL_bots_allowSendMessage.bot = MessagesController.getInstance(this.currentAccount).getInputUser(this.botUser);
ConnectionsManager.getInstance(this.currentAccount).sendRequest(tL_bots_allowSendMessage, new RequestDelegate() {
public final void run(TLObject tLObject, TLRPC.TL_error tL_error) {
BotWebViewContainer.this.lambda$onEventReceived$14(strArr, dialogInterface, tLObject, tL_error);
}
});
}
public void lambda$onEventReceived$14(final String[] strArr, final DialogInterface dialogInterface, final TLObject tLObject, final TLRPC.TL_error tL_error) {
AndroidUtilities.runOnUIThread(new Runnable() {
@Override
public final void run() {
BotWebViewContainer.this.lambda$onEventReceived$13(tLObject, strArr, tL_error, dialogInterface);
}
});
}
public void lambda$onEventReceived$13(TLObject tLObject, String[] strArr, TLRPC.TL_error tL_error, DialogInterface dialogInterface) {
if (tLObject != null) {
strArr[0] = "allowed";
if (tLObject instanceof TLRPC.Updates) {
MessagesController.getInstance(this.currentAccount).processUpdates((TLRPC.Updates) tLObject, false);
}
}
if (tL_error != null) {
unknownError(tL_error.text);
}
dialogInterface.dismiss();
}
public void lambda$onEventReceived$17(String[] strArr) {
try {
JSONObject jSONObject = new JSONObject();
jSONObject.put("status", strArr[0]);
notifyEvent("write_access_requested", jSONObject);
} catch (Exception e) {
FileLog.e(e);
}
}
public void lambda$onEventReceived$21(final String str, final TLObject tLObject, final TLRPC.TL_error tL_error) {
AndroidUtilities.runOnUIThread(new Runnable() {
@Override
public final void run() {
BotWebViewContainer.this.lambda$onEventReceived$20(str, tLObject, tL_error);
}
});
}
public void lambda$onEventReceived$20(String str, TLObject tLObject, TLRPC.TL_error tL_error) {
try {
JSONObject jSONObject = new JSONObject();
jSONObject.put("req_id", str);
if (tLObject instanceof TLRPC.TL_dataJSON) {
jSONObject.put("result", new JSONTokener(((TLRPC.TL_dataJSON) tLObject).data).nextValue());
} else if (tL_error != null) {
jSONObject.put("error", tL_error.text);
}
notifyEvent("custom_method_invoked", jSONObject);
} catch (Exception e) {
FileLog.e(e);
unknownError();
}
}
public void lambda$onEventReceived$23(String[] strArr, boolean z, DialogInterface dialogInterface, int i) {
strArr[0] = null;
dialogInterface.dismiss();
if (z) {
MessagesController.getInstance(this.currentAccount).unblockPeer(this.botUser.id, new Runnable() {
@Override
public final void run() {
BotWebViewContainer.this.lambda$onEventReceived$22();
}
});
return;
}
SendMessagesHelper.getInstance(this.currentAccount).sendMessage(SendMessagesHelper.SendMessageParams.of(UserConfig.getInstance(this.currentAccount).getCurrentUser(), this.botUser.id, (MessageObject) null, (MessageObject) null, (TLRPC.ReplyMarkup) null, (HashMap) null, true, 0));
try {
JSONObject jSONObject = new JSONObject();
jSONObject.put("status", "sent");
notifyEvent("phone_requested", jSONObject);
} catch (Exception e) {
FileLog.e(e);
}
}
public void lambda$onEventReceived$22() {
SendMessagesHelper.getInstance(this.currentAccount).sendMessage(SendMessagesHelper.SendMessageParams.of(UserConfig.getInstance(this.currentAccount).getCurrentUser(), this.botUser.id, (MessageObject) null, (MessageObject) null, (TLRPC.ReplyMarkup) null, (HashMap) null, true, 0));
try {
JSONObject jSONObject = new JSONObject();
jSONObject.put("status", "sent");
notifyEvent("phone_requested", jSONObject);
} catch (Exception e) {
FileLog.e(e);
}
}
public void lambda$onEventReceived$25(String[] strArr) {
if (strArr[0] == null) {
return;
}
try {
JSONObject jSONObject = new JSONObject();
jSONObject.put("status", strArr[0]);
notifyEvent("phone_requested", jSONObject);
} catch (Exception e) {
FileLog.e(e);
}
}
public void lambda$onEventReceived$26() {
BotBiometry botBiometry = this.biometry;
botBiometry.access_requested = true;
botBiometry.save();
notifyBiometryReceived();
}
public void lambda$onEventReceived$28(Runnable[] runnableArr, DialogInterface dialogInterface, int i) {
if (runnableArr[0] != null) {
runnableArr[0] = null;
}
BotBiometry botBiometry = this.biometry;
botBiometry.access_requested = true;
botBiometry.save();
this.biometry.requestToken(null, new Utilities.Callback2() {
public final void run(Object obj, Object obj2) {
BotWebViewContainer.this.lambda$onEventReceived$27((Boolean) obj, (String) obj2);
}
});
}
public void lambda$onEventReceived$27(Boolean bool, String str) {
if (bool.booleanValue()) {
BotBiometry botBiometry = this.biometry;
botBiometry.access_granted = true;
botBiometry.save();
}
notifyBiometryReceived();
}
public void lambda$onEventReceived$29(Runnable[] runnableArr, DialogInterface dialogInterface, int i) {
if (runnableArr[0] != null) {
runnableArr[0] = null;
}
BotBiometry botBiometry = this.biometry;
botBiometry.access_requested = true;
botBiometry.disabled = true;
botBiometry.save();
notifyBiometryReceived();
}
public static void lambda$onEventReceived$30(Runnable[] runnableArr, DialogInterface dialogInterface) {
if (runnableArr[0] != null) {
runnableArr[0].run();
runnableArr[0] = null;
}
}
public void lambda$onEventReceived$31(Boolean bool, String str) {
if (bool.booleanValue()) {
this.biometry.access_granted = true;
}
try {
JSONObject jSONObject = new JSONObject();
jSONObject.put("status", bool.booleanValue() ? "authorized" : "failed");
jSONObject.put("token", str);
notifyEvent("biometry_auth_requested", jSONObject);
} catch (Exception e) {
FileLog.e(e);
}
}
public void lambda$onEventReceived$32(String str, Boolean bool) {
try {
JSONObject jSONObject = new JSONObject();
jSONObject.put("status", bool.booleanValue() ? TextUtils.isEmpty(str) ? "removed" : "updated" : "failed");
notifyEvent("biometry_token_updated", jSONObject);
} catch (Exception e) {
FileLog.e(e);
}
}
public final void createBiometry() {
if (this.botUser == null) {
return;
}
BotBiometry botBiometry = this.biometry;
if (botBiometry == null) {
this.biometry = new BotBiometry(getContext(), this.currentAccount, this.botUser.id);
} else {
botBiometry.load();
}
}
public final void notifyBiometryReceived() {
if (this.botUser == null) {
return;
}
createBiometry();
BotBiometry botBiometry = this.biometry;
if (botBiometry == null) {
return;
}
try {
notifyEvent("biometry_info_received", botBiometry.getStatus());
} catch (Exception e) {
FileLog.e(e);
}
}
public final void unknownError() {
unknownError(null);
}
public final void unknownError(String errCode) {
String str;
StringBuilder sb = new StringBuilder();
sb.append(LocaleController.getString("UnknownError", R.string.UnknownError));
if (errCode != null) {
str = ": " + errCode;
} else {
str = "";
}
sb.append(str);
error(sb.toString());
}
public final void error(String reason) {
BulletinFactory.of(this, this.resourcesProvider).createSimpleBulletin(R.raw.error, reason).show();
}
public final boolean ignoreDialog(int type) {
if (this.currentDialog != null) {
return true;
}
if (this.blockedDialogsUntil > 0 && System.currentTimeMillis() < this.blockedDialogsUntil) {
return true;
}
if (this.lastDialogType != type || this.shownDialogsCount <= 3) {
return false;
}
this.blockedDialogsUntil = System.currentTimeMillis() + 3000;
this.shownDialogsCount = 0;
return true;
}
public final boolean showDialog(int type, AlertDialog dialog, final Runnable onDismiss) {
if (dialog == null || ignoreDialog(type)) {
return false;
}
dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public final void onDismiss(DialogInterface dialogInterface) {
BotWebViewContainer.this.lambda$showDialog$33(onDismiss, dialogInterface);
}
});
this.currentDialog = dialog;
dialog.setDismissDialogByButtons(false);
this.currentDialog.show();
if (this.lastDialogType != type) {
this.lastDialogType = type;
this.shownDialogsCount = 0;
this.blockedDialogsUntil = 0L;
}
this.shownDialogsCount++;
return true;
}
public void lambda$showDialog$33(Runnable runnable, DialogInterface dialogInterface) {
if (runnable != null) {
runnable.run();
}
this.currentDialog = null;
}
public final void openQrScanActivity() {
Activity activity = this.parentActivity;
if (activity == null) {
return;
}
this.cameraBottomSheet = CameraScanActivity.showAsSheet(activity, false, 3, new CameraScanActivity.CameraScanActivityDelegate() {
public void didFindMrzInfo(MrzRecognizer.Result result) {
CameraScanActivity.CameraScanActivityDelegate.-CC.$default$didFindMrzInfo(this, result);
}
public boolean processQr(String str, Runnable runnable) {
return CameraScanActivity.CameraScanActivityDelegate.-CC.$default$processQr(this, str, runnable);
}
public void didFindQr(String text) {
try {
BotWebViewContainer.this.notifyEvent("qr_text_received", new JSONObject().put("data", text));
} catch (JSONException e) {
FileLog.e(e);
}
}
public String getSubtitleText() {
return BotWebViewContainer.this.lastQrText;
}
public void onDismiss() {
BotWebViewContainer.this.notifyEvent("scan_qr_popup_closed", null);
BotWebViewContainer.this.hasQRPending = false;
}
});
}
public final JSONObject buildThemeParams() {
try {
JSONObject makeThemeParams = BotWebViewSheet.makeThemeParams(this.resourcesProvider);
if (makeThemeParams != null) {
return new JSONObject().put("theme_params", makeThemeParams);
}
} catch (Exception e) {
FileLog.e(e);
}
return new JSONObject();
}
public final int getColor(int colorKey) {
Theme.ResourcesProvider resourcesProvider = this.resourcesProvider;
if (resourcesProvider != null) {
return resourcesProvider.getColor(colorKey);
}
return Theme.getColor(colorKey);
}
public class WebViewProxy {
public WebViewProxy() {
}
public void lambda$postEvent$0(String str, String str2) {
BotWebViewContainer.this.onEventReceived(str, str2);
}
@JavascriptInterface
public void postEvent(final String eventType, final String eventData) {
AndroidUtilities.runOnUIThread(new Runnable() {
@Override
public final void run() {
BotWebViewContainer.WebViewProxy.this.lambda$postEvent$0(eventType, eventData);
}
});
}
}
public static final class PopupButton {
public String id;
public String text;
public int textColorKey;
public PopupButton(org.json.JSONObject r9) throws org.json.JSONException {
throw new UnsupportedOperationException("Method not decompiled: org.telegram.ui.bots.BotWebViewContainer.PopupButton.<init>(org.json.JSONObject):void");
}
}
}