Refactored issues with photo compression (#1300)

Added new ways of compression
Added photo copy button
This commit is contained in:
gdlbo
2023-05-15 21:28:45 +03:00
committed by GitHub
parent 0deafb5606
commit 594f24d640
17 changed files with 342 additions and 644 deletions
@@ -0,0 +1,93 @@
package com.vk.medianative;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.os.Build;
import android.util.Log;
import ru.vtosters.lite.utils.Preferences;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class MediaImageEncoder {
private static boolean compressBitmap(Bitmap bitmap, File file, CompressFormat format, int quality) {
try (FileOutputStream fileOutputStream = new FileOutputStream(file)) {
return bitmap.compress(format, quality, fileOutputStream);
} catch (IOException e) {
Log.e(MediaImageEncoder.class.getSimpleName(), "Bitmap compression error: " + e);
return false;
}
}
private static boolean compressBitmapJpeg(Bitmap bitmap, File file, int quality) {
return compressBitmap(bitmap, file, CompressFormat.JPEG, quality);
}
private static boolean compressBitmapLossless(Bitmap bitmap, File file) {
return compressBitmap(bitmap, file, CompressFormat.PNG, 100);
}
private static boolean compressBitmapNative(Bitmap bitmap, File file, int quality) {
if (MediaNative.isX86() || MediaNative.isAsus() || Build.VERSION.SDK_INT < 24) {
Log.e(MediaImageEncoder.class.getSimpleName(), "JPEG turbo not supported on this device!");
return compressBitmapJpeg(bitmap, file, quality);
}
byte[] jpegData = MediaNative.compressBitmapJpeg(bitmap, quality);
if (jpegData == null) {
return false;
}
try (FileOutputStream fileOutputStream = new FileOutputStream(file)) {
fileOutputStream.write(jpegData);
return true;
} catch (IOException e) {
Log.e(MediaImageEncoder.class.getSimpleName(), "JPEG compression error: " + e);
return false;
}
}
public static boolean encodePicture(Bitmap bitmap, File file, int quality) {
if (bitmap != null && !bitmap.isRecycled() && bitmap.getWidth() * bitmap.getHeight() != 0) {
switch (Preferences.getPreferences().getString("compression", "jpeg")) {
case "skip" -> {
return compressBitmapLossless(bitmap, file);
}
case "jpeg" -> {
return compressBitmapJpeg(bitmap, file, quality);
}
case "native" -> {
return compressBitmapNative(bitmap, file, quality);
}
}
}
return false;
}
public static boolean needToSkipCompression() {
return Preferences.getPreferences().getString("compression", "jpeg").equals("skip");
}
public static boolean needToCompress() {
return !needToSkipCompression();
}
public static boolean encodeJpeg(Bitmap bitmap, File file) {
return encodePicture(bitmap, file, 90);
}
public static boolean encodeJpegWithoutCompression(Bitmap bitmap, File file) {
return encodePicture(bitmap, file, 95);
}
public static boolean encodeJpeg(Bitmap bitmap, File file, int quality) {
if (bitmap != null && !bitmap.isRecycled() && bitmap.getWidth() * bitmap.getHeight() != 0) {
return needToCompress() ? compressBitmapNative(bitmap, file, quality) : compressBitmapJpeg(bitmap, file, quality);
} else {
return false;
}
}
}
+110 -46
View File
@@ -222,8 +222,10 @@ public final class R {
public static final int undel_value = 0x7f030075; // 2130903157
public static final int wallpaper_change_dialog = 0x7f030076; // 2130903158
public static final int accent_select_type = 0x7f030077; // 2130903159
public static final int theme_type_name = 0x7f030078; // 2130903160
public static final int theme_type_name_checkbox = 0x7f030079; // 2130903161
public static final int compression = 0x7f030078; // 2130903160
public static final int compression_value = 0x7f030079; // 2130903161
public static final int theme_type_name = 0x7f03007a; // 2130903162
public static final int theme_type_name_checkbox = 0x7f03007b; // 2130903163
}
public static final class attr {
@@ -4995,7 +4997,9 @@ public final class R {
public static final int $splash__8 = 0x7f080be6; // 2131233766
public static final int $splash__9 = 0x7f080be7; // 2131233767
public static final int checker_background = 0x7f080be8; // 2131233768
public static final int splash = 0x7f080be9; // 2131233769
public static final int custom_thumb_selector = 0x7f080be9; // 2131233769
public static final int custom_track_selector = 0x7f080bea; // 2131233770
public static final int splash = 0x7f080beb; // 2131233771
public static final int abc_control_background_material = 0x7f080032; // 2131230770
public static final int ic_action_close = 0x7f080322; // 2131231522
public static final int ic_camera_outline_28_new = 0x7f0803a0; // 2131231648
@@ -11054,6 +11058,8 @@ public final class R {
public static final int color_name = 0x7f0a1022; // 2131365922
public static final int color_value = 0x7f0a1023; // 2131365923
public static final int color_preview_border = 0x7f0a1024; // 2131365924
public static final int account_backup_view = 0x7f0a1025; // 2131365925
public static final int copy_image = 0x7f0a1026; // 2131365926
}
public static final class integer {
@@ -12993,6 +12999,30 @@ public final class R {
public static final int vt_changeable_foreground = 0x7f0f0044; // 2131689540
public static final int vt_launcher = 0x7f0f0045; // 2131689541
public static final int vt_party_foreground = 0x7f0f0047; // 2131689543
public static final int ic_launcher_balloon_pink = 0x7f0f0048; // 2131689544
public static final int ic_launcher_balloon_pink_background = 0x7f0f0049; // 2131689545
public static final int ic_launcher_balloon_pink_foreground = 0x7f0f004a; // 2131689546
public static final int ic_launcher_bubble_gum = 0x7f0f004b; // 2131689547
public static final int ic_launcher_bubble_gum_background = 0x7f0f004c; // 2131689548
public static final int ic_launcher_bubble_gum_foreground = 0x7f0f004d; // 2131689549
public static final int ic_launcher_comics = 0x7f0f004e; // 2131689550
public static final int ic_launcher_comics_background = 0x7f0f004f; // 2131689551
public static final int ic_launcher_comics_foreground = 0x7f0f0050; // 2131689552
public static final int ic_launcher_flowers = 0x7f0f0051; // 2131689553
public static final int ic_launcher_flowers_background = 0x7f0f0052; // 2131689554
public static final int ic_launcher_flowers_foreground = 0x7f0f0053; // 2131689555
public static final int ic_launcher_metal_dark = 0x7f0f0054; // 2131689556
public static final int ic_launcher_metal_dark_background = 0x7f0f0055; // 2131689557
public static final int ic_launcher_metal_dark_foreground = 0x7f0f0056; // 2131689558
public static final int ic_launcher_pin_blue = 0x7f0f0057; // 2131689559
public static final int ic_launcher_pin_blue_background = 0x7f0f0058; // 2131689560
public static final int ic_launcher_pin_blue_foreground = 0x7f0f0059; // 2131689561
public static final int ic_launcher_rabbit = 0x7f0f005a; // 2131689562
public static final int ic_launcher_rabbit_background = 0x7f0f005b; // 2131689563
public static final int ic_launcher_rabbit_foreground = 0x7f0f005c; // 2131689564
public static final int ic_launcher_shine = 0x7f0f005d; // 2131689565
public static final int ic_launcher_shine_background = 0x7f0f005e; // 2131689566
public static final int ic_launcher_shine_foreground = 0x7f0f005f; // 2131689567
public static final int vt_adaptive_launcher_foneground = 0x7f0f0043; // 2131689539
public static final int vt_launcher_round = 0x7f0f0046; // 2131689542
public static final int ic_logo_facebook_28 = 0x7f0f0003; // 2131689475
@@ -19547,49 +19577,82 @@ public final class R {
public static final int accent_color_summ = 0x7f12183b; // 2131892283
public static final int accent_color_title = 0x7f12183c; // 2131892284
public static final int accents = 0x7f12183d; // 2131892285
public static final int add_to_ads_stories_whitelist = 0x7f12183e; // 2131892286
public static final int amoledtheme_summ = 0x7f12183f; // 2131892287
public static final int amoledtheme_title = 0x7f121840; // 2131892288
public static final int app_open_by_default_settings = 0x7f121841; // 2131892289
public static final int audio_deleted_from_cache = 0x7f121842; // 2131892290
public static final int blockminiapps_summ = 0x7f121843; // 2131892291
public static final int blockminiapps_title = 0x7f121844; // 2131892292
public static final int businessDisabler_title = 0x7f121845; // 2131892293
public static final int by_choice = 0x7f121846; // 2131892294
public static final int calls_not_available = 0x7f121847; // 2131892295
public static final int cannot_write = 0x7f121848; // 2131892296
public static final int change_accent_color = 0x7f121849; // 2131892297
public static final int copydebuginfo_summ = 0x7f12184a; // 2131892298
public static final int copydebuginfo_title = 0x7f12184b; // 2131892299
public static final int copyownlink_summ = 0x7f12184c; // 2131892300
public static final int copyownlink_title = 0x7f12184d; // 2131892301
public static final int crash_service_name = 0x7f12184e; // 2131892302
public static final int current_theme = 0x7f12184f; // 2131892303
public static final int custom_links_warning = 0x7f121850; // 2131892304
public static final int data_updated = 0x7f121851; // 2131892305
public static final int device_info = 0x7f121852; // 2131892306
public static final int device_info_copied = 0x7f121853; // 2131892307
public static final int dialogstats = 0x7f121854; // 2131892308
public static final int downloading_update = 0x7f121855; // 2131892309
public static final int invalid_pack_link = 0x7f121856; // 2131892310
public static final int maxquality_summ = 0x7f121857; // 2131892311
public static final int maxquality_title = 0x7f121858; // 2131892312
public static final int monettheme_summ = 0x7f121859; // 2131892313
public static final int monettheme_title = 0x7f12185a; // 2131892314
public static final int newsfeed_notif_summ = 0x7f12185b; // 2131892315
public static final int newsfeed_notif_title = 0x7f12185c; // 2131892316
public static final int open_bot = 0x7f12185d; // 2131892317
public static final int promotedstickers_title = 0x7f12185e; // 2131892318
public static final int remove_from_ads_stories_whitelist = 0x7f12185f; // 2131892319
public static final int select_color = 0x7f121860; // 2131892320
public static final int select_palette = 0x7f121861; // 2131892321
public static final int sources = 0x7f121862; // 2131892322
public static final int updateverifdata_summ = 0x7f121863; // 2131892323
public static final int updateverifdata_title = 0x7f121864; // 2131892324
public static final int useOldAppVer_summ = 0x7f121865; // 2131892325
public static final int useOldAppVer_title = 0x7f121866; // 2131892326
public static final int vkx_integration_enabled_info = 0x7f121867; // 2131892327
public static final int writebar_ios_title = 0x7f121868; // 2131892328
public static final int accounts_saved_by_path = 0x7f12183e; // 2131892286
public static final int add_to_ads_stories_whitelist = 0x7f12183f; // 2131892287
public static final int amoledtheme_summ = 0x7f121840; // 2131892288
public static final int amoledtheme_title = 0x7f121841; // 2131892289
public static final int appLanguage = 0x7f121842; // 2131892290
public static final int app_open_by_default_settings = 0x7f121843; // 2131892291
public static final int applying_accent = 0x7f121844; // 2131892292
public static final int audio_deleted_from_cache = 0x7f121845; // 2131892293
public static final int blockminiapps_summ = 0x7f121846; // 2131892294
public static final int blockminiapps_title = 0x7f121847; // 2131892295
public static final int businessDisabler_title = 0x7f121848; // 2131892296
public static final int by_choice = 0x7f121849; // 2131892297
public static final int calls_not_available = 0x7f12184a; // 2131892298
public static final int cannot_write = 0x7f12184b; // 2131892299
public static final int change_accent_color = 0x7f12184c; // 2131892300
public static final int copydebuginfo_summ = 0x7f12184d; // 2131892301
public static final int copydebuginfo_title = 0x7f12184e; // 2131892302
public static final int copyownlink_summ = 0x7f12184f; // 2131892303
public static final int copyownlink_title = 0x7f121850; // 2131892304
public static final int crash_service_name = 0x7f121851; // 2131892305
public static final int currentLanguage = 0x7f121852; // 2131892306
public static final int current_theme = 0x7f121853; // 2131892307
public static final int custom_links_warning = 0x7f121854; // 2131892308
public static final int data = 0x7f121855; // 2131892309
public static final int data_updated = 0x7f121856; // 2131892310
public static final int datasettings_title = 0x7f121857; // 2131892311
public static final int device_info = 0x7f121858; // 2131892312
public static final int device_info_copied = 0x7f121859; // 2131892313
public static final int dialogstats = 0x7f12185a; // 2131892314
public static final int disable_analytics = 0x7f12185b; // 2131892315
public static final int disable_analytics_summ = 0x7f12185c; // 2131892316
public static final int downloading_update = 0x7f12185d; // 2131892317
public static final int error_applying_accent = 0x7f12185e; // 2131892318
public static final int error_no_text = 0x7f12185f; // 2131892319
public static final int error_saving_file = 0x7f121860; // 2131892320
public static final int failed_to_get_text = 0x7f121861; // 2131892321
public static final int invalid_pack_link = 0x7f121862; // 2131892322
public static final int invalidate_theme_cache_title = 0x7f121863; // 2131892323
public static final int logColors_title = 0x7f121864; // 2131892324
public static final int maxquality_summ = 0x7f121865; // 2131892325
public static final int maxquality_title = 0x7f121866; // 2131892326
public static final int monettheme_summ = 0x7f121867; // 2131892327
public static final int monettheme_title = 0x7f121868; // 2131892328
public static final int newsfeed_notif_summ = 0x7f121869; // 2131892329
public static final int newsfeed_notif_title = 0x7f12186a; // 2131892330
public static final int open_bot = 0x7f12186b; // 2131892331
public static final int promotedstickers_title = 0x7f12186c; // 2131892332
public static final int remove_encryption_key = 0x7f12186d; // 2131892333
public static final int remove_from_ads_stories_whitelist = 0x7f12186e; // 2131892334
public static final int reset_accounts = 0x7f12186f; // 2131892335
public static final int reset_all_settings = 0x7f121870; // 2131892336
public static final int restore_accounts = 0x7f121871; // 2131892337
public static final int restore_settings = 0x7f121872; // 2131892338
public static final int save_accounts = 0x7f121873; // 2131892339
public static final int save_online_data = 0x7f121874; // 2131892340
public static final int select_color = 0x7f121875; // 2131892341
public static final int select_palette = 0x7f121876; // 2131892342
public static final int sources = 0x7f121877; // 2131892343
public static final int storiesGroupsAdBlock = 0x7f121878; // 2131892344
public static final int storiesGroupsAdBlocksummary = 0x7f121879; // 2131892345
public static final int systemtheme = 0x7f12187a; // 2131892346
public static final int systemtheme_enabled = 0x7f12187b; // 2131892347
public static final int systemtheme_summ = 0x7f12187c; // 2131892348
public static final int updateverifdata_summ = 0x7f12187d; // 2131892349
public static final int updateverifdata_title = 0x7f12187e; // 2131892350
public static final int useCustomPrefsStyle_summ = 0x7f12187f; // 2131892351
public static final int useCustomPrefsStyle_title = 0x7f121880; // 2131892352
public static final int useGenius_summ = 0x7f121881; // 2131892353
public static final int useGenius_title = 0x7f121882; // 2131892354
public static final int useNewColorEngine_summ = 0x7f121883; // 2131892355
public static final int useNewColorEngine_title = 0x7f121884; // 2131892356
public static final int useOldAppVer_summ = 0x7f121885; // 2131892357
public static final int useOldAppVer_title = 0x7f121886; // 2131892358
public static final int vkx_integration_enabled_info = 0x7f121887; // 2131892359
public static final int whitelisted_ad_groups_stories_title = 0x7f121888; // 2131892360
public static final int writebar_ios_title = 0x7f121889; // 2131892361
}
public static final class style {
@@ -20786,5 +20849,6 @@ public final class R {
public static final int preferences_proxy = 0x7f15001c; // 2132082716
public static final int preferences_tgs = 0x7f15001d; // 2132082717
public static final int preferences_themes = 0x7f15001e; // 2132082718
public static final int locales_config = 0x7f15001f; // 2132082719
}
}
@@ -1,84 +0,0 @@
package ru.vtosters.lite.downloaders;
import android.util.Log;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;
public class Multithreading {
public static void download(URL url, File f, int threadCount) {
try {
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
int fileSize = connection.getContentLength();
connection.disconnect();
RandomAccessFile file = new RandomAccessFile(f, "rw");
file.setLength(fileSize);
file.close();
if (threadCount == 0) threadCount = 4;
int partSize = fileSize / threadCount;
DownloadThread[] threads = new DownloadThread[threadCount];
for (int i = 0; i < threadCount; i++) {
int startByte = i * partSize;
int endByte = (i + 1) * partSize - 1;
if (i == threadCount - 1) {
endByte = fileSize - 1;
}
DownloadThread thread = new DownloadThread(i, url, f.getName(), startByte, endByte);
thread.start();
threads[i] = thread;
}
for (DownloadThread thread : threads) {
thread.join();
}
} else {
Log.d("Multithreading", "Error, code: " + responseCode);
}
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
static class DownloadThread extends Thread {
private final int threadId;
private final URL url;
private final String fileName;
private final int startByte;
private final int endByte;
public DownloadThread(int threadId, URL url, String fileName, int startByte, int endByte) {
this.threadId = threadId;
this.url = url;
this.fileName = fileName;
this.startByte = startByte;
this.endByte = endByte;
}
@Override
public void run() {
try {
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestProperty("Range", "bytes=" + startByte + "-" + endByte);
InputStream input = connection.getInputStream();
RandomAccessFile file = new RandomAccessFile(fileName, "rw");
file.seek(startByte);
byte[] buffer = new byte[1024];
int length = input.read(buffer);
while (length != -1) {
file.write(buffer, 0, length);
length = input.read(buffer);
}
file.close();
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
@@ -12,6 +12,7 @@ import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.core.content.FileProvider;
import com.vk.core.dialogs.actionspopup.ActionsPopup;
import com.vk.core.dialogs.alert.VkAlertDialog;
import com.vk.core.ui.themes.VKThemeHelper;
@@ -23,6 +24,8 @@ import com.vtosters.lite.R;
import com.vtosters.lite.attachments.DocumentAttachment;
import com.vtosters.lite.attachments.PhotoAttachment;
import okhttp3.*;
import okio.BufferedSink;
import okio.Okio;
import org.json.JSONException;
import org.json.JSONObject;
import ru.vtosters.lite.di.singleton.VtOkHttpClient;
@@ -30,6 +33,7 @@ import ru.vtosters.lite.utils.AndroidUtils;
import ru.vtosters.lite.utils.LifecycleUtils;
import ru.vtosters.lite.utils.Preferences;
import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;
@@ -37,58 +41,83 @@ import java.util.List;
public class PhotoViewer {
static OkHttpClient client = VtOkHttpClient.getInstance();
@SuppressLint("NonConstantResourceId")
public static boolean interceptClick(AttachmentWithMedia attachment, MenuItem item, View view) {
if (item.getItemId() == R.id.search_photo) {
if (attachment instanceof PhotoAttachment) {
searchDialog(LifecycleUtils.getCurrentActivity(), getUrlFromPhotoAttachment((PhotoAttachment) attachment));
} else if (attachment instanceof DocumentAttachment) {
var documentAttachment = (DocumentAttachment) attachment;
if (documentAttachment.J != null)
try {
searchDialog(LifecycleUtils.getCurrentActivity(), getUrlFromDocumentAttachment(documentAttachment));
} catch (Exception e) {
switch (item.getItemId()) {
case R.id.copy_image -> {
if (attachment instanceof PhotoAttachment) {
copyImage(getUrlFromPhotoAttachment((PhotoAttachment) attachment), String.valueOf(attachment.getId()));
} else if (attachment instanceof DocumentAttachment) {
var documentAttachment = (DocumentAttachment) attachment;
if (documentAttachment.J != null)
try {
copyImage(getUrlFromDocumentAttachment(documentAttachment), String.valueOf(attachment.getId()));
} catch (Exception e) {
ToastUtils.a(R.string.photo_get_error);
}
else
ToastUtils.a(R.string.photo_get_error);
}
else
ToastUtils.a(R.string.photo_get_error);
}
return true;
}
return true;
} else if (item.getItemId() == R.id.copy_photo_url) {
if (attachment instanceof PhotoAttachment) {
copyPhotoUrl(getUrlFromPhotoAttachment((PhotoAttachment) attachment));
} else if (attachment instanceof DocumentAttachment) {
var documentAttachment = (DocumentAttachment) attachment;
if (documentAttachment.J != null)
try {
copyPhotoUrl(getUrlFromDocumentAttachment(documentAttachment));
} catch (Exception e) {
case R.id.copy_photo_url -> {
if (attachment instanceof PhotoAttachment) {
copyPhotoUrl(getUrlFromPhotoAttachment((PhotoAttachment) attachment));
} else if (attachment instanceof DocumentAttachment) {
var documentAttachment = (DocumentAttachment) attachment;
if (documentAttachment.J != null)
try {
copyPhotoUrl(getUrlFromDocumentAttachment(documentAttachment));
} catch (Exception e) {
ToastUtils.a(R.string.photo_get_error);
}
else
ToastUtils.a(R.string.photo_get_error);
}
else
ToastUtils.a(R.string.photo_get_error);
}
return true;
}
return true;
} else if (item.getItemId() == R.id.open_original_photo) {
if (attachment instanceof PhotoAttachment) {
openUrl(getUrlFromPhotoAttachment((PhotoAttachment) attachment));
} else if (attachment instanceof DocumentAttachment) {
var documentAttachment = (DocumentAttachment) attachment;
if (documentAttachment.J != null)
try {
openUrl(getUrlFromDocumentAttachment(documentAttachment));
} catch (Exception e) {
case R.id.open_original_photo -> {
if (attachment instanceof PhotoAttachment) {
openUrl(getUrlFromPhotoAttachment((PhotoAttachment) attachment));
} else if (attachment instanceof DocumentAttachment) {
var documentAttachment = (DocumentAttachment) attachment;
if (documentAttachment.J != null)
try {
openUrl(getUrlFromDocumentAttachment(documentAttachment));
} catch (Exception e) {
ToastUtils.a(R.string.photo_get_error);
}
else
ToastUtils.a(R.string.photo_get_error);
}
else
ToastUtils.a(R.string.photo_get_error);
}
return true;
}
return true;
}
return true;
}
@SuppressLint("UseCompatLoadingForDrawables")
public static void addMenuItems(AttachmentWithMedia attachment, ActionsPopup.b actionPopup, int i, boolean z) {
actionPopup.a(R.string.copy,
ContextExtKt.b(AndroidUtils.getGlobalContext(), R.drawable.ic_copy_outline_28, VKThemeHelper.g(R.attr.header_tint)),
false,
() -> {
if (attachment instanceof PhotoAttachment) {
copyImage(getUrlFromPhotoAttachment((PhotoAttachment) attachment), String.valueOf(attachment.getId()));
} else if (attachment instanceof DocumentAttachment) {
var documentAttachment = (DocumentAttachment) attachment;
if (documentAttachment.J != null)
try {
copyImage(getUrlFromDocumentAttachment(documentAttachment), String.valueOf(attachment.getId()));
} catch (Exception e) {
ToastUtils.a(R.string.photo_get_error);
}
else
ToastUtils.a(R.string.photo_get_error);
}
return null;
}
);
actionPopup.a(R.string.search_photo_content,
ContextExtKt.b(AndroidUtils.getGlobalContext(), R.drawable.ic_menu_search_outline_28, VKThemeHelper.g(R.attr.header_tint)),
false,
@@ -194,6 +223,37 @@ public class PhotoViewer {
}
}
private static void copyImage(String link, String name) {
Request request = new Request.a().b(link).a();
File file = new File(AndroidUtils.getGlobalContext().getExternalCacheDir(), name + ".jpg");
if (file.exists()) {
copyImageToClipboard(file);
return;
}
new Thread() {
@Override
public void run() {
try (Response response = client.a(request).execute()) {
try (BufferedSink sink = Okio.a(Okio.b(file))) {
sink.a(response.a().f());
}
copyImageToClipboard(file);
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
private static void copyImageToClipboard(File file) {
Uri path = FileProvider.getUriForFile(AndroidUtils.getGlobalContext(), "com.vtosters.lite.common.VKFileProvider", file);
ClipData clip = ClipData.newUri(AndroidUtils.getGlobalContext().getContentResolver(), "Image", path);
((ClipboardManager) AndroidUtils.getGlobalContext().getSystemService(Context.CLIPBOARD_SERVICE)).setPrimaryClip(clip);
}
private static int selectedEngine() {
return Preferences.getPreferences().getInt("search_engine", 0);
}
@@ -1,5 +1,6 @@
package ru.vtosters.lite.hooks;
import com.vk.medianative.MediaImageEncoder;
import com.vk.toggle.FeatureManager;
import com.vk.toggle.Features;
@@ -8,7 +9,7 @@ import static ru.vtosters.lite.utils.Preferences.*;
public class TogglesHook {
public static boolean shouldPatch(Features.Type feature) {
return switch (feature) {
case AB_IM_LONGPOLL_MSG_BATCHING, FEATURE_MOZJPEG, AB_IM_VIEW_POOL, AB_MULTI_GIFTS, AB_NEWS_VIDEO_LAYOUT_TEXT, AB_STICKERS_DISCOVER, AB_GIFTS_FROM_KEYBOARD, FEATURE_FEED_DEFAULT_LIST_ALWAYS, EXPERIMENT_NEWS_VIDEO_LAYOUT_TEXT, FEATURE_DISCOVER_CATEGORIES, FEATURE_FAVE_PERF_IMPROVE, FEATURE_GROUP_ADMIN_MESSAGES, FEATURE_GROUP_MSG_PUSH_PARAM, FEATURE_IMAGE_QUALITY_UPGRADE, FEATURE_IM_AUDIO_MSG_TRANSCRIPT, FEATURE_IM_CASPER_MSGS, FEATURE_IM_DISABLE_FORCE_OPEN_VK_ME, FEATURE_IM_GIF_AUTOPLAY, FEATURE_IM_MR_IN_VKAPP, FEATURE_MEMORIES_ENABLED, FEATURE_MENU_GAMES_CAROUSEL, FEATURE_MILKSHAKE, FEATURE_MILKSHAKE_CHANGE_FEED_BY_TIMEOUT, FEATURE_MILKSHAKE_NEWS_SCROLL_ON_BACK, FEATURE_MILKSHAKE_SWITCH_THEME_ON_TAP, FEATURE_ML_BRANDS, FEATURE_ML_FEATURES, FEATURE_ML_MODELS_LOADING, FEATURE_MONEY_TRANSFERS_VKPAY, FEATURE_MUSIC_ARTIST_CATALOG, FEATURE_MUSIC_NEW_CATALOG, FEATURE_NARRATIVE_SNIPPET_TYPE, FEATURE_NEWS_GAMES_IN_DISCOVER, FEATURE_NEWS_HEADER_SCROLL, FEATURE_NEW_FORMAT_SHOW_WPB, FEATURE_PODCASTS_PAGE, FEATURE_QR_CREATE_QR, FEATURE_QR_DYNAMIC_FRAME, FEATURE_QR_SCAN_FROM_PHOTO, FEATURE_QR_VISION_DECODER, FEATURE_QUEUE_COUNTERS, FEATURE_REEF, FEATURE_ROAMING_AUTOPLAY, FEATURE_SHARE_MSGS_ON_INVITE, FEATURE_STICKERS_BOT_LINK, FEATURE_STICKERS_NEW_CATALOG, FEATURE_STORIES_AVATAR, FEATURE_STORIES_FEED_TYPE, FEATURE_STORIES_SHOW_ALWAYS, FEATURE_STORY_ANSWER_PUBLIC, FEATURE_STORY_APP_STICKER, FEATURE_STORY_ARCHIVE, FEATURE_STORY_ARCHIVE_POST, FEATURE_STORY_BAKGROUND_ALL, FEATURE_STORY_BOX, FEATURE_STORY_CADRE, FEATURE_STORY_CAMERA_TOOLTIP, FEATURE_STORY_EDITOR_GALLERY, FEATURE_STORY_EDITOR_TYPE, FEATURE_STORY_ENDLESS_VIDEO, FEATURE_STORY_FAST_REACTIONS, FEATURE_STORY_GIF, FEATURE_STORY_GROUPED, FEATURE_STORY_HIGH_QUALITY, FEATURE_STORY_MASKS_FRONTAL, FEATURE_STORY_MENTION_ICON, FEATURE_STORY_MODERN_PUBLISH, FEATURE_STORY_MUSIC_EDITOR, FEATURE_STORY_MUSIC_REPLIES, FEATURE_STORY_MUSIC_REPLIES_2, FEATURE_STORY_NEW_FRAME, FEATURE_STORY_ONE_TIME, FEATURE_STORY_PHOTO_SHARING, FEATURE_STORY_PHOTO_STICKER, FEATURE_STORY_POLLS, FEATURE_STORY_POST_REPOST, FEATURE_STORY_PRELOADING, FEATURE_STORY_QUESTION, FEATURE_STORY_QUESTION_STYLE, FEATURE_STORY_RLOTTIE, FEATURE_STORY_RLOTTIE_CACHE, FEATURE_STORY_SAVE_DEFAULT_ON, FEATURE_STORY_SEND_DIALOG_LIST, FEATURE_STORY_STICKER_PACK, FEATURE_STORY_TIME, FEATURE_STORY_VIEWER_CAMERA, FEATURE_STORY_VOICE_ANSWER, FEATURE_STORY_WITH_CONTEXT, FEATURE_SUPERAPP_MENU, FEATURE_TRAFFIC_SAVER, FEATURE_VKPAY_WIDGET, FEATURE_VKUI_INTERNAL_TO_MINI_APPS, FEATURE_VKUI_TOKEN_CACHE, FEATURE_VK_APPS_SEARCH, FEATURE_VOTES_BALANCE, FEATURE_WEBVIEW_TOKEN_ACTIVE, FEATURE_MILKSHAKE_FORCE_DISABLED, FEATURE_MILKSHAKE_ACTIVATION_DISABLED, EXPERIMENT_NEWS_DISABLE_CACHE ->
case AB_IM_LONGPOLL_MSG_BATCHING, AB_IM_VIEW_POOL, AB_MULTI_GIFTS, AB_NEWS_VIDEO_LAYOUT_TEXT, AB_STICKERS_DISCOVER, AB_GIFTS_FROM_KEYBOARD, FEATURE_FEED_DEFAULT_LIST_ALWAYS, EXPERIMENT_NEWS_VIDEO_LAYOUT_TEXT, FEATURE_DISCOVER_CATEGORIES, FEATURE_FAVE_PERF_IMPROVE, FEATURE_GROUP_ADMIN_MESSAGES, FEATURE_GROUP_MSG_PUSH_PARAM, FEATURE_IMAGE_QUALITY_UPGRADE, FEATURE_IM_AUDIO_MSG_TRANSCRIPT, FEATURE_IM_CASPER_MSGS, FEATURE_IM_DISABLE_FORCE_OPEN_VK_ME, FEATURE_IM_GIF_AUTOPLAY, FEATURE_IM_MR_IN_VKAPP, FEATURE_MEMORIES_ENABLED, FEATURE_MENU_GAMES_CAROUSEL, FEATURE_MILKSHAKE, FEATURE_MILKSHAKE_CHANGE_FEED_BY_TIMEOUT, FEATURE_MILKSHAKE_NEWS_SCROLL_ON_BACK, FEATURE_MILKSHAKE_SWITCH_THEME_ON_TAP, FEATURE_ML_BRANDS, FEATURE_ML_FEATURES, FEATURE_ML_MODELS_LOADING, FEATURE_MONEY_TRANSFERS_VKPAY, FEATURE_MUSIC_ARTIST_CATALOG, FEATURE_MUSIC_NEW_CATALOG, FEATURE_NARRATIVE_SNIPPET_TYPE, FEATURE_NEWS_GAMES_IN_DISCOVER, FEATURE_NEWS_HEADER_SCROLL, FEATURE_NEW_FORMAT_SHOW_WPB, FEATURE_PODCASTS_PAGE, FEATURE_QR_CREATE_QR, FEATURE_QR_DYNAMIC_FRAME, FEATURE_QR_SCAN_FROM_PHOTO, FEATURE_QR_VISION_DECODER, FEATURE_QUEUE_COUNTERS, FEATURE_REEF, FEATURE_ROAMING_AUTOPLAY, FEATURE_SHARE_MSGS_ON_INVITE, FEATURE_STICKERS_BOT_LINK, FEATURE_STICKERS_NEW_CATALOG, FEATURE_STORIES_AVATAR, FEATURE_STORIES_FEED_TYPE, FEATURE_STORIES_SHOW_ALWAYS, FEATURE_STORY_ANSWER_PUBLIC, FEATURE_STORY_APP_STICKER, FEATURE_STORY_ARCHIVE, FEATURE_STORY_ARCHIVE_POST, FEATURE_STORY_BAKGROUND_ALL, FEATURE_STORY_BOX, FEATURE_STORY_CADRE, FEATURE_STORY_CAMERA_TOOLTIP, FEATURE_STORY_EDITOR_GALLERY, FEATURE_STORY_EDITOR_TYPE, FEATURE_STORY_ENDLESS_VIDEO, FEATURE_STORY_FAST_REACTIONS, FEATURE_STORY_GIF, FEATURE_STORY_GROUPED, FEATURE_STORY_HIGH_QUALITY, FEATURE_STORY_MASKS_FRONTAL, FEATURE_STORY_MENTION_ICON, FEATURE_STORY_MODERN_PUBLISH, FEATURE_STORY_MUSIC_EDITOR, FEATURE_STORY_MUSIC_REPLIES, FEATURE_STORY_MUSIC_REPLIES_2, FEATURE_STORY_NEW_FRAME, FEATURE_STORY_ONE_TIME, FEATURE_STORY_PHOTO_SHARING, FEATURE_STORY_PHOTO_STICKER, FEATURE_STORY_POLLS, FEATURE_STORY_POST_REPOST, FEATURE_STORY_PRELOADING, FEATURE_STORY_QUESTION, FEATURE_STORY_QUESTION_STYLE, FEATURE_STORY_RLOTTIE, FEATURE_STORY_RLOTTIE_CACHE, FEATURE_STORY_SAVE_DEFAULT_ON, FEATURE_STORY_SEND_DIALOG_LIST, FEATURE_STORY_STICKER_PACK, FEATURE_STORY_TIME, FEATURE_STORY_VIEWER_CAMERA, FEATURE_STORY_VOICE_ANSWER, FEATURE_STORY_WITH_CONTEXT, FEATURE_SUPERAPP_MENU, FEATURE_TRAFFIC_SAVER, FEATURE_VKPAY_WIDGET, FEATURE_VKUI_INTERNAL_TO_MINI_APPS, FEATURE_VKUI_TOKEN_CACHE, FEATURE_VK_APPS_SEARCH, FEATURE_VOTES_BALANCE, FEATURE_WEBVIEW_TOKEN_ACTIVE, FEATURE_MILKSHAKE_FORCE_DISABLED, FEATURE_MILKSHAKE_ACTIVATION_DISABLED, EXPERIMENT_NEWS_DISABLE_CACHE ->
true;
default -> false;
};
@@ -22,7 +23,7 @@ public class TogglesHook {
case FEATURE_MILKSHAKE_FORCE_DISABLED, FEATURE_MILKSHAKE_ACTIVATION_DISABLED -> !milkshake();
case AB_NEWS_VIDEO_LAYOUT_TEXT, FEATURE_COMPACT_REPOST, EXPERIMENT_NEWS_VIDEO_LAYOUT_TEXT ->
postsredesign();
case FEATURE_IMAGE_QUALITY_UPGRADE -> !getBoolValue("compressPhotos", true);
case FEATURE_IMAGE_QUALITY_UPGRADE -> MediaImageEncoder.needToSkipCompression();
case FEATURE_MENU_GAMES_CAROUSEL -> miniapps();
default -> true;
};
@@ -12,6 +12,7 @@ import com.aefyr.tsg.g2.TelegramStickersService;
import com.vk.about.AboutAppFragment;
import com.vk.balance.BalanceFragment;
import com.vk.identity.fragments.IdentityListFragment;
import com.vk.medianative.MediaImageEncoder;
import com.vk.notifications.settings.NotificationsSettingsFragment;
import com.vk.webapp.fragments.PrivacyFragment;
import com.vtosters.lite.MainActivity;
@@ -399,7 +400,7 @@ public class VTSettings extends TrackedMaterialPreferenceToolbarFragment impleme
getPreferenceScreen(),
"",
requireContext().getString(R.string.vtlmedia),
getValAsString(R.string.sett_compress_photos, Preferences.getBoolValue("compressPhotos", true)),
getValAsString(R.string.sett_compress_photos, MediaImageEncoder.needToCompress()),
R.drawable.ic_media_outline_28,
preference -> {
NavigatorUtils.switchFragment(requireContext(), MediaFragment.class);
@@ -6,6 +6,7 @@ import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.StrictMode;
import com.vk.medianative.MediaImageEncoder;
import com.vtosters.lite.data.Users;
import com.vtosters.lite.fragments.SettingsListFragment;
import ru.vtosters.lite.BuildConfig;
@@ -334,9 +335,7 @@ public class Preferences {
}
public static int compress(int origquality) {
if (!getBoolValue("compressPhotos", true)) {
return 100;
}
if (MediaImageEncoder.needToSkipCompression()) return 100;
return origquality;
}
}
+4
View File
@@ -40,6 +40,10 @@
android:id="@id/report"
android:showAsAction="never"
android:title="@string/report_content" />
<item
android:id="@id/copy_image"
android:showAsAction="never"
android:title="@string/copy" />
<item
android:id="@id/search_photo"
android:showAsAction="never"
+5
View File
@@ -692,4 +692,9 @@
<item>Выбрать вручную</item>
<item>Предустановленные цвета</item>
</string-array>
<string-array name="compression_value">
<item>Сжатие без потерь</item>
<item>Стандартное сжатие</item>
<item>Эффективное сжатие</item>
</string-array>
</resources>
+10
View File
@@ -891,4 +891,14 @@
<item>Color Picker</item>
<item>From Palettes</item>
</string-array>
<string-array name="compression_value">
<item>Lossless compression</item>
<item>Default compression</item>
<item>Effective compression</item>
</string-array>
<string-array name="compression">
<item>skip</item>
<item>jpeg</item>
<item>native</item>
</string-array>
</resources>
+1
View File
@@ -3920,4 +3920,5 @@
<item name="remove_from_cache_vkx" type="id" />
<item name="add_to_cache_vkx" type="id" />
<item name="account_backup_view" type="id" />
<item name="copy_image" type="id" />
</resources>
+7 -5
View File
@@ -1,16 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="@string/sett_media">
<com.vtosters.lite.ui.MaterialSwitchPreference
android:defaultValue="true"
android:key="compressPhotos"
android:summary="@string/sett_compress_photo_summ"
android:title="@string/sett_compress_photos"/>
<com.vtosters.lite.ui.MaterialSwitchPreference
android:defaultValue="true"
android:key="compressVideos"
android:summary="@string/sett_compress_video_summ"
android:title="@string/sett_compress_videos"/>
<com.vtosters.lite.ui.SummaryListPreference
android:defaultValue="jpeg"
android:dialogTitle="Выберите способ компрессии"
android:entries="@array/compression_value"
android:entryValues="@array/compression"
android:key="compression"
android:title="Способ компрессии фото"/>
</PreferenceCategory>
<PreferenceCategory android:title="@string/vtl_music_settings">
<Preference
@@ -1,432 +0,0 @@
.class public Lcom/vk/medianative/MediaImageEncoder;
.super Ljava/lang/Object;
.source "MediaImageEncoder.java"
# static fields
.field private static a:I = 0x64
.field private static b:I = 0x56
# direct methods
.method public constructor <init>()V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method private static a(Ljava/io/FileOutputStream;Ljava/lang/String;)V
.locals 2
.line 8
:try_start_0
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
const-string v1, "jpeg "
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
const-string p1, " size="
invoke-virtual {v0, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {p0}, Ljava/io/FileOutputStream;->getChannel()Ljava/nio/channels/FileChannel;
move-result-object p0
invoke-virtual {p0}, Ljava/nio/channels/FileChannel;->position()J
move-result-wide p0
invoke-virtual {v0, p0, p1}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
:try_end_0
.catchall {:try_start_0 .. :try_end_0} :catchall_0
:catchall_0
return-void
.end method
.method private static a(Ljava/io/OutputStream;)V
.locals 0
if-eqz p0, :cond_0
.line 9
:try_start_0
invoke-virtual {p0}, Ljava/io/OutputStream;->close()V
:try_end_0
.catch Ljava/io/IOException; {:try_start_0 .. :try_end_0} :catch_0
:catch_0
:cond_0
return-void
.end method
.method private static a(Landroid/graphics/Bitmap;Ljava/io/File;I)Z
.locals 2
const/4 v0, 0x0
.line 1
:try_start_0
new-instance v1, Ljava/io/FileOutputStream;
invoke-direct {v1, p1}, Ljava/io/FileOutputStream;-><init>(Ljava/io/File;)V
:try_end_0
.catchall {:try_start_0 .. :try_end_0} :catchall_1
.line 2
:try_start_1
sget-object p1, Landroid/graphics/Bitmap$CompressFormat;->JPEG:Landroid/graphics/Bitmap$CompressFormat;
invoke-static {p2}, Lru/vtosters/lite/utils/Preferences;->compress(I)I
move-result p2
invoke-virtual {p0, p1, p2, v1}, Landroid/graphics/Bitmap;->compress(Landroid/graphics/Bitmap$CompressFormat;ILjava/io/OutputStream;)Z
move-result p0
const-string p1, "system"
.line 3
invoke-static {v1, p1}, Lcom/vk/medianative/MediaImageEncoder;->a(Ljava/io/FileOutputStream;Ljava/lang/String;)V
:try_end_1
.catchall {:try_start_1 .. :try_end_1} :catchall_0
.line 4
invoke-static {v1}, Lcom/vk/medianative/MediaImageEncoder;->a(Ljava/io/OutputStream;)V
return p0
:catchall_0
move-exception p0
goto :goto_0
:catchall_1
move-exception p0
move-object v1, v0
.line 5
:goto_0
:try_start_2
const-class p1, Lcom/vk/medianative/MediaImageEncoder;
invoke-virtual {p1}, Ljava/lang/Class;->getSimpleName()Ljava/lang/String;
move-result-object p1
new-instance p2, Ljava/lang/StringBuilder;
invoke-direct {p2}, Ljava/lang/StringBuilder;-><init>()V
const-string v0, "jpeg system compressing error! "
invoke-virtual {p2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {p2, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
invoke-virtual {p2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object p0
invoke-static {p1, p0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
:try_end_2
.catchall {:try_start_2 .. :try_end_2} :catchall_2
.line 6
invoke-static {v1}, Lcom/vk/medianative/MediaImageEncoder;->a(Ljava/io/OutputStream;)V
const/4 p0, 0x0
return p0
:catchall_2
move-exception p0
invoke-static {v1}, Lcom/vk/medianative/MediaImageEncoder;->a(Ljava/io/OutputStream;)V
.line 7
throw p0
.end method
.method private static b(Landroid/graphics/Bitmap;Ljava/io/File;I)Z
.locals 6
.line 1
const-class v0, Lcom/vk/medianative/MediaImageEncoder;
const/4 v1, 0x0
const/4 v2, 0x0
.line 2
:try_start_0
invoke-static {}, Lcom/vk/medianative/MediaNative;->isX86()Z
move-result v3
const/4 v4, 0x1
if-nez v3, :cond_1
invoke-static {}, Lcom/vk/medianative/MediaNative;->isAsus()Z
move-result v3
if-nez v3, :cond_1
sget v3, Landroid/os/Build$VERSION;->SDK_INT:I
const/16 v5, 0x18
if-ge v3, v5, :cond_0
goto :goto_0
:cond_0
const/4 v3, 0x0
goto :goto_1
:cond_1
:goto_0
const/4 v3, 0x1
:goto_1
if-eqz v3, :cond_2
.line 3
invoke-virtual {v0}, Ljava/lang/Class;->getSimpleName()Ljava/lang/String;
move-result-object p0
const-string p1, "jpeg turbo on not supported device!"
invoke-static {p0, p1}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
:try_end_0
.catchall {:try_start_0 .. :try_end_0} :catchall_1
.line 4
invoke-static {v2}, Lcom/vk/medianative/MediaImageEncoder;->a(Ljava/io/OutputStream;)V
return v1
.line 5
:cond_2
:try_start_1
new-instance v3, Ljava/io/FileOutputStream;
invoke-direct {v3, p1}, Ljava/io/FileOutputStream;-><init>(Ljava/io/File;)V
:try_end_1
.catchall {:try_start_1 .. :try_end_1} :catchall_1
.line 6
:try_start_2
invoke-virtual {p0}, Landroid/graphics/Bitmap;->isRecycled()Z
move-result p1
if-nez p1, :cond_5
invoke-virtual {p0}, Landroid/graphics/Bitmap;->getHeight()I
move-result p1
invoke-virtual {p0}, Landroid/graphics/Bitmap;->getWidth()I
move-result v2
mul-int p1, p1, v2
if-nez p1, :cond_3
goto :goto_2
.line 7
:cond_3
invoke-static {p2}, Lru/vtosters/lite/utils/Preferences;->compress(I)I
move-result p2
invoke-static {p0, p2}, Lcom/vk/medianative/MediaNative;->compressBitmapJpeg(Landroid/graphics/Bitmap;I)[B
move-result-object p0
if-eqz p0, :cond_4
.line 8
invoke-virtual {v3, p0}, Ljava/io/FileOutputStream;->write([B)V
const-string p0, "turbo"
.line 9
invoke-static {v3, p0}, Lcom/vk/medianative/MediaImageEncoder;->a(Ljava/io/FileOutputStream;Ljava/lang/String;)V
:try_end_2
.catchall {:try_start_2 .. :try_end_2} :catchall_0
.line 10
invoke-static {v3}, Lcom/vk/medianative/MediaImageEncoder;->a(Ljava/io/OutputStream;)V
return v4
:cond_4
invoke-static {v3}, Lcom/vk/medianative/MediaImageEncoder;->a(Ljava/io/OutputStream;)V
goto :goto_4
:cond_5
:goto_2
invoke-static {v3}, Lcom/vk/medianative/MediaImageEncoder;->a(Ljava/io/OutputStream;)V
return v1
:catchall_0
move-exception p0
move-object v2, v3
goto :goto_3
:catchall_1
move-exception p0
.line 11
:goto_3
:try_start_3
invoke-virtual {v0}, Ljava/lang/Class;->getSimpleName()Ljava/lang/String;
move-result-object p1
new-instance p2, Ljava/lang/StringBuilder;
invoke-direct {p2}, Ljava/lang/StringBuilder;-><init>()V
const-string v0, "jpeg turbo compressing error! "
invoke-virtual {p2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {p2, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
invoke-virtual {p2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object p0
invoke-static {p1, p0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
:try_end_3
.catchall {:try_start_3 .. :try_end_3} :catchall_2
.line 12
invoke-static {v2}, Lcom/vk/medianative/MediaImageEncoder;->a(Ljava/io/OutputStream;)V
:goto_4
return v1
:catchall_2
move-exception p0
invoke-static {v2}, Lcom/vk/medianative/MediaImageEncoder;->a(Ljava/io/OutputStream;)V
.line 13
throw p0
.end method
.method public static encodeJpeg(Landroid/graphics/Bitmap;Ljava/io/File;)Z
.locals 1
.line 1
sget v0, Lcom/vk/medianative/MediaImageEncoder;->b:I
invoke-static {p0, p1, v0}, Lcom/vk/medianative/MediaImageEncoder;->encodeJpeg(Landroid/graphics/Bitmap;Ljava/io/File;I)Z
move-result p0
return p0
.end method
.method public static encodeJpeg(Landroid/graphics/Bitmap;Ljava/io/File;I)Z
.locals 2
if-eqz p0, :cond_2
.line 2
invoke-virtual {p0}, Landroid/graphics/Bitmap;->isRecycled()Z
move-result v0
if-nez v0, :cond_2
invoke-virtual {p0}, Landroid/graphics/Bitmap;->getWidth()I
move-result v0
invoke-virtual {p0}, Landroid/graphics/Bitmap;->getHeight()I
move-result v1
mul-int v0, v0, v1
if-nez v0, :cond_0
goto :goto_0
.line 3
:cond_0
sget-object v0, Lcom/vk/toggle/Features$Type;->FEATURE_MOZJPEG:Lcom/vk/toggle/Features$Type;
invoke-static {v0}, Lcom/vk/toggle/FeatureManager;->b(Lcom/vk/toggle/Features$Type;)Z
move-result v0
if-eqz v0, :cond_1
.line 4
invoke-static {p0, p1, p2}, Lcom/vk/medianative/MediaImageEncoder;->b(Landroid/graphics/Bitmap;Ljava/io/File;I)Z
move-result v0
if-eqz v0, :cond_1
const/4 p0, 0x1
return p0
.line 5
:cond_1
invoke-static {p0, p1, p2}, Lcom/vk/medianative/MediaImageEncoder;->a(Landroid/graphics/Bitmap;Ljava/io/File;I)Z
move-result p0
return p0
:cond_2
:goto_0
const/4 p0, 0x0
return p0
.end method
.method public static encodeJpegWithoutCompression(Landroid/graphics/Bitmap;Ljava/io/File;)Z
.locals 1
.line 1
sget v0, Lcom/vk/medianative/MediaImageEncoder;->a:I
invoke-static {p0, p1, v0}, Lcom/vk/medianative/MediaImageEncoder;->encodeJpeg(Landroid/graphics/Bitmap;Ljava/io/File;I)Z
move-result p0
return p0
.end method
@@ -63,24 +63,7 @@
.method public final invoke()Z
.locals 3
.line 2
iget-object v0, p0, Lcom/vtosters/lite/im/ImEngineProvider$createVkAppConfig$6$1;->this$0:Lcom/vtosters/lite/im/ImEngineProvider$createVkAppConfig$6;
iget-object v1, v0, Lcom/vtosters/lite/im/ImEngineProvider$createVkAppConfig$6;->$sp:Lkotlin/Lazy2;
iget-object v0, v0, Lcom/vtosters/lite/im/ImEngineProvider$createVkAppConfig$6;->$sp$metadata:Lkotlin/u/KProperty5;
invoke-interface {v1}, Lkotlin/Lazy2;->getValue()Ljava/lang/Object;
move-result-object v0
check-cast v0, Landroid/content/SharedPreferences;
const-string v1, "compressPhotos"
const/4 v2, 0x0
invoke-interface {v0, v1, v2}, Landroid/content/SharedPreferences;->getBoolean(Ljava/lang/String;Z)Z
invoke-static {}, Lcom/vk/medianative/MediaImageEncoder;->needToCompress()Z
move-result v0
@@ -45,7 +45,7 @@
if-eqz v0, :cond_0
const/16 v0, 0x1000
const/16 v0, 0x800
goto :goto_0
@@ -79,7 +79,7 @@
if-eqz v0, :cond_0
const/16 v0, 0x1000
const/16 v0, 0xa00
goto :goto_0
@@ -45,7 +45,7 @@
if-eqz v0, :cond_0
const/16 v0, 0x1000
const/16 v0, 0x800
goto :goto_0
@@ -79,7 +79,7 @@
if-eqz v0, :cond_0
const/16 v0, 0x1000
const/16 v0, 0xa00
goto :goto_0
@@ -119,16 +119,7 @@
.method protected w()Ljava/lang/String;
.locals 3
.line 1
invoke-static {}, Lcom/vk/core/preference/Preference;->a()Landroid/content/SharedPreferences;
move-result-object v0
const-string v1, "compressPhotos"
const/4 v2, 0x1
invoke-interface {v0, v1, v2}, Landroid/content/SharedPreferences;->getBoolean(Ljava/lang/String;Z)Z
invoke-static {}, Lcom/vk/medianative/MediaImageEncoder;->needToCompress()Z
move-result v0