Add support for copy image to clipboard

This commit is contained in:
tehcneko committed 2022-01-05 18:24:46 +08:00
1 parent 6caaaadcd8
commit 7de5be135f
2 files changed
+52 -5

No files matched your search

@@ -88,7 +88,13 @@ public class AppConfig {
@Nullable
public static File getExternalTempDir() {
return sContext.getExternalCacheDir();
File dir = sContext.getExternalCacheDir();
File file;
if (null != dir && FileUtils.ensureDirectory(file = new File(dir, TEMP))) {
return file;
} else {
return null;
}
}
@Nullable
@@ -22,6 +22,8 @@ import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.annotation.SuppressLint;
import android.app.assist.AssistContent;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
@@ -834,7 +836,7 @@ public class GalleryActivity extends EhActivity implements SeekBar.OnSeekBarChan
return;
}
File dir = AppConfig.getExternalTempDir();
File dir = getCacheDir();
if (null == dir) {
Toast.makeText(this, R.string.error_cant_create_temp_file, Toast.LENGTH_SHORT).show();
return;
@@ -867,6 +869,37 @@ public class GalleryActivity extends EhActivity implements SeekBar.OnSeekBarChan
}
}
private void copyImage(int page) {
if (null == mGalleryProvider) {
return;
}
File dir = getCacheDir();
if (null == dir) {
Toast.makeText(this, R.string.error_cant_create_temp_file, Toast.LENGTH_SHORT).show();
return;
}
UniFile file;
if (null == (file = mGalleryProvider.save(page, UniFile.fromFile(dir), mGalleryProvider.getImageFilename(page)))) {
Toast.makeText(this, R.string.error_cant_save_image, Toast.LENGTH_SHORT).show();
return;
}
String filename = file.getName();
if (filename == null) {
Toast.makeText(this, R.string.error_cant_save_image, Toast.LENGTH_SHORT).show();
return;
}
Uri uri = FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID + ".fileprovider", new File(dir, filename));
var clipboardManager = getSystemService(ClipboardManager.class);
if (clipboardManager != null) {
var clipData = ClipData.newUri(getContentResolver(), "ehviewer", uri);
clipboardManager.setPrimaryClip(clipData);
Toast.makeText(this, getString(R.string.copied_to_clipboard), Toast.LENGTH_SHORT).show();
}
}
private void saveImage(int page) {
if (null == mGalleryProvider) {
return;
@@ -931,7 +964,11 @@ public class GalleryActivity extends EhActivity implements SeekBar.OnSeekBarChan
if (null == mGalleryProvider) {
return;
}
File dir = getCacheDir();
File dir = AppConfig.getExternalTempDir();
if (null == dir) {
Toast.makeText(this, R.string.error_cant_create_temp_file, Toast.LENGTH_SHORT).show();
return;
}
UniFile file;
if (null == (file = mGalleryProvider.save(page, UniFile.fromFile(dir), mGalleryProvider.getImageFilename(page)))) {
Toast.makeText(this, R.string.error_cant_save_image, Toast.LENGTH_SHORT).show();
@@ -960,6 +997,7 @@ public class GalleryActivity extends EhActivity implements SeekBar.OnSeekBarChan
items = new CharSequence[]{
getString(R.string.page_menu_refresh),
getString(R.string.page_menu_share),
getString(android.R.string.copy),
getString(R.string.page_menu_save),
getString(R.string.page_menu_save_to)};
pageDialogListener(builder, items, page);
@@ -980,10 +1018,13 @@ public class GalleryActivity extends EhActivity implements SeekBar.OnSeekBarChan
case 1: // Share
shareImage(page);
break;
case 2: // Save
case 2: // Copy
copyImage(page);
break;
case 3: // Save
saveImage(page);
break;
case 3: // Save to
case 4: // Save to
saveImageTo(page);
break;
}