mirror of
https://github.com/M66B/FairEmail.git
synced 2026-04-01 14:46:31 +02:00
Added save code
This commit is contained in:
@@ -19,6 +19,7 @@ package eu.faircode.email;
|
||||
Copyright 2018-2023 by Marcel Bokhorst (M66B)
|
||||
*/
|
||||
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
@@ -35,6 +36,7 @@ import android.view.View;
|
||||
import android.webkit.WebSettings;
|
||||
import android.webkit.WebView;
|
||||
import android.webkit.WebViewClient;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.activity.OnBackPressedCallback;
|
||||
import androidx.annotation.NonNull;
|
||||
@@ -46,6 +48,10 @@ import org.jsoup.nodes.Element;
|
||||
import org.w3c.dom.css.CSSStyleSheet;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.List;
|
||||
|
||||
@@ -54,9 +60,11 @@ public class ActivityCode extends ActivityBase {
|
||||
private ContentLoadingProgressBar pbWait;
|
||||
private Group grpReady;
|
||||
|
||||
private boolean lines = BuildConfig.DEBUG;
|
||||
private boolean lines = false;
|
||||
private boolean links = false;
|
||||
private boolean sanitize = BuildConfig.DEBUG;
|
||||
private boolean sanitize = false;
|
||||
|
||||
private static final int REQUEST_SAVE = 1;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
@@ -151,18 +159,6 @@ public class ActivityCode extends ActivityBase {
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
boolean debug = prefs.getBoolean("debug", false);
|
||||
|
||||
menu.findItem(R.id.menu_lines)
|
||||
.setChecked(lines)
|
||||
.setIcon(lines
|
||||
? R.drawable.twotone_speaker_notes_off_24
|
||||
: R.drawable.twotone_speaker_notes_24);
|
||||
|
||||
menu.findItem(R.id.menu_links)
|
||||
.setChecked(links)
|
||||
.setIcon(links
|
||||
? R.drawable.twotone_link_off_24
|
||||
: R.drawable.twotone_link_24);
|
||||
|
||||
menu.findItem(R.id.menu_sanitize)
|
||||
.setVisible(BuildConfig.DEBUG || debug)
|
||||
.setChecked(sanitize)
|
||||
@@ -173,6 +169,8 @@ public class ActivityCode extends ActivityBase {
|
||||
? R.string.title_legend_show_full
|
||||
: R.string.title_legend_show_reformatted));
|
||||
|
||||
menu.findItem(R.id.menu_lines).setChecked(lines);
|
||||
menu.findItem(R.id.menu_links).setChecked(links);
|
||||
|
||||
return super.onPrepareOptionsMenu(menu);
|
||||
}
|
||||
@@ -180,28 +178,47 @@ public class ActivityCode extends ActivityBase {
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
int itemId = item.getItemId();
|
||||
if (itemId == android.R.id.home) {
|
||||
finishAndRemoveTask();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_lines) {
|
||||
lines = !lines;
|
||||
invalidateOptionsMenu();
|
||||
load();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_links) {
|
||||
links = !links;
|
||||
invalidateOptionsMenu();
|
||||
load();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_sanitize) {
|
||||
if (itemId == R.id.menu_sanitize) {
|
||||
sanitize = !sanitize;
|
||||
invalidateOptionsMenu();
|
||||
load();
|
||||
return true;
|
||||
} else if (itemId == android.R.id.home) {
|
||||
finishAndRemoveTask();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_lines) {
|
||||
lines = !lines;
|
||||
item.setChecked(lines);
|
||||
load();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_links) {
|
||||
links = !links;
|
||||
item.setChecked(links);
|
||||
load();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_save) {
|
||||
selectFile();
|
||||
return true;
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
|
||||
try {
|
||||
switch (requestCode) {
|
||||
case REQUEST_SAVE:
|
||||
if (resultCode == RESULT_OK)
|
||||
save(data);
|
||||
break;
|
||||
}
|
||||
} catch (Throwable ex) {
|
||||
Log.e(ex);
|
||||
}
|
||||
}
|
||||
|
||||
private void load() {
|
||||
Intent intent = getIntent();
|
||||
long id = intent.getLongExtra("id", -1L);
|
||||
@@ -304,6 +321,82 @@ public class ActivityCode extends ActivityBase {
|
||||
protected void onException(Bundle args, @NonNull Throwable ex) {
|
||||
Log.unexpectedError(getSupportFragmentManager(), ex, false);
|
||||
}
|
||||
}.execute(this, args, "view:text");
|
||||
}.execute(this, args, "code:view");
|
||||
}
|
||||
|
||||
private void selectFile() {
|
||||
long id = getIntent().getLongExtra("id", -1L);
|
||||
|
||||
Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
|
||||
intent.addCategory(Intent.CATEGORY_OPENABLE);
|
||||
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
|
||||
intent.setType("*/*");
|
||||
intent.putExtra(Intent.EXTRA_TITLE, Long.toString(id) + ".html");
|
||||
Helper.openAdvanced(this, intent);
|
||||
startActivityForResult(intent, REQUEST_SAVE);
|
||||
}
|
||||
|
||||
private void save(Intent data) {
|
||||
long id = getIntent().getLongExtra("id", -1L);
|
||||
|
||||
Bundle args = new Bundle();
|
||||
args.putLong("id", id);
|
||||
args.putParcelable("uri", data.getData());
|
||||
|
||||
new SimpleTask<Void>() {
|
||||
private Toast toast = null;
|
||||
|
||||
@Override
|
||||
protected void onPreExecute(Bundle args) {
|
||||
toast = ToastEx.makeText(ActivityCode.this, R.string.title_executing, Toast.LENGTH_LONG);
|
||||
toast.show();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Bundle args) {
|
||||
if (toast != null)
|
||||
toast.cancel();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Void onExecute(Context context, Bundle args) throws Throwable {
|
||||
long id = args.getLong("id");
|
||||
Uri uri = args.getParcelable("uri");
|
||||
|
||||
if (uri == null)
|
||||
throw new FileNotFoundException();
|
||||
|
||||
if (!"content".equals(uri.getScheme())) {
|
||||
Log.w("Export uri=" + uri);
|
||||
throw new IllegalArgumentException(uri.getScheme());
|
||||
}
|
||||
|
||||
DB db = DB.getInstance(context);
|
||||
EntityMessage message = db.message().getMessage(id);
|
||||
if (message == null)
|
||||
return null;
|
||||
|
||||
File file = message.getFile(context);
|
||||
|
||||
ContentResolver resolver = context.getContentResolver();
|
||||
try (OutputStream os = resolver.openOutputStream(uri)) {
|
||||
try (InputStream is = new FileInputStream(file)) {
|
||||
Helper.copy(is, os);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onExecuted(Bundle args, Void data) {
|
||||
ToastEx.makeText(ActivityCode.this, R.string.title_completed, Toast.LENGTH_LONG).show();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onException(Bundle args, @NonNull Throwable ex) {
|
||||
Log.unexpectedError(getSupportFragmentManager(), ex, false);
|
||||
}
|
||||
}.execute(this, args, "code:save");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user