remove unused classes

This commit is contained in:
Page Asgardius 2023-02-23 10:21:19 -07:00
parent 51d8da6fe5
commit b1db56938b
14 changed files with 46 additions and 3412 deletions

View file

@ -20,20 +20,6 @@
android:supportsRtl="true"
android:theme="@style/Theme.AsgardiusS3Manager"
tools:targetApi="31" >
<activity
android:name=".ObjectPolicy"
android:exported="false" />
<activity
android:name=".BucketPolicy"
android:exported="false" />
<activity
android:name=".CorsConfig"
android:configChanges="orientation|keyboardHidden|screenSize|smallestScreenSize|screenLayout|uiMode|keyboardHidden"
android:exported="false" >
<meta-data
android:name="android.app.lib_name"
android:value="" />
</activity>
<activity
android:name=".Settings"
android:configChanges="orientation|keyboardHidden|screenSize|smallestScreenSize|screenLayout|uiMode|keyboardHidden"
@ -43,40 +29,6 @@
android:name="android.app.lib_name"
android:value="" />
</activity>
<activity
android:name=".ObjectInfo"
android:configChanges="orientation|keyboardHidden|screenSize|smallestScreenSize|screenLayout|uiMode|keyboardHidden"
android:exported="false" >
<meta-data
android:name="android.app.lib_name"
android:value="" />
</activity>
<activity
android:name=".Share"
android:configChanges="orientation|keyboardHidden|screenSize|smallestScreenSize|screenLayout|uiMode|keyboardHidden"
android:exported="false" />
<activity
android:name=".Downloader"
android:configChanges="orientation|keyboardHidden|screenSize|smallestScreenSize|screenLayout|uiMode|keyboardHidden"
android:exported="false" />
<activity
android:name=".CreateBucket"
android:configChanges="orientation|keyboardHidden|screenSize|smallestScreenSize|screenLayout|uiMode|keyboardHidden"
android:exported="false"
android:label="@string/create_bucket" />
<activity
android:name=".Uploader"
android:configChanges="orientation|keyboardHidden|screenSize|smallestScreenSize|screenLayout|uiMode|keyboardHidden"
android:exported="false" />
<activity
android:name=".ImageViewer"
android:configChanges="orientation|keyboardHidden|screenSize|smallestScreenSize|screenLayout|uiMode|keyboardHidden"
android:exported="false"
android:hardwareAccelerated="false" />
<activity
android:name=".TextViewer"
android:configChanges="orientation|keyboardHidden|screenSize|smallestScreenSize|screenLayout|uiMode|keyboardHidden"
android:exported="false" />
<activity
android:name=".WebBrowser"
android:configChanges="orientation|keyboardHidden|screenSize|smallestScreenSize|screenLayout|uiMode|keyboardHidden"

View file

@ -1,192 +0,0 @@
package asgardius.page.s3music;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
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;
public class BucketPolicy extends AppCompatActivity {
String username, password, endpoint, bucket, location;
Region region;
S3ClientOptions s3ClientOptions;
AWSCredentials myCredentials;
AmazonS3 s3client;
boolean style, publicbucket;
ProgressBar simpleProgressBar;
TextView permission;
Button setpublic, setprivate;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bucket_policy);
simpleProgressBar = (ProgressBar) findViewById(R.id.simpleProgressBar);
permission = (TextView) findViewById(R.id.permission);
endpoint = getIntent().getStringExtra("endpoint");
username = getIntent().getStringExtra("username");
password = getIntent().getStringExtra("password");
bucket = getIntent().getStringExtra("bucket");
style = getIntent().getBooleanExtra("style", false);
location = getIntent().getStringExtra("region");
getSupportActionBar().setTitle(bucket+"/");
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(), e.toString(), Toast.LENGTH_SHORT).show();
}
s3client.setEndpoint(endpoint);
s3ClientOptions.setPathStyleAccess(style);
s3client.setS3ClientOptions(s3ClientOptions);
setprivate = (Button)findViewById(R.id.set_private);
setpublic = (Button)findViewById(R.id.set_public);
Thread getPolicy = new Thread(new Runnable() {
@Override
public void run() {
try {
//Your code goes here
String policy = s3client.getBucketPolicy(bucket).getPolicyText();
publicbucket = policy.contains("arn:aws:s3:::"+bucket+"/*") && policy.contains("s3:GetObject");
//System.out.println(policy);
runOnUiThread(new Runnable() {
@Override
public void run() {
//Your code goes here
if(publicbucket){
permission.setText(getResources().getString(R.string.public_bucket));
} else {
permission.setText(getResources().getString(R.string.custom_policy));
setpublic.setVisibility(View.VISIBLE);
}
setprivate.setVisibility(View.VISIBLE);
simpleProgressBar.setVisibility(View.INVISIBLE);
}
});
} catch (Exception e) {
e.printStackTrace();
runOnUiThread(new Runnable() {
@Override
public void run() {
if(e.toString().contains("NoSuchBucketPolicy")) {
permission.setText(getResources().getString(R.string.private_bucket));
setpublic.setVisibility(View.VISIBLE);
simpleProgressBar.setVisibility(View.INVISIBLE);
}
else {
Toast.makeText(getApplicationContext(),e.toString(), Toast.LENGTH_SHORT).show();
finish();
}
}
});
//Toast.makeText(getApplicationContext(),getResources().getString(R.string.media_list_fail), Toast.LENGTH_SHORT).show();
}
}
});
getPolicy.start();
setpublic.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
//buttonaction
simpleProgressBar.setVisibility(View.VISIBLE);
setPublic();
}
});
setprivate.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
//buttonaction
simpleProgressBar.setVisibility(View.VISIBLE);
setPrivate();
}
});
}
private void setPublic() {
Thread setPublic = new Thread(new Runnable() {
@Override
public void run() {
try {
//Your code goes here
String policy = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:GetBucketLocation\",\"s3:ListBucket\"],\"Resource\":[\"arn:aws:s3:::"
+bucket+"\"]},{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:GetObject\"],\"Resource\":[\"arn:aws:s3:::"+bucket+"/*\"]}]}";
s3client.setBucketPolicy(bucket, policy);
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),getResources().getString(R.string.policy_ok), Toast.LENGTH_SHORT).show();
finish();
}
});
} catch (Exception e) {
e.printStackTrace();
runOnUiThread(new Runnable() {
@Override
public void run() {
simpleProgressBar.setVisibility(View.INVISIBLE);
Toast.makeText(getApplicationContext(),getResources().getString(R.string.policy_error), Toast.LENGTH_SHORT).show();
}
});
//Toast.makeText(getApplicationContext(),getResources().getString(R.string.media_list_fail), Toast.LENGTH_SHORT).show();
}
}
});
setPublic.start();
}
private void setPrivate() {
Thread setPrivate = new Thread(new Runnable() {
@Override
public void run() {
try {
//Your code goes here
s3client.deleteBucketPolicy(bucket);
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),getResources().getString(R.string.policy_ok), Toast.LENGTH_SHORT).show();
finish();
}
});
} catch (Exception e) {
e.printStackTrace();
runOnUiThread(new Runnable() {
@Override
public void run() {
simpleProgressBar.setVisibility(View.INVISIBLE);
Toast.makeText(getApplicationContext(),getResources().getString(R.string.policy_error), Toast.LENGTH_SHORT).show();
}
});
//Toast.makeText(getApplicationContext(),getResources().getString(R.string.media_list_fail), Toast.LENGTH_SHORT).show();
}
}
});
setPrivate.start();
}
}

View file

@ -1,24 +1,15 @@
package asgardius.page.s3music;
import androidx.appcompat.app.AlertDialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.app.Activity;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.PopupMenu;
import android.widget.ProgressBar;
import android.widget.Toast;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.regions.Region;
@ -26,10 +17,6 @@ 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.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;
@ -145,62 +132,12 @@ public class BucketSelect extends AppCompatActivity {
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());
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_file_tobucket)) {
//Toast.makeText(BucketSelect.this, getResources().getString(R.string.pending_feature), Toast.LENGTH_SHORT).show();
upload(Name.get(position).toString(), false);
} else if (menuItem.getTitle() == getResources().getString(R.string.upload_folder_tobucket)) {
//Toast.makeText(BucketSelect.this, getResources().getString(R.string.pending_feature), Toast.LENGTH_SHORT).show();
upload(Name.get(position).toString(), true);
} else if (menuItem.getTitle() == getResources().getString(R.string.create_link)) {
share(Name.get(position).toString());
} else if (menuItem.getTitle() == getResources().getString(R.string.download_bucket)) {
//Toast.makeText(BucketSelect.this, getResources().getString(R.string.pending_feature), Toast.LENGTH_SHORT).show();
download(Name.get(position).toString());
} else if (menuItem.getTitle() == getResources().getString(R.string.create_bucket)) {
//upload();
newBucket();
//System.out.println(file);
//Toast.makeText(BucketSelect.this, intent.getData().toString(), Toast.LENGTH_SHORT).show();
} else if (menuItem.getTitle() == getResources().getString(R.string.object_info)) {
objectInfo(Name.get(position).toString());
} else if (menuItem.getTitle() == getResources().getString(R.string.copy_name)) {
copyName(Name.get(position).toString());
} else if (menuItem.getTitle() == getResources().getString(R.string.cors_config)) {
corsConfig(Name.get(position).toString());
} else if (menuItem.getTitle() == getResources().getString(R.string.bucket_policy)) {
policyConfig(Name.get(position).toString());
} 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;
}
});
// Showing the popup menu
popupMenu.show();
}
}
}));
}
@ -227,198 +164,4 @@ public class BucketSelect extends AppCompatActivity {
}
private void share(String bucket) {
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("title", bucket);
intent.putExtra("region", location);
intent.putExtra("videotime", videotime);
intent.putExtra("playlisttime", playlisttime);
intent.putExtra("style", style);
startActivity(intent);
}
private void delete(String bucket) {
AlertDialog.Builder builder = new AlertDialog.Builder(BucketSelect.this);
builder.setCancelable(true);
builder.setTitle(bucket);
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(1000);
//List<S3Object> objects = (List<S3Object>) s3client.listObjects(bucket, "/");
ObjectListing result = s3client.listObjects(orequest);
ArrayList<String> objectl = new ArrayList<String>();
List<S3ObjectSummary> objects = result.getObjectSummaries();
for (S3ObjectSummary os : objects) {
objectl.add(os.getKey());
}
if (objectl.size() >= 1) {
DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest(bucket).withKeys(objectl.toArray(new String[0]));
s3client.deleteObjects(deleteObjectsRequest);
}
while (result.isTruncated()) {
objectl = new ArrayList<String>();
result = s3client.listNextBatchOfObjects (result);
objects = result.getObjectSummaries();
for (S3ObjectSummary os : objects) {
objectl.add(os.getKey());
//i++;
}
DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest(bucket).withKeys(objectl.toArray(new String[0]));
s3client.deleteObjects(deleteObjectsRequest);
}
//System.out.println("bucket items: " + objectl.size());
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(),e.toString(), 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, boolean isfolder) {
Intent intent = new Intent(this, Uploader.class);
intent.putExtra("endpoint", endpoint);
intent.putExtra("username", username);
intent.putExtra("password", password);
intent.putExtra("bucket", bucket);
intent.putExtra("prefix", prefix);
intent.putExtra("region", location);
intent.putExtra("style", style);
intent.putExtra("isfolder", isfolder);
startActivity(intent);
}
private void objectInfo(String bucket) {
Intent intent = new Intent(this, ObjectInfo.class);
//treelevel ++;
intent.putExtra("endpoint", endpoint);
intent.putExtra("username", username);
intent.putExtra("password", password);
intent.putExtra("bucket", bucket);
intent.putExtra("region", location);
intent.putExtra("style", style);
startActivity(intent);
}
private void newBucket() {
Intent intent = new Intent(this, CreateBucket.class);
intent.putExtra("endpoint", endpoint);
intent.putExtra("username", username);
intent.putExtra("password", password);
intent.putExtra("region", location);
intent.putExtra("style", style);
//startActivity(intent);
((Activity) this).startActivityForResult(intent, 25);
}
private void download(String bucket) {
Intent intent = new Intent(this, Downloader.class);
intent.putExtra("endpoint", endpoint);
intent.putExtra("username", username);
intent.putExtra("password", password);
intent.putExtra("prefix", prefix);
intent.putExtra("region", location);
intent.putExtra("style", style);
intent.putExtra("bucket", bucket);
intent.putExtra("isfolder", true);
startActivity(intent);
}
private void corsConfig(String bucket) {
Intent intent = new Intent(this, CorsConfig.class);
intent.putExtra("endpoint", endpoint);
intent.putExtra("username", username);
intent.putExtra("password", password);
intent.putExtra("bucket", bucket);
intent.putExtra("region", location);
intent.putExtra("style", style);
intent.putExtra("pdfendpoint", pdfendpoint);
startActivity(intent);
}
private void policyConfig(String bucket) {
Intent intent = new Intent(this, BucketPolicy.class);
intent.putExtra("endpoint", endpoint);
intent.putExtra("username", username);
intent.putExtra("password", password);
intent.putExtra("bucket", bucket);
intent.putExtra("region", location);
intent.putExtra("style", style);
intent.putExtra("pdfendpoint", pdfendpoint);
startActivity(intent);
}
public void copyName (String name) {
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("name", name);
clipboard.setPrimaryClip(clip);
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.S_V2) {
Toast.makeText(getApplicationContext(),getResources().getString(R.string.copy_ok), Toast.LENGTH_SHORT).show();
}
}
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 == 25 && resultCode == 25) {
recreate();
}
}
}

