diff --git a/app/build.gradle b/app/build.gradle index 1ac0c93..f17129a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -30,15 +30,17 @@ android { buildTypes { release { - minifyEnabled false + minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - // signingConfig signingConfigs.release + signingConfig signingConfigs.signs } debug { signingConfig signingConfigs.signs - minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + + minifyEnabled true } } @@ -53,6 +55,18 @@ android { sourceCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11 } + + android.applicationVariants.all { variant -> + def buildType = variant.buildType.name + def date = new Date().format("yyyy-MM-dd HH-mm-ss") + + variant.outputs.all { output -> + if (output instanceof com.android.build.gradle.internal.api.ApkVariantOutputImpl) { + output.outputFileName = "zyreotv_${android.defaultConfig.versionName}_${date}_${buildType}.apk" + } + } + } + } dependencies { @@ -86,6 +100,7 @@ dependencies { implementation libs.media3exoplayerhls implementation libs.eventbut implementation libs.baseRecyclerAdapter + implementation libs.splashscreen } \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 481bb43..f6130b2 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -18,4 +18,185 @@ # If you keep the line number information, uncomment this to # hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file +#-renamesourcefileattribute SourceFile + +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle.kts. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile + + +#如果你使用全文检索插件,需要加入 +-dontwarn org.apache.lucene.** +-keep class org.apache.lucene.** {*;} + + + +-keep class com.fractalwrench.** { *; } + + + +### glide 4 +-keep public class * implements com.bumptech.glide.module.GlideModule +-keep public class * extends com.bumptech.glide.module.AppGlideModule +-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** { + **[] $VALUES; + public *; +} + +-keep class com.alibaba.sdk.android.oss.** { *; } +-dontwarn okio.** +-dontwarn org.apache.commons.codec.binary.** + +#okhttp +-dontwarn okhttp3.** +-keep class okhttp3.**{*;} + +#如果你使用全文检索插件,需要加入 +-dontwarn org.apache.lucene.** +-keep class org.apache.lucene.** {*;} + +#如果你开启数据库功能,需要加入 +-keep class net.sqlcipher.** {*;} + +-keep class com.google.android.material.** {*;} + +-keep class androidx.** {*;} + +-keep public class * extends androidx.** + +-keep interface androidx.** {*;} + +-dontwarn com.google.android.material.** + +-dontnote com.google.android.material.** + +-dontwarn androidx.** + +### APP 3rd party jars(xiaomi push) +-dontwarn com.xiaomi.push.** +-keep class com.xiaomi.** {*;} + +### APP 3rd party jars(huawei push) +-ignorewarnings +-keepattributes *Annotation* +-keepattributes Exceptions +-keepattributes InnerClasses +-keepattributes Signature +-keepattributes SourceFile,LineNumberTable +# hmscore-support: remote transport +-keep class com.huawei.hianalytics.**{*;} +-keep class com.huawei.updatesdk.**{*;} +-keep class com.huawei.hms.**{*;} + +### APP 3rd party jars(meizu push) +-dontwarn com.meizu.cloud.** +-keep class com.meizu.cloud.** {*;} + +#vivo +-dontwarn com.vivo.push.** +-keep class com.vivo.push.** {*;} +-keep class com.vivo.vms.** {*;} + + +#oppo +-keep public class * extends android.app.Service +-keep class com.heytap.msp.** { *;} + + +### org.json xml +-dontwarn org.json.** +-keep class org.json.**{*;} + + +#okio +-dontwarn okio.** +-keep class okio.**{*;} + +-keepclasseswithmembernames class * { + native ; +} + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet); + public (android.content.Context, android.util.AttributeSet, int); +} + +-keepclassmembers enum * { + public static **[] values(); + public static ** valueOf(java.lang.String); +} + +-keep class * implements android.os.Parcelable { + public static final android.os.Parcelable$Creator *; +} + +-keepclassmembers class * implements java.io.Serializable { + static final long serialVersionUID; + private static final java.io.ObjectStreamField[] serialPersistentFields; + private void writeObject(java.io.ObjectOutputStream); + private void readObject(java.io.ObjectInputStream); + java.lang.Object writeReplace(); + java.lang.Object readResolve(); +} + +-keep class **.R$* { + *; + +} + +-dontwarn com.google.** +-keep class com.google.** {*;} + +-keep public class * extends android.app.Service +-keep class com.heytap.msp.** { *;} + + + +-dontwarn com.viontv.app.** +-keep class com.viontv.app.** {*;} + +# RxJava2核心类保留 +-keepclassmembers class rx.internal.util.unsafe.* { + *; +} + +# 保留 RxJava2 所有 public 方法、字段、类(防止接口回调等失效) +-dontwarn io.reactivex.** +-keep class io.reactivex.** { *; } +-keep interface io.reactivex.** { *; } + +# RxJava2 中的 lambda 保留(可选,如果你用 lambda 表达式) +-keepclassmembers class * { + @io.reactivex.annotations.NonNull ; +} + +# 避免 RxJava2 中使用的内部 Unsafe 类被混淆(在某些 Android 版本上避免崩溃) +-keepclassmembers class rx.internal.util.unsafe.* { + *; +} + +# R8 针对 RxJava2 的优化处理(如果你使用的是 R8) +-dontwarn sun.misc.** + +# 仅用于调试(可选) +-keepattributes *Annotation* + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 606c8a5..e19b2e0 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,13 +21,18 @@ android:theme="@style/Theme.VionTV"> + + + diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..7378316 Binary files /dev/null and b/app/src/main/ic_launcher-playstore.png differ diff --git a/app/src/main/java/com/viontv/app/api/VTApi.java b/app/src/main/java/com/viontv/app/api/VTApi.java index 254f909..1997832 100644 --- a/app/src/main/java/com/viontv/app/api/VTApi.java +++ b/app/src/main/java/com/viontv/app/api/VTApi.java @@ -1,9 +1,9 @@ package com.viontv.app.api; +import android.os.Build; import android.text.TextUtils; import android.util.Log; - import java.io.UnsupportedEncodingException; import java.net.Proxy; import java.net.URLDecoder; @@ -53,7 +53,7 @@ public class VTApi extends VTBaseApi { builder.addInterceptor(new VTHeaderInterceptor()); builder.addInterceptor(new VTBodyloadInterceptor()); - // if(Config.IS_DEBUG) { + if(!VTApiService.isProduce){ HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(message -> { try { String text = URLDecoder.decode(message, "utf-8"); @@ -65,6 +65,9 @@ public class VTApi extends VTBaseApi { }); interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); builder.addInterceptor(interceptor); + } + // if(Config.IS_DEBUG) { + // } return builder.build(); diff --git a/app/src/main/java/com/viontv/app/api/VTApiService.java b/app/src/main/java/com/viontv/app/api/VTApiService.java index d6c552b..ba6eb03 100644 --- a/app/src/main/java/com/viontv/app/api/VTApiService.java +++ b/app/src/main/java/com/viontv/app/api/VTApiService.java @@ -25,7 +25,8 @@ public interface VTApiService { * 正式测试服 */ boolean isProduce = true; - String URL = isProduce ? "https://api-zyreotv.zyreotv.com/7834f11d/" : "https://test1-api.guyantv.com"; + // String URL = isProduce ? "https://api-zyreotv.zyreotv.com/7834f11d/" : "https://test1-api.guyantv.com"; + String URL = "https://api-zyreotv.zyreotv.com/7834f11d/"; public static final String rankTop10Type = "most_trending"; public static final String ZyreoTV_Private = "https://www.zyreotv.com/private"; diff --git a/app/src/main/java/com/viontv/app/ui/activity/VTMainActivity.java b/app/src/main/java/com/viontv/app/ui/activity/VTMainActivity.java index 3b8dc80..431b62d 100644 --- a/app/src/main/java/com/viontv/app/ui/activity/VTMainActivity.java +++ b/app/src/main/java/com/viontv/app/ui/activity/VTMainActivity.java @@ -58,7 +58,7 @@ public class VTMainActivity extends VTCommonActivity impl binding.container.setUserInputEnabled(false); //disaple scroll binding.container.setAdapter(fragmentAdapter); binding.container.setCurrentItem(START_INDEX, false); - binding.container.setOffscreenPageLimit(1); + // binding.container.setOffscreenPageLimit(1); binding.tvVtMainHome.setOnClickListener(this); diff --git a/app/src/main/java/com/viontv/app/ui/activity/VTSplashActivity.java b/app/src/main/java/com/viontv/app/ui/activity/VTSplashActivity.java new file mode 100644 index 0000000..dc29b47 --- /dev/null +++ b/app/src/main/java/com/viontv/app/ui/activity/VTSplashActivity.java @@ -0,0 +1,38 @@ +package com.viontv.app.ui.activity; + +import android.content.Intent; +import android.os.Bundle; + +import androidx.core.splashscreen.SplashScreen; + +import com.viontv.app.databinding.ActivityMainVtBinding; +import com.viontv.app.databinding.ActivitySplashBinding; +import com.viontv.app.ui.activity.basic.VTCommonActivity; + +public class VTSplashActivity extends VTCommonActivity { + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + SplashScreen splashScreen = SplashScreen.installSplashScreen(VTSplashActivity.this); + splashScreen.setKeepOnScreenCondition(() -> true); + startActivity(new Intent(this,VTMainActivity.class)); + } + + @Override + public void init() { + viewBinding = ActivitySplashBinding.inflate(getLayoutInflater()); + setContentView(viewBinding.getRoot()); + } + + @Override + public void initView() { + + } + + @Override + public void logic() { + + } +} diff --git a/app/src/main/java/com/viontv/app/ui/activity/explore/VTExploreFragment.java b/app/src/main/java/com/viontv/app/ui/activity/explore/VTExploreFragment.java index f05d5ec..3737c77 100644 --- a/app/src/main/java/com/viontv/app/ui/activity/explore/VTExploreFragment.java +++ b/app/src/main/java/com/viontv/app/ui/activity/explore/VTExploreFragment.java @@ -99,15 +99,22 @@ public class VTExploreFragment extends Fragment implements VTGooglePlayerExplore @Override public void onPageScrollStateChanged(int state) { super.onPageScrollStateChanged(state); + if(viewBinding.viewPagerExploreEpisode.getAdapter()==null){ + return; + } if (state == ViewPager2.SCROLL_STATE_IDLE) { - if (viewBinding.viewPagerExploreEpisode.getCurrentItem() == viewBinding.viewPagerExploreEpisode.getAdapter().getItemCount() - 1) { - if (!first) { - pageHome++; - mViewModel.getExploreVideoList(pageHome, 10); - } else { - first = false; + if (viewBinding.viewPagerExploreEpisode.getCurrentItem() == viewBinding.viewPagerExploreEpisode.getAdapter().getItemCount() - 1) { + if (!first) { + pageHome++; + mViewModel.getExploreVideoList(pageHome, 10); + } else { + first = false; + } } - } + + + + } } }); @@ -211,13 +218,18 @@ public class VTExploreFragment extends Fragment implements VTGooglePlayerExplore @Subscribe(threadMode = ThreadMode.MAIN) public void onEvent(VTBaseEventBus event) { if (VTAppConstants.Constants_Episodes_Series_DataExample.equals(event.getCode())) { - if( event.getData().getShort_play_id() == vtGooglePlayerAdapter.getItems().get(currentPosition).getShort_play_id()){ + VTVideoExploreBean exploreBean = vtGooglePlayerAdapter.getItems().get(currentPosition); + if( event.getData().getShort_play_id() == exploreBean.getShort_play_id()){ AppCompatImageView imageView = getHomePlayerView().findViewById(R.id.iv_collection_controller); AppCompatTextView textView = getHomePlayerView().findViewById(R.id.tv_collection_num_controller); imageView.setImageResource(event.getData().isIs_collect() ? R.mipmap.iv_vt_collect_h : R.mipmap.iv_vt_collect_n); - vtGooglePlayerAdapter.getItems().get(currentPosition).setCollect_total(event.getData().getCollect_total()); + if(event.getData().isIs_collect()){ + exploreBean.setCollect_total(exploreBean.getCollect_total()+1); + }else{ + exploreBean.setCollect_total(exploreBean.getCollect_total()-1); + } vtGooglePlayerAdapter.getItems().get(currentPosition).setIs_collect(event.getData().isIs_collect()); - textView.setText(TimeUtils.formatNumber(event.getData().getCollect_total())); + textView.setText(TimeUtils.formatNumber(exploreBean.getCollect_total())); } } } @@ -274,6 +286,7 @@ public class VTExploreFragment extends Fragment implements VTGooglePlayerExplore @Override public void onDestroy() { + if (getHomePlayerView() != null) getHomePlayerView().stop(); if (getHomePlayerView() != null) getHomePlayerView().release(); super.onDestroy(); EventBus.getDefault().unregister(this); diff --git a/app/src/main/java/com/viontv/app/ui/activity/home/VTHotFragment.java b/app/src/main/java/com/viontv/app/ui/activity/home/VTHotFragment.java index 2a479e7..25e951f 100644 --- a/app/src/main/java/com/viontv/app/ui/activity/home/VTHotFragment.java +++ b/app/src/main/java/com/viontv/app/ui/activity/home/VTHotFragment.java @@ -1,5 +1,8 @@ package com.viontv.app.ui.activity.home; +import static android.view.View.GONE; +import static android.view.View.VISIBLE; + import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; @@ -28,6 +31,7 @@ import com.viontv.app.ui.adapter.VTBannerHomeAdapter; import com.viontv.app.ui.adapter.VTHotBottomListAdapter; import com.viontv.app.ui.adapter.VTNineSquareAdapter; import com.viontv.app.utils.IntentUtils; +import com.youth.banner.listener.OnBannerListener; import java.util.ArrayList; import java.util.List; @@ -197,14 +201,29 @@ public class VTHotFragment extends Fragment { public void initBanner(List itemBeans) { - binding.banner.setAdapter(new VTBannerHomeAdapter(itemBeans)). - setCurrentItem(0, true) - .addBannerLifecycleObserver(this) - .setOnBannerListener((data, position) -> IntentUtils.startPlayerDetails(getActivity(), itemBeans.get(position).getShort_play_id(), 0)) - .isAutoLoop(true); + if(itemBeans.size()>0){ + binding.banner.setVisibility(VISIBLE); + VTBannerHomeAdapter adapter1 = new VTBannerHomeAdapter(itemBeans); + adapter1.setHomeHot(true); + binding.banner.setAdapter(adapter1). + setCurrentItem(0, true) + .addBannerLifecycleObserver(this) + .setOnBannerListener(new OnBannerListener() { + @Override + public void OnBannerClick(Object data, int position) { + ItemBean bean = itemBeans.get(position); + Log.i("tag====",bean.getShort_play_id()+" "); + IntentUtils.startPlayerDetails(getActivity(), itemBeans.get(position).getShort_play_id(), 0); + } + }) + .isAutoLoop(true); - binding.banner.start(); + binding.banner.start(); + }else{ + binding.banner.setVisibility(GONE); + } + } diff --git a/app/src/main/java/com/viontv/app/ui/activity/home/VTTabItemFragment.java b/app/src/main/java/com/viontv/app/ui/activity/home/VTTabItemFragment.java index 46b0557..dd861b5 100644 --- a/app/src/main/java/com/viontv/app/ui/activity/home/VTTabItemFragment.java +++ b/app/src/main/java/com/viontv/app/ui/activity/home/VTTabItemFragment.java @@ -152,10 +152,13 @@ public class VTTabItemFragment extends Fragment { super.onScrolled(recyclerView, dx, dy); } }); + initrequest(); + } + + public void initrequest(){ currentPage = 1; getBottomData(); } - public void getBottomData() { VTApi.getInstance().getVideoList(categoryId, currentPage, 10, "") .subscribeOn(Schedulers.io()) @@ -164,13 +167,21 @@ public class VTTabItemFragment extends Fragment { @Override public void onSuccess(VTResult feedbackResp) { - if (currentPage == 1) { - adapter.addDataList(feedbackResp.data.getList(), true); - } else { - adapter.addDataList(feedbackResp.data.getList(), false); + if(feedbackResp!=null&&feedbackResp.data!=null&&feedbackResp.data.getList().size()>0){ + binding.ivEmptyData.setVisibility(View.GONE); + if (currentPage == 1) { + adapter.addDataList(feedbackResp.data.getList(), true); + } else { + adapter.addDataList(feedbackResp.data.getList(), false); + } + }else{ + if (currentPage==1&&binding.banner.getVisibility()==View.GONE){ + binding.ivEmptyData.setVisibility(View.VISIBLE); + } } + } @Override @@ -183,13 +194,19 @@ public class VTTabItemFragment extends Fragment { public void initBanner(List itemBeans) { - binding.banner.setAdapter(new VTBannerHomeAdapter(itemBeans)). - setCurrentItem(0, true) - .addBannerLifecycleObserver(this) + if(itemBeans.size()>0){ + binding.banner.setVisibility(View.VISIBLE); + binding.banner.setAdapter(new VTBannerHomeAdapter(itemBeans)). + setCurrentItem(0, true) + .addBannerLifecycleObserver(this) + + .setOnBannerListener((data, position) -> IntentUtils.startPlayerDetails(getActivity(), itemBeans.get(position).getShort_play_id(), 0)) + .isAutoLoop(true); + binding.banner.start(); + }else { + binding.banner.setVisibility(View.GONE); + } - .setOnBannerListener((data, position) -> IntentUtils.startPlayerDetails(getActivity(), itemBeans.get(position).getShort_play_id(), 0)) - .isAutoLoop(true); - binding.banner.start(); } diff --git a/app/src/main/java/com/viontv/app/ui/activity/home/VTTopFragment.java b/app/src/main/java/com/viontv/app/ui/activity/home/VTTopFragment.java index f13f664..a672048 100644 --- a/app/src/main/java/com/viontv/app/ui/activity/home/VTTopFragment.java +++ b/app/src/main/java/com/viontv/app/ui/activity/home/VTTopFragment.java @@ -18,9 +18,12 @@ import com.viontv.app.api.VTResult; import com.viontv.app.databinding.FragmentTopVtBinding; import com.viontv.app.databinding.ItemHomeExploreVtBinding; +import com.viontv.app.model.ItemBean; import com.viontv.app.model.VTVideoListBean; +import com.viontv.app.ui.adapter.VTCommonAdapter; import com.viontv.app.ui.adapter.VTTop10ListAdapter; +import com.viontv.app.utils.IntentUtils; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.schedulers.Schedulers; @@ -61,11 +64,12 @@ public class VTTopFragment extends Fragment { } public void initList() { - layoutManager = new LinearLayoutManager(getActivity()); - binding.rvFragmentHometop.setLayoutManager(layoutManager); layoutManager = new LinearLayoutManager(getActivity()); binding.rvFragmentHometop.setLayoutManager(layoutManager); adapter = new VTTop10ListAdapter(getActivity(), ItemHomeExploreVtBinding.class); + adapter.setItemClickListener((data, holder) -> { + IntentUtils.startPlayerDetails(getActivity(), data.getShort_play_id(), 0); + }); binding.rvFragmentHometop.setAdapter(adapter); getTop10Data(); } diff --git a/app/src/main/java/com/viontv/app/ui/activity/mylist/VTFollowListFragment.java b/app/src/main/java/com/viontv/app/ui/activity/mylist/VTFollowListFragment.java index dd4c4f9..ff78ed6 100644 --- a/app/src/main/java/com/viontv/app/ui/activity/mylist/VTFollowListFragment.java +++ b/app/src/main/java/com/viontv/app/ui/activity/mylist/VTFollowListFragment.java @@ -132,7 +132,7 @@ public class VTFollowListFragment extends Fragment { vtVideoViewModel.cancelcollection(adapter.getItemData(deletePosition).getShort_play_id()); VTVideoDetailsBean.ShortPlayInfo shortPlayInfo = new VTVideoDetailsBean.ShortPlayInfo(); shortPlayInfo.setShort_play_id(adapter.getItemData(deletePosition).getShort_play_id()); - shortPlayInfo.setCollect_total(adapter.getItemData(deletePosition).getCollect_total()); + shortPlayInfo.setIs_collect(false); EventBus.getDefault().post(new VTBaseEventBus<>(VTAppConstants.Constants_Episodes_Series_DataExample, shortPlayInfo)); List fragments = getParentFragmentManager().getFragments(); Log.i(" ","fragments=="+fragments.size()); diff --git a/app/src/main/java/com/viontv/app/ui/activity/mylist/VTMyListFragment.java b/app/src/main/java/com/viontv/app/ui/activity/mylist/VTMyListFragment.java index 6e04be9..7a1fa2c 100644 --- a/app/src/main/java/com/viontv/app/ui/activity/mylist/VTMyListFragment.java +++ b/app/src/main/java/com/viontv/app/ui/activity/mylist/VTMyListFragment.java @@ -73,24 +73,24 @@ public class VTMyListFragment extends Fragment { binding.viewpager.setAdapter(adapter); //把TabLayout(选项卡布局)和ViewPager2绑定在一起。特别说明一下,下面这行代码是官方给的,特别好使。 new TabLayoutMediator(binding.tablayoutMylist, binding.viewpager, (tab, position) -> tab.setText(titles.get(position))).attach(); - binding.tablayoutMylist.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { - @Override - public void onTabSelected(TabLayout.Tab tab) { - - binding.ivMylistDelete.setVisibility(tab.getPosition()==0?VISIBLE:GONE); - - } - - @Override - public void onTabUnselected(TabLayout.Tab tab) { - - } - - @Override - public void onTabReselected(TabLayout.Tab tab) { - - } - }); +// binding.tablayoutMylist.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { +// @Override +// public void onTabSelected(TabLayout.Tab tab) { +// +// // binding.ivMylistDelete.setVisibility(tab.getPosition()==0?VISIBLE:GONE); +// +// } +// +// @Override +// public void onTabUnselected(TabLayout.Tab tab) { +// +// } +// +// @Override +// public void onTabReselected(TabLayout.Tab tab) { +// +// } +// }); binding.ivMylistDelete.setOnClickListener(v -> { binding.tvMylistCancel.setVisibility(VISIBLE); diff --git a/app/src/main/java/com/viontv/app/ui/activity/play/VTVideoPlayerActivity.java b/app/src/main/java/com/viontv/app/ui/activity/play/VTVideoPlayerActivity.java index 5ce52a3..e5e3ada 100644 --- a/app/src/main/java/com/viontv/app/ui/activity/play/VTVideoPlayerActivity.java +++ b/app/src/main/java/com/viontv/app/ui/activity/play/VTVideoPlayerActivity.java @@ -399,9 +399,9 @@ public class VTVideoPlayerActivity extends VTCommonActivity { @@ -35,6 +38,7 @@ public class VTHotBottomListAdapter if (data != null) { Glide.with(mcontext) .load(data.getImage_url()) + .placeholder(R.mipmap.ic_loadingdefault_ver) .apply(new RequestOptions().diskCacheStrategy(DiskCacheStrategy.RESOURCE)) .into(binding.ivHotExploreItem); binding.tvHomeExploretitleItem.setText(data.getName()); diff --git a/app/src/main/java/com/viontv/app/ui/adapter/VTMyListFollowAdapter.java b/app/src/main/java/com/viontv/app/ui/adapter/VTMyListFollowAdapter.java index fafb02f..30aea13 100644 --- a/app/src/main/java/com/viontv/app/ui/adapter/VTMyListFollowAdapter.java +++ b/app/src/main/java/com/viontv/app/ui/adapter/VTMyListFollowAdapter.java @@ -64,6 +64,7 @@ public class VTMyListFollowAdapter if (data != null) { Glide.with(mcontext) .load(data.getImage_url()) + .placeholder(R.mipmap.ic_loadingdefault_ver) .apply(new RequestOptions().diskCacheStrategy(DiskCacheStrategy.NONE)) .into(binding.ivMylistFollowlistItem); binding.tvMylistFollowlistName.setText(data.getName()); diff --git a/app/src/main/java/com/viontv/app/ui/adapter/VTMyListPlayAdapter.java b/app/src/main/java/com/viontv/app/ui/adapter/VTMyListPlayAdapter.java index b980cd0..592deda 100644 --- a/app/src/main/java/com/viontv/app/ui/adapter/VTMyListPlayAdapter.java +++ b/app/src/main/java/com/viontv/app/ui/adapter/VTMyListPlayAdapter.java @@ -43,6 +43,7 @@ public class VTMyListPlayAdapter if (data != null) { Glide.with(mcontext) .load(data.getImage_url()) + .placeholder(R.mipmap.ic_loadingdefault_ver) .apply(new RequestOptions().diskCacheStrategy(DiskCacheStrategy.NONE)) .into(binding.ivMylistPlayItem); binding.tvMylistPlaylistName.setText(data.getName()); diff --git a/app/src/main/java/com/viontv/app/ui/adapter/VTNineSquareAdapter.java b/app/src/main/java/com/viontv/app/ui/adapter/VTNineSquareAdapter.java index 08c565d..1f4d5b5 100644 --- a/app/src/main/java/com/viontv/app/ui/adapter/VTNineSquareAdapter.java +++ b/app/src/main/java/com/viontv/app/ui/adapter/VTNineSquareAdapter.java @@ -9,6 +9,7 @@ import android.content.Context; import com.bumptech.glide.Glide; import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.request.RequestOptions; +import com.viontv.app.R; import com.viontv.app.databinding.ItemHotSquareVtBinding; import com.viontv.app.model.ItemBean; @@ -34,6 +35,7 @@ public class VTNineSquareAdapter if (data != null) { Glide.with(mcontext) .load(data.getImage_url()) + .placeholder(R.mipmap.ic_loadingdefault_ver) .apply(new RequestOptions().diskCacheStrategy(DiskCacheStrategy.NONE)) .into(binding.ivHotSquareItem); binding.tvHotSquareDesc.setText(data.getName()); diff --git a/app/src/main/java/com/viontv/app/ui/adapter/VTTabItemListAdapter.java b/app/src/main/java/com/viontv/app/ui/adapter/VTTabItemListAdapter.java index a1898ff..39240af 100644 --- a/app/src/main/java/com/viontv/app/ui/adapter/VTTabItemListAdapter.java +++ b/app/src/main/java/com/viontv/app/ui/adapter/VTTabItemListAdapter.java @@ -11,6 +11,7 @@ import androidx.constraintlayout.widget.ConstraintLayout; import com.bumptech.glide.Glide; import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.request.RequestOptions; +import com.viontv.app.R; import com.viontv.app.databinding.ItemHomeTablistVtBinding; import com.viontv.app.model.ItemBean; @@ -34,12 +35,13 @@ public class VTTabItemListAdapter int bingingAdapterPosition) { if (data != null) { - String imageUrl = data.getHorizontally_img(); - if (!imageUrl.endsWith(".jpg")) { - imageUrl = data.getImage_url(); - } + String imageUrl = data.getImage_url(); +// if (!imageUrl.endsWith(".jpg")) { +// imageUrl = data.getImage_url(); +// } Glide.with(mcontext) .load(imageUrl) + .placeholder(R.mipmap.ic_loadingdefault_hor) .apply(new RequestOptions().diskCacheStrategy(DiskCacheStrategy.RESOURCE)) .into(binding.ivHometabItem); binding.tvHometabTitleItem.setText(data.getName()); diff --git a/app/src/main/java/com/viontv/app/ui/adapter/VTTop10ListAdapter.java b/app/src/main/java/com/viontv/app/ui/adapter/VTTop10ListAdapter.java index 9bcebda..3c13f45 100644 --- a/app/src/main/java/com/viontv/app/ui/adapter/VTTop10ListAdapter.java +++ b/app/src/main/java/com/viontv/app/ui/adapter/VTTop10ListAdapter.java @@ -10,6 +10,7 @@ import android.view.View; import com.bumptech.glide.Glide; import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.request.RequestOptions; +import com.viontv.app.R; import com.viontv.app.databinding.ItemHomeExploreVtBinding; import com.viontv.app.model.ItemBean; import com.viontv.app.utils.TimeUtils; @@ -42,6 +43,7 @@ public class VTTop10ListAdapter // Glide.with(mcontext) .load(data.getImage_url()) + .placeholder(R.mipmap.ic_loadingdefault_ver) .apply(new RequestOptions().diskCacheStrategy(DiskCacheStrategy.RESOURCE)) .into(binding.ivHotExploreItem); binding.layoutHomeHotcontent.setVisibility(View.VISIBLE); diff --git a/app/src/main/java/com/viontv/app/ui/adapter/VTUserVideoHistoryAdapter.java b/app/src/main/java/com/viontv/app/ui/adapter/VTUserVideoHistoryAdapter.java index 81bc3eb..ad5d9f0 100644 --- a/app/src/main/java/com/viontv/app/ui/adapter/VTUserVideoHistoryAdapter.java +++ b/app/src/main/java/com/viontv/app/ui/adapter/VTUserVideoHistoryAdapter.java @@ -10,6 +10,7 @@ import android.view.View; import com.bumptech.glide.Glide; import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.request.RequestOptions; +import com.viontv.app.R; import com.viontv.app.databinding.ItemHomeExploreVtBinding; import com.viontv.app.databinding.ItemVideoHistoryBinding; import com.viontv.app.model.ItemBean; @@ -43,6 +44,7 @@ public class VTUserVideoHistoryAdapter // Glide.with(mcontext) .load(data.getImage_url()) + .placeholder(R.mipmap.ic_loadingdefault_ver) .apply(new RequestOptions().diskCacheStrategy(DiskCacheStrategy.RESOURCE)) .into(binding.ivHistoryItem); binding.tvHistoryProgress.setText(TimeUtils.precess(data.getCurrent_episode(),data.getEpisode_total())+"%"); diff --git a/app/src/main/java/com/viontv/app/ui/view/VTGoogleExoPlayerView.java b/app/src/main/java/com/viontv/app/ui/view/VTGoogleExoPlayerView.java index c3e1453..f8d32df 100644 --- a/app/src/main/java/com/viontv/app/ui/view/VTGoogleExoPlayerView.java +++ b/app/src/main/java/com/viontv/app/ui/view/VTGoogleExoPlayerView.java @@ -2,7 +2,9 @@ package com.viontv.app.ui.view; import android.content.Context; import android.net.Uri; +import android.os.Handler; import android.util.AttributeSet; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.FrameLayout; @@ -29,6 +31,8 @@ import com.viontv.app.utils.VTAppConstants; import org.greenrobot.eventbus.EventBus; +import java.util.Timer; +import java.util.TimerTask; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; @@ -45,8 +49,12 @@ public class VTGoogleExoPlayerView extends FrameLayout { private AppCompatImageView ivPagePlay; private AppCompatImageView iv_collection_controller; private AppCompatImageView iv_back_hibit_episode; + private AppCompatTextView tv_des_player; private AppCompatTextView tv_episode_player; + private AppCompatTextView tv_episode_playertotal; + + private AppCompatImageView iv_episode_playertotal; private AppCompatTextView tv_title_player; private AppCompatTextView tv_collection_num_controller; private AppCompatTextView tv_title_hibit_episode; @@ -54,6 +62,8 @@ public class VTGoogleExoPlayerView extends FrameLayout { private RelativeLayout rl_ep; private boolean isEpisodePlaying = false; + private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + public VTGoogleExoPlayerView(Context context, AttributeSet attrs) { super(context, attrs); player = new ExoPlayer.Builder(context).build(); @@ -63,21 +73,23 @@ public class VTGoogleExoPlayerView extends FrameLayout { bind.playerView.setPlayer(player); seekBar = bind.playerView.findViewById(R.id.seekBar_player_detail); ivCoverPlayerDetail = bind.playerView.findViewById(R.id.iv_cover_player_detail); - ivPagePlay = bind.playerView.findViewById(R.id.iv_hibit_play); + ivPagePlay = bind.playerView.findViewById(R.id.iv_vt_play); iv_collection_controller = bind.playerView.findViewById(R.id.iv_collection_controller); - iv_back_hibit_episode = bind.playerView.findViewById(R.id.iv_back_hibit_episode); + iv_back_hibit_episode = bind.playerView.findViewById(R.id.iv_back_vt_episode); tv_des_player = bind.playerView.findViewById(R.id.tv_des_player); tv_episode_player = bind.playerView.findViewById(R.id.tv_episode_player); + tv_episode_playertotal = bind.playerView.findViewById(R.id.iv_episodes_total_controller); tv_title_player = bind.playerView.findViewById(R.id.tv_title_player); load_line = bind.playerView.findViewById(R.id.load_line); rl_ep = bind.playerView.findViewById(R.id.rl_ep); + iv_episode_playertotal = bind.playerView.findViewById(R.id.iv_episodes_controller); iv_back_hibit_episode.setOnClickListener(v -> EventBus.getDefault().post(VTAppConstants.Constants_RecommendPlayerView_CLOSEExample) ); tv_collection_num_controller = bind.playerView.findViewById(R.id.tv_collection_num_controller); - tv_title_hibit_episode = bind.playerView.findViewById(R.id.tv_title_hibit_episode); + tv_title_hibit_episode = bind.playerView.findViewById(R.id.tv_title_vt_episode); player.addListener(new Player.Listener() { @@ -86,7 +98,7 @@ public class VTGoogleExoPlayerView extends FrameLayout { Player.Listener.super.onPlaybackStateChanged(playbackState); switch (playbackState) { case Player.STATE_BUFFERING: - load_line.setVisibility(VISIBLE); + load_line.setVisibility(GONE); load_line.startAnimation(); break; case Player.STATE_READY: @@ -101,6 +113,7 @@ public class VTGoogleExoPlayerView extends FrameLayout { break; case Player.STATE_ENDED: EventBus.getDefault().post(VTAppConstants.Constants_Google_PLAYER_STATUS_FINISH_DETAIL); + stopProgressJob(); break; case Player.STATE_IDLE: bind.playerView.setEnabled(false); @@ -121,7 +134,7 @@ public class VTGoogleExoPlayerView extends FrameLayout { } }); - bind.playerView.setOnClickListener(v -> { + ivPagePlay.setOnClickListener(v -> { if (!VTAppConstants.isLock) { if (isEpisodePlaying) { ivPagePlay.setImageResource(R.mipmap.iv_play_vt); @@ -134,22 +147,85 @@ public class VTGoogleExoPlayerView extends FrameLayout { }); } - private void setProgress() { - if (progressJob != null) { - progressJob.cancel(true); + + Timer mTimer; + TimerTask mTimerTask; + + public void setSeekBar(){ + long duration = player.getDuration(); + long position = player.getCurrentPosition(); + int progress = (int) (position * 100 / (duration == C.TIME_UNSET ? 1 : duration)); + if (seekBar != null) { + seekBar.setMax(100); + seekBar.setProgress(progress + 1); } - ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); - progressJob = executor.scheduleWithFixedDelay(() -> { - if (!isDragging) { - long duration = player.getDuration(); - long position = player.getCurrentPosition(); - int progress = (int) (position * 100 / (duration == C.TIME_UNSET ? 1 : duration)); - if (seekBar != null) { - seekBar.setMax(100); - seekBar.setProgress(progress + 1); + } + + private boolean isProgressJobRunning =false; + + private Runnable progressRunnable; + + private Handler handler = new Handler(); + private void startProgressJob() { + if (isProgressJobRunning) return; + + isProgressJobRunning = true; + progressRunnable = new Runnable() { + @Override + public void run() { + if (!isDragging) { + long duration = player.getDuration(); + long position = player.getCurrentPosition(); + int progress = (int) (position * 100 / (duration == C.TIME_UNSET ? 1 : duration)); + if (seekBar != null) { + seekBar.setMax(100); + seekBar.setProgress(progress + 1); + } } + handler.postDelayed(this, 1000); // 每 1 秒执行一次 } - }, 0, 1, TimeUnit.SECONDS); + }; + handler.post(progressRunnable); // 启动 + } + + + private void stopProgressJob() { + isProgressJobRunning = false; + if (progressRunnable != null) { + handler.removeCallbacks(progressRunnable); + } + } + private void setProgress() { + + startProgressJob(); +// setSeekBar(); + +// if (progressJob != null) { +// progressJob.cancel(true); +// } + +// ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); +// Runnable task = () -> { +// if (!isDragging) { +// setSeekBar(); +// }}; +// executor.schedule(task,1,TimeUnit.SECONDS); +// progressJob = executor.schedule(task,1,TimeUnit.SECONDS); +// progressJob = executor.schedule(task,1,TimeUnit.SECONDS); +// progressJob = executor.scheduleWithFixedDelay(() -> { +// if (!isDragging) { +// long duration = player.getDuration(); +// long position = player.getCurrentPosition(); +// int progress = (int) (position * 100 / (duration == C.TIME_UNSET ? 1 : duration)); +// if (seekBar != null) { +// seekBar.setMax(100); +// seekBar.setProgress(progress + 1); +// } +// +// } +// }, 0, 1, TimeUnit.SECONDS); + + // if (progressJob != null) { // progressJob.cancel(null); // } @@ -212,16 +288,16 @@ public class VTGoogleExoPlayerView extends FrameLayout { if (TranslatesUtils.translates() != null) { tv_title_hibit_episode.setText(TranslatesUtils.replace( TranslatesUtils.translates().getEpisode_set(), - String.valueOf(bean.getEpisode()) + String.valueOf(bean.getEpisode()+" / "+shortVideoInfo.getName()) )); tv_episode_player.setText(TranslatesUtils.replace( TranslatesUtils.translates().getComplete_episode(), - String.valueOf(shortVideoInfo.getEpisode_total()) - )); + String.valueOf(shortVideoInfo.getEpisode_total()))); } else { - tv_title_hibit_episode.setText("Episode ".concat(String.valueOf(bean.getEpisode()))); + tv_title_hibit_episode.setText("Episode " +(bean.getEpisode()+" / "+shortVideoInfo.getName())); tv_episode_player.setText("Complete set : ".concat(String.valueOf(shortVideoInfo.getEpisode_total()))); } + tv_episode_playertotal.setText(String.valueOf(shortVideoInfo.getEpisode_total())); tv_des_player.setText(shortVideoInfo.getDescription()); Glide.with(getContext()).load(shortVideoInfo.getImage_url()).into(ivCoverPlayerDetail); ivCoverPlayerDetail.setVisibility(View.VISIBLE); @@ -230,6 +306,9 @@ public class VTGoogleExoPlayerView extends FrameLayout { rl_ep.setOnClickListener(v -> EventBus.getDefault().post(VTAppConstants.Constants_PlayerView_MoreItemEvent) ); + iv_episode_playertotal.setOnClickListener(v -> + EventBus.getDefault().post(VTAppConstants.Constants_PlayerView_MoreItemEvent) + ); player.setMediaItem(MediaItem.fromUri(Uri.parse(bean.getVideo_url()))); player.prepare(); } @@ -244,5 +323,6 @@ public class VTGoogleExoPlayerView extends FrameLayout { public void release() { player.release(); + stopProgressJob(); } } \ No newline at end of file diff --git a/app/src/main/java/com/viontv/app/ui/view/VTHomeGoogleExoPlayerView.java b/app/src/main/java/com/viontv/app/ui/view/VTHomeGoogleExoPlayerView.java index 36ed651..187433f 100644 --- a/app/src/main/java/com/viontv/app/ui/view/VTHomeGoogleExoPlayerView.java +++ b/app/src/main/java/com/viontv/app/ui/view/VTHomeGoogleExoPlayerView.java @@ -126,7 +126,7 @@ public class VTHomeGoogleExoPlayerView extends FrameLayout { } }); - bind.playerView.setOnClickListener(v -> { + ivPagePlay.setOnClickListener(v -> { if (!VTAppConstants.isLock) { if (isEpisodePlaying) { ivPagePlay.setImageResource(R.mipmap.iv_play_vt); diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml index 07d5da9..ca3826a 100644 --- a/app/src/main/res/drawable/ic_launcher_background.xml +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -1,170 +1,74 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + xmlns:android="http://schemas.android.com/apk/res/android"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_splash.xml b/app/src/main/res/layout/activity_splash.xml new file mode 100644 index 0000000..fe5dffa --- /dev/null +++ b/app/src/main/res/layout/activity_splash.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_category_item.xml b/app/src/main/res/layout/fragment_category_item.xml index 721c26e..d7940fc 100644 --- a/app/src/main/res/layout/fragment_category_item.xml +++ b/app/src/main/res/layout/fragment_category_item.xml @@ -57,6 +57,14 @@ android:layout_height="wrap_content" android:layout_marginStart="@dimen/dp_15" android:layout_marginTop="@dimen/dp_20" /> + + diff --git a/app/src/main/res/layout/fragment_me.xml b/app/src/main/res/layout/fragment_me.xml index 40982d3..bdfd6c0 100644 --- a/app/src/main/res/layout/fragment_me.xml +++ b/app/src/main/res/layout/fragment_me.xml @@ -120,18 +120,37 @@ android:textColor="#e6ffffff" android:textSize="@dimen/sp_14" /> - + android:layout_height="wrap_content"> + + + + + + + + + diff --git a/app/src/main/res/layout/item_home_explore_vt.xml b/app/src/main/res/layout/item_home_explore_vt.xml index f120b1b..90ad229 100644 --- a/app/src/main/res/layout/item_home_explore_vt.xml +++ b/app/src/main/res/layout/item_home_explore_vt.xml @@ -23,10 +23,8 @@ @@ -70,6 +68,7 @@ android:maxLines="2" android:textColor="#ff9d9d9d" android:textSize="@dimen/sp_12" + app:layout_constraintTop_toTopOf="@+id/cardview_hot_explore" app:layout_constraintBottom_toBottomOf="@+id/cardview_hot_explore" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="@+id/tv_home_exploretitle_item" /> diff --git a/app/src/main/res/layout/item_home_tablist_vt.xml b/app/src/main/res/layout/item_home_tablist_vt.xml index d3fbdfd..0cd5e1a 100644 --- a/app/src/main/res/layout/item_home_tablist_vt.xml +++ b/app/src/main/res/layout/item_home_tablist_vt.xml @@ -17,10 +17,8 @@ diff --git a/app/src/main/res/layout/layout_banner.xml b/app/src/main/res/layout/layout_banner.xml new file mode 100644 index 0000000..5474a60 --- /dev/null +++ b/app/src/main/res/layout/layout_banner.xml @@ -0,0 +1,25 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/layout_player_controller_vt.xml b/app/src/main/res/layout/layout_player_controller_vt.xml index 43c166c..f3d5147 100644 --- a/app/src/main/res/layout/layout_player_controller_vt.xml +++ b/app/src/main/res/layout/layout_player_controller_vt.xml @@ -12,7 +12,7 @@ android:scaleType="centerCrop" /> + + + + + + + + + + + + + + + + + + + + + @@ -54,31 +122,23 @@ android:thumb="@drawable/bg_shape_seekbar_player_vt" android:thumbOffset="8dp" /> - - - + - - - - - - - - - + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml index 6f3b755..4ae7d12 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -1,6 +1,5 @@ - - - + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml index 6f3b755..4ae7d12 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -1,6 +1,5 @@ - - - + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp index c209e78..7b51967 100644 Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher.webp and b/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_background.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_background.webp new file mode 100644 index 0000000..0e2d201 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_background.webp differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000..8a96d88 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp index b2dfe3d..56f7fbd 100644 Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/app/src/main/res/mipmap-mdpi/ic_launcher.webp index 4f0f1d6..292edab 100644 Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher.webp and b/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_background.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_background.webp new file mode 100644 index 0000000..19700be Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_background.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000..ed5090e Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp index 62b611d..188bc85 100644 Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp index 948a307..26d9ac9 100644 Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp and b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_background.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_background.webp new file mode 100644 index 0000000..32e613f Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_background.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000..d32d7a4 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp index 1b9a695..7f1a140 100644 Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp index 28d4b77..993cf44 100644 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.webp new file mode 100644 index 0000000..4d6c5a1 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000..266c624 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp index 9287f50..268550b 100644 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_loadingdefault_hor.png b/app/src/main/res/mipmap-xxhdpi/ic_loadingdefault_hor.png new file mode 100644 index 0000000..95a31aa Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_loadingdefault_hor.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_loadingdefault_ver.png b/app/src/main/res/mipmap-xxhdpi/ic_loadingdefault_ver.png new file mode 100644 index 0000000..73745f3 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_loadingdefault_ver.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_splash_appname.png b/app/src/main/res/mipmap-xxhdpi/ic_splash_appname.png new file mode 100644 index 0000000..0e2fb33 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_splash_appname.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_splash_bg.png b/app/src/main/res/mipmap-xxhdpi/ic_splash_bg.png new file mode 100644 index 0000000..831d313 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_splash_bg.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_video_episodes.png b/app/src/main/res/mipmap-xxhdpi/ic_video_episodes.png new file mode 100644 index 0000000..ec0641f Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_video_episodes.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp index aa7d642..06a2943 100644 Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.webp new file mode 100644 index 0000000..f1fa2c3 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000..1088e36 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp index 9126ae3..b5f78d0 100644 Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml index a19d450..7acf719 100644 --- a/app/src/main/res/values-night/themes.xml +++ b/app/src/main/res/values-night/themes.xml @@ -1,16 +1,11 @@ - \ 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 9618636..5b49e17 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -23,11 +23,13 @@ Privacy Policy User Agreement About Us + Version Follow List Play List EP.%d/EP.%d Cancel Delete(%d) + Episodes diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8b4ef0c..0753d4d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -26,6 +26,7 @@ avloadingindicatorview="2.1.4" media3 ="1.4.0" eventbus="3.3.1" baseRecyclerViewAdapter="4.1.4" +splashscreen="1.0.1" [libraries] junit = { group = "junit", name = "junit", version.ref = "junit" } @@ -57,6 +58,7 @@ media3ui = { group = "androidx.media3", name = "media3-ui", version.ref = "media media3exoplayerhls = { group = "androidx.media3", name = "media3-exoplayer-hls", version.ref = "media3" } eventbut={group = "org.greenrobot", name = "eventbus", version.ref = "eventbus" } baseRecyclerAdapter={group = "io.github.cymchad", name = "BaseRecyclerViewAdapterHelper4", version.ref = "baseRecyclerViewAdapter" } +splashscreen={group = "androidx.core", name = "core-splashscreen", version.ref = "splashscreen" } [plugins]