diff --git a/.idea/assetWizardSettings.xml b/.idea/assetWizardSettings.xml index 9f08b41a..3375e8a9 100644 --- a/.idea/assetWizardSettings.xml +++ b/.idea/assetWizardSettings.xml @@ -23,7 +23,7 @@ @@ -33,8 +33,8 @@ diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml index a5f05cd8..23704740 100644 --- a/.idea/jarRepositories.xml +++ b/.idea/jarRepositories.xml @@ -21,5 +21,10 @@ diff --git a/app/build.gradle b/app/build.gradle index 27f048fe..6debe2a7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -28,6 +28,7 @@ android { buildFeatures { viewBinding true + compose true } compileOptions { @@ -35,6 +36,7 @@ android { targetCompatibility JavaVersion.VERSION_1_8 } + splits { abi { enable true @@ -50,15 +52,19 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation project(":library") - implementation project(":ffmpeg") +// implementation project(":library") +// implementation project(":ffmpeg") + + implementation 'com.github.yausername.youtubedl-android:library:0.13.3' + implementation 'com.github.yausername.youtubedl-android:ffmpeg:0.13.3' implementation "androidx.appcompat:appcompat:$appCompatVer" implementation "androidx.constraintlayout:constraintlayout:2.1.4" - implementation 'com.google.android.material:material:1.5.0' + implementation 'com.google.android.material:material:1.6.1' implementation 'androidx.legacy:legacy-support-v4:1.0.0' + implementation 'androidx.core:core:1.8.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'androidx.preference:preference:1.1.1' + implementation 'androidx.preference:preference:1.2.0' testImplementation "junit:junit:$junitVer" androidTestImplementation "androidx.test.ext:junit:$androidJunitVer" androidTestImplementation "androidx.test.espresso:espresso-core:$espressoVer" @@ -69,4 +75,7 @@ dependencies { implementation("androidx.cardview:cardview:1.0.0") implementation("com.squareup.picasso:picasso:2.8") implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0" + + implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' + implementation 'com.facebook.shimmer:shimmer:0.5.0' } diff --git a/app/src/main/java/com/deniscerri/ytdl/App.java b/app/src/main/java/com/deniscerri/ytdl/App.java index fb106b39..49b2b3fb 100644 --- a/app/src/main/java/com/deniscerri/ytdl/App.java +++ b/app/src/main/java/com/deniscerri/ytdl/App.java @@ -1,9 +1,15 @@ package com.deniscerri.ytdl; import android.app.Application; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.content.res.Configuration; +import android.os.Build; import android.util.Log; import android.widget.Toast; +import com.devbrackets.android.exomedia.BuildConfig; +import com.google.android.material.color.DynamicColors; import com.yausername.ffmpeg.FFmpeg; import com.yausername.youtubedl_android.YoutubeDL; import com.yausername.youtubedl_android.YoutubeDLException; @@ -19,12 +25,15 @@ import io.reactivex.schedulers.Schedulers; public class App extends Application { private static final String TAG = "App"; + public static final String DOWNLOAD_CHANNEL_ID = "1"; ActivityMainBinding binding; @Override public void onCreate() { super.onCreate(); + DynamicColors.applyToActivitiesIfAvailable(this); + createNotificationChannel(); configureRxJavaErrorHandler(); Completable.fromAction(this::initLibraries).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new DisposableCompletableObserver() { @Override @@ -61,4 +70,16 @@ public class App extends Application { YoutubeDL.getInstance().init(this); FFmpeg.getInstance().init(this); } + + private void createNotificationChannel() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + CharSequence name = getString(R.string.download_notification_channel_name); + String description = getString(R.string.download_notification_channel_description); + int importance = NotificationManager.IMPORTANCE_HIGH; + NotificationChannel channel = new NotificationChannel(DOWNLOAD_CHANNEL_ID, name, importance); + channel.setDescription(description); + NotificationManager notificationManager = getSystemService(NotificationManager.class); + notificationManager.createNotificationChannel(channel); + } + } } diff --git a/app/src/main/java/com/deniscerri/ytdl/HistoryFragment.java b/app/src/main/java/com/deniscerri/ytdl/HistoryFragment.java index ebf9a543..932eb5ce 100644 --- a/app/src/main/java/com/deniscerri/ytdl/HistoryFragment.java +++ b/app/src/main/java/com/deniscerri/ytdl/HistoryFragment.java @@ -1,23 +1,17 @@ package com.deniscerri.ytdl; -import android.app.ActionBar; import android.content.Context; -import android.graphics.PorterDuff; -import android.graphics.Typeface; +import android.graphics.Color; import android.os.Bundle; - import androidx.annotation.NonNull; import androidx.appcompat.widget.SearchView; import androidx.cardview.widget.CardView; +import androidx.constraintlayout.widget.ConstraintLayout; import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentActivity; -import androidx.fragment.app.FragmentTransaction; -import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; - +import android.os.Handler; +import android.os.Looper; import android.text.InputType; import android.util.Log; import android.util.TypedValue; @@ -31,36 +25,39 @@ import android.view.ViewGroup; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; -import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.ScrollView; import android.widget.TextView; import com.deniscerri.ytdl.database.DBManager; import com.deniscerri.ytdl.database.Video; -import com.deniscerri.ytdl.placeholder.PlaceholderContent; +import com.facebook.shimmer.ShimmerFrameLayout; +import com.google.android.material.appbar.MaterialToolbar; +import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.squareup.picasso.Picasso; -import org.json.JSONObject; - import java.util.ArrayList; /** * A fragment representing a list of Items. */ -public class HistoryFragment extends Fragment { +public class HistoryFragment extends Fragment implements View.OnClickListener{ private LinearLayout linearLayout; private ScrollView scrollView; private View fragmentView; private DBManager dbManager; - private ArrayList