fixed history items not having proper indexes

This commit is contained in:
Denis Çerri 2023-01-16 12:00:35 +01:00
parent 542121d446
commit 82b24c4ea2
No known key found for this signature in database
GPG key ID: 96B3554AF5B193EE
20 changed files with 121 additions and 229 deletions

View file

@ -2,7 +2,7 @@
"formatVersion": 1, "formatVersion": 1,
"database": { "database": {
"version": 1, "version": 1,
"identityHash": "1709c1d446102722d4dc7f2cb96cd40e", "identityHash": "e2280d10a40623d3a51ecf5205500351",
"entities": [ "entities": [
{ {
"tableName": "results", "tableName": "results",
@ -142,7 +142,7 @@
}, },
{ {
"tableName": "downloads", "tableName": "downloads",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `url` TEXT NOT NULL, `title` TEXT NOT NULL, `author` TEXT NOT NULL, `duration` TEXT NOT NULL, `thumb` TEXT NOT NULL, `formatId` INTEGER NOT NULL, `formatDesc` TEXT NOT NULL, `downloadPath` TEXT NOT NULL, `website` TEXT NOT NULL, `downloadSize` TEXT NOT NULL)", "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `url` TEXT NOT NULL, `title` TEXT NOT NULL, `author` TEXT NOT NULL, `startTime` TEXT NOT NULL, `endTime` TEXT NOT NULL, `thumb` TEXT NOT NULL, `formatId` INTEGER NOT NULL, `formatDesc` TEXT NOT NULL, `downloadPath` TEXT NOT NULL, `website` TEXT NOT NULL, `downloadSize` TEXT NOT NULL, `progress` REAL NOT NULL, `custom` INTEGER NOT NULL, `customTemplateId` INTEGER NOT NULL)",
"fields": [ "fields": [
{ {
"fieldPath": "id", "fieldPath": "id",
@ -169,8 +169,14 @@
"notNull": true "notNull": true
}, },
{ {
"fieldPath": "duration", "fieldPath": "startTime",
"columnName": "duration", "columnName": "startTime",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "endTime",
"columnName": "endTime",
"affinity": "TEXT", "affinity": "TEXT",
"notNull": true "notNull": true
}, },
@ -209,6 +215,24 @@
"columnName": "downloadSize", "columnName": "downloadSize",
"affinity": "TEXT", "affinity": "TEXT",
"notNull": true "notNull": true
},
{
"fieldPath": "progress",
"columnName": "progress",
"affinity": "REAL",
"notNull": true
},
{
"fieldPath": "custom",
"columnName": "custom",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "customTemplateId",
"columnName": "customTemplateId",
"affinity": "INTEGER",
"notNull": true
} }
], ],
"primaryKey": { "primaryKey": {
@ -224,7 +248,7 @@
"views": [], "views": [],
"setupQueries": [ "setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '1709c1d446102722d4dc7f2cb96cd40e')" "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'e2280d10a40623d3a51ecf5205500351')"
] ]
} }
} }

View file

