package com.armdev.DemoPlayer.activity;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.graphics.PorterDuff;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ImageView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.SearchView;
import androidx.appcompat.widget.Toolbar;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.armdev.DemoPlayer.VideoModel;
import com.armdev.DemoPlayer.adapter.VideosAdapter;
import com.armdev.advid.R;
import java.util.ArrayList;
import java.util.Locale;
public class VideoFolder extends AppCompatActivity implements SearchView.OnQueryTextListener {
private static final String MY_SORT_PREF = "sortOrder";
private RecyclerView recyclerView;
private String name;
public ArrayList<VideoModel> videoModelArrayList = new ArrayList<>();
private VideosAdapter videosAdapter;
Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_video_folder);
name = getIntent().getStringExtra("folderName");
recyclerView = findViewById(R.id.video_recyclerview);
toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
int index = name.lastIndexOf("/");
String onlyFolderName = name.substring(index+1);
toolbar.setTitle(onlyFolderName);
toolbar.setTitleTextAppearance(this, R.style.VarelaAppearance);
loadVideos();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_toolbar, menu);
MenuItem menuItem = menu.findItem(R.id.search);
SearchView searchView = (SearchView) menuItem.getActionView();
ImageView ivClose = searchView.findViewById(androidx.appcompat.R.id.search_close_btn);
ivClose.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.orange), PorterDuff.Mode.SRC_IN);
searchView.setQueryHint("Rechercher un fichier");
searchView.setOnQueryTextListener(this);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
String input = newText.toLowerCase();
ArrayList<VideoModel> searchList = new ArrayList<>();
for (VideoModel model : videoModelArrayList){
if (model.getTitle().toLowerCase().contains(input)){
searchList.add(model);
}
}
videosAdapter.updateSearchList(searchList);
return false;
}
public void loadVideos() {
videoModelArrayList = getallVideoFromFolder(this, name);
if (name!=null && videoModelArrayList.size()>0){
videosAdapter = new VideosAdapter(videoModelArrayList, this);
recyclerView.setAdapter(videosAdapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this, RecyclerView.VERTICAL, false));
}else {
Toast.makeText(this, "Aucun fichier trouvé", Toast.LENGTH_SHORT).show();;
}
}
public ArrayList<VideoModel> getallVideoFromFolder(Context context, String name) {
SharedPreferences preferences = getSharedPreferences(MY_SORT_PREF, MODE_PRIVATE);
String sort = preferences.getString("sorting", "sortByDate");
String order = null;
switch (sort){
case "sortByDate":
order = MediaStore.MediaColumns.DATE_ADDED + " ASC";
break;
case "sortByName":
order = MediaStore.MediaColumns.DISPLAY_NAME + " ASC";
break;
case "sortBySize":
order = MediaStore.MediaColumns.SIZE + " DESC";
break;
}
ArrayList<VideoModel> list = new ArrayList<>();
Uri uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
String[] projection = {
MediaStore.Video.Media._ID,
MediaStore.Video.Media.DATA,
MediaStore.Video.Media.TITLE,
MediaStore.Video.Media.SIZE,
MediaStore.Video.Media.HEIGHT,
MediaStore.Video.Media.DURATION,
MediaStore.Video.Media.DISPLAY_NAME,
MediaStore.Video.Media.BUCKET_DISPLAY_NAME,
MediaStore.Video.Media.RESOLUTION
};
String selection = MediaStore.Video.Media.DATA + " like?";
String[] selectionArgs = new String[]{"%" + name + "%"};
Cursor cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, order);
if (cursor != null) {
while (cursor.moveToNext()) {
String id = cursor.getString(0);
String path = cursor.getString(1);
String title = cursor.getString(2);
int size = cursor.getInt(3);
String resolution = cursor.getString(4);
int duration = cursor.getInt(5);
String disName = cursor.getString(6);
String bucket_display_name = cursor.getString(7);
String width_height = cursor.getString(8);
//this method convert 1204 in 1MB
String human_can_read = null;
if (size < 1024) {
human_can_read = String.format(context.getString(R.string.size_in_b), (double) size);
} else if (size < Math.pow(1024, 2)) {
human_can_read = String.format(context.getString(R.string.size_in_kb), (double) (size / 1024));
} else if (size < Math.pow(1024, 3)) {
human_can_read = String.format(context.getString(R.string.size_in_mb), size / Math.pow(1024, 2));
} else {
human_can_read = String.format(context.getString(R.string.size_in_gb), size / Math.pow(1024, 3));
}
//this method convert any random video duration like 1331533132 into 1:21:12
String duration_formatted;
int sec = (duration / 1000) % 60;
int min = (duration / (1000 * 60)) % 60;
int hrs = duration / (1000 * 60 * 60);
if (hrs == 0) {
duration_formatted = String.valueOf(min)
.concat(":".concat(String.format(Locale.FRANCE, "%02d", sec)));
} else {
duration_formatted = String.valueOf(hrs)
.concat(":".concat(String.format(Locale.FRANCE, "%02d", min)
.concat(":".concat(String.format(Locale.FRANCE, "%02d", sec)))));
}
VideoModel files = new VideoModel(id, path, title,
human_can_read, resolution, duration_formatted,
disName, width_height);
if (name.endsWith(bucket_display_name))
list.add(files);
}
cursor.close();
}
return list;
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
SharedPreferences.Editor editor = getSharedPreferences(MY_SORT_PREF, MODE_PRIVATE).edit();
switch (item.getItemId()){
case R.id.sort_dy_date:
editor.putString("sorting", "sortByDate");
editor.apply();
this.recreate();
break;
case R.id.sort_dy_name:
editor.putString("sorting", "sortByName");
editor.apply();
this.recreate();
break;
case R.id.sort_dy_size:
editor.putString("sorting", "sortBySize");
editor.apply();
this.recreate();
break;
case R.id.home:
onBackPressed();
break;
}
return super.onOptionsItemSelected(item);
}
}