diff --git a/app/src/main/java/asgardius/page/s3manager/BucketSelect.java b/app/src/main/java/asgardius/page/s3manager/BucketSelect.java index 421d8ef..c3d660f 100644 --- a/app/src/main/java/asgardius/page/s3manager/BucketSelect.java +++ b/app/src/main/java/asgardius/page/s3manager/BucketSelect.java @@ -44,14 +44,13 @@ public class BucketSelect extends AppCompatActivity { ArrayList Img; RecyclerView recyclerView; String username, password, endpoint, prefix, location, file, pdfendpoint; - boolean style; - int treelevel; + boolean style, isplaylist; Region region; S3ClientOptions s3ClientOptions; AWSCredentials myCredentials; AmazonS3 s3client; ProgressBar simpleProgressBar; - int videocache, videotime, buffersize; + int videocache, videotime, buffersize, treelevel, playlisttime; @Override protected void onCreate(Bundle savedInstanceState) { @@ -64,7 +63,9 @@ public class BucketSelect extends AppCompatActivity { style = getIntent().getBooleanExtra("style", false); videocache = getIntent().getIntExtra("videocache", 40); videotime = getIntent().getIntExtra("videotime", 1); + playlisttime = getIntent().getIntExtra("playlisttime", 1); buffersize = getIntent().getIntExtra("buffersize", 2000); + isplaylist = getIntent().getBooleanExtra("isplaylist", false); prefix = ""; setContentView(R.layout.activity_bucket_select); region = Region.getRegion("us-east-1"); @@ -216,6 +217,8 @@ public class BucketSelect extends AppCompatActivity { intent.putExtra("videocache", videocache); intent.putExtra("videotime", videotime); intent.putExtra("buffersize", buffersize); + intent.putExtra("playlisttime", playlisttime); + intent.putExtra("isplaylist", isplaylist); startActivity(intent); } diff --git a/app/src/main/java/asgardius/page/s3manager/MainActivity.java b/app/src/main/java/asgardius/page/s3manager/MainActivity.java index 9a3530e..33539cf 100644 --- a/app/src/main/java/asgardius/page/s3manager/MainActivity.java +++ b/app/src/main/java/asgardius/page/s3manager/MainActivity.java @@ -20,19 +20,21 @@ import java.util.ArrayList; public class MainActivity extends AppCompatActivity { - boolean style; + boolean style, isplaylist; String alias, username, password, endpoint, location, pdfendpoint; RecyclerView recyclerView; SQLiteDatabase db; ArrayList Name; ArrayList Img; MyDbHelper dbHelper; - int videocache, videotime, buffersize; + int videocache, videotime, buffersize, playlisttime; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); + isplaylist = true; + playlisttime = 1; recyclerView = findViewById(R.id.alist); @@ -379,6 +381,8 @@ public class MainActivity extends AppCompatActivity { intent.putExtra("videocache", videocache); intent.putExtra("videotime", videotime); intent.putExtra("buffersize", buffersize); + intent.putExtra("playlisttime", playlisttime); + intent.putExtra("isplaylist", isplaylist); startActivity(intent); } diff --git a/app/src/main/java/asgardius/page/s3manager/ObjectSelect.java b/app/src/main/java/asgardius/page/s3manager/ObjectSelect.java index 3026806..e31f0f1 100644 --- a/app/src/main/java/asgardius/page/s3manager/ObjectSelect.java +++ b/app/src/main/java/asgardius/page/s3manager/ObjectSelect.java @@ -4,15 +4,11 @@ import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; - -import android.app.AppOpsManager; -import android.app.PictureInPictureParams; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; import android.view.MenuItem; @@ -39,7 +35,6 @@ import java.net.URLEncoder; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; -import java.util.LinkedHashSet; import java.util.List; import java.util.Locale; @@ -50,16 +45,14 @@ public class ObjectSelect extends AppCompatActivity { //ArrayList object; RecyclerView recyclerView; String username, password, endpoint, bucket, prefix, location, pdfendpoint, query; - boolean style; - int treelevel; + boolean style, isplaylist; String[] filename; Region region; S3ClientOptions s3ClientOptions; AWSCredentials myCredentials; AmazonS3 s3client; ProgressBar simpleProgressBar; - int videocache, videotime, buffersize; - AppOpsManager appOpsManager; + int videocache, videotime, buffersize, treelevel, playlisttime; @Override protected void onCreate(Bundle savedInstanceState) { @@ -75,8 +68,9 @@ public class ObjectSelect extends AppCompatActivity { treelevel = getIntent().getIntExtra("treelevel", 0); videocache = getIntent().getIntExtra("videocache", 40); videotime = getIntent().getIntExtra("videotime", 1); + playlisttime = getIntent().getIntExtra("playlisttime", 1); buffersize = getIntent().getIntExtra("buffersize", 2000); - appOpsManager = (AppOpsManager)getSystemService(Context.APP_OPS_SERVICE); + isplaylist = getIntent().getBooleanExtra("isplaylist", false); setContentView(R.layout.activity_object_select); getSupportActionBar().setTitle(bucket+"/"+prefix); region = Region.getRegion(location); @@ -327,48 +321,52 @@ public class ObjectSelect extends AppCompatActivity { pdfread.start(); } } else if (Img.get(position).equals(R.drawable.audiofile) || Img.get(position).equals(R.drawable.videofile)) { - Thread mediaread = new Thread(new Runnable() { + if (isplaylist) { + videoPlayer(null, Name.get(position).toString()); + } else { + Thread mediaread = new Thread(new Runnable() { - @Override - public void run() { - try { - //load media file - Date expiration = new Date(); - Calendar mycal = Calendar.getInstance(); - mycal.setTime(expiration); - //System.out.println("today is " + mycal.getTime()); - mycal.add(Calendar.HOUR, videotime); - //System.out.println("Expiration date: " + mycal.getTime()); - expiration = mycal.getTime(); - GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucket, prefix + Name.get(position).toString()).withExpiration(expiration);; - URL objectURL = s3client.generatePresignedUrl(request); + @Override + public void run() { + try { + //load media file + Date expiration = new Date(); + Calendar mycal = Calendar.getInstance(); + mycal.setTime(expiration); + //System.out.println("today is " + mycal.getTime()); + mycal.add(Calendar.HOUR, videotime); + //System.out.println("Expiration date: " + mycal.getTime()); + expiration = mycal.getTime(); + GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucket, prefix + Name.get(position).toString()).withExpiration(expiration);; + URL objectURL = s3client.generatePresignedUrl(request); - runOnUiThread(new Runnable() { + runOnUiThread(new Runnable() { - @Override - public void run() { - // Sending reference and data to Adapter - videoPlayer(objectURL.toString(), Name.get(position).toString(), Name.get(position).toString().endsWith(".m3u8")); - } - }); - //System.out.println("tree "+treelevel); - //System.out.println("prefix "+prefix); + @Override + public void run() { + // Sending reference and data to Adapter + videoPlayer(objectURL.toString(), Name.get(position).toString()); + } + }); + //System.out.println("tree "+treelevel); + //System.out.println("prefix "+prefix); - } catch (Exception e) { - e.printStackTrace(); - runOnUiThread(new Runnable() { + } catch (Exception e) { + e.printStackTrace(); + runOnUiThread(new Runnable() { - @Override - public void run() { - Toast.makeText(getApplicationContext(),getResources().getString(R.string.media_list_fail), Toast.LENGTH_SHORT).show(); - } - }); - //Toast.makeText(getApplicationContext(),getResources().getString(R.string.media_list_fail), Toast.LENGTH_SHORT).show(); - finish(); + @Override + public void run() { + Toast.makeText(getApplicationContext(),getResources().getString(R.string.media_list_fail), Toast.LENGTH_SHORT).show(); + } + }); + //Toast.makeText(getApplicationContext(),getResources().getString(R.string.media_list_fail), Toast.LENGTH_SHORT).show(); + finish(); + } } - } - }); - mediaread.start(); + }); + mediaread.start(); + } } else { Toast.makeText(ObjectSelect.this, getResources().getString(R.string.unsupported_file), Toast.LENGTH_SHORT).show(); } @@ -459,15 +457,60 @@ public class ObjectSelect extends AppCompatActivity { })); } - private void videoPlayer(String url, String title, boolean hls) { + private void videoPlayer(String url, String title) { - Intent intent = new Intent(this, VideoPlayer.class); - intent.putExtra("video_url", url); - intent.putExtra("title", title); - intent.putExtra("videocache", videocache); - intent.putExtra("buffersize", buffersize); - intent.putExtra("hls", hls); - startActivity(intent); + if (isplaylist) { + Thread mediaread = new Thread(new Runnable() { + + @Override + public void run() { + try { + //load media file + ArrayList medialist = new ArrayList(); + for (int i = 0; i < Name.size(); i++) { + if (Img.get(i).equals(R.drawable.audiofile) || Img.get(i).equals(R.drawable.videofile)) { + medialist.add(Name.get(i).toString()); + } + } + ArrayList links = getLinks(medialist); + for (int i = 0; i < links.size(); i++) { + System.out.println(links.get(i)); + } + System.out.println("Position of selected file: "+medialist.indexOf(title)); + + runOnUiThread(new Runnable() { + + @Override + public void run() { + // Sending reference and data to Adapter + //videoPlayer(objectURL.toString(), 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(),getResources().getString(R.string.media_list_fail), Toast.LENGTH_SHORT).show(); + } + }); + } + } + }); + mediaread.start(); + } else { + Intent intent = new Intent(this, VideoPlayer.class); + intent.putExtra("video_url", url); + intent.putExtra("title", title); + intent.putExtra("videocache", videocache); + intent.putExtra("buffersize", buffersize); + intent.putExtra("isplaylist", isplaylist); + startActivity(intent); + } } private void textViewer(String url) { @@ -512,6 +555,8 @@ public class ObjectSelect extends AppCompatActivity { intent.putExtra("videocache", videocache); intent.putExtra("videotime", videotime); intent.putExtra("buffersize", buffersize); + intent.putExtra("playlisttime", playlisttime); + intent.putExtra("isplaylist", isplaylist); startActivity(intent); } @@ -693,4 +738,20 @@ public class ObjectSelect extends AppCompatActivity { Toast.makeText(getApplicationContext(),getResources().getString(R.string.copy_name_ok), Toast.LENGTH_SHORT).show(); } } + + public ArrayList getLinks (ArrayList medialist) throws InterruptedException { + ArrayList links = new ArrayList(); + Date expiration = new Date(); + Calendar mycal = Calendar.getInstance(); + mycal.setTime(expiration); + //System.out.println("today is " + mycal.getTime()); + mycal.add(Calendar.HOUR, playlisttime); + //System.out.println("Expiration date: " + mycal.getTime()); + expiration = mycal.getTime(); + for (int i = 0; i < medialist.size(); i++) { + GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucket, prefix+medialist.get(i)).withExpiration(expiration);; + links.add(s3client.generatePresignedUrl(request).toString()); + } + return links; + } } \ No newline at end of file diff --git a/app/src/main/java/asgardius/page/s3manager/VideoPlayer.java b/app/src/main/java/asgardius/page/s3manager/VideoPlayer.java index 4651fbd..c16f075 100644 --- a/app/src/main/java/asgardius/page/s3manager/VideoPlayer.java +++ b/app/src/main/java/asgardius/page/s3manager/VideoPlayer.java @@ -56,7 +56,7 @@ public class VideoPlayer extends AppCompatActivity { private PowerManager.WakeLock mWakeLock; private PowerManager powerManager; private long maxCacheSize; - ArrayList queue; + ArrayList queue, names; LeastRecentlyUsedCacheEvictor evictor; StandaloneDatabaseProvider standaloneDatabaseProvider; SimpleCache simpleCache; @@ -105,8 +105,9 @@ public class VideoPlayer extends AppCompatActivity { title = getIntent().getStringExtra("title"); videocache = getIntent().getIntExtra("videocache", 40); buffersize = getIntent().getIntExtra("buffersize", 2000); - isplaylist = getIntent().getBooleanExtra("hls", false); + isplaylist = getIntent().getBooleanExtra("isplaylist", false); queue = getIntent().getStringArrayListExtra("queue"); + names = getIntent().getStringArrayListExtra("names"); getSupportActionBar().setTitle(title); loadControl = new DefaultLoadControl.Builder().setBufferDurationsMs(2000, buffersize, 1500, 2000).build(); @@ -328,7 +329,7 @@ public class VideoPlayer extends AppCompatActivity { title = intent.getStringExtra("title"); videocache = intent.getIntExtra("videocache", 40); buffersize = intent.getIntExtra("buffersize", 2000); - isplaylist = intent.getBooleanExtra("hls", false); + isplaylist = intent.getBooleanExtra("isplaylist", false); getSupportActionBar().setTitle(title); mediaSource = new ProgressiveMediaSource.Factory( new CacheDataSource.Factory()