View file

@ -1,278 +0,0 @@
package asgardius.page.s3music;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
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.BucketCrossOriginConfiguration;
import com.amazonaws.services.s3.model.CORSRule;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
public class CorsConfig extends AppCompatActivity {
String username, password, endpoint, bucket, location;
URI pdfendpoint;
Region region;
S3ClientOptions s3ClientOptions;
AWSCredentials myCredentials;
AmazonS3 s3client;
ProgressBar simpleProgressBar;
BucketCrossOriginConfiguration bucketcors;
boolean style;
boolean allorigins, pdfcompatible, found = false;
TextView origins;
Button allowall, allowpdf, deletecors;
BucketCrossOriginConfiguration corsconfig;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cors_config);
simpleProgressBar = (ProgressBar) findViewById(R.id.simpleProgressBar);
endpoint = getIntent().getStringExtra("endpoint");
username = getIntent().getStringExtra("username");
password = getIntent().getStringExtra("password");
bucket = getIntent().getStringExtra("bucket");
style = getIntent().getBooleanExtra("style", false);
location = getIntent().getStringExtra("region");
allowall = (Button)findViewById(R.id.allow_all);
allowpdf = (Button)findViewById(R.id.allow_pdf);
deletecors = (Button)findViewById(R.id.delete_cors);
try {
pdfendpoint = new URI(getIntent().getStringExtra("pdfendpoint"));
} catch (URISyntaxException e) {
e.printStackTrace();
}
getSupportActionBar().setTitle(bucket+"/");
region = Region.getRegion(location);
s3ClientOptions = S3ClientOptions.builder().build();
myCredentials = new BasicAWSCredentials(username, password);
origins = (TextView) findViewById(R.id.origins);
try {
s3client = new AmazonS3Client(myCredentials, region);
} catch (Exception e) {
Toast.makeText(getApplicationContext(),e.toString(), Toast.LENGTH_SHORT).show();
}
s3client.setEndpoint(endpoint);
s3ClientOptions.setPathStyleAccess(style);
s3client.setS3ClientOptions(s3ClientOptions);
Thread getCors = new Thread(new Runnable() {
@Override
public void run() {
try {
//Your code goes here
bucketcors = s3client.getBucketCrossOriginConfiguration(bucket);
if (bucketcors != null) {
List<CORSRule> corsRules = bucketcors.getRules();
if (!corsRules.isEmpty()) {
found = true;
for (CORSRule rule: corsRules) {
//System.out.println("allowOrigins: "+rule.getAllowedOrigins());
//System.out.println("AllowedMethod: "+rule.getAllowedMethods());
if (rule.getAllowedOrigins().toString().equals("[*]")) {
allorigins = true;
} else if (rule.getAllowedOrigins().toString().contains("https://"+pdfendpoint.getHost())) {
pdfcompatible = true;
}
}
}
}
runOnUiThread(new Runnable() {
@Override
public void run() {
simpleProgressBar.setVisibility(View.INVISIBLE);
if (allorigins) {
origins.setText(getResources().getString(R.string.cors_all));
deletecors.setVisibility(View.VISIBLE);
} else if (pdfcompatible) {
origins.setText(getResources().getString(R.string.cors_pdf));
deletecors.setVisibility(View.VISIBLE);
allowall.setVisibility(View.VISIBLE);
} else if (found) {
origins.setText(getResources().getString(R.string.cors_npdf));
deletecors.setVisibility(View.VISIBLE);
allowpdf.setVisibility(View.VISIBLE);
allowall.setVisibility(View.VISIBLE);
} else {
origins.setText(getResources().getString(R.string.cors_none));
allowall.setVisibility(View.VISIBLE);
allowpdf.setVisibility(View.VISIBLE);
}
}
});
} catch (Exception e) {
e.printStackTrace();
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),e.toString(), Toast.LENGTH_SHORT).show();
}
});
//Toast.makeText(getApplicationContext(),getResources().getString(R.string.media_list_fail), Toast.LENGTH_SHORT).show();
finish();
}
}
});
getCors.start();
allowall.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
//buttonaction
simpleProgressBar.setVisibility(View.VISIBLE);
setAllowall();
}
});
allowpdf.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
//buttonaction
simpleProgressBar.setVisibility(View.VISIBLE);
setAllowpdf();
}
});
deletecors.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
//buttonaction
simpleProgressBar.setVisibility(View.VISIBLE);
setDeletecors();
}
});
}
private void setAllowall() {
Thread addAll = new Thread(new Runnable() {
@Override
public void run() {
try {
//Your code goes here
List<CORSRule.AllowedMethods> allowMethods = new ArrayList<>();
allowMethods.add(CORSRule.AllowedMethods.GET);
List<String> allowOrigins = new ArrayList<>();
allowOrigins.add("*");
CORSRule corsRules = new CORSRule().withAllowedMethods(allowMethods).withAllowedOrigins(allowOrigins);
corsconfig = new BucketCrossOriginConfiguration().withRules(corsRules);
s3client.setBucketCrossOriginConfiguration(bucket, corsconfig);
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),getResources().getString(R.string.policy_ok), Toast.LENGTH_SHORT).show();
finish();
}
});
} catch (Exception e) {
e.printStackTrace();
runOnUiThread(new Runnable() {
@Override
public void run() {
simpleProgressBar.setVisibility(View.INVISIBLE);
Toast.makeText(getApplicationContext(),getResources().getString(R.string.policy_error), Toast.LENGTH_SHORT).show();
}
});
//Toast.makeText(getApplicationContext(),getResources().getString(R.string.media_list_fail), Toast.LENGTH_SHORT).show();
}
}
});
addAll.start();
}
private void setAllowpdf() {
Thread addPdf = new Thread(new Runnable() {
@Override
public void run() {
try {
//Your code goes here
List<CORSRule.AllowedMethods> allowMethods = new ArrayList<>();
allowMethods.add(CORSRule.AllowedMethods.GET);
List<String> allowOrigins = new ArrayList<>();
allowOrigins.add("https://"+pdfendpoint.getHost());
CORSRule corsRules = new CORSRule().withAllowedMethods(allowMethods).withAllowedOrigins(allowOrigins);
corsconfig = new BucketCrossOriginConfiguration().withRules(corsRules);
s3client.setBucketCrossOriginConfiguration(bucket, corsconfig);
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),getResources().getString(R.string.policy_ok), Toast.LENGTH_SHORT).show();
finish();
}
});
} catch (Exception e) {
e.printStackTrace();
runOnUiThread(new Runnable() {
@Override
public void run() {
simpleProgressBar.setVisibility(View.INVISIBLE);
Toast.makeText(getApplicationContext(),getResources().getString(R.string.policy_error), Toast.LENGTH_SHORT).show();
}
});
//Toast.makeText(getApplicationContext(),getResources().getString(R.string.media_list_fail), Toast.LENGTH_SHORT).show();
}
}
});
addPdf.start();
}
private void setDeletecors() {
Thread delCors = new Thread(new Runnable() {
@Override
public void run() {
try {
//Your code goes here
s3client.deleteBucketCrossOriginConfiguration(bucket);
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),getResources().getString(R.string.policy_ok), Toast.LENGTH_SHORT).show();
finish();
}
});
} catch (Exception e) {
e.printStackTrace();
runOnUiThread(new Runnable() {
@Override
public void run() {
simpleProgressBar.setVisibility(View.INVISIBLE);
Toast.makeText(getApplicationContext(),getResources().getString(R.string.policy_error), Toast.LENGTH_SHORT).show();
}
});
//Toast.makeText(getApplicationContext(),getResources().getString(R.string.media_list_fail), Toast.LENGTH_SHORT).show();
}
}
});
delCors.start();
}
}

View file

@ -1,110 +0,0 @@
package asgardius.page.s3music;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
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;
public class CreateBucket extends AppCompatActivity {
String username, password, endpoint, bucket, location;
boolean style;
EditText bname;
Region region;
S3ClientOptions s3ClientOptions;
AWSCredentials myCredentials;
AmazonS3 s3client;
ProgressBar simpleProgressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_create_bucket);
endpoint = getIntent().getStringExtra("endpoint");
username = getIntent().getStringExtra("username");
password = getIntent().getStringExtra("password");
location = getIntent().getStringExtra("region");
style = getIntent().getBooleanExtra("style", false);
region = Region.getRegion("us-east-1");
s3ClientOptions = S3ClientOptions.builder().build();
s3ClientOptions.setPathStyleAccess(style);
myCredentials = new BasicAWSCredentials(username, password);
s3client = new AmazonS3Client(myCredentials, region);
s3client.setEndpoint(endpoint);
s3client.setS3ClientOptions(s3ClientOptions);
bname = (EditText)findViewById(R.id.bname);
Button cbucket = (Button)findViewById(R.id.cbucket);
simpleProgressBar = (ProgressBar) findViewById(R.id.simpleProgressBar);
cbucket.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
//buttonaction
bucket = bname.getText().toString();
if (bucket.equals("")) {
Toast.makeText(CreateBucket.this, getResources().getString(R.string.bucket_name_empty), Toast.LENGTH_SHORT).show();
} else {
//Toast.makeText(CreateBucket.this, getResources().getString(R.string.pending_feature), Toast.LENGTH_SHORT).show();
Thread newBucket = new Thread(new Runnable() {
@Override
public void run() {
try {
//Your code goes here
s3client.createBucket(bucket, location);
runOnUiThread(new Runnable() {
@Override
public void run() {
// Sending reference and data to Adapter
setResult(25);
Toast.makeText(getApplicationContext(),getResources().getString(R.string.create_bucket_success), Toast.LENGTH_SHORT).show();
finish();
//mainmenu();
}
});
//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(),e.toString(), Toast.LENGTH_SHORT).show();
}
});
//Toast.makeText(getApplicationContext(),getResources().getString(R.string.media_list_fail), Toast.LENGTH_SHORT).show();
finish();
}
}
});
simpleProgressBar.setVisibility(View.VISIBLE);
newBucket.start();
}
}
});
}
/*private void mainmenu() {
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
}*/
}

View file

