From 89af00ba9890fba6aa5e564cc08b674f6c90988e Mon Sep 17 00:00:00 2001 From: Page Asgardius Date: Sun, 18 Sep 2022 10:37:32 -0700 Subject: [PATCH 1/3] file sharing backend --- app/src/main/AndroidManifest.xml | 3 + .../page/s3manager/ObjectSelect.java | 25 ++--- .../java/asgardius/page/s3manager/Share.java | 94 +++++++++++++++++++ app/src/main/res/layout/activity_share.xml | 9 ++ 4 files changed, 116 insertions(+), 15 deletions(-) create mode 100644 app/src/main/java/asgardius/page/s3manager/Share.java create mode 100644 app/src/main/res/layout/activity_share.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a5e6f5..894774b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -19,6 +19,9 @@ android:supportsRtl="true" android:theme="@style/Theme.AsgardiusS3Manager" tools:targetApi="31"> + = 1) { @@ -383,14 +377,15 @@ public class ObjectSelect extends AppCompatActivity { private void share(String object) { - try { - - Intent shareIntent = new Intent(Intent.ACTION_VIEW); - shareIntent.setData(Uri.parse(object)); - startActivity(Intent.createChooser(shareIntent, "choose one")); - } catch(Exception e) { - Toast.makeText(getApplicationContext(),getResources().getString(R.string.media_list_fail), Toast.LENGTH_SHORT).show(); - } + Intent intent = new Intent(this, Share.class); + //treelevel ++; + intent.putExtra("endpoint", endpoint); + intent.putExtra("username", username); + intent.putExtra("password", password); + intent.putExtra("bucket", bucket); + intent.putExtra("object", object); + intent.putExtra("region", location); + startActivity(intent); } diff --git a/app/src/main/java/asgardius/page/s3manager/Share.java b/app/src/main/java/asgardius/page/s3manager/Share.java new file mode 100644 index 0000000..5a01179 --- /dev/null +++ b/app/src/main/java/asgardius/page/s3manager/Share.java @@ -0,0 +1,94 @@ +package asgardius.page.s3manager; + +import androidx.appcompat.app.AppCompatActivity; + +import android.os.Bundle; +import android.widget.Toast; + +import com.amazonaws.auth.AWSCredentials; +import com.amazonaws.auth.BasicAWSCredentials; +import com.amazonaws.regions.Region; +import com.amazonaws.services.s3.AmazonS3; +import com.amazonaws.services.s3.AmazonS3Client; +import com.amazonaws.services.s3.S3ClientOptions; +import com.amazonaws.services.s3.model.GeneratePresignedUrlRequest; + +import java.net.URL; +import java.util.Calendar; +import java.util.Date; + +public class Share extends AppCompatActivity { + String username, password, endpoint, bucket, object, location; + Region region; + S3ClientOptions s3ClientOptions; + AWSCredentials myCredentials; + AmazonS3 s3client; + Calendar mycal; + + public static String URLify(String str) { + str = str.trim(); + int length = str.length(); + int trueL = length; + if(str.contains(" ")) { + for(int i = 0; i < length; i++) { + if(str.charAt(i) == ' ') { + trueL = trueL + 2; + } + } + char[] oldArr = str.toCharArray(); + char[] newArr = new char[trueL]; + int x = 0; + for(int i = 0; i < length; i++) { + if(oldArr[i] == ' ') { + newArr[x] = '%'; + newArr[x+1] = '2'; + newArr[x+2] = '0'; + x += 3; + } else { + newArr[x] = oldArr[i]; + x++; + } + } + str = new String(newArr, 0, trueL); + } + return str; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_share); + mycal = Calendar.getInstance(); + endpoint = getIntent().getStringExtra("endpoint"); + username = getIntent().getStringExtra("username"); + password = getIntent().getStringExtra("password"); + bucket = getIntent().getStringExtra("bucket"); + location = getIntent().getStringExtra("region"); + object = getIntent().getStringExtra("object"); + region = Region.getRegion(location); + s3ClientOptions = S3ClientOptions.builder().build(); + myCredentials = new BasicAWSCredentials(username, password); + try { + s3client = new AmazonS3Client(myCredentials, region); + } catch (Exception e) { + Toast.makeText(getApplicationContext(),getResources().getString(R.string.media_list_fail), Toast.LENGTH_SHORT).show(); + } + s3client.setEndpoint(endpoint); + if (!endpoint.contains(getResources().getString(R.string.aws_endpoint))) { + s3ClientOptions.setPathStyleAccess(true); + } + s3client.setS3ClientOptions(s3ClientOptions); + mycal.set(Calendar.YEAR, 2022); + mycal.set(Calendar.MONTH, 8); + mycal.set(Calendar.DATE, 18); + mycal.set(Calendar.HOUR, 14); + mycal.set(Calendar.MINUTE, 15); + mycal.set(Calendar.SECOND, 28); + Date expiration = mycal.getTime(); + System.out.println(expiration); + + GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucket, object).withExpiration(expiration); + URL objectURL = s3client.generatePresignedUrl(request); + System.out.println(URLify(objectURL.toString())); + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_share.xml b/app/src/main/res/layout/activity_share.xml new file mode 100644 index 0000000..168ee50 --- /dev/null +++ b/app/src/main/res/layout/activity_share.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file From fd8693601525402b9d81a8cb56ab03844033ec82 Mon Sep 17 00:00:00 2001 From: Page Asgardius Date: Sun, 18 Sep 2022 11:37:31 -0700 Subject: [PATCH 2/3] share file frontend --- .idea/misc.xml | 1 + .../page/s3manager/ObjectSelect.java | 3 +- .../java/asgardius/page/s3manager/Share.java | 55 ++++++-- app/src/main/res/layout/activity_share.xml | 117 +++++++++++++++++- app/src/main/res/menu/object_menu.xml | 2 +- app/src/main/res/values-es/strings.xml | 11 +- app/src/main/res/values/strings.xml | 11 +- 7 files changed, 181 insertions(+), 19 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index a3f0bb8..8b5abe5 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -14,6 +14,7 @@ + diff --git a/app/src/main/java/asgardius/page/s3manager/ObjectSelect.java b/app/src/main/java/asgardius/page/s3manager/ObjectSelect.java index 31d3b56..f187c93 100644 --- a/app/src/main/java/asgardius/page/s3manager/ObjectSelect.java +++ b/app/src/main/java/asgardius/page/s3manager/ObjectSelect.java @@ -7,7 +7,6 @@ import androidx.recyclerview.widget.RecyclerView; import android.content.DialogInterface; import android.content.Intent; -import android.net.Uri; import android.os.Bundle; import android.view.MenuItem; import android.view.View; @@ -306,7 +305,7 @@ public class ObjectSelect extends AppCompatActivity { } else if (menuItem.getTitle() == getResources().getString(R.string.upload_file_here)) { //Toast.makeText(ObjectSelect.this, getResources().getString(R.string.pending_feature), Toast.LENGTH_SHORT).show(); upload(); - } else if (menuItem.getTitle() == getResources().getString(R.string.file_external)) { + } else if (menuItem.getTitle() == getResources().getString(R.string.file_share)) { share(prefix + Name.get(position).toString()); } else if (menuItem.getTitle() == getResources().getString(R.string.file_del)) { if (menuItem.getTitle() == getResources().getString(R.string.file_del)) { diff --git a/app/src/main/java/asgardius/page/s3manager/Share.java b/app/src/main/java/asgardius/page/s3manager/Share.java index 5a01179..44ecead 100644 --- a/app/src/main/java/asgardius/page/s3manager/Share.java +++ b/app/src/main/java/asgardius/page/s3manager/Share.java @@ -2,7 +2,12 @@ package asgardius.page.s3manager; import androidx.appcompat.app.AppCompatActivity; +import android.content.Intent; +import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; import android.widget.Toast; import com.amazonaws.auth.AWSCredentials; @@ -24,6 +29,9 @@ public class Share extends AppCompatActivity { AWSCredentials myCredentials; AmazonS3 s3client; Calendar mycal; + EditText datepick, monthpick, yearpick, hourpick, minutepick; + int date, month, year, hour, minute; + Button share; public static String URLify(String str) { str = str.trim(); @@ -59,6 +67,12 @@ public class Share extends AppCompatActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_share); mycal = Calendar.getInstance(); + datepick = (EditText)findViewById(R.id.Date); + monthpick = (EditText)findViewById(R.id.Month); + yearpick = (EditText)findViewById(R.id.Year); + hourpick = (EditText)findViewById(R.id.Hour); + minutepick = (EditText)findViewById(R.id.Minute); + share = (Button)findViewById(R.id.share); endpoint = getIntent().getStringExtra("endpoint"); username = getIntent().getStringExtra("username"); password = getIntent().getStringExtra("password"); @@ -78,17 +92,36 @@ public class Share extends AppCompatActivity { s3ClientOptions.setPathStyleAccess(true); } s3client.setS3ClientOptions(s3ClientOptions); - mycal.set(Calendar.YEAR, 2022); - mycal.set(Calendar.MONTH, 8); - mycal.set(Calendar.DATE, 18); - mycal.set(Calendar.HOUR, 14); - mycal.set(Calendar.MINUTE, 15); - mycal.set(Calendar.SECOND, 28); - Date expiration = mycal.getTime(); - System.out.println(expiration); + share.setOnClickListener(new View.OnClickListener(){ + @Override + public void onClick(View view) { + //buttonaction + try { + date = Integer.parseInt(datepick.getText().toString()); + month = Integer.parseInt(monthpick.getText().toString()); + year = Integer.parseInt(yearpick.getText().toString()); + hour = Integer.parseInt(hourpick.getText().toString()); + minute = Integer.parseInt(minutepick.getText().toString()); + mycal.set(Calendar.YEAR, year); + mycal.set(Calendar.MONTH, month-1); + mycal.set(Calendar.DATE, date); + mycal.set(Calendar.HOUR, hour); + mycal.set(Calendar.MINUTE, minute); + mycal.set(Calendar.SECOND, 0); + Date expiration = mycal.getTime(); + System.out.println(expiration); + GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucket, object).withExpiration(expiration); + URL objectURL = s3client.generatePresignedUrl(request); + System.out.println(URLify(objectURL.toString())); + Intent shareIntent = new Intent(Intent.ACTION_SEND); + shareIntent.setType("text/plain"); + shareIntent.putExtra(Intent.EXTRA_TEXT, URLify(objectURL.toString())); + startActivity(Intent.createChooser(shareIntent, "choose one")); + } catch (Exception e) { + Toast.makeText(getApplicationContext(),getResources().getString(R.string.invalid_expiration_date), Toast.LENGTH_SHORT).show(); + } + } - GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucket, object).withExpiration(expiration); - URL objectURL = s3client.generatePresignedUrl(request); - System.out.println(URLify(objectURL.toString())); + }); } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_share.xml b/app/src/main/res/layout/activity_share.xml index 168ee50..27942ff 100644 --- a/app/src/main/res/layout/activity_share.xml +++ b/app/src/main/res/layout/activity_share.xml @@ -1,9 +1,120 @@ - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + +