From 579ae62eed14a5468d10f5cd464de734a9a4840c Mon Sep 17 00:00:00 2001 From: NekoInverter <42698724+NekoInverter@users.noreply.github.com> Date: Tue, 24 Mar 2020 10:06:17 +0800 Subject: [PATCH] Improve saving images --- .../hippo/ehviewer/ui/GalleryActivity.java | 44 ++++++++++++++----- 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java index 14cbf1a1c..64012f445 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java @@ -22,6 +22,7 @@ import android.animation.ValueAnimator; import android.annotation.SuppressLint; import android.app.Activity; import android.content.ContentResolver; +import android.content.ContentValues; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; @@ -31,6 +32,8 @@ import android.graphics.Typeface; import android.net.Uri; import android.os.Build; import android.os.Bundle; +import android.os.Environment; +import android.provider.MediaStore; import android.text.TextUtils; import android.view.KeyEvent; import android.view.LayoutInflater; @@ -776,16 +779,37 @@ public class GalleryActivity extends EhActivity implements SeekBar.OnSeekBarChan Toast.makeText(this, R.string.error_cant_save_image, Toast.LENGTH_SHORT).show(); return; } - UniFile file; - if (null == (file = mGalleryProvider.save(page, UniFile.fromFile(dir), mGalleryProvider.getImageFilename(page)))) { + + String filename = mGalleryProvider.getImageFilename(page); + String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension( + MimeTypeMap.getFileExtensionFromUrl(filename)); + if (TextUtils.isEmpty(mimeType)) { + mimeType = "image/jpeg"; + } + + ContentResolver resolver = getContentResolver(); + ContentValues values = new ContentValues(); + values.put(MediaStore.MediaColumns.DISPLAY_NAME, filename); + values.put(MediaStore.Images.Media.DATE_ADDED, System.currentTimeMillis()); + values.put(MediaStore.MediaColumns.MIME_TYPE, mimeType); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + values.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_PICTURES + File.separator + "EhViewer"); + } else { + File path = new File(AppConfig.getExternalImageDir() + File.separator + "EhViewer"); + //noinspection ResultOfMethodCallIgnored + path.mkdirs(); + //noinspection deprecation + values.put(MediaStore.MediaColumns.DATA, path + File.separator + filename); + } + Uri imageUri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); + if (!mGalleryProvider.save(page, UniFile.fromMediaUri(this, imageUri))) { Toast.makeText(this, R.string.error_cant_save_image, Toast.LENGTH_SHORT).show(); return; } - Toast.makeText(this, getString(R.string.image_saved, file.getUri()), Toast.LENGTH_SHORT).show(); - + Toast.makeText(this, getString(R.string.image_saved, imageUri.toString()), Toast.LENGTH_SHORT).show(); // Sync media store - sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, file.getUri())); + //sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, file.getUri())); } private void saveImageTo(int page) { @@ -818,6 +842,7 @@ public class GalleryActivity extends EhActivity implements SeekBar.OnSeekBarChan @Override public void onActivityResult(int requestCode, int resultCode, Intent resultData) { + super.onActivityResult(requestCode, resultCode, resultData); if (requestCode == WRITE_REQUEST_CODE && resultCode == Activity.RESULT_OK) { if (resultData != null) { Uri uri = resultData.getData(); @@ -843,7 +868,7 @@ public class GalleryActivity extends EhActivity implements SeekBar.OnSeekBarChan Toast.makeText(this, getString(R.string.image_saved, uri.getPath()), Toast.LENGTH_SHORT).show(); // Sync media store - sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri)); + //sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri)); } } } @@ -939,12 +964,7 @@ public class GalleryActivity extends EhActivity implements SeekBar.OnSeekBarChan mScreenLightness.setProgress(Settings.getScreenLightness()); mScreenLightness.setEnabled(Settings.getCustomScreenLightness()); - mCustomScreenLightness.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - mScreenLightness.setEnabled(isChecked); - } - }); + mCustomScreenLightness.setOnCheckedChangeListener((buttonView, isChecked) -> mScreenLightness.setEnabled(isChecked)); } public View getView() {