From 6dc413cbd2304060c26b9ab921685f29d9112584 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Denis=20=C3=87erri?=
<64997243+deniscerri@users.noreply.github.com>
Date: Tue, 24 Jan 2023 19:27:40 +0100
Subject: [PATCH] turned more files to kotlin
---
.idea/assetWizardSettings.xml | 4 +-
.../ytdlnis/database/DatabaseManager.java | 351 ------------------
.../ytdlnis/service/DownloadInfo.java | 74 ----
.../ytdlnis/service/DownloadInfo.kt | 19 +
.../ytdlnis/service/IDownloaderListener.java | 11 -
.../ytdlnis/service/IDownloaderListener.kt | 11 +
.../ytdlnis/service/IDownloaderService.java | 16 -
.../ytdlnis/service/IDownloaderService.kt | 13 +
.../ytdlnis/service/api/InvidiousService.kt | 47 ---
.../ytdlnis/service/api/YoutubeAPIService.kt | 66 ----
.../ytdlnis/ui/CustomCommandActivity.java | 213 -----------
.../ytdlnis/ui/CustomCommandActivity.kt | 212 +++++++++++
.../deniscerri/ytdlnis/ui/HistoryFragment.kt | 3 -
.../com/deniscerri/ytdlnis/ui/HomeFragment.kt | 11 +-
.../deniscerri/ytdlnis/ui/MoreFragment.java | 13 -
.../com/deniscerri/ytdlnis/ui/MoreFragment.kt | 15 +
.../downloadcard/DownloadBottomSheetDialog.kt | 12 +-
.../ytdlnis/ui/settings/SettingsActivity.java | 38 --
.../ytdlnis/ui/settings/SettingsActivity.kt | 26 ++
.../com/deniscerri/ytdlnis/util/InfoUtil.kt | 6 -
.../res/drawable/ic_baseline_file_open_24.xml | 4 +-
.../main/res/drawable/ic_download_type.xml | 5 +
app/src/main/res/drawable/ic_format.xml | 5 +
app/src/main/res/drawable/ic_handle.xml | 5 +
app/src/main/res/layout/download_card.xml | 138 +++++++
.../layout/download_multiple_bottom_sheet.xml | 101 +++++
app/src/main/res/values/strings.xml | 1 +
app/src/main/res/xml/more_preferences.xml | 13 +-
28 files changed, 578 insertions(+), 855 deletions(-)
delete mode 100644 app/src/main/java/com/deniscerri/ytdlnis/database/DatabaseManager.java
delete mode 100644 app/src/main/java/com/deniscerri/ytdlnis/service/DownloadInfo.java
create mode 100644 app/src/main/java/com/deniscerri/ytdlnis/service/DownloadInfo.kt
delete mode 100644 app/src/main/java/com/deniscerri/ytdlnis/service/IDownloaderListener.java
create mode 100644 app/src/main/java/com/deniscerri/ytdlnis/service/IDownloaderListener.kt
delete mode 100644 app/src/main/java/com/deniscerri/ytdlnis/service/IDownloaderService.java
create mode 100644 app/src/main/java/com/deniscerri/ytdlnis/service/IDownloaderService.kt
delete mode 100644 app/src/main/java/com/deniscerri/ytdlnis/service/api/InvidiousService.kt
delete mode 100644 app/src/main/java/com/deniscerri/ytdlnis/service/api/YoutubeAPIService.kt
delete mode 100644 app/src/main/java/com/deniscerri/ytdlnis/ui/CustomCommandActivity.java
create mode 100644 app/src/main/java/com/deniscerri/ytdlnis/ui/CustomCommandActivity.kt
delete mode 100644 app/src/main/java/com/deniscerri/ytdlnis/ui/MoreFragment.java
create mode 100644 app/src/main/java/com/deniscerri/ytdlnis/ui/MoreFragment.kt
delete mode 100644 app/src/main/java/com/deniscerri/ytdlnis/ui/settings/SettingsActivity.java
create mode 100644 app/src/main/java/com/deniscerri/ytdlnis/ui/settings/SettingsActivity.kt
create mode 100644 app/src/main/res/drawable/ic_download_type.xml
create mode 100644 app/src/main/res/drawable/ic_format.xml
create mode 100644 app/src/main/res/drawable/ic_handle.xml
create mode 100644 app/src/main/res/layout/download_card.xml
create mode 100644 app/src/main/res/layout/download_multiple_bottom_sheet.xml
diff --git a/.idea/assetWizardSettings.xml b/.idea/assetWizardSettings.xml
index 6c2b6dda..eb14f89a 100644
--- a/.idea/assetWizardSettings.xml
+++ b/.idea/assetWizardSettings.xml
@@ -320,7 +320,7 @@
@@ -330,7 +330,7 @@
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/DatabaseManager.java b/app/src/main/java/com/deniscerri/ytdlnis/database/DatabaseManager.java
deleted file mode 100644
index f5e3c6e2..00000000
--- a/app/src/main/java/com/deniscerri/ytdlnis/database/DatabaseManager.java
+++ /dev/null
@@ -1,351 +0,0 @@
-package com.deniscerri.ytdlnis.database;
-
-import android.annotation.SuppressLint;
-import android.content.ContentValues;
-import android.content.Context;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteDatabase;
-import android.database.sqlite.SQLiteOpenHelper;
-
-import com.deniscerri.ytdlnis.database.models.HistoryItem;
-import com.deniscerri.ytdlnis.database.models.ResultItem;
-
-import java.io.File;
-import java.util.ArrayList;
-
-public class DatabaseManager extends SQLiteOpenHelper {
- Context context;
-
- public static final String db_name = "ytdlnis_db";
- public static final int db_version = 7;
- public static final String results_table_name = "results";
- public static final String history_table_name = "history";
- public static final String id = "id";
- public static final String videoId = "videoId";
- public static final String url = "url";
- public static final String title = "title";
- public static final String author = "author";
- public static final String duration = "duration";
- public static final String thumb = "thumb";
- public static final String downloadedAudio = "downloadedAudio";
- public static final String downloadedVideo = "downloadedVideo";
- public static final String type = "type";
- public static final String time = "time";
- public static final String isPlaylistItem = "isPlaylistItem";
- public static final String website = "website";
- public static final String downloadPath = "downloadPath";
- public static final String downloadingAudio = "downloadingAudio";
- public static final String downloadingVideo = "downloadingVideo";
- public static final String playlistTitle = "playlistTitle";
- public static final String isQueuedDownload = "isQueuedDownload";
-
- public DatabaseManager(Context context){
- super(context, db_name, null, db_version);
- this.context = context;
- }
-
- @Override
- public void onCreate(SQLiteDatabase sqLiteDatabase) {
- String query = "CREATE TABLE " + results_table_name + " ("
- + id + " INTEGER PRIMARY KEY AUTOINCREMENT, "
- + videoId + " TEXT,"
- + url + " TEXT,"
- + title + " TEXT,"
- + author + " TEXT,"
- + duration + " TEXT,"
- + thumb + " TEXT,"
- + downloadedAudio + " INTEGER,"
- + downloadedVideo + " INTEGER,"
- + isPlaylistItem + " INTENGER,"
- + website + " TEXT,"
- + downloadingAudio + " INTEGER,"
- + downloadingVideo + " INTEGER,"
- + playlistTitle + " TEXT)";
-
- sqLiteDatabase.execSQL(query);
-
- query = "CREATE TABLE " + history_table_name + " ("
- + id + " INTEGER PRIMARY KEY AUTOINCREMENT, "
- + url + " TEXT,"
- + title + " TEXT,"
- + author + " TEXT,"
- + duration + " TEXT,"
- + thumb + " TEXT,"
- + type + " TEXT,"
- + time + " TEXT,"
- + downloadPath + " TEXT,"
- + website + " TEXT,"
- + isQueuedDownload + " INTEGER)";
-
- sqLiteDatabase.execSQL(query);
- }
-
- public void clearHistory(){
- SQLiteDatabase db = this.getWritableDatabase();
- db.execSQL("DELETE FROM " + history_table_name);
-
- //remove downloaded statuses from results
- db.execSQL("UPDATE "+results_table_name+ " SET downloadedAudio=0, downloadedVideo=0" +
- " WHERE downloadedAudio=1 OR downloadedVideo=1");
- }
-
- @SuppressLint("Range")
- public void clearHistoryItem(HistoryItem video, boolean delete_file){
-// SQLiteDatabase db = this.getWritableDatabase();
-//
-// if (delete_file){
-// try{
-// Cursor cursor = db.rawQuery("SELECT * FROM " + history_table_name + " WHERE url='" +
-// video.getURL() + "' AND type='"+video.getDownloadedType() + "' LIMIT 1", null);
-//
-// if(cursor.moveToFirst()){
-// String path = cursor.getString(cursor.getColumnIndex(downloadPath));
-// File file = new File(path);
-// if(file.exists()){
-// file.delete();
-// }
-// }
-// }catch (Exception e){
-// Toast.makeText(context, R.string.error_deleting_file, Toast.LENGTH_SHORT).show();
-// }
-// }
-//
-//
-// db.execSQL("DELETE FROM " + history_table_name + " WHERE id=" + video.getId());
-//
-// String where = "";
-// switch(video.getDownloadedType()){
-// case "audio":
-// where = " SET downloadedAudio=0 WHERE downloadedAudio=1 AND videoId='" + video.getVideoId()+"'";
-// break;
-// case "video":
-// where = " SET downloadedVideo=0 WHERE downloadedVideo=1 AND videoId='" + video.getVideoId()+"'";
-// break;
-// }
-//
-// //remove downloaded status from results
-// db.execSQL("UPDATE "+results_table_name+ where);
- }
-
- public void clearDeletedHistory(){
-// ArrayList videos = getHistory("","","","");
-// for (int i = 0; i < videos.size(); i++){
-// ResultItem video = videos.get(i);
-// String path = video.getDownloadPath();
-// File file = new File(path);
-// if(!file.exists() && !path.isEmpty()){
-// clearHistoryItem(video, false);
-// }
-// }
- }
-
- public void clearDownloadingHistory(){
-// ArrayList videos = getHistory("","","","");
-// for (int i = 0; i < videos.size(); i++){
-// ResultItem video = videos.get(i);
-// if(video.isQueuedDownload()){
-// clearHistoryItem(video, false);
-// }
-// }
- }
-
- public void clearDuplicateHistory(){
- SQLiteDatabase db = this.getWritableDatabase();
- db.execSQL(
- "DELETE FROM " + history_table_name +
- " WHERE id > (SELECT MIN(h.id) FROM history h WHERE h.url = " + history_table_name + ".url" +
- " AND h.type = " + history_table_name + ".type);"
- );
-
- //remove downloaded statuses from results
- db.execSQL("UPDATE "+results_table_name+ " SET downloadedAudio=0, downloadedVideo=0" +
- " WHERE downloadedAudio=1 OR downloadedVideo=1");
- }
-
- public void clearResults(){
- SQLiteDatabase db = this.getWritableDatabase();
- db.execSQL("DELETE FROM " + results_table_name);
- }
-
- @Override
- public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVer, int newVer) {
- sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + results_table_name);
- sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + history_table_name);
- onCreate(sqLiteDatabase);
- }
-
-
- @SuppressLint("Range")
- public ArrayList getResults(){
- SQLiteDatabase db = this.getReadableDatabase();
- Cursor cursor = db.rawQuery("SELECT * FROM " + results_table_name, null);
- ArrayList list = new ArrayList<>();
-
-// if(cursor.moveToFirst()){
-// do {
-// // on below line we are adding the data from cursor to our array list.
-// list.add(new ResultItem(cursor.getString(cursor.getColumnIndex(videoId)),
-// cursor.getString(cursor.getColumnIndex(url)),
-// cursor.getString(cursor.getColumnIndex(title)),
-// cursor.getString(cursor.getColumnIndex(author)),
-// cursor.getString(cursor.getColumnIndex(duration)),
-// cursor.getString(cursor.getColumnIndex(thumb)),
-// cursor.getInt(cursor.getColumnIndex(downloadedAudio)),
-// cursor.getInt(cursor.getColumnIndex(downloadedVideo)),
-// cursor.getInt(cursor.getColumnIndex(isPlaylistItem)),
-// cursor.getString(cursor.getColumnIndex(website)),
-// cursor.getInt(cursor.getColumnIndex(downloadedAudio)),
-// cursor.getInt(cursor.getColumnIndex(downloadingVideo)),
-// cursor.getString(cursor.getColumnIndex(playlistTitle))));
-// } while (cursor.moveToNext());
-// }
-//
-// cursor.close();
- return list;
- }
-
- @SuppressLint("Range")
- public ArrayList getHistory(String query, String format, String site, String sort){
- SQLiteDatabase db = this.getReadableDatabase();
-
- if (sort == null || sort.isEmpty()) sort = "DESC";
- Cursor cursor = db.rawQuery("SELECT * FROM " + history_table_name
- + " WHERE title LIKE '%"+query+"%'"+
- " AND type LIKE '%"+format+"%'"+
- " AND website LIKE '%"+site+"%'"+
- " ORDER BY id "+sort,
- null);
- ArrayList list = new ArrayList<>();
-//
-// if(cursor.moveToFirst()){
-// do {
-// // on below line we are adding the data from cursor to our array list.
-// list.add(new ResultItem(cursor.getInt(cursor.getColumnIndex(id)),
-// cursor.getString(cursor.getColumnIndex(url)),
-// cursor.getString(cursor.getColumnIndex(title)),
-// cursor.getString(cursor.getColumnIndex(author)),
-// cursor.getString(cursor.getColumnIndex(duration)),
-// cursor.getString(cursor.getColumnIndex(thumb)),
-// cursor.getString(cursor.getColumnIndex(type)),
-// cursor.getString(cursor.getColumnIndex(time)),
-// cursor.getString(cursor.getColumnIndex(downloadPath)),
-// cursor.getString(cursor.getColumnIndex(website)),
-// cursor.getInt(cursor.getColumnIndex(isQueuedDownload))));
-// } while (cursor.moveToNext());
-// }
-//
-// cursor.close();
- return list;
- }
-
- public void addToResults(ArrayList videot){
- SQLiteDatabase db = this.getWritableDatabase();
- ContentValues values = new ContentValues();
-
-// for(ResultItem v : videot){
-// values.put(videoId, v.getVideoId());
-// values.put(url, v.getURL());
-// values.put(title, v.getTitle());
-// values.put(author, v.getAuthor());
-// values.put(duration, v.getDuration());
-// values.put(thumb, v.getThumb());
-// values.put(downloadedAudio, v.isAudioDownloaded());
-// values.put(downloadedVideo, v.isVideoDownloaded());
-// values.put(isPlaylistItem, v.getIsPlaylistItem());
-// values.put(website, v.getWebsite());
-// values.put(downloadingAudio, 0);
-// values.put(downloadingVideo, 0);
-// values.put(playlistTitle, v.getPlaylistTitle());
-//
-// db.insert(results_table_name, null, values);
-// }
-//
-// db.close();
- }
-
- public void addToHistory(ResultItem v){
- SQLiteDatabase db = this.getWritableDatabase();
- ContentValues values = new ContentValues();
-//
-// values.put(url, v.getURL());
-// values.put(title, v.getTitle());
-// values.put(author, v.getAuthor());
-// values.put(duration, v.getDuration());
-// values.put(thumb, v.getThumb());
-// values.put(type, v.getDownloadedType());
-// values.put(time, v.getDownloadedTime());
-// values.put(downloadPath, v.getDownloadPath());
-// values.put(website, v.getWebsite());
-// values.put(isQueuedDownload, (v.isQueuedDownload()) ? 1 : 0);
-//
-// db.insert(history_table_name, null, values);
-// db.close();
- }
-
- public void updateHistoryItem(ResultItem v){
- SQLiteDatabase db = this.getWritableDatabase();
- ContentValues values = new ContentValues();
-
-// values.put(url, v.getURL());
-// values.put(title, v.getTitle());
-// values.put(author, v.getAuthor());
-// values.put(duration, v.getDuration());
-// values.put(thumb, v.getThumb());
-// values.put(type, v.getDownloadedType());
-// values.put(time, v.getDownloadedTime());
-// values.put(downloadPath, v.getDownloadPath());
-// values.put(website, v.getWebsite());
-// values.put(isQueuedDownload, (v.isQueuedDownload()) ? 1 : 0);
-//
-// String where = url + "='"+v.getURL()+"' AND "+isQueuedDownload+"=1 AND "+type+"='"+v.getDownloadedType()+"'";
-// db.update(history_table_name, values, where, null);
-// db.close();
- }
-
- public void updateDownloadStatusOnResult(String id, String type, boolean downloaded){
- SQLiteDatabase db = this.getReadableDatabase();
- ContentValues values = new ContentValues();
-
- switch (type){
- case "audio":
- if (downloaded) values.put(downloadedAudio, 1);
- values.put(downloadingAudio, 0);
- break;
- case "video":
- if (downloaded) values.put(downloadedVideo, 1);
- values.put(downloadingVideo, 0);
- break;
- }
-
- db.update(results_table_name, values, "videoId = ?", new String[]{id});
- }
-
- public void updateDownloadingStatusOnResult(String id, String type, boolean downloading){
- SQLiteDatabase db = this.getReadableDatabase();
- ContentValues values = new ContentValues();
- type = (type.equals("audio")) ? downloadingAudio : downloadingVideo;
- int value = (downloading) ? 1 : 0;
- values.put(type, value);
-
- db.update(results_table_name, values, "videoId = ?", new String[]{id});
- }
-
- @SuppressLint("Range")
- public int checkDownloaded(String url, String downloadType){
- SQLiteDatabase db = this.getWritableDatabase();
- Cursor cursor = db.rawQuery("SELECT * FROM " + history_table_name + " WHERE url='" +
- url + "' AND type='"+downloadType + "' LIMIT 1", null);
-
- if(cursor.moveToFirst()){
- String path = cursor.getString(cursor.getColumnIndex(downloadPath));
- File file = new File(path);
- if(!file.exists() && !path.isEmpty()){
- return 0;
- }else {
- return 1;
- }
- }
- return 0;
- }
-
-}
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/service/DownloadInfo.java b/app/src/main/java/com/deniscerri/ytdlnis/service/DownloadInfo.java
deleted file mode 100644
index a1711bf1..00000000
--- a/app/src/main/java/com/deniscerri/ytdlnis/service/DownloadInfo.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package com.deniscerri.ytdlnis.service;
-
-import com.deniscerri.ytdlnis.database.models.ResultItem;
-
-import java.util.LinkedList;
-
-public class DownloadInfo {
- private ResultItem video;
- private int progress;
- private LinkedList downloadQueue;
- private String outputLine;
- private String downloadStatus;
- private String downloadPath;
- private String downloadType;
-
- public DownloadInfo(){}
-
- public ResultItem getVideo() {
- return video;
- }
-
- public void setVideo(ResultItem video) {
- this.video = video;
- }
-
- public int getProgress() {
- return progress;
- }
-
- public void setProgress(int progress) {
- this.progress = progress;
- }
-
- public LinkedList getDownloadQueue() {
- return downloadQueue;
- }
-
- public void setDownloadQueue(LinkedList downloadQueue) {
- this.downloadQueue = downloadQueue;
- this.video = downloadQueue.peek();
- }
-
- public String getOutputLine() {
- return outputLine;
- }
-
- public void setOutputLine(String outputLine) {
- this.outputLine = outputLine;
- }
-
- public String getDownloadStatus(){
- return downloadStatus;
- }
-
- public void setDownloadStatus(String status){
- downloadStatus = status;
- }
-
- public String getDownloadPath(){
- return downloadPath;
- }
-
- public void setDownloadPath(String path){
- this.downloadPath = path;
- }
-
- public String getDownloadType() {
- return downloadType;
- }
-
- public void setDownloadType(String downloadType) {
- this.downloadType = downloadType;
- }
-}
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/service/DownloadInfo.kt b/app/src/main/java/com/deniscerri/ytdlnis/service/DownloadInfo.kt
new file mode 100644
index 00000000..be350172
--- /dev/null
+++ b/app/src/main/java/com/deniscerri/ytdlnis/service/DownloadInfo.kt
@@ -0,0 +1,19 @@
+package com.deniscerri.ytdlnis.service
+
+import com.deniscerri.ytdlnis.database.models.ResultItem
+import java.util.*
+
+class DownloadInfo {
+ var video: ResultItem? = null
+ var progress = 0
+ var downloadQueue: LinkedList? = null
+ private set
+ var outputLine: String? = null
+ var downloadStatus: String? = null
+ var downloadPath: String? = null
+ var downloadType: String? = null
+ fun setDownloadQueue(downloadQueue: LinkedList) {
+ this.downloadQueue = downloadQueue
+ video = downloadQueue.peek()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/service/IDownloaderListener.java b/app/src/main/java/com/deniscerri/ytdlnis/service/IDownloaderListener.java
deleted file mode 100644
index a68b0f15..00000000
--- a/app/src/main/java/com/deniscerri/ytdlnis/service/IDownloaderListener.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.deniscerri.ytdlnis.service;
-
-public interface IDownloaderListener {
- void onDownloadStart(DownloadInfo downloadInfo);
- void onDownloadProgress(DownloadInfo downloadInfo);
- void onDownloadError(DownloadInfo downloadInfo);
- void onDownloadEnd(DownloadInfo downloadInfo);
- void onDownloadCancel(DownloadInfo downloadInfo);
- void onDownloadCancelAll(DownloadInfo downloadInfo);
- void onDownloadServiceEnd();
-}
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/service/IDownloaderListener.kt b/app/src/main/java/com/deniscerri/ytdlnis/service/IDownloaderListener.kt
new file mode 100644
index 00000000..75b3054c
--- /dev/null
+++ b/app/src/main/java/com/deniscerri/ytdlnis/service/IDownloaderListener.kt
@@ -0,0 +1,11 @@
+package com.deniscerri.ytdlnis.service
+
+interface IDownloaderListener {
+ fun onDownloadStart(downloadInfo: DownloadInfo?)
+ fun onDownloadProgress(downloadInfo: DownloadInfo?)
+ fun onDownloadError(downloadInfo: DownloadInfo?)
+ fun onDownloadEnd(downloadInfo: DownloadInfo?)
+ fun onDownloadCancel(downloadInfo: DownloadInfo?)
+ fun onDownloadCancelAll(downloadInfo: DownloadInfo?)
+ fun onDownloadServiceEnd()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/service/IDownloaderService.java b/app/src/main/java/com/deniscerri/ytdlnis/service/IDownloaderService.java
deleted file mode 100644
index 47cd4290..00000000
--- a/app/src/main/java/com/deniscerri/ytdlnis/service/IDownloaderService.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.deniscerri.ytdlnis.service;
-
-import android.app.Activity;
-
-import com.deniscerri.ytdlnis.database.models.ResultItem;
-
-import java.util.ArrayList;
-
-public interface IDownloaderService {
- DownloadInfo getInfo();
- void addActivity(Activity activity, ArrayList callback);
- void removeActivity(Activity activity);
- void updateQueue(ArrayList queue);
- void cancelDownload(boolean cancelAll);
- void removeItemFromDownloadQueue(ResultItem video, String type);
-}
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/service/IDownloaderService.kt b/app/src/main/java/com/deniscerri/ytdlnis/service/IDownloaderService.kt
new file mode 100644
index 00000000..bbd6ef16
--- /dev/null
+++ b/app/src/main/java/com/deniscerri/ytdlnis/service/IDownloaderService.kt
@@ -0,0 +1,13 @@
+package com.deniscerri.ytdlnis.service
+
+import android.app.Activity
+import com.deniscerri.ytdlnis.database.models.ResultItem
+
+interface IDownloaderService {
+ val info: DownloadInfo?
+ fun addActivity(activity: Activity?, callback: ArrayList?)
+ fun removeActivity(activity: Activity?)
+ fun updateQueue(queue: ArrayList?)
+ fun cancelDownload(cancelAll: Boolean)
+ fun removeItemFromDownloadQueue(video: ResultItem?, type: String?)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/service/api/InvidiousService.kt b/app/src/main/java/com/deniscerri/ytdlnis/service/api/InvidiousService.kt
deleted file mode 100644
index bee05569..00000000
--- a/app/src/main/java/com/deniscerri/ytdlnis/service/api/InvidiousService.kt
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.deniscerri.ytdlnis.service.api
-
-import com.deniscerri.ytdlnis.database.models.ResultItem
-import com.google.gson.JsonArray
-import com.google.gson.JsonObject
-import retrofit2.Call
-import retrofit2.Response
-import retrofit2.Retrofit
-import retrofit2.converter.gson.GsonConverterFactory
-import retrofit2.http.GET
-import retrofit2.http.Path
-
-interface InvidiousService {
- @GET("video/{id}")
- suspend fun getVideo(
- @Path("id") id : String
- ) : Call
-
- @GET("playlist/{id}")
- suspend fun getPlaylist(
- @Path("id") id: String
- ) : Response
-
- @GET("trending?type=music®ion={regionCode}")
- suspend fun getTrending(
- @Path("regionCode") regionCode: String
- ) : Response
-
- @GET("search/suggestions?q={query}")
- suspend fun getSearchSuggestions(
- @Path("query") query: String
- ) : Response
-
- companion object {
- var invidiousService : InvidiousService? = null
- fun getInstance() : InvidiousService {
- return invidiousService ?: run {
- val retrofit = Retrofit.Builder()
- .baseUrl("https://invidious.baczek.me/api/v1/")
- .addConverterFactory(GsonConverterFactory.create())
- .build()
- invidiousService = retrofit.create(InvidiousService::class.java)
- invidiousService!!
- }
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/service/api/YoutubeAPIService.kt b/app/src/main/java/com/deniscerri/ytdlnis/service/api/YoutubeAPIService.kt
deleted file mode 100644
index ace5b13f..00000000
--- a/app/src/main/java/com/deniscerri/ytdlnis/service/api/YoutubeAPIService.kt
+++ /dev/null
@@ -1,66 +0,0 @@
-package com.deniscerri.ytdlnis.service.api
-
-import com.google.gson.JsonArray
-import com.google.gson.JsonObject
-import retrofit2.Response
-import retrofit2.Retrofit
-import retrofit2.converter.gson.GsonConverterFactory
-import retrofit2.http.GET
-import retrofit2.http.Path
-
-interface YoutubeAPIService {
- @GET("videos?part=snippet,contentDetails&id={id}&key={apiKey}")
- suspend fun getVideo(
- @Path("id") id: String?
- ) : Response
-
- @GET("playlistItems?part=snippet&pageToken={nextPageToken}&maxResults=50®ionCode={regionCode}&playlistId={playlistId}&key={apiKey}")
- suspend fun getPlaylist(
- @Path("nextPageToken") nextPageToken: String,
- @Path("playlistId") playlistId : String,
- @Path("apiKey") apiKey : String
- ) : Response
-
- @GET("videos?part=snippet&chart=mostPopular&videoCategoryId=10®ionCode={regionCode}&maxResults=25&key={apiKey}")
- suspend fun getTrending(
- @Path("regionCode") regionCode: String,
- @Path("apiKey") apiKey : String
- ) : Response
-
- @GET("videos?part=contentDetails&chart=mostPopular&videoCategoryId=10®ionCode={regionCode}&maxResults=25&key={apiKey}")
- suspend fun getTrendingExtra(
- @Path("regionCode") regionCode: String,
- @Path("apiKey") apiKey : String
- ) : Response
-
- @GET("search?part=snippet&q={query}&maxResults=25®ionCode={regionCode}&key={apiKey}")
- suspend fun search(
- @Path("query") query: String,
- @Path("regionCode") regionCode: String,
- @Path("apiKey") apiKey: String
- ) : Response
-
- @GET("videos?id={ids}&part=contentDetails®ionCode={regionCode}&key={apiKey}")
- suspend fun getExtraData(
- @Path("ids") ids: String,
- @Path("regionCode") regionCode: String,
- @Path("apiKey") apiKey: String
- ) : Response
-
- companion object {
- var invidiousService : YoutubeAPIService? = null
- lateinit var apiKey : String
- lateinit var regionCode: String
- fun getInstance(key: String, regionCode: String) : YoutubeAPIService {
- apiKey = key
- return invidiousService ?: run {
- val retrofit = Retrofit.Builder()
- .baseUrl("https://www.googleapis.com/youtube/v3/")
- .addConverterFactory(GsonConverterFactory.create())
- .build()
- invidiousService = retrofit.create(YoutubeAPIService::class.java)
- invidiousService!!
- }
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/CustomCommandActivity.java b/app/src/main/java/com/deniscerri/ytdlnis/ui/CustomCommandActivity.java
deleted file mode 100644
index 77d92aa9..00000000
--- a/app/src/main/java/com/deniscerri/ytdlnis/ui/CustomCommandActivity.java
+++ /dev/null
@@ -1,213 +0,0 @@
-package com.deniscerri.ytdlnis.ui;
-
-import android.Manifest;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.content.pm.PackageManager;
-import android.media.MediaScannerConnection;
-import android.os.Bundle;
-import android.os.IBinder;
-import android.text.method.ScrollingMovementMethod;
-import android.util.Log;
-import android.view.View;
-import android.widget.EditText;
-import android.widget.ScrollView;
-import android.widget.TextView;
-import androidx.appcompat.app.AppCompatActivity;
-import androidx.core.app.ActivityCompat;
-import com.deniscerri.ytdlnis.R;
-import com.deniscerri.ytdlnis.DownloaderService;
-import com.deniscerri.ytdlnis.service.DownloadInfo;
-import com.deniscerri.ytdlnis.service.IDownloaderListener;
-import com.deniscerri.ytdlnis.service.IDownloaderService;
-import com.deniscerri.ytdlnis.util.NotificationUtil;
-import com.google.android.material.appbar.MaterialToolbar;
-import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton;
-
-import java.util.ArrayList;
-
-public class CustomCommandActivity extends AppCompatActivity {
- private static final String TAG = "CustomCommandActivity";
- private MaterialToolbar topAppBar;
- private boolean isDownloadServiceRunning = false;
- public DownloaderService downloaderService;
- private TextView output;
- private EditText input;
- private ExtendedFloatingActionButton fab;
- private ExtendedFloatingActionButton cancelFab;
- private IDownloaderService iDownloaderService;
- private ScrollView scrollView;
- Context context;
-
- private final ServiceConnection serviceConnection = new ServiceConnection() {
- @Override
- public void onServiceConnected(ComponentName className, IBinder service) {
- downloaderService = ((DownloaderService.LocalBinder) service).getService();
- iDownloaderService = (IDownloaderService) service;
- isDownloadServiceRunning = true;
- try{
- ArrayList listeners = new ArrayList<>();
- listeners.add(listener);
- iDownloaderService.addActivity(CustomCommandActivity.this, listeners);
- listener.onDownloadStart(iDownloaderService.getInfo());
- }catch(Exception e){
- e.printStackTrace();
- }
- }
-
- @Override
- public void onServiceDisconnected(ComponentName componentName) {
- downloaderService = null;
- iDownloaderService = null;
- isDownloadServiceRunning = false;
- }
- };
-
- public IDownloaderListener listener = new IDownloaderListener() {
-
- public void onDownloadStart(DownloadInfo info) {
- input.setEnabled(false);
- output.setText("");
- swapFabs();
- }
-
- public void onDownloadProgress(DownloadInfo info) {
- String newInfo = info.getOutputLine();
- if (newInfo.contains("[download]")){
- String temp = output.getText().toString();
- output.setText(
- temp.substring(0, temp.lastIndexOf(System.getProperty("line.separator")) - 2)
- );
- }
- output.append(info.getOutputLine() + " \n");
- output.scrollTo(0, output.getHeight());
- scrollView.fullScroll(View.FOCUS_DOWN);
- }
-
- public void onDownloadError(DownloadInfo info) {
- output.append("\n" + info.getOutputLine());
- scrollView.scrollTo(0, scrollView.getMaxScrollAmount());
- input.setText("yt-dlp ");
- input.setEnabled(true);
- swapFabs();
- }
-
- public void onDownloadEnd(DownloadInfo info) {
- output.append(info.getOutputLine());
- scrollView.scrollTo(0, scrollView.getMaxScrollAmount());
- // MEDIA SCAN
- MediaScannerConnection.scanFile(context, new String[]{"/storage"}, null, null);
- input.setText("yt-dlp ");
- input.setEnabled(true);
- swapFabs();
- }
-
- @Override
- public void onDownloadCancel(DownloadInfo downloadInfo) {}
-
- @Override
- public void onDownloadCancelAll(DownloadInfo downloadInfo){}
-
- public void onDownloadServiceEnd() {
- stopDownloadService();
- }
- };
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_custom_command);
-
- context = getBaseContext();
- scrollView = findViewById(R.id.custom_command_scrollview);
- topAppBar = findViewById(R.id.custom_command_toolbar);
- topAppBar.setNavigationOnClickListener(view -> onBackPressed());
- output = findViewById(R.id.custom_command_output);
- output.setTextIsSelectable(true);
-
- input = findViewById(R.id.command_edittext);
- input.requestFocus();
-
- fab = findViewById(R.id.command_fab);
- fab.setOnClickListener(view -> {
- if (isStoragePermissionGranted()){
- startDownloadService(input.getText().toString(), NotificationUtil.COMMAND_DOWNLOAD_NOTIFICATION_ID);
- }
- });
-
- cancelFab = findViewById(R.id.cancel_command_fab);
- cancelFab.setOnClickListener(view -> {
- cancelDownloadService();
- swapFabs();
- input.setEnabled(true);
- });
- handleIntent(getIntent());
- }
-
-
- @Override
- protected void onNewIntent(Intent intent) {
- super.onNewIntent(intent);
- handleIntent(intent);
- }
-
- private void handleIntent(Intent intent){
- String action = intent.getAction();
- String type = intent.getType();
- Log.e(TAG, action + " " + type);
- if (action.equals(Intent.ACTION_SEND) && type != null) {
- Log.e(TAG, action);
- String txt = "yt-dlp " + intent.getStringExtra(Intent.EXTRA_TEXT);
- input.setText(txt);
- }
- }
-
- private void swapFabs(){
- int cancel = cancelFab.getVisibility();
- int start = fab.getVisibility();
- cancelFab.setVisibility(start);
- fab.setVisibility(cancel);
- }
-
-
- @Override
- public void onBackPressed() {
- super.onBackPressed();
- }
-
-
- public void startDownloadService(String command, int id){
- if(isDownloadServiceRunning) return;
- Intent serviceIntent = new Intent(context, DownloaderService.class);
- serviceIntent.putExtra("command", command);
- serviceIntent.putExtra("id", id);
- context.getApplicationContext().bindService(serviceIntent, serviceConnection, Context.BIND_AUTO_CREATE);
- }
-
- public void stopDownloadService(){
- if(!isDownloadServiceRunning) return;
- iDownloaderService.removeActivity(this);
- context.getApplicationContext().unbindService(serviceConnection);
- downloaderService.stopForeground(true);
- downloaderService.stopSelf();
- isDownloadServiceRunning = false;
- }
-
- public void cancelDownloadService(){
- if(!isDownloadServiceRunning) return;
- iDownloaderService.cancelDownload(false);
- stopDownloadService();
- }
-
- public boolean isStoragePermissionGranted() {
- if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
- == PackageManager.PERMISSION_GRANTED) {
- return true;
- }else{
- ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
- return false;
- }
- }
-}
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/CustomCommandActivity.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/CustomCommandActivity.kt
new file mode 100644
index 00000000..36f441b2
--- /dev/null
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/CustomCommandActivity.kt
@@ -0,0 +1,212 @@
+package com.deniscerri.ytdlnis.ui
+
+import android.Manifest
+import android.annotation.SuppressLint
+import android.content.ComponentName
+import android.content.Context
+import android.content.Intent
+import android.content.ServiceConnection
+import android.content.pm.PackageManager
+import android.media.MediaScannerConnection
+import android.os.Bundle
+import android.os.IBinder
+import android.util.Log
+import android.view.View
+import android.widget.EditText
+import android.widget.ScrollView
+import android.widget.TextView
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.app.ActivityCompat
+import com.deniscerri.ytdlnis.DownloaderService
+import com.deniscerri.ytdlnis.DownloaderService.LocalBinder
+import com.deniscerri.ytdlnis.R
+import com.deniscerri.ytdlnis.service.DownloadInfo
+import com.deniscerri.ytdlnis.service.IDownloaderListener
+import com.deniscerri.ytdlnis.service.IDownloaderService
+import com.deniscerri.ytdlnis.util.NotificationUtil
+import com.google.android.material.appbar.MaterialToolbar
+import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
+
+class CustomCommandActivity : AppCompatActivity() {
+ private var topAppBar: MaterialToolbar? = null
+ private var isDownloadServiceRunning = false
+ var downloaderService: DownloaderService? = null
+ private var output: TextView? = null
+ private var input: EditText? = null
+ private var fab: ExtendedFloatingActionButton? = null
+ private var cancelFab: ExtendedFloatingActionButton? = null
+ private var iDownloaderService: IDownloaderService? = null
+ private var scrollView: ScrollView? = null
+ var context: Context? = null
+ private val serviceConnection: ServiceConnection = object : ServiceConnection {
+ override fun onServiceConnected(className: ComponentName, service: IBinder) {
+ downloaderService = (service as LocalBinder).service
+ iDownloaderService = service
+ isDownloadServiceRunning = true
+ try {
+ val listeners = ArrayList()
+ listeners.add(listener)
+ iDownloaderService!!.addActivity(this@CustomCommandActivity, listeners)
+ listener.onDownloadStart(iDownloaderService!!.info)
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ }
+
+ override fun onServiceDisconnected(componentName: ComponentName) {
+ downloaderService = null
+ iDownloaderService = null
+ isDownloadServiceRunning = false
+ }
+ }
+ var listener: IDownloaderListener = object : IDownloaderListener {
+ override fun onDownloadStart(info: DownloadInfo) {
+ input!!.isEnabled = false
+ output!!.text = ""
+ swapFabs()
+ }
+
+ override fun onDownloadProgress(info: DownloadInfo) {
+ val newInfo = info.outputLine
+ if (newInfo.contains("[download]")) {
+ val temp = output!!.text.toString()
+ output!!.text =
+ temp.substring(0, temp.lastIndexOf(System.getProperty("line.separator")!!) - 2)
+ }
+ output!!.append(
+ """${info.outputLine}
+"""
+ )
+ output!!.scrollTo(0, output!!.height)
+ scrollView!!.fullScroll(View.FOCUS_DOWN)
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun onDownloadError(info: DownloadInfo) {
+ output!!.append(
+ """
+
+ ${info.outputLine}
+ """.trimIndent()
+ )
+ scrollView!!.scrollTo(0, scrollView!!.maxScrollAmount)
+ input!!.setText("yt-dlp ")
+ input!!.isEnabled = true
+ swapFabs()
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun onDownloadEnd(info: DownloadInfo) {
+ output!!.append(info.outputLine)
+ scrollView!!.scrollTo(0, scrollView!!.maxScrollAmount)
+ // MEDIA SCAN
+ MediaScannerConnection.scanFile(context, arrayOf("/storage"), null, null)
+ input!!.setText("yt-dlp ")
+ input!!.isEnabled = true
+ swapFabs()
+ }
+
+ override fun onDownloadCancel(downloadInfo: DownloadInfo) {}
+ override fun onDownloadCancelAll(downloadInfo: DownloadInfo) {}
+ override fun onDownloadServiceEnd() {
+ stopDownloadService()
+ }
+ }
+
+ public override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_custom_command)
+ context = baseContext
+ scrollView = findViewById(R.id.custom_command_scrollview)
+ topAppBar = findViewById(R.id.custom_command_toolbar)
+ topAppBar!!.setNavigationOnClickListener { onBackPressedDispatcher.onBackPressed() }
+ output = findViewById(R.id.custom_command_output)
+ output!!.setTextIsSelectable(true)
+ input = findViewById(R.id.command_edittext)
+ input!!.requestFocus()
+ fab = findViewById(R.id.command_fab)
+ fab!!.setOnClickListener {
+ if (isStoragePermissionGranted) {
+ startDownloadService(
+ input!!.text.toString(),
+ NotificationUtil.COMMAND_DOWNLOAD_NOTIFICATION_ID
+ )
+ }
+ }
+ cancelFab = findViewById(R.id.cancel_command_fab)
+ cancelFab!!.setOnClickListener {
+ cancelDownloadService()
+ swapFabs()
+ input!!.isEnabled = true
+ }
+ handleIntent(intent)
+ }
+
+ override fun onNewIntent(intent: Intent) {
+ super.onNewIntent(intent)
+ handleIntent(intent)
+ }
+
+ private fun handleIntent(intent: Intent) {
+ val action = intent.action
+ val type = intent.type
+ Log.e(TAG, "$action $type")
+ if (action == Intent.ACTION_SEND && type != null) {
+ Log.e(TAG, action)
+ val txt = "yt-dlp " + intent.getStringExtra(Intent.EXTRA_TEXT)
+ input!!.setText(txt)
+ }
+ }
+
+ private fun swapFabs() {
+ val cancel = cancelFab!!.visibility
+ val start = fab!!.visibility
+ cancelFab!!.visibility = start
+ fab!!.visibility = cancel
+ }
+
+
+ private fun startDownloadService(command: String?, id: Int) {
+ if (isDownloadServiceRunning) return
+ val serviceIntent = Intent(context, DownloaderService::class.java)
+ serviceIntent.putExtra("command", command)
+ serviceIntent.putExtra("id", id)
+ context!!.applicationContext.bindService(serviceIntent, serviceConnection, BIND_AUTO_CREATE)
+ }
+
+ fun stopDownloadService() {
+ if (!isDownloadServiceRunning) return
+ iDownloaderService!!.removeActivity(this)
+ context!!.applicationContext.unbindService(serviceConnection)
+ downloaderService!!.stopForeground(true)
+ downloaderService!!.stopSelf()
+ isDownloadServiceRunning = false
+ }
+
+ fun cancelDownloadService() {
+ if (!isDownloadServiceRunning) return
+ iDownloaderService!!.cancelDownload(false)
+ stopDownloadService()
+ }
+
+ private val isStoragePermissionGranted: Boolean
+ get() = if (ActivityCompat.checkSelfPermission(
+ this,
+ Manifest.permission.WRITE_EXTERNAL_STORAGE
+ )
+ == PackageManager.PERMISSION_GRANTED
+ ) {
+ true
+ } else {
+ ActivityCompat.requestPermissions(
+ this,
+ arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE),
+ 1
+ )
+ false
+ }
+
+ companion object {
+ private const val TAG = "CustomCommandActivity"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/HistoryFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/HistoryFragment.kt
index 1b634f82..6f583885 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/ui/HistoryFragment.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/HistoryFragment.kt
@@ -20,7 +20,6 @@ import androidx.recyclerview.widget.RecyclerView
import com.deniscerri.ytdlnis.MainActivity
import com.deniscerri.ytdlnis.R
import com.deniscerri.ytdlnis.adapter.HistoryAdapter
-import com.deniscerri.ytdlnis.database.DatabaseManager
import com.deniscerri.ytdlnis.database.models.HistoryItem
import com.deniscerri.ytdlnis.database.repository.HistoryRepository.HistorySort
import com.deniscerri.ytdlnis.database.viewmodel.HistoryViewModel
@@ -45,7 +44,6 @@ class HistoryFragment : Fragment(), HistoryAdapter.OnItemClickListener,
private var downloading = false
private var fragmentView: View? = null
- private var databaseManager: DatabaseManager? = null
private var activity: Activity? = null
private var mainActivity: MainActivity? = null
private var fragmentContext: Context? = null
@@ -165,7 +163,6 @@ class HistoryFragment : Fragment(), HistoryAdapter.OnItemClickListener,
val searchView = topAppBar!!.menu.findItem(R.id.search_downloads).actionView as SearchView?
searchView!!.inputType = InputType.TYPE_CLASS_TEXT
searchView.queryHint = getString(R.string.search_history_hint)
- databaseManager = DatabaseManager(context)
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String): Boolean {
topAppBar!!.menu.findItem(R.id.search_downloads).collapseActionView()
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt
index 609cd63f..0d718f8f 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt
@@ -4,7 +4,6 @@ import android.annotation.SuppressLint
import android.app.Activity
import android.content.Context
import android.content.Intent
-import android.content.SharedPreferences
import android.os.Bundle
import android.os.Handler
import android.os.Looper
@@ -23,7 +22,6 @@ import androidx.recyclerview.widget.RecyclerView
import com.deniscerri.ytdlnis.MainActivity
import com.deniscerri.ytdlnis.R
import com.deniscerri.ytdlnis.adapter.HomeAdapter
-import com.deniscerri.ytdlnis.database.DatabaseManager
import com.deniscerri.ytdlnis.database.models.DownloadItem
import com.deniscerri.ytdlnis.database.models.ResultItem
import com.deniscerri.ytdlnis.database.repository.DownloadRepository
@@ -37,18 +35,13 @@ import com.deniscerri.ytdlnis.util.InfoUtil
import com.facebook.shimmer.ShimmerFrameLayout
import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.appbar.MaterialToolbar
-import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog
import com.google.android.material.button.MaterialButton
import com.google.android.material.chip.ChipGroup
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
import com.google.android.material.floatingactionbutton.FloatingActionButton
import com.google.android.material.progressindicator.LinearProgressIndicator
-import com.google.android.material.textfield.TextInputLayout
-import java.text.DecimalFormat
import java.util.*
-import kotlin.math.log10
-import kotlin.math.pow
class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickListener {
private var progressBar: LinearProgressIndicator? = null
@@ -70,7 +63,6 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi
private var downloading = false
private var fragmentView: View? = null
- private var databaseManager: DatabaseManager? = null
private var activity: Activity? = null
private var mainActivity: MainActivity? = null
private var fragmentContext: Context? = null
@@ -239,7 +231,6 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi
val searchView = topAppBar!!.menu.findItem(R.id.search).actionView as SearchView?
searchView!!.inputType = InputType.TYPE_TEXT_VARIATION_URI
searchView.queryHint = getString(R.string.search_hint)
- databaseManager = DatabaseManager(context)
infoUtil = InfoUtil(requireContext())
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String): Boolean {
@@ -390,7 +381,7 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi
downloadViewModel.insertDownload(downloadItem).observe(viewLifecycleOwner) {
downloadItem.id = it
val bottomSheet = DownloadBottomSheetDialog(downloadItem)
- bottomSheet.show(parentFragmentManager, "bottomSheet")
+ bottomSheet.show(parentFragmentManager, "downloadSingleSheet")
}
}
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/MoreFragment.java b/app/src/main/java/com/deniscerri/ytdlnis/ui/MoreFragment.java
deleted file mode 100644
index effc329a..00000000
--- a/app/src/main/java/com/deniscerri/ytdlnis/ui/MoreFragment.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.deniscerri.ytdlnis.ui;
-
-import android.os.Bundle;
-import androidx.preference.PreferenceFragmentCompat;
-import com.deniscerri.ytdlnis.R;
-
-public class MoreFragment extends PreferenceFragmentCompat {
- public static final String TAG = "MoreFragment";
- @Override
- public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
- setPreferencesFromResource(R.xml.more_preferences, rootKey);
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/MoreFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/MoreFragment.kt
new file mode 100644
index 00000000..9782c859
--- /dev/null
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/MoreFragment.kt
@@ -0,0 +1,15 @@
+package com.deniscerri.ytdlnis.ui
+
+import android.os.Bundle
+import androidx.preference.PreferenceFragmentCompat
+import com.deniscerri.ytdlnis.R
+
+class MoreFragment : PreferenceFragmentCompat() {
+ override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
+ setPreferencesFromResource(R.xml.more_preferences, rootKey)
+ }
+
+ companion object {
+ const val TAG = "MoreFragment"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadBottomSheetDialog.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadBottomSheetDialog.kt
index 04a9522c..cd9269fe 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadBottomSheetDialog.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadBottomSheetDialog.kt
@@ -6,6 +6,7 @@ import android.content.DialogInterface
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
+import android.view.View
import androidx.fragment.app.FragmentTransaction
import androidx.fragment.app.findFragment
import androidx.lifecycle.ViewModelProvider
@@ -13,6 +14,8 @@ import androidx.viewpager2.widget.ViewPager2
import com.deniscerri.ytdlnis.R
import com.deniscerri.ytdlnis.database.models.DownloadItem
import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel
+import com.google.android.material.bottomsheet.BottomSheetBehavior
+import com.google.android.material.bottomsheet.BottomSheetDialog
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import com.google.android.material.tabs.TabLayout
@@ -28,11 +31,18 @@ class DownloadBottomSheetDialog(item: DownloadItem) : BottomSheetDialogFragment(
downloadViewModel = ViewModelProvider(this)[DownloadViewModel::class.java]
}
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ val behavior = BottomSheetBehavior.from(view.parent as View)
+ behavior.state = BottomSheetBehavior.STATE_EXPANDED
+ }
+
@SuppressLint("RestrictedApi")
override fun setupDialog(dialog: Dialog, style: Int) {
super.setupDialog(dialog, style)
val view = LayoutInflater.from(context).inflate(R.layout.download_bottom_sheet, null)
dialog.setContentView(view)
+ //view.minimumHeight = resources.displayMetrics.heightPixels
tabLayout = view.findViewById(R.id.download_tablayout)
viewPager2 = view.findViewById(R.id.download_viewpager)
@@ -79,7 +89,7 @@ class DownloadBottomSheetDialog(item: DownloadItem) : BottomSheetDialogFragment(
override fun onCancel(dialog: DialogInterface) {
super.onCancel(dialog)
- parentFragmentManager.beginTransaction().remove(parentFragmentManager.findFragmentByTag("bottomSheet")!!).commit()
+ parentFragmentManager.beginTransaction().remove(parentFragmentManager.findFragmentByTag("downloadSingleSheet")!!).commit()
for (i in 0 until viewPager2.adapter?.itemCount!!){
if (parentFragmentManager.findFragmentByTag("f${i}") != null){
parentFragmentManager.beginTransaction().remove(parentFragmentManager.findFragmentByTag("f$i")!!).commit()
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/settings/SettingsActivity.java b/app/src/main/java/com/deniscerri/ytdlnis/ui/settings/SettingsActivity.java
deleted file mode 100644
index 425e17e7..00000000
--- a/app/src/main/java/com/deniscerri/ytdlnis/ui/settings/SettingsActivity.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.deniscerri.ytdlnis.ui.settings;
-
-import android.content.Context;
-import android.os.Bundle;
-
-import androidx.appcompat.app.AppCompatActivity;
-import androidx.fragment.app.FragmentManager;
-
-
-import com.deniscerri.ytdlnis.R;
-import com.google.android.material.appbar.MaterialToolbar;
-
-
-public class SettingsActivity extends AppCompatActivity{
-
- private FragmentManager fm;
- private MaterialToolbar topAppBar;
- Context context;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_settings);
- context = getBaseContext();
- topAppBar = findViewById(R.id.settings_toolbar);
- topAppBar.setNavigationOnClickListener(view -> onBackPressed());
- fm = getSupportFragmentManager();
- fm.beginTransaction()
- .replace(R.id.settings_frame_layout, new SettingsFragment())
- .commit();
-
- }
-
- @Override
- public void onBackPressed() {
- super.onBackPressed();
- }
-}
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/settings/SettingsActivity.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/settings/SettingsActivity.kt
new file mode 100644
index 00000000..db19d870
--- /dev/null
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/settings/SettingsActivity.kt
@@ -0,0 +1,26 @@
+package com.deniscerri.ytdlnis.ui.settings
+
+import android.content.Context
+import android.os.Bundle
+import android.view.View
+import androidx.appcompat.app.AppCompatActivity
+import androidx.fragment.app.FragmentManager
+import com.deniscerri.ytdlnis.R
+import com.google.android.material.appbar.MaterialToolbar
+
+class SettingsActivity : AppCompatActivity() {
+ private var fm: FragmentManager? = null
+ private var topAppBar: MaterialToolbar? = null
+ var context: Context? = null
+ public override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_settings)
+ context = baseContext
+ topAppBar = findViewById(R.id.settings_toolbar)
+ topAppBar!!.setNavigationOnClickListener { onBackPressedDispatcher.onBackPressed() }
+ fm = supportFragmentManager
+ fm!!.beginTransaction()
+ .replace(R.id.settings_frame_layout, SettingsFragment())
+ .commit()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/util/InfoUtil.kt b/app/src/main/java/com/deniscerri/ytdlnis/util/InfoUtil.kt
index e81a998c..cb6f3cda 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/util/InfoUtil.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/util/InfoUtil.kt
@@ -4,7 +4,6 @@ import android.app.Activity
import android.content.Context
import android.util.Log
import com.deniscerri.ytdlnis.R
-import com.deniscerri.ytdlnis.database.DatabaseManager
import com.deniscerri.ytdlnis.database.models.Format
import com.deniscerri.ytdlnis.database.models.ResultItem
import com.deniscerri.ytdlnis.database.models.ResultItemWithFormats
@@ -26,14 +25,12 @@ class InfoUtil(context: Context) {
private var items: ArrayList
private var key: String? = null
private var useInvidous = false
- private var databaseManager: DatabaseManager? = null
init {
try {
val sharedPreferences =
context.getSharedPreferences("root_preferences", Activity.MODE_PRIVATE)
key = sharedPreferences.getString("api_key", "")
- databaseManager = DatabaseManager(context)
} catch (e: Exception) {
e.printStackTrace()
}
@@ -258,9 +255,6 @@ class InfoUtil(context: Context) {
val duration = obj.getString("duration")
val thumb = obj.getString("thumb")
val url = "https://www.youtube.com/watch?v=$id"
- val downloadedAudio = databaseManager!!.checkDownloaded(url, "audio")
- val downloadedVideo = databaseManager!!.checkDownloaded(url, "video")
- val isPlaylist = 0
video = ResultItemWithFormats(
ResultItem(0,
url,
diff --git a/app/src/main/res/drawable/ic_baseline_file_open_24.xml b/app/src/main/res/drawable/ic_baseline_file_open_24.xml
index 40c228e8..d876d77d 100644
--- a/app/src/main/res/drawable/ic_baseline_file_open_24.xml
+++ b/app/src/main/res/drawable/ic_baseline_file_open_24.xml
@@ -1,5 +1,5 @@
-
-
+
diff --git a/app/src/main/res/drawable/ic_download_type.xml b/app/src/main/res/drawable/ic_download_type.xml
new file mode 100644
index 00000000..6c5bd02d
--- /dev/null
+++ b/app/src/main/res/drawable/ic_download_type.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_format.xml b/app/src/main/res/drawable/ic_format.xml
new file mode 100644
index 00000000..6eeed41e
--- /dev/null
+++ b/app/src/main/res/drawable/ic_format.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_handle.xml b/app/src/main/res/drawable/ic_handle.xml
new file mode 100644
index 00000000..3937daa4
--- /dev/null
+++ b/app/src/main/res/drawable/ic_handle.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/layout/download_card.xml b/app/src/main/res/layout/download_card.xml
new file mode 100644
index 00000000..e1e2daaa
--- /dev/null
+++ b/app/src/main/res/layout/download_card.xml
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/download_multiple_bottom_sheet.xml b/app/src/main/res/layout/download_multiple_bottom_sheet.xml
new file mode 100644
index 00000000..360cc8ac
--- /dev/null
+++ b/app/src/main/res/layout/download_multiple_bottom_sheet.xml
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index fd87bcde..d01134e5 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -166,4 +166,5 @@
Container
Template
History
+ Logs
\ No newline at end of file
diff --git a/app/src/main/res/xml/more_preferences.xml b/app/src/main/res/xml/more_preferences.xml
index aee59c93..854153fc 100644
--- a/app/src/main/res/xml/more_preferences.xml
+++ b/app/src/main/res/xml/more_preferences.xml
@@ -1,6 +1,7 @@
+
@@ -9,6 +10,7 @@
app:icon="@drawable/ic_code"
app:key="rreth"
app:summary="https://github.com/deniscerri/ytdlnis"
+ app:allowDividerBelow="true"
app:title="@string/source_code">
+
+
+
+
+
\ No newline at end of file