diff --git a/TMessagesProj/build.gradle b/TMessagesProj/build.gradle index 5a9ec2538e..89c8381217 100644 --- a/TMessagesProj/build.gradle +++ b/TMessagesProj/build.gradle @@ -14,12 +14,12 @@ repositories { } } -def verName = "10.14.3" -def verCode = 1185 +def verName = "10.14.5" +def verCode = 1186 -def officialVer = "10.14.3" -def officialCode = 4927 +def officialVer = "10.14.5" +def officialCode = 4945 def serviceAccountCredentialsFile = rootProject.file("service_account_credentials.json") diff --git a/TMessagesProj/src/main/AndroidManifest.xml b/TMessagesProj/src/main/AndroidManifest.xml index 2e2f686c7b..366bcf23d6 100644 --- a/TMessagesProj/src/main/AndroidManifest.xml +++ b/TMessagesProj/src/main/AndroidManifest.xml @@ -121,19 +121,6 @@ - - - - - - - - - - - - - = Build.VERSION_CODES.O && realMimeType != null && realMimeType.equals("application/vnd.android.package-archive") && !ApplicationLoader.applicationContext.getPackageManager().canRequestPackageInstalls()) { - AlertsCreator.createApkRestrictedDialog(activity, resourcesProvider).show(); - return true; + if (realMimeType != null && realMimeType.equals("application/vnd.android.package-archive")) { + if (restrict) return true; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && !ApplicationLoader.applicationContext.getPackageManager().canRequestPackageInstalls()) { + AlertsCreator.createApkRestrictedDialog(activity, resourcesProvider).show(); + return true; + } } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { intent.setDataAndType(FileProvider.getUriForFile(activity, ApplicationLoader.getApplicationId() + ".provider", f), realMimeType != null ? realMimeType : "text/plain"); @@ -3896,10 +3893,10 @@ public static boolean openForView(File f, String fileName, String mimeType, fina } public static boolean openForView(MessageObject message, Activity activity) { - return openForView(message, activity, null); + return openForView(message, activity, null, false); } - public static boolean openForView(MessageObject message, Activity activity, Theme.ResourcesProvider resourcesProvider) { + public static boolean openForView(MessageObject message, Activity activity, Theme.ResourcesProvider resourcesProvider, boolean restrict) { File f = null; if (message.messageOwner.attachPath != null && message.messageOwner.attachPath.length() != 0) { f = new File(message.messageOwner.attachPath); @@ -3908,13 +3905,13 @@ public static boolean openForView(MessageObject message, Activity activity, Them f = FileLoader.getInstance(message.currentAccount).getPathToMessage(message.messageOwner); } String mimeType = message.type == MessageObject.TYPE_FILE || message.type == MessageObject.TYPE_TEXT ? message.getMimeType() : null; - return openForView(f, message.getFileName(), mimeType, activity, resourcesProvider); + return openForView(f, message.getFileName(), mimeType, activity, resourcesProvider, restrict); } public static boolean openForView(TLRPC.Document document, boolean forceCache, Activity activity) { String fileName = FileLoader.getAttachFileName(document); File f = FileLoader.getInstance(UserConfig.selectedAccount).getPathToAttach(document, true); - return openForView(f, fileName, document.mime_type, activity, null); + return openForView(f, fileName, document.mime_type, activity, null, false); } public static SpannableStringBuilder formatSpannableSimple(CharSequence format, CharSequence... cs) { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/LocaleController.java b/TMessagesProj/src/main/java/org/telegram/messenger/LocaleController.java index e636895097..fe61bcf44c 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/LocaleController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/LocaleController.java @@ -1573,8 +1573,10 @@ public static String formatPluralStringComma(String key, int plural, char symbol value = BuildVars.USE_CLOUD_STRINGS ? getInstance().localeValues.get(key + "_other") : null; } if (value == null) { - int resourceId = ApplicationLoader.applicationContext.getResources().getIdentifier(param, "string", ApplicationLoader.applicationContext.getPackageName()); - value = ApplicationLoader.applicationContext.getString(resourceId); + try { + int resourceId = ApplicationLoader.applicationContext.getResources().getIdentifier(param, "string", ApplicationLoader.applicationContext.getPackageName()); + value = ApplicationLoader.applicationContext.getString(resourceId); + } catch (Exception e2) {} } if (value == null) { int resourceId = ApplicationLoader.applicationContext.getResources().getIdentifier(key + "_other", "string", ApplicationLoader.applicationContext.getPackageName()); diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MessageObject.java b/TMessagesProj/src/main/java/org/telegram/messenger/MessageObject.java index f1b732b3f3..ef3fc7c8fe 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/MessageObject.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/MessageObject.java @@ -8463,6 +8463,7 @@ public static boolean isVideoDocument(TLRPC.Document document) { } boolean isAnimated = false; boolean isVideo = false; + String filename = null; int width = 0; int height = 0; for (int a = 0; a < document.attributes.size(); a++) { @@ -8476,6 +8477,20 @@ public static boolean isVideoDocument(TLRPC.Document document) { height = attribute.h; } else if (attribute instanceof TLRPC.TL_documentAttributeAnimated) { isAnimated = true; + } else if (attribute instanceof TLRPC.TL_documentAttributeFilename) { + filename = attribute.file_name; + } + } + if (filename != null) { + int index = filename.lastIndexOf("."); + if (index >= 0) { + String ext = filename.substring(index + 1); + switch (ext.toLowerCase().hashCode()) { + case 0x17a1c: case 0x3107ab: case 0x19a1b: + case 0xe55: case 0x18417: case 0x184fe: + case 0x18181: + return false; + } } } if (isAnimated && (width > 1280 || height > 1280)) { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java b/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java index f04d6f7ba6..a6ce9752da 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java @@ -20250,13 +20250,13 @@ public boolean checkCanOpenChat(Bundle bundle, BaseFragment fragment, MessageObj @Override public void onMessagesLoaded(boolean fromCache) { progress.end(); - fragment.presentFragment(new ChatActivity(bundle), true); + fragment.presentFragment(new ChatActivity(bundle)); } @Override public void onError() { progress.end(); - fragment.presentFragment(new ChatActivity(bundle), true); + fragment.presentFragment(new ChatActivity(bundle)); } })); return false; diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/browser/Browser.java b/TMessagesProj/src/main/java/org/telegram/messenger/browser/Browser.java index 7d3f587ac0..19cba0c1d9 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/browser/Browser.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/browser/Browser.java @@ -51,6 +51,7 @@ import java.lang.ref.WeakReference; import java.net.URLEncoder; +import java.util.Collections; import java.util.List; import java.util.regex.Matcher; @@ -264,11 +265,9 @@ public static void openUrl(final Context context, Uri uri, boolean _allowCustom, boolean[] forceBrowser = new boolean[]{false}; boolean internalUri = isInternalUri(uri, forceBrowser); String browserPackage = getBrowserPackageName(browser); - if (isBrowserPackageInstalled(context, browserPackage, uri)) { + if (browserPackage != null) { tryTelegraph = false; _allowCustom = false; - } else { - browserPackage = null; } final boolean allowCustom = _allowCustom; if (tryTelegraph) { @@ -456,7 +455,16 @@ public static void openUrl(final Context context, Uri uri, boolean _allowCustom, intent.putExtra(LaunchActivity.EXTRA_FORCE_NOT_INTERNAL_APPS, forceNotInternalForApps); ((LaunchActivity) context).onNewIntent(intent, inCaseLoading); } else { - context.startActivity(intent); + try { + context.startActivity(intent); + } catch (Exception e2) { + if (browserPackage != null) { + intent.setPackage(browserPackage = null); + context.startActivity(intent); + } else { + FileLog.e(e2); + } + } } } catch (Exception e) { FileLog.e(e); @@ -620,14 +628,6 @@ public static String getBrowserPackageName(String browser) { return null; } - public static boolean isBrowserPackageInstalled(Context context, String packageName, Uri uri) { - if (packageName == null) return false; - PackageManager packageManager = context.getPackageManager(); - Intent intent = new Intent(Intent.ACTION_VIEW, uri); - intent.setPackage(packageName); - return packageManager.resolveActivity(intent, 0) != null; - } - public static String replaceHostname(Uri originalUri, String newHostname) { String scheme = originalUri.getScheme(); String userInfo = originalUri.getUserInfo(); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/CachedMediaLayout.java b/TMessagesProj/src/main/java/org/telegram/ui/CachedMediaLayout.java index 8c2ba13048..61ff78d3e1 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/CachedMediaLayout.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/CachedMediaLayout.java @@ -332,7 +332,7 @@ private void openItem(CacheModel.FileInfo fileInfo, CacheCell cacheCell) { photoEntries.add(new MediaController.PhotoEntry(0, 0, 0, fileInfo.file.getPath(), 0, fileInfo.type == TYPE_VIDEOS, 0, 0, 0)); PhotoViewer.getInstance().openPhotoForSelect(photoEntries, 0, PhotoViewer.SELECT_TYPE_NO_SELECT, false, placeProvider, null); } else { - AndroidUtilities.openForView(fileInfo.file, fileInfo.file.getName(), null, parentFragment.getParentActivity(), null); + AndroidUtilities.openForView(fileInfo.file, fileInfo.file.getName(), null, parentFragment.getParentActivity(), null, false); } } if (cacheCell.type == TYPE_MUSIC) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMessageCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMessageCell.java index 806f871772..95631e7675 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMessageCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMessageCell.java @@ -19646,7 +19646,7 @@ private void drawCaptionLayout(Canvas canvas, MessageObject.TextLayoutBlocks cap buttonX -= AndroidUtilities.dp(10); } commentButtonRect.set( - buttonX - AndroidUtilities.dp((currentMessageObject == null || !currentMessageObject.isOut()) && !drawPinnedBottom && currentPosition == null && (currentMessageObject == null || currentMessageObject.type != MessageObject.TYPE_POLL || pollInstantViewTouchesBottom) ? 6 : 0), + buttonX - AndroidUtilities.dp((currentMessageObject == null || !currentMessageObject.isOutOwner()) && !drawPinnedBottom && currentPosition == null && (currentMessageObject == null || currentMessageObject.type != MessageObject.TYPE_POLL || pollInstantViewTouchesBottom) ? 6 : 0), (int) buttonY, endX - AndroidUtilities.dp(14), layoutHeight - AndroidUtilities.dp(h) + 1 diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChannelAdminLogActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChannelAdminLogActivity.java index 7f46a0848c..0e85a64c0a 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChannelAdminLogActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChannelAdminLogActivity.java @@ -3178,7 +3178,7 @@ public void didPressImage(ChatMessageCell cell, float x, float y) { } } try { - AndroidUtilities.openForView(message, getParentActivity(), null); + AndroidUtilities.openForView(message, getParentActivity(), null, false); } catch (Exception e) { alertUserOpenError(message); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChannelMonetizationLayout.java b/TMessagesProj/src/main/java/org/telegram/ui/ChannelMonetizationLayout.java index 68d9e680f2..edee6cdc2a 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChannelMonetizationLayout.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChannelMonetizationLayout.java @@ -293,6 +293,7 @@ public boolean dispatchTouchEvent(MotionEvent event) { return super.dispatchTouchEvent(event); } }; + starsBalanceEditTextContainer.setVisibility(GONE); starsBalanceEditTextContainer.setText(getString(R.string.BotStarsWithdrawPlaceholder)); starsBalanceEditTextContainer.setLeftPadding(dp(14 + 22)); starsBalanceEditText = new EditTextBoldCursor(context) { @@ -671,13 +672,14 @@ private void setStarsBalance(long crypto_amount, int blockedUntil) { starsBalance = crypto_amount; starsBalanceTitle.setText(ssb); starsBalanceSubtitle.setText("≈" + BillingController.getInstance().formatCurrency(amount, "USD")); + starsBalanceEditTextContainer.setVisibility(crypto_amount > 0 ? VISIBLE : GONE); if (starsBalanceEditTextAll) { starsBalanceEditTextIgnore = true; starsBalanceEditText.setText(Long.toString(starsBalanceEditTextValue = crypto_amount)); starsBalanceEditText.setSelection(starsBalanceEditText.getText().length()); starsBalanceEditTextIgnore = false; - balanceButton.setEnabled(starsBalanceEditTextValue > 0); + starsBalanceButton.setEnabled(starsBalanceEditTextValue > 0); } starsBalanceBlockedUntil = blockedUntil; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Charts/BaseChartView.java b/TMessagesProj/src/main/java/org/telegram/ui/Charts/BaseChartView.java index 5b9bbb65a5..cad7c2369d 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Charts/BaseChartView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Charts/BaseChartView.java @@ -1175,8 +1175,10 @@ public long findMinValue(int startXIndex, int endXIndex) { return minValue; } - public void setData(T chartData) { + public boolean setData(T chartData) { + boolean updated = false; if (this.chartData != chartData) { + updated = true; invalidate(); lines.clear(); if (chartData != null && chartData.lines != null) { @@ -1236,6 +1238,7 @@ public void setData(T chartData) { alphaAnimator.cancel(); } } + return updated; } protected float getMinDistance() { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Charts/ChartPickerDelegate.java b/TMessagesProj/src/main/java/org/telegram/ui/Charts/ChartPickerDelegate.java index aeae132b7b..669b479843 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Charts/ChartPickerDelegate.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Charts/ChartPickerDelegate.java @@ -233,6 +233,12 @@ public boolean move(int x, int y, int pointer) { return true; } + public void set(float start, float end) { + pickerStart = start; + pickerEnd = end; + view.onPickerDataChanged(); + } + public boolean uncapture(MotionEvent event, int pointerIndex) { if (pointerIndex == 0) { if (tryMoveTo) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Charts/PieChartView.java b/TMessagesProj/src/main/java/org/telegram/ui/Charts/PieChartView.java index e4c50d2c4a..7ffcce1bb6 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Charts/PieChartView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Charts/PieChartView.java @@ -314,13 +314,14 @@ void drawBottomSignature(Canvas canvas) { @Override - public void setData(StackLinearChartData chartData) { - super.setData(chartData); + public boolean setData(StackLinearChartData chartData) { + boolean u = super.setData(chartData); if (chartData != null) { values = new float[chartData.lines.size()]; darawingValuesPercentage = new float[chartData.lines.size()]; onPickerDataChanged(false, true, false); } + return u; } @Override diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java index f748f948e8..0585a4187d 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java @@ -897,6 +897,7 @@ public int getColor(int key) { private boolean premiumInvoiceBot; private boolean showScrollToMessageError; private int startLoadFromMessageId; + private int startReplyTo; private int startLoadFromDate; private int startLoadFromMessageIdSaved; private int startLoadFromMessageOffset = Integer.MAX_VALUE; @@ -2546,6 +2547,7 @@ public boolean onFragmentCreate() { textToSet = arguments.getString("start_text"); premiumInvoiceBot = arguments.getBoolean("premium_bot", false); startLoadFromMessageId = arguments.getInt("message_id", 0); + startReplyTo = arguments.getInt("reply_to", 0); startLoadFromDate = arguments.getInt("start_from_date", 0); startFromVideoTimestamp = arguments.getInt("video_timestamp", -1); threadUnreadMessagesCount = arguments.getInt("unread_count", 0); @@ -20801,6 +20803,13 @@ public void didReceivedNotification(int id, int account, final Object... args) { if (chatMode == MODE_SEARCH) { updateSearchUpDownButtonVisibility(true); } + if (startReplyTo != 0) { + MessageObject msg = messagesDict[0].get(startReplyTo); + if (msg != null) { + showFieldPanelForReply(msg); + startReplyTo = 0; + } + } } else if (id == NotificationCenter.invalidateMotionBackground) { if (chatListView != null) { chatListView.invalidateViews(); @@ -38159,7 +38168,7 @@ public void didPressImage(ChatMessageCell cell, float x, float y) { } if (!handled) { try { - AndroidUtilities.openForView(message, getParentActivity(), themeDelegate); + AndroidUtilities.openForView(message, getParentActivity(), themeDelegate, false); } catch (Exception e) { FileLog.e(e); alertUserOpenError(message); @@ -41714,7 +41723,22 @@ public void didLongPressLink(ChatMessageCell cell, MessageObject messageObject, dialog.setItemOptions(options); if (span instanceof URLSpanReplacement) { - SpannableString s = new SpannableString(((URLSpanReplacement) span).getURL()); + String formattedUrl = ((URLSpanReplacement) span).getURL(); + try { + try { + Uri uri = Uri.parse(formattedUrl); + formattedUrl = Browser.replaceHostname(uri, IDN.toUnicode(uri.getHost(), IDN.ALLOW_UNASSIGNED)); + } catch (Exception e) { + FileLog.e(e, false); + } + formattedUrl = URLDecoder.decode(formattedUrl.replaceAll("\\+", "%2b"), "UTF-8"); + } catch (Exception e) { + FileLog.e(e); + } + if (formattedUrl.length() > 204) { + formattedUrl = formattedUrl.substring(0, 204) + "…"; + } + SpannableString s = new SpannableString(formattedUrl); s.setSpan(span, 0, s.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); dialog.setScrim(cell, span, s); } else { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ThanosEffect.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ThanosEffect.java index d4e202c331..bda23cf88d 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ThanosEffect.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ThanosEffect.java @@ -388,8 +388,10 @@ private void resizeInternal(int width, int height) { public void kill() { if (!alive) { + FileLog.d("ThanosEffect: kill failed, already dead"); return; } + FileLog.d("ThanosEffect: kill"); try { Handler handler = getHandler(); if (handler != null) { @@ -400,8 +402,10 @@ public void kill() { private void killInternal() { if (!alive) { + FileLog.d("ThanosEffect: killInternal failed, already dead"); return; } + FileLog.d("ThanosEffect: killInternal"); alive = false; for (int i = 0; i < pendingAnimations.size(); ++i) { Animation animation = pendingAnimations.get(i); @@ -454,11 +458,13 @@ private void init() { eglDisplay = egl.eglGetDisplay(EGL14.EGL_DEFAULT_DISPLAY); if (eglDisplay == egl.EGL_NO_DISPLAY) { + FileLog.e("ThanosEffect: eglDisplay == egl.EGL_NO_DISPLAY"); killInternal(); return; } int[] version = new int[2]; if (!egl.eglInitialize(eglDisplay, version)) { + FileLog.e("ThanosEffect: failed eglInitialize"); killInternal(); return; } @@ -474,6 +480,7 @@ private void init() { EGLConfig[] eglConfigs = new EGLConfig[1]; int[] numConfigs = new int[1]; if (!egl.eglChooseConfig(eglDisplay, configAttributes, eglConfigs, 1, numConfigs)) { + FileLog.e("ThanosEffect: failed eglChooseConfig"); kill(); return; } @@ -485,17 +492,20 @@ private void init() { }; eglContext = egl.eglCreateContext(eglDisplay, eglConfig, egl.EGL_NO_CONTEXT, contextAttributes); if (eglContext == null) { + FileLog.e("ThanosEffect: eglContext == null"); killInternal(); return; } eglSurface = egl.eglCreateWindowSurface(eglDisplay, eglConfig, surfaceTexture, null); if (eglSurface == null) { + FileLog.e("ThanosEffect: eglSurface == null"); killInternal(); return; } if (!egl.eglMakeCurrent(eglDisplay, eglSurface, eglSurface, eglContext)) { + FileLog.e("ThanosEffect: failed eglMakeCurrent"); killInternal(); return; } @@ -503,6 +513,7 @@ private void init() { int vertexShader = GLES31.glCreateShader(GLES31.GL_VERTEX_SHADER); int fragmentShader = GLES31.glCreateShader(GLES31.GL_FRAGMENT_SHADER); if (vertexShader == 0 || fragmentShader == 0) { + FileLog.e("ThanosEffect: vertexShader == 0 || fragmentShader == 0"); killInternal(); return; } @@ -527,6 +538,7 @@ private void init() { } drawProgram = GLES31.glCreateProgram(); if (drawProgram == 0) { + FileLog.e("ThanosEffect: drawProgram == 0"); killInternal(); return; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java b/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java index 8a6ffb37f6..da332193ef 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java @@ -2032,6 +2032,7 @@ public interface PageBlocksAdapter { private final static int gallery_menu_paint = 20; private final static int gallery_menu_translate = 21; private final static int gallery_menu_hide_translation = 22; + private final static int gallery_menu_reply = 23; private final static int gallery_menu_copy = 100; private final static int gallery_menu_set_photo = 101; @@ -4971,7 +4972,7 @@ public void onItemClick(int id) { ((LaunchActivity) parentActivity).presentFragment(mediaActivity, false, true); } } - } else if (id == gallery_menu_showinchat) { + } else if (id == gallery_menu_showinchat || id == gallery_menu_reply) { if (currentMessageObject == null) { return; } @@ -4993,6 +4994,9 @@ public void onItemClick(int id) { args.putLong("chat_id", -dialogId); } args.putInt("message_id", currentMessageObject.getId()); + if (id == gallery_menu_reply) { + args.putInt("reply_to", currentMessageObject.getId()); + } NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.closeChats); if (parentActivity instanceof LaunchActivity) { LaunchActivity launchActivity = (LaunchActivity) parentActivity; @@ -5327,7 +5331,7 @@ public void onItemClick(int id) { Browser.openUrl(parentActivity, MessageObject.getMedia(currentMessageObject.messageOwner).webpage.url); closePhoto(false, false); } else if (currentMessageObject != null) { - if (AndroidUtilities.openForView(currentMessageObject, parentActivity, resourcesProvider)) { + if (AndroidUtilities.openForView(currentMessageObject, parentActivity, resourcesProvider, currentMessageObject.isVideo() || currentMessageObject.isPhoto() || currentMessageObject.isSticker())) { closePhoto(false, false); } else { showDownloadAlert(); @@ -5683,6 +5687,7 @@ public void onSpeedSelected(float speed, boolean isFinal, boolean closeMenu) { menuItem.addSubItem(gallery_menu_savegif, R.drawable.msg_gif, LocaleController.getString("SaveToGIFs", R.string.SaveToGIFs)).setColors(0xfffafafa, 0xfffafafa); menuItem.addSubItem(gallery_menu_showinchat, R.drawable.msg_message, LocaleController.getString("ShowInChat", R.string.ShowInChat)).setColors(0xfffafafa, 0xfffafafa); menuItem.addSubItem(gallery_menu_masks2, R.drawable.msg_sticker, LocaleController.getString("ShowStickers", R.string.ShowStickers)).setColors(0xfffafafa, 0xfffafafa); + menuItem.addSubItem(gallery_menu_reply, R.drawable.menu_reply, LocaleController.getString(R.string.Reply)).setColors(0xfffafafa, 0xfffafafa); menuItem.addSubItem(gallery_menu_share, R.drawable.msg_shareout, LocaleController.getString("ShareFile", R.string.ShareFile)).setColors(0xfffafafa, 0xfffafafa); menuItem.addSubItem(gallery_menu_save, R.drawable.msg_gallery, LocaleController.getString("SaveToGallery", R.string.SaveToGallery)).setColors(0xfffafafa, 0xfffafafa); menuItem.addSubItem(gallery_menu_copy, R.drawable.msg_copy, LocaleController.getString("CopyPhoto", R.string.CopyPhoto)).setColors(0xfffafafa, 0xfffafafa); @@ -9639,7 +9644,7 @@ public void onError(VideoPlayer player, Exception e) { builder.setMessage(LocaleController.getString("CantPlayVideo", R.string.CantPlayVideo)); builder.setPositiveButton(LocaleController.getString("Open", R.string.Open), (dialog, which) -> { try { - AndroidUtilities.openForView(currentMessageObject, parentActivity, resourcesProvider); + AndroidUtilities.openForView(currentMessageObject, parentActivity, resourcesProvider, true); closePhoto(false, false); } catch (Exception e1) { FileLog.e(e1); @@ -12810,6 +12815,7 @@ private void onPhotoShow(final MessageObject messageObject, final TLRPC.FileLoca dateOverride = 0; menuItem.hideSubItem(gallery_menu_showall); menuItem.hideSubItem(gallery_menu_showinchat); + menuItem.hideSubItem(gallery_menu_reply); menuItem.hideSubItem(gallery_menu_share); menuItem.hideSubItem(gallery_menu_openin); menuItem.hideSubItem(gallery_menu_savegif); @@ -12956,6 +12962,17 @@ private void onPhotoShow(final MessageObject messageObject, final TLRPC.FileLoca imagesByIds[0].put(messageObject.getId(), messageObject); if (parentChatActivity == null || !parentChatActivity.isThreadChat() && parentChatActivity.getChatMode() != ChatActivity.MODE_SAVED && parentChatActivity.getChatMode() != ChatActivity.MODE_QUICK_REPLIES) { menuItem.showSubItem(gallery_menu_showinchat); + boolean canWrite = true; + long dialogId = messageObject.getDialogId(); + if (dialogId < 0) { + TLRPC.Chat chat = MessagesController.getInstance(messageObject.currentAccount).getChat(-dialogId); + canWrite = ChatObject.canWriteToChat(chat); + } + if (canWrite) { + menuItem.showSubItem(gallery_menu_reply); + } else { + menuItem.hideSubItem(gallery_menu_reply); + } menuItem.showSubItem(gallery_menu_showall); } setItemVisible(sendItem, !noforwards, false); @@ -13028,6 +13045,17 @@ private void onPhotoShow(final MessageObject messageObject, final TLRPC.FileLoca startOffset = object.starOffset; } menuItem.showSubItem(gallery_menu_showinchat); + boolean canWrite = true; + long dialogId = openingObject.getDialogId(); + if (dialogId < 0) { + TLRPC.Chat chat = MessagesController.getInstance(openingObject.currentAccount).getChat(-dialogId); + canWrite = ChatObject.canWriteToChat(chat); + } + if (canWrite) { + menuItem.showSubItem(gallery_menu_reply); + } else { + menuItem.hideSubItem(gallery_menu_reply); + } if (openingObject.canForwardMessage() && !noforwards) { setItemVisible(sendNoQuoteItem, true, false); setItemVisible(sendItem, true, false); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stars/BotStarsActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/Stars/BotStarsActivity.java index c58c090aa6..119ef10611 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stars/BotStarsActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stars/BotStarsActivity.java @@ -30,6 +30,7 @@ import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; +import android.widget.Space; import android.widget.TextView; import androidx.annotation.NonNull; @@ -116,7 +117,7 @@ public class BotStarsActivity extends BaseFragment implements NotificationCenter private boolean balanceEditTextAll = true; private long balanceEditTextValue; private EditTextBoldCursor balanceEditText; - private ButtonWithCounterView balanceButton; + private ButtonWithCounterView balanceButton, adsButton; private ColoredImageSpan[] starRef = new ColoredImageSpan[1]; private int shakeDp = 4; @@ -241,7 +242,7 @@ public void beforeTextChanged(CharSequence s, int start, int count, int after) { public void onTextChanged(CharSequence s, int start, int before, int count) {} @Override public void afterTextChanged(Editable s) { - long balance = BotStarsController.getInstance(currentAccount).getBalance(bot_id); + long balance = BotStarsController.getInstance(currentAccount).getAvailableBalance(bot_id); balanceEditTextValue = TextUtils.isEmpty(s) ? 0 : Long.parseLong(s.toString()); if (balanceEditTextValue > balance) { balanceEditTextValue = balance; @@ -274,37 +275,46 @@ public void afterTextChanged(Editable s) { return false; }); balanceLayout.addView(balanceEditTextContainer, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL, 18, 14, 18, 2)); + balanceEditTextContainer.setVisibility(View.GONE); - final CircularProgressDrawable circularProgressDrawable = new CircularProgressDrawable(dp(15), dpf2(2), Theme.getColor(Theme.key_featuredStickers_buttonText, getResourceProvider())) { - @Override - public int getIntrinsicWidth() { - return dp(24); - } - @Override - public int getIntrinsicHeight() { - return dp(24); - } - }; - circularProgressDrawable.setBounds(0, 0, dp(24), dp(24)); + LinearLayout balanceButtonsLayout = new LinearLayout(context); + balanceButtonsLayout.setOrientation(LinearLayout.HORIZONTAL); balanceButton = new ButtonWithCounterView(context, getResourceProvider()) { - @Override - protected boolean verifyDrawable(@NonNull Drawable who) { - return who == circularProgressDrawable || super.verifyDrawable(who); - } - @Override protected boolean subTextSplitToWords() { return false; } }; balanceButton.setEnabled(MessagesController.getInstance(currentAccount).channelRevenueWithdrawalEnabled); - circularProgressDrawable.setCallback(balanceButton); - balanceButton.setText(getString(R.string.BotStarsButtonWithdrawAll), false); + balanceButton.setText(getString(R.string.BotStarsButtonWithdrawShortAll), false); balanceButton.setOnClickListener(v -> { withdraw(); }); - balanceLayout.addView(balanceButton, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 48, Gravity.TOP | Gravity.FILL_HORIZONTAL, 18, 13, 18, 0)); + + adsButton = new ButtonWithCounterView(context, getResourceProvider()); + adsButton.setEnabled(true); + adsButton.setText(getString(R.string.MonetizationStarsAds), false); + adsButton.setOnClickListener(v -> { + if (!v.isEnabled() || adsButton.isLoading()) return; + + adsButton.setLoading(true); + TLRPC.TL_payments_getStarsRevenueAdsAccountUrl req = new TLRPC.TL_payments_getStarsRevenueAdsAccountUrl(); + req.peer = MessagesController.getInstance(currentAccount).getInputPeer(bot_id); + ConnectionsManager.getInstance(currentAccount).sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + if (res instanceof TLRPC.TL_payments_starsRevenueAdsAccountUrl) { + Browser.openUrl(context, ((TLRPC.TL_payments_starsRevenueAdsAccountUrl) res).url); + } + AndroidUtilities.runOnUIThread(() -> { + adsButton.setLoading(false); + }, 1000); + })); + }); + + balanceButtonsLayout.addView(balanceButton, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 48, 1, Gravity.FILL)); + balanceButtonsLayout.addView(new Space(context), LayoutHelper.createLinear(8, 48, 0, Gravity.FILL)); + balanceButtonsLayout.addView(adsButton, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 48, 1, Gravity.FILL)); + balanceLayout.addView(balanceButtonsLayout, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 48, Gravity.TOP | Gravity.FILL_HORIZONTAL, 18, 13, 18, 0)); listView = new UniversalRecyclerView(this, this::fillItems, this::onItemClick, this::onItemLongClick); @@ -330,7 +340,7 @@ private void withdraw() { Drawable starDrawable = getContext().getResources().getDrawable(R.drawable.star_small_inner).mutate(); BulletinFactory.of(this).createSimpleBulletin(starDrawable, AndroidUtilities.replaceSingleTag(LocaleController.formatPluralString("BotStarsWithdrawMinLimit", (int) getMessagesController().starsRevenueWithdrawalMin), () -> { Bulletin.hideVisible(); - long balance = BotStarsController.getInstance(currentAccount).getBalance(bot_id); + long balance = BotStarsController.getInstance(currentAccount).getAvailableBalance(bot_id); if (balance < getMessagesController().starsRevenueWithdrawalMin) { balanceEditTextAll = true; balanceEditTextValue = balance; @@ -407,6 +417,7 @@ private void setBalance(long crypto_amount, int blockedUntil) { } balanceTitle.setText(ssb); balanceSubtitle.setText("≈" + BillingController.getInstance().formatCurrency(amount, "USD")); + balanceEditTextContainer.setVisibility(amount > 0 ? View.VISIBLE : View.GONE); if (balanceEditTextAll) { balanceEditTextIgnore = true; balanceEditText.setText(Long.toString(balanceEditTextValue = crypto_amount)); @@ -426,7 +437,7 @@ private void setBalance(long crypto_amount, int blockedUntil) { final int now = getConnectionsManager().getCurrentTime(); balanceButton.setEnabled(balanceEditTextValue > 0 || balanceBlockedUntil > now); if (now < balanceBlockedUntil) { - balanceButton.setText(getString(R.string.BotStarsButtonWithdrawUntil), true); + balanceButton.setText(getString(R.string.BotStarsButtonWithdrawShortUntil), true); if (lock == null) { lock = new SpannableStringBuilder("l"); @@ -446,7 +457,7 @@ private void setBalance(long crypto_amount, int blockedUntil) { AndroidUtilities.runOnUIThread(this.setBalanceButtonText, 1000); } else { balanceButton.setSubText(null, true); - balanceButton.setText(StarsIntroActivity.replaceStars(balanceEditTextAll ? getString(R.string.BotStarsButtonWithdrawAll) : LocaleController.formatPluralStringComma("BotStarsButtonWithdraw", (int) balanceEditTextValue, ' '), starRef), true); + balanceButton.setText(StarsIntroActivity.replaceStars(balanceEditTextAll ? getString(R.string.BotStarsButtonWithdrawShortAll) : LocaleController.formatPluralStringComma("BotStarsButtonWithdrawShort", (int) balanceEditTextValue, ' '), starRef), true); } }; @@ -492,7 +503,8 @@ private void checkStats() { rate = stats.usd_rate; revenueChartData = StatisticActivity.createViewData(stats.revenue_graph, getString(R.string.BotStarsChartRevenue), 2); if (revenueChartData != null && revenueChartData.chartData != null && revenueChartData.chartData.lines != null && !revenueChartData.chartData.lines.isEmpty() && revenueChartData.chartData.lines.get(0) != null) { - revenueChartData.chartData.lines.get(0).colorKey = Theme.key_statisticChartLine_golden; + revenueChartData.showAll = true; + revenueChartData.chartData.lines.get(0).colorKey = Theme.key_color_yellow; revenueChartData.chartData.yRate = (float) (1.0 / rate / 100.0); } setBalance(stats.status.available_balance, stats.status.next_withdrawal_at); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stars/BotStarsController.java b/TMessagesProj/src/main/java/org/telegram/ui/Stars/BotStarsController.java index 72c46cd5d3..958f47810c 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stars/BotStarsController.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stars/BotStarsController.java @@ -79,6 +79,11 @@ public long getBalance(long bot_id) { return botStats == null ? 0 : botStats.status.current_balance; } + public long getAvailableBalance(long bot_id) { + TLRPC.TL_payments_starsRevenueStats botStats = getRevenueStats(bot_id); + return botStats == null ? 0 : botStats.status.available_balance; + } + public boolean isBalanceAvailable(long bot_id) { return getRevenueStats(bot_id) != null; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarsController.java b/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarsController.java index ce998233a2..aa6c2f677b 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarsController.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarsController.java @@ -677,7 +677,7 @@ private void payAfterConfirmed(MessageObject messageObject, TLRPC.InputInvoice i b.createSimpleBulletin(starDrawable, getString(R.string.StarsPurchaseCompleted), AndroidUtilities.replaceTags(formatPluralString("StarsPurchaseCompletedInfo", (int) stars, product, bot))).show(); } if (LaunchActivity.instance != null && LaunchActivity.instance.getFireworksOverlay() != null) { - LaunchActivity.instance.getFireworksOverlay().start(); + LaunchActivity.instance.getFireworksOverlay().start(true); } invalidateTransactions(true); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/StatisticActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/StatisticActivity.java index e8106ecae0..9abad43c63 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/StatisticActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/StatisticActivity.java @@ -1636,7 +1636,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { } currentW += getChildAt(i).getMeasuredWidth(); } - setMeasuredDimension(getMeasuredWidth(), firstH + currentH + dp(16)); + setMeasuredDimension(getMeasuredWidth(), getChildCount() == 0 ? 0 : firstH + currentH + dp(16)); } @Override @@ -1999,7 +1999,11 @@ public void updateData(ChartViewData viewData, boolean enterTransition) { progressView.setVisibility(View.GONE); } - chartView.setData(viewData.chartData); + if (chartView.setData(viewData.chartData)) { + if (viewData.showAll) { + chartView.pickerDelegate.set(0f, 1f); + } + } chartHeaderView.setUseWeekInterval(viewData.useWeekFormat); chartView.legendSignatureView.setUseWeek(viewData.useWeekFormat); @@ -2191,6 +2195,7 @@ public static class ChartViewData { ChartData childChartData; String token; String zoomToken; + public boolean showAll; final int graphType; final String title; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoryViewer.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoryViewer.java index 9e79edbd75..e40df11ae8 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoryViewer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoryViewer.java @@ -2185,21 +2185,27 @@ private void startOpenAnimation() { openCloseAnimator = ValueAnimator.ofFloat(0, 1f); openCloseAnimator.addUpdateListener(animation -> { progressToOpen = (float) animation.getAnimatedValue(); - containerView.checkHwAcceleration(progressToOpen); + if (containerView != null) { + containerView.checkHwAcceleration(progressToOpen); + } checkNavBarColor(); if (windowView != null) { windowView.invalidate(); } }); locker.lock(); - containerView.enableHwAcceleration(); + if (containerView != null) { + containerView.enableHwAcceleration(); + } openCloseAnimator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { progressToOpen = 1f; checkNavBarColor(); animationInProgress = false; - containerView.disableHwAcceleration(); + if (containerView != null) { + containerView.disableHwAcceleration(); + } if (windowView != null) { windowView.invalidate(); } @@ -2221,42 +2227,43 @@ public void onAnimationEnd(Animator animation) { showViewsAfterOpening = false; openViews(); } else if (!SharedConfig.storiesIntroShown) { - if (storiesIntro == null) { + if (storiesIntro == null && containerView != null) { storiesIntro = new StoriesIntro(containerView.getContext(), windowView); storiesIntro.setAlpha(0f); containerView.addView(storiesIntro); } - - storiesIntro.setOnClickListener(v -> { + if (storiesIntro != null) { + storiesIntro.setOnClickListener(v -> { + storiesIntro.animate() + .alpha(0f) + .setDuration(150L) + .setListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + super.onAnimationEnd(animation); + if (storiesIntro != null) { + storiesIntro.stopAnimation(); + containerView.removeView(storiesIntro); + } + storiesIntro = null; + updatePlayingMode(); + } + }) + .start(); + }); storiesIntro.animate() - .alpha(0f) + .alpha(1f) .setDuration(150L) .setListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); if (storiesIntro != null) { - storiesIntro.stopAnimation(); - containerView.removeView(storiesIntro); + storiesIntro.startAnimation(true); } - storiesIntro = null; - updatePlayingMode(); } - }) - .start(); - }); - storiesIntro.animate() - .alpha(1f) - .setDuration(150L) - .setListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - super.onAnimationEnd(animation); - if (storiesIntro != null) { - storiesIntro.startAnimation(true); - } - } - }).start(); + }).start(); + } SharedConfig.setStoriesIntroShown(true); } @@ -2297,7 +2304,9 @@ public void instantClose() { } transitionViewHolder.storyImage = null; transitionViewHolder.avatarImage = null; - containerView.disableHwAcceleration(); + if (containerView != null) { + containerView.disableHwAcceleration(); + } locker.unlock(); if (currentPlayerScope != null) { currentPlayerScope.invalidate(); @@ -2349,17 +2358,21 @@ private void startCloseAnimation(boolean backAnimation) { if (openCloseAnimator == null) { return; } - containerView.enableHwAcceleration(); + if (containerView != null) { + containerView.enableHwAcceleration(); + } openCloseAnimator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); - containerView.disableHwAcceleration(); + if (containerView != null) { + containerView.disableHwAcceleration(); + } checkNavBarColor(); locker.unlock(); if (storiesIntro != null) { storiesIntro.stopAnimation(); - containerView.removeView(storiesIntro); + AndroidUtilities.removeFromParent(storiesIntro); storiesIntro = null; } if (transitionViewHolder.avatarImage != null) { @@ -2621,7 +2634,9 @@ public void setSelfStoriesViewsOffset(float currentTranslation) { if (peerStoriesView != null) { peerStoriesView.invalidate(); } - containerView.invalidate(); + if (containerView != null) { + containerView.invalidate(); + } } public void openViews() { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotBiometry.java b/TMessagesProj/src/main/java/org/telegram/ui/bots/BotBiometry.java index ee9a4dcb72..c9994f5b57 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotBiometry.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/bots/BotBiometry.java @@ -139,7 +139,7 @@ public void requestToken(String reason, Utilities.Callback2 whe public void updateToken(String reason, String token, Utilities.Callback whenDone) { prompt(reason, false, token, result -> { - boolean success = true; + boolean success = result != null; if (result != null) { try { BiometricPrompt.CryptoObject cryptoObject = result.getCryptoObject(); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewAttachedSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewAttachedSheet.java index 0d7246366b..25d3fea52b 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewAttachedSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewAttachedSheet.java @@ -250,9 +250,6 @@ public boolean restoreState(BaseFragment fragment, BottomSheetTabs.WebTabData ta if (backDrawable != null) { backDrawable.setRotation(backButtonShown ? 0f : 1f, false); } - if (settingsItem != null) { - settingsItem.setVisibility(tab.settings ? View.VISIBLE : View.GONE); - } if (tab.main != null) { setMainButton(tab.main); } @@ -288,6 +285,9 @@ public boolean restoreState(BaseFragment fragment, BottomSheetTabs.WebTabData ta tab.props.responseTime = 0; } requestWebView(fragment, tab.props); + if (settingsItem != null) { + settingsItem.setVisibility(tab.settings ? View.VISIBLE : View.GONE); + } return true; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewSheet.java index a468f3df86..97235786ba 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewSheet.java @@ -250,6 +250,7 @@ public BottomSheetTabs.WebTabData saveState() { tab.backButton = backButtonShown; tab.main = mainButtonSettings; tab.confirmDismiss = needCloseConfirmation; + tab.settings = settingsItem != null && settingsItem.getVisibility() == View.VISIBLE; BotWebViewContainer.MyWebView webView = webViewContainer == null ? null : webViewContainer.getWebView(); if (webView != null) { webViewContainer.preserveWebView(); @@ -313,6 +314,9 @@ public boolean restoreState(BaseFragment fragment, BottomSheetTabs.WebTabData ta tab.props.responseTime = 0; } requestWebView(fragment, tab.props); + if (settingsItem != null) { + settingsItem.setVisibility(tab.settings ? View.VISIBLE : View.GONE); + } return true; } diff --git a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/helpers/ApkInstaller.java b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/helpers/ApkInstaller.java index fcd8ea3f82..81b2efd71a 100644 --- a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/helpers/ApkInstaller.java +++ b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/helpers/ApkInstaller.java @@ -81,7 +81,7 @@ private static void installapk(Activity context, File apk) { dialog = null; } AlertsCreator.createSimpleAlert(context, LocaleController.getString(R.string.ErrorOccurred) + "\n" + e.getLocalizedMessage()).show(); - AndroidUtilities.openForView(apk, "install.apk", "application/vnd.android.package-archive", context, null); + AndroidUtilities.openForView(apk, "install.apk", "application/vnd.android.package-archive", context, null, false); } } diff --git a/TMessagesProj/src/main/res/values/strings.xml b/TMessagesProj/src/main/res/values/strings.xml index 5ca34bfe2b..6f6e9145b8 100644 --- a/TMessagesProj/src/main/res/values/strings.xml +++ b/TMessagesProj/src/main/res/values/strings.xml @@ -9024,6 +9024,10 @@ https://telegram.org/privacy Withdraw via Fragment Withdraw all via Fragment + Withdraw all + Withdraw ⭐️%d + Withdraw ⭐️%d + Withdraw Enter amount to withdraw Withdraw ⭐️%d via Fragment Withdraw ⭐️%d via Fragment