downloader template
This commit is contained in:
parent
6db815aa42
commit
a994e0c2f3
7 changed files with 254 additions and 7 deletions
|
@ -8,6 +8,7 @@
|
||||||
<entry key="app/src/main/res/layout/activity_account_add.xml" value="0.25" />
|
<entry key="app/src/main/res/layout/activity_account_add.xml" value="0.25" />
|
||||||
<entry key="app/src/main/res/layout/activity_bucket_select.xml" value="0.2" />
|
<entry key="app/src/main/res/layout/activity_bucket_select.xml" value="0.2" />
|
||||||
<entry key="app/src/main/res/layout/activity_create_bucket.xml" value="0.20260416666666667" />
|
<entry key="app/src/main/res/layout/activity_create_bucket.xml" value="0.20260416666666667" />
|
||||||
|
<entry key="app/src/main/res/layout/activity_downloader.xml" value="0.2713541666666667" />
|
||||||
<entry key="app/src/main/res/layout/activity_file_share.xml" value="0.19610507246376813" />
|
<entry key="app/src/main/res/layout/activity_file_share.xml" value="0.19610507246376813" />
|
||||||
<entry key="app/src/main/res/layout/activity_image_viewer.xml" value="0.19610507246376813" />
|
<entry key="app/src/main/res/layout/activity_image_viewer.xml" value="0.19610507246376813" />
|
||||||
<entry key="app/src/main/res/layout/activity_list_item.xml" value="0.19610507246376813" />
|
<entry key="app/src/main/res/layout/activity_list_item.xml" value="0.19610507246376813" />
|
||||||
|
@ -18,6 +19,7 @@
|
||||||
<entry key="app/src/main/res/layout/activity_video_player.xml" value="0.1" />
|
<entry key="app/src/main/res/layout/activity_video_player.xml" value="0.1" />
|
||||||
<entry key="app/src/main/res/layout/activity_web_view.xml" value="0.17119565217391305" />
|
<entry key="app/src/main/res/layout/activity_web_view.xml" value="0.17119565217391305" />
|
||||||
<entry key="app/src/main/res/layout/list_buckets.xml" value="0.19610507246376813" />
|
<entry key="app/src/main/res/layout/list_buckets.xml" value="0.19610507246376813" />
|
||||||
|
<entry key="app/src/main/res/menu/account_menu.xml" value="0.2713541666666667" />
|
||||||
<entry key="app/src/main/res/menu/bucket_menu.xml" value="0.20260416666666667" />
|
<entry key="app/src/main/res/menu/bucket_menu.xml" value="0.20260416666666667" />
|
||||||
<entry key="app/src/main/res/menu/folder_menu.xml" value="0.2713541666666667" />
|
<entry key="app/src/main/res/menu/folder_menu.xml" value="0.2713541666666667" />
|
||||||
<entry key="app/src/main/res/menu/object_menu.xml" value="0.20260416666666667" />
|
<entry key="app/src/main/res/menu/object_menu.xml" value="0.20260416666666667" />
|
||||||
|
|
|
@ -1,14 +1,195 @@
|
||||||
package asgardius.page.s3manager;
|
package asgardius.page.s3manager;
|
||||||
|
|
||||||
|
import static android.content.ContentValues.TAG;
|
||||||
|
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.app.DownloadManager;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.database.Cursor;
|
||||||
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.provider.MediaStore;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.Button;
|
||||||
|
import android.widget.EditText;
|
||||||
|
import android.widget.ProgressBar;
|
||||||
|
import android.widget.TextView;
|
||||||
|
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.google.android.material.snackbar.Snackbar;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
|
||||||
public class Downloader extends AppCompatActivity {
|
public class Downloader extends AppCompatActivity {
|
||||||
|
String username, password, endpoint, bucket, filekey, filename, prefix, location, fkey;
|
||||||
|
boolean isfolder;
|
||||||
|
int progress;
|
||||||
|
Uri fileuri, folder, uri;
|
||||||
|
EditText fprefix;
|
||||||
|
Region region;
|
||||||
|
S3ClientOptions s3ClientOptions;
|
||||||
|
AWSCredentials myCredentials;
|
||||||
|
AmazonS3 s3client;
|
||||||
|
ProgressBar simpleProgressBar;
|
||||||
|
File dfile;
|
||||||
|
Intent intent;
|
||||||
|
Button fileDownload;
|
||||||
|
Thread downloadFile;
|
||||||
|
DownloadManager downloadManager;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setContentView(R.layout.activity_downloader);
|
setContentView(R.layout.activity_downloader);
|
||||||
|
filekey = getIntent().getStringExtra("file_url");
|
||||||
|
filename = getIntent().getStringExtra("file_name");
|
||||||
|
endpoint = getIntent().getStringExtra("endpoint");
|
||||||
|
username = getIntent().getStringExtra("username");
|
||||||
|
password = getIntent().getStringExtra("password");
|
||||||
|
bucket = getIntent().getStringExtra("bucket");
|
||||||
|
location = getIntent().getStringExtra("region");
|
||||||
|
simpleProgressBar = (ProgressBar) findViewById(R.id.simpleProgressBar);
|
||||||
|
fileDownload = (Button)findViewById(R.id.filedownload);
|
||||||
|
region = Region.getRegion(location);
|
||||||
|
s3ClientOptions = S3ClientOptions.builder().build();
|
||||||
|
if (!endpoint.contains(getResources().getString(R.string.aws_endpoint))) {
|
||||||
|
s3ClientOptions.setPathStyleAccess(true);
|
||||||
|
}
|
||||||
|
myCredentials = new BasicAWSCredentials(username, password);
|
||||||
|
s3client = new AmazonS3Client(myCredentials, region);
|
||||||
|
s3client.setEndpoint(endpoint);
|
||||||
|
s3client.setS3ClientOptions(s3ClientOptions);
|
||||||
|
performFileSearch("Select download location");
|
||||||
|
fileDownload.setOnClickListener(new View.OnClickListener(){
|
||||||
|
@Override
|
||||||
|
public void onClick(View view) {
|
||||||
|
//buttonaction
|
||||||
|
simpleProgressBar.setVisibility(View.VISIBLE);
|
||||||
|
fileDownload.setText(getResources().getString(R.string.download_in_progress));
|
||||||
|
downloadFile = new Thread(new Runnable() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
simpleProgressBar.setVisibility(View.VISIBLE);
|
||||||
|
try {
|
||||||
|
//Your code goes here
|
||||||
|
//s3client.createBucket(bucket, location);
|
||||||
|
//System.out.println(fkey);
|
||||||
|
runOnUiThread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
//simpleProgressBar.setProgress(100);
|
||||||
|
simpleProgressBar.setVisibility(View.INVISIBLE);
|
||||||
|
fileDownload.setText(getResources().getString(R.string.download_success));
|
||||||
|
Toast.makeText(getApplicationContext(),getResources().getString(R.string.upload_success), Toast.LENGTH_SHORT).show();
|
||||||
|
//simpleProgressBar.setVisibility(View.INVISIBLE);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
//System.out.println("tree "+treelevel);
|
||||||
|
//System.out.println("prefix "+prefix);
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
runOnUiThread(new Runnable() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
simpleProgressBar.setVisibility(View.INVISIBLE);
|
||||||
|
fileDownload.setText(getResources().getString(R.string.retry));
|
||||||
|
Toast.makeText(getApplicationContext(),getResources().getString(R.string.media_list_fail), Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
//Toast.makeText(getApplicationContext(),getResources().getString(R.string.media_list_fail), Toast.LENGTH_SHORT).show();
|
||||||
|
//finish();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
downloadFile.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void performFileSearch(String messageTitle) {
|
||||||
|
//uri = Uri.parse("content://com.android.externalstorage.documents/document/home");
|
||||||
|
intent = new Intent();
|
||||||
|
intent.setAction(Intent.ACTION_CREATE_DOCUMENT);
|
||||||
|
//intent.addCategory(Intent.CATEGORY_OPENABLE);
|
||||||
|
//intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
|
||||||
|
//intent.putExtra("android.provider.extra.INITIAL_URI", uri);
|
||||||
|
intent.putExtra(Intent.EXTRA_TITLE, filename);
|
||||||
|
intent.setType("*/*");
|
||||||
|
((Activity) this).startActivityForResult(intent, 50);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onActivityResult(int requestCode, int resultCode, final Intent resultData) {
|
||||||
|
// The ACTION_OPEN_DOCUMENT intent was sent with the request code OPEN_DIRECTORY_REQUEST_CODE.
|
||||||
|
// If the request code seen here doesn't match, it's the response to some other intent,
|
||||||
|
// and the below code shouldn't run at all.
|
||||||
|
super.onActivityResult(requestCode, resultCode, resultData);
|
||||||
|
if (requestCode == 50) {
|
||||||
|
if (resultCode == Activity.RESULT_OK) {
|
||||||
|
// The document selected by the user won't be returned in the intent.
|
||||||
|
// Instead, a URI to that document will be contained in the return intent
|
||||||
|
// provided to this method as a parameter. Pull that uri using "resultData.getData()"
|
||||||
|
if (resultData != null && resultData.getData() != null) {
|
||||||
|
fileuri = resultData.getData();
|
||||||
|
System.out.println(fileuri.toString());
|
||||||
|
//System.out.println("File selected successfully");
|
||||||
|
//System.out.println("content://com.android.externalstorage.documents"+file.getPath());
|
||||||
|
} else {
|
||||||
|
Toast.makeText(Downloader.this, getResources().getString(R.string.file_path_fail), Toast.LENGTH_SHORT).show();
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
//System.out.println("User cancelled file browsing {}");
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private File writeContentToFile(Uri uri) throws IOException {
|
||||||
|
final File file = new File(getCacheDir(), getDisplayName(uri));
|
||||||
|
try (
|
||||||
|
final InputStream in = new FileInputStream(file);
|
||||||
|
final OutputStream out = getContentResolver().openOutputStream(uri);
|
||||||
|
) {
|
||||||
|
byte[] buffer = new byte[1024];
|
||||||
|
for (int len; (len = in.read(buffer)) != -1; ) {
|
||||||
|
out.write(buffer, 0, len);
|
||||||
|
}
|
||||||
|
return file;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getDisplayName(Uri uri) {
|
||||||
|
final String[] projection = { MediaStore.Images.Media.DISPLAY_NAME };
|
||||||
|
try (
|
||||||
|
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
|
||||||
|
){
|
||||||
|
int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DISPLAY_NAME);
|
||||||
|
if (cursor.moveToFirst()) {
|
||||||
|
return cursor.getString(columnIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// If the display name is not found for any reason, use the Uri path as a fallback.
|
||||||
|
Log.w(TAG, "Couldnt determine DISPLAY_NAME for Uri. Falling back to Uri path: " + uri.getPath());
|
||||||
|
return uri.getPath();
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -273,7 +273,12 @@ public class ObjectSelect extends AppCompatActivity {
|
||||||
public boolean onMenuItemClick(MenuItem menuItem) {
|
public boolean onMenuItemClick(MenuItem menuItem) {
|
||||||
// Toast message on menu item clicked
|
// Toast message on menu item clicked
|
||||||
//Toast.makeText(MainActivity.this, "You Clicked " + menuItem.getTitle(), Toast.LENGTH_SHORT).show();
|
//Toast.makeText(MainActivity.this, "You Clicked " + menuItem.getTitle(), Toast.LENGTH_SHORT).show();
|
||||||
if (menuItem.getTitle() == getResources().getString(R.string.upload_file_here)) {
|
if (menuItem.getTitle() == getResources().getString(R.string.download_file)) {
|
||||||
|
Toast.makeText(ObjectSelect.this, getResources().getString(R.string.pending_feature), Toast.LENGTH_SHORT).show();
|
||||||
|
//GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucket, prefix + Name.get(position).toString());
|
||||||
|
//URL objectURL = s3client.generatePresignedUrl(request);
|
||||||
|
//download(objectURL.toString(), Name.get(position).toString());
|
||||||
|
} 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();
|
//Toast.makeText(ObjectSelect.this, getResources().getString(R.string.pending_feature), Toast.LENGTH_SHORT).show();
|
||||||
upload(false);
|
upload(false);
|
||||||
} else if (menuItem.getTitle() == getResources().getString(R.string.file_external)) {
|
} else if (menuItem.getTitle() == getResources().getString(R.string.file_external)) {
|
||||||
|
@ -470,4 +475,16 @@ public class ObjectSelect extends AppCompatActivity {
|
||||||
intent.putExtra("isfolder", isfolder);
|
intent.putExtra("isfolder", isfolder);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void download(String url, String filename) {
|
||||||
|
|
||||||
|
Intent intent = new Intent(this, Downloader.class);
|
||||||
|
intent.putExtra("file_url", url);
|
||||||
|
intent.putExtra("file_name", filename);
|
||||||
|
intent.putExtra("endpoint", endpoint);
|
||||||
|
intent.putExtra("username", username);
|
||||||
|
intent.putExtra("password", password);
|
||||||
|
intent.putExtra("bucket", bucket);
|
||||||
|
startActivity(intent);
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -43,7 +43,7 @@ import java.util.List;
|
||||||
|
|
||||||
public class Uploader extends AppCompatActivity {
|
public class Uploader extends AppCompatActivity {
|
||||||
String username, password, endpoint, bucket, prefix, location, fkey;
|
String username, password, endpoint, bucket, prefix, location, fkey;
|
||||||
boolean isfolder;
|
//boolean isfolder;
|
||||||
int progress;
|
int progress;
|
||||||
Uri fileuri, folder, uri;
|
Uri fileuri, folder, uri;
|
||||||
EditText fprefix;
|
EditText fprefix;
|
||||||
|
@ -55,6 +55,7 @@ public class Uploader extends AppCompatActivity {
|
||||||
long filesize;
|
long filesize;
|
||||||
File ufile;
|
File ufile;
|
||||||
Intent intent;
|
Intent intent;
|
||||||
|
Button fileUpload;
|
||||||
private static final long MAX_SINGLE_PART_UPLOAD_BYTES = 5 * 1024 * 1024;
|
private static final long MAX_SINGLE_PART_UPLOAD_BYTES = 5 * 1024 * 1024;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -67,7 +68,7 @@ public class Uploader extends AppCompatActivity {
|
||||||
bucket = getIntent().getStringExtra("bucket");
|
bucket = getIntent().getStringExtra("bucket");
|
||||||
location = getIntent().getStringExtra("region");
|
location = getIntent().getStringExtra("region");
|
||||||
prefix = getIntent().getStringExtra("prefix");
|
prefix = getIntent().getStringExtra("prefix");
|
||||||
isfolder = getIntent().getBooleanExtra("isfolder", false);
|
//isfolder = getIntent().getBooleanExtra("isfolder", false);
|
||||||
fprefix = (EditText)findViewById(R.id.fprefix);
|
fprefix = (EditText)findViewById(R.id.fprefix);
|
||||||
region = Region.getRegion(location);
|
region = Region.getRegion(location);
|
||||||
s3ClientOptions = S3ClientOptions.builder().build();
|
s3ClientOptions = S3ClientOptions.builder().build();
|
||||||
|
@ -78,7 +79,7 @@ public class Uploader extends AppCompatActivity {
|
||||||
s3client = new AmazonS3Client(myCredentials, region);
|
s3client = new AmazonS3Client(myCredentials, region);
|
||||||
s3client.setEndpoint(endpoint);
|
s3client.setEndpoint(endpoint);
|
||||||
s3client.setS3ClientOptions(s3ClientOptions);
|
s3client.setS3ClientOptions(s3ClientOptions);
|
||||||
Button fileUpload = (Button)findViewById(R.id.fileupload);
|
fileUpload = (Button)findViewById(R.id.fileupload);
|
||||||
simpleProgressBar = (ProgressBar) findViewById(R.id.simpleProgressBar);
|
simpleProgressBar = (ProgressBar) findViewById(R.id.simpleProgressBar);
|
||||||
//Toast.makeText(Uploader.this, getResources().getString(R.string.pending_feature), Toast.LENGTH_SHORT).show();
|
//Toast.makeText(Uploader.this, getResources().getString(R.string.pending_feature), Toast.LENGTH_SHORT).show();
|
||||||
performFileSearch("Select file to upload");
|
performFileSearch("Select file to upload");
|
||||||
|
|
|
@ -1,9 +1,47 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:id="@+id/activity_main"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical"
|
||||||
tools:context=".Downloader">
|
tools:context=".Downloader">
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
<TextView
|
||||||
|
android:id="@+id/download_indicator"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textAlignment="center"
|
||||||
|
android:textSize="25sp" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/linearLayout"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="80dp"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:padding="10dp"
|
||||||
|
tools:ignore="MissingConstraints"
|
||||||
|
tools:layout_editor_absoluteX="20dp">
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/filedownload"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:text="@string/download_file"
|
||||||
|
tools:ignore="MissingConstraints" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<ProgressBar
|
||||||
|
android:id="@+id/simpleProgressBar"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
android:indeterminate="true"
|
||||||
|
android:max="100"
|
||||||
|
android:padding="20dp"
|
||||||
|
android:progress="50"
|
||||||
|
android:visibility="invisible"
|
||||||
|
tools:ignore="MissingConstraints" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
|
@ -4,6 +4,11 @@
|
||||||
<item
|
<item
|
||||||
android:id="@+id/upload_file"
|
android:id="@+id/upload_file"
|
||||||
android:title="@string/upload_file_here" />
|
android:title="@string/upload_file_here" />
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/download_file"
|
||||||
|
android:title="@string/download_file" />
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/sharefile"
|
android:id="@+id/sharefile"
|
||||||
android:title="@string/file_external" />
|
android:title="@string/file_external" />
|
||||||
|
|
|
@ -14,6 +14,9 @@
|
||||||
<string name="bucket_name">Bucket name</string>
|
<string name="bucket_name">Bucket name</string>
|
||||||
<string name="bucket_name_empty">A bucket name is required</string>
|
<string name="bucket_name_empty">A bucket name is required</string>
|
||||||
<string name="file_external">Open in</string>
|
<string name="file_external">Open in</string>
|
||||||
|
<string name="download_file">Download file</string>
|
||||||
|
<string name="download_in_progress">Download in progress</string>
|
||||||
|
<string name="download_success">File downloaded successfully</string>
|
||||||
<string name="upload_file_tobucket">Upload file to this bucket</string>
|
<string name="upload_file_tobucket">Upload file to this bucket</string>
|
||||||
<string name="upload_folder_tobucket">Upload folder to this bucket</string>
|
<string name="upload_folder_tobucket">Upload folder to this bucket</string>
|
||||||
<string name="feature_not_supported">Your device is not compatible with this feature</string>
|
<string name="feature_not_supported">Your device is not compatible with this feature</string>
|
||||||
|
|
Loading…
Reference in a new issue