@ -1,358 +0,0 @@
package asgardius.page.s3music;
import static android.content.ContentValues.TAG;
import androidx.appcompat.app.AppCompatActivity;
import androidx.documentfile.provider.DocumentFile;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.PowerManager;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
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.ListObjectsRequest;
import com.amazonaws.services.s3.model.ObjectListing;
import com.amazonaws.services.s3.model.S3Object;
import com.amazonaws.services.s3.model.S3ObjectSummary;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
public class Downloader extends AppCompatActivity {
String username, password, endpoint, bucket, filename, prefix, location;
Uri fileuri, filepath;
Region region;
String[] folder;
S3ClientOptions s3ClientOptions;
AWSCredentials myCredentials;
AmazonS3 s3client;
ProgressBar simpleProgressBar;
ListObjectsRequest orequest;
Intent intent;
Button fileDownload;
Thread downloadFile, downloadProgress;
S3Object object;
DocumentFile document;
boolean started = false;
boolean cancel = false;
boolean style, isfolder;
long filesize = 0;
long objectsize;
long transfered = 0;
private WifiManager.WifiLock mWifiLock;
private PowerManager.WakeLock mWakeLock;
private PowerManager powerManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_downloader);
// create Wifi and wake locks
mWifiLock = ((WifiManager) this.getApplicationContext().getSystemService(Context.WIFI_SERVICE)).createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF, "Transistor:wifi_lock");
powerManager = (PowerManager) getSystemService(POWER_SERVICE);
mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Transistor:wake_lock");
filename = getIntent().getStringExtra("filename");
endpoint = getIntent().getStringExtra("endpoint");
username = getIntent().getStringExtra("username");
password = getIntent().getStringExtra("password");
bucket = getIntent().getStringExtra("bucket");
location = getIntent().getStringExtra("region");
style = getIntent().getBooleanExtra("style", false);
isfolder = getIntent().getBooleanExtra("isfolder", false);
prefix = getIntent().getStringExtra("prefix");
if(isfolder) {
getSupportActionBar().setTitle(getResources().getString(R.string.download_files));
} else {
getSupportActionBar().setTitle(getResources().getString(R.string.download_file));
}
simpleProgressBar = (ProgressBar) findViewById(R.id.simpleProgressBar);
fileDownload = (Button)findViewById(R.id.filedownload);
region = Region.getRegion(location);
s3ClientOptions = S3ClientOptions.builder().build();
s3ClientOptions.setPathStyleAccess(style);
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
if (started) {
cancel = true;
downloadFile.interrupt();
//simpleProgressBar.setVisibility(View.INVISIBLE);
} else {
downloadFile();
}
}
});
}
private void downloadFile () {
started = true;
simpleProgressBar.setVisibility(View.VISIBLE);
//fileDownload.setEnabled(false);
fileDownload.setText(getResources().getString(R.string.cancel_download));
//Acquiring WakeLock and WifiLock if not held
if (!mWifiLock.isHeld()) {
mWifiLock.acquire();
//System.out.println("WifiLock acquired");
}
if (!mWakeLock.isHeld()) {
mWakeLock.acquire();
//System.out.println("WakeLock acquired");
}
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);
if (isfolder) {
if (prefix == null) {
orequest = new ListObjectsRequest().withBucketName(bucket).withMaxKeys(1000);
} else {
orequest = new ListObjectsRequest().withBucketName(bucket).withPrefix(prefix).withMaxKeys(1000);
}
ArrayList<String> objectlist = new ArrayList<String>();
ObjectListing result = s3client.listObjects(orequest);
List<S3ObjectSummary> objects = result.getObjectSummaries();
for (S3ObjectSummary os : objects) {
objectlist.add(os.getKey());
objectsize = os.getSize();
if (objectsize%1024 == 0) {
filesize = filesize+(objectsize/1024);
} else {
filesize = filesize+(objectsize/1024)+1;
}
}
while (result.isTruncated()) {
result = s3client.listNextBatchOfObjects (result);
objects = result.getObjectSummaries();
for (S3ObjectSummary os : objects) {
objectlist.add(os.getKey());
objectsize = os.getSize();
if (objectsize%1024 == 0) {
filesize = filesize+(objectsize/1024);
} else {
filesize = filesize+(objectsize/1024)+1;
}
}
}
for (String os : objectlist) {
document = DocumentFile.fromTreeUri(getApplicationContext(), fileuri);
object = s3client.getObject(bucket, os);
if (os.replace(prefix, "").contains("/")) {
folder = os.replace(prefix, "").split("/");
for (int i = 0; i < folder.length-1; i++) {
DocumentFile subfolder = document.findFile(folder[i].replace("/", ""));
if (subfolder != null) {
document = subfolder;
} else {
document = document.createDirectory(folder[i].replace("/", ""));
}
}
filepath = document.createFile(null, folder[folder.length-1]).getUri();
} else {
filepath = document.createFile(null, os.replace(prefix, "")).getUri();
}
writeContentToFile(filepath, object);
}
} else {
object = s3client.getObject(bucket, prefix+filename);
filesize = (object.getObjectMetadata().getContentLength())/1024;
writeContentToFile(fileuri, object);
}
runOnUiThread(new Runnable() {
@Override
public void run() {
//simpleProgressBar.setProgress(100);
//Releasing WifiLock and WakeLock if held
if (mWifiLock.isHeld()) {
mWifiLock.release();
//System.out.println("WifiLock released");
}
if (mWakeLock.isHeld()) {
mWakeLock.release();
//System.out.println("WakeLock released");
}
simpleProgressBar.setProgress(100);
if (isfolder) {
fileDownload.setText(getResources().getString(R.string.batch_download_success));
} else {
fileDownload.setText(getResources().getString(R.string.download_success));
}
fileDownload.setEnabled(false);
//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() {
//Releasing WifiLock and WakeLock if held
if (mWifiLock.isHeld()) {
mWifiLock.release();
//System.out.println("WifiLock released");
}
if (mWakeLock.isHeld()) {
mWakeLock.release();
//System.out.println("WakeLock released");
}
if (cancel) {
fileDownload.setText(getResources().getString(R.string.download_canceled));
} else {
fileDownload.setText(getResources().getString(R.string.download_failed));
}
fileDownload.setEnabled(false);
}
});
//Toast.makeText(getApplicationContext(),getResources().getString(R.string.media_list_fail), Toast.LENGTH_SHORT).show();
//finish();
}
}
});
downloadProgress = new Thread(new Runnable() {
@Override
public void run() {
try {
//Your code goes here
while (fileDownload.isEnabled()) {
try {
if (filesize != 0) {
simpleProgressBar.setProgress((int)((transfered*100)/filesize));
}
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
}
}
} catch (Exception e) {
e.printStackTrace();
//Toast.makeText(getApplicationContext(),getResources().getString(R.string.media_list_fail), Toast.LENGTH_SHORT).show();
//finish();
}
}
});
downloadFile.start();
downloadProgress.start();
}
private void performFileSearch(String messageTitle) {
//uri = Uri.parse("content://com.android.externalstorage.documents/document/home");
intent = new Intent();
if (isfolder) {
intent.setAction(Intent.ACTION_OPEN_DOCUMENT_TREE);
} else {
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 onDestroy() {
if (!mWifiLock.isHeld()) {
mWifiLock.acquire();
//System.out.println("WifiLock acquired");
}
if (!mWakeLock.isHeld()) {
mWakeLock.acquire();
//System.out.println("WakeLock acquired");
}
super.onDestroy();
}
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());
downloadFile();
//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 void writeContentToFile(Uri uri, S3Object object) throws IOException {
try (
final InputStream in = object.getObjectContent();
final OutputStream out = getContentResolver().openOutputStream(uri);
) {
byte[] buffer = new byte[1024];
for (int len; (len = in.read(buffer)) != -1; ) {
out.write(buffer, 0, len);
transfered ++;
}
}
}
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();
}
}

View file

@ -1,136 +0,0 @@
package asgardius.page.s3music;
import android.annotation.SuppressLint;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.ProgressBar;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.otaliastudios.zoom.ZoomImageView;
import java.net.URL;
public class ImageViewer extends AppCompatActivity {
String videoURL, title;
ZoomImageView iv;
boolean controls = false;
float cursorx, cursory;
@SuppressLint("ClickableViewAccessibility")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_image_viewer);
videoURL = getIntent().getStringExtra("video_url");
title = getIntent().getStringExtra("title");
getSupportActionBar().setTitle(title);
final ProgressBar simpleProgressBar = (ProgressBar) findViewById(R.id.simpleProgressBar);
iv = (ZoomImageView) findViewById(R.id.imageViewer);
//System.out.println(videoURL);
Thread imgread = new Thread(new Runnable() {
@Override
public void run() {
try {
//Your code goes here
URL thumb_u = new URL(videoURL);
Drawable thumb_d = Drawable.createFromStream(thumb_u.openStream(), "src");
runOnUiThread(new Runnable() {
@Override
public void run() {
simpleProgressBar.setVisibility(View.INVISIBLE);
iv.setImageDrawable(thumb_d);
}
});
} catch (OutOfMemoryError e) {
e.printStackTrace();
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),getResources().getString(R.string.picture_too_big), Toast.LENGTH_SHORT).show();
finish();
}
});
finish();
} catch (Exception e) {
e.printStackTrace();
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),e.toString(), Toast.LENGTH_SHORT).show();
finish();
}
});
finish();
}
}
});
imgread.start();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
getWindow().getAttributes().layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
}
iv.setOnTouchListener((v, event) -> {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
cursorx = event.getX();
cursory = event.getY();
iv.performClick();
return true;
} else if (event.getAction() == MotionEvent.ACTION_UP) {
if(Math.abs(event.getX() - cursorx) < 5 || Math.abs(event.getY() - cursory) < 5) {
if(controls) {
controls = false;
hideSystemBars();
}
else {
controls = true;
showSystemBars();
}
}
return true;
}
return false;
});
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
controls = false;
hideSystemBars();
}
private void hideSystemBars() {
// Set the IMMERSIVE flag.
// Set the content to appear under the system bars so that the content
// doesn't resize when the system bars hide and show.
View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar
| View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
| View.SYSTEM_UI_FLAG_IMMERSIVE);
}
private void showSystemBars() {
View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
}
}

View file

@ -1,150 +0,0 @@
package asgardius.page.s3music;
import android.os.Bundle;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
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.ListObjectsRequest;
import com.amazonaws.services.s3.model.ObjectListing;
import com.amazonaws.services.s3.model.S3ObjectSummary;
import java.util.List;
public class ObjectInfo extends AppCompatActivity {
String username, password, endpoint, bucket, object, location, title;
Region region;
S3ClientOptions s3ClientOptions;
AWSCredentials myCredentials;
AmazonS3 s3client;
ProgressBar simpleProgressBar;
TextView filesize, filesizeinfo, objectcount;
boolean isobject, isfolder, style;
long totalSize = 0;
int totalItems = 0;
ListObjectsRequest orequest;
long KiB, MiB, GiB;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_object_info);
KiB = 1024;
MiB = 1024 * KiB;
GiB = 1024 * MiB;
simpleProgressBar = (ProgressBar) findViewById(R.id.simpleProgressBar);
filesize = (TextView) findViewById(R.id.size);
filesizeinfo = (TextView) findViewById(R.id.size_info);
objectcount = (TextView) findViewById(R.id.object_count);
endpoint = getIntent().getStringExtra("endpoint");
title = getIntent().getStringExtra("title");
username = getIntent().getStringExtra("username");
password = getIntent().getStringExtra("password");
bucket = getIntent().getStringExtra("bucket");
style = getIntent().getBooleanExtra("style", false);
location = getIntent().getStringExtra("region");
object = getIntent().getStringExtra("object");
if (object == null) {
getSupportActionBar().setTitle(bucket+"/");
} else {
getSupportActionBar().setTitle(title);
}
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(),e.toString(), Toast.LENGTH_SHORT).show();
}
s3client.setEndpoint(endpoint);
s3ClientOptions.setPathStyleAccess(style);
s3client.setS3ClientOptions(s3ClientOptions);
Thread getInfo = new Thread(new Runnable() {
@Override
public void run() {
try {
//Your code goes here
if (object == null) {
isobject = false;
orequest = new ListObjectsRequest().withBucketName(bucket).withMaxKeys(1000);
} else {
isobject = true;
if (object.endsWith("/")) {
isfolder = true;
} else {
isfolder = false;
}
orequest = new ListObjectsRequest().withBucketName(bucket).withPrefix(object).withMaxKeys(1000);
}
ObjectListing result = s3client.listObjects(orequest);
List<S3ObjectSummary> objects = result.getObjectSummaries();
for (S3ObjectSummary os : objects) {
totalSize += os.getSize();
totalItems++;
}
while (result.isTruncated()) {
result = s3client.listNextBatchOfObjects (result);
objects = result.getObjectSummaries();
for (S3ObjectSummary os : objects) {
totalSize += os.getSize();
totalItems++;
}
}
runOnUiThread(new Runnable() {
@Override
public void run() {
if (isobject) {
if (isfolder) {
filesizeinfo.setText(getResources().getString(R.string.folder_size));
objectcount.setText(totalItems+" "+getResources().getString(R.string.file_count));
} else {
filesizeinfo.setText(getResources().getString(R.string.file_size));
}
} else {
filesizeinfo.setText(getResources().getString(R.string.bucket_size));
objectcount.setText(totalItems+" "+getResources().getString(R.string.file_count));
}
if (totalSize >= GiB) {
filesize.setText(Long.toString(totalSize/GiB)+" GiB");
} else if (totalSize >= MiB) {
filesize.setText(Long.toString(totalSize/MiB)+" MiB");
} else if (totalSize >= KiB) {
filesize.setText(Long.toString(totalSize/KiB)+" KiB");
} else {
filesize.setText(Long.toString(totalSize)+" Bytes");
}
simpleProgressBar.setVisibility(View.INVISIBLE);
}
});
} catch (Exception e) {
e.printStackTrace();
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),e.toString(), Toast.LENGTH_SHORT).show();
}
});
//Toast.makeText(getApplicationContext(),getResources().getString(R.string.media_list_fail), Toast.LENGTH_SHORT).show();
finish();
}
}
});
getInfo.start();
}
}

