From f121f7bdf7b4c307239f239191c7b26f062baf56 Mon Sep 17 00:00:00 2001 From: "nick." <64551534+null-nick@users.noreply.github.com> Date: Sat, 25 Jul 2026 12:15:09 +0200 Subject: [PATCH 1/2] Add cancel action and live progress notification for video upload Bump compileSdk to 36 and androidx.core to 1.17.0 across all app modules for Notification.ProgressStyle support. --- TMessagesProj/build.gradle | 6 ++--- TMessagesProj/src/main/AndroidManifest.xml | 3 +++ .../messenger/CancelVideoUploadReceiver.java | 21 +++++++++++++++ .../messenger/VideoEncodingService.java | 26 ++++++++++++++++--- TMessagesProj_App/build.gradle | 4 +-- TMessagesProj_AppHockeyApp/build.gradle | 4 +-- TMessagesProj_AppHuawei/build.gradle | 4 +-- TMessagesProj_AppStandalone/build.gradle | 4 +-- TMessagesProj_AppTests/build.gradle | 4 +-- 9 files changed, 60 insertions(+), 16 deletions(-) create mode 100644 TMessagesProj/src/main/java/org/telegram/messenger/CancelVideoUploadReceiver.java diff --git a/TMessagesProj/build.gradle b/TMessagesProj/build.gradle index 61a65305789..fbaef363213 100644 --- a/TMessagesProj/build.gradle +++ b/TMessagesProj/build.gradle @@ -17,7 +17,7 @@ configurations.all { } dependencies { - implementation 'androidx.core:core:1.16.0' + implementation 'androidx.core:core:1.17.0' implementation 'androidx.palette:palette:1.0.0' implementation 'androidx.exifinterface:exifinterface:1.3.6' implementation 'androidx.dynamicanimation:dynamicanimation:1.0.0' @@ -83,8 +83,8 @@ dependencies { def isWindows = String.valueOf(DefaultNativePlatform.currentOperatingSystem.toFamilyName() == OperatingSystemFamily.WINDOWS) android { - compileSdkVersion 35 - buildToolsVersion '35.0.0' + compileSdkVersion 36 + buildToolsVersion '36.0.0' ndkVersion "27.2.12479018" sourceSets.main.jniLibs.srcDirs = ['./jni/'] diff --git a/TMessagesProj/src/main/AndroidManifest.xml b/TMessagesProj/src/main/AndroidManifest.xml index 6f6d377d029..0c121bc79e0 100644 --- a/TMessagesProj/src/main/AndroidManifest.xml +++ b/TMessagesProj/src/main/AndroidManifest.xml @@ -23,6 +23,7 @@ + @@ -581,6 +582,8 @@ + + diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/CancelVideoUploadReceiver.java b/TMessagesProj/src/main/java/org/telegram/messenger/CancelVideoUploadReceiver.java new file mode 100644 index 00000000000..8168a9354bd --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/messenger/CancelVideoUploadReceiver.java @@ -0,0 +1,21 @@ +/* + * This is the source code of Telegram for Android v. 5.x.x. + * It is licensed under GNU GPL v. 2 or later. + * You should have received a copy of the license in this archive (see LICENSE). + * + * Copyright Nikolai Kudashov, 2013-2018. + */ + +package org.telegram.messenger; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +public class CancelVideoUploadReceiver extends BroadcastReceiver { + + @Override + public void onReceive(Context context, Intent intent) { + VideoEncodingService.cancelCurrent(); + } +} diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/VideoEncodingService.java b/TMessagesProj/src/main/java/org/telegram/messenger/VideoEncodingService.java index 833d984c311..404d56bc899 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/VideoEncodingService.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/VideoEncodingService.java @@ -8,6 +8,7 @@ package org.telegram.messenger; +import android.app.PendingIntent; import android.app.Service; import android.content.Intent; import android.os.IBinder; @@ -18,6 +19,7 @@ public class VideoEncodingService extends Service implements NotificationCenter.NotificationCenterDelegate { private NotificationCompat.Builder builder; + private NotificationCompat.ProgressStyle progressStyle; private MediaController.VideoConvertMessage currentMessage; private static VideoEncodingService instance; @@ -54,6 +56,12 @@ public static void stop() { } } + public static void cancelCurrent() { + if (instance != null && instance.currentMessage != null) { + SendMessagesHelper.getInstance(instance.currentAccount).cancelSendingMessage(instance.currentMessage.messageObject); + } + } + public IBinder onBind(Intent arg2) { return null; } @@ -87,7 +95,11 @@ public void didReceivedNotification(int id, int account, Object... args) { float progress = Math.min(1f, loadedSize / (float) totalSize); Boolean enc = (Boolean) args[3]; int currentProgress = (int) (progress * 100); - builder.setProgress(100, currentProgress, currentProgress == 0); + if (progressStyle != null) { + progressStyle.setProgress(currentProgress); + } else { + builder.setProgress(100, currentProgress, currentProgress == 0); + } updateNotification(); } } else if (id == NotificationCenter.fileUploaded || id == NotificationCenter.fileUploadFailed) { @@ -134,6 +146,12 @@ public int onStartCommand(Intent intent, int flags, int startId) { builder.setWhen(System.currentTimeMillis()); builder.setChannelId(NotificationsController.OTHER_NOTIFICATIONS_CHANNEL); builder.setContentTitle(LocaleController.getString(R.string.AppName)); + builder.setOngoing(true); + if (NotificationManagerCompat.from(ApplicationLoader.applicationContext).canPostPromotedNotifications()) { + builder.setRequestPromotedOngoing(true); + } + Intent cancelIntent = new Intent(ApplicationLoader.applicationContext, CancelVideoUploadReceiver.class); + builder.addAction(0, LocaleController.getString(R.string.Cancel), PendingIntent.getBroadcast(ApplicationLoader.applicationContext, 4, cancelIntent, PendingIntent.FLAG_MUTABLE | PendingIntent.FLAG_UPDATE_CURRENT)); } setCurrentMessage(videoConvertMessage); try { @@ -161,8 +179,10 @@ private void updateBuilderForMessage(MediaController.VideoConvertMessage videoCo builder.setTicker(LocaleController.getString(R.string.SendingVideo)); builder.setContentText(LocaleController.getString(R.string.SendingVideo)); } - int currentProgress = 0; - builder.setProgress(100, currentProgress, true); + progressStyle = new NotificationCompat.ProgressStyle() + .addProgressSegment(new NotificationCompat.ProgressStyle.Segment(100)) + .setProgress(0); + builder.setStyle(progressStyle); } private void setCurrentMessage(MediaController.VideoConvertMessage message) { diff --git a/TMessagesProj_App/build.gradle b/TMessagesProj_App/build.gradle index 2aa197cb3b8..48b72efa807 100644 --- a/TMessagesProj_App/build.gradle +++ b/TMessagesProj_App/build.gradle @@ -21,8 +21,8 @@ dependencies { } android { - compileSdkVersion 35 - buildToolsVersion '35.0.0' + compileSdkVersion 36 + buildToolsVersion '36.0.0' defaultConfig.applicationId = APP_PACKAGE diff --git a/TMessagesProj_AppHockeyApp/build.gradle b/TMessagesProj_AppHockeyApp/build.gradle index 84c1e415c50..07809fb84a7 100644 --- a/TMessagesProj_AppHockeyApp/build.gradle +++ b/TMessagesProj_AppHockeyApp/build.gradle @@ -34,8 +34,8 @@ dependencies { } android { - compileSdkVersion 35 - buildToolsVersion '35.0.0' + compileSdkVersion 36 + buildToolsVersion '36.0.0' defaultConfig.applicationId = APP_PACKAGE diff --git a/TMessagesProj_AppHuawei/build.gradle b/TMessagesProj_AppHuawei/build.gradle index a968b466b49..3bec10ab41e 100644 --- a/TMessagesProj_AppHuawei/build.gradle +++ b/TMessagesProj_AppHuawei/build.gradle @@ -29,8 +29,8 @@ dependencies { } android { - compileSdkVersion 35 - buildToolsVersion '35.0.0' + compileSdkVersion 36 + buildToolsVersion '36.0.0' defaultConfig.applicationId = APP_PACKAGE diff --git a/TMessagesProj_AppStandalone/build.gradle b/TMessagesProj_AppStandalone/build.gradle index 21cfc7f690f..e1b98047db6 100644 --- a/TMessagesProj_AppStandalone/build.gradle +++ b/TMessagesProj_AppStandalone/build.gradle @@ -23,8 +23,8 @@ dependencies { } android { - compileSdkVersion 35 - buildToolsVersion '35.0.0' + compileSdkVersion 36 + buildToolsVersion '36.0.0' defaultConfig.applicationId = APP_PACKAGE diff --git a/TMessagesProj_AppTests/build.gradle b/TMessagesProj_AppTests/build.gradle index 914fb88e1a0..e300982e043 100644 --- a/TMessagesProj_AppTests/build.gradle +++ b/TMessagesProj_AppTests/build.gradle @@ -29,8 +29,8 @@ dependencies { } android { - compileSdkVersion 35 - buildToolsVersion '35.0.0' + compileSdkVersion 36 + buildToolsVersion '36.0.0' defaultConfig.applicationId = APP_PACKAGE From 9e9ee30856f3be80dc45ea3a8f42dd898961d98b Mon Sep 17 00:00:00 2001 From: "nick." <64551534+null-nick@users.noreply.github.com> Date: Sat, 25 Jul 2026 12:15:49 +0200 Subject: [PATCH 2/2] Show sender name in video upload notification title --- .../java/org/telegram/messenger/VideoEncodingService.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/VideoEncodingService.java b/TMessagesProj/src/main/java/org/telegram/messenger/VideoEncodingService.java index 404d56bc899..18d08ed8c0e 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/VideoEncodingService.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/VideoEncodingService.java @@ -12,6 +12,7 @@ import android.app.Service; import android.content.Intent; import android.os.IBinder; +import android.text.TextUtils; import androidx.core.app.NotificationCompat; import androidx.core.app.NotificationManagerCompat; @@ -168,6 +169,9 @@ private void updateBuilderForMessage(MediaController.VideoConvertMessage videoCo if (videoConvertMessage == null) { return; } + String name = videoConvertMessage.messageObject != null ? DialogObject.getName(videoConvertMessage.currentAccount, videoConvertMessage.messageObject.getDialogId()) : null; + builder.setContentTitle(TextUtils.isEmpty(name) ? LocaleController.getString(R.string.AppName) : name); + boolean isGif = videoConvertMessage.messageObject != null && MessageObject.isGifMessage(videoConvertMessage.messageObject.messageOwner); if (videoConvertMessage.foregroundConversion) { builder.setTicker(LocaleController.getString(R.string.ConvertingVideo));