diff --git a/.idea/misc.xml b/.idea/misc.xml index 9988271..338fdbe 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -4,6 +4,8 @@ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0969fcd..3fbf5c3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,8 +12,13 @@ android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18" /> + + + + + android:resource="@xml/file_paths" /> diff --git a/app/src/main/java/de/clkl/android/miniofotoapp/MainActivity.java b/app/src/main/java/de/clkl/android/miniofotoapp/MainActivity.java index 3d1b288..b8aab76 100644 --- a/app/src/main/java/de/clkl/android/miniofotoapp/MainActivity.java +++ b/app/src/main/java/de/clkl/android/miniofotoapp/MainActivity.java @@ -1,9 +1,5 @@ package de.clkl.android.miniofotoapp; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; -import androidx.core.content.FileProvider; - import android.content.Intent; import android.net.Uri; import android.os.Bundle; @@ -12,6 +8,15 @@ import android.provider.MediaStore; import android.util.Log; import android.view.View; import android.widget.ImageView; +import android.widget.Toast; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.FileProvider; import java.io.File; import java.io.IOException; @@ -19,18 +24,13 @@ import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.Locale; import io.minio.BucketExistsArgs; import io.minio.MakeBucketArgs; import io.minio.MinioClient; import io.minio.UploadObjectArgs; -import io.minio.errors.ErrorResponseException; -import io.minio.errors.InsufficientDataException; -import io.minio.errors.InternalException; -import io.minio.errors.InvalidResponseException; import io.minio.errors.MinioException; -import io.minio.errors.ServerException; -import io.minio.errors.XmlParserException; public class MainActivity extends AppCompatActivity { @@ -40,6 +40,7 @@ public class MainActivity extends AppCompatActivity { private String currentPhotoPath; private MinioClient minio; private String bucket; + private ActivityResultLauncher photoLauncher; @Override @@ -54,26 +55,29 @@ public class MainActivity extends AppCompatActivity { bucket = getString(R.string.minio_bucket); checkOrCreateBucket(minio, bucket); + + photoLauncher = registerForActivityResult( + new ActivityResultContracts.StartActivityForResult(), + result -> { // new ActivityResultCallback() { + if (result.getResultCode() == RESULT_OK) { + handlePhotoCallback(); + } + }); } private static void checkOrCreateBucket(MinioClient client, String bucket) { - Runnable check = new Runnable() { - @Override - public void run() { - - try { - boolean isPresent = false; - isPresent = client.bucketExists(BucketExistsArgs.builder().bucket(bucket).build()); - if (!isPresent) { - System.out.println("Create Bucket '" + bucket + "'"); - client.makeBucket(MakeBucketArgs.builder().bucket(bucket).build()); - } else { - System.out.println("Bucket '" + bucket + "' already present"); - } - } catch (InvalidKeyException | IOException | NoSuchAlgorithmException | MinioException e) { - e.printStackTrace(); - Log.e(TAG, "something went wrong with minio", e); + Runnable check = () -> { // lambda syntax: short for `new Runnable{}` + try { + boolean isPresent = client.bucketExists(BucketExistsArgs.builder().bucket(bucket).build()); + if (!isPresent) { + System.out.println("Create Bucket '" + bucket + "'"); + client.makeBucket(MakeBucketArgs.builder().bucket(bucket).build()); + } else { + System.out.println("Bucket '" + bucket + "' already present"); } + } catch (InvalidKeyException | IOException | NoSuchAlgorithmException | MinioException e) { + e.printStackTrace(); + Log.e(TAG, "something went wrong with minio", e); } }; new Thread(check).start(); @@ -95,13 +99,16 @@ public class MainActivity extends AppCompatActivity { "de.clkl.android.MinioPhotoApp.fileprovider", photoFile); takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); - startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); + photoLauncher.launch(takePictureIntent); } } } private File createImageFile() throws IOException { - String timeStamp = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss").format(new Date()); + String timeStamp = new SimpleDateFormat( + "yyyy-MM-dd_HH-mm-ss", + Locale.getDefault() + ).format(new Date()); String fileName = "JPEG_" + timeStamp + "_"; File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES); File image = File.createTempFile( @@ -110,6 +117,7 @@ public class MainActivity extends AppCompatActivity { storageDir ); currentPhotoPath = image.getAbsolutePath(); + Toast.makeText(this, currentPhotoPath, Toast.LENGTH_LONG).show(); return image; } @@ -119,25 +127,26 @@ public class MainActivity extends AppCompatActivity { super.onActivityResult(requestCode, resultCode, data); } if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { - thumb.setImageURI(Uri.fromFile(new File(currentPhotoPath))); - Runnable upload = new Runnable() { - @Override - public void run() { - - try { - String filename = currentPhotoPath.substring(currentPhotoPath.lastIndexOf("/")); - minio.uploadObject(UploadObjectArgs.builder().bucket(bucket).object(filename).filename(currentPhotoPath).build()); - } catch (InvalidKeyException | IOException | NoSuchAlgorithmException | MinioException e) { - e.printStackTrace(); - Log.e(TAG, "something went wrong with minio", e); - } - } - }; - new Thread(upload).start(); + handlePhotoCallback(); } } + private void handlePhotoCallback() { + thumb.setImageURI(Uri.fromFile(new File(currentPhotoPath))); + Runnable upload = () -> { + + try { + String filename = currentPhotoPath.substring(currentPhotoPath.lastIndexOf("/")); + minio.uploadObject(UploadObjectArgs.builder().bucket(bucket).object(filename).filename(currentPhotoPath).build()); + } catch (InvalidKeyException | IOException | NoSuchAlgorithmException | MinioException e) { + e.printStackTrace(); + Log.e(TAG, "something went wrong with minio", e); + } + }; + new Thread(upload).start(); + } + public void onButtonClick(View view) { Log.d(TAG, "button has been clicked"); dispatchTakePictureIntent(); diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 5d5be1e..a2abadd 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -21,12 +21,13 @@ android:layout_height="wrap_content" android:layout_marginStart="148dp" android:layout_marginTop="112dp" - android:text="Button" + android:text="@string/button" android:onClick="onButtonClick" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> - + demoAPI - 952fa5f2-0965-11ec-b846-1756113babc3 + 952fa5f2-0965-11ec-b846-1756113babc3 http://192.168.2.53:9000 android-demo \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 60e552e..0a661b5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,5 @@ MinioFotoApp + thumbnail + Tap to take a Photo \ No newline at end of file