View file

@ -1,260 +0,0 @@
package asgardius.page.s3music;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
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;
public class ObjectPolicy extends AppCompatActivity {
String username, password, endpoint, bucket, location, filename, title, policy;
Region region;
S3ClientOptions s3ClientOptions;
AWSCredentials myCredentials;
AmazonS3 s3client;
boolean style, publicbucket, publicobject, parent;
ProgressBar simpleProgressBar;
TextView permission;
Button setpublic, setprivate;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_object_policy);
simpleProgressBar = (ProgressBar) findViewById(R.id.simpleProgressBar);
permission = (TextView) findViewById(R.id.permission);
endpoint = getIntent().getStringExtra("endpoint");
filename = getIntent().getStringExtra("filename");
username = getIntent().getStringExtra("username");
password = getIntent().getStringExtra("password");
bucket = getIntent().getStringExtra("bucket");
title = getIntent().getStringExtra("title");
style = getIntent().getBooleanExtra("style", false);
location = getIntent().getStringExtra("region");
getSupportActionBar().setTitle(title);
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(), e.toString(), Toast.LENGTH_SHORT).show();
}
s3client.setEndpoint(endpoint);
s3ClientOptions.setPathStyleAccess(style);
s3client.setS3ClientOptions(s3ClientOptions);
setprivate = (Button)findViewById(R.id.set_private);
setpublic = (Button)findViewById(R.id.set_public);
Thread getPolicy = new Thread(new Runnable() {
@Override
public void run() {
try {
//Your code goes here
policy = s3client.getBucketPolicy(bucket).getPolicyText();
publicbucket = policy.contains("arn:aws:s3:::"+bucket+"/*") && policy.contains("s3:GetObject");
publicobject = false;
parent = true;
if(!publicbucket && policy.contains("s3:GetObject")) {
if((policy.contains("\"arn:aws:s3:::"+bucket+"/"+filename+"\"") || policy.contains("\"arn:aws:s3:::"+bucket+"/"+filename+"*\"") || policy.contains("\"arn:aws:s3:::"+bucket+"/"+filename+"**\"")) && policy.contains("s3:GetObject")) {
publicobject = true;
parent = false;
} else {
String[] path = filename.split("/");
String filepath = "";
for (int i = 0; i < path.length-1; i++) {
filepath = filepath+path[i]+"/";
//System.out.println(filepath);
if(policy.contains("\"arn:aws:s3:::"+bucket+"/"+filepath+"*\"") || policy.contains("\"arn:aws:s3:::"+bucket+"/"+filepath+"**\"")) {
publicobject = true;
i = path.length;
}
}
}
}
//System.out.println(policy);
runOnUiThread(new Runnable() {
@Override
public void run() {
//Your code goes here
if(publicbucket){
permission.setText(getResources().getString(R.string.public_object));
setprivate.setEnabled(false);
setprivate.setText(getResources().getString(R.string.parent_policy));
setprivate.setVisibility(View.VISIBLE);
}else if(publicobject) {
permission.setText(getResources().getString(R.string.public_object));
if(parent) {
setprivate.setEnabled(false);
setprivate.setText(getResources().getString(R.string.parent_policy));
}
setprivate.setVisibility(View.VISIBLE);
}else {
permission.setText(getResources().getString(R.string.private_object));
setpublic.setVisibility(View.VISIBLE);
}
simpleProgressBar.setVisibility(View.INVISIBLE);
}
});
} catch (Exception e) {
e.printStackTrace();
runOnUiThread(new Runnable() {
@Override
public void run() {
if(e.toString().contains("NoSuchBucketPolicy")) {
permission.setText(getResources().getString(R.string.private_object));
setpublic.setVisibility(View.VISIBLE);
simpleProgressBar.setVisibility(View.INVISIBLE);
}
else {
Toast.makeText(getApplicationContext(),e.toString(), Toast.LENGTH_SHORT).show();
finish();
}
}
});
//Toast.makeText(getApplicationContext(),getResources().getString(R.string.media_list_fail), Toast.LENGTH_SHORT).show();
}
}
});
getPolicy.start();
setpublic.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
//buttonaction
simpleProgressBar.setVisibility(View.VISIBLE);
setPublic();
}
});
setprivate.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
//buttonaction
simpleProgressBar.setVisibility(View.VISIBLE);
setPrivate();
}
});
}
private void setPublic() {
Thread setPublic = new Thread(new Runnable() {
@Override
public void run() {
try {
//Your code goes here
if(policy == null) {
if(filename.endsWith("/")) {
policy = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:GetObject\"],\"Resource\":[\"arn:aws:s3:::"+bucket+"/"+filename+"*\"]}]}";
} else {
policy = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:GetObject\"],\"Resource\":[\"arn:aws:s3:::"+bucket+"/"+filename+"\"]}]}";
}
} else if(policy.endsWith("]}]}")) {
if(filename.endsWith("/")) {
policy = policy.substring(0, policy.length()-4)+",\"arn:aws:s3:::"+bucket+"/"+filename+"*\"]}]}";
} else {
policy = policy.substring(0, policy.length()-4)+",\"arn:aws:s3:::"+bucket+"/"+filename+"\"]}]}";
}
} else {
if(filename.endsWith("/")) {
policy = policy.substring(0, policy.length()-3)+",\"arn:aws:s3:::"+bucket+"/"+filename+"*\"}]}";
} else {
policy = policy.substring(0, policy.length()-3)+",\"arn:aws:s3:::"+bucket+"/"+filename+"\"}]}";
}
}
s3client.setBucketPolicy(bucket, policy);
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),getResources().getString(R.string.policy_ok), Toast.LENGTH_SHORT).show();
finish();
}
});
} catch (Exception e) {
e.printStackTrace();
runOnUiThread(new Runnable() {
@Override
public void run() {
simpleProgressBar.setVisibility(View.INVISIBLE);
Toast.makeText(getApplicationContext(),getResources().getString(R.string.policy_error), Toast.LENGTH_SHORT).show();
}
});
//Toast.makeText(getApplicationContext(),getResources().getString(R.string.media_list_fail), Toast.LENGTH_SHORT).show();
}
}
});
setPublic.start();
}
private void setPrivate() {
Thread setPrivate = new Thread(new Runnable() {
@Override
public void run() {
try {
//Your code goes here
String newpolicy = null;
if(policy.contains(",\"arn:aws:s3:::"+bucket+"/"+filename+"*\"")) {
newpolicy = policy.replace(",\"arn:aws:s3:::"+bucket+"/"+filename+"*\"", "");
s3client.setBucketPolicy(bucket, newpolicy);
} else if(policy.contains(",\"arn:aws:s3:::"+bucket+"/"+filename+"**\"")) {
newpolicy = policy.replace(",\"arn:aws:s3:::"+bucket+"/"+filename+"**\"", "");
s3client.setBucketPolicy(bucket, newpolicy);
} else if(policy.contains(",\"arn:aws:s3:::"+bucket+"/"+filename+"\"")) {
newpolicy = policy.replace(",\"arn:aws:s3:::"+bucket+"/"+filename+"\"", "");
s3client.setBucketPolicy(bucket, newpolicy);
} else if(policy.contains("\"arn:aws:s3:::"+bucket+"/"+filename+"*\",")) {
newpolicy = policy.replace("\"arn:aws:s3:::"+bucket+"/"+filename+"*\",", "");
s3client.setBucketPolicy(bucket, newpolicy);
} else if(policy.contains("\"arn:aws:s3:::"+bucket+"/"+filename+"**\",")) {
newpolicy = policy.replace("\"arn:aws:s3:::"+bucket+"/"+filename+"**\",", "");
s3client.setBucketPolicy(bucket, newpolicy);
} else if(policy.contains("\"arn:aws:s3:::"+bucket+"/"+filename+"\",")) {
newpolicy = policy.replace("\"arn:aws:s3:::"+bucket+"/"+filename+"\",", "");
s3client.setBucketPolicy(bucket, newpolicy);
} else {
s3client.deleteBucketPolicy(bucket);
}
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),getResources().getString(R.string.policy_ok), Toast.LENGTH_SHORT).show();
finish();
}
});
} catch (Exception e) {
e.printStackTrace();
runOnUiThread(new Runnable() {
@Override
public void run() {
simpleProgressBar.setVisibility(View.INVISIBLE);
Toast.makeText(getApplicationContext(),getResources().getString(R.string.policy_error), Toast.LENGTH_SHORT).show();
}
});
//Toast.makeText(getApplicationContext(),getResources().getString(R.string.media_list_fail), Toast.LENGTH_SHORT).show();
}
}
});
setPrivate.start();
}
}

View file

