Initial archive export stub

This commit is contained in:
tarsin committed 2022-06-14 09:48:48 +08:00
1 parent de6a664729
commit ce8da252c3
6 files changed
+68

No files matched your search

@@ -64,11 +64,14 @@ import androidx.core.view.ViewCompat;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.progressindicator.CircularProgressIndicator;
import com.google.android.material.snackbar.Snackbar;
import com.hippo.UriArchiveAccessor;
import com.hippo.app.EditTextDialogBuilder;
import com.hippo.beerbelly.BeerBelly;
import com.hippo.ehviewer.AppConfig;
import com.hippo.ehviewer.BuildConfig;
import com.hippo.ehviewer.EhApplication;
import com.hippo.ehviewer.EhDB;
import com.hippo.ehviewer.GetText;
import com.hippo.ehviewer.R;
import com.hippo.ehviewer.Settings;
import com.hippo.ehviewer.UrlOpener;
@@ -105,6 +108,7 @@ import com.hippo.text.URLImageGetter;
import com.hippo.util.AppHelper;
import com.hippo.util.ClipboardUtil;
import com.hippo.util.ExceptionUtils;
import com.hippo.util.IoThreadPoolExecutor;
import com.hippo.util.ReadableTime;
import com.hippo.view.ViewTransition;
import com.hippo.widget.AutoWrapLayout;
@@ -537,6 +541,44 @@ public class GalleryDetailScene extends ToolbarScene implements View.OnClickList
voteTag(builder.getText().trim(), 1);
dialog.dismiss();
});
} else if (itemId == R.id.action_export) {
ActivityResultLauncher<String> exportLauncher = registerForActivityResult(
new ActivityResultContracts.CreateDocument(),
uri -> {
if (uri != null) {
try {
// grantUriPermission might throw RemoteException on MIUI
requireActivity().grantUriPermission(BuildConfig.APPLICATION_ID, uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
} catch (Exception e) {
ExceptionUtils.throwIfFatal(e);
e.printStackTrace();
}
try {
AlertDialog alertDialog = new MaterialAlertDialogBuilder(requireActivity())
.setCancelable(false)
.setView(R.layout.preference_dialog_task)
.show();
IoThreadPoolExecutor.getInstance().execute(() -> {
boolean success = false;
Activity activity = getActivity();
if (activity != null) {
activity.runOnUiThread(() -> {
if (alertDialog.isShowing()) {
alertDialog.dismiss();
}
showTip(
(success)
? GetText.getString(R.string.settings_advanced_export_data_to, uri.toString())
: GetText.getString(R.string.settings_advanced_export_data_failed),
BaseScene.LENGTH_SHORT);
});
}
});
} catch (Exception e) {
showTip(R.string.settings_advanced_export_data_failed, BaseScene.LENGTH_SHORT);
}
}
});
}
return true;
}
@@ -28,4 +28,8 @@
android:id="@+id/action_open_in_other_app"
android:title="@string/open_in_other_app" />
<item
android:id="@+id/action_export"
android:title="@string/export" />
</menu>
@@ -762,4 +762,5 @@
<string name="show_library_version">依赖库之版本</string>
<string name="settings_privacy_require_unlock">需要解锁</string>
<string name="export">导出</string>
</resources>
+1
View File
@@ -826,4 +826,5 @@
<string name="show_library_version">Library Version</string>
<string name="settings_privacy_require_unlock">Require Unlock</string>
<string name="export">Export</string>
</resources>
@@ -102,4 +102,18 @@ public class UriArchiveAccessor implements Closeable {
}
}
}
private static native boolean compressDirToOutStream(String dirname, int format, OutputStream os);
public static synchronized boolean exportGalleryArchive(String dirName, int format, Uri target, Context context) {
try {
OutputStream os = context.getContentResolver().openOutputStream(target);
compressDirToOutStream(dirName, format, os);
os.close();
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
}
+6
View File
@@ -164,4 +164,10 @@ Java_com_hippo_UriArchiveAccessor_extracttoOutputStream(JNIEnv *env, jobject thi
archive_read_close(arc->archive);
archive_destroy_inst(arc);
return 0;
}
JNIEXPORT jboolean JNICALL
Java_com_hippo_UriArchiveAccessor_compressDirToOutStream(JNIEnv *env, jclass clazz, jstring dirname,
jint format, jobject os) {
return JNI_FALSE;
}