From dff98476dd51c1d5f41982d8fa7348454fa4618a Mon Sep 17 00:00:00 2001 From: DrKLO Date: Sun, 28 Sep 2014 17:37:26 +0400 Subject: [PATCH] Video convert queue, bug fixes --- TMessagesProj/build.gradle | 2 +- .../telegram/android/ContactsController.java | 2 +- .../org/telegram/android/ImageLoader.java | 72 +- .../org/telegram/android/MediaController.java | 621 ++++++++++++++- .../org/telegram/android/MessageObject.java | 12 + .../telegram/android/MessagesController.java | 6 +- .../telegram/android/NotificationCenter.java | 4 + .../telegram/android/SendMessagesHelper.java | 358 ++++++--- .../org/telegram/messenger/FileLoader.java | 19 +- .../messenger/FileUploadOperation.java | 43 +- .../java/org/telegram/messenger/TLRPC.java | 59 +- .../org/telegram/ui/Cells/ChatBaseCell.java | 6 +- .../org/telegram/ui/Cells/ChatMediaCell.java | 33 +- .../org/telegram/ui/Cells/DialogCell.java | 6 +- .../java/org/telegram/ui/ChatActivity.java | 135 ++-- .../java/org/telegram/ui/LaunchActivity.java | 173 ++++- .../org/telegram/ui/PhotoCropActivity.java | 1 + .../java/org/telegram/ui/PhotoViewer.java | 6 +- .../org/telegram/ui/VideoEditorActivity.java | 717 ++---------------- .../ui/Views/ActionBar/ActionBarLayout.java | 25 +- .../ui/Views/ActionBar/BaseFragment.java | 7 +- .../ui/Views/ChatActivityEnterView.java | 15 + .../java/org/telegram/ui/Views/EmojiView.java | 33 +- .../ui/Views/PagerSlidingTabStrip.java | 45 -- .../src/main/res/drawable-hdpi/doc_blue.png | Bin 2609 -> 1160 bytes .../src/main/res/drawable-hdpi/doc_green.png | Bin 2506 -> 1162 bytes .../main/res/drawable-hdpi/doccancel_b.png | Bin 0 -> 483 bytes .../res/drawable-hdpi/doccancel_b.png.png | Bin 1401 -> 0 bytes .../main/res/drawable-hdpi/doccancel_g.png | Bin 1414 -> 490 bytes .../src/main/res/drawable-hdpi/docload_b.png | Bin 0 -> 1952 bytes .../main/res/drawable-hdpi/docload_b.png.png | Bin 2577 -> 0 bytes .../src/main/res/drawable-hdpi/docload_g.png | Bin 0 -> 1952 bytes .../main/res/drawable-hdpi/docload_g.png.png | Bin 2581 -> 0 bytes .../src/main/res/drawable-hdpi/docpause_b.png | Bin 0 -> 260 bytes .../src/main/res/drawable-hdpi/docpause_g.png | Bin 0 -> 268 bytes .../main/res/drawable-hdpi/photocancel.png | Bin 2263 -> 1435 bytes .../src/main/res/drawable-hdpi/photogif.png | Bin 2408 -> 1659 bytes .../src/main/res/drawable-hdpi/photoload.png | Bin 2159 -> 1261 bytes .../src/main/res/drawable-hdpi/photopause.png | Bin 0 -> 1088 bytes .../src/main/res/drawable-hdpi/playvideo.png | Bin 2353 -> 1404 bytes .../src/main/res/drawable-ldpi/doc_blue.png | Bin 1699 -> 599 bytes .../src/main/res/drawable-ldpi/doc_green.png | Bin 1615 -> 613 bytes .../main/res/drawable-ldpi/doccancel_b.png | Bin 1265 -> 314 bytes .../main/res/drawable-ldpi/doccancel_g.png | Bin 1265 -> 299 bytes .../src/main/res/drawable-ldpi/docload_b.png | Bin 1728 -> 965 bytes .../src/main/res/drawable-ldpi/docload_g.png | Bin 1725 -> 964 bytes .../src/main/res/drawable-ldpi/docpause_b.png | Bin 0 -> 196 bytes .../src/main/res/drawable-ldpi/docpause_g.png | Bin 0 -> 203 bytes .../main/res/drawable-ldpi/photocancel.png | Bin 1762 -> 724 bytes .../src/main/res/drawable-ldpi/photogif.png | Bin 1719 -> 853 bytes .../src/main/res/drawable-ldpi/photoload.png | Bin 1503 -> 708 bytes .../src/main/res/drawable-ldpi/photopause.png | Bin 0 -> 578 bytes .../src/main/res/drawable-ldpi/playvideo.png | Bin 1628 -> 795 bytes .../src/main/res/drawable-mdpi/doc_blue.png | Bin 2037 -> 786 bytes .../src/main/res/drawable-mdpi/doc_green.png | Bin 1944 -> 803 bytes .../main/res/drawable-mdpi/doccancel_b.png | Bin 1248 -> 410 bytes .../main/res/drawable-mdpi/doccancel_g.png | Bin 1265 -> 406 bytes .../src/main/res/drawable-mdpi/docload_b.png | Bin 1964 -> 1226 bytes .../src/main/res/drawable-mdpi/docload_g.png | Bin 1969 -> 1227 bytes .../src/main/res/drawable-mdpi/docpause_b.png | Bin 0 -> 212 bytes .../src/main/res/drawable-mdpi/docpause_g.png | Bin 0 -> 223 bytes .../main/res/drawable-mdpi/photocancel.png | Bin 1948 -> 1062 bytes .../src/main/res/drawable-mdpi/photogif.png | Bin 1940 -> 1157 bytes .../src/main/res/drawable-mdpi/photoload.png | Bin 1798 -> 899 bytes .../src/main/res/drawable-mdpi/photopause.png | Bin 0 -> 781 bytes .../src/main/res/drawable-mdpi/playvideo.png | Bin 1887 -> 1069 bytes .../src/main/res/drawable-xhdpi/doc_blue.png | Bin 3293 -> 1511 bytes .../src/main/res/drawable-xhdpi/doc_green.png | Bin 3197 -> 1512 bytes .../main/res/drawable-xhdpi/doccancel_b.png | Bin 1536 -> 674 bytes .../main/res/drawable-xhdpi/doccancel_g.png | Bin 1519 -> 670 bytes .../src/main/res/drawable-xhdpi/docload_b.png | Bin 3130 -> 2521 bytes .../src/main/res/drawable-xhdpi/docload_g.png | Bin 3132 -> 2583 bytes .../main/res/drawable-xhdpi/docpause_b.png | Bin 0 -> 298 bytes .../main/res/drawable-xhdpi/docpause_g.png | Bin 0 -> 315 bytes .../main/res/drawable-xhdpi/photocancel.png | Bin 2691 -> 2089 bytes .../src/main/res/drawable-xhdpi/photogif.png | Bin 2791 -> 2237 bytes .../src/main/res/drawable-xhdpi/photoload.png | Bin 2523 -> 1797 bytes .../main/res/drawable-xhdpi/photopause.png | Bin 0 -> 1596 bytes .../src/main/res/drawable-xhdpi/playvideo.png | Bin 2801 -> 2180 bytes .../src/main/res/drawable-xxhdpi/doc_blue.png | Bin 5125 -> 2126 bytes .../main/res/drawable-xxhdpi/doc_green.png | Bin 5127 -> 2116 bytes .../main/res/drawable-xxhdpi/doccancel_b.png | Bin 1740 -> 831 bytes .../main/res/drawable-xxhdpi/doccancel_g.png | Bin 1738 -> 831 bytes .../main/res/drawable-xxhdpi/docload_b.png | Bin 4296 -> 3767 bytes .../main/res/drawable-xxhdpi/docload_g.png | Bin 4309 -> 3828 bytes .../main/res/drawable-xxhdpi/docpause_b.png | Bin 0 -> 415 bytes .../main/res/drawable-xxhdpi/docpause_g.png | Bin 0 -> 406 bytes .../main/res/drawable-xxhdpi/photocancel.png | Bin 3501 -> 2868 bytes .../src/main/res/drawable-xxhdpi/photogif.png | Bin 3679 -> 3191 bytes .../main/res/drawable-xxhdpi/photoload.png | Bin 3310 -> 2522 bytes .../main/res/drawable-xxhdpi/photopause.png | Bin 0 -> 2385 bytes .../main/res/drawable-xxhdpi/playvideo.png | Bin 3712 -> 3250 bytes .../src/main/res/values-ar/strings.xml | 1 + .../src/main/res/values-de/strings.xml | 1 + .../src/main/res/values-es/strings.xml | 1 + .../src/main/res/values-it/strings.xml | 1 + .../src/main/res/values-nl/strings.xml | 1 + .../src/main/res/values-pt-rBR/strings.xml | 1 + .../src/main/res/values-pt-rPT/strings.xml | 1 + TMessagesProj/src/main/res/values/attrs.xml | 18 - TMessagesProj/src/main/res/values/strings.xml | 3 +- 101 files changed, 1413 insertions(+), 1015 deletions(-) create mode 100644 TMessagesProj/src/main/res/drawable-hdpi/doccancel_b.png delete mode 100644 TMessagesProj/src/main/res/drawable-hdpi/doccancel_b.png.png create mode 100644 TMessagesProj/src/main/res/drawable-hdpi/docload_b.png delete mode 100644 TMessagesProj/src/main/res/drawable-hdpi/docload_b.png.png create mode 100644 TMessagesProj/src/main/res/drawable-hdpi/docload_g.png delete mode 100644 TMessagesProj/src/main/res/drawable-hdpi/docload_g.png.png create mode 100644 TMessagesProj/src/main/res/drawable-hdpi/docpause_b.png create mode 100644 TMessagesProj/src/main/res/drawable-hdpi/docpause_g.png mode change 100755 => 100644 TMessagesProj/src/main/res/drawable-hdpi/photocancel.png mode change 100755 => 100644 TMessagesProj/src/main/res/drawable-hdpi/photogif.png mode change 100755 => 100644 TMessagesProj/src/main/res/drawable-hdpi/photoload.png create mode 100644 TMessagesProj/src/main/res/drawable-hdpi/photopause.png create mode 100644 TMessagesProj/src/main/res/drawable-ldpi/docpause_b.png create mode 100644 TMessagesProj/src/main/res/drawable-ldpi/docpause_g.png mode change 100755 => 100644 TMessagesProj/src/main/res/drawable-ldpi/photocancel.png mode change 100755 => 100644 TMessagesProj/src/main/res/drawable-ldpi/photogif.png mode change 100755 => 100644 TMessagesProj/src/main/res/drawable-ldpi/photoload.png create mode 100644 TMessagesProj/src/main/res/drawable-ldpi/photopause.png create mode 100644 TMessagesProj/src/main/res/drawable-mdpi/docpause_b.png create mode 100644 TMessagesProj/src/main/res/drawable-mdpi/docpause_g.png mode change 100755 => 100644 TMessagesProj/src/main/res/drawable-mdpi/photocancel.png mode change 100755 => 100644 TMessagesProj/src/main/res/drawable-mdpi/photogif.png mode change 100755 => 100644 TMessagesProj/src/main/res/drawable-mdpi/photoload.png create mode 100644 TMessagesProj/src/main/res/drawable-mdpi/photopause.png create mode 100644 TMessagesProj/src/main/res/drawable-xhdpi/docpause_b.png create mode 100644 TMessagesProj/src/main/res/drawable-xhdpi/docpause_g.png mode change 100755 => 100644 TMessagesProj/src/main/res/drawable-xhdpi/photocancel.png mode change 100755 => 100644 TMessagesProj/src/main/res/drawable-xhdpi/photogif.png mode change 100755 => 100644 TMessagesProj/src/main/res/drawable-xhdpi/photoload.png create mode 100644 TMessagesProj/src/main/res/drawable-xhdpi/photopause.png create mode 100644 TMessagesProj/src/main/res/drawable-xxhdpi/docpause_b.png create mode 100644 TMessagesProj/src/main/res/drawable-xxhdpi/docpause_g.png mode change 100755 => 100644 TMessagesProj/src/main/res/drawable-xxhdpi/photocancel.png mode change 100755 => 100644 TMessagesProj/src/main/res/drawable-xxhdpi/photogif.png mode change 100755 => 100644 TMessagesProj/src/main/res/drawable-xxhdpi/photoload.png create mode 100644 TMessagesProj/src/main/res/drawable-xxhdpi/photopause.png delete mode 100755 TMessagesProj/src/main/res/values/attrs.xml diff --git a/TMessagesProj/build.gradle b/TMessagesProj/build.gradle index 683d05ed..2abf7266 100644 --- a/TMessagesProj/build.gradle +++ b/TMessagesProj/build.gradle @@ -80,7 +80,7 @@ android { defaultConfig { minSdkVersion 8 targetSdkVersion 19 - versionCode 330 + versionCode 331 versionName "1.9.0" } } diff --git a/TMessagesProj/src/main/java/org/telegram/android/ContactsController.java b/TMessagesProj/src/main/java/org/telegram/android/ContactsController.java index cd6cd138..6278d4e5 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/ContactsController.java +++ b/TMessagesProj/src/main/java/org/telegram/android/ContactsController.java @@ -105,7 +105,7 @@ public class ContactsController { try { nameDisplayOrder = Settings.System.getInt(ApplicationLoader.applicationContext.getContentResolver(), "android.contacts.DISPLAY_ORDER"); } catch (Exception e) { - FileLog.e("tmessages", e); + //don't promt } } diff --git a/TMessagesProj/src/main/java/org/telegram/android/ImageLoader.java b/TMessagesProj/src/main/java/org/telegram/android/ImageLoader.java index 49255f7e..22cc116a 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/ImageLoader.java +++ b/TMessagesProj/src/main/java/org/telegram/android/ImageLoader.java @@ -586,41 +586,69 @@ public class ImageLoader { private HashMap createMediaPaths() { HashMap mediaDirs = new HashMap(); File cachePath = AndroidUtilities.getCacheDir(); - try { - cachePath.mkdirs(); - new File(cachePath, ".nomedia").createNewFile(); - } catch (Exception e) { - FileLog.e("tmessages", e); + if (!cachePath.isDirectory()) { + try { + cachePath.mkdirs(); + } catch (Exception e) { + FileLog.e("tmessages", e); + } } mediaDirs.put(FileLoader.MEDIA_DIR_CACHE, cachePath); + try { if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) { File telegramPath = new File(Environment.getExternalStorageDirectory(), LocaleController.getString("AppName", R.string.AppName)); telegramPath.mkdirs(); + if (telegramPath.isDirectory()) { + try { + File imagePath = new File(telegramPath, "Images"); + imagePath.mkdir(); + if (imagePath.isDirectory()) { + new File(imagePath, ".nomedia").createNewFile(); + mediaDirs.put(FileLoader.MEDIA_DIR_IMAGE, imagePath); + } + } catch (Exception e) { + FileLog.e("tmessages", e); + } - File imagePath = new File(telegramPath, "Images"); - imagePath.mkdir(); - new File(imagePath, ".nomedia").createNewFile(); - mediaDirs.put(FileLoader.MEDIA_DIR_IMAGE, imagePath); + try { + File videoPath = new File(telegramPath, "Video"); + videoPath.mkdir(); + if (videoPath.isDirectory()) { + new File(videoPath, ".nomedia").createNewFile(); + mediaDirs.put(FileLoader.MEDIA_DIR_VIDEO, videoPath); + } + } catch (Exception e) { + FileLog.e("tmessages", e); + } - File videoPath = new File(telegramPath, "Video"); - videoPath.mkdir(); - new File(videoPath, ".nomedia").createNewFile(); - mediaDirs.put(FileLoader.MEDIA_DIR_VIDEO, videoPath); + try { + File audioPath = new File(telegramPath, "Audio"); + audioPath.mkdir(); + if (audioPath.isDirectory()) { + new File(audioPath, ".nomedia").createNewFile(); + mediaDirs.put(FileLoader.MEDIA_DIR_AUDIO, audioPath); + } + } catch (Exception e) { + FileLog.e("tmessages", e); + } - File audioPath = new File(telegramPath, "Audio"); - audioPath.mkdir(); - new File(audioPath, ".nomedia").createNewFile(); - mediaDirs.put(FileLoader.MEDIA_DIR_AUDIO, audioPath); - - File documentPath = new File(telegramPath, "Documents"); - documentPath.mkdir(); - new File(documentPath, ".nomedia").createNewFile(); - mediaDirs.put(FileLoader.MEDIA_DIR_DOCUMENT, documentPath); + try { + File documentPath = new File(telegramPath, "Documents"); + documentPath.mkdir(); + if (documentPath.isDirectory()) { + new File(documentPath, ".nomedia").createNewFile(); + mediaDirs.put(FileLoader.MEDIA_DIR_DOCUMENT, documentPath); + } + } catch (Exception e) { + FileLog.e("tmessages", e); + } + } } } catch (Exception e) { FileLog.e("tmessages", e); } + return mediaDirs; } diff --git a/TMessagesProj/src/main/java/org/telegram/android/MediaController.java b/TMessagesProj/src/main/java/org/telegram/android/MediaController.java index b97a7add..ac698b96 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/MediaController.java +++ b/TMessagesProj/src/main/java/org/telegram/android/MediaController.java @@ -8,6 +8,7 @@ package org.telegram.android; +import android.annotation.TargetApi; import android.app.Activity; import android.app.ProgressDialog; import android.content.BroadcastReceiver; @@ -21,16 +22,26 @@ import android.media.AudioFormat; import android.media.AudioManager; import android.media.AudioRecord; import android.media.AudioTrack; +import android.media.MediaCodec; +import android.media.MediaCodecInfo; +import android.media.MediaCodecList; +import android.media.MediaExtractor; +import android.media.MediaFormat; import android.media.MediaPlayer; import android.media.MediaRecorder; import android.net.ConnectivityManager; import android.net.Uri; +import android.os.Build; import android.os.Environment; import android.os.ParcelFileDescriptor; import android.os.Vibrator; import android.provider.MediaStore; import android.view.View; +import org.telegram.android.video.InputSurface; +import org.telegram.android.video.MP4Builder; +import org.telegram.android.video.Mp4Movie; +import org.telegram.android.video.OutputSurface; import org.telegram.messenger.ConnectionsManager; import org.telegram.messenger.DispatchQueue; import org.telegram.messenger.FileLoader; @@ -133,6 +144,17 @@ public class MediaController implements NotificationCenter.NotificationCenterDel } } + private final static String MIME_TYPE = "video/avc"; + private final static int PROCESSOR_TYPE_OTHER = 0; + private final static int PROCESSOR_TYPE_QCOM = 1; + private final static int PROCESSOR_TYPE_INTEL = 2; + private final Object videoConvertSync = new Object(); + + private ArrayList videoConvertQueue = new ArrayList(); + private final Object videoQueueSync = new Object(); + private boolean cancelCurrentVideoConversion = false; + private boolean videoConvertFirstWrite = true; + public static final int AUTODOWNLOAD_MASK_PHOTO = 1; public static final int AUTODOWNLOAD_MASK_AUDIO = 2; public static final int AUTODOWNLOAD_MASK_VIDEO = 4; @@ -1441,11 +1463,10 @@ public class MediaController implements NotificationCenter.NotificationCenterDel public void run() { audioToSend.date = ConnectionsManager.getInstance().getCurrentTime(); audioToSend.size = (int) recordingAudioFileToSend.length(); - audioToSend.path = recordingAudioFileToSend.getAbsolutePath(); long duration = recordTimeCount; audioToSend.duration = (int) (duration / 1000); if (duration > 700) { - SendMessagesHelper.getInstance().sendMessage(audioToSend, recordDialogId); + SendMessagesHelper.getInstance().sendMessage(audioToSend, recordingAudioFileToSend.getAbsolutePath(), recordDialogId); } else { recordingAudioFileToSend.delete(); } @@ -1838,4 +1859,600 @@ public class MediaController implements NotificationCenter.NotificationCenterDel } }).start(); } + + public void scheduleVideoConvert(MessageObject messageObject) { + videoConvertQueue.add(messageObject); + if (videoConvertQueue.size() == 1) { + startVideoConvertFromQueue(); + } + } + + public void cancelVideoConvert(MessageObject messageObject) { + if (!videoConvertQueue.isEmpty()) { + if (videoConvertQueue.get(0) == messageObject) { + synchronized (videoConvertSync) { + cancelCurrentVideoConversion = true; + } + } + videoConvertQueue.remove(messageObject); + } + } + + private void startVideoConvertFromQueue() { + if (!videoConvertQueue.isEmpty()) { + MessageObject messageObject = videoConvertQueue.get(0); + VideoConvertRunnable.runConversion(messageObject); + } + } + + private static MediaCodecInfo selectCodec(String mimeType) { + int numCodecs = MediaCodecList.getCodecCount(); + MediaCodecInfo lastCodecInfo = null; + for (int i = 0; i < numCodecs; i++) { + MediaCodecInfo codecInfo = MediaCodecList.getCodecInfoAt(i); + if (!codecInfo.isEncoder()) { + continue; + } + String[] types = codecInfo.getSupportedTypes(); + for (String type : types) { + if (type.equalsIgnoreCase(mimeType)) { + lastCodecInfo = codecInfo; + FileLog.e("tmessages", "available codec = " + codecInfo.getName()); + } + } + } + return lastCodecInfo; + } + + private static boolean isRecognizedFormat(int colorFormat) { + switch (colorFormat) { + case MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Planar: + case MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420PackedPlanar: + case MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420SemiPlanar: + case MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420PackedSemiPlanar: + case MediaCodecInfo.CodecCapabilities.COLOR_TI_FormatYUV420PackedSemiPlanar: + return true; + default: + return false; + } + } + + private static int selectColorFormat(MediaCodecInfo codecInfo, String mimeType) { + MediaCodecInfo.CodecCapabilities capabilities = codecInfo.getCapabilitiesForType(mimeType); + for (int i = 0; i < capabilities.colorFormats.length; i++) { + int colorFormat = capabilities.colorFormats[i]; + if (isRecognizedFormat(colorFormat)) { + return colorFormat; + } + } + return 0; + } + + @TargetApi(16) + private int selectTrack(MediaExtractor extractor, boolean audio) { + int numTracks = extractor.getTrackCount(); + for (int i = 0; i < numTracks; i++) { + MediaFormat format = extractor.getTrackFormat(i); + String mime = format.getString(MediaFormat.KEY_MIME); + if (audio) { + if (mime.startsWith("audio/")) { + return i; + } + } else { + if (mime.startsWith("video/")) { + return i; + } + } + } + return -5; + } + + private void didWriteData(final MessageObject messageObject, final File file, final long finalSize, final boolean error) { + final boolean firstWrite = videoConvertFirstWrite; + if (firstWrite) { + videoConvertFirstWrite = false; + } + AndroidUtilities.RunOnUIThread(new Runnable() { + @Override + public void run() { + if (error) { + NotificationCenter.getInstance().postNotificationName(NotificationCenter.FilePreparingFailed, messageObject, file.toString()); + } else { + if (firstWrite) { + NotificationCenter.getInstance().postNotificationName(NotificationCenter.FilePreparingStarted, messageObject, file.toString()); + } + NotificationCenter.getInstance().postNotificationName(NotificationCenter.FileNewChunkAvailable, messageObject, file.toString(), finalSize); + } + if (finalSize != 0) { + synchronized (videoConvertSync) { + cancelCurrentVideoConversion = false; + } + videoConvertQueue.remove(messageObject); + startVideoConvertFromQueue(); + } + } + }); + } + + @TargetApi(16) + private long readAndWriteTrack(final MessageObject messageObject, MediaExtractor extractor, MP4Builder mediaMuxer, MediaCodec.BufferInfo info, long start, long end, File file, boolean isAudio) throws Exception { + int trackIndex = selectTrack(extractor, isAudio); + if (trackIndex >= 0) { + extractor.selectTrack(trackIndex); + MediaFormat trackFormat = extractor.getTrackFormat(trackIndex); + int muxerTrackIndex = mediaMuxer.addTrack(trackFormat, isAudio); + int maxBufferSize = trackFormat.getInteger(MediaFormat.KEY_MAX_INPUT_SIZE); + boolean inputDone = false; + if (start > 0) { + extractor.seekTo(start, MediaExtractor.SEEK_TO_PREVIOUS_SYNC); + } else { + extractor.seekTo(0, MediaExtractor.SEEK_TO_PREVIOUS_SYNC); + } + ByteBuffer buffer = ByteBuffer.allocateDirect(maxBufferSize); + long startTime = -1; + + checkConversionCanceled(); + + while (!inputDone) { + checkConversionCanceled(); + + boolean eof = false; + int index = extractor.getSampleTrackIndex(); + if (index == trackIndex) { + info.size = extractor.readSampleData(buffer, 0); + + if (info.size < 0) { + info.size = 0; + eof = true; + } else { + info.presentationTimeUs = extractor.getSampleTime(); + if (start > 0 && startTime == -1) { + startTime = info.presentationTimeUs; + } + if (end < 0 || info.presentationTimeUs < end) { + info.offset = 0; + info.flags = extractor.getSampleFlags(); + if (!isAudio) { + buffer.limit(info.offset + info.size); + buffer.position(info.offset); + buffer.putInt(info.size - 4); + } + if (mediaMuxer.writeSampleData(muxerTrackIndex, buffer, info)) { + didWriteData(messageObject, file, 0, false); + } + extractor.advance(); + } else { + eof = true; + } + } + } else if (index == -1) { + eof = true; + } + if (eof) { + inputDone = true; + } + } + + extractor.unselectTrack(trackIndex); + return startTime; + } + return -1; + } + + private static class VideoConvertRunnable implements Runnable { + + private MessageObject messageObject; + + private VideoConvertRunnable(MessageObject message) { + messageObject = message; + } + + @Override + public void run() { + MediaController.getInstance().convertVideo(messageObject); + } + + public static void runConversion(final MessageObject obj) { + new Thread(new Runnable() { + @Override + public void run() { + try { + VideoConvertRunnable wrapper = new VideoConvertRunnable(obj); + Thread th = new Thread(wrapper, "VideoConvertRunnable"); + th.start(); + th.join(); + } catch (Exception e) { + FileLog.e("tmessages", e); + } + } + }).start(); + } + } + + private void checkConversionCanceled() throws Exception { + boolean cancelConversion = false; + synchronized (videoConvertSync) { + cancelConversion = cancelCurrentVideoConversion; + } + if (cancelConversion) { + throw new RuntimeException("canceled conversion"); + } + } + + @TargetApi(16) + private boolean convertVideo(final MessageObject messageObject) { + String videoPath = messageObject.messageOwner.videoEditedInfo.originalPath; + long startTime = messageObject.messageOwner.videoEditedInfo.startTime; + long endTime = messageObject.messageOwner.videoEditedInfo.endTime; + int resultWidth = messageObject.messageOwner.videoEditedInfo.resultWidth; + int resultHeight = messageObject.messageOwner.videoEditedInfo.resultHeight; + int rotationValue = messageObject.messageOwner.videoEditedInfo.rotationValue; + int originalWidth = messageObject.messageOwner.videoEditedInfo.originalWidth; + int originalHeight = messageObject.messageOwner.videoEditedInfo.originalHeight; + int bitrate = messageObject.messageOwner.videoEditedInfo.bitrate; + File cacheFile = new File(messageObject.messageOwner.attachPath); + + File inputFile = new File(videoPath); + if (!inputFile.canRead()) { + return false; + } + + videoConvertFirstWrite = true; + boolean error = false; + long videoStartTime = startTime; + + long time = System.currentTimeMillis(); + + if (resultWidth != 0 && resultHeight != 0) { + MP4Builder mediaMuxer = null; + MediaExtractor extractor = null; + + try { + MediaCodec.BufferInfo info = new MediaCodec.BufferInfo(); + Mp4Movie movie = new Mp4Movie(); + movie.setCacheFile(cacheFile); + movie.setRotation(rotationValue); + resultHeight = 352; + movie.setSize(resultWidth, resultHeight); + mediaMuxer = new MP4Builder().createMovie(movie); + extractor = new MediaExtractor(); + extractor.setDataSource(inputFile.toString()); + + checkConversionCanceled(); + + if (resultWidth != originalWidth || resultHeight != originalHeight) { + int videoIndex = -5; + videoIndex = selectTrack(extractor, false); + if (videoIndex >= 0) { + MediaCodec decoder = null; + MediaCodec encoder = null; + InputSurface inputSurface = null; + OutputSurface outputSurface = null; + + try { + long videoTime = -1; + boolean outputDone = false; + boolean inputDone = false; + boolean decoderDone = false; + int swapUV = 0; + int videoTrackIndex = -5; + + int colorFormat = 0; + int processorType = PROCESSOR_TYPE_OTHER; + if (Build.VERSION.SDK_INT < 18) { + MediaCodecInfo codecInfo = selectCodec(MIME_TYPE); + colorFormat = selectColorFormat(codecInfo, MIME_TYPE); + String manufacturer = Build.MANUFACTURER.toLowerCase(); + if (codecInfo.getName().contains("OMX.qcom.")) { + processorType = PROCESSOR_TYPE_QCOM; + if (Build.VERSION.SDK_INT == 16) { + if (manufacturer.equals("lge") || manufacturer.equals("nokia")) { + swapUV = 1; + } + } + } else if (codecInfo.getName().contains("OMX.Intel.")) { + processorType = PROCESSOR_TYPE_INTEL; + } + FileLog.e("tmessages", "codec = " + codecInfo.getName() + " manufacturer = " + manufacturer); + } else { + colorFormat = MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface; + } + FileLog.e("tmessages", "colorFormat = " + colorFormat); + + int resultHeightAligned = resultHeight; + int padding = 0; + int bufferSize = resultWidth * resultHeight * 3 / 2; + if (processorType == PROCESSOR_TYPE_OTHER) { + if (resultHeight % 16 != 0) { + resultHeightAligned += (16 - (resultHeight % 16)); + padding = resultWidth * (resultHeightAligned - resultHeight); + bufferSize += padding * 5 / 4; + } + } else if (processorType == PROCESSOR_TYPE_QCOM) { + if (!Build.MANUFACTURER.toLowerCase().equals("lge")) { + int uvoffset = (resultWidth * resultHeight + 2047) & ~2047; + padding = uvoffset - (resultWidth * resultHeight); + bufferSize += padding; + } + } else if (processorType == PROCESSOR_TYPE_INTEL) { + + } + + extractor.selectTrack(videoIndex); + if (startTime > 0) { + extractor.seekTo(startTime, MediaExtractor.SEEK_TO_PREVIOUS_SYNC); + } else { + extractor.seekTo(0, MediaExtractor.SEEK_TO_PREVIOUS_SYNC); + } + MediaFormat inputFormat = extractor.getTrackFormat(videoIndex); + + MediaFormat outputFormat = MediaFormat.createVideoFormat(MIME_TYPE, resultWidth, resultHeight); + outputFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, colorFormat); + outputFormat.setInteger(MediaFormat.KEY_BIT_RATE, bitrate != 0 ? bitrate : 921600); + outputFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 25); + outputFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 10); + if (Build.VERSION.SDK_INT < 18) { + outputFormat.setInteger("stride", resultWidth); + outputFormat.setInteger("slice-height", resultHeightAligned); + } + + encoder = MediaCodec.createEncoderByType(MIME_TYPE); + encoder.configure(outputFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE); + if (Build.VERSION.SDK_INT >= 18) { + inputSurface = new InputSurface(encoder.createInputSurface()); + inputSurface.makeCurrent(); + } + encoder.start(); + + decoder = MediaCodec.createDecoderByType(inputFormat.getString(MediaFormat.KEY_MIME)); + if (Build.VERSION.SDK_INT >= 18) { + outputSurface = new OutputSurface(); + } else { + outputSurface = new OutputSurface(resultWidth, resultHeight); + } + decoder.configure(inputFormat, outputSurface.getSurface(), null, 0); + decoder.start(); + + final int TIMEOUT_USEC = 2500; + ByteBuffer[] decoderInputBuffers = decoder.getInputBuffers(); + ByteBuffer[] encoderOutputBuffers = encoder.getOutputBuffers(); + ByteBuffer[] encoderInputBuffers = null; + if (Build.VERSION.SDK_INT < 18) { + encoderInputBuffers = encoder.getInputBuffers(); + } + + checkConversionCanceled(); + + while (!outputDone) { + checkConversionCanceled(); + if (!inputDone) { + boolean eof = false; + int index = extractor.getSampleTrackIndex(); + if (index == videoIndex) { + int inputBufIndex = decoder.dequeueInputBuffer(TIMEOUT_USEC); + if (inputBufIndex >= 0) { + ByteBuffer inputBuf = decoderInputBuffers[inputBufIndex]; + int chunkSize = extractor.readSampleData(inputBuf, 0); + if (chunkSize < 0) { + decoder.queueInputBuffer(inputBufIndex, 0, 0, 0L, MediaCodec.BUFFER_FLAG_END_OF_STREAM); + inputDone = true; + } else { + decoder.queueInputBuffer(inputBufIndex, 0, chunkSize, extractor.getSampleTime(), 0); + extractor.advance(); + } + } + } else if (index == -1) { + eof = true; + } + if (eof) { + int inputBufIndex = decoder.dequeueInputBuffer(TIMEOUT_USEC); + if (inputBufIndex >= 0) { + decoder.queueInputBuffer(inputBufIndex, 0, 0, 0L, MediaCodec.BUFFER_FLAG_END_OF_STREAM); + inputDone = true; + } + } + } + + boolean decoderOutputAvailable = !decoderDone; + boolean encoderOutputAvailable = true; + while (decoderOutputAvailable || encoderOutputAvailable) { + checkConversionCanceled(); + int encoderStatus = encoder.dequeueOutputBuffer(info, TIMEOUT_USEC); + if (encoderStatus == MediaCodec.INFO_TRY_AGAIN_LATER) { + encoderOutputAvailable = false; + } else if (encoderStatus == MediaCodec.INFO_OUTPUT_BUFFERS_CHANGED) { + encoderOutputBuffers = encoder.getOutputBuffers(); + } else if (encoderStatus == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) { + MediaFormat newFormat = encoder.getOutputFormat(); + if (videoTrackIndex == -5) { + videoTrackIndex = mediaMuxer.addTrack(newFormat, false); + } + } else if (encoderStatus < 0) { + throw new RuntimeException("unexpected result from encoder.dequeueOutputBuffer: " + encoderStatus); + } else { + ByteBuffer encodedData = encoderOutputBuffers[encoderStatus]; + if (encodedData == null) { + throw new RuntimeException("encoderOutputBuffer " + encoderStatus + " was null"); + } + if (info.size > 1) { + if ((info.flags & MediaCodec.BUFFER_FLAG_CODEC_CONFIG) == 0) { + encodedData.limit(info.offset + info.size); + encodedData.position(info.offset); + encodedData.putInt(Integer.reverseBytes(info.size - 4)); + if (mediaMuxer.writeSampleData(videoTrackIndex, encodedData, info)) { + didWriteData(messageObject, cacheFile, 0, false); + } + } else if (videoTrackIndex == -5) { + byte[] csd = new byte[info.size]; + encodedData.limit(info.offset + info.size); + encodedData.position(info.offset); + encodedData.get(csd); + ByteBuffer sps = null; + ByteBuffer pps = null; + for (int a = info.size - 1; a >= 0; a--) { + if (a > 3) { + if (csd[a] == 1 && csd[a - 1] == 0 && csd[a - 2] == 0 && csd[a - 3] == 0) { + sps = ByteBuffer.allocate(a - 3); + pps = ByteBuffer.allocate(info.size - (a - 3)); + sps.put(csd, 0, a - 3).position(0); + pps.put(csd, a - 3, info.size - (a - 3)).position(0); + break; + } + } else { + break; + } + } + + MediaFormat newFormat = MediaFormat.createVideoFormat(MIME_TYPE, resultWidth, resultHeight); + if (sps != null && pps != null) { + newFormat.setByteBuffer("csd-0", sps); + newFormat.setByteBuffer("csd-1", pps); + } + videoTrackIndex = mediaMuxer.addTrack(newFormat, false); + } + } + outputDone = (info.flags & MediaCodec.BUFFER_FLAG_END_OF_STREAM) != 0; + encoder.releaseOutputBuffer(encoderStatus, false); + } + if (encoderStatus != MediaCodec.INFO_TRY_AGAIN_LATER) { + continue; + } + + if (!decoderDone) { + int decoderStatus = decoder.dequeueOutputBuffer(info, TIMEOUT_USEC); + if (decoderStatus == MediaCodec.INFO_TRY_AGAIN_LATER) { + decoderOutputAvailable = false; + } else if (decoderStatus == MediaCodec.INFO_OUTPUT_BUFFERS_CHANGED) { + + } else if (decoderStatus == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) { + MediaFormat newFormat = decoder.getOutputFormat(); + } else if (decoderStatus < 0) { + throw new RuntimeException("unexpected result from decoder.dequeueOutputBuffer: " + decoderStatus); + } else { + boolean doRender = false; + if (Build.VERSION.SDK_INT >= 18) { + doRender = info.size != 0; + } else { + doRender = info.size != 0 || info.presentationTimeUs != 0; + } + if (endTime > 0 && info.presentationTimeUs >= endTime) { + inputDone = true; + decoderDone = true; + doRender = false; + info.flags |= MediaCodec.BUFFER_FLAG_END_OF_STREAM; + } + if (startTime > 0 && videoTime == -1) { + if (info.presentationTimeUs < startTime) { + doRender = false; + FileLog.e("tmessages", "drop frame startTime = " + startTime + " present time = " + info.presentationTimeUs); + } else { + videoTime = info.presentationTimeUs; + } + } + decoder.releaseOutputBuffer(decoderStatus, doRender); + if (doRender) { + boolean errorWait = false; + try { + outputSurface.awaitNewImage(); + } catch (Exception e) { + errorWait = true; + FileLog.e("tmessages", e); + } + if (!errorWait) { + if (Build.VERSION.SDK_INT >= 18) { + outputSurface.drawImage(false); + inputSurface.setPresentationTime(info.presentationTimeUs * 1000); + inputSurface.swapBuffers(); + } else { + int inputBufIndex = encoder.dequeueInputBuffer(TIMEOUT_USEC); + if (inputBufIndex >= 0) { + outputSurface.drawImage(true); + ByteBuffer rgbBuf = outputSurface.getFrame(); + ByteBuffer yuvBuf = encoderInputBuffers[inputBufIndex]; + yuvBuf.clear(); + Utilities.convertVideoFrame(rgbBuf, yuvBuf, colorFormat, resultWidth, resultHeight, padding, swapUV); + encoder.queueInputBuffer(inputBufIndex, 0, bufferSize, info.presentationTimeUs, 0); + } else { + FileLog.e("tmessages", "input buffer not available"); + } + } + } + } + if ((info.flags & MediaCodec.BUFFER_FLAG_END_OF_STREAM) != 0) { + decoderOutputAvailable = false; + FileLog.e("tmessages", "decoder stream end"); + if (Build.VERSION.SDK_INT >= 18) { + encoder.signalEndOfInputStream(); + } else { + int inputBufIndex = encoder.dequeueInputBuffer(TIMEOUT_USEC); + if (inputBufIndex >= 0) { + encoder.queueInputBuffer(inputBufIndex, 0, 1, info.presentationTimeUs, MediaCodec.BUFFER_FLAG_END_OF_STREAM); + } + } + } + } + } + } + } + if (videoTime != -1) { + videoStartTime = videoTime; + } + } catch (Exception e) { + FileLog.e("tmessages", e); + } + + extractor.unselectTrack(videoIndex); + + if (outputSurface != null) { + outputSurface.release(); + outputSurface = null; + } + if (inputSurface != null) { + inputSurface.release(); + inputSurface = null; + } + if (decoder != null) { + decoder.stop(); + decoder.release(); + decoder = null; + } + if (encoder != null) { + encoder.stop(); + encoder.release(); + encoder = null; + } + + checkConversionCanceled(); + } + } else { + long videoTime = readAndWriteTrack(messageObject, extractor, mediaMuxer, info, startTime, endTime, cacheFile, false); + if (videoTime != -1) { + videoStartTime = videoTime; + } + } + readAndWriteTrack(messageObject, extractor, mediaMuxer, info, videoStartTime, endTime, cacheFile, true); + } catch (Exception e) { + error = true; + FileLog.e("tmessages", e); + } finally { + if (extractor != null) { + extractor.release(); + extractor = null; + } + if (mediaMuxer != null) { + try { + mediaMuxer.finishMovie(false); + } catch (Exception e) { + FileLog.e("tmessages", e); + } + mediaMuxer = null; + } + FileLog.e("tmessages", "time = " + (System.currentTimeMillis() - time)); + } + } else { + return false; + } + didWriteData(messageObject, cacheFile, cacheFile.length(), error); + return true; + } } diff --git a/TMessagesProj/src/main/java/org/telegram/android/MessageObject.java b/TMessagesProj/src/main/java/org/telegram/android/MessageObject.java index 16bd5fde..67f56dcd 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/MessageObject.java +++ b/TMessagesProj/src/main/java/org/telegram/android/MessageObject.java @@ -623,4 +623,16 @@ public class MessageObject { } } } + + public boolean isSending() { + return messageOwner.send_state == MESSAGE_SEND_STATE_SENDING; + } + + public boolean isSendError() { + return messageOwner.send_state == MESSAGE_SEND_STATE_SEND_ERROR; + } + + public boolean isSent() { + return messageOwner.send_state == MESSAGE_SEND_STATE_SENT; + } } diff --git a/TMessagesProj/src/main/java/org/telegram/android/MessagesController.java b/TMessagesProj/src/main/java/org/telegram/android/MessagesController.java index 807d8909..ee849f55 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/MessagesController.java +++ b/TMessagesProj/src/main/java/org/telegram/android/MessagesController.java @@ -2450,7 +2450,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter public void run() { for (HashMap.Entry entry : corrected.entrySet()) { Integer oldId = entry.getKey(); - SendMessagesHelper.getInstance().setMessageSent(oldId); + SendMessagesHelper.getInstance().processSentMessage(oldId); Integer newId = entry.getValue(); NotificationCenter.getInstance().postNotificationName(NotificationCenter.messageReceivedByServer, oldId, newId, null); } @@ -3464,9 +3464,9 @@ public class MessagesController implements NotificationCenter.NotificationCenter } else { MessageObject currentDialogMessage = dialogMessage.get(dialog.top_message); if (currentDialogMessage != null) { - if (currentDialogMessage.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SENDING && lastMessage.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SENDING) { + if (currentDialogMessage.isSending() && lastMessage.isSending()) { change = true; - } else if (dialog.last_message_date < lastMessage.messageOwner.date || dialog.last_message_date == lastMessage.messageOwner.date && lastMessage.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SENDING) { + } else if (dialog.last_message_date < lastMessage.messageOwner.date || dialog.last_message_date == lastMessage.messageOwner.date && lastMessage.isSending()) { change = true; } } else { diff --git a/TMessagesProj/src/main/java/org/telegram/android/NotificationCenter.java b/TMessagesProj/src/main/java/org/telegram/android/NotificationCenter.java index 26a3083b..32003f2d 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/NotificationCenter.java +++ b/TMessagesProj/src/main/java/org/telegram/android/NotificationCenter.java @@ -39,6 +39,7 @@ public class NotificationCenter { public static final int pushMessagesUpdated = 27; public static final int blockedUsersDidLoaded = 28; public static final int openedChatChanged = 29; + public static final int hideEmojiKeyboard = 30; public static final int wallpapersDidLoaded = 171; public static final int closeOtherAppActivities = 702; @@ -52,6 +53,9 @@ public class NotificationCenter { public static final int FileLoadProgressChanged = 10003; public static final int FileDidLoaded = 10004; public static final int FileDidFailedLoad = 10005; + public static final int FilePreparingStarted = 10006; + public static final int FileNewChunkAvailable = 10007; + public static final int FilePreparingFailed = 10008; public final static int audioProgressDidChanged = 50001; public final static int audioDidReset = 50002; diff --git a/TMessagesProj/src/main/java/org/telegram/android/SendMessagesHelper.java b/TMessagesProj/src/main/java/org/telegram/android/SendMessagesHelper.java index a41b9e6e..43e98c98 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/SendMessagesHelper.java +++ b/TMessagesProj/src/main/java/org/telegram/android/SendMessagesHelper.java @@ -60,7 +60,9 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter public SendMessagesHelper() { NotificationCenter.getInstance().addObserver(this, NotificationCenter.FileDidUpload); NotificationCenter.getInstance().addObserver(this, NotificationCenter.FileDidFailUpload); - + NotificationCenter.getInstance().addObserver(this, NotificationCenter.FilePreparingStarted); + NotificationCenter.getInstance().addObserver(this, NotificationCenter.FileNewChunkAvailable); + NotificationCenter.getInstance().addObserver(this, NotificationCenter.FilePreparingFailed); } public void cleanUp() { @@ -72,10 +74,6 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter currentChatInfo = info; } - public void setMessageSent(Integer id) { - - } - @Override public void didReceivedNotification(int id, Object... args) { if (id == NotificationCenter.FileDidUpload) { @@ -102,19 +100,23 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter media.file = file; performSendMessageRequest(message.sendRequest, message.obj, message.originalPath); } else if (message.type == 1) { - if (media.thumb == null) { - media.thumb = file; + if (media.file == null) { + media.file = file; performSendDelayedMessage(message); } else { - media.file = file; + media.thumb = file; performSendMessageRequest(message.sendRequest, message.obj, message.originalPath); } } else if (message.type == 2) { - if (media.thumb == null && message.location != null) { - media.thumb = file; - performSendDelayedMessage(message); - } else { + if (media.file == null) { media.file = file; + if (media.thumb == null && message.location != null) { + performSendDelayedMessage(message); + } else { + performSendMessageRequest(message.sendRequest, message.obj, message.originalPath); + } + } else { + media.thumb = file; performSendMessageRequest(message.sendRequest, message.obj, message.originalPath); } } else if (message.type == 3) { @@ -163,6 +165,72 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter } } }); + } else if (id == NotificationCenter.FilePreparingStarted) { + MessageObject messageObject = (MessageObject)args[0]; + String finalPath = (String)args[1]; + + ArrayList arr = delayedMessages.get(messageObject.messageOwner.attachPath); + if (arr != null) { + for (int a = 0; a < arr.size(); a++) { + DelayedMessage message = arr.get(a); + if (message.obj == messageObject) { + message.videoLocation.videoEditedInfo = null; + performSendDelayedMessage(message); + arr.remove(a); + a--; + break; + } + } + if (arr.isEmpty()) { + delayedMessages.remove(messageObject.messageOwner.attachPath); + } + } + } else if (id == NotificationCenter.FileNewChunkAvailable) { + MessageObject messageObject = (MessageObject)args[0]; + String finalPath = (String)args[1]; + long finalSize = (Long)args[2]; + boolean isEncrypted = ((int)messageObject.getDialogId()) == 0; + FileLoader.getInstance().checkUploadNewDataAvailable(finalPath, isEncrypted, finalSize); + if (finalSize != 0) { + ArrayList arr = delayedMessages.get(messageObject.messageOwner.attachPath); + if (arr != null) { + for (DelayedMessage message : arr) { + if (message.obj == messageObject) { + message.obj.messageOwner.videoEditedInfo = null; + message.obj.messageOwner.message = "-1"; + + ArrayList messages = new ArrayList(); + messages.add(message.obj.messageOwner); + MessagesStorage.getInstance().putMessages(messages, false, true, false, 0); + break; + } + } + if (arr.isEmpty()) { + delayedMessages.remove(messageObject.messageOwner.attachPath); + } + } + } + } else if (id == NotificationCenter.FilePreparingFailed) { + MessageObject messageObject = (MessageObject)args[0]; + String finalPath = (String)args[1]; + + ArrayList arr = delayedMessages.get(finalPath); + if (arr != null) { + for (int a = 0; a < arr.size(); a++) { + DelayedMessage message = arr.get(a); + if (message.obj == messageObject) { + MessagesStorage.getInstance().markMessageAsSendError(message.obj.messageOwner.id); + message.obj.messageOwner.send_state = MessageObject.MESSAGE_SEND_STATE_SEND_ERROR; + arr.remove(a); + a--; + NotificationCenter.getInstance().postNotificationName(NotificationCenter.messageSendError, message.obj.messageOwner.id); + processSentMessage(message.obj.messageOwner.id); + } + } + if (arr.isEmpty()) { + delayedMessages.remove(finalPath); + } + } } } @@ -175,6 +243,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter DelayedMessage message = messages.get(a); if (message.obj.messageOwner.id == object.messageOwner.id) { messages.remove(a); + MediaController.getInstance().cancelVideoConvert(message.obj); if (messages.size() == 0) { keyToRemvoe = entry.getKey(); if (message.sendEncryptedRequest != null) { @@ -204,7 +273,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter return true; } - private void processSentMessage(int id) { + public void processSentMessage(int id) { int prevSize = unsentMessages.size(); unsentMessages.remove(id); if (prevSize != 0 && unsentMessages.size() == 0) { @@ -220,14 +289,13 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter if (messageObject.messageOwner.media.photo instanceof TLRPC.TL_photo) { sendMessage((TLRPC.TL_photo) messageObject.messageOwner.media.photo, null, did); } else if (messageObject.messageOwner.media.audio instanceof TLRPC.TL_audio) { - messageObject.messageOwner.media.audio.path = messageObject.messageOwner.attachPath; - sendMessage((TLRPC.TL_audio) messageObject.messageOwner.media.audio, did); + sendMessage((TLRPC.TL_audio) messageObject.messageOwner.media.audio, messageObject.messageOwner.attachPath, did); } else if (messageObject.messageOwner.media.video instanceof TLRPC.TL_video) { - messageObject.messageOwner.media.video.path = messageObject.messageOwner.attachPath; - sendMessage((TLRPC.TL_video) messageObject.messageOwner.media.video, null, did); + TLRPC.TL_video video = (TLRPC.TL_video) messageObject.messageOwner.media.video; + video.videoEditedInfo = messageObject.messageOwner.videoEditedInfo; + sendMessage(video, null, messageObject.messageOwner.attachPath, did); } else if (messageObject.messageOwner.media.document instanceof TLRPC.TL_document) { - messageObject.messageOwner.media.document.path = messageObject.messageOwner.attachPath; - sendMessage((TLRPC.TL_document) messageObject.messageOwner.media.document, null, did); + sendMessage((TLRPC.TL_document) messageObject.messageOwner.media.document, null, messageObject.messageOwner.attachPath, did); } else if (messageObject.messageOwner.media.geo instanceof TLRPC.TL_geoPoint) { sendMessage(messageObject.messageOwner.media.geo.lat, messageObject.messageOwner.media.geo._long, did); } else if (messageObject.messageOwner.media.phone_number != null) { @@ -248,42 +316,42 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter } public void sendMessage(TLRPC.User user, long peer) { - sendMessage(null, 0, 0, null, null, null, user, null, null, null, peer, false); + sendMessage(null, 0, 0, null, null, null, user, null, null, null, peer, false, null); } public void sendMessage(MessageObject message) { - sendMessage(null, 0, 0, null, null, message, null, null, null, null, message.getDialogId(), true); + sendMessage(null, 0, 0, null, null, message, null, null, null, null, message.getDialogId(), true, message.messageOwner.attachPath); } public void sendMessage(MessageObject message, long peer) { - sendMessage(null, 0, 0, null, null, message, null, null, null, null, peer, false); + sendMessage(null, 0, 0, null, null, message, null, null, null, null, peer, false, message.messageOwner.attachPath); } - public void sendMessage(TLRPC.TL_document document, String originalPath, long peer) { - sendMessage(null, 0, 0, null, null, null, null, document, null, originalPath, peer, false); + public void sendMessage(TLRPC.TL_document document, String originalPath, String path, long peer) { + sendMessage(null, 0, 0, null, null, null, null, document, null, originalPath, peer, false, path); } public void sendMessage(String message, long peer) { - sendMessage(message, 0, 0, null, null, null, null, null, null, null, peer, false); + sendMessage(message, 0, 0, null, null, null, null, null, null, null, peer, false, null); } public void sendMessage(double lat, double lon, long peer) { - sendMessage(null, lat, lon, null, null, null, null, null, null, null, peer, false); + sendMessage(null, lat, lon, null, null, null, null, null, null, null, peer, false, null); } public void sendMessage(TLRPC.TL_photo photo, String originalPath, long peer) { - sendMessage(null, 0, 0, photo, null, null, null, null, null, originalPath, peer, false); + sendMessage(null, 0, 0, photo, null, null, null, null, null, originalPath, peer, false, null); } - public void sendMessage(TLRPC.TL_video video, String originalPath, long peer) { - sendMessage(null, 0, 0, null, video, null, null, null, null, originalPath, peer, false); + public void sendMessage(TLRPC.TL_video video, String originalPath, String path, long peer) { + sendMessage(null, 0, 0, null, video, null, null, null, null, originalPath, peer, false, path); } - public void sendMessage(TLRPC.TL_audio audio, long peer) { - sendMessage(null, 0, 0, null, null, null, null, null, audio, null, peer, false); + public void sendMessage(TLRPC.TL_audio audio, String path, long peer) { + sendMessage(null, 0, 0, null, null, null, null, null, audio, null, peer, false, path); } - private void sendMessage(String message, double lat, double lon, TLRPC.TL_photo photo, TLRPC.TL_video video, MessageObject msgObj, TLRPC.User user, TLRPC.TL_document document, TLRPC.TL_audio audio, String originalPath, long peer, boolean retry) { + private int sendMessage(String message, double lat, double lon, TLRPC.TL_photo photo, TLRPC.TL_video video, MessageObject msgObj, TLRPC.User user, TLRPC.TL_document document, TLRPC.TL_audio audio, String originalPath, long peer, boolean retry, String path) { TLRPC.Message newMsg = null; int type = -1; if (retry) { @@ -313,7 +381,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter } else { type = 3; video = (TLRPC.TL_video) newMsg.media.video; - video.path = newMsg.attachPath; + video.videoEditedInfo = newMsg.videoEditedInfo; } } else if (msgObj.type == 12 || msgObj.type == 13) { user = new TLRPC.TL_userRequest(); @@ -324,11 +392,9 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter type = 6; } else if (msgObj.type == 8 || msgObj.type == 9) { document = (TLRPC.TL_document) newMsg.media.document; - document.path = newMsg.attachPath; type = 7; } else if (msgObj.type == 2) { audio = (TLRPC.TL_audio) newMsg.media.audio; - audio.path = newMsg.attachPath; type = 8; } } else { @@ -357,9 +423,14 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter newMsg = new TLRPC.TL_message(); newMsg.media = new TLRPC.TL_messageMediaVideo(); newMsg.media.video = video; + newMsg.videoEditedInfo = video.videoEditedInfo; type = 3; - newMsg.message = "-1"; - newMsg.attachPath = video.path; + if (video.videoEditedInfo == null) { + newMsg.message = "-1"; + } else { + newMsg.message = video.videoEditedInfo.getString(); + } + newMsg.attachPath = path; } else if (msgObj != null) { newMsg = new TLRPC.TL_messageForwarded(); if (msgObj.messageOwner instanceof TLRPC.TL_messageForwarded) { @@ -394,14 +465,14 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter newMsg.media.document = document; type = 7; newMsg.message = "-1"; - newMsg.attachPath = document.path; + newMsg.attachPath = path; } else if (audio != null) { newMsg = new TLRPC.TL_message(); newMsg.media = new TLRPC.TL_messageMediaAudio(); newMsg.media.audio = audio; type = 8; newMsg.message = "-1"; - newMsg.attachPath = audio.path; + newMsg.attachPath = path; } newMsg.local_id = newMsg.id = UserConfig.getNewMessageId(); newMsg.from_id = UserConfig.getClientUserId(); @@ -423,7 +494,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter if (high_id == 1) { if (currentChatInfo == null) { processSentMessage(newMsg.id); - return; + return 0; } sendToPeers = new ArrayList(); for (TLRPC.TL_chatParticipant participant : currentChatInfo.participants) { @@ -448,7 +519,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter TLRPC.User sendToUser = MessagesController.getInstance().getUser(lower_id); if (sendToUser == null) { processSentMessage(newMsg.id); - return; + return 0; } if (sendToUser instanceof TLRPC.TL_userForeign || sendToUser instanceof TLRPC.TL_userRequest) { sendToPeer = new TLRPC.TL_inputPeerForeign(); @@ -782,7 +853,9 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter newMsgObj.messageOwner.send_state = MessageObject.MESSAGE_SEND_STATE_SEND_ERROR; NotificationCenter.getInstance().postNotificationName(NotificationCenter.messageSendError, newMsgObj.messageOwner.id); processSentMessage(newMsgObj.messageOwner.id); + return 0; } + return newMsg != null ? newMsg.id : 0; } private void performSendDelayedMessage(final DelayedMessage message) { @@ -795,63 +868,78 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter FileLoader.getInstance().uploadFile(location, true, true); } } else if (message.type == 1) { - if (message.sendRequest != null) { - TLRPC.InputMedia media = null; - if (message.sendRequest instanceof TLRPC.TL_messages_sendMedia) { - media = ((TLRPC.TL_messages_sendMedia)message.sendRequest).media; - } else if (message.sendRequest instanceof TLRPC.TL_messages_sendBroadcast) { - media = ((TLRPC.TL_messages_sendBroadcast)message.sendRequest).media; - } - if (media.thumb == null) { - String location = FileLoader.getInstance().getDirectory(FileLoader.MEDIA_DIR_CACHE) + "/" + message.location.volume_id + "_" + message.location.local_id + ".jpg"; - putToDelayedMessages(location, message); - FileLoader.getInstance().uploadFile(location, false, true); - } else { - String location = message.videoLocation.path; - if (location == null) { - location = FileLoader.getInstance().getDirectory(FileLoader.MEDIA_DIR_CACHE) + "/" + message.videoLocation.id + ".mp4"; - } - putToDelayedMessages(location, message); - if (message.videoLocation.estimatedSize) { - FileLoader.getInstance().uploadFile(location, false, false, message.videoLocation.size); - } else { - FileLoader.getInstance().uploadFile(location, false, false); - } - } - } else { - String location = message.videoLocation.path; + if (message.videoLocation.videoEditedInfo != null) { + String location = message.obj.messageOwner.attachPath; if (location == null) { location = FileLoader.getInstance().getDirectory(FileLoader.MEDIA_DIR_CACHE) + "/" + message.videoLocation.id + ".mp4"; } putToDelayedMessages(location, message); - if (message.videoLocation.estimatedSize) { - FileLoader.getInstance().uploadFile(location, true, false, message.videoLocation.size); + MediaController.getInstance().scheduleVideoConvert(message.obj); + } else { + if (message.sendRequest != null) { + TLRPC.InputMedia media = null; + if (message.sendRequest instanceof TLRPC.TL_messages_sendMedia) { + media = ((TLRPC.TL_messages_sendMedia) message.sendRequest).media; + } else if (message.sendRequest instanceof TLRPC.TL_messages_sendBroadcast) { + media = ((TLRPC.TL_messages_sendBroadcast) message.sendRequest).media; + } + if (media.file == null) { + String location = message.obj.messageOwner.attachPath; + if (location == null) { + location = FileLoader.getInstance().getDirectory(FileLoader.MEDIA_DIR_CACHE) + "/" + message.videoLocation.id + ".mp4"; + } + putToDelayedMessages(location, message); + if (message.obj.messageOwner.videoEditedInfo != null) { + FileLoader.getInstance().uploadFile(location, false, false, message.videoLocation.size); + } else { + FileLoader.getInstance().uploadFile(location, false, false); + } + } else { + String location = FileLoader.getInstance().getDirectory(FileLoader.MEDIA_DIR_CACHE) + "/" + message.location.volume_id + "_" + message.location.local_id + ".jpg"; + putToDelayedMessages(location, message); + FileLoader.getInstance().uploadFile(location, false, true); + } } else { - FileLoader.getInstance().uploadFile(location, true, false); + String location = message.obj.messageOwner.attachPath; + if (location == null) { + location = FileLoader.getInstance().getDirectory(FileLoader.MEDIA_DIR_CACHE) + "/" + message.videoLocation.id + ".mp4"; + } + putToDelayedMessages(location, message); + if (message.videoLocation.videoEditedInfo != null) { + FileLoader.getInstance().uploadFile(location, true, false, message.videoLocation.size); + } else { + FileLoader.getInstance().uploadFile(location, true, false); + } } } } else if (message.type == 2) { TLRPC.InputMedia media = null; - if (message.sendRequest instanceof TLRPC.TL_messages_sendMedia) { - media = ((TLRPC.TL_messages_sendMedia)message.sendRequest).media; - } else if (message.sendRequest instanceof TLRPC.TL_messages_sendBroadcast) { - media = ((TLRPC.TL_messages_sendBroadcast)message.sendRequest).media; - } - if (message.sendRequest != null && media.thumb == null && message.location != null) { - String location = FileLoader.getInstance().getDirectory(FileLoader.MEDIA_DIR_CACHE) + "/" + message.location.volume_id + "_" + message.location.local_id + ".jpg"; - putToDelayedMessages(location, message); - FileLoader.getInstance().uploadFile(location, false, true); - } else { - String location = message.documentLocation.path; - putToDelayedMessages(location, message); - if (message.sendRequest != null) { - FileLoader.getInstance().uploadFile(location, false, false); - } else { - FileLoader.getInstance().uploadFile(location, true, false); + if (message.sendRequest != null) { + if (message.sendRequest instanceof TLRPC.TL_messages_sendMedia) { + media = ((TLRPC.TL_messages_sendMedia) message.sendRequest).media; + } else if (message.sendRequest instanceof TLRPC.TL_messages_sendBroadcast) { + media = ((TLRPC.TL_messages_sendBroadcast) message.sendRequest).media; } + if (media.file == null) { + String location = message.obj.messageOwner.attachPath; + putToDelayedMessages(location, message); + if (message.sendRequest != null) { + FileLoader.getInstance().uploadFile(location, false, false); + } else { + FileLoader.getInstance().uploadFile(location, true, false); + } + } else if (media.thumb == null && message.location != null) { + String location = FileLoader.getInstance().getDirectory(FileLoader.MEDIA_DIR_CACHE) + "/" + message.location.volume_id + "_" + message.location.local_id + ".jpg"; + putToDelayedMessages(location, message); + FileLoader.getInstance().uploadFile(location, false, true); + } + } else { + String location = message.obj.messageOwner.attachPath; + putToDelayedMessages(location, message); + FileLoader.getInstance().uploadFile(location, true, false); } } else if (message.type == 3) { - String location = message.audioLocation.path; + String location = message.obj.messageOwner.attachPath; putToDelayedMessages(location, message); if (message.sendRequest != null) { FileLoader.getInstance().uploadFile(location, false, true); @@ -1187,7 +1275,6 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter newMsg.media.video.access_hash = file.access_hash; newMsg.media.video.key = decryptedMessage.media.key; newMsg.media.video.iv = decryptedMessage.media.iv; - newMsg.media.video.path = video.path; newMsg.media.video.mime_type = video.mime_type; ArrayList arr = new ArrayList(); arr.add(newMsg); @@ -1206,12 +1293,11 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter newMsg.media.document.size = file.size; newMsg.media.document.key = decryptedMessage.media.key; newMsg.media.document.iv = decryptedMessage.media.iv; - newMsg.media.document.path = document.path; newMsg.media.document.thumb = document.thumb; newMsg.media.document.dc_id = file.dc_id; - if (document.path != null && document.path.startsWith(FileLoader.getInstance().getDirectory(FileLoader.MEDIA_DIR_CACHE).getAbsolutePath())) { - File cacheFile = new File(document.path); + if (newMsg.attachPath != null && newMsg.attachPath.startsWith(FileLoader.getInstance().getDirectory(FileLoader.MEDIA_DIR_CACHE).getAbsolutePath())) { + File cacheFile = new File(newMsg.attachPath); File cacheFile2 = FileLoader.getPathToAttach(newMsg.media.document); cacheFile.renameTo(cacheFile2); } @@ -1233,7 +1319,6 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter newMsg.media.audio.dc_id = file.dc_id; newMsg.media.audio.key = decryptedMessage.media.key; newMsg.media.audio.iv = decryptedMessage.media.iv; - newMsg.media.audio.path = audio.path; newMsg.media.audio.mime_type = audio.mime_type; String fileName = audio.dc_id + "_" + audio.id + ".ogg"; @@ -1399,4 +1484,95 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter } }); } + + /* + private void startConvert() throws Exception { + IsoFile isoFile = new IsoFile(videoPath); + TrackBox trackBox = (TrackBox) Path.getPath(isoFile, "/moov/trak/mdia/minf/stbl/stsd/avc1/../../../../../"); + AvcConfigurationBox avcConfigurationBox = (AvcConfigurationBox) Path.getPath(trackBox, "mdia/minf/stbl/stsd/avc1/avcC"); + avcConfigurationBox.parseDetails(); + + Movie movie = MovieCreator.build(videoPath); + + List tracks = movie.getTracks(); + movie.setTracks(new LinkedList()); + + double startTime = 0; + double endTime = 0; + + for (Track track : tracks) { + if (track.getSyncSamples() != null && track.getSyncSamples().length > 0) { + double duration = (double) track.getDuration() / (double) track.getTrackMetaData().getTimescale(); + startTime = correctTimeToSyncSample(track, videoTimelineView.getLeftProgress() * duration, false); + endTime = videoTimelineView.getRightProgress() * duration; + break; + } + } + + for (Track track : tracks) { + long currentSample = 0; + double currentTime = 0; + double lastTime = 0; + long startSample = 0; + long endSample = -1; + + for (int i = 0; i < track.getSampleDurations().length; i++) { + long delta = track.getSampleDurations()[i]; + if (currentTime > lastTime && currentTime <= startTime) { + startSample = currentSample; + } + if (currentTime > lastTime && currentTime <= endTime) { + endSample = currentSample; + } + lastTime = currentTime; + currentTime += (double) delta / (double) track.getTrackMetaData().getTimescale(); + currentSample++; + } + movie.addTrack(new CroppedTrack(track, startSample, endSample)); + } + Container out = new DefaultMp4Builder().build(movie); + + String fileName = Integer.MIN_VALUE + "_" + UserConfig.lastLocalId + ".mp4"; + UserConfig.lastLocalId--; + File cacheFile = new File(FileLoader.getInstance().getDirectory(FileLoader.MEDIA_DIR_CACHE), fileName); + UserConfig.saveConfig(false); + + FileOutputStream fos = new FileOutputStream(cacheFile); + FileChannel fc = fos.getChannel(); + out.writeContainer(fc); + + fc.close(); + fos.close(); + if (delegate != null) { + //delegate.didFinishedVideoConverting(cacheFile.getAbsolutePath()); + finishFragment(); + } + } + + private static double correctTimeToSyncSample(Track track, double cutHere, boolean next) { + double[] timeOfSyncSamples = new double[track.getSyncSamples().length]; + long currentSample = 0; + double currentTime = 0; + for (int i = 0; i < track.getSampleDurations().length; i++) { + long delta = track.getSampleDurations()[i]; + if (Arrays.binarySearch(track.getSyncSamples(), currentSample + 1) >= 0) { + timeOfSyncSamples[Arrays.binarySearch(track.getSyncSamples(), currentSample + 1)] = currentTime; + } + currentTime += (double) delta / (double) track.getTrackMetaData().getTimescale(); + currentSample++; + } + double previous = 0; + for (double timeOfSyncSample : timeOfSyncSamples) { + if (timeOfSyncSample > cutHere) { + if (next) { + return timeOfSyncSample; + } else { + return previous; + } + } + previous = timeOfSyncSample; + } + return timeOfSyncSamples[timeOfSyncSamples.length - 1]; + } + */ } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/FileLoader.java b/TMessagesProj/src/main/java/org/telegram/messenger/FileLoader.java index cb988014..d88b4840 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/FileLoader.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/FileLoader.java @@ -75,7 +75,14 @@ public class FileLoader { public File getDirectory(int type) { File dir = mediaDirs.get(type); if (dir == null && type != MEDIA_DIR_CACHE) { - return mediaDirs.get(MEDIA_DIR_CACHE); + dir = mediaDirs.get(MEDIA_DIR_CACHE); + } + try { + if (!dir.isDirectory()) { + dir.mkdirs(); + } + } catch (Exception e) { + //don't promt } return dir; } @@ -588,6 +595,16 @@ public class FileLoader { return new File(""); } + public static File getExistPathToAttach(TLObject attach) { + File path = getInstance().getDirectory(MEDIA_DIR_CACHE); + String fileName = getAttachFileName(attach); + File attachPath = new File(path, fileName); + if (attachPath.exists()) { + return attachPath; + } + return getPathToAttach(attach); + } + public static File getPathToAttach(TLObject attach) { File dir = null; if (attach instanceof TLRPC.Video) { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/FileUploadOperation.java b/TMessagesProj/src/main/java/org/telegram/messenger/FileUploadOperation.java index c78587bb..93b4eb4d 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/FileUploadOperation.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/FileUploadOperation.java @@ -42,8 +42,9 @@ public class FileUploadOperation { private boolean isBigFile = false; private String fileKey; private int estimatedSize = 0; - FileInputStream stream; - MessageDigest mdEnc = null; + private int uploadStartTime = 0; + private FileInputStream stream; + private MessageDigest mdEnc = null; public static interface FileUploadOperationDelegate { public abstract void didFinishUploadingFile(FileUploadOperation operation, TLRPC.InputFile inputFile, TLRPC.InputEncryptedFile inputEncryptedFile); @@ -93,14 +94,16 @@ public class FileUploadOperation { remove(fileKey + "_ivc").commit(); } - public void checkNewDataAvailable(final long finalSize) { + protected void checkNewDataAvailable(final long finalSize) { Utilities.stageQueue.postRunnable(new Runnable() { @Override public void run() { - if (finalSize != 0) { + if (estimatedSize != 0 && finalSize != 0) { estimatedSize = 0; totalFileSize = finalSize; totalPartsCount = (int) Math.ceil((float) totalFileSize / (float) uploadChunkSize); + SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("uploadinfo", Activity.MODE_PRIVATE); + storeFileUploadInfo(preferences); } if (requestToken == 0) { startUploadRequest(); @@ -109,6 +112,20 @@ public class FileUploadOperation { }); } + private void storeFileUploadInfo(SharedPreferences preferences) { + SharedPreferences.Editor editor = preferences.edit(); + editor.putInt(fileKey + "_time", uploadStartTime); + editor.putLong(fileKey + "_size", totalFileSize); + editor.putLong(fileKey + "_id", currentFileId); + editor.remove(fileKey + "_uploaded"); + if (isEncrypted) { + editor.putString(fileKey + "_iv", Utilities.bytesToHex(iv)); + editor.putString(fileKey + "_ivc", Utilities.bytesToHex(ivChange)); + editor.putString(fileKey + "_key", Utilities.bytesToHex(key)); + } + editor.commit(); + } + private void startUploadRequest() { if (state != 1) { return; @@ -151,7 +168,7 @@ public class FileUploadOperation { fileKey = Utilities.MD5(uploadingFilePath + (isEncrypted ? "enc" : "")); SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("uploadinfo", Activity.MODE_PRIVATE); long fileSize = preferences.getLong(fileKey + "_size", 0); - int currentTime = (int)(System.currentTimeMillis() / 1000); + uploadStartTime = (int)(System.currentTimeMillis() / 1000); boolean rewrite = false; if (estimatedSize == 0 && fileSize == totalFileSize) { currentFileId = preferences.getLong(fileKey + "_id", 0); @@ -170,9 +187,9 @@ public class FileUploadOperation { } } if (!rewrite && date != 0) { - if (isBigFile && date < currentTime - 60 * 60 * 24) { + if (isBigFile && date < uploadStartTime - 60 * 60 * 24) { date = 0; - } else if (!isBigFile && date < currentTime - 60 * 60 * 1.5f) { + } else if (!isBigFile && date < uploadStartTime - 60 * 60 * 1.5f) { date = 0; } if (date != 0) { @@ -235,17 +252,7 @@ public class FileUploadOperation { } currentFileId = Utilities.random.nextLong(); if (estimatedSize == 0) { - SharedPreferences.Editor editor = preferences.edit(); - editor.putInt(fileKey + "_time", currentTime); - editor.putLong(fileKey + "_size", totalFileSize); - editor.putLong(fileKey + "_id", currentFileId); - editor.remove(fileKey + "_uploaded"); - if (isEncrypted) { - editor.putString(fileKey + "_iv", Utilities.bytesToHex(iv)); - editor.putString(fileKey + "_ivc", Utilities.bytesToHex(ivChange)); - editor.putString(fileKey + "_key", Utilities.bytesToHex(key)); - } - editor.commit(); + storeFileUploadInfo(preferences); } } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/TLRPC.java b/TMessagesProj/src/main/java/org/telegram/messenger/TLRPC.java index e5417040..3f08baa4 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/TLRPC.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/TLRPC.java @@ -9,6 +9,7 @@ package org.telegram.messenger; import java.util.ArrayList; +import java.util.Locale; @SuppressWarnings("unchecked") public class TLRPC { @@ -8539,6 +8540,7 @@ public class TLRPC { public int local_id = 0; public long dialog_id; public int ttl; + public VideoEditedInfo videoEditedInfo = null; } public static class TL_messageForwarded extends Message { @@ -8559,9 +8561,13 @@ public class TLRPC { if (id < 0) { fwd_msg_id = stream.readInt32(); } - if (id < 0 || (media != null && !(media instanceof TL_messageMediaEmpty) && message != null && message.length() != 0 && message.equals("-1"))) { + if (id < 0 || (media != null && !(media instanceof TL_messageMediaEmpty) && message != null && message.length() != 0 && message.startsWith("-1"))) { attachPath = stream.readString(); } + if (id < 0 && message.length() > 6 && media instanceof TL_messageMediaVideo) { + videoEditedInfo = new VideoEditedInfo(); + videoEditedInfo.parseString(message); + } } public void serializeToStream(AbsSerializedData stream) { @@ -8595,9 +8601,13 @@ public class TLRPC { date = stream.readInt32(); message = stream.readString(); media = (MessageMedia)TLClassStore.Instance().TLdeserialize(stream, stream.readInt32()); - if (id < 0 || (media != null && !(media instanceof TL_messageMediaEmpty) && message != null && message.length() != 0 && message.equals("-1"))) { + if (id < 0 || (media != null && !(media instanceof TL_messageMediaEmpty) && message != null && message.length() != 0 && message.startsWith("-1"))) { attachPath = stream.readString(); } + if (id < 0 && message.length() > 6 && media instanceof TL_messageMediaVideo) { + videoEditedInfo = new VideoEditedInfo(); + videoEditedInfo.parseString(message); + } } public void serializeToStream(AbsSerializedData stream) { @@ -8954,6 +8964,46 @@ public class TLRPC { } } + public static class VideoEditedInfo { + public long startTime; + public long endTime; + public int rotationValue; + public int originalWidth; + public int originalHeight; + public int resultWidth; + public int resultHeight; + public int bitrate; + public String originalPath; + + public String getString() { + return String.format(Locale.US, "-1_%d_%d_%d_%d_%d_%d_%d_%d_%s", startTime, endTime, rotationValue, originalWidth, originalHeight, bitrate, resultWidth, resultHeight, originalPath); + } + + public void parseString(String string) { + if (string.length() < 6) { + return; + } + String args[] = string.split("_"); + if (args.length >= 10) { + startTime = Long.parseLong(args[1]); + endTime = Long.parseLong(args[2]); + rotationValue = Integer.parseInt(args[3]); + originalWidth = Integer.parseInt(args[4]); + originalHeight = Integer.parseInt(args[5]); + bitrate = Integer.parseInt(args[6]); + resultWidth = Integer.parseInt(args[7]); + resultHeight = Integer.parseInt(args[8]); + for (int a = 9; a < args.length; a++) { + if (originalPath == null) { + originalPath = args[a]; + } else { + originalPath += "_" + args[a]; + } + } + } + } + } + public static class Video extends TLObject { public long id; public long access_hash; @@ -8967,10 +9017,9 @@ public class TLRPC { public int dc_id; public int w; public int h; - public String path; public byte[] key; public byte[] iv; - public boolean estimatedSize; + public VideoEditedInfo videoEditedInfo = null; } public static class Document extends TLObject { @@ -8983,7 +9032,6 @@ public class TLRPC { public int size; public PhotoSize thumb; public int dc_id; - public String path; public byte[] key; public byte[] iv; } @@ -8997,7 +9045,6 @@ public class TLRPC { public String mime_type; public int size; public int dc_id; - public String path; public byte[] key; public byte[] iv; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatBaseCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatBaseCell.java index 700a43bc..480fd97d 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatBaseCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatBaseCell.java @@ -564,17 +564,17 @@ public class ChatBaseCell extends BaseCell { boolean drawError = false; boolean isBroadcast = (int)(currentMessageObject.getDialogId() >> 32) == 1; - if (currentMessageObject.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SENDING) { + if (currentMessageObject.isSending()) { drawCheck1 = false; drawCheck2 = false; drawClock = true; drawError = false; - } else if (currentMessageObject.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SEND_ERROR) { + } else if (currentMessageObject.isSendError()) { drawCheck1 = false; drawCheck2 = false; drawClock = false; drawError = true; - } else if (currentMessageObject.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SENT) { + } else if (currentMessageObject.isSent()) { if (!currentMessageObject.isUnread()) { drawCheck1 = true; drawCheck2 = true; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMediaCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMediaCell.java index 5522bd9e..8036fec0 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMediaCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMediaCell.java @@ -52,8 +52,8 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD private static Drawable videoIconDrawable; private static Drawable docMenuInDrawable; private static Drawable docMenuOutDrawable; - private static Drawable[] buttonStatesDrawables = new Drawable[4]; - private static Drawable[][] buttonStatesDrawablesDoc = new Drawable[2][2]; + private static Drawable[] buttonStatesDrawables = new Drawable[5]; + private static Drawable[][] buttonStatesDrawablesDoc = new Drawable[3][2]; private static TextPaint infoPaint; private static MessageObject lastDownloadedGifMessage = null; private static TextPaint namePaint; @@ -114,10 +114,13 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD buttonStatesDrawables[1] = getResources().getDrawable(R.drawable.photocancel); buttonStatesDrawables[2] = getResources().getDrawable(R.drawable.photogif); buttonStatesDrawables[3] = getResources().getDrawable(R.drawable.playvideo); + buttonStatesDrawables[4] = getResources().getDrawable(R.drawable.photopause); buttonStatesDrawablesDoc[0][0] = getResources().getDrawable(R.drawable.docload_b); buttonStatesDrawablesDoc[1][0] = getResources().getDrawable(R.drawable.doccancel_b); + buttonStatesDrawablesDoc[2][0] = getResources().getDrawable(R.drawable.docpause_b); buttonStatesDrawablesDoc[0][1] = getResources().getDrawable(R.drawable.docload_g); buttonStatesDrawablesDoc[1][1] = getResources().getDrawable(R.drawable.doccancel_g); + buttonStatesDrawablesDoc[2][1] = getResources().getDrawable(R.drawable.docpause_g); videoIconDrawable = getResources().getDrawable(R.drawable.ic_video); docMenuInDrawable = getResources().getDrawable(R.drawable.doc_actions_b); docMenuOutDrawable = getResources().getDrawable(R.drawable.doc_actions_g); @@ -172,7 +175,7 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD float y = event.getY(); boolean result = false; - int side = AndroidUtilities.dp(44); + int side = AndroidUtilities.dp(48); if (event.getAction() == MotionEvent.ACTION_DOWN) { if (delegate == null || delegate.canPerformActions()) { if (buttonState != -1 && x >= buttonX && x <= buttonX + side && y >= buttonY && y <= buttonY + side) { @@ -321,7 +324,7 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD buttonState = 1; invalidate(); } else if (buttonState == 1) { - if (currentMessageObject.isOut() && currentMessageObject.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SENDING) { + if (currentMessageObject.isOut() && currentMessageObject.isSending()) { if (delegate != null) { delegate.didPressedCancelSendButton(this); } @@ -616,7 +619,7 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD if (fileName == null) { return; } - if (currentMessageObject.isOut() && currentMessageObject.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SENDING) { + if (currentMessageObject.isOut() && currentMessageObject.isSending()) { if (currentMessageObject.messageOwner.attachPath != null) { MediaController.getInstance().addLoadingFileObserver(currentMessageObject.messageOwner.attachPath, this); progressVisible = true; @@ -709,7 +712,7 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD } private void invalidateProgress() { - int offset = AndroidUtilities.dp(1); + int offset = AndroidUtilities.dp(2); invalidate((int)progressRect.left - offset, (int)progressRect.top - offset, (int)progressRect.right + offset * 2, (int)progressRect.bottom + offset * 2); } @@ -742,10 +745,10 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD } } photoImage.setImageCoords(x, AndroidUtilities.dp(7), photoWidth, photoHeight); - int size = AndroidUtilities.dp(44); + int size = AndroidUtilities.dp(48); buttonX = (int)(x + (photoWidth - size) / 2.0f); buttonY = (int)(AndroidUtilities.dp(7) + (photoHeight - size) / 2.0f); - progressRect.set(buttonX + AndroidUtilities.dp(1), buttonY + AndroidUtilities.dp(1), buttonX + AndroidUtilities.dp(43), buttonY + AndroidUtilities.dp(43)); + progressRect.set(buttonX + AndroidUtilities.dp(1), buttonY + AndroidUtilities.dp(1), buttonX + AndroidUtilities.dp(47), buttonY + AndroidUtilities.dp(47)); } @Override @@ -783,7 +786,7 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD if (buttonState == -1) { Drawable drawable = currentMessageObject.isOut() ? placeholderDocOutDrawable : placeholderDocInDrawable; - setDrawableBounds(drawable, photoImage.getImageX() + AndroidUtilities.dp(27), photoImage.getImageY() + AndroidUtilities.dp(27)); + setDrawableBounds(drawable, photoImage.getImageX() + AndroidUtilities.dp(19), photoImage.getImageY() + AndroidUtilities.dp(19)); drawable.draw(canvas); } if (currentMessageObject.isOut()) { @@ -802,9 +805,17 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD if (buttonState >= 0 && buttonState < 4) { Drawable currentButtonDrawable = null; if (currentMessageObject.type == 9 && !imageDrawn) { - currentButtonDrawable = buttonStatesDrawablesDoc[buttonState][currentMessageObject.isOut() ? 1 : 0]; + if (buttonState == 1 && !currentMessageObject.isSending()) { + currentButtonDrawable = buttonStatesDrawablesDoc[2][currentMessageObject.isOut() ? 1 : 0]; + } else { + currentButtonDrawable = buttonStatesDrawablesDoc[buttonState][currentMessageObject.isOut() ? 1 : 0]; + } } else { - currentButtonDrawable = buttonStatesDrawables[buttonState]; + if (buttonState == 1 && !currentMessageObject.isSending()) { + currentButtonDrawable = buttonStatesDrawables[4]; + } else { + currentButtonDrawable = buttonStatesDrawables[buttonState]; + } } setDrawableBounds(currentButtonDrawable, buttonX, buttonY); currentButtonDrawable.draw(canvas); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogCell.java index d4ae34ae..ef6f1919 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogCell.java @@ -528,18 +528,18 @@ public class DialogCell extends BaseCell { } if (message.isFromMe() && message.isOut()) { - if (message.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SENDING) { + if (message.isSending()) { drawCheck1 = false; drawCheck2 = false; drawClock = true; drawError = false; - } else if (message.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SEND_ERROR) { + } else if (message.isSendError()) { drawCheck1 = false; drawCheck2 = false; drawClock = false; drawError = true; drawCount = false; - } else if (message.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SENT) { + } else if (message.isSent()) { if (!message.isUnread()) { drawCheck1 = true; drawCheck2 = true; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java index e3ee7d9f..89fe5f20 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java @@ -21,6 +21,7 @@ import android.content.res.Configuration; import android.graphics.Bitmap; import android.graphics.Rect; import android.graphics.drawable.Drawable; +import android.media.MediaMetadataRetriever; import android.media.MediaPlayer; import android.media.ThumbnailUtils; import android.net.Uri; @@ -1072,9 +1073,9 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not private int getMessageType(MessageObject messageObject) { if (currentEncryptedChat == null) { - boolean isBroadcastError = isBraodcast && messageObject.messageOwner.id <= 0 && messageObject.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SEND_ERROR; + boolean isBroadcastError = isBraodcast && messageObject.messageOwner.id <= 0 && messageObject.isSendError(); if (!isBraodcast && messageObject.messageOwner.id <= 0 && messageObject.isOut() || isBroadcastError) { - if (messageObject.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SEND_ERROR) { + if (messageObject.isSendError()) { if (!(messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaEmpty)) { return 0; } else { @@ -1128,13 +1129,13 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } else { if (messageObject.type == 6) { return -1; - } else if (messageObject.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SEND_ERROR) { + } else if (messageObject.isSendError()) { if (!(messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaEmpty)) { return 0; } else { return 6; } - } else if (messageObject.type == 10 || messageObject.type == 11 || messageObject.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SENDING) { + } else if (messageObject.type == 10 || messageObject.type == 11 || messageObject.isSending()) { if (messageObject.messageOwner.id == 0) { return -1; } @@ -1243,6 +1244,9 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } CharSequence printString = MessagesController.getInstance().printingStrings.get(dialog_id); + if (printString != null) { + printString = TextUtils.replace(printString, new String[]{"..."}, new String[]{""}); + } if (printString == null || printString.length() == 0) { lastPrintString = null; setTypingAnimation(false); @@ -1362,7 +1366,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not fragment.setDelegate(this); presentFragment(fragment); } else { - processSendingVideo(videoPath, null, 0, 0, 0, 0); + processSendingVideo(videoPath, 0, 0, 0, 0, null); } } else if (requestCode == 21) { if (data == null || data.getData() == null) { @@ -1385,13 +1389,18 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } @Override - public void didStartVideoConverting(String videoPath, String originalPath, long esimatedSize, int duration, int width, int height) { - processSendingVideo(videoPath, originalPath, esimatedSize, duration, width, height); - } - - @Override - public void didAppenedVideoData(String videoPath, long finalSize) { - FileLoader.getInstance().checkUploadNewDataAvailable(videoPath, currentEncryptedChat != null, finalSize); + public void didFinishEditVideo(String videoPath, long startTime, long endTime, int resultWidth, int resultHeight, int rotationValue, int originalWidth, int originalHeight, int bitrate, long estimatedSize, long estimatedDuration) { + TLRPC.VideoEditedInfo videoEditedInfo = new TLRPC.VideoEditedInfo(); + videoEditedInfo.startTime = startTime; + videoEditedInfo.endTime = endTime; + videoEditedInfo.rotationValue = rotationValue; + videoEditedInfo.originalWidth = originalWidth; + videoEditedInfo.originalHeight = originalHeight; + videoEditedInfo.bitrate = bitrate; + videoEditedInfo.resultWidth = resultWidth; + videoEditedInfo.resultHeight = resultHeight; + videoEditedInfo.originalPath = videoPath; + processSendingVideo(videoPath, estimatedSize, estimatedDuration, resultWidth, resultHeight, videoEditedInfo); } private void showAttachmentError() { @@ -1525,7 +1534,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not }).start(); } - private void processSendingDocumentInternal(String path, String originalPath) { + private void processSendingDocumentInternal(final String path, String originalPath) { if (path == null || path.length() == 0) { return; } @@ -1586,14 +1595,13 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not document.thumb.type = "s"; } } - document.path = path; final TLRPC.TL_document documentFinal = document; final String originalPathFinal = originalPath; AndroidUtilities.RunOnUIThread(new Runnable() { @Override public void run() { - SendMessagesHelper.getInstance().sendMessage(documentFinal, originalPathFinal, dialog_id); + SendMessagesHelper.getInstance().sendMessage(documentFinal, originalPathFinal, path, dialog_id); if (chatListView != null) { chatListView.setSelectionFromTop(messages.size() - 1, -100000 - chatListView.getPaddingTop()); } @@ -1629,29 +1637,23 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not }).start(); } - public void processSendingVideo(final String videoPath, final String originalFile, final long estimatedSize, final int duration, final int width, final int height) { + public void processSendingVideo(final String videoPath, final long estimatedSize, final long duration, final int width, final int height, final TLRPC.VideoEditedInfo videoEditedInfo) { if (videoPath == null || videoPath.length() == 0) { return; } new Thread(new Runnable() { @Override public void run() { - String originalPath = null; - if (originalFile != null) { - originalPath = originalFile; - } else { - originalPath = videoPath; - } + String path = videoPath; + String originalPath = videoPath; File temp = new File(originalPath); originalPath += temp.length() + "_" + temp.lastModified(); - TLRPC.TL_video video = null;// (TLRPC.TL_video)MessagesStorage.getInstance().getSentFile(originalPath, currentEncryptedChat == null ? 2 : 5); + if (videoEditedInfo != null) { + originalPath += duration + "_" + videoEditedInfo.startTime + "_" + videoEditedInfo.endTime; + } + TLRPC.TL_video video = (TLRPC.TL_video)MessagesStorage.getInstance().getSentFile(originalPath, currentEncryptedChat == null ? 2 : 5); if (video == null) { - Bitmap thumb = null; - if (originalFile != null) { - thumb = ThumbnailUtils.createVideoThumbnail(originalFile, MediaStore.Video.Thumbnails.MINI_KIND); - } else { - thumb = ThumbnailUtils.createVideoThumbnail(videoPath, MediaStore.Video.Thumbnails.MINI_KIND); - } + Bitmap thumb = ThumbnailUtils.createVideoThumbnail(videoPath, MediaStore.Video.Thumbnails.MINI_KIND); TLRPC.PhotoSize size = ImageLoader.scaleAndSaveImage(thumb, 90, 90, 55, currentEncryptedChat != null); if (size == null) { return; @@ -1662,39 +1664,64 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not video.caption = ""; video.mime_type = "video/mp4"; video.id = 0; - if (estimatedSize != 0) { + UserConfig.saveConfig(false); + + if (videoEditedInfo != null) { + video.duration = (int)(duration / 1000); + if (videoEditedInfo.rotationValue == 90 || videoEditedInfo.rotationValue == 270) { + video.w = height; + video.h = width; + } else { + video.w = width; + video.h = height; + } video.size = (int)estimatedSize; + video.videoEditedInfo = videoEditedInfo; + String fileName = Integer.MIN_VALUE + "_" + UserConfig.lastLocalId + ".mp4"; + UserConfig.lastLocalId--; + File cacheFile = new File(FileLoader.getInstance().getDirectory(FileLoader.MEDIA_DIR_CACHE), fileName); + UserConfig.saveConfig(false); + path = cacheFile.getAbsolutePath(); } else { if (temp != null && temp.exists()) { video.size = (int) temp.length(); } - } - UserConfig.saveConfig(false); - - if (duration != 0) { - video.duration = duration / 1000; - video.w = width; - video.h = height; - video.estimatedSize = true; - } else { - MediaPlayer mp = MediaPlayer.create(ApplicationLoader.applicationContext, Uri.fromFile(new File(videoPath))); - if (mp == null) { - return; + if (Build.VERSION.SDK_INT >= 10) { + MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever(); + mediaMetadataRetriever.setDataSource(videoPath); + String width = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH); + if (width != null) { + video.w = Integer.parseInt(width); + } + String height = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT); + if (height != null) { + video.h = Integer.parseInt(height); + } + String duration = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); + if (duration != null) { + video.duration = (int) Math.ceil(Long.parseLong(duration) / 1000.0f); + } + mediaMetadataRetriever.release(); + } else { + MediaPlayer mp = MediaPlayer.create(ApplicationLoader.applicationContext, Uri.fromFile(new File(videoPath))); + if (mp == null) { + return; + } + video.duration = (int) Math.ceil(mp.getDuration() / 1000.0f); + video.w = mp.getVideoWidth(); + video.h = mp.getVideoHeight(); + mp.release(); } - video.duration = (int) Math.ceil(mp.getDuration() / 1000.0f); - video.w = mp.getVideoWidth(); - video.h = mp.getVideoHeight(); - mp.release(); } } - video.path = videoPath; final TLRPC.TL_video videoFinal = video; final String originalPathFinal = originalPath; + final String finalPath = path; AndroidUtilities.RunOnUIThread(new Runnable() { @Override public void run() { - SendMessagesHelper.getInstance().sendMessage(videoFinal, originalPathFinal, dialog_id); + SendMessagesHelper.getInstance().sendMessage(videoFinal, originalPathFinal, finalPath, dialog_id); if (chatListView != null) { chatListView.setSelectionFromTop(messages.size() - 1, -100000 - chatListView.getPaddingTop()); } @@ -1989,7 +2016,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not if (currentEncryptedChat != null && obj.messageOwner.action != null && obj.messageOwner.action instanceof TLRPC.TL_messageActionTTLChange && timerButton != null) { timerButton.setTime(obj.messageOwner.action.ttl); } - if (obj.isOut() && obj.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SENDING) { + if (obj.isOut() && obj.isSending()) { scrollToLastMessage(); return; } @@ -3300,10 +3327,10 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not @Override public void didPressedImage(ChatMediaCell cell) { MessageObject message = cell.getMessageObject(); - if (message.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SEND_ERROR) { + if (message.isSendError()) { createMenu(cell, false); return; - } else if (message.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SENDING) { + } else if (message.isSending()) { return; } if (message.type == 1) { @@ -3553,17 +3580,17 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not if (message.isFromMe()) { if (halfCheckImage != null) { - if (message.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SENDING) { + if (message.isSending()) { checkImage.setVisibility(View.INVISIBLE); halfCheckImage.setImageResource(R.drawable.msg_clock); halfCheckImage.setVisibility(View.VISIBLE); - } else if (message.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SEND_ERROR) { + } else if (message.isSendError()) { halfCheckImage.setVisibility(View.VISIBLE); halfCheckImage.setImageResource(R.drawable.msg_warning); if (checkImage != null) { checkImage.setVisibility(View.INVISIBLE); } - } else if (message.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SENT) { + } else if (message.isSent()) { if (!message.messageOwner.unread) { halfCheckImage.setVisibility(View.VISIBLE); checkImage.setVisibility(View.VISIBLE); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java index a67f2c0e..635197d3 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java @@ -115,7 +115,35 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa shadowTablet.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { - return true; + if (!actionBarLayout.fragmentsStack.isEmpty() && event.getAction() == MotionEvent.ACTION_UP) { + float x = event.getX(); + float y = event.getY(); + int location[] = new int[2]; + layersActionBarLayout.getLocationOnScreen(location); + int viewX = location[0]; + int viewY = location[1]; + + if (x > viewX && x < viewX + layersActionBarLayout.getWidth() && y > viewY && y < viewY + layersActionBarLayout.getHeight()) { + return false; + } else { + if (!layersActionBarLayout.fragmentsStack.isEmpty()) { + for (int a = 0; a < layersActionBarLayout.fragmentsStack.size() - 1; a++) { + layersActionBarLayout.removeFragmentFromStack(layersActionBarLayout.fragmentsStack.get(0)); + a--; + } + layersActionBarLayout.closeLastFragment(true); + } + return true; + } + } + return false; + } + }); + + shadowTablet.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + } }); @@ -514,7 +542,7 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa Bundle args = new Bundle(); args.putInt("user_id", push_user_id); ChatActivity fragment = new ChatActivity(args); - if (actionBarLayout.presentFragment(fragment, false, true)) { + if (actionBarLayout.presentFragment(fragment, false, true, true)) { pushOpened = true; } } @@ -522,14 +550,14 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa Bundle args = new Bundle(); args.putInt("chat_id", push_chat_id); ChatActivity fragment = new ChatActivity(args); - if (actionBarLayout.presentFragment(fragment, false, true)) { + if (actionBarLayout.presentFragment(fragment, false, true, true)) { pushOpened = true; } } else if (push_enc_id != 0) { Bundle args = new Bundle(); args.putInt("enc_id", push_enc_id); ChatActivity fragment = new ChatActivity(args); - if (actionBarLayout.presentFragment(fragment, false, true)) { + if (actionBarLayout.presentFragment(fragment, false, true, true)) { pushOpened = true; } } else if (showDialogsList) { @@ -541,28 +569,42 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa isNew = false; } if (videoPath != null || photoPathsArray != null || sendingText != null || documentsPathsArray != null || contactsToSend != null) { - NotificationCenter.getInstance().postNotificationName(NotificationCenter.closeChats); + if (!AndroidUtilities.isTablet()) { + NotificationCenter.getInstance().postNotificationName(NotificationCenter.closeChats); + } Bundle args = new Bundle(); args.putBoolean("onlySelect", true); args.putString("selectAlertString", LocaleController.getString("SendMessagesTo", R.string.SendMessagesTo)); MessagesActivity fragment = new MessagesActivity(args); fragment.setDelegate(this); - actionBarLayout.presentFragment(fragment, false, true); + actionBarLayout.presentFragment(fragment, false, true, true); pushOpened = true; if (PhotoViewer.getInstance().isVisible()) { PhotoViewer.getInstance().closePhoto(true); } } if (open_settings != 0) { - actionBarLayout.presentFragment(new SettingsActivity(), false, true); + actionBarLayout.presentFragment(new SettingsActivity(), false, true, true); pushOpened = true; } if (!pushOpened && !isNew) { - if (actionBarLayout.fragmentsStack.isEmpty()) { - if (!UserConfig.isClientActivated()) { - actionBarLayout.addFragmentToStack(new LoginActivity()); + if (AndroidUtilities.isTablet()) { + if (UserConfig.isClientActivated()) { + if (actionBarLayout.fragmentsStack.isEmpty()) { + actionBarLayout.addFragmentToStack(new MessagesActivity(null)); + } } else { - actionBarLayout.addFragmentToStack(new MessagesActivity(null)); + if (layersActionBarLayout.fragmentsStack.isEmpty()) { + layersActionBarLayout.addFragmentToStack(new LoginActivity()); + } + } + } else { + if (actionBarLayout.fragmentsStack.isEmpty()) { + if (!UserConfig.isClientActivated()) { + actionBarLayout.addFragmentToStack(new LoginActivity()); + } else { + actionBarLayout.addFragmentToStack(new MessagesActivity(null)); + } } } actionBarLayout.showLastFragment(); @@ -589,7 +631,9 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa Bundle args = new Bundle(); args.putBoolean("scrollToTopOnResume", true); - NotificationCenter.getInstance().postNotificationName(NotificationCenter.closeChats); + if (!AndroidUtilities.isTablet()) { + NotificationCenter.getInstance().postNotificationName(NotificationCenter.closeChats); + } if (lower_part != 0) { if (high_id == 1) { args.putInt("chat_id", lower_part); @@ -606,7 +650,7 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa ChatActivity fragment = new ChatActivity(args); actionBarLayout.presentFragment(fragment, true); if (videoPath != null) { - fragment.processSendingVideo(videoPath, null, 0, 0, 0, 0); + fragment.processSendingVideo(videoPath, 0, 0, 0, 0, null); } if (sendingText != null) { fragment.processSendingText(sendingText); @@ -647,7 +691,7 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa } public boolean presentFragment(final BaseFragment fragment, final boolean removeLast, boolean forceWithoutAnimation) { - return actionBarLayout.presentFragment(fragment, removeLast, forceWithoutAnimation); + return actionBarLayout.presentFragment(fragment, removeLast, forceWithoutAnimation, true); } public void needLayout() { @@ -680,18 +724,18 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa relativeLayoutParams.leftMargin = leftWidth; buttonLayoutTablet.setLayoutParams(relativeLayoutParams); - if (AndroidUtilities.isSmallTablet() && mainFragmentsStack.size() == 2) { - BaseFragment chatFragment = mainFragmentsStack.get(1); - mainFragmentsStack.remove(1); + if (AndroidUtilities.isSmallTablet() && actionBarLayout.fragmentsStack.size() == 2) { + BaseFragment chatFragment = actionBarLayout.fragmentsStack.get(1); + actionBarLayout.fragmentsStack.remove(1); actionBarLayout.showLastFragment(); - rightFragmentsStack.add(chatFragment); + rightActionBarLayout.fragmentsStack.add(chatFragment); rightActionBarLayout.showLastFragment(); } - rightActionBarLayout.setVisibility(rightFragmentsStack.isEmpty() ? View.GONE : View.VISIBLE); - buttonLayoutTablet.setVisibility(!mainFragmentsStack.isEmpty() && rightFragmentsStack.isEmpty() ? View.VISIBLE : View.GONE); - backgroundTablet.setVisibility(rightFragmentsStack.isEmpty() ? View.VISIBLE : View.GONE); - shadowTabletSide.setVisibility(!mainFragmentsStack.isEmpty() ? View.VISIBLE : View.GONE); + rightActionBarLayout.setVisibility(rightActionBarLayout.fragmentsStack.isEmpty() ? View.GONE : View.VISIBLE); + buttonLayoutTablet.setVisibility(!actionBarLayout.fragmentsStack.isEmpty() && rightActionBarLayout.fragmentsStack.isEmpty() ? View.VISIBLE : View.GONE); + backgroundTablet.setVisibility(rightActionBarLayout.fragmentsStack.isEmpty() ? View.VISIBLE : View.GONE); + shadowTabletSide.setVisibility(!actionBarLayout.fragmentsStack.isEmpty() ? View.VISIBLE : View.GONE); } else { tabletFullSize = true; @@ -702,13 +746,13 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa shadowTabletSide.setVisibility(View.GONE); rightActionBarLayout.setVisibility(View.GONE); - backgroundTablet.setVisibility(View.GONE); + backgroundTablet.setVisibility(!actionBarLayout.fragmentsStack.isEmpty() ? View.GONE : View.VISIBLE); buttonLayoutTablet.setVisibility(View.GONE); - if (rightFragmentsStack.size() == 1) { - BaseFragment chatFragment = rightFragmentsStack.get(0); - rightFragmentsStack.remove(0); - actionBarLayout.presentFragment(chatFragment, false, true); + if (rightActionBarLayout.fragmentsStack.size() == 1) { + BaseFragment chatFragment = rightActionBarLayout.fragmentsStack.get(0); + rightActionBarLayout.fragmentsStack.remove(0); + actionBarLayout.presentFragment(chatFragment, false, true, false); } } } @@ -831,8 +875,22 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa protected void onSaveInstanceState(Bundle outState) { try { super.onSaveInstanceState(outState); - if (!actionBarLayout.fragmentsStack.isEmpty()) { - BaseFragment lastFragment = actionBarLayout.fragmentsStack.get(actionBarLayout.fragmentsStack.size() - 1); + BaseFragment lastFragment = null; + if (AndroidUtilities.isTablet()) { + if (!layersActionBarLayout.fragmentsStack.isEmpty()) { + lastFragment = layersActionBarLayout.fragmentsStack.get(layersActionBarLayout.fragmentsStack.size() - 1); + } else if (!rightActionBarLayout.fragmentsStack.isEmpty()) { + lastFragment = rightActionBarLayout.fragmentsStack.get(rightActionBarLayout.fragmentsStack.size() - 1); + } else if (!actionBarLayout.fragmentsStack.isEmpty()) { + lastFragment = actionBarLayout.fragmentsStack.get(actionBarLayout.fragmentsStack.size() - 1); + } + } else { + if (!actionBarLayout.fragmentsStack.isEmpty()) { + lastFragment = actionBarLayout.fragmentsStack.get(actionBarLayout.fragmentsStack.size() - 1); + } + } + + if (lastFragment != null) { Bundle args = lastFragment.getArguments(); if (lastFragment instanceof ChatActivity && args != null) { outState.putBundle("args", args); @@ -943,35 +1001,52 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa MessagesActivity messagesActivity = (MessagesActivity)fragment; if (messagesActivity.getDelegate() == null && layout != actionBarLayout) { actionBarLayout.removeAllFragments(); - actionBarLayout.presentFragment(fragment, removeLast, forceWithoutAnimation); + actionBarLayout.presentFragment(fragment, removeLast, forceWithoutAnimation, false); layersActionBarLayout.removeAllFragments(); layersActionBarLayout.setVisibility(View.GONE); if (!tabletFullSize) { shadowTabletSide.setVisibility(View.VISIBLE); - if (rightFragmentsStack.isEmpty()) { + if (rightActionBarLayout.fragmentsStack.isEmpty()) { buttonLayoutTablet.setVisibility(View.VISIBLE); backgroundTablet.setVisibility(View.VISIBLE); } } return false; } - } else if (fragment instanceof ChatActivity) { + } + if (fragment instanceof ChatActivity) { if (!tabletFullSize && layout != rightActionBarLayout) { rightActionBarLayout.setVisibility(View.VISIBLE); buttonLayoutTablet.setVisibility(View.GONE); backgroundTablet.setVisibility(View.GONE); rightActionBarLayout.removeAllFragments(); - rightActionBarLayout.presentFragment(fragment, removeLast, true); - if (removeLast) { - layout.closeLastFragment(true); + rightActionBarLayout.presentFragment(fragment, removeLast, true, false); + if (!layersActionBarLayout.fragmentsStack.isEmpty()) { + for (int a = 0; a < layersActionBarLayout.fragmentsStack.size() - 1; a++) { + layersActionBarLayout.removeFragmentFromStack(layersActionBarLayout.fragmentsStack.get(0)); + a--; + } + layersActionBarLayout.closeLastFragment(true); } return false; } else if (tabletFullSize && layout != actionBarLayout) { - actionBarLayout.presentFragment(fragment, false, forceWithoutAnimation); - if (removeLast) { - layout.closeLastFragment(true); + actionBarLayout.presentFragment(fragment, actionBarLayout.fragmentsStack.size() > 1, forceWithoutAnimation, false); + if (!layersActionBarLayout.fragmentsStack.isEmpty()) { + for (int a = 0; a < layersActionBarLayout.fragmentsStack.size() - 1; a++) { + layersActionBarLayout.removeFragmentFromStack(layersActionBarLayout.fragmentsStack.get(0)); + a--; + } + layersActionBarLayout.closeLastFragment(true); } return false; + } else { + if (!layersActionBarLayout.fragmentsStack.isEmpty()) { + for (int a = 0; a < layersActionBarLayout.fragmentsStack.size() - 1; a++) { + layersActionBarLayout.removeFragmentFromStack(layersActionBarLayout.fragmentsStack.get(0)); + a--; + } + layersActionBarLayout.closeLastFragment(true); + } } } else if (layout != layersActionBarLayout) { layersActionBarLayout.setVisibility(View.VISIBLE); @@ -983,7 +1058,7 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa } else { shadowTablet.setBackgroundColor(0x7F000000); } - layersActionBarLayout.presentFragment(fragment, removeLast, forceWithoutAnimation); + layersActionBarLayout.presentFragment(fragment, removeLast, forceWithoutAnimation, false); return false; } return true; @@ -1004,7 +1079,7 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa layersActionBarLayout.setVisibility(View.GONE); if (!tabletFullSize) { shadowTabletSide.setVisibility(View.VISIBLE); - if (rightFragmentsStack.isEmpty()) { + if (rightActionBarLayout.fragmentsStack.isEmpty()) { buttonLayoutTablet.setVisibility(View.VISIBLE); backgroundTablet.setVisibility(View.VISIBLE); } @@ -1018,9 +1093,23 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa backgroundTablet.setVisibility(View.GONE); rightActionBarLayout.removeAllFragments(); rightActionBarLayout.addFragmentToStack(fragment); + if (!layersActionBarLayout.fragmentsStack.isEmpty()) { + for (int a = 0; a < layersActionBarLayout.fragmentsStack.size() - 1; a++) { + layersActionBarLayout.removeFragmentFromStack(layersActionBarLayout.fragmentsStack.get(0)); + a--; + } + layersActionBarLayout.closeLastFragment(true); + } return false; } else if (tabletFullSize && layout != actionBarLayout) { actionBarLayout.addFragmentToStack(fragment); + if (!layersActionBarLayout.fragmentsStack.isEmpty()) { + for (int a = 0; a < layersActionBarLayout.fragmentsStack.size() - 1; a++) { + layersActionBarLayout.removeFragmentFromStack(layersActionBarLayout.fragmentsStack.get(0)); + a--; + } + layersActionBarLayout.closeLastFragment(true); + } return false; } } else if (layout != layersActionBarLayout) { @@ -1054,6 +1143,10 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa buttonLayoutTablet.setVisibility(View.VISIBLE); backgroundTablet.setVisibility(View.VISIBLE); } + } else if (layout == layersActionBarLayout && actionBarLayout.fragmentsStack.isEmpty()) { + onFinish(); + finish(); + return false; } } else { if (layout.fragmentsStack.size() <= 1) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/PhotoCropActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/PhotoCropActivity.java index 91c0b1be..d65194d4 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/PhotoCropActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/PhotoCropActivity.java @@ -288,6 +288,7 @@ public class PhotoCropActivity extends BaseFragment { @Override public boolean onFragmentCreate() { + swipeBackEnabled = false; String photoPath = getArguments().getString("photoPath"); Uri photoUri = getArguments().getParcelable("photoUri"); if (photoPath == null && photoUri == null) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java b/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java index 15c7a581..85df5663 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java @@ -645,7 +645,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat return; } MessageObject obj = imagesArr.get(currentIndex); - if (obj.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SENT) { + if (obj.isSent()) { ArrayList arr = new ArrayList(); arr.add(obj.messageOwner.id); MessagesController.getInstance().deleteMessages(arr, null, null); @@ -1061,7 +1061,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat return; } if (currentFileName.endsWith("mp4")) { - if (currentMessageObject.messageOwner.send_state != MessageObject.MESSAGE_SEND_STATE_SENDING && currentMessageObject.messageOwner.send_state != MessageObject.MESSAGE_SEND_STATE_SEND_ERROR) { + if (!currentMessageObject.isSending() && !currentMessageObject.isSendError()) { currentOverlay.setVisibility(View.VISIBLE); boolean load = false; if (currentMessageObject.messageOwner.attachPath != null && currentMessageObject.messageOwner.attachPath.length() != 0) { @@ -1393,7 +1393,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat if (currentThumb != null && imageReceiver == centerImage) { placeHolder = currentThumb; } - imageReceiver.setImage(fileLocation, null, placeHolder != null ? new BitmapDrawable(null, placeHolder) : null, size[0]); + imageReceiver.setImage(fileLocation, null, placeHolder != null ? new BitmapDrawable(null, placeHolder) : null, 0); } else { imageReceiver.setImageBitmap(parentActivity.getResources().getDrawable(R.drawable.photoview_placeholder)); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/VideoEditorActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/VideoEditorActivity.java index 9d74a683..cec19bab 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/VideoEditorActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/VideoEditorActivity.java @@ -11,13 +11,7 @@ package org.telegram.ui; import android.annotation.TargetApi; import android.content.res.Configuration; import android.graphics.SurfaceTexture; -import android.media.MediaCodec; -import android.media.MediaCodecInfo; -import android.media.MediaCodecList; -import android.media.MediaExtractor; -import android.media.MediaFormat; import android.media.MediaPlayer; -import android.os.Build; import android.os.Bundle; import android.view.Gravity; import android.view.LayoutInflater; @@ -32,31 +26,18 @@ import android.widget.TextView; import com.coremedia.iso.IsoFile; import com.coremedia.iso.boxes.Box; -import com.coremedia.iso.boxes.Container; import com.coremedia.iso.boxes.MediaBox; import com.coremedia.iso.boxes.MediaHeaderBox; import com.coremedia.iso.boxes.SampleSizeBox; import com.coremedia.iso.boxes.TrackBox; import com.coremedia.iso.boxes.TrackHeaderBox; -import com.coremedia.iso.boxes.h264.AvcConfigurationBox; -import com.googlecode.mp4parser.authoring.Movie; -import com.googlecode.mp4parser.authoring.Track; -import com.googlecode.mp4parser.authoring.builder.DefaultMp4Builder; -import com.googlecode.mp4parser.authoring.container.mp4.MovieCreator; -import com.googlecode.mp4parser.authoring.tracks.CroppedTrack; import com.googlecode.mp4parser.util.Matrix; import com.googlecode.mp4parser.util.Path; import org.telegram.android.AndroidUtilities; import org.telegram.android.LocaleController; -import org.telegram.android.video.InputSurface; -import org.telegram.android.video.MP4Builder; -import org.telegram.android.video.Mp4Movie; -import org.telegram.android.video.OutputSurface; -import org.telegram.messenger.FileLoader; import org.telegram.messenger.FileLog; import org.telegram.messenger.R; -import org.telegram.messenger.UserConfig; import org.telegram.messenger.Utilities; import org.telegram.ui.Views.ActionBar.ActionBarLayer; import org.telegram.ui.Views.ActionBar.ActionBarMenu; @@ -65,11 +46,6 @@ import org.telegram.ui.Views.VideoSeekBarView; import org.telegram.ui.Views.VideoTimelineView; import java.io.File; -import java.io.FileOutputStream; -import java.nio.ByteBuffer; -import java.nio.channels.FileChannel; -import java.util.Arrays; -import java.util.LinkedList; import java.util.List; @TargetApi(16) @@ -80,10 +56,6 @@ public class VideoEditorActivity extends BaseFragment implements TextureView.Sur private final static int OMX_QCOM_COLOR_FormatYUV420PackedSemiPlanar64x32Tile2m8ka = 0x7FA30C03; private final static int OMX_SEC_COLOR_FormatNV12Tiled = 0x7FC00002; private final static int OMX_QCOM_COLOR_FormatYUV420PackedSemiPlanar32m = 0x7FA30C04; - private final static String MIME_TYPE = "video/avc"; - - private final static int PROCESSOR_TYPE_OTHER = 0; - private final static int PROCESSOR_TYPE_QCOM = 1; private MediaPlayer videoPlayer = null; private VideoTimelineView videoTimelineView = null; @@ -95,14 +67,15 @@ public class VideoEditorActivity extends BaseFragment implements TextureView.Sur private VideoSeekBarView videoSeekBarView = null; private TextureView textureView = null; private View controlView = null; + private boolean playerPrepared = false; private String videoPath = null; private float lastProgress = 0; private boolean needSeek = false; private VideoEditorActivityDelegate delegate; - private boolean firstWrite = true; - //MediaMetadataRetriever TODO + private final Object sync = new Object(); + private Thread thread = null; private int rotationValue = 0; private int originalWidth = 0; @@ -119,14 +92,17 @@ public class VideoEditorActivity extends BaseFragment implements TextureView.Sur private long esimatedDuration = 0; public interface VideoEditorActivityDelegate { - public abstract void didStartVideoConverting(String videoPath, String originalPath, long estimatedSize, int duration, int width, int height); - public abstract void didAppenedVideoData(String videoPath, long finalSize); + public abstract void didFinishEditVideo(String videoPath, long startTime, long endTime, int resultWidth, int resultHeight, int rotationValue, int originalWidth, int originalHeight, int bitrate, long estimatedSize, long estimatedDuration); } private Runnable progressRunnable = new Runnable() { @Override public void run() { - while (videoPlayer != null && videoPlayer.isPlaying()) { + boolean playerCheck = false; + synchronized (sync) { + playerCheck = videoPlayer != null && videoPlayer.isPlaying(); + } + while (playerCheck) { AndroidUtilities.RunOnUIThread(new Runnable() { @Override public void run() { @@ -160,6 +136,9 @@ public class VideoEditorActivity extends BaseFragment implements TextureView.Sur FileLog.e("tmessages", e); } } + synchronized (sync) { + thread = null; + } } }; @@ -185,6 +164,20 @@ public class VideoEditorActivity extends BaseFragment implements TextureView.Sur }); } }); + videoPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { + @Override + public void onPrepared(MediaPlayer mp) { + playerPrepared = true; + videoPlayer.seekTo((int) (videoTimelineView.getLeftProgress() * videoDuration)); + } + }); + try { + videoPlayer.setDataSource(videoPath); + videoPlayer.prepareAsync(); + } catch (Exception e) { + FileLog.e("tmessages", e); + } + return super.onFragmentCreate(); } @@ -209,21 +202,21 @@ public class VideoEditorActivity extends BaseFragment implements TextureView.Sur if (id == -1) { finishFragment(); } else if (id == 1) { - if (videoPlayer != null) { - try { - videoPlayer.stop(); - videoPlayer.release(); - videoPlayer = null; - } catch (Exception e) { - FileLog.e("tmessages", e); + synchronized (sync) { + if (videoPlayer != null) { + try { + videoPlayer.stop(); + videoPlayer.release(); + videoPlayer = null; + } catch (Exception e) { + FileLog.e("tmessages", e); + } } } - try { - //startConvert(); - VideoEditWrapper.runTest(VideoEditorActivity.this); - } catch (Exception e) { - FileLog.e("tmessages", e); + if (delegate != null) { + delegate.didFinishEditVideo(videoPath, startTime, endTime, resultWidth, resultHeight, rotationValue, originalWidth, originalHeight, bitrate, estimatedSize, esimatedDuration); } + finishFragment(); } } }); @@ -250,7 +243,7 @@ public class VideoEditorActivity extends BaseFragment implements TextureView.Sur videoTimelineView.setDelegate(new VideoTimelineView.VideoTimelineViewDelegate() { @Override public void onLeftProgressChanged(float progress) { - if (videoPlayer == null) { + if (videoPlayer == null || !playerPrepared) { return; } try { @@ -270,7 +263,7 @@ public class VideoEditorActivity extends BaseFragment implements TextureView.Sur @Override public void onRifhtProgressChanged(float progress) { - if (videoPlayer == null) { + if (videoPlayer == null || !playerPrepared) { return; } try { @@ -293,7 +286,7 @@ public class VideoEditorActivity extends BaseFragment implements TextureView.Sur videoSeekBarView.delegate = new VideoSeekBarView.SeekBarDelegate() { @Override public void onSeekBarDrag(float progress) { - if (videoPlayer == null) { + if (videoPlayer == null || !playerPrepared) { return; } if (videoPlayer.isPlaying()) { @@ -353,9 +346,9 @@ public class VideoEditorActivity extends BaseFragment implements TextureView.Sur try { Surface s = new Surface(surface); videoPlayer.setSurface(s); - videoPlayer.setDataSource(videoPath); - videoPlayer.prepare(); - videoPlayer.seekTo((int) (videoTimelineView.getLeftProgress() * videoDuration)); + if (playerPrepared) { + videoPlayer.seekTo((int) (videoTimelineView.getLeftProgress() * videoDuration)); + } } catch (Exception e) { FileLog.e("tmessages", e); } @@ -400,8 +393,9 @@ public class VideoEditorActivity extends BaseFragment implements TextureView.Sur int width = rotationValue == 90 || rotationValue == 270 ? originalHeight : originalWidth; int height = rotationValue == 90 || rotationValue == 270 ? originalWidth : originalHeight; String videoDimension = String.format("%dx%d", width, height); - int minutes = (int)(videoDuration / 1000 / 60); - int seconds = (int) Math.ceil(videoDuration / 1000) - minutes * 60; + long duration = (long)Math.ceil(videoDuration); + int minutes = (int)(duration / 1000 / 60); + int seconds = (int) Math.ceil(duration / 1000) - minutes * 60; String videoTimeSize = String.format("%d:%02d, %s", minutes, seconds, Utilities.formatFileSize(file.length())); originalSizeTextView.setText(String.format("%s, %s", videoDimension, videoTimeSize)); } @@ -414,7 +408,7 @@ public class VideoEditorActivity extends BaseFragment implements TextureView.Sur int height = rotationValue == 90 || rotationValue == 270 ? resultWidth : resultHeight; String videoDimension = String.format("%dx%d", width, height); - esimatedDuration = (long)Math.max(1000, (videoTimelineView.getRightProgress() - videoTimelineView.getLeftProgress()) * videoDuration); + esimatedDuration = (long)Math.ceil((videoTimelineView.getRightProgress() - videoTimelineView.getLeftProgress()) * videoDuration); estimatedSize = calculateEstimatedSize((float)esimatedDuration / videoDuration); if (videoTimelineView.getLeftProgress() == 0) { startTime = -1; @@ -546,7 +540,7 @@ public class VideoEditorActivity extends BaseFragment implements TextureView.Sur } private void play() { - if (videoPlayer == null) { + if (videoPlayer == null || !playerPrepared) { return; } if (videoPlayer.isPlaying()) { @@ -576,7 +570,12 @@ public class VideoEditorActivity extends BaseFragment implements TextureView.Sur } }); videoPlayer.start(); - new Thread(progressRunnable).start(); + synchronized (sync) { + if (thread != null) { + thread = new Thread(progressRunnable); + thread.start(); + } + } } catch (Exception e) { FileLog.e("tmessages", e); } @@ -587,170 +586,6 @@ public class VideoEditorActivity extends BaseFragment implements TextureView.Sur this.delegate = delegate; } - private int selectTrack(MediaExtractor extractor, boolean audio) { - int numTracks = extractor.getTrackCount(); - for (int i = 0; i < numTracks; i++) { - MediaFormat format = extractor.getTrackFormat(i); - String mime = format.getString(MediaFormat.KEY_MIME); - if (audio) { - if (mime.startsWith("audio/")) { - return i; - } - } else { - if (mime.startsWith("video/")) { - return i; - } - } - } - return -5; - } - - private static class VideoEditWrapper implements Runnable { - private VideoEditorActivity mTest; - private VideoEditWrapper(VideoEditorActivity test) { - mTest = test; - } - - @Override - public void run() { - mTest.startConvert2(); - } - - public static void runTest(final VideoEditorActivity obj) { - new Thread(new Runnable() { - @Override - public void run() { - try { - VideoEditWrapper wrapper = new VideoEditWrapper(obj); - Thread th = new Thread(wrapper, "encoder"); - th.start(); - th.join(); - } catch (Exception e) { - FileLog.e("tmessages", e); - } - } - }).start(); - } - } - - private void didWriteData(final String videoPath, final long finalSize) { - AndroidUtilities.RunOnUIThread(new Runnable() { - @Override - public void run() { - if (firstWrite) { - int width = rotationValue == 90 || rotationValue == 270 ? resultHeight : resultWidth; - int height = rotationValue == 90 || rotationValue == 270 ? resultWidth : resultHeight; - delegate.didStartVideoConverting(videoPath, VideoEditorActivity.this.videoPath, estimatedSize, (int)esimatedDuration, width, height); - firstWrite = false; - finishFragment(); - } else { - delegate.didAppenedVideoData(videoPath, finalSize); - } - } - }); - } - - private static MediaCodecInfo selectCodec(String mimeType) { - int numCodecs = MediaCodecList.getCodecCount(); - for (int i = 0; i < numCodecs; i++) { - MediaCodecInfo codecInfo = MediaCodecList.getCodecInfoAt(i); - if (!codecInfo.isEncoder()) { - continue; - } - String[] types = codecInfo.getSupportedTypes(); - for (String type : types) { - if (type.equalsIgnoreCase(mimeType)) { - return codecInfo; - } - } - } - return null; - } - - private static boolean isRecognizedFormat(int colorFormat) { - switch (colorFormat) { - case MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Planar: - case MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420PackedPlanar: - case MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420SemiPlanar: - case MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420PackedSemiPlanar: - case MediaCodecInfo.CodecCapabilities.COLOR_TI_FormatYUV420PackedSemiPlanar: - return true; - default: - return false; - } - } - - private static int selectColorFormat(MediaCodecInfo codecInfo, String mimeType) { - MediaCodecInfo.CodecCapabilities capabilities = codecInfo.getCapabilitiesForType(mimeType); - for (int i = 0; i < capabilities.colorFormats.length; i++) { - int colorFormat = capabilities.colorFormats[i]; - if (isRecognizedFormat(colorFormat)) { - return colorFormat; - } - } - return 0; - } - - private long readAndWriteTrack(MediaExtractor extractor, MP4Builder mediaMuxer, MediaCodec.BufferInfo info, long start, long end, File file, boolean isAudio) throws Exception { - int trackIndex = selectTrack(extractor, isAudio); - if (trackIndex >= 0) { - extractor.selectTrack(trackIndex); - MediaFormat trackFormat = extractor.getTrackFormat(trackIndex); - int muxerTrackIndex = mediaMuxer.addTrack(trackFormat, isAudio); - int maxBufferSize = trackFormat.getInteger(MediaFormat.KEY_MAX_INPUT_SIZE); - boolean inputDone = false; - if (start > 0) { - extractor.seekTo(start, MediaExtractor.SEEK_TO_PREVIOUS_SYNC); - } else { - extractor.seekTo(0, MediaExtractor.SEEK_TO_PREVIOUS_SYNC); - } - ByteBuffer buffer = ByteBuffer.allocateDirect(maxBufferSize); - long startTime = -1; - - while (!inputDone) { - boolean eof = false; - int index = extractor.getSampleTrackIndex(); - if (index == trackIndex) { - info.size = extractor.readSampleData(buffer, 0); - - if (info.size < 0) { - info.size = 0; - eof = true; - } else { - info.presentationTimeUs = extractor.getSampleTime(); - if (start > 0 && startTime == -1) { - startTime = info.presentationTimeUs; - } - if (end < 0 || info.presentationTimeUs < end) { - info.offset = 0; - info.flags = extractor.getSampleFlags(); - if (!isAudio) { - buffer.limit(info.offset + info.size); - buffer.position(info.offset); - buffer.putInt(info.size - 4); - } - if (mediaMuxer.writeSampleData(muxerTrackIndex, buffer, info)) { - didWriteData(file.toString(), 0); - } - extractor.advance(); - } else { - eof = true; - } - } - } else if (index == -1) { - eof = true; - } - if (eof) { - inputDone = true; - } - } - - extractor.unselectTrack(trackIndex); - return startTime; - } - return -1; - } - private boolean processOpenVideo() { try { IsoFile isoFile = new IsoFile(videoPath); @@ -767,7 +602,7 @@ public class VideoEditorActivity extends BaseFragment implements TextureView.Sur for (long size : sampleSizeBox.getSampleSizes()) { sampleSizes += size; } - videoDuration = mediaHeaderBox.getDuration() / mediaHeaderBox.getTimescale(); + videoDuration = (float)mediaHeaderBox.getDuration() / (float)mediaHeaderBox.getTimescale(); trackBitrate = (int)(sampleSizes * 8 / videoDuration); } catch (Exception e) { FileLog.e("tmessages", e); @@ -826,444 +661,4 @@ public class VideoEditorActivity extends BaseFragment implements TextureView.Sur size += size / (32 * 1024) * 16; return size; } - - private boolean startConvert2() { - File inputFile = new File(videoPath); - if (!inputFile.canRead()) { - return false; - } - - firstWrite = true; - File cacheFile = null; - boolean error = false; - long videoStartTime = startTime; - - long time = System.currentTimeMillis(); - - if (resultWidth != 0 && resultHeight != 0) { - MP4Builder mediaMuxer = null; - MediaExtractor extractor = null; - - MediaCodec decoder = null; - MediaCodec encoder = null; - InputSurface inputSurface = null; - OutputSurface outputSurface = null; - - try { - String fileName = Integer.MIN_VALUE + "_" + UserConfig.lastLocalId + ".mp4"; - UserConfig.lastLocalId--; - cacheFile = new File(FileLoader.getInstance().getDirectory(FileLoader.MEDIA_DIR_CACHE), fileName); - UserConfig.saveConfig(false); - - MediaCodec.BufferInfo info = new MediaCodec.BufferInfo(); - Mp4Movie movie = new Mp4Movie(); - movie.setCacheFile(cacheFile); - movie.setRotation(rotationValue); - movie.setSize(resultWidth, resultHeight); - mediaMuxer = new MP4Builder().createMovie(movie); - extractor = new MediaExtractor(); - extractor.setDataSource(inputFile.toString()); - - if (resultWidth != originalWidth || resultHeight != originalHeight) { - int videoIndex = -5; - videoIndex = selectTrack(extractor, false); - if (videoIndex >= 0) { - boolean outputDone = false; - boolean inputDone = false; - boolean decoderDone = false; - int swapUV = 0; - int videoTrackIndex = -5; - long videoTime = -1; - - int colorFormat = 0; - int processorType = PROCESSOR_TYPE_OTHER; - if (Build.VERSION.SDK_INT < 18) { - MediaCodecInfo codecInfo = selectCodec(MIME_TYPE); - colorFormat = selectColorFormat(codecInfo, MIME_TYPE); - if (codecInfo.getName().contains("OMX.qcom.")) { - processorType = PROCESSOR_TYPE_QCOM; - if (Build.VERSION.SDK_INT == 16) { //nokia, lge - swapUV = 1; - } - } - FileLog.e("tmessages", "codec = " + codecInfo.getName()); - } else { - colorFormat = MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface; - } - FileLog.e("tmessages", "colorFormat = " + colorFormat); - - int resultHeightAligned = resultHeight; - int padding = 0; - int bufferSize = resultWidth * resultHeight * 3 / 2; - if (processorType == PROCESSOR_TYPE_OTHER) { - if (resultHeight % 16 != 0) { - resultHeightAligned += (16 - (resultHeight % 16)); - padding = resultWidth * (resultHeightAligned - resultHeight); - bufferSize += padding * 5 / 4; - } - } else if (processorType == PROCESSOR_TYPE_QCOM) { - if (!Build.MANUFACTURER.toLowerCase().equals("lge")) { - int uvoffset = (resultWidth * resultHeight + 2047) & ~2047; - padding = uvoffset - (resultWidth * resultHeight); - bufferSize += padding; - } - } - - extractor.selectTrack(videoIndex); - if (startTime > 0) { - extractor.seekTo(startTime, MediaExtractor.SEEK_TO_PREVIOUS_SYNC); - } else { - extractor.seekTo(0, MediaExtractor.SEEK_TO_PREVIOUS_SYNC); - } - MediaFormat inputFormat = extractor.getTrackFormat(videoIndex); - - MediaFormat outputFormat = MediaFormat.createVideoFormat(MIME_TYPE, resultWidth, resultHeight); - outputFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, colorFormat); - outputFormat.setInteger(MediaFormat.KEY_BIT_RATE, bitrate != 0 ? bitrate : 921600); - outputFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 25); - outputFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 10); - if (Build.VERSION.SDK_INT < 18) { - outputFormat.setInteger("stride", resultWidth); - outputFormat.setInteger("slice-height", resultHeightAligned); - } - - encoder = MediaCodec.createEncoderByType(MIME_TYPE); - encoder.configure(outputFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE); - if (Build.VERSION.SDK_INT >= 18) { - inputSurface = new InputSurface(encoder.createInputSurface()); - inputSurface.makeCurrent(); - } - encoder.start(); - - decoder = MediaCodec.createDecoderByType(inputFormat.getString(MediaFormat.KEY_MIME)); - if (Build.VERSION.SDK_INT >= 18) { - outputSurface = new OutputSurface(); - } else { - outputSurface = new OutputSurface(resultWidth, resultHeight); - } - decoder.configure(inputFormat, outputSurface.getSurface(), null, 0); - decoder.start(); - - final int TIMEOUT_USEC = 2500; - ByteBuffer[] decoderInputBuffers = decoder.getInputBuffers(); - ByteBuffer[] encoderOutputBuffers = encoder.getOutputBuffers(); - ByteBuffer[] encoderInputBuffers = null; - if (Build.VERSION.SDK_INT < 18) { - encoderInputBuffers = encoder.getInputBuffers(); - } - - while (!outputDone) { - if (!inputDone) { - boolean eof = false; - int index = extractor.getSampleTrackIndex(); - if (index == videoIndex) { - int inputBufIndex = decoder.dequeueInputBuffer(TIMEOUT_USEC); - if (inputBufIndex >= 0) { - ByteBuffer inputBuf = decoderInputBuffers[inputBufIndex]; - int chunkSize = extractor.readSampleData(inputBuf, 0); - if (chunkSize < 0) { - decoder.queueInputBuffer(inputBufIndex, 0, 0, 0L, MediaCodec.BUFFER_FLAG_END_OF_STREAM); - inputDone = true; - } else { - decoder.queueInputBuffer(inputBufIndex, 0, chunkSize, extractor.getSampleTime(), 0); - extractor.advance(); - } - } - } else if (index == -1) { - eof = true; - } - if (eof) { - int inputBufIndex = decoder.dequeueInputBuffer(TIMEOUT_USEC); - if (inputBufIndex >= 0) { - decoder.queueInputBuffer(inputBufIndex, 0, 0, 0L, MediaCodec.BUFFER_FLAG_END_OF_STREAM); - inputDone = true; - } - } - } - - boolean decoderOutputAvailable = !decoderDone; - boolean encoderOutputAvailable = true; - while (decoderOutputAvailable || encoderOutputAvailable) { - int encoderStatus = encoder.dequeueOutputBuffer(info, TIMEOUT_USEC); - if (encoderStatus == MediaCodec.INFO_TRY_AGAIN_LATER) { - encoderOutputAvailable = false; - } else if (encoderStatus == MediaCodec.INFO_OUTPUT_BUFFERS_CHANGED) { - encoderOutputBuffers = encoder.getOutputBuffers(); - } else if (encoderStatus == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) { - MediaFormat newFormat = encoder.getOutputFormat(); - if (videoTrackIndex == -5) { - videoTrackIndex = mediaMuxer.addTrack(newFormat, false); - } - } else if (encoderStatus < 0) { - throw new RuntimeException("unexpected result from encoder.dequeueOutputBuffer: " + encoderStatus); - } else { - ByteBuffer encodedData = encoderOutputBuffers[encoderStatus]; - if (encodedData == null) { - throw new RuntimeException("encoderOutputBuffer " + encoderStatus + " was null"); - } - if (info.size > 1) { - if ((info.flags & MediaCodec.BUFFER_FLAG_CODEC_CONFIG) == 0) { - encodedData.limit(info.offset + info.size); - encodedData.position(info.offset); - encodedData.putInt(Integer.reverseBytes(info.size - 4)); - if (mediaMuxer.writeSampleData(videoTrackIndex, encodedData, info)) { - didWriteData(cacheFile.toString(), 0); - } - } else if (videoTrackIndex == -5) { - byte[] csd = new byte[info.size]; - encodedData.limit(info.offset + info.size); - encodedData.position(info.offset); - encodedData.get(csd); - ByteBuffer sps = null; - ByteBuffer pps = null; - for (int a = info.size - 1; a >= 0; a--) { - if (a > 3) { - if (csd[a] == 1 && csd[a - 1] == 0 && csd[a - 2] == 0 && csd[a - 3] == 0) { - sps = ByteBuffer.allocate(a - 3); - pps = ByteBuffer.allocate(info.size - (a - 3)); - sps.put(csd, 0, a - 3).position(0); - pps.put(csd, a - 3, info.size - (a - 3)).position(0); - break; - } - } else { - break; - } - } - - MediaFormat newFormat = MediaFormat.createVideoFormat(MIME_TYPE, resultWidth, resultHeight); - if (sps != null && pps != null) { - newFormat.setByteBuffer("csd-0", sps); - newFormat.setByteBuffer("csd-1", pps); - } - videoTrackIndex = mediaMuxer.addTrack(newFormat, false); - } - } - outputDone = (info.flags & MediaCodec.BUFFER_FLAG_END_OF_STREAM) != 0; - encoder.releaseOutputBuffer(encoderStatus, false); - } - if (encoderStatus != MediaCodec.INFO_TRY_AGAIN_LATER) { - continue; - } - - if (!decoderDone) { - int decoderStatus = decoder.dequeueOutputBuffer(info, TIMEOUT_USEC); - if (decoderStatus == MediaCodec.INFO_TRY_AGAIN_LATER) { - decoderOutputAvailable = false; - } else if (decoderStatus == MediaCodec.INFO_OUTPUT_BUFFERS_CHANGED) { - - } else if (decoderStatus == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) { - MediaFormat newFormat = decoder.getOutputFormat(); - } else if (decoderStatus < 0) { - throw new RuntimeException("unexpected result from decoder.dequeueOutputBuffer: " + decoderStatus); - } else { - boolean doRender = false; - if (Build.VERSION.SDK_INT >= 18) { - doRender = info.size != 0; - } else { - doRender = info.size != 0 || info.presentationTimeUs != 0; - } - if (endTime > 0 && info.presentationTimeUs >= endTime) { - inputDone = true; - decoderDone = true; - doRender = false; - info.flags |= MediaCodec.BUFFER_FLAG_END_OF_STREAM; - } - if (startTime > 0 && videoTime == -1) { - if (info.presentationTimeUs < startTime) { - doRender = false; - FileLog.e("tmessages", "drop frame startTime = " + startTime + " present time = " + info.presentationTimeUs); - } else { - videoTime = info.presentationTimeUs; - } - } - decoder.releaseOutputBuffer(decoderStatus, doRender); - if (doRender) { - boolean errorWait = false; - try { - outputSurface.awaitNewImage(); - } catch (Exception e) { - errorWait = true; - FileLog.e("tmessages", e); - } - if (!errorWait) { - if (Build.VERSION.SDK_INT >= 18) { - outputSurface.drawImage(false); - inputSurface.setPresentationTime(info.presentationTimeUs * 1000); - inputSurface.swapBuffers(); - } else { - int inputBufIndex = encoder.dequeueInputBuffer(TIMEOUT_USEC); - if (inputBufIndex >= 0) { - outputSurface.drawImage(true); - ByteBuffer rgbBuf = outputSurface.getFrame(); - ByteBuffer yuvBuf = encoderInputBuffers[inputBufIndex]; - yuvBuf.clear(); - Utilities.convertVideoFrame(rgbBuf, yuvBuf, colorFormat, resultWidth, resultHeight, padding, swapUV); - encoder.queueInputBuffer(inputBufIndex, 0, bufferSize, info.presentationTimeUs, 0); - } else { - FileLog.e("tmessages", "input buffer not available"); - } - } - } - } - if ((info.flags & MediaCodec.BUFFER_FLAG_END_OF_STREAM) != 0) { - decoderOutputAvailable = false; - FileLog.e("tmessages", "decoder stream end"); - if (Build.VERSION.SDK_INT >= 18) { - encoder.signalEndOfInputStream(); - } else { - int inputBufIndex = encoder.dequeueInputBuffer(TIMEOUT_USEC); - if (inputBufIndex >= 0) { - encoder.queueInputBuffer(inputBufIndex, 0, 1, info.presentationTimeUs, MediaCodec.BUFFER_FLAG_END_OF_STREAM); - } - } - } - } - } - } - } - extractor.unselectTrack(videoIndex); - if (videoTime != -1) { - videoStartTime = videoTime; - } - } - } else { - long videoTime = readAndWriteTrack(extractor, mediaMuxer, info, startTime, endTime, cacheFile, false); - if (videoTime != -1) { - videoStartTime = videoTime; - } - } - readAndWriteTrack(extractor, mediaMuxer, info, videoStartTime, endTime, cacheFile, true); - } catch (Exception e) { - error = true; - FileLog.e("tmessages", e); - } finally { - if (extractor != null) { - extractor.release(); - extractor = null; - } - if (outputSurface != null) { - outputSurface.release(); - outputSurface = null; - } - if (inputSurface != null) { - inputSurface.release(); - inputSurface = null; - } - if (decoder != null) { - decoder.stop(); - decoder.release(); - decoder = null; - } - if (encoder != null) { - encoder.stop(); - encoder.release(); - encoder = null; - } - if (mediaMuxer != null) { - try { - mediaMuxer.finishMovie(false); - } catch (Exception e) { - FileLog.e("tmessages", e); - } - mediaMuxer = null; - } - FileLog.e("tmessages", "time = " + (System.currentTimeMillis() - time)); - } - } else { - return false; - } - if (!error && cacheFile != null) { - didWriteData(cacheFile.toString(), cacheFile.length()); - } - return true; - } - - private void startConvert() throws Exception { - IsoFile isoFile = new IsoFile(videoPath); - TrackBox trackBox = (TrackBox) Path.getPath(isoFile, "/moov/trak/mdia/minf/stbl/stsd/avc1/../../../../../"); - AvcConfigurationBox avcConfigurationBox = (AvcConfigurationBox) Path.getPath(trackBox, "mdia/minf/stbl/stsd/avc1/avcC"); - avcConfigurationBox.parseDetails(); - - Movie movie = MovieCreator.build(videoPath); - - List tracks = movie.getTracks(); - movie.setTracks(new LinkedList()); - - double startTime = 0; - double endTime = 0; - - for (Track track : tracks) { - if (track.getSyncSamples() != null && track.getSyncSamples().length > 0) { - double duration = (double) track.getDuration() / (double) track.getTrackMetaData().getTimescale(); - startTime = correctTimeToSyncSample(track, videoTimelineView.getLeftProgress() * duration, false); - endTime = videoTimelineView.getRightProgress() * duration; - break; - } - } - - for (Track track : tracks) { - long currentSample = 0; - double currentTime = 0; - double lastTime = 0; - long startSample = 0; - long endSample = -1; - - for (int i = 0; i < track.getSampleDurations().length; i++) { - long delta = track.getSampleDurations()[i]; - if (currentTime > lastTime && currentTime <= startTime) { - startSample = currentSample; - } - if (currentTime > lastTime && currentTime <= endTime) { - endSample = currentSample; - } - lastTime = currentTime; - currentTime += (double) delta / (double) track.getTrackMetaData().getTimescale(); - currentSample++; - } - movie.addTrack(new CroppedTrack(track, startSample, endSample)); - } - Container out = new DefaultMp4Builder().build(movie); - - String fileName = Integer.MIN_VALUE + "_" + UserConfig.lastLocalId + ".mp4"; - UserConfig.lastLocalId--; - File cacheFile = new File(FileLoader.getInstance().getDirectory(FileLoader.MEDIA_DIR_CACHE), fileName); - UserConfig.saveConfig(false); - - FileOutputStream fos = new FileOutputStream(cacheFile); - FileChannel fc = fos.getChannel(); - out.writeContainer(fc); - - fc.close(); - fos.close(); - if (delegate != null) { - //delegate.didFinishedVideoConverting(cacheFile.getAbsolutePath()); - finishFragment(); - } - } - - private static double correctTimeToSyncSample(Track track, double cutHere, boolean next) { - double[] timeOfSyncSamples = new double[track.getSyncSamples().length]; - long currentSample = 0; - double currentTime = 0; - for (int i = 0; i < track.getSampleDurations().length; i++) { - long delta = track.getSampleDurations()[i]; - if (Arrays.binarySearch(track.getSyncSamples(), currentSample + 1) >= 0) { - timeOfSyncSamples[Arrays.binarySearch(track.getSyncSamples(), currentSample + 1)] = currentTime; - } - currentTime += (double) delta / (double) track.getTrackMetaData().getTimescale(); - currentSample++; - } - double previous = 0; - for (double timeOfSyncSample : timeOfSyncSamples) { - if (timeOfSyncSample > cutHere) { - if (next) { - return timeOfSyncSample; - } else { - return previous; - } - } - previous = timeOfSyncSample; - } - return timeOfSyncSamples[timeOfSyncSamples.length - 1]; - } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Views/ActionBar/ActionBarLayout.java b/TMessagesProj/src/main/java/org/telegram/ui/Views/ActionBar/ActionBarLayout.java index 54e6dfcd..d65d83fc 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Views/ActionBar/ActionBarLayout.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Views/ActionBar/ActionBarLayout.java @@ -31,6 +31,7 @@ import android.view.animation.AnimationUtils; import android.widget.FrameLayout; import org.telegram.android.AndroidUtilities; +import org.telegram.android.NotificationCenter; import org.telegram.messenger.FileLog; import org.telegram.messenger.R; @@ -199,11 +200,11 @@ public class ActionBarLayout extends FrameLayout { } private void onSlideAnimationEnd(boolean backAnimation) { - containerView.setX(0); - containerViewBack.setX(0); + containerView.setTranslationX(0); + containerViewBack.setTranslationX(0); actionBar.stopMoving(backAnimation); shadowView.setVisibility(View.INVISIBLE); - shadowView.setX(-AndroidUtilities.dp(2)); + shadowView.setTranslationX(-AndroidUtilities.dp(2)); if (!backAnimation) { BaseFragment lastFragment = fragmentsStack.get(fragmentsStack.size() - 1); lastFragment.onPause(); @@ -240,7 +241,7 @@ public class ActionBarLayout extends FrameLayout { startedTracking = true; startedTrackingX = (int) ev.getX(); shadowView.setVisibility(View.VISIBLE); - shadowView.setX(-AndroidUtilities.dp(2)); + shadowView.setTranslationX(-AndroidUtilities.dp(2)); containerViewBack.setVisibility(View.VISIBLE); beginTrackingSent = false; @@ -297,8 +298,8 @@ public class ActionBarLayout extends FrameLayout { beginTrackingSent = true; } actionBar.moveActionBarByX(dx); - containerView.setX(dx); - shadowView.setX(dx - AndroidUtilities.dp(2)); + containerView.setTranslationX(dx); + shadowView.setTranslationX(dx - AndroidUtilities.dp(2)); } } else if (ev != null && ev.getPointerId(0) == startedTrackingPointerId && (ev.getAction() == MotionEvent.ACTION_CANCEL || ev.getAction() == MotionEvent.ACTION_UP || ev.getAction() == MotionEvent.ACTION_POINTER_UP)) { if (velocityTracker == null) { @@ -488,19 +489,20 @@ public class ActionBarLayout extends FrameLayout { } public boolean presentFragment(BaseFragment fragment) { - return presentFragment(fragment, false, false); + return presentFragment(fragment, false, false, true); } public boolean presentFragment(BaseFragment fragment, boolean removeLast) { - return presentFragment(fragment, removeLast, false); + return presentFragment(fragment, removeLast, false, true); } - public boolean presentFragment(final BaseFragment fragment, final boolean removeLast, boolean forceWithoutAnimation) { - if (checkTransitionAnimation() || delegate != null && !delegate.needPresentFragment(fragment, removeLast, forceWithoutAnimation, this) || !fragment.onFragmentCreate()) { + public boolean presentFragment(final BaseFragment fragment, final boolean removeLast, boolean forceWithoutAnimation, boolean check) { + if (checkTransitionAnimation() || delegate != null && check && !delegate.needPresentFragment(fragment, removeLast, forceWithoutAnimation, this) || !fragment.onFragmentCreate()) { return false; } if (parentActivity.getCurrentFocus() != null) { AndroidUtilities.hideKeyboard(parentActivity.getCurrentFocus()); + NotificationCenter.getInstance().postNotificationName(NotificationCenter.hideEmojiKeyboard); } boolean needAnimation = openAnimation != null && !forceWithoutAnimation && parentActivity.getSharedPreferences("mainconfig", Activity.MODE_PRIVATE).getBoolean("view_animations", true); if (useAlphaAnimations && fragmentsStack.size() == 0 && alphaOpenAnimation == null) { @@ -533,6 +535,9 @@ public class ActionBarLayout extends FrameLayout { if (!needAnimation) { presentFragmentInternalRemoveOld(removeLast, currentFragment); + if (backgroundView != null) { + backgroundView.setVisibility(VISIBLE); + } } if (needAnimation) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Views/ActionBar/BaseFragment.java b/TMessagesProj/src/main/java/org/telegram/ui/Views/ActionBar/BaseFragment.java index 05e609b4..8d7c565f 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Views/ActionBar/BaseFragment.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Views/ActionBar/BaseFragment.java @@ -157,11 +157,14 @@ public class BaseFragment { if (parentLayout == null) { return; } - parentLayout.presentFragment(fragment, removeLast, forceWithoutAnimation); + parentLayout.presentFragment(fragment, removeLast, forceWithoutAnimation, true); } public Activity getParentActivity() { - return parentLayout.parentActivity; + if (parentLayout != null) { + return parentLayout.parentActivity; + } + return null; } public void showActionBar() { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Views/ChatActivityEnterView.java b/TMessagesProj/src/main/java/org/telegram/ui/Views/ChatActivityEnterView.java index 87ae3235..9d9c65d4 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Views/ChatActivityEnterView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Views/ChatActivityEnterView.java @@ -45,6 +45,8 @@ import org.telegram.messenger.R; import org.telegram.messenger.TLRPC; import org.telegram.ui.ApplicationLoader; +import java.lang.reflect.Method; + public class ChatActivityEnterView implements NotificationCenter.NotificationCenterDelegate, SizeNotifierRelativeLayout.SizeNotifierRelativeLayoutDelegate { public static interface ChatActivityEnterViewDelegate { @@ -87,6 +89,7 @@ public class ChatActivityEnterView implements NotificationCenter.NotificationCen NotificationCenter.getInstance().addObserver(this, NotificationCenter.closeChats); NotificationCenter.getInstance().addObserver(this, NotificationCenter.audioDidSent); NotificationCenter.getInstance().addObserver(this, NotificationCenter.emojiDidLoaded); + NotificationCenter.getInstance().addObserver(this, NotificationCenter.hideEmojiKeyboard); SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("mainconfig", Activity.MODE_PRIVATE); sendByEnter = preferences.getBoolean("send_by_enter", false); } @@ -99,6 +102,7 @@ public class ChatActivityEnterView implements NotificationCenter.NotificationCen NotificationCenter.getInstance().removeObserver(this, NotificationCenter.closeChats); NotificationCenter.getInstance().removeObserver(this, NotificationCenter.audioDidSent); NotificationCenter.getInstance().removeObserver(this, NotificationCenter.emojiDidLoaded); + NotificationCenter.getInstance().removeObserver(this, NotificationCenter.hideEmojiKeyboard); if (mWakeLock != null) { try { mWakeLock.release(); @@ -507,6 +511,15 @@ public class ChatActivityEnterView implements NotificationCenter.NotificationCen } }); emojiPopup = new PopupWindow(emojiView); + + /*Utry { + Method method = emojiPopup.getClass().getMethod("setWindowLayoutType", int.class); + if (method != null) { + method.invoke(emojiPopup, WindowManager.LayoutParams.LAST_SUB_WINDOW); + } + } catch (Exception e) { + //don't promt + }*/ } public void setDelegate(ChatActivityEnterViewDelegate delegate) { @@ -646,6 +659,8 @@ public class ChatActivityEnterView implements NotificationCenter.NotificationCen if (delegate != null) { delegate.onMessageSend(); } + } else if (id == NotificationCenter.hideEmojiKeyboard) { + hideEmojiPopup(); } } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Views/EmojiView.java b/TMessagesProj/src/main/java/org/telegram/ui/Views/EmojiView.java index b4c6c778..5664a1cc 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Views/EmojiView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Views/EmojiView.java @@ -213,30 +213,26 @@ public class EmojiView extends LinearLayout { } public int getCount() { - return this.data.length; + return data.length; } - public Object getItem(int paramInt) - { + public Object getItem(int i) { return null; } - public long getItemId(int paramInt) - { - return this.data[paramInt]; + public long getItemId(int i) { + return data[i]; } - public View getView(int paramInt, View paramView, ViewGroup paramViewGroup) { - ImageView localObject; - if (paramView != null) { - localObject = (ImageView)paramView; - } else { - localObject = new ImageView(EmojiView.this.getContext()) { + public View getView(int i, View view, ViewGroup paramViewGroup) { + ImageView imageView = (ImageView)view; + if (imageView == null) { + imageView = new ImageView(EmojiView.this.getContext()) { public void onMeasure(int paramAnonymousInt1, int paramAnonymousInt2) { setMeasuredDimension(View.MeasureSpec.getSize(paramAnonymousInt1), View.MeasureSpec.getSize(paramAnonymousInt1)); } }; - localObject.setOnClickListener(new View.OnClickListener() { + imageView.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { if (EmojiView.this.listener != null) { EmojiView.this.listener.onEmojiSelected(EmojiView.this.convert((Long)view.getTag())); @@ -244,13 +240,12 @@ public class EmojiView extends LinearLayout { EmojiView.this.addToRecent((Long)view.getTag()); } }); - localObject.setBackgroundResource(R.drawable.list_selector); - localObject.setScaleType(ImageView.ScaleType.CENTER); + imageView.setBackgroundResource(R.drawable.list_selector); + imageView.setScaleType(ImageView.ScaleType.CENTER); } - - localObject.setImageDrawable(Emoji.getEmojiBigDrawable(this.data[paramInt])); - localObject.setTag(this.data[paramInt]); - return localObject; + imageView.setImageDrawable(Emoji.getEmojiBigDrawable(data[i])); + imageView.setTag(data[i]); + return imageView; } @Override diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Views/PagerSlidingTabStrip.java b/TMessagesProj/src/main/java/org/telegram/ui/Views/PagerSlidingTabStrip.java index bf7cb085..42b79cfb 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Views/PagerSlidingTabStrip.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Views/PagerSlidingTabStrip.java @@ -12,7 +12,6 @@ import java.util.Locale; import android.annotation.SuppressLint; import android.content.Context; -import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Paint.Style; @@ -42,15 +41,7 @@ public class PagerSlidingTabStrip extends HorizontalScrollView { public int getPageIconResId(int position); } - // @formatter:off - private static final int[] ATTRS = new int[] { - android.R.attr.textSize, - android.R.attr.textColor - }; - // @formatter:on - private LinearLayout.LayoutParams defaultTabLayoutParams; - private LinearLayout.LayoutParams expandedTabLayoutParams; private final PageListener pageListener = new PageListener(); public OnPageChangeListener delegatePageListener; @@ -66,8 +57,6 @@ public class PagerSlidingTabStrip extends HorizontalScrollView { private Paint rectPaint; private Paint dividerPaint; - private boolean checkedTabWidths = false; - private int indicatorColor = 0xFF666666; private int underlineColor = 0x1A000000; private int dividerColor = 0x1A000000; @@ -122,33 +111,6 @@ public class PagerSlidingTabStrip extends HorizontalScrollView { dividerWidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dividerWidth, dm); tabTextSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, tabTextSize, dm); - // get system attrs (android:textSize and android:textColor) - - TypedArray a = context.obtainStyledAttributes(attrs, ATTRS); - - tabTextSize = a.getDimensionPixelSize(0, tabTextSize); - tabTextColor = a.getColor(1, tabTextColor); - - a.recycle(); - - // get custom attrs - - a = context.obtainStyledAttributes(attrs, R.styleable.PagerSlidingTabStrip); - - indicatorColor = a.getColor(R.styleable.PagerSlidingTabStrip_indicatorColor, indicatorColor); - underlineColor = a.getColor(R.styleable.PagerSlidingTabStrip_underlineColor, underlineColor); - dividerColor = a.getColor(R.styleable.PagerSlidingTabStrip_dividerColor, dividerColor); - indicatorHeight = a.getDimensionPixelSize(R.styleable.PagerSlidingTabStrip_indicatorHeight, indicatorHeight); - underlineHeight = a.getDimensionPixelSize(R.styleable.PagerSlidingTabStrip_underlineHeight, underlineHeight); - dividerPadding = a.getDimensionPixelSize(R.styleable.PagerSlidingTabStrip_dividerPadding1, dividerPadding); - tabPadding = a.getDimensionPixelSize(R.styleable.PagerSlidingTabStrip_tabPaddingLeftRight, tabPadding); - tabBackgroundResId = a.getResourceId(R.styleable.PagerSlidingTabStrip_tabBackground, tabBackgroundResId); - shouldExpand = a.getBoolean(R.styleable.PagerSlidingTabStrip_shouldExpand, shouldExpand); - scrollOffset = a.getDimensionPixelSize(R.styleable.PagerSlidingTabStrip_scrollOffset, scrollOffset); - textAllCaps = a.getBoolean(R.styleable.PagerSlidingTabStrip_textAllCaps1, textAllCaps); - - a.recycle(); - rectPaint = new Paint(); rectPaint.setAntiAlias(true); rectPaint.setStyle(Style.FILL); @@ -158,7 +120,6 @@ public class PagerSlidingTabStrip extends HorizontalScrollView { dividerPaint.setStrokeWidth(dividerWidth); defaultTabLayoutParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); - expandedTabLayoutParams = new LinearLayout.LayoutParams(0, LayoutParams.MATCH_PARENT, 1.0f); if (locale == null) { locale = getResources().getConfiguration().locale; @@ -199,8 +160,6 @@ public class PagerSlidingTabStrip extends HorizontalScrollView { updateTabStyles(); - checkedTabWidths = false; - getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @SuppressWarnings("deprecation") @@ -296,7 +255,6 @@ public class PagerSlidingTabStrip extends HorizontalScrollView { } } } - } @Override @@ -312,7 +270,6 @@ public class PagerSlidingTabStrip extends HorizontalScrollView { } private void scrollToChild(int position, int offset) { - if (tabCount == 0) { return; } @@ -327,7 +284,6 @@ public class PagerSlidingTabStrip extends HorizontalScrollView { lastScrollX = newScrollX; scrollTo(newScrollX, 0); } - } @Override @@ -615,5 +571,4 @@ public class PagerSlidingTabStrip extends HorizontalScrollView { } }; } - } diff --git a/TMessagesProj/src/main/res/drawable-hdpi/doc_blue.png b/TMessagesProj/src/main/res/drawable-hdpi/doc_blue.png index 1c1b3cdfeef741e670ddf826fd0bdca359fe7a2c..a6a72c978f353b12563dea9e8c06faab88a47c92 100644 GIT binary patch delta 1138 zcmV-&1daQ#6o?5SiBL{Q4GJ0x0000DNk~Le0000;0000;2nGNE09Ea?N0A{Xe*`K? zL_t(|+U%QeXpK=E$DezR7g$<%8e^;;m4qouZNmZV`BWnp5%kP#~~?E3z?zo(AJ^X%^0d9L$3JHPsL&vSO}b9X;G=RD`% z0^xAj(BT{bEl3N}g0vtlNDI<}f3zSiNQV}r1t}<~tm1Y&e$ON@2Bh+JD`*5Qt8%CG zSV4(k16TnjfS^s8$KWg|fv9&qMNk4L06Rf)7vJ*@>;VTL>ZhLt4F(s0wcY#x4d4y< z4hC_pO0<-#1xq36qpV*js8D}60^G95X#)8m1xx}MJS1N

`T8r@l)a!m+MCgwI>3G; z*8;P@mV~3Eo!&a zqBUL=l))mpB4;>QM2~Lne|)(Yfvq!;_**s@kmGy^MasQC4q2-N(!gaYrxk4d* zo(GT02y#;nJ+HE=JN}7F(ZAkTVM}#X?poYR>~z z1dWWNoH;zA7Uj(3e*!9GHTFfyc{(m+b+J7BdZT8;1RCx(W#!0fVmE|-CmRfm z;k`=BktK)@e^#1@1!&20w_oJQ97!J%(sZ^tKT7#LFUXN8=nA+bT%Q1kjlXw4>A*oT zPfL`SBXg=@aILB3j+(ZAw;GXyly|uqrt@rH{G&AUv_wfcvITwSPWrSFIgw%ZNz)w4 z)4*{xcxxyeve$#?g!_E3(y-qXr!f=lg5)UjlmGw# literal 2609 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 ATmS$7 diff --git a/TMessagesProj/src/main/res/drawable-hdpi/doc_green.png b/TMessagesProj/src/main/res/drawable-hdpi/doc_green.png index 68b72142579e6395dbd3f62fc2f2269f82958f12..72180a744413e6c09fad19df4bd7926b1013ed09 100644 GIT binary patch delta 1140 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 I@u2Pb3wY)vlK=n! diff --git a/TMessagesProj/src/main/res/drawable-hdpi/doccancel_b.png b/TMessagesProj/src/main/res/drawable-hdpi/doccancel_b.png new file mode 100644 index 0000000000000000000000000000000000000000..897ac3a3fafc8995b92d254471402d68c9d07cf1 GIT binary patch literal 483 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+7+XDE978H@y}8BccgR4b;bCco#`y=LB8qHZ0vd$N+0Q>% zTCzt?HIpa%+N3q-kN=;vEZbw($FL+EI26DH6NCb?I~brs4S5Rh zo>>L{|GIZVmg>@IyF2{h-wLPL)t%{C@ZqSHCc9>J=I%pw-vZ^iz58!OoidWy|3t~v z;`NIC>fR1@U-r1aJ?SA{FzdoU6K0jqN7skkj#gEMLD~D~!jj{;TpAnC-<(iv zH6be3;?{(yUW-{1p4B8yYc*zkc~j^@`;=t8bMi}kTb{hW7osO7x7oeE;;47ExSOB+ wg&g(O{}q44@?Z%S1|?XaEr{-z%)rcWWAXL8(w));z*uAOboFyt=akR{0OFIuApigX literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-hdpi/doccancel_b.png.png b/TMessagesProj/src/main/res/drawable-hdpi/doccancel_b.png.png deleted file mode 100644 index 5fe1295c2dc242eba641fed74014e330703fe2b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1401 zcmeAS@N?(olHy`uVBq!ia0vp^P9V&|1|%PcFuVX#k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+nA0*tB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPA){ffi_eM3D1{oGuTzrd=COM+4n&cLd=IHa;5RX-@T zIKQ+g85kdF$}r8qu)}W=NFmTQR{lkqz(`5Vami0E%}vcK@pQ3O0?O#6WTsdd7+V+^ z8k(CJm>U_GSr{5xn3}AbaXW`Gj@aN^~@_SNz6-5h1r`4v=^$^2(Ml%=c3falKi5O{QMkP3JA!^FUc>? z$S+WE4mMTrO-#wx>H$aNFB2k(EBrE(#o*cwzPu+xz(({=SM8mDy7g?t~oFaE!?1I(Yl_=k*f%1ozBSUX|41@S$$O zFJ5JlL)SA}e@Ly9ez#iY_RHCu)_rkSWNFqoSP_0}p+M6&sa+Qrp4vBe8+W_vdk#aB z*mr3=SLpbLet((MqrXir#5UcB#pUGfh0zs0R*D8bEFAZ%n>MFc95*mj__Lw0>Zrj+ z1q+GleTF_h9IQRU_a)TKS^^~0+*$-A)WTTqOZfh)oPG7GwS~myQ!z%q(~nw&w3UA4 yiz;?cUGnvv`m*0WxgVBtV+${!SVv|JmjT0luWx5}Fs|zd6^5R!elF{r5}E+TM&HB$ diff --git a/TMessagesProj/src/main/res/drawable-hdpi/doccancel_g.png b/TMessagesProj/src/main/res/drawable-hdpi/doccancel_g.png index 00716eef04c59c1edc1d1eba1a0ce8871cd4f6f4..b53eebb552c678df85bc48fc3f47a35ab835a47b 100644 GIT binary patch delta 463 zcmZqUe#NZV8Q|y6%O%Cdz`(%k>ERLtq&+~GgAGWAzTNCTQBl2~vB%TJF{I+wn;YDI zOojpt4|QYCRBLpxeC4WO+RLnpjJhu>twOrPEF4sS{RtDZScZHeanX)m{|%e~#^ z(ay}F(7?b1COR14Y$d1=P@qnK-hKJ!pLR?vyAflvRrt8YDT(JYpXa3>vGlm@ecQAC zey>cjc#q+FHjgCD+=cVQohLHQNj10^>g!PVbq~wmdme&w+~D%uuDUoFs6IoqvP&?VNzsWSh}T+um?rj{_R+}M=- zXvIPgxkuNe{LWde_^hh>EHN?f=>MdRcUQfPRc-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPA){ffi_eM3D1{oGuTzrd=COM+4n&cLd=IHa;5RX-@T zIKQ+g85kdF$}r8qu)}W=NFmTQR{lkqz(`5Vami0E%}vcK@pQ3O0?O#6WTsdd7+V+^ z8k(CJm>U_GSr{5xn3}AbaXW`Gj@aN^~@_SNz6-5h1r`4v=^!us1A=_E9aur#FG4?ko^1{SPBTp$S=t+ z&d4uNa1J(A@J&q4%meX3(F5_VOKMSOS!#+~QGTuhIDD-#vDj~5Ldf3`y(#2`nLf}l z`k=&tlvrRwz!V5#!jnFb1J69EdB7Y~1k4&wEgZ`j7#O#Cx;TbZ+VZ*rKOw6diS#yOrVFKA4T{P^hZ zxid$%e~?%gX%@fZ?#(4rmt`KBsM5#MqQIia;mF}6&?JDy{t2;XyN&;6B}|OhSe&2B zxbrxBA?m}AfQw(FW`IgY MPgg&ebxsLQ0M!iPFaQ7m diff --git a/TMessagesProj/src/main/res/drawable-hdpi/docload_b.png b/TMessagesProj/src/main/res/drawable-hdpi/docload_b.png new file mode 100644 index 0000000000000000000000000000000000000000..e27febd6a23ecb9ddfd6cbb8627773e50c61ac80 GIT binary patch literal 1952 zcmV;R2VeM!P)h@S5h{oZ zZI)IGDvA*kUKWa!09wzX-(}BUw##n2Gu_90$(P)nPG`>j=046n_mQ!-ejB-nOPEE> zLgr1(k<8)DtC+dWJlxm8Ji$D|{F%9j*~V;UHZlK=mqF7@#zp*lmJ6a>$1Gz`V&2Id z6vhAKf!8p7*5BHhUo*dCZe$*C(s-u?x|BJMIg5D*Gb4`A7J=^v-(Y^hT*utRJeBAI zC>K?4II5yl$+1?6k}7*2C}OQ(zR5h6XaWsn z&SyTyyduos8=1>dEsjRCYhe-5^x z|1jUiyX2j%>Te@p+e+B#szA~ve2cGV8sJ0BhtNjUllzc&-U=HI;aUc4+yR?i5$ImL z&}X$VlhEz~h2yO^a`F-}x`16zMk?ULlBB3=UB&HMn}wO|{H zX%i(6#MYUx-8h)*kheYwBrSg(96`a4=oJE#dd5Q8u26V5e3Re$U;9Lkir55 ztOD>nm!kYg0?kLbfY2STrxeHZl5y)1fgpry7W5=gHglo+{Vb&q7V9R4OHp<>fyDJ5 zjPy_a5VBZo(alm+k317JsL(x@!EBX&y&t~f66^P?F27&${0`D{Ffcz~f(qdK7_6rB zgU)j?SF-{w&;yp=)0J-Oa5d|){Gu`~P^r3iIi)X_sdR}ED9fr|^=T|ngC1^iH5(uT zjizAKUj}j~(^Va=W+&BvTr?Ra0u`xyz9$b_gQ83;q_Nx6CuC^l7lDSU3%_{!&_0#E zArn53!G2Gl5Df}4)$l@a*wg3ytgK*&2$ZWXobdEHH{Wk?nJ3VNU44i8nI{72H8cag z0u%}nC`7Sz7lgg%kQ$X~RjXXD%+Lh_wW|w*Jbh@0?$Jb`Kh=eyo<8T6EgSriX?f4X zJbma!mHsu$8h`m5ez`1Yx<1N#dx}f{PR>qb`t`U>1k%e`ZgW_m?bIE6jz**puO;W{VF_eh`>DZ7H_>FlNG8!w4IQtyz;&Y$@L6cn~&>7}dbziB&U#K@CIW7)R zqS9O0t3G35(mKq#(1nID7LnW%N3ckx8;mC{_?Ut-8M5dxBSA!RO&qRX8OS?9i;uKG z5(Clee`dSXrA89T&5|RSrP7UDz4mK?1gli~DHr{Ya3Z-aj^JsPUabeK1|L!|V0N<$ zjdf2Vxh@V@uTtchph0aofjX&s3z31_bK^!Nw@Z$l*A-m7I>QMhkXhBgk(T`pmHi-+ ztKx9!sYG50dDpY67YHQF(Oy!&t1Z_%)!;`S4PNHbb1afT0@>1N=7#dE2c#ORDYyZ|Rfm||UH1cB5io8;+0?BB$oPz6!WmmE6kSR=Jam4nu6x^~dc`L`Nj+g}!v_T{@ zHFQf7_iU!eGF|#wwbzj$e8moWUsm`a4bq9am3a&6x?Sod3h9hqrM7c zh9Om|XB&kO$@nA?M{N9rIY#wZRaPV2XMqH=M0N(;0Kv7008C3@ai+n>p~{7sNx|j5 zaTSQrNXx+PxVk0*^sNcjF8N`T4(^N1Q_wt+QvwM-r|v^WS}eapPGOmv0OCxAE!uBu zfz6-A`mo-fywHXhR;zYNy3P%7*(djdFq84_4XPXOf{kNgGr1*@@ss8%^Ll$>+g$3y%H4RJ{<0Z{NkmT1^UH2xbGV7L2Mem_kOFn6nel?v1$`!gMTxH96jKJia?|SPA^b*gifZJ=fDrq)oe_JOvVav_`YJkM@e!- zm%%9*EtF~IGBl!co>_JupWTUQ!>4dylk$)^4GF?80|&qh_fhCEfrC+{a#RO!992&r m6DSKUWUBm(TV3P-0t^6^%CilS$~sK|0000NmI zkP`y2FigM+Py~2+Qh5@QEq6}GRwAG+_KnEr1sAX@I|j z7v4+CgdzlPY8m9G-pJvpg**x$a9)pgQc__85v1Uvm7++ooT{V&pLnV8eol-7(4SNk zLK^VdsQ@n@G*cpj& z0fgi{nLw%#NW|zlMsBDiT0sL~Pd|qsl6rZ4B^JxSBnnO$PRW(x2)1~fNHiDMCvCaH z7y6GI-_(|KR8k1%3&|zXG9FxyFw8s{&fQ-dnp1?mp?b>%a8bCCpoAAKg2W1UkOsgv zwtNAfink-<2?R%bydx1$A`=K?l7l0~fyr`YksO&Ii8#;kEiBoNL}U_}bRvmGA`o2d z=`0EnbcDAQx+{@n$C}5wi{%Qgmc>?j=d9FO4qXi+EAO_;IWD*hjQ+}y}Z`jA%|F5_|WBLD2&Tz0ZxVh%| zuV$GS!5uia{o4BQ;p^}~Vt8U?@Mx4@h;l_BmeAcnI!D|I=dP4E3HhZXOnY}wa(zrg7j>XKjyaDDbT z)kMBwur2*^Y2;ndjaO+`!0prs5bNE|=#%Akv?mW5A!Cbj7!23=(Jn)_VphvOtgSTR zBrxb>%r2%jQdwnI9u+URV+#y-rVDR-frgsHo2la|oIebzUq={0&#Q#vlEg#NYxPm} zu|%q2P5MW)6DEaEj~|}FHj0_`WFCgMxMZCdN^DlLb~GlJR#CCPBx$-nV3j%Yc*L}3 zb%jOf%^rg({6?yMy~WFP5|2E}KKY2X|M0RXivf+s{E^znhCv2XbxRYlY$v~hk4b8G z->UKSmD;(QgfM5Lu1U&(xO>+iN;SDqdM;4ZPTU@E9_pa|pd8KGzHY$ErgpkD;D)lH zv_+*n=#soF`mJ_tL1btg&^r>mAkW)! z798u|F%ox%ou3PGT(BGNH;wDIY<*Z9EVSetvo;1|EC=4^Ki~4s>PX9-uHp>Klu`%v z#DX}*wX};*A>M4cAF|_g^&RhYuGMNom;9?|pWNqz987V)`%3+St0yw6M$v@O3Ad?4 zxhZGNWMP+#l@V~8o|u*FYeqv6{3Gs_Wd2}{6yA3e8MW${gO@ZYQR-9fdc_)6NoD^Y zET#S&taq+0po?)}z&w_Y-HllZVt;NZya)ZEeU9Bi}6B#oTy&NQxP?kBGc2M)t1F9)w=yioY5~&V5ZN-?m+)|sG42x6q z!L@)`8}Kl(bM1_wIa6`qFhtq!3MLe+%5XjP#u@pE8>;Y5*{b{S9Z zvFHOVJe9otYH3@;k(%6FW@GrL6R%T3bNOY}Ypb&+*JcfxYW24EjvqI>pemE)Ne^ud8yYU()$zHf~`Lu}}-C)})op?90Fe$%Bn28V?#K zOjuTVp4it`NGCg;p7~)ZCRg~XnypbLPgCtR)T1}~U(9yS$Fhd4<0fRcYnDIG?+EXF z`g35ntAQr+P)JQknHE1Xh=nR(7#n50ue^&Q-M5ZDv2KaOb9UkoNpUO9pg$3NUY8y- z*{m)N+N9IDyY8PkmF#fpphbvOx4O^*b<3mj9SUV)Yo2Dsu5@C?=s&;MPaf$!;9mEz zb!W>_&cm2)*BJq`Il-j(tr4~(=%?P0eGT&MK8>neRl@Yc7}e|ZZGkb<&{fG*v!XML z-R@QC=~ryvN`FL-dK=>StF~y^`@OPEG|-u(xAY4a(0{Q(Czih0nL7SnmC*08;7z@GSr@Io%keh7nUz!Gu-dlP#8iLH(LFjUj81vi o3!(3C0`HxTO&wFfsp)ms5mIc#5sQ)Lh`FCMch`+z1!G(MpI4_UnE(I) diff --git a/TMessagesProj/src/main/res/drawable-hdpi/docload_g.png b/TMessagesProj/src/main/res/drawable-hdpi/docload_g.png new file mode 100644 index 0000000000000000000000000000000000000000..f93437c168da461c2f363ac040c229ed32b74190 GIT binary patch literal 1952 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 diff --git a/TMessagesProj/src/main/res/drawable-hdpi/docpause_b.png b/TMessagesProj/src/main/res/drawable-hdpi/docpause_b.png new file mode 100644 index 0000000000000000000000000000000000000000..d7c483a02500caed2f717ab7b09774d097d61c0f GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5XmU+53hE&{ob9*CagMolUpufy1$vX#M-Z?0F=T(kQZ?B<1 z<^HbQOiOl0-S0kn{PWlP8_ibHJW%sgfM!EfL-o|Z5J_No Y@r`d{;R5jhpoO zI2*%E-rt^AHGLJg;W4l8tPTwfj7%&X0tyZg637)&01KAn#a%o8ec^k%v&&bV+}WEu zUvK+Gv*aJicCK6f!5Tn1Rp9!erl?N&s`u^Nys4l6l}^8G3^9p?V*<>Q2B=Qai;4#r YRw&H=ulIJI642!gp00i_>zopr0NFHBAOHXW literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-hdpi/photocancel.png b/TMessagesProj/src/main/res/drawable-hdpi/photocancel.png old mode 100755 new mode 100644 index bd41cc686a58d0841ba0ff6830a789d519c8d18f..fb7572ece09e8d43c83e85d1f299aa4848dcb52a GIT binary patch delta 1415 zcmV;21$g?`5t|DkiBL{Q4GJ0x0000DNk~Le0000;0000;2nGNE09Ea?N0A{Xe+4~B zL_t(|+U%T7Y#T)whQ}KxPTWeV+NgIzU%Q6XudP@*VRl0z?r6jg$r$c=jyapIIi z4#^=>?>$9CLIDY+6nfwgC3X%pO@D-Fr3wm^0&>#QQrgn|+2(ugnRL2w?A^6zch-T3zfIoZa`$~gULarOtxPLGbsS6&k0)LVaVy0^Wpn`aBKch&aCH&_fBQG&U%diU zPd-jQ;!?186obi&`g+2a&YJ%`iCYFCXMQoR#E$9cc)KPiZH%!xsc*rNu;7~C@ogte|yvpReVFOWZ0SyD6_MFrmj9PwN#mAcy7 z+dG}jW^KWNlF8(if4;uH^W|P!1)UQ&6DZZj#zwBczyCa-i07=dB#+@hZH8M*8g?OR z04F~`!#msUR%uotX#xk@W$+w`=>kb3IQje#LHZN&PPa=g7P#l<=daPo!8CybJqDmp zS>f(3rUN8d9>alF4X@zH-3={ALpV?jfHGdb1H_#O`jt7?e=qW!C-09HzSQ?bQb6u7 z|IJCptw3uiea&MyazMUnH<@$;(26E-5Ob!TWZVk%1f@Rm8qVC@+-5*_IxSJ8e^KIn zui*fQJX&c4=>bYx)(MVgkd{zVS~oZvK}rii>#7&b?7}GrX>@e7LopmMNsDCcBUZRM zQ)LS}iG0Tne;ji{iIxL6fQ4%SoIX^qj*47NtsNBO-@eUjKyLP1_uX| zPNomI*>YlH;$}P^|A(%TQVa)L7#<$}L$n|)d7NRvx}&4y=RrP8AId`!=^m2rgj_at z2XMq(Oz29;Wh)CA&~@^EA)7pd>%{M& z8DKyuYCS8Z0Et$#6hJsj=GL5Vl<}1_;n1!MR;@ic{i6 z*v5D_0C4W|x-z?fFw{*k50+$I6zVo559?-?+r@*V=}+?OthTm8<>%1k&k4?7C07wF zTnO8$f4^c?JTF57p)OyuGF!%(jaGrw``a2B*>b!tKU(=`J9}2K#}j8`)YPWla&o#Y z{6qHaC>y^B-ynZU{`tA)r08IQ77ocz2Mb`&{JkyxEj*gSo1-aYg@>D1kT@O(d(FJw z1T0o0v^gF}me_Cg7W3wSrAy4_nwHl`bYa)bT|TDvh_2uGulVJb= literal 2263 zcmbVOc~BEs8c!gEa0pRB@WLh(GL9kXBqWfm5ORm9RfrO$tEZP zlF0INZO}3l$}vNplme%SV^~s^f+Vr)kn{>Qf<~d1vGr<+G#i3}bZC=Y8BQ3w-b4W8 zvT(v`x)>Czc~GW&d4UE>EQn2#7Gz7AG6FjSSf*zo1PTb20D47^Qp?hZ6F%~?kiGqw zOaMNrz}ex1DW_7zaR5)HfdD!Q43>fn5MWS96k14VXebe&f)tPpQppr*FeQ{lqq0B{ z`1BAEYZ_SwD}gWgWDAkP37IggW|7G{osOiVkyM&ZWD1kXv~y6Y!H7n%HeU%#^ubDP zz%&CN(n>XQH7r*t0Xw54U6lui6A(|QLQts1;?KlN?WaT`DI@D8YBGfck`)SjTpzWy za02unH@>K?P0Ck8! z6BQcDVRAu`OXo4D9R4&`q}0L^r4*XBD@W{3VQGRt#IkrANCK-gNh(#&bO*#`s$i8i zQ>6xYiF80Lk;;{J*(sR~Xz zoSbF5bars=rrgxAhU<^DL*HM2e{*%v-Jky25kAQ5$bZGWjNh7sA~~y09uGB+wA7m> z*Enpi`GEB>)HG|;9;bxN+dWaA*{%1{`*ge1*WGyNd128q^ftFL--Vcn{>r|roi%MM zy0h0Cgqa-_FY|AG(!PMcJl2e>>^{n`;9DORKD&8G^KX4?Zwg!ctX_Xp`2p(j<1+9= zs>{>6j;tIQZCKYd^X1|@Kf3+8Rh<%zfBWW0OVsV|!%k1)slQY^I?R8<9h{8mBoq(t z3^Y@FXKO?mOJXFLeFl8ObC*L{^Z~~RHvy*_(b5myVAur$q^c)(`dd^|Z>$$~NLgz+^BOqSvikw|hS(*2uW>>lK zgt*B9C*xN?YRXo4W1Vr|a{W_VxGQ~+0=LWOG!(`;6a`@R^G;}&^t%+%Ox?S@>bh5( z+lzbd+_}@%*x2av`t|Fa`}gm2PtsxVF0%z@RN&+s9x!qHTE$Gi<R=xW@idZ5fxjy$g&L7oWkbXsgxQ zNc737HKzOv?eFLNSUHx5I}r*NCMPGCYmFC8z_wu{-m`R|$27b2I4->`2vb{oz_FBx z89oq-acr)L!utnA_PI;39L#P9LqMq~&f)6wwk-6?rY80;S5jRC@$vCxSo{w>SK6YL z-;Sq6HhZOsdynF74UT-5iMmB@CqB7!)Rmm%*-%#YT{~#ZlyqY4_8`%pzZyp|gD* z^klsEgU0gW;?K>H?`b-w>;$G%;6Y)@PuW@g`e3~b$74S=+1iBr01JQ`rn&3 z3m2*xdeLgzH(BIrYuDnO%G}etI15^aC;i5;<7GdIU!b|fmkYf^d^leXuYh;*U(Y$2 n3e4Le#Nvw13zuUD&Z8VrBKPaXBNGRR_FoNAR4o4-ccby&or8h1 diff --git a/TMessagesProj/src/main/res/drawable-hdpi/photogif.png b/TMessagesProj/src/main/res/drawable-hdpi/photogif.png old mode 100755 new mode 100644 index 29f155b4acd0330f3a2fdd5f2224824192ff9919..0033e3db69a1b132f4f4d64742b17446959f127f GIT binary patch delta 1641 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 diff --git a/TMessagesProj/src/main/res/drawable-hdpi/photoload.png b/TMessagesProj/src/main/res/drawable-hdpi/photoload.png old mode 100755 new mode 100644 index 20783e58bafad561aab7c4b1eada48b047b2d94d..2dbd58252a7c0509ccd2dca924002706ffeb2941 GIT binary patch delta 1240 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 literal 2353 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 anZaVscm1sHs2w%^!~_S1aZa&fGyek}t*}S{ diff --git a/TMessagesProj/src/main/res/drawable-ldpi/doc_blue.png b/TMessagesProj/src/main/res/drawable-ldpi/doc_blue.png index e757044d7e26914764499d5a53c668008b300bec..91dffa55ce7dacbd3f9219991dc4cb829df1a401 100644 GIT binary patch delta 573 zcmV-D0>b^H4c7!AiBL{Q4GJ0x0000DNk~Le0000a0000a2nGNE0O0_bn2{kTe*yVP zL_t(|+U%E2Cgz48y$P6%v^ZsDnNvJR#b-31iSnnw~nVwKGa*e|&j2KcOky%&C zc*&)3-w#!A0n_APRL=~`T*@Q=pj(AP$YgN83zJX@qi{$*S@r0dM2Buee-=i@4^HSH zS4?z41vIK2Pm>sSr6uVkQ!NvARhpkm%u>CgRC4Ec1z9K6Avn#(>viB;ZC2|LluS{~tQ4aNb$wcyR zuXKI~$|0*=4(>K*f3^YH>tx zv>;kQMGh;bLoF5rippU})N<4TVnqa}3f8DYCEZZK{vq9&-S>WPzVG{;Z}xC-(8js8 z&b9;sVXiQMAA+w=rq|jM|Msal@9q$Nw(QljsAz()h(0x}qb0F7+BTm@=4#0gyx-78H0X2^jv%SDatzXtrkegUBah@%Ez8xN8~A8TBT)(wSqKnM=Wg zp_m%`pGHp|;nQQl=G zPv1GB9U6-@>QuUKKMZ%gUU$#ZEcxz@2x#*j~T=OgNVrU%fL)yX_LfvWSrRM*tfUiYWX2`{n<>!p=%GC>2TWmXj&ejB|5s0 zw{oyI{KRLsW}TU>*B)w4E_1l<_~Ebg)0bPcdMVG|>RiLJR?mx7U5NLyxHStHarO_s zy7=Q9WvZ)HZ~vE_W_CSUU31LD*}wX}Se4tid>0xTwWT%9np>W6f%^L7nY#;x9&w}+ z>w+$Wc=XkKB*C*wn>C!xwz(Af1?gr?_3^;V7P03LLX4s5yRJF?wbAAl8TGMOPTYXs z9Ido3JZP|Qt8NY7M+veb&9+^d^44}VEK*mgve9fR&FJ3Rw_MskR^GWYt30^i1$*A} zzLgbqwX53+y6VzXOJ*h6-7BhfjfvDg87s++eDlX@-%YQqMwXV;1_-Juv_V^=9I>kV z)eWQdLrZd46@Paw4DZ>YH)f-Gfrb)~(XxkTgH(al^Mm|?+l9q$TX$u=>+SF1r&D|~ z+3$uLax*#zSXJ`doS*>={5@y)0Ygtxy61ROM%ndp!_t7}x3v4no503n2B}k#r=qc0 z(q8t6;a0FJrRP@bqsGTVouu%J0Y0p57SDQeeYRN!a@m-cJ36eBKT$*of>{^bTPw$m z&iYG{q5%Ezp4Uan@Zi!D)d{)||HjIPZiDgHIzU%rtznl9E_I_ga8X|L{M^x%$peN< zt-r)BY%AP104F)B1g@{f;*544NO4Vj7U+{{d39K4=P}p-B|twsU0z~-Z?~Bx;ci64 UdT(a_5z}u&CvoV)c9R}>ZXP}<{Zu9-um_3KIfkEo9~`;<_w45?~e$lD>5R?E?dYJ z3iWcT>}+JeKand| z9-WHm@}Pyw8&T$ zN`rd_`J8NW$Xe4OV|A5H5$eIkV6Wf)rc}mig%%;@`!0)2ifWl)mi;`TRpj;{-I(N% zY8>iS$prIlZw!75#v!Xo4(^9gi_DSAUoJtN7^zgWRObc-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPAEg{v+u2}(t{7puX=A(aKG z`a!A1`K3k4z=%sz23b{L-^Aq1JP;qO z-q+X4Gq1QLF)umQ)5TT^Xo6m5W{Q=miJ_sBg|Uf|nVY4dp{t3bo28M9xtXD%rK78n znXwy8uSMv>2~2MaLa!-Ky`ZF!TL84#CABECEH%ZgC_h&L>}9J=+-@<#X&zK> z3U0R;r?*$ItgH#~w_$o43XIMVC>@F&WdO=~5{R<%$i3m;Mkr%X8~7&#vUmj$>~(9W&`_ zm5}%Ch|(bHBFc46B_RS(wDn=t(yO$ z#9XDb3F6BhSrlD#Tj&*_VfE^}&RV_gM_x&BTtAq0COB!c>Fmi89lkd>_E@|xlk?rNtgG3*su>4@ZC^Kg?&#`XShT@o@$U5>YMccxO?eY@ zHM?uE!~)5ge7BP3|I@$1@W1Q=<4LK+-oD1~RX25Zo{qY&w$bp$>WOj}dy=+Z{I%#n z?wxlBdUCcsvJ%u!;9D_u$5Q15ai!Z=<<0z*a>}viYR>1k6L!eXSa~>j~=w_lHDWZzR|uRs`X*-)cL#>3k2$}zGq#r!Rd!TXPm3D zsP}%ie=+Bc*ZlE0X03C%CogO3)z+x@W$e#x++7&C^zpiR{b5G6vo3m{IWE>}9LrpE zs5D{QH;yltv{qdCd{85BO|a-Zlc#IKzOO$lo0i9SW}E+&zm~Dl8ja67JOYy@Z~gc8 z)Zxh+1S;Y^UHx3vIVCg!0I6|>PXGV_ diff --git a/TMessagesProj/src/main/res/drawable-ldpi/doccancel_b.png b/TMessagesProj/src/main/res/drawable-ldpi/doccancel_b.png index 7e3eafac549e270718d6faa8a5c933b30b2e7910..fbaba59838111b25b0bdeccf32eb784d71e71ac7 100644 GIT binary patch delta 285 zcmey!xr<4$Gr-TCmrII^fq{Y7)59eQNUMM_2OE%l$S`BZL`C&_hC7}vjv*DdlK%Yv zZ+|#}$%m(zr^hPeisNEFsnQE8n%kB(i{)D@dOFM#>`;C2NMV6%ki#pR3GWU+l~B0K z9;)ovFHpsIfxCeoeVPo9Qa8ql>1VuCSfIM#o0p(~zeAbGtmI#fuewfl8o3qS zc7DOfFthc^45cDrQ)N}&ViOa0!+=*a9)|KIc5dRlA!N1pl%m@Tc-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPA){ffi_eM3D1{oGuTzrd=COM+4n&cLd=IHa;5RX-@T zIKQ+g85kdF$}r8qu)}W=NFmTQR{lkqz(`5Vami0E%}vcK@pQ3O0?O#6WTsdd7+V+^ z8k(CJm>U_GSr{5xn3F8=?X6y#j>zP+vl9-pA3bQv8XfIT+GhV$`&PAz-CHX}m`T04p6cCV+Uy@&( zkzb(T9BiuKo0y!L2jYXG2jW|o)S}F?)D*X({9FZa_*!LRvERUikiQ{%Q^*N3eV}9X zL5Tw?vA~3YDGYHqoSvaV@SoVH`C5@H8}{hUoF>Q zSvWaAK%jAg2xr{l=;iBVo8z=!h_JM_F9`m^6ePgebb+~KhYhCe+bi;tecA*8Atxt~DOwwE$fY^>Zd}jomihTqru}V?Rmw64S--UJT_(Tz zyhB8zaYo|(y<5B#W_BkuvlYaJKJh%j946Ix=6K^0YoUu3f_?{jR);Kn>`{>{{Gw!T zMaWVwm$U5~*vtdim)kJ4x{2`LRz9=RJz`#=T;rmt1}lW@LLYfe{a_cw$x-6j(3>dD z!;pQ6_g&^x?+FfHWD|k~E?m5!@+d_#u#2m}_K-_fr0WzOCN0h#dmMUBY%1Y=^@r0m t{zF=pj=|a*t0VtgK)!hNUPX?HhryM-klU<-f$kWx&Wt~$(69D8tq@w@; diff --git a/TMessagesProj/src/main/res/drawable-ldpi/doccancel_g.png b/TMessagesProj/src/main/res/drawable-ldpi/doccancel_g.png index 608f103c5476943d1ce0dd2623722f7a65f252d5..c700483b1e1f0ddb640e5488fa36380df8c0b457 100644 GIT binary patch delta 270 zcmey!xtd9_Gr-TCmrII^fq{Y7)59eQNUMM_2OE%l$S`BZL`C&_hO?e7jv*DdlK%Yv zZ+|#}sb?{tROy8k&2F+LuNDNdPh^{M;^LLU1woSzsLc!EqY!;#ZkGPmL{sPZn1yu-g`2ghuQSYgv$%noURuOzyP zC1)*`&?x1(xicqVn)8+}qZBnRnalmp7zE}u=zhOw(lSA2a=)C^l@pmyS_D>X=su99 zIN`s%<`SioT5BB@U9|G<$18d|%oFTTJz-eAWt%*bOLZ2Ixfw MPgg&ebxsLQ00S6jr~m)} literal 1265 zcmbVMZD<>19DmZ3y-7kk73Z+<^wJHBOYS8v*E^auX)f6Urlx6F1CFuFX*+f+Z42_D=% z&;NP;zu*7;W^?_=Jo^sr0|0n3$E7@3JDhjVF7h4v;if^Br*W!?2aRD|lT8E?Wut^( zMw3TS9?9j2mp(^50Jw+MLJ=3U&x?wo1!YGkXlqr12B4?cuFA?N!mxx!R6R!ha_u?= z)pCp)ie#B=HHj+f@ktX6PWBg+$x%fpQ@uxFk1Y}c4PhDD+L&&Mc8uEK70KQ?rYX3g zf=6T2rc=di4kir~!AOt^C`^=rQ8vhi!aUC(fgHm!G{ey>7hriY#EA?8w;qaEGt0wb zUP^D-B2tX1U|bbxx>l^Sf(6(?M{o}@t+E!tris(GDjB!&T z^%(Xy!6bK&HsmN0Z^Rc&l@vuDlMH2CLpsh#F^b#-%W7F7&&O@$L_fgD6xR!F3{XeiypW^@b7x`LW^RbqDw z+xnHZCd2K&~n_W^KqWTZsFUM>Cg z@L}(*xcl(A1W32D>y3e9uZh!(bCuPhldVhprG*b$*LlJ9ulSoJRbKDE-i@bgpO_O(=2+To9Tm(2Lf;Kc?M?sfUDwS5oXyzH+0)V7eE z|EhiZKG=P-BQ=2UJ-F)jy%+z}zWnOqT>a2d`0-LNJdt(!MS zE8p0C?Pk3&!wjs0kHRfxMlo^kn3gJRd&-@be9g!2yrnN+`YrSJ6g-wU3g0ssI2 diff --git a/TMessagesProj/src/main/res/drawable-ldpi/docload_b.png b/TMessagesProj/src/main/res/drawable-ldpi/docload_b.png index 84b9884ad4b50683e9211b4f813d3135be4ccccd..129a045fa49b0b3dc42e90649b2f31d864a4dfac 100644 GIT binary patch delta 941 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 N07*qoM6N<$0fNbXyK(>k literal 1725 zcmbVNc~BEq7>^h#V2Z3^Mgbw&-Gp2cXv`)OYXCzSLdBMlEF_X-L$XMMIx5to z(Ww%Ukh$5gI>L}78(hZ00AC8^r&g{PTz4!fo-#z;%sLUuysKJs@Kx$B>pmJ2D zv8C0cp(N78WSv5ZD`m_0YRo`aIdte&gNZUo-e}=l1+)=fKCyQkGibnw z3Z5#UjXI^2MFS$ti~=EaFjx(;L4Xa>AtsB%;RFFN2!RX`WRxz;H035p1y;ag{aLXz?3oKv0X? ztTW*{%m_FbRY_PnE}#*fj)q_`$z<<{jh3-Q5h-I>RVD^R2N?!~Bd!r`3ob|hapS$( z7KP1(GUTWQOE;^DdL;XegNfXI*pNe!@P;2{))7Tf=@CqwZa|H=6cNyf8@fiP;e$*r z2tgbc$bmsN7lOF#5DqUyB;iQd91+5X$2s1IWpfcBvRDYiYzYT~#4MqN2O}Id1o4Do zn9Y=oW2Ht5t}?38al1Og?id#OAeJvOqbeLTD=%ac(E4l1NTHQbee*{(deeN;^~N@oV9VDU_^FgJy?Hr*6_lE*gzhZe(@|I@vzNP-p7wsdDl}@t&ejQwloNQS8QsnmAJ6=xJp4+>!nMQHoXG;= zLGo9%1HK4fSkgB=vet z-l2Kh2CkOIBKpTyig$_kC?!ZOc3(dw9znKIso~bL5Dm3iS(JG!TdCL+(_hj!>FD~3 zlz@U#AXI&Reo){(8%5^a{Y6T!_+{yvRE3dB zC7Z9u4w7Fo7w8@YE^WHBXmeN3kF7_cwNFo{wmLU{-(9({q~oD}$@aCPkGcfhzH4br zOOwqntFmT#(Ags!10MVAUe?~0U&L{ZaKV3wO5{vG;#v5Nbf+i-0cUuW-@0_EBd2q2 z`~Gyu=2hxB?f9B)F(+^5xyNDkJbpKc*_-qHRi@(Q@XW?)PILL-!Yb0~1;-jf#E-O& OABt2Qi4-kP%=#NUV3s)m diff --git a/TMessagesProj/src/main/res/drawable-ldpi/docpause_b.png b/TMessagesProj/src/main/res/drawable-ldpi/docpause_b.png new file mode 100644 index 0000000000000000000000000000000000000000..d57a51a5800cb992a61f7bca718c8950572053a4 GIT binary patch literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBBuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%rFptIhE&{2`t$$4{ow>AAD(8O9;=Kij*I!EN-wNvzQDk} zQc5h}x=~T=b*f`PUm9N%(-W=<6Ipg%G%|k1|%Oc%$NbBBuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%<$Ag}hE&{2`t$$4{ow>AAD(8O9;=Kij*I!EN-wNvzQDk} zQc5h}x=~T=b*f`PUm71%zZGaPgQu&X%Q~loCICV!MF{`^ literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-ldpi/photocancel.png b/TMessagesProj/src/main/res/drawable-ldpi/photocancel.png old mode 100755 new mode 100644 index 857a1202cdd92a46c53fce191f755e1126c6edae..bce279ae8259466e9efbece39fb14c6aa05c6909 GIT binary patch delta 699 zcmV;s0!01d4b%l8iBL{Q4GJ0x0000DNk~Le0000a0000a2nGNE0O0_bn2{kTe*$(% zL_t(|+RT_cZ_`j1hL7D=NHhplN*SPKXfp*Xk%}l)l--y7g2Ds~OpI*&33kK;{ROep z&Ph}ip-OSOQHEX^AQCFHLQrsc5Bgjktig~?|QEQ8x%9$W`k z=x;y43HSmIz&`jI_RogH;eWrCe~1z)xC2(ffhse`EP))feJt z)1pkvN~KZ=J!e#vX_{7$o!}U@IWAO^IGb3tTD{h8x1ZX!t&fvwHk*34+kGM_#T`nj zZ11?P`@PfYxTa~Y1*Lo$!!Xt$?e_cqQ^{UhIWakeeX z+KMrc=6N?g2UlfV1_dzwe@u|sj5)D?aG@7qDo$%rivLb1!}CXF6P9VZcBV39G^bdC zUi!s_zR3!48GP8#b^X3SOeC08>O`drc_Nvx)hC(HDpd!O!#BHHt)`8dz@k*WUe{vm z)`tom9nWNTYkqX}dcD)IUM!c(1<8$(-(_F=5|63Q$}@+!&c5=OfBm}&Sn)gJ^<$4N z-Fam|4i`cm6>)jR!EkxOJ2kH;cXN>0h0OlAs>7yQJgXc9M()%mG01@;G5qOhT3dH~b002ovPDHLkV1hBcK^g!6 literal 1762 zcmbVNc~BEq7*9YjoK@?AI=~u~sz9=vkdtua6bexc1Te)ZIW~|$vT?JJ5E;a(RjM7e zYB|)77Vl!jB9wxH3RR$^MNvehiuI~RA&#^l#ZEUMwtqNwrf+8Vz3=V!`+fIpapKY? zKAv+t2?T;qT&zfj@AI4w$sK>EJ~)ry+iXmnh9x0d%%VhL0$+ouU?9$*%!FmIQj@=` z4dxLDu3BAk8kQza;HnV=Md{R`SPdo|O(5{1ttO>98^!XD4b+lnyj{Et2r8SbQHj|a&ZC!j41)DA;)OuS|iD0yj=Y3yrzL3 zl05EInlup*A}9Jf;1{b3xil(I*kj0!0ScEt)Ut% zS0<9YwuMWPSJ!!^Rp`9@4>4Ktd9CKyDpS&iyU zm<}-lPDZ5)$;BecxToVG7)(;>8)BpRb)xW;QLRc76{3JtgTWcsn6?>{!T-4NR&8@~ zz6qwvU^9}7s_}YggC@Xu?%r+4sfc^SU54uLq9}7jh&tB*8?iW1BpLrg(daZ>2}c4k zX%Z%fLE|vl5X7MgKnWe9v4woP1Y)r#INpZk3uz2GTL^+25J!r``C=A}&k=y2fFWek z_@W7HoY9OajcRzpt`4_5julAWiRB7WScxHMGJ@nxbU%Zi(BjEm*>sQoiW2JBr7Oh*{W}jvzM;K zcG{u-TMZoPM-S0k}&$KA(go6aq8P)z}&Wuqy{)i*Wa(^n~~e0aph zBQC>}Mg#V^zt|hoLyRVVth#I;=#_rqFP}0zka;%m(CQIFp_j2ECL^$ku)C~3WOAXK zy+)8F=5wn~EFm13>WFvjV?R4yzF_T{YjOvD(Wcu6JV)kvSrfdWg@^jqXuM2{)~QtxwXuv<~`V)^pr3lv0E(H}n0rkgoY z19=S>Q&UoyUtc+*AY3B|cqt$Cl3ZS`Jed~S?7OkKzP7fux~{Iy;$GC5(0yGa@LS*Q zMk)ERwx*`0590>5%0K_a>R$#9>WL=rj9H%CtlY;i zKwe+0eYn$Q+p%)h$yl#%4+ll~hg{m?(Rni7yTh&r^2*T*A_I96GjEwOokZ7CO4RqC zvqR)=B-z60?JoS_?`%cHH(2VL2TZKYly}qX165>1PTWh&}e(}h5jVNWO zPv?buL$c%XF9RLBqY!;p+x{m_&wfr_TlrplhCJ4Qz2Dm$;5xl!#lX<_>cCM&LI1Xh zwVZQX>q%9@3&iUlm2xdQ^UT$A7dJl$9XYroi6hir^FU|Bgq)t!9sKa_uY>x1aw`M$ wZ1fEXzMWTq9_Z)L98uf9As+j)xXHzvP?X*paqp*J(w%>uIPp@EU6Ap~-{Iq(=l}o! diff --git a/TMessagesProj/src/main/res/drawable-ldpi/photogif.png b/TMessagesProj/src/main/res/drawable-ldpi/photogif.png old mode 100755 new mode 100644 index 9599c4c35dd937b8b4609c74727d973764f857a0..0915f0e4820940807451886d5a1318f765b8ece8 GIT binary patch delta 829 zcmV-D1H$~b4b=uAiBL{Q4GJ0x0000DNk~Le0000a0000a2nGNE0O0_bn2{kTe**VO zL_t(|+RRu#Xc}P@zZ26Ig+?JMN=ytIL1_yirJ?B1j7gRv3MF0I>e8u$F4?lW=+IqC zmxh8vCq<_$LYq>wV8EdfZ9=@Z{%Hykqec53d?(lAPS4c4^9MgX@80=-e(!zX``$-W zIdOae<+6{H1j0q;?h#b;m&_(w>PR^%l;@Ck5%nmq6int*SC7ecuq zB<8tHVpuE?ANo;(W`H{r$QLO^NfuQ@8`dDWLVQpHR0znoCn-K-Aj8U891Zr5(NFAMQHoMX3 zbar8>-)l4)FVgAs1NK=o8ePWwocgrKXSG^=Cc(`jmX2GatP+XDs@v^;SS%L5B$LU! z)oL~Pe7;9;zwP(?^Fr@re=?bLp-^B3m9cgkRgw*X{1`VTCFx4KFkMXE|=RBvk!$r zPq{gSc_zh=mTWt9!;HG!?xjwryMfo0O68Z?Y%beuwq+PO(U8Srf3Y`L2w4Y5==UhA zdcDp#91bU5qZ15QsZ=V<5VCU(*^mzf%&ZT3y?z$M6pzQ9IQ)>{P8kIK(30-p?l7xh zFj$0-cV4e|BM=BY#u*1-B9X`eJEa+hsj&8VEpeLjaYB>Q@p1}QYusGF(vZICWC}{h zDa^(uJMBMBfuKX~fA-^u^i67^Ml=ir^+*$^7E%zd9)C}b9c4}hF*y)(EY@`-NiVKg zBJ(4|7t{srE0j;@V;@GRJF0WV_VzXKOhz$h#K(ouwowe&QEn=I*dS$fwv(Q162~zq za)_ncffYrnz(fzM_%M=AWr>WM(2-t^6z#9nm`8el1sDKy6Jse8R&tBt00000NkvXX Hu0mjf&o_5! literal 1719 zcmbVNeM}Q)7(XpT!7_x(P^auDI0J$9dZk}SEB1p*ffj@cm7w8h52(^!y&lqv1f04I z5u95zRWc{j>6D=|XQq7XK!c8n^8--PlIa9dL6nR+bi4B5_J?uFF1dT(=Y5~w@A=M^ zBx;s9A}j3xx&%ag@!1>epfD8YIkA zo*GhHU}P;5ge0ux4}pv{zPwjwqObDS5U_O4?#6C76| z*GiZZPU+N%pd2SKkjH|;^$;Hd`5YF98zB$~!ax|}Kx_zRbKr1}0O7(21c8$eld?t_ zvXCT&a?%zhNtih#X+hZR{QP`YK9_|P*=&wTByw@Ua5$wAZnc|9)D~{G22C+2Fsq(0 zT1X>q23?G3CZ0!1n3SgzA($*`^=o3Ybuv*@%Gfs4!sf6bw#np*Yh2q(CSm`$@kVW{ z)^5SrNthMSBlJ`~vVx|-RPNqx$fZbmgCr0}swil#0@vr6Ff*xANSM?O%V0DhN|BPo zhn0L04;Jx-9F7QBQDu;Pop-c{mAPN~BA&nLYq#_vv$#`-; zELBWlRc0%Rn)TR}T_a_85-WQv7LgMeO5%hT$8)DTATb9gacd540p-a&P>t%1W|!S%T6IjFl$r+n+hV5#Oe>Kb05!HdN?d#U3gxAA^ znW>2(sL`n8&Ikd3=?_#2sn&M0#gXud@47h`veO0IGxaw{z?a;Wd>yUwomFW*9^D`< z!F^Le@X&XTWjnU*t9M^5CWj1t9A?Xb>+^GczTd1oRK0VCwH4EUt$WWVjPG&w(Mx82K#TdHk+B|43W^!XeMTa{crNqk$)4)vNuSqKzVX4R(qN9{I5^Do-&R<#kaQ# z1FBQ1eC=)m-!&Y@l^k-w&2TF1^XqH;@@qTWv!0dQddxp~wg1Kbg3KBnD_}>_LTl{q zUH4)FLP!1R^hI%WOH$SKgvAbj|BfwdwA#9!^T?)~-Q8Cz+Oy2_)2dSz&z||nYn!+G z=Jic?FZU#e?s}*>%w0S@GAovFd~;BjFI@0`nUcmZ?JptDj2%d+I%PW<)c8cJIvTi~ z;YfGP5?+p}(OoNT&4%Zt$TVXzhPq~3$gbGOTV;X%tOi+SVrNc7Xz>wk=!nPtmcYHj z*^#wB_ChHNqeCAV7Ulk4?2Mlt6*Szry(NC*;kNQW9DBdq*PFE>D9oP7_Zo`cyo(iZ;+0+8@n>1MYwgIVw$Rd9Av3*w4fJLMjb!8y>t^ z$m?K>`{)OQ>timi9}|B#@X8TiBL{Q4GJ0x0000DNk~Le0000a0000a2nGNE0O0_bn2{kTe*$Jn zL_t(|+RT_iPugG@$J;_j;ue8eh}+Zy5=rJx8ua3kgSZbs+_J+s?#_qc#>pc)EH2@~ zZIXR~jey3J2`0M3#FA{w3?oJz4)%YNhov@Z`qEPRPkxc2ef#rid3m2#mc$bV^I#4{ zKoA7@cUPbdet>V_7@XZVSij%De{n2Zlu*DTSOGHv=h4-gpau>=&k3Oz*Z`VjFF(N! z_&ThRAEd#uU~0K{uH^D8NTMNLiA}`lHAV{suVK|$!1fRvjHi^DD<3X-El?Ze~I_MP}0t5 zjYi`&VN+^lF!|AU)2yA55{X32i3c3FEld@P3w$??GUO0f>{iF&%#u*lLqZV}n)HxR zNHHv~ypRWqFx z*^l*ly)7v8od$da7DUd{e|7yT5C~jkGMTk#G&-enG))VKLZQigKL4p)F1LoL&@Ktl zf43?+TUV>qU!6`zPo+}N6olTpMsm4asZb~!4Ix8o*$N3=a-S6x9f74tu)Pd#%KBiD%&9~0>Oj}&&_*O=hA8`{R%u8k&F(ut+vv}E_U53 zn+?XybI<0)c1(pgvBtJxMLBVL!^)g6cPevSwcEDzs2a4TcO(gJ>HQO60CW7xZS?XO RmH+?%07*qoM6N<$0fHb~Kmq^& literal 1503 zcmeAS@N?(olHy`uVBq!ia0vp^iXhCv1|-9u9Lfh$k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+nA0*tB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPA){ffi_eM3D1{oGuTzrd=COM+4n&cLd=IHa;5RX-@T zIKQ+g85kdF$}r8qu)}W=NFmTQR{lkqz(`5Vami0E%}vcK@pQ3O0?O#6WTsfTS-KgT z8M&ERni^S}Sr{5x8aWxb85q<*uu%ez|sJy)78Y$)!f|C z(#gQU$<*1*$k7F+*E6rUBrz{J6=rWH&|Xs~BO@nc3nRRGt(=Qe6HD@oLh|!-U@0IV zBfliSI3vG6!8zDe!8b8EGY`ZEMGwTcE~!PCWvMA{Mftf3;PAD|#A3gjBO!l7^rny# zX8J(K=z|gmQeuG#0aGA|2~YY!4m|Uu<^gj|5io0~wMR;6o{&?SK%V&)OXWIq0vliWW zb&fUj&i{Qr0W4avW`UV5`#S1hY%do5@FE*&DsPK)y0uT9C>+|zcC_{4 zhxxZox=cQF+JsBoeZj+}} zE;3TnbGrVuA>)#>+9aj)AAkQXjnLWl`Evckf(mN^ju%a8>qPuaRF=CbP4u|a#u(J( zv&4dbOK!`ySz2!U0j^fR(9pe{Y|XFDte;B#3iL92DtuY5{+#?l z8J{J+HII08cG;MO@67l$?Vjp^b>3`z2Oj2kzBAgPv7vE^>8rf!vgrv2qssq;Hu5$v zw2`{;sBS_qYg(B0^+lz8d39&EzUZ91YR;9@p*#H_JlkTjf%Ds1|NQGMicwN89!=TM t^j!3o-NzmEkNV1wcr#nB^{?SDV6c3+#6ht`tr}G1db;|#taD0e0suOkCJX=o diff --git a/TMessagesProj/src/main/res/drawable-ldpi/photopause.png b/TMessagesProj/src/main/res/drawable-ldpi/photopause.png new file mode 100644 index 0000000000000000000000000000000000000000..1f95c38a727198734de431c23a4021a62f3412b7 GIT binary patch literal 578 zcmV-I0=@l-P)JPgmbK1H2#g2{7lFE{Xi(Pz4Q@FLy$Ij)M)52g?fMT<{D^pbXkk7+M1b z5NH2W9bAIipoT`l4%lMR>IM|SPp5|?T?S2oeX!1=SCZD?189XYB+MLuMW#=)^k>UK zQ$a&xU{A9dsY$Q`?){5BXlPf{Yw9&q)Aahh?d;!8IW~Od=(qnEa%e}HQbBr=hBoQc zHKjNmyq=+LW?p%D_=&qIr83fW-6QX0b)4g{&-zGQNii`)S%tevr-X+rSDhWrN(n;? z78y!#I-G3LJogn>HfWqP%fzYdv_;>-(7Q#3nw$!9TlC5)9oV8LVW>jsz_f&iio7xo zDQ6j-9dIJI{j~)%RPvV}Wy(#aR3{Ifp*Dp$Q!2_r-(Tc6D5ozC*~~4t>XtfcRB#XL z!WFsyqE`%RQzTiZ+@yQmoPp1N$+blbY!%FCGV=mX!AIC^FHGH0tWIiZHk^06)Wg)$ z8Om%?v}43>st($Y36?2?G_2$a9BIQUs2C-cG|gJ4mR_AM?Fv(D>HP{Y04P^n3Dh_| QHvj+t07*qoM6N<$f*1(@DgXcg literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-ldpi/playvideo.png b/TMessagesProj/src/main/res/drawable-ldpi/playvideo.png index 8521b0d7db0ffa88e49acd7db033fa3d9ca9860f..d03cb384ef608e267132dc00c679591d05172614 100644 GIT binary patch delta 770 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 literal 2037 zcmaJ?YgAKL7LL3G6sHu6k`%cl#CCwZNkT#ZLqY&0fIJFRL1J=&0LhKXMG^#5EJIP$ zz|gUxyi^#9$U>bGK@>_01_l*nm@eee%Dcsaf{IKP=0?T#N9kSb-gEX@-}mkB?7i2z zc_Bf5R+eZ>6bfY(;Li_5R>1I@n;~CSdiqmjv4ef1;4mm2P7^6X6juW61%UvWC;C2wJb%hVyiu|uXWkT-f&F9 z0m z`(Tl5N=ZCBlrMOj3yD0ji7>2SlSpZ4X~Z-d5mF|QC@dDsph2Y)5ClP`k;5W2L9W8B zDDXj*SSeM&Qb-OM6h(WXRM-=XIDK;knc|(ST=lk0NWn;Ik%B}ak_}f{0SbkG4wcE? zp;d4w_?zE96jp_66d)-SR6(gqG19nroFSEh%~OIR7*d8qP|8XbLlPkvQYAtPfEPvw zgd(w2Zirvwg+g|KTm_5dVlaU3iA5BMQmKSZccV~z+-YPgL%^a?eBHPL7M0IrP$(>} zFO@+PtZ?~|I8_G9;T5jrH!fvWu3;2p3M4ZhR7&@Q5`hwu0k5yjmagiBisW6*%Nwp_ zRWDS*s$3FchGb~$?;5>wgiMcN`)+KJ;N9SZa%9?-$XHj@&gf7m6KMdS8?Js(dumvsvFk9Cc3BNlla)A%o_=0 zFVmN8zd9X%24?2_fwd1F3~Ae;t`F>%+c$xgzwqCvS{r$%8ed!`Ay!hp@ z{(Cb8uD*T_+L#OJ|BYuKj>k&! zm++P26;q$5WOs<^%RGg(Q?YfV$C|ATm7PjG&3=w+=_JSsq_pC7bnlDF7SiGl@mQ50 zR&Mrl;Q`#kg%hGnl97zR=0&crhY#3hAmky#G3kb_h?U1hVvJ!epKNrr1_g(*k$xsd||siH~LC_ z)QR`!Utu3JuHl%RY3)K!)i07e{#lVD9{|y_^LBeMcZM>j*A(e&G4Zma%S$}PevS~&aI6r;+4*5C*7Z%o59rM zjLW7xt;TaUEKWO9MDu;dVy5%UbDfI5{foM& zJ8THLyBoX_Qc}M&wM`S#S>j*g%G}^)ZA2w5uqxK;(Af@W%d9<2|6Od0DQw24UBFZq ziA;;W9=w&5oz;ZK&GN7A`ntupU829+_s_QH=!a32B9D&Yk8hx>g6cPmZY@VuG+w)T zFfta$`LQUx|EL8~lRv}ZMhLg_^qDwEr_nDKjk+=#AB3On`kB~Nm#2jir%uYQg`|Aa z67sBNK~qy!(7X-D5iMIq7zch59Ul>T+SzVLpP$k3r!PsZs2sZi^J9e4GQ*EJz&D6r I=M$Ixe{PvU%m4rY diff --git a/TMessagesProj/src/main/res/drawable-mdpi/doc_green.png b/TMessagesProj/src/main/res/drawable-mdpi/doc_green.png index 91549a4dd7202f027a0318aaeda6de7b2694b4b4..3636a40ca6ce0edd8f324543cbc92795dc9f16fd 100644 GIT binary patch delta 778 zcmV+l1NHov52FSliBL{Q4GJ0x0000DNk~Le0000m0000m2nGNE09OL}hmj#Ce*(ox zL_t(|+U%KIh)q!(#^+3KNeba*Fd`ld@hHk*Tv9Z}gCw`fi@`Kf7%wxC;laH`%3YqQ z$%9*JqR9hMLg8T^luJ=FQj^Qf@muw!(`q|sU(VTkpIWPa{m{%W4*8rHYIH!SNs(T`jzhnOqizBf26}!YN0YI z1Ge}r(C_o!tMDEs!n`C55!*jd(O4h>J#hX zhE>jM#VK*tKtA!OCB6?DU^=wxxhG+;Ro2f~hfz9PA@Pk8Z-&YX@D5tk*2hAPRb;i| zr;;16#9uBT{=U_0hw1lkf2-IPiqA`Gz(ah4Pw^)Im?pRG+_`}=Yt6u1o2H0Z}RUduS#nqGx9uyWf_;u~yVDxC0?VdhTmYePYql1X2KgGVeyA{mhZjDx%cDkiqh#xWRyM|i} zsU}ttHoy#h6TF0r+BWf>qSiph{mtqOI0MdrGvExAbNVa501HV#25+_?YybcN07*qo IM6N<$f=;V$n*aa+ literal 1944 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 aBEcZCyPN6YmlYzQGRM=^&t;ucLK6VbtDgA) diff --git a/TMessagesProj/src/main/res/drawable-mdpi/doccancel_g.png b/TMessagesProj/src/main/res/drawable-mdpi/doccancel_g.png index 371d6a4c71f2c69d4e145c52f486501b84a23015..d33f5d0bd1304b930ecd73fa33f00d1b224f21f5 100644 GIT binary patch delta 378 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 literal 1964 zcmbVNeNG(-lrh?L9S6&7rFY!?}39r>sr zOfycHn4XaqDkvmHCa5bARP+o5b@C-C_>nk90k&gScM8@Yo;s&{&b{yZJn!@SJs&bjnhtr~!L)o3Q3 zgrmxW+%tFtjpn>wm8>8YvR4s|P_s~n4a=a`QfL}2BGRBmv22_KGVn~5M#vm%KFI`B zN+I*LP#GxGitsE|+(sQP-z=K#2hs)>lg8>+XKsE@oAvgr$BODk3L16k} zQr>jR^+=LfGVP0!gv>0G)FNzletteHpTi<_nQTZP5I8tsIE1nY(HCe))DWW4zc|An z#`Ty^r6pB_25>N<8AKi_WKxknPC>1e$(|5v^wWi+O2#&zS~kQ2*=n^TuSeE;G70}X zjHg=blMA#sI|=OPD`FE;nc3YsKQS^nyQSv%SI3VgnBN+r3D>p1kgDF4 zPe10tHfQ=O=+;8kc&aJz_LumsgrJd=`oj8CYom74)}3)_FyNo;=}o`&opIgS-S+C( z687db)#aNL5Luni?zP2(b2lsw`kYF33jeP^vGam7U1yTXYS z+%j}wVUGz?*3F5!-#cr8d2sk{XJTzH=1kT?39iQQi?b@-Y;BvD$X|z}%6FJ;N1p4- zlsm<94XRg*>wfUVf2n_M%E)QjKu3(<5b}y!u+>YCj<{cL;2kOX zY2=vLbl>6$58mtHi3l(Cc^ZSuklkaxJ5OlA})@_YL{#z2FuvW!>DNy^^ZiDG&DZL!DN%mB)BFXEzz~ z;eDNc^tEtddBOPkR#SFPd2paPBQnDM_X>64mw#{?x2TVHwSN9!vaAoj+2Q2n>}omu zhJ<`+64WNf&h9MDo$t9ka#eL?ZqUB#*T(YQ(%PrW@lkEZ5^`c!!QED_^`5f8RJH^Q zUuK%)_x-AayQ@BXGoFs!ihYR18H$t@4U4{Z3;)5qEA3okMDD*smEH$qn*RS&x}c~ zo5=ymoKyD#nX~N`@s?r&nzui~=tjE}(e{1Td zi89y98>a<_tqX2wt7M7;i|*TgVYDhWz#(7bHdQSyr%^>?-& zb<{Sc)0*~$T~4%y;xcP|O5qNpux(y#TlbVO?DZYq+;hJTxLd}RcJ0BBj1u*yzmAk$ zc&4XwU&kT4hBW#Y!k y0PZV!7ckUnx97Ygc}rm4usvLL?tI&y%S|-d7N5qk8tE*@|5F;1AU?b@z349luoPJU diff --git a/TMessagesProj/src/main/res/drawable-mdpi/docload_g.png b/TMessagesProj/src/main/res/drawable-mdpi/docload_g.png index 80620158bdf2b58151580d1f79737436fa631baa..bd998016d25ee3c5b3a58d50fbcff15fb33633c1 100644 GIT binary patch delta 1206 zcmV;n1WEg`56cN5iBL{Q4GJ0x0000DNk~Le0000m0000m2nGNE09OL}hmj#Ce*|qw zL_t(|+SFQ0NK{c6J~LSor9@d#K@eDGi|k<;*&bdJ)xBRH%JF^Bp`+qt48|qjNv_xcAQEp6@&F^Pl4? zY1pT1zyvT0Tm;Spr-9?aQT+Y~fA|r61HJ&8zy|Px)r8|L{C6Cf4{ikKgRXvl8xM{J zQ^0I~)(y6R7r<)p^I#d61nvckj2sr!g7?98=JY4#yyEYYSTd>L5-=A`Cy#-ZUJ;)SFsdV@-rWJ1UwD?4fQ3VU^>_gf0k1GWiW#R zY9kP@_@7$7V=h?3cb77)S#}wa+Lhve>2%ZO* zg7qqTsAv1|vNWzxLqrC)fgW%eSPpImf2-)Di|wMEX?v(8ECV^<8Q$l!#~ExCF>OUH zIiVUzWp&Xx?^QzwuTc``f2pls1H-|Ktbg7i%K2a=q1(hoYV6a%PB0C82o|W=K>;pW$Ye3F zjEj*-XO)AEE;eS-oaN@USaC7p6g2Ug?&ca+aV6yxyyP`S3?%d6wSx@2(hDsyFp&=* z9ArRiohSwp`0&j^2DH`$w{j-pdHo{>zVji`K?ZcK`7Q?D^I?L642=tlg6U#_;8GhZpN zF-qbEI*uxu-?;Z9Zdh-^+mPj2z+peq+873mCz$kKm{> zc5wo`P1zY~Wj|XHLk23SsWot{3N#?wI_o)Il~und2E=>VJIbVUg9_Ms3N~EKqrf{9} zMbx6gH6W19g|$YTxXXS$T9CQaJysnbCx_(&xg7`+i%d6qr<>pbq1dFR!0n{Z*}w8|%rie(IrWwG9-s-ELE`b>pS^&Gcp=PIzl2q;91e*z2uI8FU< UXghtB3;+NC07*qoM6N<$f@Ih$vj6}9 literal 1969 zcmbVNdsGuw8V~hN4Ja*C#BJlm1h<7uW)kv}s5BuMn*c(zv9f_78DJnY6Ous^&=eG3 zNRd+!P^sE-L^!evQf(0*kru_eh!(6=9<_8Su2s>RLS3l46BWCEc)I6w&Y8L2z4!b5 zzW14JvC&aX@44O#27{?yri`Q45YIb(D*b)E;5{#T38W(RR6LnNWg}LU5n&>eQI;A< zQqedRF*!0XqTvk2q!di2r}SEl%t+!q#G}Kr;}#mtV1zHRTM%OgO0kmBRE&@V!_8*_ z7G{zI?}lmlT8jcr!Dk_P)IBjz%o9c z_3Qy?YgSW=EKaFS}6zU8=eU> z$@l^ZAA-a}z8L0AiWEkuq_9#< zi_(ZlSR_zQVAX_;LI@)|VHczAKEpzPh?Oar#w%iRiajGEoxF(Nu2d0zcTCv_W8p97xz=F>Cfa0q@4jh&GA3YGI2zAphtY( z`t;`c@Sp@eF;;psj#Mtd=!yGYt&GswZ*=X>R8}JMF6{5$D>)|F{KQ#W9KWL{D|>jX z|6c!ZzvkRKojdGUJlZ_;NPc!`^hfuZ=EDgUzTPW1v9r9FwvLB;;}M6ua??9bW^6Vy z?QQdG7^1hcVx1et3TwT8IE~*56V85lf8k)a+ag`StA+YI4V{MGPg27ydHcXY-@n6W z7ESBhSYG}$Gi1`J;$25*Qm6atJ=)-1_rGiU$Mt0JKy=>GLzDEUelFa1BW39Bm6*ZH z<5$=%LlHq&{Feq-a#wvAO-7J27ERd|fn$08JxC&2*|`Z`_1(JMs`#YchpS?F?gXdY z9eMEEn^za=Iv`VB=2GA8DFGd~o2<<96r;ZZ#rHR5_n)*Q`@A3sLcG<-waJ0Z zps&m2yqwtDb~CKA^AjJ#$eN;NXG-)>hN{+2OE!(>7wvj!UCXjpPN%=|OEuROQ)2d8%ML&eJ#tiScZ|$Q2M&m86BA&V z7hJu&x@7v@Taxf|C%zdRC~@BY*W?Fn(g1a@zT4F0dMIlw-;;OAtACbTIF@Cu@afZB z2JRCJMl{!rude7NfMX>~nhHYULh1SkJ|7E8dnG^ScP~<2(6%(&rd{I@wxNtRuJBau z{+W9lt_BC_i`lO=o!tAu7Z?{gNc47G3c7z!1thgrIp0d$f%?s@&+Z~>HFeDT#s|la zZ)}O*;U(Yar4Kafr!ic`Up9lQrx-SjER3o1i|KiM?&8Uc1IYPdt}B}J)s~(3wGP!zR0Wa=v1x#B<2l|sB?h@z3TfOQkg8TRluc?f*8vjyx&PAQ)C#sH&Rvvjf HX~Ta3K#LI) diff --git a/TMessagesProj/src/main/res/drawable-mdpi/docpause_b.png b/TMessagesProj/src/main/res/drawable-mdpi/docpause_b.png new file mode 100644 index 0000000000000000000000000000000000000000..485fbaca904051ed73858e9adce3cb6a2ab8b4a6 GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GWu7jMAr-gY+&swHV8FwA!A<6rEeHt+ew0GhYP1qdP*H;}U|}K1$^|hox-mf);?59u?)(M(09Yu| zjZrZ%s5_uh8x!LP8nulkm6X_0D1L$>(0WgJg<+f)=z9-lPI8iVI@394-km%5-8VKS z2gSraL^rXFxS4O;z<-}1P7=Qnf5(X<#4z6`1e?IIMZ`nIgT!q){8x$?CB7vN5vSJ5 zKnby)SW7IBG=dnRSH#D}pQ;SliFHJuMB#e;CHjfah;uRxIEbftsH_EI#Jj{X83w9| zr-+4YZGq9~B?d(dAkI(n@L3Nei4TY`axrj>i#G#c;`wR}c!_7%@yZ*Gf5a_fXe9=m z#ES|ujmSOGt-rDJbUWeuIpQW}K0w?FSC zMwW;@!H3A~$m2!gN2bX#D9ny9>)XIXpakf643h7A;#?RaF&-!{N5}_V!9a1JGQ8D{+8VnmGYi6N21s zw<{KljWskhTn~jpQ<=mM4i2_fR8%-4kx10z@pRA5&ZY!R^xF9}FlRtOb93`ehxAQry5Q4$rWMgAvPbL$3@ia<3nMP@qe{dj#E)%!PNDUA= zFfh;x6X|fW5fq6BCSc%-%*l$@L_8i(U|V^4xkG_?U>XLl%1+WS;rIJ5KsdgSj*gD| ze7gwvUrlzJF*-~X9k(lZ0>wDMI(&Fjt?CcK&0wUoHf?m)|O0HF!e&v8v{Q zz)3CpvWF3{cD0)=zHYOH8!XV=kP!HlExvB^nfOce#Qy{s09DV8D8h~_Pyhe`07*qo IM6N<$g5k*A+5i9m literal 1948 zcmbVNc~BEq7++2~#1W*ZrOLV#OD#z@cXl~65Q0$xHpCjG4q1`~){tz>E+L|5z^hoV z+G^`TtyXlTg@B?hMy}MBY89_)(NT$1I#Lv9YpIGoHY&D%IPFY#X7|1Cz3=z??%9et z8EGLwF9rbs5TckVQ!#6t=MC^@zLQri@M4yUbgG8VBJ=2C%z^__J(-Jx3L}<}t8h%e zWbsKn0RVjR2(^aRDAQ3LX=Gy_9k$JAX3zkTFx_UxbOxLTbMbt_ln4ztTOg3oCqnat zN?2)5!3&6)B^ErZBtxw$G3XFIG(8DSu%Qfr5vMWGW-K&Os4WqC%!@L6&oKuAAFI%Y zMCgfA8s!`?g|y(HkPWkRum}c4TsD_45R1ieAP?rk9GJ)9@>pCk%IBdl3_g7z#+pT+ zhpJ@qr?wa=5h|c*Gs@u<7Z`&X!OMOSev3%_}^|kSDR8V zG2WYlGiB`xGA?AjyC-kTsk#j{n zxd;*R5Rrt-MR>`uoX_P+Qlxx2S1cLfcpg>&OXVSvb-Ga|%eBqzXtgn35#~m6(n&d1Oy{ zoJ6l^=m@x_YL!>WcOJ&-Y8S-s%+#J z7c~$1wN*CmMyMaIQ3E|lDeA@c9ba~~JaZ*$)bhh#H+&uT@vWhQ8}Fah^AtkR5qfW0 zr`OSPzf*>BZe%ciFpg!O+N1Szx4Yj)Zv-W21AhuT`wI!6r%+df_X1Z{T28AMkfRI5 zmffAa#nBt)-_4T^$ILie^$=U*+R$GXd13Tx(}LT*Z(C|wGutxN3E{JEYS{MW^5FIF zG<`E^cR$cDn`P#HzAk?GR-b#U7;W668_^jn)z$vDAE{d}rQIt#xHa(3HlJqsg|>oe z_Sl^1qdQMdoR?wm*zBz%%^j_+54z)C^X}T$lwvgAebCX7@nhdHr}LXTR_A=5hK0L! zC>NCYI=(Y};&7~p4M>(741G(5-;E9lNh}{#I<`V~GgjEKI~)~@iz%9>k&wEjL|N2zMMTko{rmGy5Bx>}L(3df zUS%JJ*QEAfP|LYG_Pa04n0M^DsqjtPS9R4d+7^BJ{ZGCw*QqJnXTEHm-xU>|Enie` zda$fHXjA+5C%&$AI2=bB8q^AEM`{ARc11a*ajhf3GrdDYLxg|pQv6Kyflp7it-JJb zLxbRx#>OjKD=VA0NlDFn$JrEMyl6E#YscZ*+S=rPpT54n;Ap|VQNg$8m)#l&si`}c zsg9lNv*w)C_YY}OLiL5q7cWvR_4V~CWAB#alwUPt{8t*@tJ5r&`~KYScY&(Taek1# z;)|Q+hMF4Vth>Shkd5B)jR zl`h7#?!dSD`=#19y-r7t6$RBr^^{a#8HeIc!0%oyvo1YyUvA!{9ur+KVXw3L+Zt@a zaS?DQ+g^!&njKGfOwE4d{f&XvFm2kctFw`t8TZLUrC&yc#_oqcT(Z9E$F*73H1~i$ zms>T_x;A~x#aSW8w}=!c<5S~HvkLsDTkQ)~5BFTvaaK)s4{dS|3J%&sZ$r!7i)Ii| z+$E7j=I;uxFVKwdZtKohReS|lcmB|wzTutiuXI4?*-)@o`p%Wkk2*gtTs)lina%#W f-N3JL+}aKJ0FIffRZP1d@cb_osTs1`WNrChQy2NY diff --git a/TMessagesProj/src/main/res/drawable-mdpi/photogif.png b/TMessagesProj/src/main/res/drawable-mdpi/photogif.png old mode 100755 new mode 100644 index d91f0d319304df54d9a1e89bb8c4d1152f118e96..1241d8f5a47df25382153a4d4af07cac295d8dd3 GIT binary patch delta 1135 zcmV-#1d#ib4}}RKiBL{Q4GJ0x0000DNk~Le0000m0000m2nGNE09OL}hmj#Ce*`B< zL_t(|+T>bINE<;E-Wa3O#MagnOlcdXKWe3ELMhm2tKh{$6{R`!5J^uti=IRza zyhTI2M-!lU8I*aI#CSAYk63aA7c$WRdi0iXl; zEz^zCEFM+|G!n-Y3JRc>2ngmP0LOVZZ8i}SXxlyDFXHU11v~;i%Wzs|J<2Lb&P&NXtk}+RQi3f?E@FvHLA_hUv^EgfBf)ZkzG+htqNpuw}6eLz` zGW9??2~uK53$gW#fF~jyI!r_9X|e!J%yd-YKuc^s7N9w&V8s^%Qm@y$y1cxM;hk!0e{0jK)#}>u@$puj zPB)+K8R2mF>(tcLJW~&_90Zjp;0l`-y}iASXuQMWm@^m*ZrX6!a5|m64Gj%A#ibPx zjYfA9J(45h0_1F3Q~~fvHy(k*#$vHdE0xMJ0UcS60!sOM8Vd*H3#B=y%;*zlvsp_& z*VNRskf9gVOwKHke@Lt>|NQ|9i00A@8jYqxuh%ChfeT!mm;<84WVyy!06HTu{^pjJ zmRcFa+I}o$KisUn3#xSY{2Un9|RPzjRJ5if5zD4Ll^@faCwJ@hO`QW z;&|S-*=%llK7{!ZMCwI6CeGpCe!oA$gYjtddctTk@LGXoqgW@hCDsF;0!*jZ=nEPY zuwOvNqphoS0az?@7mxrqvH4V0;vK2Eh#h;x)-#1Iyl@D-C2|2y;1{O4P<(|$r72~L z0DfX4l}Z3^f9t#^37*&xCAOW~dSa?h?@&iOBMp>z%Ik;3_|4=CsrCm##LMrBM8Mlr zu}YdD(&3ipopbC7eDiOBA5z^Q&BAHE5)ndgc;Kw)$dn~yvrCET_9x&?idNRnGjPrE z3QJ9yZj@&Ez#S6({sM2XXvZZ*z>V%%>S%W|Be;z1MT^wYj(t8pHE;ocuxa>Te(b>n z+`Fo#PCmD}OazwD91;x-QzxI>Y-Br3(&3)~0{}x_KGJU&-g5u|002ovPDHLkV1nm^ B1_}TG literal 1940 zcmbVNdsI_(9Nz$kK?@&Cc^F)#sMQ|#Zey>QI5vhT0~#ZzrEF{$7<0RGyTDLWo<1^B zTcJp)3DHBFB8KykG6hX6nSiE1JgltT1QO)TPFi;=)*l`_r+d!5zu))w`+h#(_qm%= zlM{#mp#eA?j+nSWEW=ic_nk<E|< zakLba8bxr9cEKtWoVF@iu3n{6^EBkxc|eSXj}ho$R0UY{D-347ML>SY%g6TKV>%gl zsDkPQ41N5)=nA?y*9yyi?9~nju;NG;AfdT+^O{E zm22Eo*77TzFLM##yLCDp zefa!b?%amj*jn$M50YhuCKS- zzu|q9e4_0aoqK2~!gcG`(*Ev9%I;r;xw*NDm~*c7-_Y6J-_9Nw%a>eIx?C=EuN@gbDGr2QwkPUm{b9T`apsHpLDyY6W1USLw8D&73b;HfjhFgZPn_e)iJwE zw?}LeS2hojr@at!$TNDV)1LKfdu`HlM#{8B^^}Xh10y3N8+wn_)Tr%6!lR|7gP(R@ ztxC%3&i(4}pHOdb#+y@mKW=HKGpXo;_MV=e*ETwGtG}yT9PkIRnDa^F;NW1d>q1pk z$hwr2low-b1~et>%rkb#LM(yBrx)mnQ$?+}^Mj(S7v#VsyZ@`jO-)TjZ3D(@r4Hr9 zQ_b(SHtk7bZMDqh>~RVeK9*)@UWfnj8{lECWnaj=h_z+-msS)`+`ZC=9}?O%FV7likhhXi};SrV|nCm{|$ot13{e0`oOL>{8+k; zAiF_w>8T6NSs`bBAE|XxeV6a_{qd?J?*nC@^}e)9l(y^`;?pyD=bJC#pI-O*^ZEJT z*Dl{XdZk=-V_y_4Ds1yb7RU41mE>O?uT+jTZgC?&>~59qbi91m|9ao?7Gg7ZS;Al< dZ8#QB!0qahDqBwO+vxpICdMa=ZE?zyzX2Pe1y=w7 diff --git a/TMessagesProj/src/main/res/drawable-mdpi/photoload.png b/TMessagesProj/src/main/res/drawable-mdpi/photoload.png old mode 100755 new mode 100644 index b010df6195c1fc110f7f9734b41dd74854b2c37c..18b75497ec6315c9a1efbd0da29fc82d5661fc10 GIT binary patch delta 874 zcmV-w1C{)S4uc0FiBL{Q4GJ0x0000DNk~Le0000m0000m2nGNE09OL}hmj#DeXU=47Mav{3pWH5z&mgb{Lt-(ehUvf4$g33x`h#N zf(=yd7@&E6RkxbB3DR}~{KmoFvw?HqWt%INj8*a&FSm=m7@(W33|PD#e}_3PmaQ1r z&2xT>@D7?I@!FU#G!sMD99$;tV3@V}JB`2;XIHOcgmXpNYy?7_q`Z!4*7}cu3m%<1 zW>YC)G(a1(GeR9qu;!M5)3TFQDwP_q*Xy%H`YhSN5NqCKKsB@s1YO*u$pmQ*X?&9M zDQJK+k7;}iR26$QKEtYte^D~9OLYT5g$)GBKtN#w0ZpilH8N0B*g#Da5~^bZ#7{Et zQDFnil+7-J=j}czolZ~2VzE|I42Q$pqtWO-`dliN-d3yCFU@O(LZO^YCi4;u)!C;MG{$rq+{Lb^3>BbVg2k=&--e;>*Sh?fL^$ho>_3QI8mS z*e+Lf>d-85q#qgJNYFojAAHvC2Yw4d^PWw(-SD7Qajx4g!Ah5sx`eO51438Ub{N!7 z%Fs@{+YkK~A4q}y0{jE+@8Q0Fwg}YdzQ>!)uIOiOZxfARlZa8?W2!WP`)HfFyyR#K!A33s$E|C;Sy)04SK^WU-*D0RR9107*qoM6N<$f<*z7 Ap8x;= literal 1798 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 Rvd{j@lZ48IReZ(fzX45%=1l+q diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/doc_blue.png b/TMessagesProj/src/main/res/drawable-xhdpi/doc_blue.png index 459d5c97909840bce1d5a911e6526ef2c33fec0b..835fec45eccccc24c42677417697db1ae0a56c82 100644 GIT binary patch delta 1492 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 literal 3197 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 NJYD@<);T3K0RX&17n=Y8 literal 1536 zcmbVMeM}Q)9KOP=d^5(D;mG27WH^EL?n*!C(au0iXNkoMD4+v5?hZJ$cgOXx#l(dH zOW5WNSRo5!@gHD|n`L1^JJ4BlI*1t?^K*&{%H|kDV*FUlOxRnX&OeMxcFEoQ^?RP* z$Mbvd1AE@v(GjmjKoAsdU1!b*V{zaOlY?(f8>R-s3Mr>pD&Q+67b!AO7R^^Mu+>3U zG5HKh*VT+L1_%nRWDAR>V%vIx;vGsdV54+91b~Jh!&rr^7K6385>Hp_bhAsZd;{z;#5rioh^<=|O-u zk**~2&6Xu!U}Z$AB}pJq)a7z1UFk|*tU__UULW94sT9CM;jH5%(yic}NkIlPYZ3HBNOG4+4ty@;j%Pt8ye3>s*TrhX(k=FA!_BxOs~RJxkKDg@ z_gD`jBwyRVa*Ap>%Ni#4ot@Y?koIwRD>Z(3bf)ag_bIVy`U9g^F14mkMcwK8RE=Is zlusm0*H#{z8`k?+Z`bO!sp+r@(O2SczyI6qvG+IA@d@03>FNRRudknE&D!@SwX=D>w`%&dbUe&m^2FJO zlkMZ>EjGXJ#+rfZUfC~AdlN(Y3-Tbg$zS4Jc zR`$r9Q2&?WQ2cnvROa*@_|@}QOPNPs^tf7FUANyj`pxmt)IGn?Nk3iMR|gIL;olVd tv@$?4AW9S_OIVZ)2(={Rm-x1jC}{G#!@kR@>30MFWNS{I*_&P7@DC1QD}Vq1 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/doccancel_g.png b/TMessagesProj/src/main/res/drawable-xhdpi/doccancel_g.png index 4b1ad66d638164927c997aec820c2c239e39214e..d43a5fe19c2f331302e544b6b6a956dcd59e9411 100644 GIT binary patch literal 670 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGok|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m>fJ^978H@y}489btpmN_(x0U*CL5u!{d||8mGK)+$4O% zluM-R-Gt>D99%Dj0u8T!ex)+ea#^+edE}<>|LGHe?r8wp z%m_4?fq{jAfrEiTfPq1Qfx!Wn!~<*d$*TIs&|=wHLH%%?S1%-7lR zu&q{ddZD&-!~ReC!FHTyyY6gbNcjHgZd3Kl8j;>LN-b@t=j-p-_kI!62G^gv?`>l^ zko?n9a2Larh&sNOiD4}pw4O%0a;y&7=i0I%>uI#}g-;P)#t}BtE`198cWc|_yazjv z2l=JmzAwYreLw7b$BCUi{PUmYTL>+Cx7TFK`d1<l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8oy6KF3~uL)kgR?bDKi6!|(A^G_^uoMuGkzbNu zoRMFk;2dnK;G3A7nFr#7q6gwzm(-%nveXo}qWoM1aQIqfVzJ-Agpj`>dQ->=Gku_A z^g)RODY3wWfGH5fgeQF<2cCIS^ME;~2$(fw{9E`L7?|WeT^vIyZoRp)(d%%4MBBq> z4@5bf0(mSrn;w{2?6mAyAQHo>zL8^BNI`k&SGFULE-oQ09QWE+mj_JvA#dqCK_%C> z|EK?_x(^f8ma0@nO`0qqwKVgV;=d#X28jeFg98l04UB9v7 zH$Jtnm~wKP{u7})vXS4zwc9fHO)!0U&5m!LSrKR6dcGK4aj9TOxkl@p-&12$Q`YXd zr8o6|%Noh>$9p?GCx$-GVwuMhX}d1$LE(hv16O%s+WzR(ax;co7YKgZv%2bzK*Qz} z{+93WW*_5a-SL=@{j}xj@TIY5rRA75*e=}bC0=}Q^JyVT?&A#MhtD$I^LSs^ueU{M z_JM-8oVnq`S z<7JFwE{I_bw=Pfez``E7IOS^a(MzE}U=pIT<$Ap7z8g15WG8DX&ji<|?H*nme4DAv@> c?lbW)Xl-Pl@Lze&Q&17?>FVdQ&MBb@0KT9Z0RR91 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/docload_b.png b/TMessagesProj/src/main/res/drawable-xhdpi/docload_b.png index 7b8c18cc6ee9e943c02bb2be21d79a00d645d378..9a6d2f9afc10ca1216be04b26992de3e30384d68 100644 GIT binary patch delta 2510 zcmV;<2{HD%7}*mciBL{Q4GJ0x0000DNk~Le0001B0001B2nGNE0OFW;IFTVIe+hd@ zL_t(|+U#9vY*bYk{TK@v12q9PDlP@<2BJn>K?4|&O+=;OE+~pi+={!PXjEL-q-YcY z1*9qhu0e5$nkdBue+amvm;hoF>Q;#e6u;wq1GnGY*O|8Oy}9k&lbj##&YPKg&w20e zOTnB)OUY3bGCK>4nMKTY%(lYjf6Uf$?_bO<%#Ffz%paMnm@9;Tx|qlUhvL$P*_(MP zvn#U`vssqkZEgI}|(1JOfIf{8`f0o~=kolU$2urJNu0(?93Kv7r@Sa> zZ0?!?czTvFOD&BjgkQ+K#ZlpHM%*fKUSeraluDV<-W3Cohkn95f6nsRP4am;H9nL} z+;6gcb}aMbfHcQyz+kB|>H=z+JV6tw@nfQ-Wtj@!Q@S-y%as8aN%e786+TCvjB;u^ zD3>(NQQ;`8Ut^vhw*eP3XIr`t9$*fmri)=x2uhHRn*jTg_Z}kK?amr`gA7bS+-M~HWO4BTGNk)Wk8AaftWxI z=w`3|4nT{iRoErj6v~+l*o!$$g`x2=+-sf&jCs7H!lsFafAuy1ub1vvyTxlAh}+aP zw3}LA1JJ}iM}?uQ_A{?@AU+d~Obo59yCTSd0!xeURpw-`aYjI+S5(*}3K)M+)RLcd zQelsHZL@~19d;5;vofG1B?r(=V94%0uWQzLPc$nLBh4IV zhNir$R4xRTTm<-2O4m>r7-!y z!GvLeWV>Ryqi;c(3L6<@z~0&&#_RqeZZNcl{h0gM3>c#7svlAMtN@R?V~J>Kwy}oT z4A31%&wK4c!*lAoL>quUi*D+s`ChlsptbBOn(r{6e-G6hX2g8OpS*6NVZCUY0<`XH z8qh<1;U%wG=+K(>Fb&Yz&zoMa(6QK(4gGHbR+n^CAFlLzg^n-OH8d}T0f$h{IX>vq zuJ(F`j%rn{hvrAZ0KH!88?RMlSfQ>vdjsNy?$+s$%7RRM>vf6@x>vb93@FNQlSg=1 zqptUZe*tY(V5Qe7GH7kvCMbQ{i8mlV1KPjZ$Qor*a!oD)XihB zQ)JNlC9Q=4->JZZy-txqKisQfz}G79Ft1Z&f9RmDf503S-Ti!Mjw9J8i>mMe0bxTj zd=HJxTn@K(R@Wf(H=QjSey9$a@^)J$KIj&iiAY$ zD|Pb`IgBWV?fO%=T_P#*D{`1Fz2N0b<{t?o(K;KTCSrmM;sbrvbw%p60QBmYvm7X} zf5I@q74dDFzHb_Uf@z!aA+~bd*AWx?)zbu*#NUT%ZjTAA7n=rDTC$-Masw6hFu^79 z$x=I8Dw@}r9lb!^be==?=en5Sn)o&?=bKd{(*Sdu-V-T(%A)HgxF~)%(K3atK?Yz3 z?;GmN{T*vb)@Fi>;@dP_OvZNkdPM9=e|3E=rB7RN(F9k;KahEi3Y(@|XC|kBGBGJyoL{eQmwn6z>RC5Lw z_Qo7RZlc0b@qx>z<{0o=(Uvk9u$hv(0-6}j>`5NkqNiwP0-FAljR64m!2D8$e_ii& z%^KILYiK#sc4LqMsH>K$utAnEk96Qc)%`xD6mS$uZ4%J zr3IoT)zyI1tE8u`Jm_@}#6#-3(vlt3$$(#&SE#UFQbu^Bmz%v**pb0 zW_exDX8vaRe6+Nt?aYvirKFyhuI z#fig!6k1Aa5nUG9E`!2^VQlmDJtbFju9GS+s(}B{&JHgenub&CaI7x2-)Sd>=|PlS z7L@H2%WtKSeJad+f8G@X%%>4^d9aK407^fXGH#$Xzlf6kS+7&fOS1}ckl<=b@FF8G z##H#OF`BVWvb*^)mpx7xU;+s*qn+oK^_JGu@dC9iKuI}gm%RI>CGXMYp07*qoM6N<$f>rL?egFUf literal 3130 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 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/docload_g.png b/TMessagesProj/src/main/res/drawable-xhdpi/docload_g.png index 52d94e79f92d67c99c4e8b658b7f67c089cdfdba..c80fb6b0d626a676b150b131fda0d2faf2a0bed8 100644 GIT binary patch delta 2572 zcmV+n3iI{67?%_wiBL{Q4GJ0x0000DNk~Le0001B0001B2nGNE0OFW;IFTVIe+jus zL_t(|+U#9>uvJwZ{&BpZ(+JH-H4JFxC=uYJzB_wIf6y7#Pa z=KEu>v+vz&ec#^e{b;#*&6g!me~eI0B*!URm7|p-$)U>Oy!S=rZsiVgtMXapCgle5 zg%A_j5>Q+YQJ$=PzjBIlf^tZme>>dyA4hn8->ZCF*`fS{@^{LvXn@F}%9+Y@DEa|8 zJqJb}Mb1;cN;B?Ou2gO>N`O*9&pb`JO1VXOqw=^M#rNR=J`>O0%(#58e+WGq`2`G9 z&QZ=+j<54?I+%ZNVxGR$$>(=F`T7W!36=6;G|P-}EJLQ$FyjpJN#(W5rOKBFivf7X z1L#&_IZOGzl>6{vEMZ)~t-M|NN}l2j$+;GU zH}8kaqicx1Ou2$@cq4!>e`JR8+$v@Oe^GvxU*do&174@RRrz3w_}$8@m=D9G8yYCS z@L7xb>|+_1ZqI#_nTFe#rU7BVnaoS)da98~d>Vsm=4&e(%1Z+k-e<&@ z80WQ~uc3`)!kADDKpy&t@?D{eto`8T|O7@~fW08Jf(@+kp4*Gqi91JT|791?Z;u zj0uA#KcPms7%-Ok-D^zvh00r``EWDS?&2V7G%jlcAo@y{{5IRURhkz_`^BEx(Mr#Y z+AjkZd-`;)X|immnl{&%FtnzBkd*-_Smv5A)PNR5?e_s%fBe{leWIR1xt0NMkaGXH z3p76FM9mXGhu!Z@*b-{kX9Mtg*^aeKqt>aggDcSP#=aVWCiaI-7={xcjXI~|QEKGk zoNC<_X$G`-T717$UKcg4325{S6Lzhn4F8s@IbsBKLH(5d9kUg&P}##VnCY3}eQG@V_`fRd+{gZ}W&sAsRyDarAW z1y*xwz;x4(@n1>yfk)JjJIq%wjvA*LaG|F#c_zSwVSr?>VSAuo!D16OFU^2MtviZe z$CtR@uo_NNj`A5W%hXl>B*|F;5xvJ+YU#GIX88=Te;r3ZkJ@F1pPB2K)&TTbOf@$x zkGf?BtK}4GzR!SDq~|arCd_V&x@Cs#)U*O|2F`uOWtmNd@SmfIUYCH(0l|8c&qfBMakpJh$u^Lu(?fl$&=>~ zjXLFqVYW;t`AX)fQ*KDqIAOq!Xh2~G?0^B!f7<48)G0UE{gSr8fWMi*Bce{Z!M@y` zFyILj__nB1ZWwE>pTQgz+x}qHQ)HgT#ao#0O3_*BzD50rdORGv6bT+ z12JJ*A592J{87?#drWA(+BKldlMT(3FwoHl6G9SSJhiijsCkds(JRbN=LJ-M?u`kd ziSN^Lxmz`I4RE*VeXk^^EQW4Eh~iJBf0h-zl4byA@czd9@$|r2lGRKIQGB0h^Z&7~Ege|eHGZ$FTw8^=~2+o`U`&3*LLKR=Ao!g?{BxcQ+ zH2~cYcJm=@Qa2`G6G9cgmD;&jB&LhUHz>bUdd}d&-k5VGOmqY)KJZEDIR?Cif7(hd z19nMyS3nooUHn9es23+vGZ)bGrFskium|Qw6LxXbwQgKwuA${^z8ljFKwY)Xgq`6D zi%0@5s_pk_la!-Ss!hzgU&{URF0k>?F;U}GyhD=vDy^WF(pv*6pOT%n^4+L&D!yl~ zyFA%ZuMGI7@>3@4B$g2o$#U}~e-rj;<=^{bK;;wi?TNWCYQ7H(sfi0{R&%$3dMD?i zIlbP5;be)=NA2Znl00SOF;5pnzYN$Zc3Ytf%xc9`<4mYEB?Ksb1?wGMt*ZVU&2?Uyiwg?1=2R(^XB7}r9SOh z*PkUyFadi@?=s=ocl6K9ss;;?mPaIcP)|4W{GayqANO~S*h)4&>>2|cbat2LZ5fD| z&$QS>+n$&5@$2{Z=bvY>e@O2^Ms8h7eu<5&j~{@-AJ4e^4x>X_-_0*wiZ%ei_6C?3 zd!46n{*aVsfuTRVbpQz8%D6tjxZA?^dZsm#EgiC4rn-xt>)FbGd49i~t?93ee|mY* zIE-;yFUi3aVVaP(Hcz=1gaH+-QXVPgV-77aM0X_<`5mb~oxD+)f6BP5XWWK+?pek( zt;+i0c`elbhm?;C$AI}p&+o65@~L}&l=7G^`jkdBQ1nrJW(Ui#%NQq%jZDM2Op^>0 z11i8Iq{(cyZ%(-flUC8Ew2gvbhw-B`j$4WUa{-^Rjn7OwPkuAwJXw;P?PZFV2E1(; zio;~2rED#t%VK;Le=}TBFku+md_67Y)tp;dtW9l}h!cVDTM%JQZiuiJJdr>uj7AY1;_+r_AVqV$FY+W8F<>j(NGI|c` z?@zGM$3b*B1w4q2sahl)bg{a(%&93&BoAkvKAL$v^7;d1|ACo1nZ-TNGGZ&sjHg+K iV1(-5A-4MdC%^zv?*B=nsOWwG0000%CLvpakP?*66a5CPI$A{-As+&Y>9VRXaI-9!ocBNF4ur-WWWUd;Yc$xvo#JwLzq|t#tvt2$YC%B zd)IdcJdI5O=`0SN$$+del6{$>94u7q>DLf~Sq=_=5i{7|5+zOP%rPNcD!p&&(E55HaC!Q$Ngv!OLbu{RhekS;C?IS9|Bga*?X z99ujVD!wtG(y17PktqU+L>nW}h6t1?5^0JuL7SQ22xtNdjl-i1zjOQ@))Z%LWn*fM zGDH!Kkw_b3D}tFJ9*sgG&8%z;QAULCSX&00LuOED-|f=HcE4dw{t=78fiyCQ2_9lH zgT8lwa{!aWWCt)=5S)t%#DPqqGuHNN<@p*do(9s7)2IZH84UT7Ukv?k>?4f-SKME* z)c+@EaIrJ+wdVM*X8C?3?!YziuhtiD{u&+{Lp(8{cr-e$-FO55azVCut3zP}Z*mm_ zTxnaIG^WRr%Srm@tTgq1OsVtOmV6_-U0bg~xB=F+<$>^YYXQCWQ(Xb=rhO+*pMK1? zA*0gx*WX(Xkj}X6q8o4DP|z7*yj9-%*@v+FJIgr>dCQ?ssupsdFMl5GcvqD_@oD~k z$8yMUn*3l#X&g|z)jNSdQmZxjQ{$hR!c|^b@7SuGYX_ELG;0G3*ybiu$&!K!c!snR^0N$m1;{1z=;4Sz;PYTLZ+T#_9=4m0;^;+a6urp-YJhuYj&6md zh-CO}@3;%ss)O^cj|g2FYs z;7pOaW5N1PWno*V_dulI`>K`ps=y(juta1gI#?=W*&nGFp&*KyOVUr+lU!@md55<{ zpbf>fAD;7{EVh#Is=FLbe0u`M@4d_{m_1J&HpqkH(X*BIN(v*}Qz<)(mU?(Lvo>pf)DTQ*AXSFD^>U)&qnrykjwTyUh`+*oEJ=%n6oeYx0vz0KCySL)qXi0C7c+D=@TWjrDu*+ z^$cxp*BS91O8gD4^{y-ZZp3L9eteCQOZ48|LEXMHZRyJqj&U^?tRfWz=VNqt;%X(A zcEx@wHXZJ;H2%8XW&y?yH2fHFOn zRQA*_Sz}>)sZ|Y_=*pCWu`ss^3<#}z<>CG7=g5ir$(r8k!BfS8cKMNwkcf$B5%Gmd z&}!fErng6x0$~H^0E^<22_^~j(|M|C6J*^ZIl3bVw9f7!MuQQ-+vBc}so>STF*U_petwt;Usp}?v`Tfth zJ?>~!h@<o&Rk*`_uO|^!H#_|HYnuT-quSk!_Le8wyZ}JP>>X_Q2 zt?s_JPTHducWHE-WEkS6TX(3ydFPbzgOGr6dSGU+-ojs?Mv$x?U!h z6Z1!3dYmPPpSm7kcP}9=utkT3#W!0u#ffFx1Q#4HTFRv^9NJQz4YX}D`(1phnAD`T zPT*{g^jj31S8K6o0iKjw%UJy((I)VuriX1LC7iU5dswNj*$2!Y0j-4y3H8(uybPnm z11g&L=>BUUBXb|XU!uHVp(#K~nWoj0a7!|Z)+{$2o6A6eS>>jMR_I`H+}(gt_`K3$20 zqz9>E2TD8A={K%u(Jc$v`HH>wpOq-QoR;j|{H}iSCmo46x8%OKRbsklW=&bX%e(ZB ziMzw81xh5?kN5^sgG7wI-u~RA4PgfPk z>mhZO+w}Gig-Gdk95RGXvFcnql4YRXAJ?trQnz5pId|}+t@>XK$Zl7Y)fC%{#sXd-V z3H#zjn-Ke(`~0__NAlj+g6g9(dDk!D}L5Z z9F3CdrPW-u96b9()pXl^yM9W(X_VXwRy3?8d9cqq@XF)P&FgnU?(#AY6o350=Z6Q0jFYS7kDKR`y8C>3(~{o>6~m8MJH5qbLye#?G-4Je8qa|H>IwdH4l@ zpH`fY4b^Z`iRkv30F|&b6y#$C?RSl^ggm%7Etz=1D_C04k_d9Y7 zH+1PN#i;{nunll}FVFqT$$&=_l1VG}NPcHd`cQNKbW|WQ_5rm9RIX=WX4p}F;M8@G^VqB{W}G?5msYU7Z%GoP zic;72^SMg3p4FMkOQvwyhG%jzFbFU(FflkVFmNz1Ffu4GFt9K*Ut4_`H*%^Sq)78&qol`;+03H}o_W%F@ literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/photocancel.png b/TMessagesProj/src/main/res/drawable-xhdpi/photocancel.png old mode 100755 new mode 100644 index a13c7ec2b1d6909bab60fc400be87821f729232e..4dc4b06be1d0f5b9cb4c53edf2580c8b521e41c9 GIT binary patch delta 2074 zcmV+#2<7*K6{!#*iBL{Q4GJ0x0000DNk~Le0001B0001B2nGNE0OFW;IFTVIe+SD+ zL_t(|+U#9jZ&XzjJ)J2CZRxZK2uc-1DASgp)Wle9@c{(2q*_e$#i$QH8K2>ikiY{! zfbislHO9mcm59Om0KqcFh$t!`AOlov><1LuNnGf*2v*C5{n?iMNTji2cMq{vG8| zqR_EG*j2=p#2VsaiN_Zu4iNt$UL{^(ql(^u3Su3xo<;Y$^u7@`;~enrD7H}jcaBJ@U-hotW~%vIiiwZt|KD+>t-TfZXy zA$ww!`C2a#w-M)v!owU6m*)|$$%>X_T>;g^H;9jk;y^F)bK;N+SHR=McZd&*;=uyq zI^y+w7jgL-fK}{U;{TjXe=%V$o6wujm5`4C>xu1>=Mmk2|Gj|?=y%fqi2s@bX#^Dj z4T8eTzV^9cKpmg?M*RDOnOb3GTnC&qU^$QZrAG6lCWM8xA0gdy`&=|H+M zD;3I#+l`hvV>@e@vjH!Q!pmy932669t_G~)Rh~h9sAny+G63J-YP6Gvt;w`bW&n1w zmKfcnVF_!RkpWocwiwN%qa{%WA&~({v;~Y_(h*>7QyPGL#zv!+W7sI-b|K>pSZ&e` zj$&baMj_sSMx&AAe`ri*K!q^*9yb7u7bG&EUYJc5Hvo<65*bjZ!qHV!R5-TB90&wd z*+_c80OTxcJP(vxTB>_`dOqB}dw0F;*WSB#@49d}{6SMwQF6L2L7rjL zrcDbEA3pqURaI4hj0pOCzQNna4GldNXEyFMdn{{8!pbar<3dprzbKKc;`psH=F z@VJcp*s)^+f2F0RgR)FWCjOp1dkzuLD=-hBg#Q!_z^$Oqst_8;GC>3J?Rnrb3|PsN zuqXr*G!frMub*Sm6)GK7t|n+EJ}~I#;YYd6muyYYP<&tn1~dt)1%S}i1Wm;UCSbq| zLgC7XbS7-svSq2J;saAK;6 zp=|<&pIG66NF)-~O#GP(K)d|E-=FxH;YaLHq|N^$tmYY7+;FjP-@XT;ofrd3WM@%b zz$6UVC^WdS8shKVx${2pG3?mlYih!b0gXcO0^CI6+Y@eASJwsESyZT^P&(53eF z_O+&M}6*z4BC=ubLZn1!xSO2T+_lIy&k|*IEp9!^6YV!h7@(Kf))msa+-V=uU|b ze<&h8aL)cD-hhZOaAWv6pU42r1DB0Hj^j@e(`hk&cj+gikK;HU`$fC~xB_k&jU2Q`hah|ml*%|UFr9P z)fv3rXqgkfB>tU`0rmuf`*)WaJ+lG=neWs6Ql`bZxQzOYrWvC@-O!WG6<|k2=n9U# zu7GJt<>Pb*(XB7Ez9PvVO>0uFaA9*o0bR!pxcf1@X6B{y3lRRDFCk)E4oafU3gJ zL>`Yf%(p!l47kQ7%qcSQ?{c(rJ)akm(Vy)O=R5F3y#+-gelLrkch4bN4f4?b>nvXd z%L{m3z-0Ra@sN=8Xj_>b3b9zbf5LOassbF6##s1MLSp%jQ)eogz-|+T^8kq7g_YAE zmHom_4;4=ds~y^6O@&90@vX3Gc^rWoV>Lq54a8=lPg{Hh7RY3t5e`=ix;a_mZhSmN z0xdEZDJuL;9^;Wpo^s<2y@*!uo@ij*$RE94#NiA_vD8oeG3vG$UIOcea5`pSCc#{k&LI4*v--0Nd#)tq>G%)c^nh07*qoM6N<$ Eg7N$2zyJUM literal 2691 zcmbVOX;c$g8chNQWETa3G7wo@kR+9aEx|Mria-VRP9~6 zCeYMqp%Ds&GGzyWp-9i2X@*$jolp$8Bb}{0fGZD^#K{#rDTMM9NMa#8Tf~cpLLr_Y zDWMBmi9+ec3B$Q^E@w5JFA))WGd4t}2u9E-)Jk6^%;Rr^ZzXZkQti}6Fq!8YN2oU&yCxG`P6UkI}FE1}QJOv;FB!EI9QwU@)I+a2P z0Q}d-5%DG!#L+`R)>mK1jN!ONE{EwPl0u;%DyT$>G@eAJ(P%Rq6bb>cAjp!$a-NbP zmO0HbfRKzY6~c0%M2w$dPYTPE=0Tx(dXvdC3KL*a$rNvYKPrpt0leAw^rThbIU3*AnK2#8>?^Yw-DP} z(3|w1R2KALf&5NOc=^MQmxo3*D>R#18^Y!R`8S<36U!VF>m$)2>G7@80S1?CQtZai z@fKHpM1PvIlI>t@pbOBJ+U7x+TaW z0$2Jm`8jok+I#cPvi!ktizRKOS5=qnv^=ekd-;hXjNJJScP{S0!)?y>nbf?5-n5!? z=h0VJ-Sd}eF4W(6D?oJ$-r4ISiZ(Tw*_(x=)}Z=0x&88t;Fl$A#$3WTwwO3ja%y?B z$B-fqrebsi*ml1wc7w}8;L6JtMQ^I1v|12-yON4MJ#eNsjN5@3`++Sg8#;ZfGp_DU zo`JS&f$OdV<*Q3{95m}))!bT>0kUV$Ev9`Hhij!Q9rPB_;1;U|9P+D=Vu_;2@F9 zr>@<-dv_^=!5DVSF(;@`xaIc`4yIPBR660Qp2kykb(8G^CQDUcU+=^28<||!mJsnK z)92g*dn3*E^ELIHDqyQw~=6z(r?Y;4?Ri|!m)ZE!!$*fup~&(EX( zS~|bh8etwB%{{QOe4#e%T$rd9Uyzq~bO=R!U5LRQjqgZV(p@-D%;DS$wo?ZTud>?_ zJN&(suzYtW7K^oBX&=J+_S|t1#X1NORH9k;}(4I-N3L z-MZpHw5UCCRpFz3cZ}4-mpfxTqH`NL9FD(whtptf$#8baa`))V?IMxrW5wCCqgyL_ zi8$fL<;ByJW(~)W^A~p;gCOGGU47JlmBG?p|Rrl%)T`Vy?)0o>4Wv zF#a!cVoEru!mK(5suwM|=py5}W%^ye)i#Wyr2d?QLGuGL4jyu7NG4x*i(a#sgiUXa zI1zqj2|fCJy|Hy^RK?3P$%NQ$S5?#xVC%5SM8!hD^B5OO2v^oYTU7)Cp=_z8*!?Gy zhBZ&kDx$WktNwu~r?+=UQfg}I;=^z~etLSkjIT<3ZFKF)QL9ynK6+lN{T7c7UL9ajThWS(DacWUW|Kkq8PAhS~ zpTNG6A}!6s;`Amf5#9STl@Iq}xraID*z2?EtF2<|QO`GPjtoKE5#H3`&w9#u`|L++ zDLv;O1kKOba_~*yp1tBq;Th`FnhoYLcC9wf&4-!{VF{Q_>Fu09cDC8smbJk1)o-4U zckP*j%l;_TGP)+vJf@H7aW4z=80M+%PDLYn^x!~XuMO~8K}+mAVGNGEK0cty`Q-d) zJnaGFVeWYKR1ZzsWaQg*oR!*o^WB5}?wPspRZ8TdYdz?`;A@gS7dEJv@A9ns1r4}e zhclY=PS&QPb~(IaTXQDL7MCAuvR#g~9%+mZs%r7Bu>_2+p2*;UlcDng!E4eUmN^ zJLeBs(rX7y0!LkpJj(kll~;wXslNI?)eG)b9;#||7rSl{f4?tE_SSjSRBPrP{SfDz z^J%oApqOhv=sr~Ky5kwYf9ju0GrPuii`>+|%>_`@ou#442Q|?%zlH38HDEO}X7|4V DZr@|o diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/photogif.png b/TMessagesProj/src/main/res/drawable-xhdpi/photogif.png old mode 100755 new mode 100644 index e6d7cd8c4785d31bc357192ae0e9f863ef95df53..067b09c221899b415dbae6e81b6fa6ae4c8c8ab2 GIT binary patch delta 2224 zcmV;h2v7It6}=H5iBL{Q4GJ0x0000DNk~Le0001B0001B2nGNE0OFW;IFTVIe+XYm zL_t(|+U#9hOcYlbKA?C3Q9u+(rK~~A0?8K_V|0fY z9o-9r%_c4D(VebK+GfNbJ1fpy6z-5<1Vp-_$-c#HVjCa;lh%x}(#7+Fkk71FGDPAT0#Jjn=H^5BX%Da_D0=li| zh@GMvMv><#A(j#2nDG$DyUX*4-J*I+qDnwAv5NQ>iw-;?eoq|ILkW1BXdy0U(Stw_}|~<2J~rZ0L0&>gEWF3 z01a}PJ^R|Lg#mf|$(Q2K?9Ajad&ae2O#_zkI)Ap*+@lFy%sw6=+<;`>+nFb|_F5g~ z@L+9RqyY#*K4E z_f=d5}_fVYZ;IM_<5<+P8do(Y3<1X zjASj9x(UNluBl%JAj;h!H4}~v?lK7O3_zl7k7mNLK?^ z%5;OONO8?5xEiole`=&U)_O8v0h9S2EdY%Z-5HS2Y^Dkx#kW7R>gUj*L+KS26=v6;cXoDKckkZq*92IL z#gepY)hfKa$L`#@GkogQsbP25Nli@+Y8>0sIR#cj(@_~_f3OEWwH!TqwDaoKtIzSXBS(&yDl03Cva+%;wSy%mC#Tia)NC`EOs7TM z!^Mji8{6C4t$|cQD$6o$fa}CuCC6nMyj_yQVc6}y0X!Tea6f(R>SIWPGlp*`kA)jaK956HnURrk zQj2?ne*rJTT?&w|*|%?BnYUxK5=3LXgaMP`z6&JFg3Z?i0tA3Io6To*+tbrCtkJ*z z8U~EBFi*f87#Mi&u7@Pr6pAfw=`0c+hXGiCBCJzU4j(>jCB9L`OifLFW$G&CAqf2q3z!!Te#%`0F;X>@dSMESgD&z_A^ zcL#=4Hvnj8XmF$ykeEAr_N>qBrhx}yoY4yd2ARq$1y)s6-E!{bR904Q#Q=>bk&*u= z)Akx%d}!XM1Y#%!OVqsDjvYHrpFe+oCq}vO83Qy;O-%)ZgM-$tuCD2JA|)jyDJ?B6 ze_c67L2YgAIRhGiwS%G)yQgENrk?EG_%@@5k7$$@OW6=oFY)TU%Q@QFZz1;wn{}r|6Y_ zZ*>m%bY#GEsaIx0AQJw9$<(w~K>Ft!e?-EH;NwiiwJ{~$z~5Z+8BhE@sf%W~t9;{X zz@*ehlj`T5I|H!#-+if%>iCm6t+eRc=-!a}sE$_W53UBF1lXiTs=?-3%fz|~kDH}V zs-c;=qd{ytSD%fz%d(f9@ZEa2hixuwz7w)O!Z7_vClXzOfHe%K)WO#sIik zn&7|`@9_jYdn4FAWO}&?InspbC%=yPTQGkd$__}qyfoxQahvdxc$$Tr_{!rNsrq(Obbav4HhjfBrSxK^&fNOqROAzfNf_MmT}EA&)atLo*;crikC=G0d}Y z381I``h4DfUCx8LRDt)0ry5yYq|+br?y@e%y7e3|;SEacK7?18u#+p^vR}xJisx;L y5^GHGI(v)@i?lhCg+n|p>Epqo?(m-g0|0tIHG;Hl?PmZ0002ov22Mn-LSTY63NVHM literal 2791 zcmbVOdpMN&9)Haw>y}+f`0P5~;WMBCnu=;$nUjB|PL}BHduFxew=*JBcCNTLRKxA=4K$v?BGaU2 zeSrw09N=G_3ZVMHoVk1uW{p5uhN5gxFdH-iZH2|*a27BO3XMXdFi14U5{)BRVF)M` z?2iSPTjR6B2)<;>AGYL@13W?~F2{24g8lSPBw3LZ--) zBQRQHAcKNXKAR_Gb2+e8MrH^%PUrxad-^qm7#@}SCoxCxN225@LyDL@BpQK2#>A|~ z^#v^u`hx#)<1f(yS|Sfb`ho&(96wZEk1(S(WqI!Y-q0#g?hV14&z2X38BOMf#>Idf zp*z_DF8_jHu~`HPo`SZ)P;Btl7`%-w8jZ)0P!uaP#@3l=MM2|i*Es%4*M($jgR-&3 zpztUh8tsB5y5Mj`JPCy&Sv%Wch~zb0caA{FWSSrk4u2KFVt1omIprx5>F z++THB|4+`4a%YgM&GBE&vUVl!z}4fQtuGh;93GG(pBTP;G)fiUrUQV|W_L1?CK{YP zJ?yO&uGP6;8=Dtdy8W8ArFq}kfWV4zU(*u}1CbFfXzER4>Rr3TRJ9MvXOrCfGE_OJ z@ywzpfO1F`TK)21s+q6xufK_14uzNp2ra2*-)%5xxNf)A&dSbi*0JmHzWCzd zkFoQoW>X#%V_)kpiOWn>^T2M4)6r2!pBHbZ!%K~Fc%?gTdC%X?#kDjy>n}{#89P5T zlDcafONkBbXJ105j3ru<@h+aprs$yHG;>Q&v z8Z4aH@H|0wjKw{K2O+cmQh3(Q#U(XBn z%c2mWG2^aeLFDEJZnN3nx261d$kC+w+~liz8RUU`ErjvZgnWY$<%iV3kuv*}UTtn6 zT&o1t!cPBqXlKnlOfvC6Z~1VwD|<0UkzsuOxLBpQ5lftR5zhEQC#_^n!5Q6)r@HP( z$IZBJMmb!ZHVwl6OJk1L4;5|wAzQh{WB!mNHTIE5d;BogNo>(Z7u|!^1uNC5RX+jF z&z}9sOtka5yQinL=o{Hb#FkHi6_)nXdJwf5Fs=IbG9)p@p3Evupzd*Hjz%UVL5m_eH!2kWcr;_q91gn)evv{4$5V zkYa_mT3%jHRr=LZ&bPhs@9ypGwNIR3U8t_EhUutrx_|j4uo!ZT3_reO$BuJKN=o-j zOG+qp`V&2;?dJM^-*+oMj=alo!;b>*(}en7@d}MlMr?75w@y!vEi2^F>2&A&xdu`b zVxhU6om4|LljP!>t1l6JSe!=m37cPT($?;b%XWh0Rn6<`6?n#qpui|fHNh#k^}rHi z&z@fgXH@Lt84TI{(9jTMYV_5srS9(T{R#(CrzR((ZDU8su5`NehVIqdH8nN1*4A-I z<<#1iZJSe}dy}r{b6j0rKR>Q?RoZmN^fxjvKJYVzDusWcMwUN3RtY6kJH*Spg<=pjmwC;I*Hb$K=Z-)_8$7 z!;of19-8bQD@P)cxLadyS2QkWE82}*cDIDve>~2DnE888Y+G;0e01mh$|~A zqo7%D-n@YyhqP+6X;j6!aCE|x{C+cA{kMWey(3eDOap3xOX6M}2 zYka4=w;=LDXl=+g>P;x-&b=nVC?zaB{OOKrNqODUa@9=G`J z#iyG$Z_b_eR*(<0R^0Ed?f0<5kf5PFXselg46MTop(%GQqKRYM9_B6dm?~sZ z)|F?}=Q6Rf^2=KY$)-)i*-AQxmP%x-fOIXxvb#_V#W8%lN8{^4Qne=IgW|Fxa`>jl zvy}igqGjiS{N%Y0X(z7ujykC5@@~!Ls%ws?esuKwn6(&~ zse3KQgLj#O&aGPfi1=~EK+;%iSXb%($uqkC{1xfEPGwI^+g@qTbrvM+Q51wqo(+N| zWNFmU8Ve67{I{uMGMNzrSGD{!`sqo?&FOO9~T2h5xEOiIMhi`ih-n diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/photoload.png b/TMessagesProj/src/main/res/drawable-xhdpi/photoload.png old mode 100755 new mode 100644 index a72fe3e145daec8f92b09c30fdef64e1f538a3fc..fb4eaec1861be10ef97183e5398a7e1e77cc01e9 GIT binary patch delta 1780 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 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/photopause.png b/TMessagesProj/src/main/res/drawable-xhdpi/photopause.png new file mode 100644 index 0000000000000000000000000000000000000000..8c6463d64312fbbbeaaa979b4188868908fe2760 GIT binary patch literal 1596 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 QujQZ60KX7Ytq&vP--iLB)Bpeg diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/doc_blue.png b/TMessagesProj/src/main/res/drawable-xxhdpi/doc_blue.png index 5c8fc8d73b477aaba2811730de7b72e86493972d..f8a4f5b75792963a45718b8e0c628e996ce0dec4 100644 GIT binary patch literal 2126 zcma);c{tSDAIHy(!K5r%$~s63u99e!2BT~v8D^C2YAj6*W8c0vWXMffE-{%(hO+gT zkeXaV{3b@UD5@!A9k~iIBiSN%y3hUn{{H=O&g;C-^Ld`n`FzfKp7*)z>f#_Pqb>sg zki|LL62#2=IgnD~dD33cD27_Boo6gD;%sb!e>54`oQVh^>)^utgUAH3|C!&Sy2%&- zq=h(J8+T}6ra1B5Nup*KuhqBj*cFdVCub-1xxuHdXAjKMJ#Yv6{G9c6sQtiRuT9DJ zAUoT{TL% z4I-D~anrq>G1*1i$n94gomR`5XtWJ@d;KMza)+wx@vY8=M))CyRqV+~K+n*Hp&a6$LOo zC55&Zt7=5~ZDtdcK(2g z>)IH_@U+fjJ&t8RGyX-Hm2ua!*QEX&z;@HBBIG9fduH_*vDr0$%)bN5DbVW2u@*Cv zl+$uilg8ZRxkDZ&%6FfFVY|~EV$x9NrxlZ|$0ru<$}G3Yji?nq`SvB2ZeF(Slqz)Y za>{ch%s`;k)0q*cyOU9^HOVWo=r;>I%2w9$KGz?k+r>>ZQY2B=npNG2IgI^tRg2tb zdo$-{7KlTys(UN}-3VGOdLDL!C{aB;>CpIcQTIY9aN3VaJjin!-o<$sA45;sg#DcE zFri-Ce}MCCF_InuN@F=?7Ej$!=(7e7Oc*7n;I0;9Cb0j^FX=9oJ-NkSp-&&WZw}Kh z7Jd?vJ&N$}H&ukkudh1FQa6JNc~scOYa80$qz1}&{IzaH_V>WjK>kdCH9dNiq5#G2 zK=AHdUeRR@%d2llkzTmp{F%LqgcT-5Tw3=f4^miojfi|HV7L`>m)D4xEv1rt3$*xb z{LHOG81bzbsA7yW=X#=390m?`AAB){5S;~vTF^F)x~}v1LZOlA?4Yhz2}z3~eNql1 znd&fpt?g)gOnzW9bNsE>ENdqWjxxto`{XoVX!r<&GyR}yiL|MFX(W_3c3t8ADv1D8 z)R_!LWN%nhjp25c(i;ORE9q6ZLg5y`R0eN=&??&>6zc$joMB8H{RJOb{EWKkCr;4dQw8iKqS)0?`UV!N&pPAwq zSxaMDI6F2&015RW@B{!yiJ!U|M=61J11=Bju38OBwo72$%2{f?k|>Z_-Q3BLqLS!X z$i9ef7!E$)oeMN=@3-D9)Kq~p&w&u=v-0lT4<4S1qh8)q!VX!T;*H9_`Y<&iaNXUM z=3M+V8Yy1p#Wuw8sN0sV1#cdP<2S)Rdbijz@HgZzfR3}&n&`EM;$V1~3L~kMs5z0P zfkd64)k!cH*5Glm^c3YW#$6f6NnWR|3GwY#dhzeR+Kr)XX<@mt4zHZwW;a+e5-dN8 zGr^`<^vI)su!hoqM?wUY?evb20Z%Ahe$e7LZ&g#L&kZ#P@T-BP5t8u z{7HZABrQ+^F9W=1^?7n{?8VhzXTKNG2Go~q`C_r*#7`_d+>jGW^V5b1Qh6bnWi2dG z-><3CG`N-^d?FFZ4Y|G&6z@p0Lcd7|>$>=F+3tD#+XMn9f%pH;# z;e>01r^>|StQMc-4pBB^3}B9NHBoh4wV`<~4X}i{Et4bfp=Y~l>PIMYm=zDZExkBK zq~@8Hw;{hK`#+jpRTRaGo(YVz8H?3n_F>uPm``xgEiX;^pT{!Us31Ro8u^EJ*`s|K zw{QJZhd5p|GTo!YMP>qPaJR-Q(LN6+m%?BmG;o9&&xqKEz|p1HAM60M5?Ew)UuB+TZUt&>#Q+ literal 5125 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 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/doc_green.png b/TMessagesProj/src/main/res/drawable-xxhdpi/doc_green.png index 8e08cbccc81911c32d54c1ec1dc97d092e8ae6b2..e8bb7431b97b1f52a29306c37378ecf7d607b9e8 100644 GIT binary patch literal 2116 zcmb7G`#;kQ7+z~J_eIF1HDr<2W$S{L=01cWNhv8y9WisO?@@|GDh!Jpv*|{{gr!_Y z$Ej??bRuD*_^ut7s4s1CqN6_j1LueL@_9bb5AXB7KRj?>qk2gdnP2B3bPNT9iw90B0|EbzSNLVfG(sGVKC(nZcg_5 z&JIi#B|P-^Gj6+}hFSSwwre>R&O^8$h4CaTFjpe7qM2d7UeDclYbU?l$juR_)~R`04}XlAP$Yn#Fx$KFT5is(73=W8@LF(aJhMI^J?3O?g$52}MDj9YQiAFgc1*Cb60N<{bSoV?z>k>izfJtl1A;X zXb)i{ygJ-w#e)>$Eot_J(+c|j+%c!MvywHZ6fL&5O7AI{()G91nTdd5?y1s--7jcZ z+{ag0^DKBvmn{`YKr%IedA%qi?&A*CvCL}!z#&8Uy> z?ew5@k^OoSuN8 z)Gg^OwU67?eGbj<%J{rn;=D2F$60Ih0TDEM{M?&OB4{&)Q3xRiCTwxX&J9nAAPtnj z6G&Okl=`%9)UE4~K6gigB}CBgz~ZKn_=aqQYxnISbRZ59?Zb5n{Clw$t&YRt$T#R7Qvz142r zFni2S>6py#Z1eh7ITyp1jOVgA7)m0z61|QPPw6}KW)-!Fm%f{ksMHg6 z${&2xJQ5MKbhUM}=%~T>vpk)wo*r;GNmM10ub8F)T?2Ae@h{@p1D%-jRHs2*fWaY0#jJ6^xiZXRBZ7VnQ zJjQzw0U3HwyxeCw~O09$eV`b7m1o`vuQO=20&N5j=!m3^sLE2 ztWU0}bw4_~-Qw_s8iPCpoi&1<1S`!S3>>O{`muQ#0GYg07C~(DzMUYQRIDqCK1GUv zEvZL&Fm-zJW|Qhnv=H<9Wz&J&3Zp|Qt#%-NFDB$cO%tIYlDo8=In#&(1G5?Ur{HCk z$vfLYdH|+O%doN{cZy3O(;jI#uE)nYFxq^QQtIzMe!BDV1oyFn^IRshvz$!hT_$EC z*9CdbpPR%hkF7fNZb~=mn}%?2KJUe%r=K8~=x<5H7PQha1^vJA>b4Y|Id2)ZOJ**X zg*Ncri+qgmRm%P`nyS@%1fw@ePT%9&ZyH2hhn(U(m;GCIiIw!os8e3Uv|IzuWqZT?|Mo4X|UdKIZsl28^%B8fDS9(q|^KtPnHh)M^kf)Fqi zks?x6Fo1x95Eq27B3#^Wcfb3`-8<*ZyzP0OUp;f?OscK5DF;Xt1ONay%q}7APe!kw zH_Pdh=TbqK#>pT;Gnb;7ky1cEU{Z*X{U5SE}7j)45Bt93H}xvc~N{|O-mA|U^9 z%Gt^mY=jHJfK?S?3MiNw46LTCsH}2PU0q!s42LPhlwfcrWw?T}x|RxD3kC!KbwN(7 zg`j=4?2#sa**aMvApS%mUQ00}fX>K`0O+ute{01uWt0 z-wH?!0TmK}CkEiK;Gc@#KDg^d1mwii|AY{X|3?-}_$y5(2~!I9#w#f+!hVMIH_*!J z|Az(#|AQtF?J@uL_x}_oI7Z+xO7<86?s^F7q;S4xf11K;8HHfHiMS9)94_eZEZX|x zh&X~j4i7eRPz76gqXMu$*MH)zthCIq1fn+56 z1Q!hcGi0rRfA{6$zv}(PMgO}ms{hJWI&ntnXJP+Wq5s}G>7Jj{f7JdJQ+A_i#E>;C=yOk%9*UW2O%6_c%eKbW%3pg0JK{>c zO!j0|;y!W?&!^occQy~Dr<*rEiA}NRqb`t1PL7_>QDf8bVPi*Vb2XDU3@FIxXS}*3d-i~ zHfRGIEwbLe=op@YuR&jUX{N^U%14lR3m-$pl2r|(SKX*2_9|^stKBv2L@q(BoV&t` z`$pnJ)?*`h8P}c~lem)3C3-G5N{DTY@2cWqJB^oWFYBc}`TB0g*&5;47~`1ZbncyF zi||A!b*D>;WyZ@|&#)~W&Kd6^^~{kja(Z-Ir<)nr#jGL=t;m7zx!5#jBuWV>*$Vj39CS!BT5Xhfq7)Z-mO40MEP2m_w^ZK>9gEnRK~KFwG*- z^I^74lGg;P(8DV1ey_8epPk{;;VJUsC8$m14d}m(}f>jMVlhe@C~q* ze)={Z@ZJz zo6dg(8gO9OtXIDkYR%3L$$wH4486gt-(`5sC|I_U;Scz_njHlo-Cc4JUHRz()yxse z-OF^>gGa#Dl)m5Z;_5~LKaFBCZcC+pn=6;JWCt9|e!y{%Y}g%ykY+$tk`3RP8hrrw zksCSYVuQnzph>i^sX^lBb`N8FeW?VuV9ZD$`>-6OarN7stsXe zDn-LiinN#;C$8F`Z7DIsC&!SelK?VH0w1~nK~+Pl$WUf*>p_n6$J{&1Q z8HOKhi1yumqp>1d?}mju!=uX^p^CCHPkST_>LMHk#xr!ErwHJriLHXP_h$%m?G!yme>lYfzJyT?%Z{C3f7 z0~(U}Ejn1-%H7TuaJZ`~-xBm`Rm*jESvqOpZIyt->q&{l_PY%8tF~mO{(HO%!%kw~ z%dF1D!%9~INlI$H$?KgdHI}8GM^{rNnRy>;n5IhJS*Hlv=J?BL7H`#M9mK?PO~)k7 zWgdL@vY09iT{XE3e43hBjN7acU$mq5$>@kl{npz%&`w!MYs}f&IOD5<;SXm#{W-lV z5y2`zXU))dLzL9znU&f=`4pigPM#wpXH8|Aw<>8t)68;AhV$uy5*LN4_e-QhL!YJ8 z`e`3`4sYr@Hhg(aJ{2EPYgTV2r_Pwqg>KSIhln9AL?usrSKMh&_`|tcs5$Pdk&zjX zdR0G|qZ|$4=hg1Y0xSC^-Y=fbHq>fX zE5yIHhnAYpGK;HS_mbd?;&i9<6z2)sCcK!?e;{lCOz7JJf=cs@sAn}eEAc@DU~PD8 z+>CM0PJ-9U<3mo#z97sasTP*8v3!R4rjeO??u%C6npnzpqVUp;O-|E{Gws8SRg>?M zl)OC@6drvVn8O)+lg>Ngy;*$ik!Po}wBG z%X6HTp1eH0CdVkVVSn>hBZIRl79yl-<8rFL+YH84Hs zf7$08^VkQFCRdt|$n`<-!*fBakHC}#IDd%6BFnP0fq#7c&) zS6H&hp=bj*qNr57u9D5aaCd1o?%Xxntb(X%?Zuf&?@ zcKaJwcfS~8FX-?+c!NpZtE{C)Ie|IrIKz898^@4f5I1%0HM8e~pf!76EgJ`(&$-f} zx?UB*L~m5#Jn6jiMnIxb(CmbuG}C#L?Z=~-O{m%)#SMy!ZwPyNz7D_>t>8NOQ98-; zG*i>v-HFzQ@kXX$+5S}SXTd*8QbhLQ(ban_9o)`gl=QybQtfn9zQ!u$ppSd{G;}?`3ePOtUJ>9j+@=CIKe`V4^bWj>HaQM|yr0&i)XoM8WGn4Cj=0qnaxc-Lt`EaAtTXB>l*|^uINVv8N zSePk>{WY~SaWQmcDv1yv)RVKbc!3HE_Bz-^Y>Y zmjfb9p^MttX~k`W% zT5_#V+Ol?{rAZT_-V%jd(!@wW<<*I6(N3`N@8i;J94j%#9^@x&H9~!I7JGV8$1i zVChOP;|IHK-gKSK4RLGDO)uEgm%O7w`0OjPLN&Z%d)b#v;()b&)K!mMzV7jN>lIRs5`E@} zkc!rdjE9ihclhn0Ot#~(&ZgY31e&Vz2d@tPXPC#8@d6xWw42zceKw1|yY+EC2m6HE z(Vq(Hgnmou%T>lTNFVf{8;>ryW$t{cJN;3a93rD6BcK*o&wxKp)**SOPtSV}*-rDi zcTRfO#O7UtsSM86@%9>9KYUw=daeIRm#@~wGm->fbpu7Wt-Wje7$P_^_!-oebRXbx z?TPr;3hkTSHGTowDsV45T){=V#{zhfNsUaCuVqo6f?NYFFe5j1r)t&3Ldzj;+HjRO z`btF??PUdEDdZWfW|p^k=L^D?MIrW=n(qg+7yw%pMSTqj>O@3DnH0o>zqA8dZJ zr}kTBQ~?jAj=&)@f33RosnH+%B6v?i51T1(Rj0E^Yq1G@6utgYa;TWKFW$P$_{+ol z2@cMK3VZHXm<3%Q$}H!@5m9r>o`JsBMYQEs>1~+EeRQZk7nwg9iduLOn;$v)z9{X> zC+L!`xHaf&#=6(|udnP!RVnBKUPLagpTVSaq5apn(eL+OSRhXCZc(Bg+jBsX!*Say z^`hH>yE6;#j9VQ`-uglw0o)qCo%+$J zW_H*gNGHy^!nie1e*fj7a?0Ot2~fsvaW_T@!NdK%aKbr*2XUi z2CG;i2mP1B<# zj93r_YWqsE_=AK#x^#Q{(Be|T2hh@d%%LFYmq3=619s}jeprcJ zO4cwmo+auoKM)hsd9G*KY5GiPT@=L(j6qkbytz+rJyWp~zob;j#%r5%w$3K^!`j3f z?ZNc|-Nwod*&^Caf!JiW4#vDO_h%8J(=&JHGWMQSskmhPK+B#a5>PmNBOhFBbNmiY z3N&ik#Df-FMz6GM+b=YUXfn|Rx=Mt){;fP*7*V|`;iki zqIgEVm*eTzFzBwiA?vJJIGbi47z@;SAy63A z^JB_2jYMYK{gj61gsP0oTijbFO;=<}-R0@64bSIVM5w2GUU_?_WWF3A&@ohL)8yNt}H2u{qsANCa$%J9QBP+VS2Gn)fK|^Xm$q`;Vs`R_}~$7o!ie z5tAlM0`NM3EY;Chh9s3VR>9yj9zwmx>1#Km*uOThLK0J7r_PCZl*OV+NiW$n_+1Js*W7x8n1jy=Fu1?0VnBY!U(nEfHh%v|lxvB? z;rKh3G(qojft~paCXQ46A|uwTjo`rB{ZZ>P2HT@MBcY)M=9Z71mG3Gx-ODbJkm>^x z*|}?ye%C}B$Ch7FX^k0Zi|Ig@Fvy?ML*(d+;q*3t@v&6}lRALLQzjq@j;{6lS;t;B mg>x3rNAmuX=WUMpya4w`xSNhR$_#)0nlm%DM%Eg7#s3e=mK6j5 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/doccancel_b.png b/TMessagesProj/src/main/res/drawable-xxhdpi/doccancel_b.png index 782b894229523dccdf8d911b5abb79fbb4b290ff..fad332f1e2e7d520928647bec3f720f19ae19d46 100644 GIT binary patch literal 831 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q4M;wBd$a>cNtU=qlmzFem6RtIr7}3C&=~uewPy@8Xo3OnDBzP^2x=fM~#fi?QwI( z8vE&8@S1i~l9cuit0y9bZ>l@%d5V$z6Wy zC)d@_eyefa_6GA?@p-RJ#9#hi+_?R*(%I)yLJq&1pQp~6yinlm14}>S-mVNGp7Wn2 zZAzovuN(*#7rLk-F>f{7ytT@+n$yKDrmDD1{N`YPS;s2it?Wf1n^OL(+nBa^ho(m_ z&&+FcxFU3Zy2<;?+w2%w0>4$9I_4VaV$-W%SmX7%>fokN3BPsDCLf=ETFn2%Ohhu<8a4=lY$r81P)F%UeMR^U}o@%*AAznK3ZL5 zv|(7={bJiKZ~upk8L=+P6*A1FmTFDx3tHDUzu=!|;=gl$CBxtD7weARTK|FJ%l=cF z*A{k{w(DMJoD%r8bY5on*7a_8?T@l+D9n2-TK9}aso~Z=&m966C!C+lxaD`nDduO< z9Sl+I=Tm2uXWr{$+Z8Ck;P0{GxVfwNe{ErR_}#mlZ_ypb(gVza?;6Y+*cZhx<_h== zUo>?&$oRDZ7&wwHjf`JA*cZKM*annc(GYfUbLZ@Xt7c!?l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|80+w{G(j&jGsViu(AmV&*~#3<%+1))(AC7z&C($Uq( z%-9X4*Cju>G&eP`1g19yq1OVZUQklVEdbi=l3J8mmYU*Ll%J~r_OewbZnv1?G!Lpb z1-DzwaO%|uIz}H9u}BdO69T3l5EGtkfgE_kPt60S_99@izICX$7noZdJY5_^DsH{G zdp7GzfJDPX6J1tE0g;2V1zMWKFSKejIR*Y<4xE1XHS3PAN->&ZOA`cN9b5FktKjvy zZUGj@3%^{0Bwm-OZTUR8_}u41?k`d2iQa(VYRM%eUL%4F>OG1ah^ z=Y3M%@jZQ!?-bk24b7A89lxI5IOE>AxJ<)2Ir6)1sEaU5gxzlUGrv8XtINue=Xml) z+lGa&gu4_aRxyg)ep{uW_JiqNwa&HVI^Iaza1mvLkhj@$zTWsJ@8BbMbalj?H^NJ_u@@=Gl@yIr(ay0sHDx~+5CdB>y3d5 z|Ds$ujZH@;aCby5J|X7pr;ygFl+ClV@kLY8XAX@`$0sOv6l&q zg>RAN>>c8p4U+ELtf(sMwimd3xZuJ~m+7xX97H-6dWe|v{NK}16Xg3XHb_C}*o8U1 zHmi2UUu01#=82Z|^OP3RFLnz&Z1BbEu!cx@5s+E%ptMaX@QOiCj!xIvx#v$iOlbt0 z67Ym4X_onRk;X-Bj9oI0XFhG)&UW-}3{a)as^>cwc}TfT_s?6otlZvtnnsqy0uMPC ze}g}{xuvSwKqmyKa4+hYC~}_oXnoJoeTgqR9{E(eu^eG3ulRg${`4ffFT95(MCK>y z9od!d;KP5^@9O3Kvv0I3N%Ht=))!bP0l+XkKA^vBO diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/doccancel_g.png b/TMessagesProj/src/main/res/drawable-xxhdpi/doccancel_g.png index cd2f08dc1fbb6794593597344013b87dcb7ad676..c31c831eb96e7e04f04d05344a70879acabcdc97 100644 GIT binary patch literal 831 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q4M;wBd$a>cNtU=qlmzFem6RtIr7}3C&=~uewPy@8Xo3OnDD|@l3#3!Ftgh`*YytX z*^Y8>DSlklA>jKr`<8|H_R_bz^6vlNb5h*mM`CK_r7f|icW87?yt1uxy8{EK0;5WU zN(0LT1|bI_2PO}o09c4+0$2zr;0YAMrG{Y=P#db6vdxEA)Zb`-|9;*Q{r&gs>i=&@ zid}x)bN~L6Wm8_id)xSp`+VuF?k|5Y9=KgN@mVl0=YqcnKkJ-58PJjTL1y_(H&+wR zw&yQ-=IvUmJnL|1|`(vdFRpx2zY5R=j$*I+rzL z`l@r={4UqXG6g!@%)h+H^Y$+e0hgPPHKoN}1wWeXJMz)+>}l20r<&hxHsP0z*Ne7M z^nZN)uJBUJCiVr20;&D#CJW{X9-Pd)V4lFi$-)bGm7CPv9i*LD{LeL5DK(`#Dz0Z< zn|1cJ3;PF#D`FRYw@#mTh&dqIMY%$Txzth(Xvos7j$hdQXC1$D-=^W8Ysu||x8fBH zzv7?Xytd=uuETAw8BVSEWp#eb!CT^s-_3u-EFy6Jqm+Fylc0m|dzF~3j1$k#G2E)P zdCK^i*M(v0!Qz?EN@s;HZp^#Fp0WSqobctZn(f{)UZ{J#vRR|tLH2{g6zc`N4;nSX z9i)#K_rH)@^q`^YfN}Q=o<#>5s*W%RmN-NoU=9p%c>Un!k+TU`eKT(=%{p*-?;Jtj z2aOyH_RI1#ru(`)t+r#!IKJv1fAPl3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|80+w{G(j&jGsViu(AmV&*~!?*%+1))(AC7z&C($Uq( z%-9X4*Cju>G&eP`1g19yq1ObbUQklVEdbi=l3J8mmYU*Ll%J~r_OewbZnqfXG!Lpb z1-Dy_aO%|uIz}H9u}BdO69T3l5EGtkfgE_kPt60S_99@iHvKlW1DIRvJY5_^DsH{G zdp7GzfJDPX6J1tE0g;2V1z6rM;0_eo9r%YiaQa=b*s_ajzevSsin(s!*tPM+HSU7v zt{hDY8Gn^Dd#vVizWwuL&gVTJCT`oDF{^Thr_s!phwj~rQ+*qLn}x~AfrEolQGunU zK|lbL!-+=@tV=|9=|A?Ick9l7{hq%jhw-8?$Md9*2G8ow^vkWgzcIolb03e%eA`qX z`NO|w+%{aFJgvIpq3@aA8T=prMk*}ZzVZBa3BPUjyKbn9FiV8plAoJ*&0JKZG)bcG z_@lQBZL9n>+7ec<1?^-#uP)^jAH5(kG3$V~^72 z2b3Hru)S8T-uia;gjfGhcUV7+(wTQ$hi~W4*fXzs`s_9xobV>ltzS-a)1e6_9dZj! z@Hu}{xb>`2$(v_q!wl1|9K$CpNnskBj!ls6(9?*MWpw=}QN&`%cl4?AA`K?zbqZ>| zizIj~n`el0Ei!n*_h^O2v80ZhCv%&p7I5B83=rvDC?fD%<6VhMpibK)2b0`#hr&fE zJigwck-6JXFTeVK{UkGueMjbKi8^QY3&hH4b{z}Q>L}FcIvQZqQ7dv*^$&Zj;uq~_ zVV)9R>=$Kx?{r5>Y|NDlvE6+{zT;)0#fywZrz^P>xQ+yx!g*B0!UtqnBa`KwO2h-dSQPbYP+ep#1(Ldcbu zS>$B%3(hwC+%-9=tsu=Qj$Z_w^E85LPDQ+tZtK%Hx5eGX!Ka|vT>ej`=CkDc20e}+ zHJ>@%`6k-&a^a1&RloLi)(5CGE8bk(BX)FZnsc~q?R}T-BvVx$-;;Hd-X7?Cw&(p1 zt>u&075ybKlOiy=so+Yc;G_slz(VjOZ1S^?+kioTXTiD9t)90TfWXt$&t;ucLK6V; C>2Cr6 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/docload_b.png b/TMessagesProj/src/main/res/drawable-xxhdpi/docload_b.png index 05cae54b709060d86eb034b3f99535f1f1e31775..a54e9deacb21b6d0878fddf438babe41c62a6243 100644 GIT binary patch delta 3766 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 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/docload_g.png b/TMessagesProj/src/main/res/drawable-xxhdpi/docload_g.png index 4b44c5ef350eec03b664c97bf7ae1706f403a824..5da89c7836de4a6d0753458ff9abcf00d7212ece 100644 GIT binary patch delta 3827 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 literal 4309 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 D8}N`? diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/docpause_b.png b/TMessagesProj/src/main/res/drawable-xxhdpi/docpause_b.png new file mode 100644 index 0000000000000000000000000000000000000000..370878820bba83fb8c34d262556dab78e989f60a GIT binary patch literal 415 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q4M;wBd$a>cNtU=qlmzFem6RtIr7}3C!NJnf0Aw*SDk=b34nP4Q3o6Cf2$FJgPyk5@2!N$n zSbze^iojBrZ>RlP`MR!cpLPG-_tT uPtI&%l}W^K2AVfuZpG#ebidl|W#VDz;^$X%o9d#<00f?{elF{r5}E)K<7Nf` literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/docpause_g.png b/TMessagesProj/src/main/res/drawable-xxhdpi/docpause_g.png new file mode 100644 index 0000000000000000000000000000000000000000..18dcd57d18aaaeedec76f690267e738016253ae1 GIT binary patch literal 406 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q4M;wBd$a>cNtU=qlmzFem6RtIr7}3Cy13p+Eojq7=Xaj)z4*}Q$iB}RVH9L literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/photocancel.png b/TMessagesProj/src/main/res/drawable-xxhdpi/photocancel.png old mode 100755 new mode 100644 index 51c602e009e794b9c5c6a300f6e51587d9ff200b..774066fe06ba5e6c4e6a8fb0b7178abc80959795 GIT binary patch delta 2860 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 a543p8gY?Q4?Y8*?WpCq1{kOGW(*FS^u;0M| diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/photogif.png b/TMessagesProj/src/main/res/drawable-xxhdpi/photogif.png old mode 100755 new mode 100644 index 71c5891221be7b89be0ddb9a77cb8457c29611fa..efc3a64d2c3d0352ee0d2edb8e82fa00d22b5247 GIT binary patch delta 3185 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 literal 3679 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 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/photoload.png b/TMessagesProj/src/main/res/drawable-xxhdpi/photoload.png old mode 100755 new mode 100644 index 4270d1c88980e14c60f5a5cc8b4ce1a3e16ada92..b720d6d37d30464e7e2161fe989d2bf68263c05b GIT binary patch delta 2511 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 literal 3310 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 diff --git a/TMessagesProj/src/main/res/values-ar/strings.xml b/TMessagesProj/src/main/res/values-ar/strings.xml index 4bed14e0..ce03f3f2 100644 --- a/TMessagesProj/src/main/res/values-ar/strings.xml +++ b/TMessagesProj/src/main/res/values-ar/strings.xml @@ -317,6 +317,7 @@ تحرير الفيديو الفيديو الأصلي تم تحرير الفيديو + Sending video... التالي diff --git a/TMessagesProj/src/main/res/values-de/strings.xml b/TMessagesProj/src/main/res/values-de/strings.xml index 280570bc..0f044aee 100644 --- a/TMessagesProj/src/main/res/values-de/strings.xml +++ b/TMessagesProj/src/main/res/values-de/strings.xml @@ -317,6 +317,7 @@ Video bearbeiten Originalvideo Bearbeitetes Video + Sending video... Weiter diff --git a/TMessagesProj/src/main/res/values-es/strings.xml b/TMessagesProj/src/main/res/values-es/strings.xml index dfac4cbe..d7e5704f 100644 --- a/TMessagesProj/src/main/res/values-es/strings.xml +++ b/TMessagesProj/src/main/res/values-es/strings.xml @@ -317,6 +317,7 @@ Editar vídeo Vídeo original Vídeo editado + Sending video... Siguiente diff --git a/TMessagesProj/src/main/res/values-it/strings.xml b/TMessagesProj/src/main/res/values-it/strings.xml index cd56303e..142129a3 100644 --- a/TMessagesProj/src/main/res/values-it/strings.xml +++ b/TMessagesProj/src/main/res/values-it/strings.xml @@ -317,6 +317,7 @@ Modifica video Video originale Video modificato + Sending video... Avanti diff --git a/TMessagesProj/src/main/res/values-nl/strings.xml b/TMessagesProj/src/main/res/values-nl/strings.xml index dabbbe08..d37ad39f 100644 --- a/TMessagesProj/src/main/res/values-nl/strings.xml +++ b/TMessagesProj/src/main/res/values-nl/strings.xml @@ -317,6 +317,7 @@ Video bewerken Originele video Bewerkte video + Sending video... Volgende diff --git a/TMessagesProj/src/main/res/values-pt-rBR/strings.xml b/TMessagesProj/src/main/res/values-pt-rBR/strings.xml index 5f5b73d3..f9cad9be 100644 --- a/TMessagesProj/src/main/res/values-pt-rBR/strings.xml +++ b/TMessagesProj/src/main/res/values-pt-rBR/strings.xml @@ -317,6 +317,7 @@ Editar Vídeo Vídeo Original Vídeo Editado + Sending video... Próximo diff --git a/TMessagesProj/src/main/res/values-pt-rPT/strings.xml b/TMessagesProj/src/main/res/values-pt-rPT/strings.xml index 73a14415..2f55edf3 100644 --- a/TMessagesProj/src/main/res/values-pt-rPT/strings.xml +++ b/TMessagesProj/src/main/res/values-pt-rPT/strings.xml @@ -317,6 +317,7 @@ Edit Video Original Video Edited Video + Sending video... Seguinte diff --git a/TMessagesProj/src/main/res/values/attrs.xml b/TMessagesProj/src/main/res/values/attrs.xml deleted file mode 100755 index ff6bf60d..00000000 --- a/TMessagesProj/src/main/res/values/attrs.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/TMessagesProj/src/main/res/values/strings.xml b/TMessagesProj/src/main/res/values/strings.xml index 8649d002..4f2ad1de 100644 --- a/TMessagesProj/src/main/res/values/strings.xml +++ b/TMessagesProj/src/main/res/values/strings.xml @@ -317,6 +317,7 @@ Edit Video Original Video Edited Video + Sending video... Next @@ -404,7 +405,7 @@ Powerful Cloud-Based Private - Welcome to the era of fast and secure messaging + The world\'s fastets messaging app.\nIt is free and secure. Telegram]]> delivers messages faster than]]>any other application Telegram]]> is free forever. No ads.]]>No subscription fees Telegram]]> keeps your messages safe]]>from hacker attacks