@ -1,21 +1,14 @@
package asgardius.page.s3music;
import androidx.appcompat.app.AlertDialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.PopupMenu;
import android.widget.ProgressBar;
import android.widget.Toast;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
@ -23,15 +16,10 @@ 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.DeleteObjectRequest;
import com.amazonaws.services.s3.model.DeleteObjectsRequest;
import com.amazonaws.services.s3.model.GeneratePresignedUrlRequest;
import com.amazonaws.services.s3.model.ListObjectsRequest;
import com.amazonaws.services.s3.model.ObjectListing;
import com.amazonaws.services.s3.model.S3ObjectSummary;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
@ -246,80 +234,6 @@ public class ObjectSelect extends AppCompatActivity {
if (Img.get(position).equals(R.drawable.folder)) {
//go to subfolder
explorer(Name.get(position).toString());
} else if (Img.get(position).equals(R.drawable.imagefile)) {
//load media file
try {
GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucket, prefix + Name.get(position).toString());
URL objectURL = s3client.generatePresignedUrl(request);
imageViewer(objectURL.toString(), Name.get(position).toString());
} catch (Exception e) {
Toast.makeText(getApplicationContext(),e.toString(), Toast.LENGTH_SHORT).show();
}
} /*else if (Img.get(position).equals(R.drawable.textfile)) {
//load media file
try {
GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucket, prefix + Name.get(position).toString());
URL objectURL = s3client.generatePresignedUrl(request);
textViewer(objectURL.toString());
} catch (Exception e) {
Toast.makeText(getApplicationContext(),e.toString(), Toast.LENGTH_SHORT).show();
}
}*/ else if (Img.get(position).equals(R.drawable.webpage) || Img.get(position).equals(R.drawable.ptextfile)) {
//load media file
try {
GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucket, prefix + Name.get(position).toString());
URL objectURL = s3client.generatePresignedUrl(request);
webBrowser(objectURL.toString(), Name.get(position).toString());
} catch (Exception e) {
Toast.makeText(getApplicationContext(),e.toString(), Toast.LENGTH_SHORT).show();
}
} else if (Img.get(position).equals(R.drawable.pdffile)) {
//load media file
Thread pdfread = new Thread(new Runnable() {
@Override
public void run() {
try {
//Your code goes here
GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucket, prefix + Name.get(position).toString());
URL objectURL = s3client.generatePresignedUrl(request);
//System.out.println(getResources().getString(R.string.pdf_reader)+ URLEncoder.encode(objectURL.toString(), "UTF-8" ));
if (pdfendpoint.endsWith("/")) {
query = pdfendpoint + "web/viewer.html?file=" + URLEncoder.encode(objectURL.toString(), "UTF-8" );
} else {
query = pdfendpoint + "/web/viewer.html?file=" + URLEncoder.encode(objectURL.toString(), "UTF-8" );
}
runOnUiThread(new Runnable() {
@Override
public void run() {
// Sending reference and data to Adapter
webBrowser(query, Name.get(position).toString());
}
});
//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(),e.toString(), Toast.LENGTH_SHORT).show();
}
});
//Toast.makeText(getApplicationContext(),e.toString(), Toast.LENGTH_SHORT).show();
finish();
}
}
});
if (pdfendpoint == null || pdfendpoint.equals("")) {
Toast.makeText(getApplicationContext(),getResources().getString(R.string.pdf_reader_notready), Toast.LENGTH_SHORT).show();
} else {
pdfread.start();
}
} else if (Img.get(position).equals(R.drawable.audiofile) || Img.get(position).equals(R.drawable.videofile)) {
simpleProgressBar.setVisibility(View.VISIBLE);
if (isplaylist) {
@ -382,90 +296,6 @@ public class ObjectSelect extends AppCompatActivity {
@Override
public void onLongClick(View view, int position) {
//System.out.println("Long click on "+Name.get(position).toString());
if (Img.get(position).equals(R.drawable.folder)) {
//go to subfolder
/// Initializing the popup menu and giving the reference as current context
PopupMenu popupMenu = new PopupMenu(recyclerView.getContext(), view);
// Inflating popup menu from popup_menu.xml file
popupMenu.getMenuInflater().inflate(R.menu.folder_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_file_here)) {
//Toast.makeText(ObjectSelect.this, getResources().getString(R.string.pending_feature), Toast.LENGTH_SHORT).show();
upload(false);
} else if (menuItem.getTitle() == getResources().getString(R.string.upload_folder_here)) {
//Toast.makeText(ObjectSelect.this, getResources().getString(R.string.pending_feature), Toast.LENGTH_SHORT).show();
upload(true);
} else if (menuItem.getTitle() == getResources().getString(R.string.download_folder)) {
//Toast.makeText(ObjectSelect.this, getResources().getString(R.string.pending_feature), Toast.LENGTH_SHORT).show();
download(Name.get(position).toString(), true);
} else if (menuItem.getTitle() == getResources().getString(R.string.bucket_policy)) {
policyConfig(prefix + Name.get(position).toString(), Name.get(position).toString());
} else if (menuItem.getTitle() == getResources().getString(R.string.create_link)) {
share( Name.get(position).toString(), Img.get(position).equals(R.drawable.audiofile) || Img.get(position).equals(R.drawable.videofile));
} else if (menuItem.getTitle() == getResources().getString(R.string.object_info)) {
objectInfo(prefix + Name.get(position).toString(), Name.get(position).toString());
} else if (menuItem.getTitle() == getResources().getString(R.string.copy_name)) {
copyName(Name.get(position).toString());
} else if (menuItem.getTitle() == getResources().getString(R.string.file_del)) {
if (Name.size() == 1 && treelevel >= 1) {
Toast.makeText(ObjectSelect.this, getResources().getString(R.string.only_item_onlist), Toast.LENGTH_SHORT).show();
} else {
delete(prefix + Name.get(position).toString(), true);
}
}
return true;
}
});
// Showing the popup menu
popupMenu.show();
} else {
// Initializing the popup menu and giving the reference as current context
PopupMenu popupMenu = new PopupMenu(recyclerView.getContext(), view);
// Inflating popup menu from popup_menu.xml file
popupMenu.getMenuInflater().inflate(R.menu.object_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.download_file)) {
//Toast.makeText(ObjectSelect.this, getResources().getString(R.string.pending_feature), Toast.LENGTH_SHORT).show();
download(Name.get(position).toString(), false);
} else if (menuItem.getTitle() == getResources().getString(R.string.bucket_policy)) {
policyConfig(prefix + Name.get(position).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();
upload(false);
} else if (menuItem.getTitle() == getResources().getString(R.string.upload_folder_here)) {
//Toast.makeText(ObjectSelect.this, getResources().getString(R.string.pending_feature), Toast.LENGTH_SHORT).show();
upload(true);
} else if (menuItem.getTitle() == getResources().getString(R.string.create_link)) {
share(Name.get(position).toString(), Img.get(position).equals(R.drawable.audiofile) || Img.get(position).equals(R.drawable.videofile));
} else if (menuItem.getTitle() == getResources().getString(R.string.object_info)) {
objectInfo(prefix + Name.get(position).toString(), Name.get(position).toString());
} else if (menuItem.getTitle() == getResources().getString(R.string.copy_name)) {
copyName(Name.get(position).toString());
} else if (menuItem.getTitle() == getResources().getString(R.string.file_del)) {
if (menuItem.getTitle() == getResources().getString(R.string.file_del)) {
if (Name.size() == 1 && treelevel >= 1) {
Toast.makeText(ObjectSelect.this, getResources().getString(R.string.only_item_onlist), Toast.LENGTH_SHORT).show();
} else {
delete(prefix + Name.get(position).toString(), false);
}
}
}
return true;
}
});
// Showing the popup menu
popupMenu.show();
}
}
}));
}
@ -531,31 +361,6 @@ public class ObjectSelect extends AppCompatActivity {
startActivity(intent);
}
}
private void textViewer(String url) {
Intent intent = new Intent(this, TextViewer.class);
intent.putExtra("video_url", url);
startActivity(intent);
}
private void imageViewer(String url, String title) {
Intent intent = new Intent(this, ImageViewer.class);
intent.putExtra("video_url", url);
intent.putExtra("title", title);
startActivity(intent);
}
private void webBrowser(String url, String pagetitle) {
Intent intent = new Intent(this, WebBrowser.class);
intent.putExtra("web_url", url);
intent.putExtra("title", pagetitle);
startActivity(intent);
}
private void explorer(String object) {
@ -579,200 +384,6 @@ public class ObjectSelect extends AppCompatActivity {
startActivity(intent);
}
private void share(String object, boolean mediafile) {
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", prefix+object);
intent.putExtra("title", object);
intent.putExtra("region", location);
intent.putExtra("mediafile", mediafile);
intent.putExtra("videotime", videotime);
intent.putExtra("playlisttime", playlisttime);
intent.putExtra("style", style);
startActivity(intent);
}
private void objectInfo(String object, String title) {
Intent intent = new Intent(this, ObjectInfo.class);
//treelevel ++;
intent.putExtra("endpoint", endpoint);
intent.putExtra("username", username);
intent.putExtra("password", password);
intent.putExtra("bucket", bucket);
intent.putExtra("object", object);
intent.putExtra("title", title);
intent.putExtra("region", location);
intent.putExtra("style", style);
startActivity(intent);
}
private void delete(String object, boolean folder) {
AlertDialog.Builder builder = new AlertDialog.Builder(ObjectSelect.this);
builder.setCancelable(true);
builder.setTitle(object);
if (folder) {
builder.setMessage(getResources().getString(R.string.folder_del_confirm));
} else {
builder.setMessage(getResources().getString(R.string.file_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 deleteObject = new Thread(new Runnable() {
@Override
public void run() {
try {
//Your code goes here
//List<Bucket> buckets = s3client.listBuckets();
if (folder) {
ListObjectsRequest orequest = new ListObjectsRequest().withBucketName(bucket).withPrefix(object).withMaxKeys(1000);
//List<S3Object> objects = (List<S3Object>) s3client.listObjects(bucket, "/");
ObjectListing result = s3client.listObjects(orequest);
ArrayList<String> objectl = new ArrayList<String>();
List<S3ObjectSummary> objects = result.getObjectSummaries();
for (S3ObjectSummary os : objects) {
objectl.add(os.getKey());
}
if (objectl.size() >= 1) {
DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest(bucket).withKeys(objectl.toArray(new String[0]));
s3client.deleteObjects(deleteObjectsRequest);
}
while (result.isTruncated()) {
objectl = new ArrayList<String>();
result = s3client.listNextBatchOfObjects (result);
objects = result.getObjectSummaries();
for (S3ObjectSummary os : objects) {
objectl.add(os.getKey());
//i++;
}
DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest(bucket).withKeys(objectl.toArray(new String[0]));
s3client.deleteObjects(deleteObjectsRequest);
}
} else {
DeleteObjectRequest deleteObjectRequest = new DeleteObjectRequest(bucket, object);
s3client.deleteObject(deleteObjectRequest);
}
//System.out.println(Name);
runOnUiThread(new Runnable() {
@Override
public void run() {
// Sending reference and data to Adapter
if (folder) {
Toast.makeText(getApplicationContext(),getResources().getString(R.string.folder_del_success), Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(),getResources().getString(R.string.file_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(),e.toString(), Toast.LENGTH_SHORT).show();
}
});
//Toast.makeText(getApplicationContext(),e.toString(), Toast.LENGTH_SHORT).show();
finish();
}
}
});
simpleProgressBar.setVisibility(View.VISIBLE);
deleteObject.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(boolean isfolder) {
Intent intent = new Intent(this, Uploader.class);
intent.putExtra("endpoint", endpoint);
intent.putExtra("username", username);
intent.putExtra("password", password);
intent.putExtra("bucket", bucket);
intent.putExtra("prefix", prefix);
intent.putExtra("region", location);
intent.putExtra("style", style);
intent.putExtra("isfolder", isfolder);
startActivity(intent);
}
private void download(String filename, boolean isfolder) {
Intent intent = new Intent(this, Downloader.class);
if(isfolder) {
intent.putExtra("prefix", prefix+filename);
} else {
intent.putExtra("prefix", prefix);
intent.putExtra("filename", filename);
}
intent.putExtra("endpoint", endpoint);
intent.putExtra("username", username);
intent.putExtra("password", password);
intent.putExtra("region", location);
intent.putExtra("style", style);
intent.putExtra("bucket", bucket);
intent.putExtra("isfolder", isfolder);
startActivity(intent);
}
private void policyConfig(String filename, String title) {
Intent intent = new Intent(this, ObjectPolicy.class);
intent.putExtra("endpoint", endpoint);
intent.putExtra("username", username);
intent.putExtra("password", password);
intent.putExtra("bucket", bucket);
intent.putExtra("filename", filename);
intent.putExtra("region", location);
intent.putExtra("style", style);
intent.putExtra("title", title);
intent.putExtra("pdfendpoint", pdfendpoint);
startActivity(intent);
}
public void copyName (String name) {
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip;
if(name.endsWith("/")) {
clip = ClipData.newPlainText("name", name.replace("/", ""));
} else {
clip = ClipData.newPlainText("name", name);
}
clipboard.setPrimaryClip(clip);
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.S_V2) {
Toast.makeText(getApplicationContext(),getResources().getString(R.string.copy_ok), Toast.LENGTH_SHORT).show();
}
}
public ArrayList<String> getLinks (ArrayList<String> medialist) throws InterruptedException {
ArrayList<String> links = new ArrayList<String>();
Date expiration = new Date();

View file

@ -1,467 +0,0 @@
package asgardius.page.s3music;
import androidx.appcompat.app.AppCompatActivity;
import android.app.Activity;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
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.amazonaws.services.s3.model.GeneratePresignedUrlRequest;
import com.amazonaws.services.s3.model.ListObjectsRequest;
import com.amazonaws.services.s3.model.ObjectListing;
import com.amazonaws.services.s3.model.S3ObjectSummary;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
public class Share extends AppCompatActivity {
String username, password, endpoint, bucket, object, location, title, objectlist, policy;
boolean mediafile, style, publicobject;
TextView expirationtext;
ProgressBar simpleProgressBar;
Region region;
S3ClientOptions s3ClientOptions;
AWSCredentials myCredentials;
AmazonS3 s3client;
ListObjectsRequest orequest;
Calendar mycal;
EditText datepick, hourpick, minutepick;
int date, hour, minute;
Button share, copylinks, savelinks;
GeneratePresignedUrlRequest request;
Date expiration;
URL objectURL;
Uri fileuri;
Intent intent;
int videotime, playlisttime;
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);
simpleProgressBar = (ProgressBar) findViewById(R.id.simpleProgressBar);
expirationtext = (TextView) findViewById(R.id.expirationtext);
mycal = Calendar.getInstance();
datepick = (EditText)findViewById(R.id.Date);
hourpick = (EditText)findViewById(R.id.Hour);
minutepick = (EditText)findViewById(R.id.Minute);
share = (Button)findViewById(R.id.share);
copylinks = (Button)findViewById(R.id.copy_links);
savelinks = (Button)findViewById(R.id.save_links);
endpoint = getIntent().getStringExtra("endpoint");
username = getIntent().getStringExtra("username");
password = getIntent().getStringExtra("password");
bucket = getIntent().getStringExtra("bucket");
location = getIntent().getStringExtra("region");
style = getIntent().getBooleanExtra("style", false);
object = getIntent().getStringExtra("object");
mediafile = getIntent().getBooleanExtra("mediafile", false);
videotime = getIntent().getIntExtra("videotime", 1);
playlisttime = getIntent().getIntExtra("playlisttime", 1);
title = getIntent().getStringExtra("title");
getSupportActionBar().setTitle(title);
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(),e.toString(), Toast.LENGTH_SHORT).show();
}
s3client.setEndpoint(endpoint);
s3ClientOptions.setPathStyleAccess(style);
s3client.setS3ClientOptions(s3ClientOptions);
Thread getPolicy = new Thread(new Runnable() {
@Override
public void run() {
try {
//Your code goes here
policy = s3client.getBucketPolicy(bucket).getPolicyText();
publicobject = false;
if(policy.contains("arn:aws:s3:::"+bucket+"/*") && policy.contains("s3:GetObject")) {
publicobject = true;
} else if(policy.contains("s3:GetObject")) {
if((policy.contains("\"arn:aws:s3:::"+bucket+"/"+object+"\"") || policy.contains("\"arn:aws:s3:::"+bucket+"/"+object+"*\"") || policy.contains("\"arn:aws:s3:::"+bucket+"/"+object+"**\"")) && policy.contains("s3:GetObject")) {
publicobject = true;
} else {
String[] path = object.split("/");
String filepath = "";
for (int i = 0; i < path.length-1; i++) {
filepath = filepath+path[i]+"/";
//System.out.println(filepath);
if(policy.contains("\"arn:aws:s3:::"+bucket+"/"+filepath+"*\"") || policy.contains("\"arn:aws:s3:::"+bucket+"/"+filepath+"**\"")) {
publicobject = true;
i = path.length;
}
}
}
}
//System.out.println(policy);
runOnUiThread(new Runnable() {
@Override
public void run() {
//Your code goes here
if(publicobject){
expirationtext.setText(getResources().getString(R.string.expiration_not_required));
} else {
datepick.setEnabled(true);
hourpick.setEnabled(true);
minutepick.setEnabled(true);
expirationtext.setText(getResources().getString(R.string.expiration_time));
}
if(object == null || object.endsWith("/")) {
copylinks.setVisibility(View.VISIBLE);
savelinks.setVisibility(View.VISIBLE);
} else {
share.setVisibility(View.VISIBLE);
copylinks.setVisibility(View.VISIBLE);
}
simpleProgressBar.setVisibility(View.INVISIBLE);
}
});
} catch (Exception e) {
e.printStackTrace();
runOnUiThread(new Runnable() {
@Override
public void run() {
publicobject = false;
datepick.setEnabled(true);
hourpick.setEnabled(true);
minutepick.setEnabled(true);
expirationtext.setText(getResources().getString(R.string.expiration_time));
if(object == null || object.endsWith("/")) {
copylinks.setVisibility(View.VISIBLE);
savelinks.setVisibility(View.VISIBLE);
} else {
share.setVisibility(View.VISIBLE);
copylinks.setVisibility(View.VISIBLE);
}
simpleProgressBar.setVisibility(View.INVISIBLE);
}
});
//Toast.makeText(getApplicationContext(),getResources().getString(R.string.media_list_fail), Toast.LENGTH_SHORT).show();
}
}
});
getPolicy.start();
share.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
//buttonaction
try {
sharefile();
//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();
}
}
});
copylinks.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
//buttonaction
if(object == null || object.endsWith("/")) {
simpleProgressBar.setVisibility(View.VISIBLE);
}
Thread copyLinks = new Thread(new Runnable() {
@Override
public void run() {
try {
//load media file
if(object == null || object.endsWith("/")) {
getLinks();
runOnUiThread(new Runnable() {
@Override
public void run() {
// Sending reference and data to Adapter
simpleProgressBar.setVisibility(View.INVISIBLE);
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip;
clip = ClipData.newPlainText("name", objectlist);
clipboard.setPrimaryClip(clip);
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.S_V2) {
Toast.makeText(getApplicationContext(),getResources().getString(R.string.copy_ok), Toast.LENGTH_SHORT).show();
}
}
});
} else {
sharefile();
runOnUiThread(new Runnable() {
@Override
public void run() {
// Sending reference and data to Adapter
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip;
clip = ClipData.newPlainText("name", URLify(objectURL.toString()));
clipboard.setPrimaryClip(clip);
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.S_V2) {
Toast.makeText(getApplicationContext(),getResources().getString(R.string.copy_ok), Toast.LENGTH_SHORT).show();
}
}
});
}
//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);
Toast.makeText(getApplicationContext(),getResources().getString(R.string.invalid_expiration_date), Toast.LENGTH_SHORT).show();
}
});
}
}
});
copyLinks.start();
}
});
savelinks.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
//buttonaction
performFileSearch("Select download location");
}
});
}
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, "links.txt");
intent.setType("*/*");
((Activity) this).startActivityForResult(intent, 70);
}
@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 == 70) {
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());
savelinks();
//System.out.println("File selected successfully");
//System.out.println("content://com.android.externalstorage.documents"+file.getPath());
} else {
Toast.makeText(Share.this, getResources().getString(R.string.file_path_fail), Toast.LENGTH_SHORT).show();
finish();
}
} else {
//System.out.println("User cancelled file browsing {}");
finish();
}
}
}
private void getLinks() {
if (datepick.getText().toString().equals("")) {
date = 0;
} else {
date = Integer.parseInt(datepick.getText().toString());
}
if (hourpick.getText().toString().equals("")) {
hour = 0;
} else {
hour = Integer.parseInt(hourpick.getText().toString());
}
if (minutepick.getText().toString().equals("")) {
minute = 0;
} else {
minute = Integer.parseInt(minutepick.getText().toString());
}
expiration = new Date();
//System.out.println("today is " + mycal.getTime());
mycal.setTime(expiration);
if (date == 0 && hour == 0 && minute == 0) {
mycal.add(Calendar.HOUR, playlisttime);
} else {
mycal.add(Calendar.DATE, date);
mycal.add(Calendar.HOUR, hour);
mycal.add(Calendar.MINUTE, minute);
}
//System.out.println("Expiration date: " + mycal.getTime());
expiration = mycal.getTime();
//System.out.println(expiration);
if (object == null) {
orequest = new ListObjectsRequest().withBucketName(bucket).withMaxKeys(1000);
} else {
orequest = new ListObjectsRequest().withBucketName(bucket).withPrefix(object).withMaxKeys(1000);
}
ObjectListing result = s3client.listObjects(orequest);
objectlist = "";
List<S3ObjectSummary> objects = result.getObjectSummaries();
for (S3ObjectSummary os : objects) {
objectlist = objectlist+PolicyCheck.getFileKey(s3client, bucket, os.getKey(), expiration, policy)+"\n";
}
while (result.isTruncated()) {
result = s3client.listNextBatchOfObjects (result);
objects = result.getObjectSummaries();
for (S3ObjectSummary os : objects) {
objectlist = objectlist+PolicyCheck.getFileKey(s3client, bucket, os.getKey(), expiration, policy)+"\n";
}
}
}
private void sharefile() {
if(publicobject) {
objectURL = s3client.getUrl(bucket, object);
} else {
if (datepick.getText().toString().equals("")) {
date = 0;
} else {
date = Integer.parseInt(datepick.getText().toString());
}
if (hourpick.getText().toString().equals("")) {
hour = 0;
} else {
hour = Integer.parseInt(hourpick.getText().toString());
}
if (minutepick.getText().toString().equals("")) {
minute = 0;
} else {
minute = Integer.parseInt(minutepick.getText().toString());
}
expiration = new Date();
//System.out.println("today is " + mycal.getTime());
mycal.setTime(expiration);
if (date == 0 && hour == 0 && minute == 0) {
if (mediafile) {
mycal.add(Calendar.HOUR, videotime);
} else {
mycal.add(Calendar.MINUTE, 15);
}
} else {
mycal.add(Calendar.DATE, date);
mycal.add(Calendar.HOUR, hour);
mycal.add(Calendar.MINUTE, minute);
}
//System.out.println("Expiration date: " + mycal.getTime());
expiration = mycal.getTime();
//System.out.println(expiration);
request = new GeneratePresignedUrlRequest(bucket, object).withExpiration(expiration);
objectURL = s3client.generatePresignedUrl(request);
}
}
private void savelinks() {
simpleProgressBar.setVisibility(View.VISIBLE);
Thread saveLinks = new Thread(new Runnable() {
@Override
public void run() {
try {
getLinks();
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(getContentResolver().openOutputStream(fileuri));
outputStreamWriter.write(objectlist);
outputStreamWriter.close();
runOnUiThread(new Runnable() {
@Override
public void run() {
// Sending reference and data to Adapter
simpleProgressBar.setVisibility(View.INVISIBLE);
Toast.makeText(getApplicationContext(),getResources().getString(R.string.save_ok), Toast.LENGTH_SHORT).show();
}
});
//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);
Toast.makeText(getApplicationContext(),getResources().getString(R.string.invalid_expiration_date), Toast.LENGTH_SHORT).show();
}
});
}
}
});
saveLinks.start();
}
}

