diff --git a/README.md b/README.md
deleted file mode 100644
index 83956dc..0000000
--- a/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# SnipMeApp
-Simple application that allows to save and share code snippets in different languages.
-
-
-
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 58b4508..e321917 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,6 +1,6 @@
-
-
+
+ android:supportsRtl="true"
+ android:networkSecurityConfig="@xml/network_security_config"
+ >
+ android:theme="@style/Theme.AppCompat.Light.NoActionBar"
+ android:exported="true">
-
-
-
-
-
+
\ No newline at end of file
diff --git a/app/src/main/java/dev/snipme/snipmeapp/AppService.kt b/app/src/main/java/dev/snipme/snipmeapp/AppService.kt
deleted file mode 100644
index 4d1aa21..0000000
--- a/app/src/main/java/dev/snipme/snipmeapp/AppService.kt
+++ /dev/null
@@ -1,107 +0,0 @@
-package dev.snipme.snipmeapp
-
-import android.content.ClipData
-import android.content.ContentValues
-import android.content.Context
-import android.content.Intent
-import android.content.Intent.FLAG_ACTIVITY_NEW_TASK
-import android.net.Uri
-import android.os.Environment
-import android.provider.MediaStore
-import androidx.core.content.ContextCompat.startActivity
-import androidx.core.content.FileProvider
-import dev.snipme.snipmeapp.domain.snippets.Snippet
-import java.io.File
-import java.io.FileNotFoundException
-import java.text.DateFormat
-import java.util.Date
-
-const val imageMime = "image/png"
-
-class AppService(private val context: Context) {
- private var imageUri: Uri? = null
-
- fun getCurrentDateFormatted(): String {
- return DateFormat.getDateInstance().format(Date())
- }
-
- fun storeFile(image: ByteArray, fileName: String, temp: Boolean = false) {
- val directoryFile = if (temp) context.cacheDir else context.getExternalFilesDir(
- Environment.DIRECTORY_PICTURES
- )
-
- if (directoryFile == null) throw IllegalStateException("Storage not available")
- if (!directoryFile.exists()) {
- directoryFile.mkdirs()
- }
-
- val imageFile = File(directoryFile, fileName)
- val imageUri = FileProvider.getUriForFile(
- context,
- "dev.snipme.snipmeapp.fileprovider",
- imageFile,
- )
-
- context.grantUriPermission(
- "dev.snipme.snipmeapp.fileprovider",
- imageUri,
- Intent.FLAG_GRANT_WRITE_URI_PERMISSION or Intent.FLAG_GRANT_READ_URI_PERMISSION
- )
-
- imageFile.writeBytes(image)
- this.imageUri = imageUri
- }
-
- fun launchShareIntent(snippet: Snippet) {
- if (imageUri == null)
- throw IllegalStateException("Image path is not set. Store image first!")
-
- val uri = imageUri!! // Store temporary to avoid var change
- val sendIntent: Intent = Intent().apply {
- action = Intent.ACTION_SEND
- type = imageMime
- clipData = ClipData.newRawUri(snippet.title, uri)
- setDataAndType(uri, context.contentResolver.getType(uri));
- addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
- putExtra(Intent.EXTRA_TITLE, snippet.title)
- putExtra(Intent.EXTRA_STREAM, uri)
- }
-
- val shareIntent = Intent.createChooser(sendIntent, null)
- shareIntent.addFlags(FLAG_ACTIVITY_NEW_TASK)
- startActivity(context, shareIntent, null)
- }
-
- fun storeMediaFile(image: ByteArray, name: String) {
- val directory = "Pictures/SnipMeApp"
- val contentValues = ContentValues().apply {
- put(MediaStore.Images.Media.DISPLAY_NAME, name)
- put(MediaStore.Images.Media.RELATIVE_PATH, directory)
- put(MediaStore.Images.Media.MIME_TYPE, imageMime)
- }
-
- val resolver = context.contentResolver
- val existingUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI.buildUpon()
- .appendQueryParameter(MediaStore.Images.Media.DISPLAY_NAME, name)
- .appendQueryParameter(MediaStore.Images.Media.RELATIVE_PATH, directory)
- .build()
-
- val cursor =
- resolver.query(existingUri, arrayOf(MediaStore.Images.Media._ID), null, null, null)
- val uri: Uri? = if (cursor != null && cursor.moveToFirst()) {
- val id = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID))
- Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id.toString())
- } else {
- resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues)
- }
- cursor?.close()
-
- if (uri != null) {
- resolver.openOutputStream(uri)?.use { outputStream ->
- outputStream.write(image)
- }
- } else {
- throw FileNotFoundException("Failed to create or update MediaStore record.")
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/dev/snipme/snipmeapp/MainActivity.kt b/app/src/main/java/dev/snipme/snipmeapp/MainActivity.kt
index b74f45a..92a818d 100644
--- a/app/src/main/java/dev/snipme/snipmeapp/MainActivity.kt
+++ b/app/src/main/java/dev/snipme/snipmeapp/MainActivity.kt
@@ -2,19 +2,16 @@ package dev.snipme.snipmeapp
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
-import dev.snipme.snipmeapp.channel.EventStreamHandlerPlugin
-import dev.snipme.snipmeapp.channel.StateStreamHandlerPlugin
-import dev.snipme.snipmeapp.channel.details.DetailsModelPlugin
-import dev.snipme.snipmeapp.channel.login.LoginModelPlugin
-import dev.snipme.snipmeapp.channel.main.MainModelPlugin
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.embedding.engine.FlutterEngineCache
import io.flutter.embedding.engine.dart.DartExecutor
+import dev.snipme.snipmeapp.bridge.detail.DetailModelPlugin
+import dev.snipme.snipmeapp.bridge.login.LoginModelPlugin
+import dev.snipme.snipmeapp.bridge.main.MainModelPlugin
class MainActivity : AppCompatActivity() {
- // TODO Improve flutter enginge management or remove
- private lateinit var flutterEngine: FlutterEngine
+ private lateinit var flutterEngine : FlutterEngine
private val cachedEngineId = "ID_CACHED_FLUTTER_ENGINE"
@@ -22,24 +19,16 @@ class MainActivity : AppCompatActivity() {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
- FlutterEngine(this).apply {
- dartExecutor.executeDartEntrypoint(DartExecutor.DartEntrypoint.createDefault())
-
- plugins.add(
- setOf(
- StateStreamHandlerPlugin(),
- EventStreamHandlerPlugin(),
- LoginModelPlugin(),
- MainModelPlugin(),
- DetailsModelPlugin()
- )
- )
- FlutterEngineCache.getInstance().put(cachedEngineId, this)
-
- startActivity(
- FlutterActivity.withCachedEngine(cachedEngineId)
- .build(baseContext)
- )
- }
+ FlutterEngine(this).apply {
+ dartExecutor.executeDartEntrypoint(DartExecutor.DartEntrypoint.createDefault())
+
+ plugins.add(LoginModelPlugin())
+ plugins.add(MainModelPlugin())
+ plugins.add(DetailModelPlugin())
+
+ FlutterEngineCache.getInstance().put(cachedEngineId, this)
+
+ startActivity(FlutterActivity.withCachedEngine(cachedEngineId).build(baseContext))
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/dev/snipme/snipmeapp/bridge/Bridge.java b/app/src/main/java/dev/snipme/snipmeapp/bridge/Bridge.java
new file mode 100644
index 0000000..b16744b
--- /dev/null
+++ b/app/src/main/java/dev/snipme/snipmeapp/bridge/Bridge.java
@@ -0,0 +1,2526 @@
+// Autogenerated from Pigeon (v22.5.0), do not edit directly.
+// See also: https://pub.dev/packages/pigeon
+
+package dev.snipme.snipmeapp.bridge;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.RetentionPolicy.CLASS;
+
+import android.util.Log;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import io.flutter.plugin.common.BasicMessageChannel;
+import io.flutter.plugin.common.BinaryMessenger;
+import io.flutter.plugin.common.MessageCodec;
+import io.flutter.plugin.common.StandardMessageCodec;
+import java.io.ByteArrayOutputStream;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+/** Generated class from Pigeon. */
+@SuppressWarnings({"unused", "unchecked", "CodeBlock2Expr", "RedundantSuppression", "serial"})
+public class Bridge {
+
+ /** Error class for passing custom error details to Flutter via a thrown PlatformException. */
+ public static class FlutterError extends RuntimeException {
+
+ /** The error code. */
+ public final String code;
+
+ /** The error details. Must be a datatype supported by the api codec. */
+ public final Object details;
+
+ public FlutterError(@NonNull String code, @Nullable String message, @Nullable Object details)
+ {
+ super(message);
+ this.code = code;
+ this.details = details;
+ }
+ }
+
+ @NonNull
+ protected static ArrayList