diff --git a/app/src/main/assets/settings.json b/app/src/main/assets/settings.json index 048e9c40..2653306f 100644 --- a/app/src/main/assets/settings.json +++ b/app/src/main/assets/settings.json @@ -58,6 +58,13 @@ { "key": "1440", "title": "1440p" }, { "key": "2160", "title": "2160p" } ] + }, { + "key": "subtitles", "type": "screen", "title": "subtitles", + "items": [ + { + "key": "size", "type": "int", "title": "subtitles_size" + } + ] } ] }, { diff --git a/app/src/main/java/com/mrboomdev/awery/AweryApp.java b/app/src/main/java/com/mrboomdev/awery/AweryApp.java index 46583026..977b6139 100644 --- a/app/src/main/java/com/mrboomdev/awery/AweryApp.java +++ b/app/src/main/java/com/mrboomdev/awery/AweryApp.java @@ -16,7 +16,7 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; -import com.mrboomdev.awery.catalog.provider.ExtensionsManager; +import com.mrboomdev.awery.catalog.extensions.ExtensionsFactory; import com.mrboomdev.awery.util.Disposable; import org.jetbrains.annotations.Contract; @@ -120,7 +120,7 @@ public void onCreate() { setupCrashHandler(); registerActivityLifecycleCallbacks(this); - ExtensionsManager.init(this); + ExtensionsFactory.init(this); Anilist.INSTANCE.getSavedToken(this); } diff --git a/app/src/main/java/com/mrboomdev/awery/catalog/anilist/query/AnilistSearchQuery.java b/app/src/main/java/com/mrboomdev/awery/catalog/anilist/query/AnilistSearchQuery.java index e0c24887..378bde44 100644 --- a/app/src/main/java/com/mrboomdev/awery/catalog/anilist/query/AnilistSearchQuery.java +++ b/app/src/main/java/com/mrboomdev/awery/catalog/anilist/query/AnilistSearchQuery.java @@ -53,12 +53,11 @@ public String getQuery() { { Page(page: 1, perPage: 20) { media(__PARAMS__) { - type format isAdult + type format id description bannerImage status genres averageScore - duration episodes coverImage { extraLarge large color medium } - tags { name id description isMediaSpoiler isGeneralSpoiler } + tags { name id description } title { romaji(stylised: false) english(stylised: false) native(stylised: false) } } } diff --git a/app/src/main/java/com/mrboomdev/awery/catalog/provider/Extension.java b/app/src/main/java/com/mrboomdev/awery/catalog/extensions/Extension.java similarity index 96% rename from app/src/main/java/com/mrboomdev/awery/catalog/provider/Extension.java rename to app/src/main/java/com/mrboomdev/awery/catalog/extensions/Extension.java index 664b049d..fce85201 100644 --- a/app/src/main/java/com/mrboomdev/awery/catalog/provider/Extension.java +++ b/app/src/main/java/com/mrboomdev/awery/catalog/extensions/Extension.java @@ -1,4 +1,4 @@ -package com.mrboomdev.awery.catalog.provider; +package com.mrboomdev.awery.catalog.extensions; import java.util.ArrayList; import java.util.List; diff --git a/app/src/main/java/com/mrboomdev/awery/catalog/provider/ExtensionProvider.java b/app/src/main/java/com/mrboomdev/awery/catalog/extensions/ExtensionProvider.java similarity index 97% rename from app/src/main/java/com/mrboomdev/awery/catalog/provider/ExtensionProvider.java rename to app/src/main/java/com/mrboomdev/awery/catalog/extensions/ExtensionProvider.java index 55caf877..7cbabc4f 100644 --- a/app/src/main/java/com/mrboomdev/awery/catalog/provider/ExtensionProvider.java +++ b/app/src/main/java/com/mrboomdev/awery/catalog/extensions/ExtensionProvider.java @@ -1,4 +1,4 @@ -package com.mrboomdev.awery.catalog.provider; +package com.mrboomdev.awery.catalog.extensions; import androidx.annotation.NonNull; diff --git a/app/src/main/java/com/mrboomdev/awery/catalog/provider/ExtensionsManager.java b/app/src/main/java/com/mrboomdev/awery/catalog/extensions/ExtensionsFactory.java similarity index 89% rename from app/src/main/java/com/mrboomdev/awery/catalog/provider/ExtensionsManager.java rename to app/src/main/java/com/mrboomdev/awery/catalog/extensions/ExtensionsFactory.java index 47318669..77bb1d5e 100644 --- a/app/src/main/java/com/mrboomdev/awery/catalog/provider/ExtensionsManager.java +++ b/app/src/main/java/com/mrboomdev/awery/catalog/extensions/ExtensionsFactory.java @@ -1,4 +1,4 @@ -package com.mrboomdev.awery.catalog.provider; +package com.mrboomdev.awery.catalog.extensions; import android.content.Context; import android.content.pm.PackageInfo; @@ -7,10 +7,14 @@ import androidx.annotation.NonNull; +import com.mrboomdev.awery.catalog.extensions.support.aniyomi.AniyomiProvider; +import com.mrboomdev.awery.catalog.extensions.support.tachiyomi.TachiyomiProvider; + import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -23,8 +27,8 @@ import eu.kanade.tachiyomi.source.MangaSource; import eu.kanade.tachiyomi.source.SourceFactory; -public class ExtensionsManager { - private static final String TAG = "ExtensionsManager"; +public class ExtensionsFactory { + private static final String TAG = "ExtensionFactory"; private static final int PM_FLAGS = PackageManager.GET_CONFIGURATIONS | PackageManager.GET_META_DATA; private static final String ANIYOMI_EXTENSION_FEATURE = "tachiyomi.animeextension"; private static final String TACHIYOMI_EXTENSION_FEATURE = "tachiyomi.extension"; @@ -81,7 +85,11 @@ private static Extension initTachiyomiExtension(Context context, @NonNull Packag var extension = new Extension(pkg.packageName, label, isNsfw, pkg.versionName); if(!extension.isError()) { - initTachiyomiExtensionClasses(context, pkg, extension); + try { + initTachiyomiExtensionClasses(context, pkg, extension); + } catch(IllegalStateException e) { + extension.setError("Failed to init extension's classes!", e); + } } return extension; @@ -91,9 +99,15 @@ private static void initTachiyomiExtensionClasses( @NonNull Context context, @NonNull PackageInfo pkg, Extension extension - ) { + ) throws IllegalStateException { + ClassLoader clazzLoader; var app = pkg.applicationInfo; - var clazzLoader = new PathClassLoader(app.sourceDir, null, context.getClassLoader()); + + try { + clazzLoader = new PathClassLoader(app.sourceDir, null, context.getClassLoader()); + } catch(Exception e) { + throw new IllegalStateException("Failed to load extension classloader!", e); + } var animeExtensionClass = app.metaData.getString(ANIYOMI_EXTENSION_CLASS); var mangaExtensionClass = app.metaData.getString(TACHIYOMI_EXTENSION_CLASS); @@ -108,7 +122,7 @@ private static void initTachiyomiExtensionClasses( for(var source : animeSources) { if(source instanceof AnimeCatalogueSource catalogueSource) { extension.isVideoExtension = true; - extension.addProvider(new AniyomiExtensionProvider(catalogueSource)); + extension.addProvider(new AniyomiProvider(catalogueSource)); continue; } @@ -127,7 +141,7 @@ private static void initTachiyomiExtensionClasses( for(var source : mangaSources) { extension.isBookExtension = true; - extension.addProvider(new TachiyomiExtensionProvider(source)); + extension.addProvider(new TachiyomiProvider(source)); } } catch(Exception e) { extension.setError("Failed to get manga sources!", e); @@ -261,12 +275,16 @@ public static Collection getAllExtensions() { return extensions.values(); } - public static Collection getVideoExtensions() { + public static Collection getVideoExtensions(boolean onlyWorking) { return extensions.values().stream() .filter(Extension::isVideoExtension) .collect(Collectors.toList()); } + public static Collection getVideoExtensions() { + return getVideoExtensions(true); + } + public static Collection getBookExtensions() { return extensions.values().stream() .filter(Extension::isBookExtension) @@ -276,4 +294,9 @@ public static Collection getBookExtensions() { public static Extension getExtension(String packageName) { return extensions.get(packageName); } + + @NonNull + public static Collection getAllManagers() { + return Collections.emptyList(); + } } \ No newline at end of file diff --git a/app/src/main/java/com/mrboomdev/awery/catalog/extensions/ExtensionsManager.java b/app/src/main/java/com/mrboomdev/awery/catalog/extensions/ExtensionsManager.java new file mode 100644 index 00000000..071866a9 --- /dev/null +++ b/app/src/main/java/com/mrboomdev/awery/catalog/extensions/ExtensionsManager.java @@ -0,0 +1,6 @@ +package com.mrboomdev.awery.catalog.extensions; + +public abstract class ExtensionsManager { + + public abstract String getName(); +} \ No newline at end of file diff --git a/app/src/main/java/com/mrboomdev/awery/catalog/provider/data/ExtensionProviderGroup.java b/app/src/main/java/com/mrboomdev/awery/catalog/extensions/data/ExtensionProviderGroup.java similarity index 79% rename from app/src/main/java/com/mrboomdev/awery/catalog/provider/data/ExtensionProviderGroup.java rename to app/src/main/java/com/mrboomdev/awery/catalog/extensions/data/ExtensionProviderGroup.java index f34e89fe..3a349d90 100644 --- a/app/src/main/java/com/mrboomdev/awery/catalog/provider/data/ExtensionProviderGroup.java +++ b/app/src/main/java/com/mrboomdev/awery/catalog/extensions/data/ExtensionProviderGroup.java @@ -1,16 +1,13 @@ -package com.mrboomdev.awery.catalog.provider.data; +package com.mrboomdev.awery.catalog.extensions.data; import androidx.annotation.NonNull; import com.mrboomdev.awery.AweryApp; -import com.mrboomdev.awery.catalog.provider.Extension; -import com.mrboomdev.awery.catalog.provider.ExtensionProvider; +import com.mrboomdev.awery.catalog.extensions.ExtensionProvider; import com.mrboomdev.awery.util.TranslationUtil; -import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; -import java.util.List; import java.util.Map; public class ExtensionProviderGroup { diff --git a/app/src/main/java/com/mrboomdev/awery/catalog/extensions/support/aniyomi/AniyomiManager.java b/app/src/main/java/com/mrboomdev/awery/catalog/extensions/support/aniyomi/AniyomiManager.java new file mode 100644 index 00000000..3d23dcef --- /dev/null +++ b/app/src/main/java/com/mrboomdev/awery/catalog/extensions/support/aniyomi/AniyomiManager.java @@ -0,0 +1,11 @@ +package com.mrboomdev.awery.catalog.extensions.support.aniyomi; + +import com.mrboomdev.awery.catalog.extensions.ExtensionsManager; + +public class AniyomiManager extends ExtensionsManager { + + @Override + public String getName() { + return "Aniyomi"; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/mrboomdev/awery/catalog/provider/AniyomiExtensionProvider.java b/app/src/main/java/com/mrboomdev/awery/catalog/extensions/support/aniyomi/AniyomiProvider.java similarity index 94% rename from app/src/main/java/com/mrboomdev/awery/catalog/provider/AniyomiExtensionProvider.java rename to app/src/main/java/com/mrboomdev/awery/catalog/extensions/support/aniyomi/AniyomiProvider.java index 8811ef1f..9edd166a 100644 --- a/app/src/main/java/com/mrboomdev/awery/catalog/provider/AniyomiExtensionProvider.java +++ b/app/src/main/java/com/mrboomdev/awery/catalog/extensions/support/aniyomi/AniyomiProvider.java @@ -1,9 +1,10 @@ -package com.mrboomdev.awery.catalog.provider; +package com.mrboomdev.awery.catalog.extensions.support.aniyomi; import android.os.Bundle; import androidx.annotation.NonNull; +import com.mrboomdev.awery.catalog.extensions.ExtensionProvider; import com.mrboomdev.awery.catalog.template.CatalogEpisode; import com.mrboomdev.awery.catalog.template.CatalogMedia; import com.mrboomdev.awery.catalog.template.CatalogVideo; @@ -21,10 +22,10 @@ import eu.kanade.tachiyomi.animesource.model.SEpisodeImpl; import okhttp3.Headers; -public class AniyomiExtensionProvider extends ExtensionProvider { +public class AniyomiProvider extends ExtensionProvider { private final AnimeCatalogueSource source; - public AniyomiExtensionProvider(AnimeCatalogueSource source) { + public AniyomiProvider(AnimeCatalogueSource source) { this.source = source; } diff --git a/app/src/main/java/com/mrboomdev/awery/catalog/extensions/support/cloudstream/CloudstreamManager.java b/app/src/main/java/com/mrboomdev/awery/catalog/extensions/support/cloudstream/CloudstreamManager.java new file mode 100644 index 00000000..7b637e58 --- /dev/null +++ b/app/src/main/java/com/mrboomdev/awery/catalog/extensions/support/cloudstream/CloudstreamManager.java @@ -0,0 +1,11 @@ +package com.mrboomdev.awery.catalog.extensions.support.cloudstream; + +import com.mrboomdev.awery.catalog.extensions.ExtensionsManager; + +public class CloudstreamManager extends ExtensionsManager { + + @Override + public String getName() { + return "CloudStream"; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/mrboomdev/awery/catalog/extensions/support/cloudstream/CloudstreamProvider.java b/app/src/main/java/com/mrboomdev/awery/catalog/extensions/support/cloudstream/CloudstreamProvider.java new file mode 100644 index 00000000..24010d72 --- /dev/null +++ b/app/src/main/java/com/mrboomdev/awery/catalog/extensions/support/cloudstream/CloudstreamProvider.java @@ -0,0 +1,11 @@ +package com.mrboomdev.awery.catalog.extensions.support.cloudstream; + +import com.mrboomdev.awery.catalog.extensions.ExtensionProvider; + +public class CloudstreamProvider extends ExtensionProvider { + + @Override + public String getName() { + return "cloudstream"; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/mrboomdev/awery/catalog/extensions/support/js/JsManager.java b/app/src/main/java/com/mrboomdev/awery/catalog/extensions/support/js/JsManager.java new file mode 100644 index 00000000..52031dc2 --- /dev/null +++ b/app/src/main/java/com/mrboomdev/awery/catalog/extensions/support/js/JsManager.java @@ -0,0 +1,11 @@ +package com.mrboomdev.awery.catalog.extensions.support.js; + +import com.mrboomdev.awery.catalog.extensions.ExtensionsManager; + +public class JsManager extends ExtensionsManager { + + @Override + public String getName() { + return "JavaScript"; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/mrboomdev/awery/catalog/provider/JsExtensionProvider.java b/app/src/main/java/com/mrboomdev/awery/catalog/extensions/support/js/JsProvider.java similarity index 74% rename from app/src/main/java/com/mrboomdev/awery/catalog/provider/JsExtensionProvider.java rename to app/src/main/java/com/mrboomdev/awery/catalog/extensions/support/js/JsProvider.java index 8471d81b..977d67db 100644 --- a/app/src/main/java/com/mrboomdev/awery/catalog/provider/JsExtensionProvider.java +++ b/app/src/main/java/com/mrboomdev/awery/catalog/extensions/support/js/JsProvider.java @@ -1,7 +1,8 @@ -package com.mrboomdev.awery.catalog.provider; +package com.mrboomdev.awery.catalog.extensions.support.js; import androidx.annotation.NonNull; +import com.mrboomdev.awery.catalog.extensions.ExtensionProvider; import com.mrboomdev.awery.catalog.template.CatalogEpisode; import com.mrboomdev.awery.catalog.template.CatalogMedia; @@ -9,14 +10,14 @@ import java.util.List; -public class JsExtensionProvider extends ExtensionProvider { +public class JsProvider extends ExtensionProvider { @Override public void getEpisodes(int page, CatalogMedia media, @NonNull ResponseCallback> callback) { super.getEpisodes(page, media, callback); } - public JsExtensionProvider(String script) { + public JsProvider(String script) { var context = Context.enter(); var scope = context.initSafeStandardObjects(); context.evaluateString(scope, script, null, 1,null); diff --git a/app/src/main/java/com/mrboomdev/awery/catalog/extensions/support/tachiyomi/TachiyomiManager.java b/app/src/main/java/com/mrboomdev/awery/catalog/extensions/support/tachiyomi/TachiyomiManager.java new file mode 100644 index 00000000..867f295f --- /dev/null +++ b/app/src/main/java/com/mrboomdev/awery/catalog/extensions/support/tachiyomi/TachiyomiManager.java @@ -0,0 +1,11 @@ +package com.mrboomdev.awery.catalog.extensions.support.tachiyomi; + +import com.mrboomdev.awery.catalog.extensions.ExtensionsManager; + +public class TachiyomiManager extends ExtensionsManager { + + @Override + public String getName() { + return "Tachiyomi"; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/mrboomdev/awery/catalog/extensions/support/tachiyomi/TachiyomiProvider.java b/app/src/main/java/com/mrboomdev/awery/catalog/extensions/support/tachiyomi/TachiyomiProvider.java new file mode 100644 index 00000000..38136be7 --- /dev/null +++ b/app/src/main/java/com/mrboomdev/awery/catalog/extensions/support/tachiyomi/TachiyomiProvider.java @@ -0,0 +1,18 @@ +package com.mrboomdev.awery.catalog.extensions.support.tachiyomi; + +import com.mrboomdev.awery.catalog.extensions.ExtensionProvider; + +import eu.kanade.tachiyomi.source.MangaSource; + +public class TachiyomiProvider extends ExtensionProvider { + private final MangaSource source; + + public TachiyomiProvider(MangaSource source) { + this.source = source; + } + + @Override + public String getName() { + return source.getName(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/mrboomdev/awery/catalog/provider/TachiyomiExtensionProvider.java b/app/src/main/java/com/mrboomdev/awery/catalog/provider/TachiyomiExtensionProvider.java deleted file mode 100644 index 8ba013d8..00000000 --- a/app/src/main/java/com/mrboomdev/awery/catalog/provider/TachiyomiExtensionProvider.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.mrboomdev.awery.catalog.provider; - -import eu.kanade.tachiyomi.source.MangaSource; - -public class TachiyomiExtensionProvider extends ExtensionProvider { - private final MangaSource source; - - public TachiyomiExtensionProvider(MangaSource source) { - this.source = source; - } - - @Override - public String getName() { - return source.getName(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/mrboomdev/awery/data/settings/SettingsItem.java b/app/src/main/java/com/mrboomdev/awery/data/settings/SettingsItem.java index 7c937e4a..0ccee55d 100644 --- a/app/src/main/java/com/mrboomdev/awery/data/settings/SettingsItem.java +++ b/app/src/main/java/com/mrboomdev/awery/data/settings/SettingsItem.java @@ -1,9 +1,7 @@ package com.mrboomdev.awery.data.settings; import android.content.Context; -import android.content.SharedPreferences; import android.graphics.drawable.Drawable; -import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -13,9 +11,6 @@ import com.squareup.moshi.Json; import com.squareup.moshi.ToJson; -import org.jetbrains.annotations.Contract; - -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Locale; @@ -32,16 +27,22 @@ public class SettingsItem { private SettingsItem parent; @Json(name = "boolean_value") private Boolean booleanValue; + @Json(name = "int_value") + private Integer intValue; public SettingsItem(@NonNull SettingsItem item) { this.key = item.key; this.type = item.type; this.items = item.items; - this.title = item.title; - this.icon = item.icon; this.restart = item.restart; + + this.icon = item.icon; + this.title = item.title; this.description = item.description; + this.booleanValue = item.booleanValue; + this.intValue = item.intValue; + this.parentKey = item.parentKey; this.parent = item.parent; } @@ -102,6 +103,8 @@ public void restoreValues(AwerySettings settings) { switch(type) { case BOOLEAN -> booleanValue = settings.getBoolean(getFullKey()); + case INT -> intValue = settings.getInt(getFullKey()); + case SCREEN -> { if(items == null) return; @@ -155,6 +158,14 @@ public boolean getBooleanValue() { return booleanValue; } + public int getIntValue() { + return intValue; + } + + public void setIntValue(int value) { + intValue = value; + } + public void setBooleanValue(boolean value) { booleanValue = value; } @@ -174,6 +185,10 @@ public void mergeValues(SettingsItem item) { booleanValue = item.booleanValue; } + if(item.intValue != null) { + intValue = item.intValue; + } + if(items != null) { for(var child : items) { child.mergeValues(item.findDirect(child.getKey())); @@ -245,6 +260,10 @@ public String toString() { result += ", \"boolean_value\": " + booleanValue; } + if(intValue != null) { + result += ", \"int_value\": " + intValue; + } + if(type != null) { result += ", \"type\": \"" + type.toString().toLowerCase(Locale.ROOT) + "\""; } diff --git a/app/src/main/java/com/mrboomdev/awery/data/settings/SettingsItemType.java b/app/src/main/java/com/mrboomdev/awery/data/settings/SettingsItemType.java index 53c3a26c..f875377d 100644 --- a/app/src/main/java/com/mrboomdev/awery/data/settings/SettingsItemType.java +++ b/app/src/main/java/com/mrboomdev/awery/data/settings/SettingsItemType.java @@ -5,8 +5,12 @@ public enum SettingsItemType { @Json(name = "boolean") BOOLEAN, + @Json(name = "int") + INT, @Json(name = "screen") SCREEN, @Json(name = "select") - SELECT + SELECT, + @Json(name = "multiselect") + MULTISELECT } \ No newline at end of file diff --git a/app/src/main/java/com/mrboomdev/awery/ui/fragments/MediaInfoFragment.java b/app/src/main/java/com/mrboomdev/awery/ui/fragments/MediaInfoFragment.java index 37d00290..c551bb95 100644 --- a/app/src/main/java/com/mrboomdev/awery/ui/fragments/MediaInfoFragment.java +++ b/app/src/main/java/com/mrboomdev/awery/ui/fragments/MediaInfoFragment.java @@ -1,6 +1,7 @@ package com.mrboomdev.awery.ui.fragments; import android.os.Bundle; +import android.text.Html; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -13,12 +14,16 @@ import com.bumptech.glide.Glide; import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions; +import com.google.android.material.chip.Chip; import com.mrboomdev.awery.AweryApp; import com.mrboomdev.awery.catalog.template.CatalogMedia; +import com.mrboomdev.awery.util.ui.SingleViewAdapter; +import com.mrboomdev.awery.util.ui.ViewUtil; import com.squareup.moshi.Moshi; import java.io.IOException; +import ani.awery.databinding.LayoutMediaDetailsBinding; import ani.awery.databinding.MediaDetailsOverviewLayoutBinding; public class MediaInfoFragment extends Fragment { @@ -84,6 +89,27 @@ public void setMedia(CatalogMedia media) { .load(media.poster.extraLarge) .transition(DrawableTransitionOptions.withCrossFade()) .into(binding.poster); + + if(media.banner != null) { + Glide.with(binding.getRoot()) + .load(media.banner) + .transition(DrawableTransitionOptions.withCrossFade()) + .into(binding.banner); + } + + concatAdapter.addAdapter(SingleViewAdapter.fromBindingDynamic(parent -> { + var binding = LayoutMediaDetailsBinding.inflate(getLayoutInflater(), parent, false); + binding.title.setText(media.title); + binding.description.setText(Html.fromHtml(media.description, Html.FROM_HTML_MODE_COMPACT).toString().trim()); + + for(var tag : media.tags) { + var chip = new Chip(requireContext()); + chip.setText(tag.name); + binding.tags.addView(chip); + } + + return binding; + })); } @Nullable @@ -91,6 +117,19 @@ public void setMedia(CatalogMedia media) { public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { binding = MediaDetailsOverviewLayoutBinding.inflate(inflater, container, false); + ViewUtil.setOnApplyUiInsetsListener(binding.posterWrapper, insets -> { + var margin = ViewUtil.dpPx(8); + ViewUtil.setTopMargin(binding.posterWrapper, margin + insets.top); + }); + + ViewUtil.setOnApplyUiInsetsListener(binding.items, insets -> { + var margin = ViewUtil.dpPx(8); + + ViewUtil.setTopPadding(binding.items, insets.top + margin); + ViewUtil.setBottomPadding(binding.items, insets.bottom + margin); + ViewUtil.setRightPadding(binding.items, insets.right + (margin * 2)); + }); + binding.items.setLayoutManager(new LinearLayoutManager( inflater.getContext(), LinearLayoutManager.VERTICAL, diff --git a/app/src/main/java/com/mrboomdev/awery/ui/fragments/MediaPlayFragment.java b/app/src/main/java/com/mrboomdev/awery/ui/fragments/MediaPlayFragment.java index 17fb507e..26e8ec06 100644 --- a/app/src/main/java/com/mrboomdev/awery/ui/fragments/MediaPlayFragment.java +++ b/app/src/main/java/com/mrboomdev/awery/ui/fragments/MediaPlayFragment.java @@ -22,9 +22,9 @@ import androidx.recyclerview.widget.RecyclerView; import com.mrboomdev.awery.AweryApp; -import com.mrboomdev.awery.catalog.provider.ExtensionProvider; -import com.mrboomdev.awery.catalog.provider.ExtensionsManager; -import com.mrboomdev.awery.catalog.provider.data.ExtensionProviderGroup; +import com.mrboomdev.awery.catalog.extensions.ExtensionProvider; +import com.mrboomdev.awery.catalog.extensions.ExtensionsFactory; +import com.mrboomdev.awery.catalog.extensions.data.ExtensionProviderGroup; import com.mrboomdev.awery.catalog.template.CatalogEpisode; import com.mrboomdev.awery.catalog.template.CatalogMedia; import com.mrboomdev.awery.catalog.template.CatalogVideo; @@ -164,7 +164,7 @@ public void setMedia(CatalogMedia media) { @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - var extensions = new ArrayList<>(ExtensionsManager.getVideoExtensions()); + var extensions = new ArrayList<>(ExtensionsFactory.getVideoExtensions()); var sources = new ArrayList(); for(var extension : extensions) { diff --git a/app/src/main/java/com/mrboomdev/awery/util/ui/ViewUtil.java b/app/src/main/java/com/mrboomdev/awery/util/ui/ViewUtil.java index 26ca8a09..0fe1865e 100644 --- a/app/src/main/java/com/mrboomdev/awery/util/ui/ViewUtil.java +++ b/app/src/main/java/com/mrboomdev/awery/util/ui/ViewUtil.java @@ -11,7 +11,6 @@ import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; -import androidx.viewbinding.ViewBinding; public class ViewUtil { public static final int UI_INSETS = WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.displayCutout(); @@ -82,6 +81,10 @@ public static void setTopPadding(@NonNull View view, int padding) { view.setPadding(view.getPaddingLeft(), padding, view.getPaddingRight(), view.getPaddingBottom()); } + public static void setVerticalPadding(@NonNull View view, int padding) { + view.setPadding(view.getPaddingLeft(), padding, view.getPaddingRight(), padding); + } + public static void setBottomPadding(@NonNull View view, int padding) { setBottomPadding(view, padding, true); } diff --git a/app/src/main/res/layout/layout_media_details.xml b/app/src/main/res/layout/layout_media_details.xml new file mode 100644 index 00000000..d098b4ff --- /dev/null +++ b/app/src/main/res/layout/layout_media_details.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/media_details_overview_layout.xml b/app/src/main/res/layout/media_details_overview_layout.xml index c50a41e2..3e1450a6 100644 --- a/app/src/main/res/layout/media_details_overview_layout.xml +++ b/app/src/main/res/layout/media_details_overview_layout.xml @@ -5,6 +5,32 @@ android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto"> + + + + + android:layout_marginVertical="8dp" + android:layout_marginHorizontal="16dp"> + android:scaleType="centerCrop" + android:importantForAccessibility="no" /> @@ -33,8 +61,8 @@ app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintRight_toRightOf="parent" - android:layout_marginHorizontal="16dp" - android:paddingVertical="16dp" + android:paddingHorizontal="32dp" + android:paddingVertical="8dp" android:clipToPadding="false" /> \ No newline at end of file