View file

@ -1,89 +0,0 @@
package asgardius.page.s3music;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.stream.Collectors;
public class TextViewer extends AppCompatActivity {
EditText filecontent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_text_viewer);
filecontent = (EditText)findViewById(R.id.textShow);
final ProgressBar simpleProgressBar = (ProgressBar) findViewById(R.id.simpleProgressBar);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
String videoURL = getIntent().getStringExtra("video_url");
Thread textread = new Thread(new Runnable() {
@Override
public void run() {
try {
//Your code goes here
URL fileurl = new URL(videoURL);
// Read all the text returned by the server
BufferedReader in = new BufferedReader(new InputStreamReader(fileurl.openStream()));
String str = in.lines().collect(Collectors.joining());
in.close();
runOnUiThread(new Runnable() {
@Override
public void run() {
// Sending reference and data to Adapter
simpleProgressBar.setVisibility(View.INVISIBLE);
filecontent.setText(str);
}
});
//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(),e.toString(), Toast.LENGTH_SHORT).show();
finish();
}
});
//Toast.makeText(getApplicationContext(),e.toString(), Toast.LENGTH_SHORT).show();
finish();
}
}
});
textread.start();
} else {
finish();
}
/*try {
// Create a URL for the desired page
URL fileurl = new URL(videoURL);
// Read all the text returned by the server
BufferedReader in = new BufferedReader(new InputStreamReader(fileurl.openStream()));
String str = in.readLine();
in.close();
filecontent.setText(str);
} catch (MalformedURLException e) {
Toast.makeText(getApplicationContext(),getResources().getString(R.string.media_conn_fail), Toast.LENGTH_SHORT).show();
} catch (IOException e) {
Toast.makeText(getApplicationContext(),getResources().getString(R.string.media_conn_fail), Toast.LENGTH_SHORT).show();
}*/
}
}