@ -34,12 +34,12 @@ import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.Locale; import java.util.Locale;
public class HistoryRecyclerViewAdapter extends ListAdapter<HistoryItem, HistoryRecyclerViewAdapter.ViewHolder> { public class HistoryAdapter extends ListAdapter<HistoryItem, HistoryAdapter.ViewHolder> {
private ArrayList<Integer> checkedItems; private ArrayList<Integer> checkedItems;
private final OnItemClickListener onItemClickListener; private final OnItemClickListener onItemClickListener;
private Activity activity; private Activity activity;
public HistoryRecyclerViewAdapter(OnItemClickListener onItemClickListener, Activity activity) { public HistoryAdapter(OnItemClickListener onItemClickListener, Activity activity) {
super(DIFF_CALLBACK); super(DIFF_CALLBACK);
this.checkedItems = new ArrayList<>(); this.checkedItems = new ArrayList<>();
this.onItemClickListener = onItemClickListener; this.onItemClickListener = onItemClickListener;
@ -78,7 +78,7 @@ public class HistoryRecyclerViewAdapter extends ListAdapter<HistoryItem, History
View cardView = LayoutInflater.from(parent.getContext()) View cardView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.downloads_card, parent, false); .inflate(R.layout.downloads_card, parent, false);
return new HistoryRecyclerViewAdapter.ViewHolder(cardView, onItemClickListener); return new HistoryAdapter.ViewHolder(cardView, onItemClickListener);
} }
@Override @Override

View file

@ -4,14 +4,12 @@ import android.app.Activity;
import android.graphics.Color; import android.graphics.Color;
import android.os.Handler; import android.os.Handler;
import android.os.Looper; import android.os.Looper;
import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
@ -25,13 +23,13 @@ import com.squareup.picasso.Picasso;
import java.util.ArrayList; import java.util.ArrayList;
public class HomeRecyclerViewAdapter extends RecyclerView.Adapter<HomeRecyclerViewAdapter.ViewHolder> { public class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.ViewHolder> {
private ArrayList<Video> videoList; private ArrayList<Video> videoList;
private ArrayList<Integer> checkedVideos; private ArrayList<Integer> checkedVideos;
private final OnItemClickListener onItemClickListener; private final OnItemClickListener onItemClickListener;
private Activity activity; private Activity activity;
public HomeRecyclerViewAdapter(ArrayList<Video> videos, OnItemClickListener onItemClickListener, Activity activity){ public HomeAdapter(ArrayList<Video> videos, OnItemClickListener onItemClickListener, Activity activity){
this.videoList = videos; this.videoList = videos;
this.checkedVideos = new ArrayList<>(); this.checkedVideos = new ArrayList<>();
this.onItemClickListener = onItemClickListener; this.onItemClickListener = onItemClickListener;
@ -58,7 +56,7 @@ public class HomeRecyclerViewAdapter extends RecyclerView.Adapter<HomeRecyclerVi
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View cardView = LayoutInflater.from(parent.getContext()) View cardView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.result_card, parent, false); .inflate(R.layout.result_card, parent, false);
return new HomeRecyclerViewAdapter.ViewHolder(cardView, onItemClickListener); return new HomeAdapter.ViewHolder(cardView, onItemClickListener);
} }
@Override @Override
@ -90,13 +88,13 @@ public class HomeRecyclerViewAdapter extends RecyclerView.Adapter<HomeRecyclerVi
// Bottom Info ---------------------------------- // Bottom Info ----------------------------------
TextView bottomInfo = card.findViewById(R.id.result_info_bottom); TextView author = card.findViewById(R.id.author);
String info = video.getAuthor(); author.setText(video.getAuthor());
TextView duration = card.findViewById(R.id.duration);
if (!video.getDuration().isEmpty()){ if (!video.getDuration().isEmpty()){
if (!video.getAuthor().isEmpty()) info += ""; duration.setText(video.getDuration());
info += video.getDuration();
} }
bottomInfo.setText(info);
// BUTTONS ---------------------------------- // BUTTONS ----------------------------------
String videoID = video.getVideoId(); String videoID = video.getVideoId();

View file

@ -10,11 +10,15 @@ data class DownloadItem(
val url: String, val url: String,
val title: String, val title: String,
val author: String, val author: String,
val duration: String, val startTime: String,
val endTime: String,
val thumb: String, val thumb: String,
val formatId: Int, val formatId: Int,
val formatDesc: String, val formatDesc: String,
val downloadPath: String, val downloadPath: String,
val website: String, val website: String,
val downloadSize: String val downloadSize: String,
val progress: Float,
val custom: Boolean,
val customTemplateId: Int
) )

View file

@ -30,7 +30,6 @@ class HistoryRepository(private val historyDao: HistoryDao) {
} }
suspend fun delete(item: HistoryItem, deleteFile: Boolean){ suspend fun delete(item: HistoryItem, deleteFile: Boolean){
Log.e("ASd", item.id.toString())
historyDao.delete(item.id) historyDao.delete(item.id)
if (deleteFile){ if (deleteFile){
val fileUtil = FileUtil() val fileUtil = FileUtil()
@ -54,7 +53,7 @@ class HistoryRepository(private val historyDao: HistoryDao) {
val fileUtil = FileUtil() val fileUtil = FileUtil()
items.value?.forEach { item -> items.value?.forEach { item ->
if (!fileUtil.exists(item.downloadPath)){ if (!fileUtil.exists(item.downloadPath)){
delete(item, false) historyDao.delete(item.id)
} }
} }
} }

View file

@ -125,7 +125,7 @@ public class CustomCommandActivity extends AppCompatActivity {
topAppBar = findViewById(R.id.custom_command_toolbar); topAppBar = findViewById(R.id.custom_command_toolbar);
topAppBar.setNavigationOnClickListener(view -> onBackPressed()); topAppBar.setNavigationOnClickListener(view -> onBackPressed());
output = findViewById(R.id.custom_command_output); output = findViewById(R.id.custom_command_output);
output.setMovementMethod(new ScrollingMovementMethod()); output.setTextIsSelectable(true);
input = findViewById(R.id.command_edittext); input = findViewById(R.id.command_edittext);
input.requestFocus(); input.requestFocus();

View file

@ -19,7 +19,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.deniscerri.ytdlnis.MainActivity import com.deniscerri.ytdlnis.MainActivity
import com.deniscerri.ytdlnis.R import com.deniscerri.ytdlnis.R
import com.deniscerri.ytdlnis.adapter.HistoryRecyclerViewAdapter import com.deniscerri.ytdlnis.adapter.HistoryAdapter
import com.deniscerri.ytdlnis.database.DatabaseManager import com.deniscerri.ytdlnis.database.DatabaseManager
import com.deniscerri.ytdlnis.database.models.HistoryItem import com.deniscerri.ytdlnis.database.models.HistoryItem
import com.deniscerri.ytdlnis.database.repository.HistoryRepository.HistorySort import com.deniscerri.ytdlnis.database.repository.HistoryRepository.HistorySort
@ -39,7 +39,7 @@ import java.io.File
/** /**
* A fragment representing a list of Items. * A fragment representing a list of Items.
*/ */
class DownloadsFragment : Fragment(), HistoryRecyclerViewAdapter.OnItemClickListener, class DownloadsFragment : Fragment(), HistoryAdapter.OnItemClickListener,
OnClickListener, OnLongClickListener { OnClickListener, OnLongClickListener {
private lateinit var historyViewModel : HistoryViewModel private lateinit var historyViewModel : HistoryViewModel
@ -53,7 +53,7 @@ class DownloadsFragment : Fragment(), HistoryRecyclerViewAdapter.OnItemClickList
private var shimmerCards: ShimmerFrameLayout? = null private var shimmerCards: ShimmerFrameLayout? = null
private var topAppBar: MaterialToolbar? = null private var topAppBar: MaterialToolbar? = null
private var recyclerView: RecyclerView? = null private var recyclerView: RecyclerView? = null
private var historyRecyclerViewAdapter: HistoryRecyclerViewAdapter? = null private var historyAdapter: HistoryAdapter? = null
private var bottomSheet: BottomSheetDialog? = null private var bottomSheet: BottomSheetDialog? = null
private var sortSheet: BottomSheetDialog? = null private var sortSheet: BottomSheetDialog? = null
private var uiHandler: Handler? = null private var uiHandler: Handler? = null
@ -102,14 +102,14 @@ class DownloadsFragment : Fragment(), HistoryRecyclerViewAdapter.OnItemClickList
downloadsList = mutableListOf() downloadsList = mutableListOf()
allDownloadsList = mutableListOf() allDownloadsList = mutableListOf()
historyRecyclerViewAdapter = historyAdapter =
HistoryRecyclerViewAdapter( HistoryAdapter(
this, this,
activity activity
) )
recyclerView = view.findViewById(R.id.recyclerviewdownloadss) recyclerView = view.findViewById(R.id.recyclerviewdownloadss)
recyclerView?.layoutManager = LinearLayoutManager(context) recyclerView?.layoutManager = LinearLayoutManager(context)
recyclerView?.adapter = historyRecyclerViewAdapter recyclerView?.adapter = historyAdapter
noResults?.visibility = GONE noResults?.visibility = GONE
selectionChips?.visibility = VISIBLE selectionChips?.visibility = VISIBLE
@ -131,7 +131,7 @@ class DownloadsFragment : Fragment(), HistoryRecyclerViewAdapter.OnItemClickList
} }
historyViewModel.getFilteredList().observe(viewLifecycleOwner) { historyViewModel.getFilteredList().observe(viewLifecycleOwner) {
historyRecyclerViewAdapter!!.submitList(it) historyAdapter!!.submitList(it)
downloadsList = it downloadsList = it
} }
@ -347,7 +347,7 @@ class DownloadsFragment : Fragment(), HistoryRecyclerViewAdapter.OnItemClickList
historyViewModel.delete(item, deleteFile[0]) historyViewModel.delete(item, deleteFile[0])
} }
selectedObjects = ArrayList() selectedObjects = ArrayList()
historyRecyclerViewAdapter!!.clearCheckedVideos() historyAdapter!!.clearCheckedVideos()
deleteFab!!.visibility = GONE deleteFab!!.visibility = GONE
} }
deleteDialog.show() deleteDialog.show()

