diff --git a/app/src/main/java/asgardius/page/s3manager/BucketSelect.java b/app/src/main/java/asgardius/page/s3manager/BucketSelect.java index 771f256..32df96a 100644 --- a/app/src/main/java/asgardius/page/s3manager/BucketSelect.java +++ b/app/src/main/java/asgardius/page/s3manager/BucketSelect.java @@ -3,10 +3,12 @@ package asgardius.page.s3manager; import static android.media.MediaExtractor.MetricsConstants.MIME_TYPE; import static com.amazonaws.regions.Regions.US_EAST_1; +import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import android.content.DialogInterface; import android.content.Intent; import android.os.AsyncTask; import android.os.Build; @@ -24,6 +26,11 @@ import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.S3ClientOptions; import com.amazonaws.services.s3.model.Bucket; +import com.amazonaws.services.s3.model.DeleteObjectRequest; +import com.amazonaws.services.s3.model.DeleteObjectsRequest; +import com.amazonaws.services.s3.model.ListObjectsRequest; +import com.amazonaws.services.s3.model.ObjectListing; +import com.amazonaws.services.s3.model.S3ObjectSummary; import java.util.ArrayList; import java.util.List; @@ -35,6 +42,11 @@ public class BucketSelect extends AppCompatActivity { RecyclerView recyclerView; String username, password, endpoint, prefix, location, file; int treelevel; + Region region; + S3ClientOptions s3ClientOptions; + AWSCredentials myCredentials; + AmazonS3 s3client; + ProgressBar simpleProgressBar; @Override protected void onCreate(Bundle savedInstanceState) { @@ -45,18 +57,18 @@ public class BucketSelect extends AppCompatActivity { location = getIntent().getStringExtra("region"); prefix = ""; setContentView(R.layout.activity_bucket_select); - Region region = Region.getRegion("us-east-1"); - S3ClientOptions s3ClientOptions = S3ClientOptions.builder().build(); + region = Region.getRegion("us-east-1"); + s3ClientOptions = S3ClientOptions.builder().build(); if (!endpoint.contains(getResources().getString(R.string.aws_endpoint))) { s3ClientOptions.setPathStyleAccess(true); } - AWSCredentials myCredentials = new BasicAWSCredentials(username, password); - AmazonS3 s3client = new AmazonS3Client(myCredentials, region); + myCredentials = new BasicAWSCredentials(username, password); + s3client = new AmazonS3Client(myCredentials, region); s3client.setEndpoint(endpoint); s3client.setS3ClientOptions(s3ClientOptions); recyclerView = findViewById(R.id.blist); - final ProgressBar simpleProgressBar = (ProgressBar) findViewById(R.id.simpleProgressBar); + simpleProgressBar = (ProgressBar) findViewById(R.id.simpleProgressBar); // layout for vertical orientation LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getApplicationContext()); @@ -80,6 +92,11 @@ public class BucketSelect extends AppCompatActivity { //Img.add(R.drawable.ic_launcher_foreground); Img.add(R.drawable.bucket); } + if (Name.size() == 0) { + Name.add(getResources().getString(R.string.create_bucket)); + //Img.add(R.drawable.ic_launcher_foreground); + Img.add(R.drawable.create_new); + } //System.out.println(Name); runOnUiThread(new Runnable() { @@ -117,40 +134,43 @@ public class BucketSelect extends AppCompatActivity { @Override public void onClick(View view, int position) { //System.out.println("Click on "+Name.get(position).toString()); - explorer(Name.get(position).toString()); + if (Img.get(position).equals(R.drawable.bucket)) { + //go to bucket content + explorer(Name.get(position).toString()); + } else { + newBucket(); + } } @Override public void onLongClick(View view, int position) { //System.out.println("Long click on "+Name.get(position).toString()); - PopupMenu popupMenu = new PopupMenu(recyclerView.getContext(), view); + if (Img.get(position).equals(R.drawable.bucket)) { + PopupMenu popupMenu = new PopupMenu(recyclerView.getContext(), view); - // Inflating popup menu from popup_menu.xml file - popupMenu.getMenuInflater().inflate(R.menu.bucket_menu, popupMenu.getMenu()); - popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { - @Override - public boolean onMenuItemClick(MenuItem menuItem) { - // Toast message on menu item clicked - //Toast.makeText(MainActivity.this, "You Clicked " + menuItem.getTitle(), Toast.LENGTH_SHORT).show(); - if (menuItem.getTitle() == getResources().getString(R.string.upload_tobucket)) { - //upload(); - upload(Name.get(position).toString()); - //System.out.println(file); - //Toast.makeText(BucketSelect.this, intent.getData().toString(), Toast.LENGTH_SHORT).show(); + // Inflating popup menu from popup_menu.xml file + popupMenu.getMenuInflater().inflate(R.menu.bucket_menu, popupMenu.getMenu()); + popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem menuItem) { + // Toast message on menu item clicked + //Toast.makeText(MainActivity.this, "You Clicked " + menuItem.getTitle(), Toast.LENGTH_SHORT).show(); + if (menuItem.getTitle() == getResources().getString(R.string.upload_tobucket)) { + //upload(); + upload(Name.get(position).toString()); + //System.out.println(file); + //Toast.makeText(BucketSelect.this, intent.getData().toString(), Toast.LENGTH_SHORT).show(); - } else if (menuItem.getTitle() == getResources().getString(R.string.file_del)) { - Toast.makeText(BucketSelect.this, getResources().getString(R.string.pending_feature), Toast.LENGTH_SHORT).show(); - /*if (Name.size() == 1 && treelevel >= 1) { - Toast.makeText(BucketSelect.this, getResources().getString(R.string.only_item_onlist), Toast.LENGTH_SHORT).show(); - } else { - delete(prefix + Name.get(position).toString(), true); - }*/ + } else if (menuItem.getTitle() == getResources().getString(R.string.file_del)) { + //Toast.makeText(BucketSelect.this, getResources().getString(R.string.pending_feature), Toast.LENGTH_SHORT).show(); + delete(prefix + Name.get(position).toString()); + } + return true; } - return true; - } - }); - // Showing the popup menu - popupMenu.show(); + }); + // Showing the popup menu + popupMenu.show(); + } } })); } @@ -170,6 +190,86 @@ public class BucketSelect extends AppCompatActivity { } + private void delete(String bucket) { + AlertDialog.Builder builder = new AlertDialog.Builder(BucketSelect.this); + builder.setCancelable(true); + builder.setTitle(getResources().getString(R.string.file_del)); + builder.setMessage(getResources().getString(R.string.bucket_del_confirm)); + builder.setPositiveButton(android.R.string.ok, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + //Toast.makeText(ObjectSelect.this, getResources().getString(R.string.pending_feature), Toast.LENGTH_SHORT).show(); + Thread deleteBucket = new Thread(new Runnable() { + + @Override + public void run() { + try { + //Your code goes here + ListObjectsRequest orequest = new ListObjectsRequest().withBucketName(bucket).withMaxKeys(8000); + //List objects = (List) s3client.listObjects(bucket, "/"); + ObjectListing result = s3client.listObjects(orequest); + ArrayList objectl = new ArrayList(); + List objects = result.getObjectSummaries(); + boolean nextbatch = false; + while (result.isTruncated() || !nextbatch) { + if (nextbatch) { + result = s3client.listNextBatchOfObjects (result); + objects = result.getObjectSummaries(); + } else { + nextbatch = true; + } + for (S3ObjectSummary os : objects) { + objectl.add(os.getKey()); + + //i++; + } + + } + //System.out.println(object); + DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest(bucket).withKeys(objectl.toArray(new String[0])); + s3client.deleteObjects(deleteObjectsRequest); + s3client.deleteBucket(bucket); + runOnUiThread(new Runnable() { + + @Override + public void run() { + // Sending reference and data to Adapter + Toast.makeText(getApplicationContext(),getResources().getString(R.string.bucket_del_success), Toast.LENGTH_SHORT).show(); + recreate(); + + } + }); + //System.out.println("tree "+treelevel); + //System.out.println("prefix "+prefix); + + } catch (Exception e) { + e.printStackTrace(); + runOnUiThread(new Runnable() { + + @Override + public void run() { + 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(); + } + } + }); + simpleProgressBar.setVisibility(View.VISIBLE); + deleteBucket.start(); + } + }); + builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + } + }); + AlertDialog dialog = builder.create(); + dialog.show(); + } + private void upload(String bucket) { Intent intent = new Intent(this, Uploader.class); intent.putExtra("endpoint", endpoint); @@ -181,4 +281,14 @@ public class BucketSelect extends AppCompatActivity { startActivity(intent); } + private void newBucket() { + Toast.makeText(BucketSelect.this, getResources().getString(R.string.pending_feature), Toast.LENGTH_SHORT).show(); + /*Intent intent = new Intent(this, Uploader.class); + intent.putExtra("endpoint", endpoint); + intent.putExtra("username", username); + intent.putExtra("password", password); + intent.putExtra("region", location); + startActivity(intent);*/ + } + } \ No newline at end of file diff --git a/app/src/main/java/asgardius/page/s3manager/ObjectSelect.java b/app/src/main/java/asgardius/page/s3manager/ObjectSelect.java index 0b5dfc6..61eb60b 100644 --- a/app/src/main/java/asgardius/page/s3manager/ObjectSelect.java +++ b/app/src/main/java/asgardius/page/s3manager/ObjectSelect.java @@ -53,6 +53,7 @@ public class ObjectSelect extends AppCompatActivity { S3ClientOptions s3ClientOptions; AWSCredentials myCredentials; AmazonS3 s3client; + ProgressBar simpleProgressBar; @Override protected void onCreate(Bundle savedInstanceState) { @@ -78,7 +79,7 @@ public class ObjectSelect extends AppCompatActivity { recyclerView = findViewById(R.id.olist); - final ProgressBar simpleProgressBar = (ProgressBar) findViewById(R.id.simpleProgressBar); + simpleProgressBar = (ProgressBar) findViewById(R.id.simpleProgressBar); // layout for vertical orientation LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getApplicationContext()); @@ -370,7 +371,7 @@ public class ObjectSelect extends AppCompatActivity { @Override public void onClick(DialogInterface dialog, int which) { //Toast.makeText(ObjectSelect.this, getResources().getString(R.string.pending_feature), Toast.LENGTH_SHORT).show(); - Thread deleteobject = new Thread(new Runnable() { + Thread deleteObject = new Thread(new Runnable() { @Override public void run() { @@ -440,7 +441,8 @@ public class ObjectSelect extends AppCompatActivity { } } }); - deleteobject.start(); + simpleProgressBar.setVisibility(View.VISIBLE); + deleteObject.start(); } }); builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { diff --git a/app/src/main/res/drawable/create_new.png b/app/src/main/res/drawable/create_new.png new file mode 100644 index 0000000..e321210 Binary files /dev/null and b/app/src/main/res/drawable/create_new.png differ diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 682517d..015d6c6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -12,10 +12,13 @@ This feature is not implemented yet Open in Upload to this bucket + Create new bucket Upload in current folder Delete Do you want to delete this file? Do you want to delete this folder? + Do you want to delete this bucket? + Bucket deleted successfully Folder deleted successfully File deleted successfully This is the only item on this folder, you should delete the parent folder instead