View file

@ -1,575 +0,0 @@
package asgardius.page.s3music;
import static android.content.ContentValues.TAG;
import androidx.appcompat.app.AppCompatActivity;
import androidx.documentfile.provider.DocumentFile;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.PowerManager;
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.AbortedException;
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.AbortMultipartUploadRequest;
import com.amazonaws.services.s3.model.AmazonS3Exception;
import com.amazonaws.services.s3.model.CompleteMultipartUploadRequest;
import com.amazonaws.services.s3.model.InitiateMultipartUploadRequest;
import com.amazonaws.services.s3.model.InitiateMultipartUploadResult;
import com.amazonaws.services.s3.model.PartETag;
import com.amazonaws.services.s3.model.PutObjectRequest;
import com.amazonaws.services.s3.model.PutObjectResult;
import com.amazonaws.services.s3.model.UploadPartRequest;
import com.amazonaws.services.s3.model.UploadPartResult;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
public class Uploader extends AppCompatActivity {
String username, password, endpoint, bucket, prefix, location;
Uri fileuri, folder;
EditText fprefix;
TextView fprefixlabel;
Region region;
S3ClientOptions s3ClientOptions;
AWSCredentials myCredentials;
AmazonS3 s3client;
ProgressBar simpleProgressBar;
long filesize;
File ufile;
DocumentFile document;
Intent intent;
Button fileUpload;
Thread uploadFile, uploadProgress, calculateProgress;
boolean style, isfolder;
boolean started = false;
boolean cancel = false;
long transfered = 0;
private static final long MAX_SINGLE_PART_UPLOAD_BYTES = 5 * 1024 * 1024;
private WifiManager.WifiLock mWifiLock;
private PowerManager.WakeLock mWakeLock;
private PowerManager powerManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_uploader);
// create Wifi and wake locks
mWifiLock = ((WifiManager) this.getApplicationContext().getSystemService(Context.WIFI_SERVICE)).createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF, "Transistor:wifi_lock");
powerManager = (PowerManager) getSystemService(POWER_SERVICE);
mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Transistor:wake_lock");
endpoint = getIntent().getStringExtra("endpoint");
username = getIntent().getStringExtra("username");
password = getIntent().getStringExtra("password");
bucket = getIntent().getStringExtra("bucket");
location = getIntent().getStringExtra("region");
style = getIntent().getBooleanExtra("style", false);
isfolder = getIntent().getBooleanExtra("isfolder", false);
prefix = getIntent().getStringExtra("prefix");
if(isfolder) {
getSupportActionBar().setTitle(getResources().getString(R.string.batch_upload_button));
} else {
getSupportActionBar().setTitle(getResources().getString(R.string.upload_button));
}
fprefix = (EditText)findViewById(R.id.fprefix);
fprefixlabel = (TextView) findViewById(R.id.fprefixlabel);
region = Region.getRegion(location);
s3ClientOptions = S3ClientOptions.builder().build();
s3ClientOptions.setPathStyleAccess(style);
myCredentials = new BasicAWSCredentials(username, password);
s3client = new AmazonS3Client(myCredentials, region);
s3client.setEndpoint(endpoint);
s3client.setS3ClientOptions(s3ClientOptions);
fileUpload = (Button)findViewById(R.id.fileupload);
simpleProgressBar = (ProgressBar) findViewById(R.id.simpleProgressBar);
//Toast.makeText(Uploader.this, getResources().getString(R.string.pending_feature), Toast.LENGTH_SHORT).show();
performFileSearch("Select file to upload");
//fprefix.setText(prefix);
fileUpload.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
//buttonaction
if (started) {
started = false;
cancel = true;
uploadFile.interrupt();
//simpleProgressBar.setVisibility(View.INVISIBLE);
} else {
started = true;
transfered = 0;
//simpleProgressBar.setProgress(0);
simpleProgressBar.setVisibility(View.VISIBLE);
if (fileuri == null && folder == null) {
Toast.makeText(Uploader.this, getResources().getString(R.string.no_file_selected), Toast.LENGTH_SHORT).show();
} else {
//Acquiring WakeLock and WifiLock if not held
if (!mWifiLock.isHeld()) {
mWifiLock.acquire();
//System.out.println("WifiLock acquired");
}
if (!mWakeLock.isHeld()) {
mWakeLock.acquire();
//System.out.println("WakeLock acquired");
}
//eUpload.setEnabled(false);
fileUpload.setText(getResources().getString(R.string.cancel_upload));
fprefix.setEnabled(false);
uploadFile = new Thread(new Runnable() {
@Override
public void run() {
//System.out.println(fkey);
//filesize = 0;
try {
//Your code goes here
//s3client.createBucket(bucket, location);
//System.out.println(fkey);
if (isfolder) {
if(prefix.endsWith("/")) {
prefix = fprefix.getText().toString();
} else {
prefix = fprefix.getText().toString().concat("/");
}
document = DocumentFile.fromTreeUri(getApplicationContext(), fileuri);
DocumentFile[] filelist = document.listFiles();
ArrayList<String> filepath = new ArrayList<String>();
int treelevel = 0;
ArrayList<Integer> fileindex = new ArrayList<Integer>();
fileindex.add(0);
for (int i = 0; i < filelist.length && !cancel; i++) {
filepath.add(filelist[i].getName());
if(filelist[i].isDirectory()) {
treelevel++;
fileindex.add(0);
document = filelist[i];
filelist = document.listFiles();
while (treelevel >= 1 && fileindex.get(treelevel) < filelist.length+1 && !cancel) {
if(fileindex.get(treelevel) == filelist.length) {
fileindex.remove(treelevel);
document = document.getParentFile();
filelist = document.listFiles();
treelevel--;
filepath.remove(treelevel);
fileindex.set(treelevel, fileindex.get(treelevel)+1);
} else {
filepath.add(filelist[fileindex.get(treelevel)].getName());
if (filelist[fileindex.get(treelevel)].isDirectory()) {
document = filelist[fileindex.get(treelevel)];
filelist = document.listFiles();
treelevel++;
fileindex.add(0);
} else {
ufile = readContentToFile(filelist[fileindex.get(treelevel)].getUri());
putS3Object(bucket, prefix+String.join("/", filepath), ufile);
filepath.remove(treelevel);
fileindex.set(treelevel, fileindex.get(treelevel)+1);
}
}
}
} else {
ufile = readContentToFile(filelist[i].getUri());
putS3Object(bucket, prefix+String.join("/", filepath), ufile);
}
filepath.clear();
fileindex.clear();
fileindex.add(0);
}
} else {
ufile = readContentToFile(fileuri);
if(ufile.length()%MAX_SINGLE_PART_UPLOAD_BYTES == 0) {
filesize = ufile.length()/MAX_SINGLE_PART_UPLOAD_BYTES;
} else {
filesize = (ufile.length()/MAX_SINGLE_PART_UPLOAD_BYTES)+1;
}
//PutObjectRequest request = new PutObjectRequest(bucket, fkey, ufile);
//upload = s3client.putObject(request);
putS3Object(bucket, fprefix.getText().toString(), ufile);
}
runOnUiThread(new Runnable() {
@Override
public void run() {
//Releasing WifiLock and WakeLock if held
if (mWifiLock.isHeld()) {
mWifiLock.release();
//System.out.println("WifiLock released");
}
if (mWakeLock.isHeld()) {
mWakeLock.release();
//System.out.println("WakeLock released");
}
if(!cancel) {
simpleProgressBar.setProgress(100);
}
//simpleProgressBar.setVisibility(View.INVISIBLE);
if (cancel) {
fileUpload.setText(getResources().getString(R.string.upload_canceled));
} else if (isfolder) {
fileUpload.setText(getResources().getString(R.string.batch_upload_success));
} else {
fileUpload.setText(getResources().getString(R.string.upload_success));
}
started = false;
fileUpload.setEnabled(false);
//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() {
//Releasing WifiLock and WakeLock if held
if (mWifiLock.isHeld()) {
mWifiLock.release();
//System.out.println("WifiLock released");
}
if (mWakeLock.isHeld()) {
mWakeLock.release();
//System.out.println("WakeLock released");
}
started = false;
//simpleProgressBar.setVisibility(View.INVISIBLE);
//fileUpload.setEnabled(true);
if (cancel) {
fileUpload.setText(getResources().getString(R.string.upload_canceled));
} else {
fileUpload.setText(getResources().getString(R.string.upload_failed));
}
fileUpload.setEnabled(false);
//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();
}
}
});
uploadProgress = new Thread(new Runnable() {
@Override
public void run() {
try {
//Your code goes here
while (started) {
try {
if (filesize != 0) {
//simpleProgressBar.setProgress((int)((transfered*100)/filesize));
simpleProgressBar.setProgress((int)((transfered*100)/filesize));
}
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
}
}
runOnUiThread(new Runnable() {
@Override
public void run() {
//simpleProgressBar.setProgress(100);
}
});
//System.out.println("tree "+treelevel);
//System.out.println("prefix "+prefix);
} catch (Exception e) {
e.printStackTrace();
//Toast.makeText(getApplicationContext(),getResources().getString(R.string.media_list_fail), Toast.LENGTH_SHORT).show();
//finish();
}
}
});
//simpleProgressBar.setVisibility(View.VISIBLE);
uploadFile.start();
uploadProgress.start();
/*while (progress <= 99) {
System.out.println("Upload in progress");
if (upload != null) {
System.out.println(upload.getMetadata().getContentLength());
if(upload.getMetadata().getContentLength() != 0) {
progress = (int) (((int)filesize / (int)upload.getMetadata().getContentLength())*100);
simpleProgressBar.setProgress(progress);
}
}
System.out.println(filesize);
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}*/
}
}
}
});
}
private void performFileSearch(String messageTitle) {
//uri = Uri.parse("content://com.android.externalstorage.documents/document/home");
intent = new Intent();
if (isfolder) {
intent.setAction(Intent.ACTION_OPEN_DOCUMENT_TREE);
} else {
intent.setAction(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
//intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
//intent.putExtra("android.provider.extra.INITIAL_URI", uri);
intent.setType("*/*");
}
((Activity) this).startActivityForResult(intent, 100);
}
@SuppressLint("SetTextI18n")
@Override
public void onDestroy() {
if (!mWifiLock.isHeld()) {
mWifiLock.acquire();
//System.out.println("WifiLock acquired");
}
if (!mWakeLock.isHeld()) {
mWakeLock.acquire();
//System.out.println("WakeLock acquired");
}
super.onDestroy();
}
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 == 100) {
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());
if (isfolder) {
fprefix.setText(prefix);
fprefix.setHint(getResources().getString(R.string.upload_prefix));
fprefixlabel.setText(getResources().getString(R.string.upload_prefix));
fileUpload.setText(getResources().getString(R.string.upload_calculate));
fileUpload.setEnabled(false);
calculateSize();
} else {
fprefix.setText(prefix+getDisplayName(fileuri));
}
//System.out.println("File selected successfully");
//System.out.println("content://com.android.externalstorage.documents"+file.getPath());
} else {
Toast.makeText(Uploader.this, getResources().getString(R.string.file_path_fail), Toast.LENGTH_SHORT).show();
finish();
}
} else {
//System.out.println("User cancelled file browsing {}");
finish();
}
}
}
private File readContentToFile(Uri uri) throws IOException {
final File file = new File(getCacheDir(), getDisplayName(uri));
try (
final InputStream in = getContentResolver().openInputStream(uri);
final OutputStream out = new FileOutputStream(file, false);
) {
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();
}
public void putS3Object(String bucket, String objectKey, File file) {
if (file.length() <= MAX_SINGLE_PART_UPLOAD_BYTES) {
putS3ObjectSinglePart(bucket, objectKey, file);
} else {
putS3ObjectMultiPart(bucket, objectKey, file);
}
}
private void putS3ObjectSinglePart(String bucket, String objectKey, File file) {
PutObjectRequest request = new PutObjectRequest(bucket, objectKey, file);
PutObjectResult result = s3client.putObject(request);
long bytesPushed = result.getMetadata().getContentLength();
transfered++;
//LOGGER.info("Pushed {} bytes to s3://{}/{}", bytesPushed, bucket, objectKey);
}
private void putS3ObjectMultiPart(String bucket, String objectKey, File file) {
long contentLength = file.length();
long partSize = MAX_SINGLE_PART_UPLOAD_BYTES;
List<PartETag> partETags = new ArrayList<>();
// Initiate the multipart upload.
InitiateMultipartUploadRequest initRequest = new InitiateMultipartUploadRequest(bucket, objectKey);
InitiateMultipartUploadResult initResponse = s3client.initiateMultipartUpload(initRequest);
// Upload the file parts.
long fileOffset = 0;
try{
for (int partNumber = 1; fileOffset < contentLength && !cancel; ++partNumber) {
// Because the last part could be less than 5 MB, adjust the part size as needed.
partSize = Math.min(partSize, (contentLength - fileOffset));
// Create the request to upload a part.
UploadPartRequest uploadRequest = new UploadPartRequest()
.withBucketName(bucket)
.withKey(objectKey)
.withUploadId(initResponse.getUploadId())
.withPartNumber(partNumber)
.withFileOffset(fileOffset)
.withFile(file)
.withPartSize(partSize);
// Upload the part and add the response's ETag to our list.
UploadPartResult uploadResult = s3client.uploadPart(uploadRequest);
//LOGGER.info("Uploading part {} of Object s3://{}/{}", partNumber, bucket, objectKey);
partETags.add(uploadResult.getPartETag());
fileOffset += partSize;
transfered++;
}
// Complete the multipart upload.
CompleteMultipartUploadRequest compRequest = new CompleteMultipartUploadRequest(bucket, objectKey, initResponse.getUploadId(), partETags);
s3client.completeMultipartUpload(compRequest);
} catch (AbortedException | AmazonS3Exception e) {
e.printStackTrace();
AbortMultipartUploadRequest abort = new AbortMultipartUploadRequest(bucket, objectKey, initResponse.getUploadId());
s3client.abortMultipartUpload(abort);
//Toast.makeText(getApplicationContext(),getResources().getString(R.string.media_list_fail), Toast.LENGTH_SHORT).show();
//finish();
}
}
private void calculateSize() {
calculateProgress = new Thread(new Runnable() {
@Override
public void run() {
try {
//Your code goes here
document = DocumentFile.fromTreeUri(getApplicationContext(), fileuri);
DocumentFile[] filelist = document.listFiles();
ArrayList<String> filepath = new ArrayList<String>();
int treelevel = 0;
ArrayList<Integer> fileindex = new ArrayList<Integer>();
fileindex.add(0);
for (int i = 0; i < filelist.length; i++) {
filepath.add(filelist[i].getName());
if(filelist[i].isDirectory()) {
treelevel++;
fileindex.add(0);
document = filelist[i];
filelist = document.listFiles();
while (treelevel >= 1 && fileindex.get(treelevel) < filelist.length+1) {
if(fileindex.get(treelevel) == filelist.length) {
fileindex.remove(treelevel);
document = document.getParentFile();
filelist = document.listFiles();
treelevel--;
filepath.remove(treelevel);
fileindex.set(treelevel, fileindex.get(treelevel)+1);
} else {
filepath.add(filelist[fileindex.get(treelevel)].getName());
if (filelist[fileindex.get(treelevel)].isDirectory()) {
document = filelist[fileindex.get(treelevel)];
filelist = document.listFiles();
treelevel++;
fileindex.add(0);
} else {
filepath.remove(treelevel);
if(filelist[fileindex.get(treelevel)].length()%MAX_SINGLE_PART_UPLOAD_BYTES == 0) {
filesize = filesize+(filelist[fileindex.get(treelevel)].length()/MAX_SINGLE_PART_UPLOAD_BYTES);
} else {
filesize = filesize+((filelist[fileindex.get(treelevel)].length()/MAX_SINGLE_PART_UPLOAD_BYTES)+1);
}
fileindex.set(treelevel, fileindex.get(treelevel)+1);
}
}
}
//document = document.getParentFile();
//filelist = document.listFiles();
//treelevel--;
} else {
if(filelist[i].length()%MAX_SINGLE_PART_UPLOAD_BYTES == 0) {
filesize = filesize+(filelist[i].length()/MAX_SINGLE_PART_UPLOAD_BYTES);
} else {
filesize = filesize+((filelist[i].length()/MAX_SINGLE_PART_UPLOAD_BYTES)+1);
}
}
filepath.clear();
fileindex.clear();
fileindex.add(0);
}
runOnUiThread(new Runnable() {
@Override
public void run() {
fileUpload.setText(getResources().getString(R.string.batch_upload_button));
fileUpload.setEnabled(true);
}
});
} catch (Exception e) {
e.printStackTrace();
//Toast.makeText(getApplicationContext(),getResources().getString(R.string.media_list_fail), Toast.LENGTH_SHORT).show();
//finish();
}
}
});
calculateProgress.start();
}
}

