summaryrefslogtreecommitdiffstats
path: root/android/app/src/main/java/com
diff options
context:
space:
mode:
Diffstat (limited to 'android/app/src/main/java/com')
-rw-r--r--android/app/src/main/java/com/jopek/submittodatiinator/MainActivity.java86
-rw-r--r--android/app/src/main/java/com/jopek/submittodatiinator/Requests.java151
2 files changed, 237 insertions, 0 deletions
diff --git a/android/app/src/main/java/com/jopek/submittodatiinator/MainActivity.java b/android/app/src/main/java/com/jopek/submittodatiinator/MainActivity.java
new file mode 100644
index 0000000..467c5be
--- /dev/null
+++ b/android/app/src/main/java/com/jopek/submittodatiinator/MainActivity.java
@@ -0,0 +1,86 @@
+package com.jopek.submittodatiinator;
+
+import android.annotation.SuppressLint;
+import android.app.ProgressDialog;
+import android.content.Intent;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.MediaStore;
+import android.provider.OpenableColumns;
+import android.util.Log;
+import android.widget.TextView;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+public class MainActivity extends AppCompatActivity {
+ /********** File Path *************/
+ TextView messageText;
+ ProgressDialog dialog = null;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+
+ messageText = findViewById(R.id.tv);
+
+ //dialog = ProgressDialog.show(MainActivity.this, "", "Uploading file...", true);
+
+ Intent intent = getIntent();
+ String action = intent.getAction();
+ String type = intent.getType();
+ Uri fileUri = null;
+
+ if (Intent.ACTION_SEND.equals(action) && type != null) {
+ Object object = intent.getParcelableExtra(Intent.EXTRA_STREAM);
+ if(object != null && object instanceof Uri) fileUri = (Uri) object;
+// if (type.startsWith("image/")) {
+// fileUri = intent.getParcelableExtra(Intent.EXTRA_STREAM);
+// }
+// if (type.startsWith("video/")) {
+// fileUri = intent.getParcelableExtra(Intent.EXTRA_STREAM);
+// }
+// if (type.startsWith("application/")) {
+// fileUri = intent.getParcelableExtra(Intent.EXTRA_STREAM);
+// }
+ }
+
+ Log.d("maks", "45: fileUri: " + fileUri);
+ if (fileUri != null) {
+// String sourceFileUri = getRealPathFromURI(fileUri);
+ String sourceFileUri = fileUri.getPath();
+ Uri finalFileUri = fileUri;
+ new Thread(() -> {
+ runOnUiThread(() -> messageText.setText("uploading started..."));
+ Log.d("maks", "onCreate: " + sourceFileUri);
+ Requests.ReturnValues retVal = Requests.uploadFile(this, finalFileUri);
+ switch (retVal) {
+ case MALFORMED_URL:
+ case NO_FILE:
+ case SERVER_ERROR:
+ runOnUiThread(() -> messageText.setText("error while uploading..."));
+ break;
+ case OK:
+ runOnUiThread(() -> messageText.setText("File uploaded!"));
+ break;
+ }
+ }).start();
+ }
+ }
+
+ public String getRealPathFromURI(Uri contentUri) {
+ Cursor cursor = null;
+ try {
+ cursor = this.getContentResolver().query(contentUri, new String[]{android.provider.MediaStore.Images.ImageColumns.DATA}, null, null, null);
+ cursor.moveToFirst();
+ String filePath = cursor.getString(0);
+ cursor.close();
+ return filePath;
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/android/app/src/main/java/com/jopek/submittodatiinator/Requests.java b/android/app/src/main/java/com/jopek/submittodatiinator/Requests.java
new file mode 100644
index 0000000..fafc87d
--- /dev/null
+++ b/android/app/src/main/java/com/jopek/submittodatiinator/Requests.java
@@ -0,0 +1,151 @@
+package com.jopek.submittodatiinator;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+import android.provider.OpenableColumns;
+import android.util.Log;
+
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.util.Random;
+
+public class Requests {
+ public static final String TAG = "REQUESTS";
+
+ static final String uploadServerUri = "https://jopek.eu/maks/submitto-dati-inator/upload.php";
+ private final static String lineEnd = "\r\n";
+ private final static String twoHyphens = "--";
+
+ public static ReturnValues uploadFile(Context context, Uri sourceFileUri) {
+ final String boundary = "------------------------" + getRandomString(16);
+ int serverResponseCode = 0;
+ HttpURLConnection conn = null;
+ DataOutputStream dos = null;
+ int bytesRead, bytesAvailable, bufferSize;
+ byte[] buffer;
+ int maxBufferSize = 1 * 1024 * 1024;
+ String filename = getFileName(context, sourceFileUri);
+// File sourceFile = new File(sourceFileUri);
+
+// if (!sourceFile.isFile()) {
+// Log.e(TAG, "Source File not exist :" + sourceFileUri);
+// return ReturnValues.NO_FILE;
+// } else {
+ try {
+ // open a URL connection to the Servlet
+// InputStream fileInputStream = new FileInputStream(sourceFile);
+ InputStream fileInputStream = context.getContentResolver().openInputStream(sourceFileUri);
+
+ URL url = new URL(uploadServerUri);
+
+ // Open a HTTP connection to the URL
+ conn = (HttpURLConnection) url.openConnection();
+ conn.setDoInput(true); // Allow Inputs
+ conn.setDoOutput(true); // Allow Outputs
+ conn.setUseCaches(false); // Don't use a Cached Copy
+ conn.setChunkedStreamingMode(2048);
+ conn.setRequestMethod("POST");
+ conn.setRequestProperty("Connection", "Keep-Alive");
+ conn.setRequestProperty("ENCTYPE", "multipart/form-data");
+ conn.setRequestProperty("Authorization", "Basic maks:<pass>");
+ conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
+
+ dos = new DataOutputStream(conn.getOutputStream());
+
+ dos.writeBytes(twoHyphens + boundary + lineEnd);
+ dos.writeBytes("Content-Disposition: form-data; name=" + filename + ";filename=" + filename + "" + lineEnd);
+ dos.writeBytes(lineEnd);
+
+ // create a buffer of maximum size
+ bytesAvailable = fileInputStream.available();
+
+ bufferSize = Math.min(bytesAvailable, maxBufferSize);
+ buffer = new byte[bufferSize];
+
+ // read file and write it into form...
+ bytesRead = fileInputStream.read(buffer, 0, bufferSize);
+
+ while (bytesRead > 0) {
+ dos.write(buffer, 0, bufferSize);
+ bytesAvailable = fileInputStream.available();
+ bufferSize = Math.min(bytesAvailable, maxBufferSize);
+ bytesRead = fileInputStream.read(buffer, 0, bufferSize);
+ }
+
+ // send multipart form data necessary after file data...
+ dos.writeBytes(lineEnd);
+ dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
+
+ // Responses from the server (code and message)
+ serverResponseCode = conn.getResponseCode();
+ String serverResponseMessage = conn.getResponseMessage();
+
+ Log.i(TAG, "HTTP Response is : " + serverResponseMessage + ": " + serverResponseCode);
+
+ //close the streams
+ fileInputStream.close();
+ dos.flush();
+ dos.close();
+ if (serverResponseCode != 200) return ReturnValues.SERVER_ERROR;
+ } catch (MalformedURLException e) {
+ e.printStackTrace();
+ Log.e(TAG, "error: " + e.getMessage(), e);
+ return ReturnValues.MALFORMED_URL;
+ } catch (Exception e) {
+ e.printStackTrace();
+ Log.e(TAG, "Exception : " + e.getMessage(), e);
+ return ReturnValues.SERVER_ERROR;
+ }
+ return ReturnValues.OK;
+// }
+ }
+
+ public static String getRandomString(int length) {
+ int leftLimit = 48; // numeral '0'
+ int rightLimit = 122; // letter 'z'
+ Random random = new Random();
+
+ return random.ints(leftLimit, rightLimit + 1).filter(i -> (i <= 57 || i >= 65) && (i <= 90 || i >= 97)).limit(length).collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append).toString();
+ }
+
+ @SuppressLint("Range")
+ public static String getFileName(Context context, Uri uri) {
+ String result = null;
+ if (uri.getScheme().equals("content")) {
+ Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
+ try {
+ if (cursor != null && cursor.moveToFirst()) {
+ result = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
+ }
+ } finally {
+ cursor.close();
+ }
+ }
+ if (result == null) {
+ result = uri.getPath();
+ int cut = result.lastIndexOf('/');
+ if (cut != -1) {
+ result = result.substring(cut + 1);
+ }
+ }
+ try {
+ return URLEncoder.encode(result, String.valueOf(StandardCharsets.UTF_8));
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ return result;
+ }
+
+ public enum ReturnValues {
+ OK, NO_FILE, MALFORMED_URL, SERVER_ERROR,
+ }
+}