View file

@ -33,7 +33,7 @@ import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.deniscerri.ytdlnis.MainActivity; import com.deniscerri.ytdlnis.MainActivity;
import com.deniscerri.ytdlnis.R; import com.deniscerri.ytdlnis.R;
import com.deniscerri.ytdlnis.adapter.HomeRecyclerViewAdapter; import com.deniscerri.ytdlnis.adapter.HomeAdapter;
import com.deniscerri.ytdlnis.util.InfoUtil; import com.deniscerri.ytdlnis.util.InfoUtil;
import com.deniscerri.ytdlnis.database.DatabaseManager; import com.deniscerri.ytdlnis.database.DatabaseManager;
import com.deniscerri.ytdlnis.database.Video; import com.deniscerri.ytdlnis.database.Video;
@ -56,7 +56,7 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.OnItemClickListener, View.OnClickListener { public class HomeFragment extends Fragment implements HomeAdapter.OnItemClickListener, View.OnClickListener {
private boolean downloading = false; private boolean downloading = false;
private View fragmentView; private View fragmentView;
private LinearProgressIndicator progressBar; private LinearProgressIndicator progressBar;
@ -64,7 +64,7 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
private LinkedList<String> inputQueries; private LinkedList<String> inputQueries;
private int inputQueriesLength = 0; private int inputQueriesLength = 0;
private RecyclerView recyclerView; private RecyclerView recyclerView;
private HomeRecyclerViewAdapter homeRecyclerViewAdapter; private HomeAdapter homeAdapter;
private ScrollView searchSuggestions; private ScrollView searchSuggestions;
private LinearLayout searchSuggestionsLinearLayout; private LinearLayout searchSuggestionsLinearLayout;
private ShimmerFrameLayout shimmerCards; private ShimmerFrameLayout shimmerCards;
@ -131,7 +131,7 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
item = findVideo(url); item = findVideo(url);
if (type.equals("audio")) item.setDownloadingAudio(false); if (type.equals("audio")) item.setDownloadingAudio(false);
else if (type.equals("video")) item.setDownloadingVideo(false); else if (type.equals("video")) item.setDownloadingVideo(false);
homeRecyclerViewAdapter.notifyItemChanged(resultObjects.indexOf(item)); homeAdapter.notifyItemChanged(resultObjects.indexOf(item));
downloading = false; downloading = false;
topAppBar.getMenu().findItem(R.id.cancel_download).setVisible(false); topAppBar.getMenu().findItem(R.id.cancel_download).setVisible(false);
@ -148,7 +148,7 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
updateDownloadingStatusOnResult(item, type, false); updateDownloadingStatusOnResult(item, type, false);
if (type.equals("audio")) item.setDownloadedAudio(1); if (type.equals("audio")) item.setDownloadedAudio(1);
else item.setDownloadedVideo(1); else item.setDownloadedVideo(1);
homeRecyclerViewAdapter.notifyItemChanged(resultObjects.indexOf(findVideo(url))); homeAdapter.notifyItemChanged(resultObjects.indexOf(findVideo(url)));
updateDownloadStatusOnResult(item, type, true); updateDownloadStatusOnResult(item, type, true);
downloading = false; downloading = false;
topAppBar.getMenu().findItem(R.id.cancel_download).setVisible(false); topAppBar.getMenu().findItem(R.id.cancel_download).setVisible(false);
@ -231,8 +231,8 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
searchSuggestions = fragmentView.findViewById(R.id.search_suggestions_scroll_view); searchSuggestions = fragmentView.findViewById(R.id.search_suggestions_scroll_view);
searchSuggestionsLinearLayout = fragmentView.findViewById(R.id.search_suggestions_linear_layout); searchSuggestionsLinearLayout = fragmentView.findViewById(R.id.search_suggestions_linear_layout);
homeRecyclerViewAdapter = new HomeRecyclerViewAdapter(resultObjects, this, activity); homeAdapter = new HomeAdapter(resultObjects, this, activity);
recyclerView.setAdapter(homeRecyclerViewAdapter); recyclerView.setAdapter(homeAdapter);
initMenu(); initMenu();
@ -258,7 +258,7 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
databaseManager.clearResults(); databaseManager.clearResults();
databaseManager.close(); databaseManager.close();
inputQueriesLength = inputQueries.size(); inputQueriesLength = inputQueries.size();
homeRecyclerViewAdapter.clear(); homeAdapter.clear();
shimmerCards.startShimmer(); shimmerCards.startShimmer();
shimmerCards.setVisibility(View.VISIBLE); shimmerCards.setVisibility(View.VISIBLE);
@ -291,7 +291,7 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
private void initCards() { private void initCards() {
homeRecyclerViewAdapter.clear(); homeAdapter.clear();
Handler uiHandler = new Handler(Looper.getMainLooper()); Handler uiHandler = new Handler(Looper.getMainLooper());
try { try {
Thread thread = new Thread(() -> { Thread thread = new Thread(() -> {
@ -316,7 +316,7 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
} }
}else { }else {
if (!downloading){ if (!downloading){
homeRecyclerViewAdapter.add(resultObjects); homeAdapter.add(resultObjects);
for (int i = 0; i < resultObjects.size(); i++){ for (int i = 0; i < resultObjects.size(); i++){
Video tmp = resultObjects.get(i); Video tmp = resultObjects.get(i);
if(tmp.isDownloading()){ if(tmp.isDownloading()){
@ -328,8 +328,8 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
} }
uiHandler.post(() -> { uiHandler.post(() -> {
if (homeRecyclerViewAdapter.getItemCount() != resultObjects.size()){ if (homeAdapter.getItemCount() != resultObjects.size()){
homeRecyclerViewAdapter.add(resultObjects); homeAdapter.add(resultObjects);
} }
shimmerCards.stopShimmer(); shimmerCards.stopShimmer();
shimmerCards.setVisibility(View.GONE); shimmerCards.setVisibility(View.GONE);
@ -396,7 +396,7 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
shimmerCards.startShimmer(); shimmerCards.startShimmer();
shimmerCards.setVisibility(View.VISIBLE); shimmerCards.setVisibility(View.VISIBLE);
homeRecyclerViewAdapter.clear(); homeAdapter.clear();
Thread thread = new Thread(() -> { Thread thread = new Thread(() -> {
parseQuery(true); parseQuery(true);
// DOWNLOAD ALL BUTTON // DOWNLOAD ALL BUTTON
@ -504,7 +504,7 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
new Handler(Looper.getMainLooper()).post(() -> { new Handler(Looper.getMainLooper()).post(() -> {
if (resetResults) databaseManager.clearResults(); if (resetResults) databaseManager.clearResults();
databaseManager.addToResults(resultObjects); databaseManager.addToResults(resultObjects);
homeRecyclerViewAdapter.add(res); homeAdapter.add(res);
shimmerCards.stopShimmer(); shimmerCards.stopShimmer();
shimmerCards.setVisibility(View.GONE); shimmerCards.setVisibility(View.GONE);
}); });
@ -537,7 +537,7 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
new Handler(Looper.getMainLooper()).post(() -> { new Handler(Looper.getMainLooper()).post(() -> {
if (resetResults) databaseManager.clearResults(); if (resetResults) databaseManager.clearResults();
databaseManager.addToResults(resultObjects); databaseManager.addToResults(resultObjects);
homeRecyclerViewAdapter.add(res); homeAdapter.add(res);
shimmerCards.stopShimmer(); shimmerCards.stopShimmer();
shimmerCards.setVisibility(View.GONE); shimmerCards.setVisibility(View.GONE);
}); });
@ -556,7 +556,7 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
if (resetResults) databaseManager.clearResults(); if (resetResults) databaseManager.clearResults();
if (resetResults){ if (resetResults){
resultObjects.clear(); resultObjects.clear();
homeRecyclerViewAdapter.clear(); homeAdapter.clear();
} }
do { do {
InfoUtil.PlaylistTuple tmp = infoUtil.getPlaylist(inputQuery, nextPageToken); InfoUtil.PlaylistTuple tmp = infoUtil.getPlaylist(inputQuery, nextPageToken);
@ -565,7 +565,7 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
resultObjects.addAll(tmp_vids); resultObjects.addAll(tmp_vids);
new Handler(Looper.getMainLooper()).post(() -> { new Handler(Looper.getMainLooper()).post(() -> {
databaseManager.addToResults(tmp_vids); databaseManager.addToResults(tmp_vids);
homeRecyclerViewAdapter.add(tmp_vids); homeAdapter.add(tmp_vids);
shimmerCards.stopShimmer(); shimmerCards.stopShimmer();
shimmerCards.setVisibility(View.GONE); shimmerCards.setVisibility(View.GONE);
}); });
@ -583,7 +583,7 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
resultObjects.addAll(video); resultObjects.addAll(video);
new Handler(Looper.getMainLooper()).post(() -> { new Handler(Looper.getMainLooper()).post(() -> {
if (resetResults) databaseManager.clearResults(); if (resetResults) databaseManager.clearResults();
homeRecyclerViewAdapter.add(video); homeAdapter.add(video);
databaseManager.addToResults(resultObjects); databaseManager.addToResults(resultObjects);
}); });
} }
@ -675,7 +675,7 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
if (v != null) { if (v != null) {
if (type.equals("audio")) v.setDownloadingAudio(isDownloading); if (type.equals("audio")) v.setDownloadingAudio(isDownloading);
else if (type.equals("video")) v.setDownloadingVideo(isDownloading); else if (type.equals("video")) v.setDownloadingVideo(isDownloading);
homeRecyclerViewAdapter.updateVideoListItem(v, resultObjects.indexOf(v)); homeAdapter.updateVideoListItem(v, resultObjects.indexOf(v));
databaseManager = new DatabaseManager(context); databaseManager = new DatabaseManager(context);
try { try {
databaseManager.updateDownloadingStatusOnResult(v.getVideoId(), type, isDownloading); databaseManager.updateDownloadingStatusOnResult(v.getVideoId(), type, isDownloading);
@ -719,7 +719,7 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
//remove previously selected //remove previously selected
for (int i = 0; i < selectedObjects.size(); i++) { for (int i = 0; i < selectedObjects.size(); i++) {
Video vid = findVideo(selectedObjects.get(i).getURL()); Video vid = findVideo(selectedObjects.get(i).getURL());
homeRecyclerViewAdapter.notifyItemChanged(resultObjects.indexOf(vid)); homeAdapter.notifyItemChanged(resultObjects.indexOf(vid));
} }
selectedObjects = new ArrayList<>(); selectedObjects = new ArrayList<>();
downloadFabs.setVisibility(View.GONE); downloadFabs.setVisibility(View.GONE);
@ -802,11 +802,11 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
Video vid = findVideo(selectedObjects.get(i).getURL()); Video vid = findVideo(selectedObjects.get(i).getURL());
vid.setDownloadedType(type); vid.setDownloadedType(type);
updateDownloadingStatusOnResult(vid, type, true); updateDownloadingStatusOnResult(vid, type, true);
homeRecyclerViewAdapter.notifyItemChanged(resultObjects.indexOf(vid)); homeAdapter.notifyItemChanged(resultObjects.indexOf(vid));
downloadQueue.add(vid); downloadQueue.add(vid);
} }
selectedObjects = new ArrayList<>(); selectedObjects = new ArrayList<>();
homeRecyclerViewAdapter.clearCheckedVideos(); homeAdapter.clearCheckedVideos();
downloadFabs.setVisibility(View.GONE); downloadFabs.setVisibility(View.GONE);
if(isStoragePermissionGranted()){ if(isStoragePermissionGranted()){
@ -985,11 +985,11 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
Video vid = findVideo(selectedObjects.get(i).getURL()); Video vid = findVideo(selectedObjects.get(i).getURL());
vid.setDownloadedType(type); vid.setDownloadedType(type);
updateDownloadingStatusOnResult(vid, type, true); updateDownloadingStatusOnResult(vid, type, true);
homeRecyclerViewAdapter.notifyItemChanged(resultObjects.indexOf(vid)); homeAdapter.notifyItemChanged(resultObjects.indexOf(vid));
downloadQueue.add(vid); downloadQueue.add(vid);
} }
selectedObjects = new ArrayList<>(); selectedObjects = new ArrayList<>();
homeRecyclerViewAdapter.clearCheckedVideos(); homeAdapter.clearCheckedVideos();
downloadFabs.setVisibility(View.GONE); downloadFabs.setVisibility(View.GONE);
if(isStoragePermissionGranted()){ if(isStoragePermissionGranted()){

View file

@ -1,5 +0,0 @@
<vector android:height="24dp" android:tint="#00A6FF"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M19,19H5V5h7V3H5c-1.11,0 -2,0.9 -2,2v14c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2v-7h-2v7zM14,3v2h3.59l-9.83,9.83 1.41,1.41L19,6.41V10h2V3h-7z"/>
</vector>

View file

@ -1,5 +0,0 @@
<vector android:height="24dp"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="?attr/colorAccent" android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"/>
</vector>

View file

@ -1,5 +0,0 @@
<vector android:height="24dp"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="?android:textColorPrimary" android:pathData="M10,18h4v-2h-4v2zM3,6v2h18L21,6L3,6zM6,13h12v-2L6,11v2z"/>
</vector>

View file

@ -1,5 +0,0 @@
<vector android:height="24dp" android:tint="#00A6FF"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M4,12l1.41,1.41L11,7.83V20h2V7.83l5.58,5.59L20,12l-8,-8 -8,8z"/>
</vector>

View file

@ -1,5 +0,0 @@
<vector android:height="24dp" android:tint="#FFFFFF"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M13,3c-4.97,0 -9,4.03 -9,9L1,12l3.89,3.89 0.07,0.14L9,12L6,12c0,-3.87 3.13,-7 7,-7s7,3.13 7,7 -3.13,7 -7,7c-1.93,0 -3.68,-0.79 -4.94,-2.06l-1.42,1.42C8.27,19.99 10.51,21 13,21c4.97,0 9,-4.03 9,-9s-4.03,-9 -9,-9zM12,8v5l4.28,2.54 0.72,-1.21 -3.5,-2.08L13.5,8L12,8z"/>
</vector>

View file

@ -1,5 +0,0 @@
<vector android:height="24dp"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="?android:colorAccent" android:pathData="M4.27,3L3,4.27l9,9v0.28c-0.59,-0.34 -1.27,-0.55 -2,-0.55 -2.21,0 -4,1.79 -4,4s1.79,4 4,4 4,-1.79 4,-4v-1.73L19.73,21 21,19.73 4.27,3zM14,7h4V3h-6v5.18l2,2z"/>
</vector>

View file

@ -1,5 +0,0 @@
<vector android:height="24dp"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="?android:textColorPrimary" android:pathData="M17.65,6.35C16.2,4.9 14.21,4 12,4c-4.42,0 -7.99,3.58 -7.99,8s3.57,8 7.99,8c3.73,0 6.84,-2.55 7.73,-6h-2.08c-0.82,2.33 -3.04,4 -5.65,4 -3.31,0 -6,-2.69 -6,-6s2.69,-6 6,-6c1.66,0 3.14,0.69 4.22,1.78L13,11h7V4l-2.35,2.35z"/>
</vector>

View file

@ -1,5 +0,0 @@
<vector android:height="24dp"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="?android:colorAccent" android:pathData="M21,6.5l-4,4V7c0,-0.55 -0.45,-1 -1,-1H9.82L21,17.18V6.5zM3.27,2L2,3.27 4.73,6H4c-0.55,0 -1,0.45 -1,1v10c0,0.55 0.45,1 1,1h12c0.21,0 0.39,-0.08 0.54,-0.18L19.73,21 21,19.73 3.27,2z"/>
</vector>

View file

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:alpha="1.0"/>
</shape>

View file

@ -43,6 +43,7 @@
<TextView <TextView
android:id="@+id/custom_command_output" android:id="@+id/custom_command_output"
android:layout_width="match_parent" android:layout_width="match_parent"
android:textIsSelectable="true"
android:gravity="bottom" android:gravity="bottom"
android:layout_height="wrap_content" /> android:layout_height="wrap_content" />

View file

@ -1,112 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout android:id="@+id/downloads_element_bottom_sheet"
style="@style/Widget.Material3.BottomSheet"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<HorizontalScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:layout_gravity="center"
>
<com.google.android.material.chip.ChipGroup
android:layout_width="wrap_content"
app:singleLine="true"
android:layout_height="wrap_content">
<com.google.android.material.chip.Chip
android:id="@+id/test1"
style="@style/Widget.Material3.Chip.Filter"
android:layout_width="wrap_content"
android:textSize="15sp"
android:checked="true"
android:textColor="?attr/colorOnSurface"
android:layout_height="wrap_content"
android:text="@string/app_name" />
<com.google.android.material.chip.Chip
android:id="@+id/test2"
style="@style/Widget.Material3.Chip.Filter"
android:layout_width="wrap_content"
android:textSize="15sp"
android:checked="true"
android:textColor="?attr/colorOnSurface"
android:layout_height="wrap_content"
android:text="@string/app_name" />
<com.google.android.material.chip.Chip
android:id="@+id/test3"
style="@style/Widget.Material3.Chip.Filter"
android:layout_width="wrap_content"
android:textSize="15sp"
android:checked="true"
android:textColor="?attr/colorOnSurface"
android:layout_height="wrap_content"
android:text="@string/app_name" />
<com.google.android.material.chip.Chip
android:id="@+id/test5"
style="@style/Widget.Material3.Chip.Filter"
android:layout_width="wrap_content"
android:textSize="15sp"
android:checked="true"
android:textColor="?attr/colorOnSurface"
android:layout_height="wrap_content"
android:text="@string/app_name" />
</com.google.android.material.chip.ChipGroup>
</HorizontalScrollView>
<Button
style="@style/Widget.Material3.Button.TextButton.Icon"
android:id="@+id/bottom_sheet_link"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="15sp"
android:layout_gravity="center"
app:icon="@drawable/ic_link"
android:text="@string/app_name" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:gravity="right"
android:layout_margin="20dp"
android:orientation="horizontal">
<Button
style="@style/Widget.Material3.Button.OutlinedButton.Icon"
android:id="@+id/bottomsheet_remove_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
app:icon="@drawable/ic_baseline_delete_outline_24"
android:text="@string/Remove" />
<Button
style="@style/Widget.Material3.Button.TonalButton.Icon"
android:id="@+id/bottomsheet_open_link_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/Open_Link"
app:icon="@drawable/ic_baseline_open_in_new_24"
android:autoLink="all"/>
</LinearLayout>
</LinearLayout>
</FrameLayout>

View file

@ -46,29 +46,51 @@
android:alpha="0.7" android:alpha="0.7"
android:scaleY="100" /> android:scaleY="100" />
<TextView <LinearLayout
android:id="@+id/result_title"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="120dp" android:layout_height="100dp"
android:paddingTop="10dp" android:dividerPadding="5dp"
android:paddingEnd="20dp" android:orientation="vertical">
android:paddingBottom="20dp"
android:paddingStart="10dp" <TextView
android:textSize="18sp" android:id="@+id/result_title"
android:textColor="@color/white" android:layout_width="match_parent"
android:textStyle="bold" android:layout_height="wrap_content"
android:shadowRadius="2" android:paddingTop="10dp"
android:shadowDx="4" android:paddingEnd="10dp"
android:shadowDy="4" android:paddingStart="10dp"
android:shadowColor="@color/black" /> android:textSize="15sp"
android:textColor="@color/white"
android:textStyle="bold"
android:shadowRadius="2"
android:shadowDx="4"
android:shadowDy="4"
android:shadowColor="@color/black" />
<TextView
android:id="@+id/author"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="bottom"
android:paddingEnd="10dp"
android:paddingBottom="5dp"
android:paddingStart="10dp"
android:textSize="10sp"
android:textColor="@color/white"
android:textStyle="bold"
android:shadowRadius="1.5"
android:shadowDx="4"
android:shadowDy="4"
android:shadowColor="@color/black" />
</LinearLayout>
<TextView <TextView
android:id="@+id/result_info_bottom" android:id="@+id/duration"
android:layout_width="250dp" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:gravity="bottom" android:gravity="bottom"
android:paddingTop="10dp" android:paddingEnd="10dp"
android:paddingEnd="20dp"
android:paddingBottom="20dp" android:paddingBottom="20dp"
android:paddingStart="10dp" android:paddingStart="10dp"
android:textSize="12sp" android:textSize="12sp"