View file

@ -69,7 +69,6 @@ public class VideoPlayer extends AppCompatActivity {
MediaSessionCompat mediaSession;
MediaSessionConnector mediaSessionConnector;
StyledPlayerView.ControllerVisibilityListener control;
AppOpsManager appOpsManager;
private PlayerNotificationManager playerNotificationManager;
private int notificationId = 1234;
boolean isplaylist;
@ -77,6 +76,36 @@ public class VideoPlayer extends AppCompatActivity {
String videoURL, title;
Rational ratio;
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);
@ -91,7 +120,6 @@ public class VideoPlayer extends AppCompatActivity {
channel.setSound(null, null);
manager.createNotificationChannel(channel);
}
appOpsManager = (AppOpsManager)getSystemService(Context.APP_OPS_SERVICE);
mediaSession = new MediaSessionCompat(this, getPackageName());
mediaSessionConnector = new MediaSessionConnector(mediaSession);
hideSystemBars();
@ -156,7 +184,7 @@ public class VideoPlayer extends AppCompatActivity {
if (isplaylist) {
for (int i = 0; i < queue.size(); i++) {
if (names.get(i).endsWith(".m3u8")) {
MediaItem mediaItem = MediaItem.fromUri(Share.URLify(queue.get(i)));
MediaItem mediaItem = MediaItem.fromUri(URLify(queue.get(i)));
player.addMediaItem(mediaItem);
} else {
mediaSource = new ProgressiveMediaSource.Factory(
@ -165,7 +193,7 @@ public class VideoPlayer extends AppCompatActivity {
.setUpstreamDataSourceFactory(new DefaultHttpDataSource.Factory()
.setUserAgent("S3 Manager"))
.setFlags(CacheDataSource.FLAG_IGNORE_CACHE_ON_ERROR)
).createMediaSource(MediaItem.fromUri(Share.URLify(queue.get(i))));
).createMediaSource(MediaItem.fromUri(URLify(queue.get(i))));
player.addMediaSource(mediaSource);
}
}
@ -173,7 +201,7 @@ public class VideoPlayer extends AppCompatActivity {
player.seekTo(names.indexOf(title), 0);
} else {
if (title.endsWith(".m3u8")) {
MediaItem mediaItem = MediaItem.fromUri(Share.URLify(videoURL));
MediaItem mediaItem = MediaItem.fromUri(URLify(videoURL));
player.setMediaItem(mediaItem);
} else {
mediaSource = new ProgressiveMediaSource.Factory(
@ -182,7 +210,7 @@ public class VideoPlayer extends AppCompatActivity {
.setUpstreamDataSourceFactory(new DefaultHttpDataSource.Factory()
.setUserAgent("S3 Manager"))
.setFlags(CacheDataSource.FLAG_IGNORE_CACHE_ON_ERROR)
).createMediaSource(MediaItem.fromUri(Share.URLify(videoURL)));
).createMediaSource(MediaItem.fromUri(URLify(videoURL)));
player.setMediaSource(mediaSource);
}
player.prepare();
@ -283,49 +311,6 @@ public class VideoPlayer extends AppCompatActivity {
Objects.requireNonNull(getSupportActionBar()).show();
}
protected void enterPIPMode() {
try {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
&& this.getPackageManager()
.hasSystemFeature(
PackageManager.FEATURE_PICTURE_IN_PICTURE) && appOpsManager.checkOpNoThrow(
AppOpsManager.OPSTR_PICTURE_IN_PICTURE,
this.getPackageManager().getApplicationInfo(this.getPackageName(),
PackageManager.GET_META_DATA).uid, this.getPackageName())
== AppOpsManager.MODE_ALLOWED) {
videoPosition = player.getCurrentPosition();
playerView.setUseController(false);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
if(player.getVideoFormat() != null) {
ratio = new Rational(Math.round(player.getVideoFormat().width*20*player.getVideoSize().pixelWidthHeightRatio), Math.round(player.getVideoFormat().height*20));
} else if(player.getAudioFormat() != null) {
ratio = new Rational(player.getAudioFormat().width, player.getAudioFormat().height);
} else {
ratio = new Rational(1, 1);
}
PictureInPictureParams params = new PictureInPictureParams.Builder().setAspectRatio(ratio).build();
this.enterPictureInPictureMode(params);
}else {
this.enterPictureInPictureMode();
}
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}
public boolean isScreenOn(Context context) {
DisplayManager dm = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
boolean screenOn = false;
for (Display display : dm.getDisplays()) {
if (display.getState() == Display.STATE_ON) {
screenOn = true;
}
}
return screenOn;
}
@Override
public void onDestroy() {
@ -357,11 +342,6 @@ public class VideoPlayer extends AppCompatActivity {
hideSystemBars();
}
public void onUserLeaveHint() {
super.onUserLeaveHint();
enterPIPMode();
}
protected void onNewIntent(Intent intent) {
videoURL = intent.getStringExtra("video_url");
title = intent.getStringExtra("title");
@ -411,45 +391,8 @@ public class VideoPlayer extends AppCompatActivity {
super.onNewIntent(intent);
}
public void onStop() {
try {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.S
&& this.getPackageManager()
.hasSystemFeature(
PackageManager.FEATURE_PICTURE_IN_PICTURE) && appOpsManager.checkOpNoThrow(
AppOpsManager.OPSTR_PICTURE_IN_PICTURE,
this.getPackageManager().getApplicationInfo(this.getPackageName(),
PackageManager.GET_META_DATA).uid, this.getPackageName())
== AppOpsManager.MODE_ALLOWED && isScreenOn(this) && this.isInPictureInPictureMode()) {
finish();
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
super.onStop();
}
/*static void deleteCache(Context context, StandaloneDatabaseProvider database) {
SimpleCache.delete(new File(context.getCacheDir(), "media"), database);
}*/
public void onBackPressed() {
try {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
&& this.getPackageManager()
.hasSystemFeature(
PackageManager.FEATURE_PICTURE_IN_PICTURE) && appOpsManager.checkOpNoThrow(
AppOpsManager.OPSTR_PICTURE_IN_PICTURE,
this.getPackageManager().getApplicationInfo(this.getPackageName(),
PackageManager.GET_META_DATA).uid, this.getPackageName())
== AppOpsManager.MODE_ALLOWED) {
enterPIPMode();
} else {
super.onBackPressed();
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
super.onBackPressed();
}
}
}