diff --git a/app/build.gradle b/app/build.gradle index 2cfeedd9..8ed687b9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -45,7 +45,7 @@ dependencies { } def basicVersion = '1.2' -def customVersionCode = '1024'; +def customVersionCode = '10240'; if (project.hasProperty('buildIndex')) { project.version = basicVersion + '.' + project.buildIndex diff --git a/app/src/main/java/com/extradea/framework/persistence/ContextPersistence.java b/app/src/main/java/com/extradea/framework/persistence/ContextPersistence.java index 580de80b..ea5f891b 100644 --- a/app/src/main/java/com/extradea/framework/persistence/ContextPersistence.java +++ b/app/src/main/java/com/extradea/framework/persistence/ContextPersistence.java @@ -54,10 +54,6 @@ protected OutputStream openWrite(String path) throws FileNotFoundException { @Override protected InputStream openRead(String path, boolean error) throws IOException { - if (error) { - return context.getAssets().open(path); - } else { - return context.openFileInput(path); - } + return context.openFileInput(path); } } diff --git a/app/src/main/java/com/extradea/framework/persistence/PersistenceObject.java b/app/src/main/java/com/extradea/framework/persistence/PersistenceObject.java index fcefe7b0..7a975b36 100644 --- a/app/src/main/java/com/extradea/framework/persistence/PersistenceObject.java +++ b/app/src/main/java/com/extradea/framework/persistence/PersistenceObject.java @@ -128,7 +128,6 @@ public void load() throws IOException, ClassNotFoundException { load(openRead(getClass().getName() + ".sav", false)); } catch (Exception e) { // e.printStackTrace(); - load(openRead(getClass().getName() + ".sav", true)); } afterLoad(); } diff --git a/app/src/main/java/org/telegram/android/StartActivity.java b/app/src/main/java/org/telegram/android/StartActivity.java index a27c3bd6..9f12deb2 100644 --- a/app/src/main/java/org/telegram/android/StartActivity.java +++ b/app/src/main/java/org/telegram/android/StartActivity.java @@ -119,13 +119,15 @@ private void onInitUpdated() { // Current version - definitions.add(new WhatsNewFragment.Definition(getString(R.string.whats_new_design_title), - new String[]{ - getString(R.string.whats_new_design_0), - getString(R.string.whats_new_design_1), - getString(R.string.whats_new_design_2), - getString(R.string.whats_new_design_3), - }, null)); + if (prevVersionCode < 672) { + definitions.add(new WhatsNewFragment.Definition(getString(R.string.whats_new_design_title), + new String[]{ + getString(R.string.whats_new_design_0), + getString(R.string.whats_new_design_1), + getString(R.string.whats_new_design_2), + getString(R.string.whats_new_design_3), + }, null)); + } if (prevVersionCode < 517) { definitions.add(new WhatsNewFragment.Definition(getString(R.string.whats_new_arabic_title), diff --git a/app/src/main/java/org/telegram/android/core/background/MessageSender.java b/app/src/main/java/org/telegram/android/core/background/MessageSender.java index 4c5b8223..2d7bc83e 100644 --- a/app/src/main/java/org/telegram/android/core/background/MessageSender.java +++ b/app/src/main/java/org/telegram/android/core/background/MessageSender.java @@ -3,7 +3,11 @@ import android.graphics.Bitmap; import android.graphics.Point; import android.media.MediaMetadataRetriever; +import android.media.MediaPlayer; +import android.media.ThumbnailUtils; import android.os.*; +import android.provider.MediaStore; +import com.crittercism.app.Crittercism; import org.telegram.android.StelsApplication; import org.telegram.android.core.EngineUtils; import org.telegram.android.core.files.UploadController; @@ -468,9 +472,49 @@ public void onPartUploaded(int percent, int downloadedSize) { MediaMetadataRetriever retriever = new MediaMetadataRetriever(); retriever.setDataSource(uploadingVideo.getFileName()); timeInmillisec = Long.parseLong(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)); - img = retriever.getFrameAtTime(0); - width = img.getWidth(); - height = img.getHeight(); + + if (Build.VERSION.SDK_INT < 10) { + img = ThumbnailUtils.createVideoThumbnail(uploadingVideo.getFileName(), + MediaStore.Images.Thumbnails.MINI_KIND); + + MediaPlayer mp = new MediaPlayer(); + final Object locker = new Object(); + final int[] sizes = new int[2]; + try { + mp.setDataSource(uploadingVideo.getFileName()); + mp.prepare(); + mp.setOnVideoSizeChangedListener(new MediaPlayer.OnVideoSizeChangedListener() { + @Override + public void onVideoSizeChanged(MediaPlayer mp, int width, int height) { + synchronized (locker) { + sizes[0] = width; + sizes[1] = height; + locker.notify(); + } + } + }); + + synchronized (locker) { + if (sizes[0] == 0 || sizes[1] == 1) { + locker.wait(5000); + } + } + + if (sizes[0] == 0 || sizes[1] == 1) { + throw new IOException(); + } + + width = sizes[0]; + height = sizes[1]; + } catch (Exception e) { + Crittercism.logHandledException(e); + throw new IOException(); + } + } else { + img = retriever.getFrameAtTime(0); + width = img.getWidth(); + height = img.getHeight(); + } } catch (Exception e) { Logger.t(TAG, e); break; diff --git a/app/src/main/java/org/telegram/android/fragments/ImagePreviewFragment.java b/app/src/main/java/org/telegram/android/fragments/ImagePreviewFragment.java index dafdfd0a..51e2e54f 100644 --- a/app/src/main/java/org/telegram/android/fragments/ImagePreviewFragment.java +++ b/app/src/main/java/org/telegram/android/fragments/ImagePreviewFragment.java @@ -286,6 +286,10 @@ public void onClick(View view) { DownloadListener listener = new DownloadListener() { @Override public void onStateChanged(String _key, DownloadState state, int percent) { + if (_key == null) { + return; + } + if (res.getTag() != this) { application.getDownloadManager().unregisterListener(this); return; @@ -428,12 +432,14 @@ public void onPageScrollStateChanged(int i) { } private void onImageTap() { - if (getSherlockActivity().getSupportActionBar().isShowing()) { - getSherlockActivity().getSupportActionBar().hide(); - hideView(bottomPanel); - } else { - getSherlockActivity().getSupportActionBar().show(); - showView(bottomPanel); + if (getSherlockActivity() != null && getSherlockActivity().getSupportActionBar() != null) { + if (getSherlockActivity().getSupportActionBar() != null && getSherlockActivity().getSupportActionBar().isShowing()) { + getSherlockActivity().getSupportActionBar().hide(); + hideView(bottomPanel); + } else { + getSherlockActivity().getSupportActionBar().show(); + showView(bottomPanel); + } } } diff --git a/app/src/main/java/org/telegram/android/kernel/SyncKernel.java b/app/src/main/java/org/telegram/android/kernel/SyncKernel.java index d84eaa32..a6ce4f9f 100644 --- a/app/src/main/java/org/telegram/android/kernel/SyncKernel.java +++ b/app/src/main/java/org/telegram/android/kernel/SyncKernel.java @@ -72,8 +72,10 @@ public void logIn() { public void logOut() { typingStates.clearState(); - updateProcessor.destroy(); - updateProcessor.clearData(); - updateProcessor = null; + if (updateProcessor != null) { + updateProcessor.destroy(); + updateProcessor.clearData(); + updateProcessor = null; + } } } diff --git a/app/src/main/java/org/telegram/android/kernel/compat/CompatDeserializer.java b/app/src/main/java/org/telegram/android/kernel/compat/CompatDeserializer.java index 037e95f2..26d48ff9 100644 --- a/app/src/main/java/org/telegram/android/kernel/compat/CompatDeserializer.java +++ b/app/src/main/java/org/telegram/android/kernel/compat/CompatDeserializer.java @@ -94,9 +94,12 @@ private static Object convert(Object object) { res.setPreviewHeight(video.getPreviewHeight()); res.setPreviewWidth(video.getPreviewWidth()); return res; + } else if (object == null) { + return null; + } else { + Logger.d(TAG, "Unknown java object:" + object.toString()); + return null; } - Logger.d(TAG, "Unknown java object:" + object.toString()); - return null; } public static TLObject deserialize(byte[] data) { diff --git a/app/src/main/java/org/telegram/android/media/DownloadManager.java b/app/src/main/java/org/telegram/android/media/DownloadManager.java index b5f6f5bc..6dbe6540 100644 --- a/app/src/main/java/org/telegram/android/media/DownloadManager.java +++ b/app/src/main/java/org/telegram/android/media/DownloadManager.java @@ -3,7 +3,9 @@ import android.graphics.*; import android.media.MediaScannerConnection; import android.os.*; +import android.widget.Toast; import com.extradea.framework.images.utils.ImageUtils; +import org.telegram.android.R; import org.telegram.android.StelsApplication; import org.telegram.android.core.model.media.*; import org.telegram.android.log.Logger; @@ -132,6 +134,12 @@ public synchronized void requestDownload(TLLocalPhoto photo) { if (downloadPersistence.isDownloaded(resourceKey)) return; + String fileName = getDownloadImageFile(resourceKey); + if (fileName == null) { + Toast.makeText(application, R.string.error_sd_card, Toast.LENGTH_SHORT).show(); + return; + } + final DownloadRecord record; if (records.containsKey(resourceKey)) { record = records.get(resourceKey); @@ -164,6 +172,12 @@ public synchronized void requestDownload(TLLocalVideo video) { if (downloadPersistence.isDownloaded(resourceKey)) return; + String fileName = getDownloadImageFile(resourceKey); + if (fileName == null) { + Toast.makeText(application, R.string.error_sd_card, Toast.LENGTH_SHORT).show(); + return; + } + final DownloadRecord record; if (records.containsKey(resourceKey)) { record = records.get(resourceKey); @@ -187,7 +201,7 @@ record = new DownloadRecord(); } requestDownload(resourceKey, record, - getDownloadVideoFile(resourceKey), + fileName, video.getVideoLocation()); } @@ -279,6 +293,12 @@ public void onFailed() { Logger.d(TAG, "@" + key + " = saving thumb"); FileOutputStream outputStream = null; try { + String thumbFileName = getPhotoThumbSmallFileName(key); + if (thumbFileName == null) { + Toast.makeText(application, "SD card not available", Toast.LENGTH_SHORT).show(); + updateState(key, DownloadState.FAILURE, 100, size); + return; + } outputStream = new FileOutputStream(getPhotoThumbSmallFileName(key)); thumb.compress(Bitmap.CompressFormat.JPEG, 87, outputStream); } catch (FileNotFoundException e) { @@ -367,19 +387,31 @@ public String getPhotoThumbSmallFileName(String key) { } private String getDownloadVideoFile(String key) { - return application.getExternalCacheDir().getAbsolutePath() + "/video_" + key + ".mp4"; + if (application.getExternalCacheDir() != null) { + return application.getExternalCacheDir().getAbsolutePath() + "/video_" + key + ".mp4"; + } + return null; } private String getDownloadImageFile(String key) { - return application.getExternalCacheDir().getAbsolutePath() + "/image_" + key + ".jpg"; + if (application.getExternalCacheDir() != null) { + return application.getExternalCacheDir().getAbsolutePath() + "/image_" + key + ".jpg"; + } + return null; } private String getDownloadImageThumbFile(String key) { - return application.getExternalCacheDir().getAbsolutePath() + "/image_thumb_" + key + ".jpg"; + if (application.getExternalCacheDir() != null) { + return application.getExternalCacheDir().getAbsolutePath() + "/image_thumb_" + key + ".jpg"; + } + return null; } private String getDownloadTempFile() { - return application.getExternalCacheDir().getAbsolutePath() + "/download_" + Entropy.generateRandomId() + ".bin"; + if (application.getExternalCacheDir() != null) { + return application.getExternalCacheDir().getAbsolutePath() + "/download_" + Entropy.generateRandomId() + ".bin"; + } + return null; } diff --git a/app/src/main/java/org/telegram/android/views/DialogView.java b/app/src/main/java/org/telegram/android/views/DialogView.java index 006950d4..b4e98cf7 100644 --- a/app/src/main/java/org/telegram/android/views/DialogView.java +++ b/app/src/main/java/org/telegram/android/views/DialogView.java @@ -727,7 +727,7 @@ private void buildLayout() { // Group sender if (isGroup) { - String wName = senderTitle.replace("\n", " "); + String wName = senderTitle != null ? senderTitle.replace("\n", " ") : "UNKNOWN"; if (wName.length() > 100) { wName = wName.substring(100) + "..."; } diff --git a/app/src/main/res/values/common_text.xml b/app/src/main/res/values/common_text.xml index 56c54c42..15b3aa0e 100644 --- a/app/src/main/res/values/common_text.xml +++ b/app/src/main/res/values/common_text.xml @@ -1,5 +1,6 @@ + SD Card not available typing... {content} is typing... {content} are typing... diff --git a/app/src/main/res/values/ui_whats_new.xml b/app/src/main/res/values/ui_whats_new.xml index fc0c4d98..cec407b3 100644 --- a/app/src/main/res/values/ui_whats_new.xml +++ b/app/src/main/res/values/ui_whats_new.xml @@ -2,9 +2,9 @@ Design, speed and stability New blue design - Speed up photo, video and message delivery - Optimizations to "firewalled" countries - Much better stability + Faster message, photo and video delivery + Optimized for firewalled countries + Highly improved stability Added secret chats Start a secret chat from the "Write to" menu or from a contact\'s profile. diff --git a/libraries/telegram-api b/libraries/telegram-api index a1a98625..54f85dfc 160000 --- a/libraries/telegram-api +++ b/libraries/telegram-api @@ -1 +1 @@ -Subproject commit a1a986253195fb3f374f914266144182be056940 +Subproject commit 54f85dfc02761c7c907da42f06dfde63d401cfbb