tifaout

MovieDetailsActivity

Nov 10th, 2023
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 100.92 KB | None | 0 0
  1. package com.easyplexdemoapp.ui.moviedetails;
  2.  
  3. import static android.view.View.GONE;
  4. import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
  5. import static com.bumptech.glide.load.resource.bitmap.BitmapTransitionOptions.withCrossFade;
  6. import static com.easyplexdemoapp.util.Constants.ARG_MOVIE;
  7. import static com.easyplexdemoapp.util.Constants.DEFAULT_WEBVIEW_ADS_RUNNING;
  8. import static com.easyplexdemoapp.util.Constants.PLAYER_HEADER;
  9. import static com.easyplexdemoapp.util.Constants.PLAYER_USER_AGENT;
  10. import static com.easyplexdemoapp.util.Constants.SERVER_BASE_URL;
  11. import static com.easyplexdemoapp.util.Constants.WEBVIEW;
  12. import static com.easyplexdemoapp.util.Tools.*;
  13. import static com.google.android.material.snackbar.BaseTransientBottomBar.LENGTH_LONG;
  14.  
  15. import android.annotation.SuppressLint;
  16. import android.app.Dialog;
  17. import android.content.Context;
  18. import android.content.Intent;
  19. import android.content.SharedPreferences;
  20. import android.content.pm.ApplicationInfo;
  21. import android.graphics.Color;
  22. import android.graphics.drawable.ColorDrawable;
  23. import android.net.Uri;
  24. import android.os.Bundle;
  25. import android.os.CountDownTimer;
  26. import android.os.Handler;
  27. import android.os.Looper;
  28. import android.text.TextUtils;
  29. import android.view.Gravity;
  30. import android.view.KeyEvent;
  31. import android.view.Menu;
  32. import android.view.MenuItem;
  33. import android.view.View;
  34. import android.view.Window;
  35. import android.view.WindowManager;
  36. import android.view.inputmethod.InputMethodManager;
  37. import android.webkit.WebSettings;
  38. import android.webkit.WebView;
  39. import android.webkit.WebViewClient;
  40. import android.widget.Button;
  41. import android.widget.EditText;
  42. import android.widget.ImageView;
  43. import android.widget.LinearLayout;
  44. import android.widget.TextView;
  45. import android.widget.Toast;
  46.  
  47. import androidx.annotation.NonNull;
  48. import androidx.annotation.Nullable;
  49. import androidx.appcompat.app.AlertDialog;
  50. import androidx.appcompat.app.AppCompatActivity;
  51. import androidx.databinding.DataBindingUtil;
  52. import androidx.lifecycle.ViewModelProvider;
  53. import androidx.recyclerview.widget.GridLayoutManager;
  54. import androidx.recyclerview.widget.LinearLayoutManager;
  55. import androidx.recyclerview.widget.RecyclerView;
  56.  
  57. import com.applovin.mediation.MaxAd;
  58. import com.applovin.mediation.MaxError;
  59. import com.applovin.mediation.MaxReward;
  60. import com.applovin.mediation.MaxRewardedAdListener;
  61. import com.applovin.mediation.ads.MaxInterstitialAd;
  62. import com.applovin.mediation.ads.MaxRewardedAd;
  63. import com.appnext.ads.fullscreen.RewardedVideo;
  64. import com.appnext.base.Appnext;
  65. import com.appodeal.ads.Appodeal;
  66. import com.appodeal.ads.RewardedVideoCallbacks;
  67. import com.blogspot.atifsoftwares.animatoolib.Animatoo;
  68. import com.bumptech.glide.Glide;
  69. import com.bumptech.glide.load.engine.DiskCacheStrategy;
  70. import com.easyplex.easyplexsupportedhosts.EasyPlexSupportedHosts;
  71. import com.easyplex.easyplexsupportedhosts.Model.EasyPlexSupportedHostsModel;
  72. import com.easyplexdemoapp.R;
  73. import com.easyplexdemoapp.data.local.entity.Download;
  74. import com.easyplexdemoapp.data.local.entity.History;
  75. import com.easyplexdemoapp.data.local.entity.Media;
  76. import com.easyplexdemoapp.data.model.MovieResponse;
  77. import com.easyplexdemoapp.data.model.auth.Rating;
  78. import com.easyplexdemoapp.data.model.comments.Comment;
  79. import com.easyplexdemoapp.data.model.genres.Genre;
  80. import com.easyplexdemoapp.data.model.media.StatusFav;
  81. import com.easyplexdemoapp.data.model.stream.MediaStream;
  82. import com.easyplexdemoapp.data.repository.AuthRepository;
  83. import com.easyplexdemoapp.data.repository.MediaRepository;
  84. import com.easyplexdemoapp.data.repository.SettingsRepository;
  85. import com.easyplexdemoapp.databinding.ItemMovieDetailBinding;
  86. import com.easyplexdemoapp.ui.base.BaseActivity;
  87. import com.easyplexdemoapp.ui.comments.CommentsAdapter;
  88. import com.easyplexdemoapp.ui.login.LoginActivity;
  89. import com.easyplexdemoapp.ui.manager.AuthManager;
  90. import com.easyplexdemoapp.ui.manager.SettingsManager;
  91. import com.easyplexdemoapp.ui.manager.TokenManager;
  92. import com.easyplexdemoapp.ui.moviedetails.adapters.CastAdapter;
  93. import com.easyplexdemoapp.ui.moviedetails.adapters.DownloadsListAdapter;
  94. import com.easyplexdemoapp.ui.moviedetails.adapters.RelatedsAdapter;
  95. import com.easyplexdemoapp.ui.player.activities.EmbedActivity;
  96. import com.easyplexdemoapp.ui.player.cast.GoogleServicesHelper;
  97. import com.easyplexdemoapp.ui.player.cast.queue.ui.QueueListViewActivity;
  98. import com.easyplexdemoapp.ui.player.cast.settings.CastPreference;
  99. import com.easyplexdemoapp.ui.player.fsm.state_machine.FsmPlayerApi;
  100. import com.easyplexdemoapp.ui.settings.SettingsActivity;
  101. import com.easyplexdemoapp.ui.viewmodels.LoginViewModel;
  102. import com.easyplexdemoapp.ui.viewmodels.MovieDetailViewModel;
  103. import com.easyplexdemoapp.util.Constants;
  104. import com.easyplexdemoapp.util.DialogHelper;
  105. import com.easyplexdemoapp.util.GlideApp;
  106. import com.easyplexdemoapp.util.NetworkUtils;
  107. import com.easyplexdemoapp.util.SpacingItemDecoration;
  108. import com.easyplexdemoapp.util.Tools;
  109. import com.facebook.ads.AdError;
  110. import com.facebook.ads.InterstitialAdListener;
  111. import com.google.android.gms.ads.AdRequest;
  112. import com.google.android.gms.ads.FullScreenContentCallback;
  113. import com.google.android.gms.ads.LoadAdError;
  114. import com.google.android.gms.ads.rewarded.RewardedAd;
  115. import com.google.android.gms.ads.rewarded.RewardedAdLoadCallback;
  116. import com.google.android.gms.cast.framework.CastButtonFactory;
  117. import com.google.android.gms.cast.framework.CastContext;
  118. import com.google.android.gms.cast.framework.CastSession;
  119. import com.google.android.gms.cast.framework.CastState;
  120. import com.google.android.gms.cast.framework.CastStateListener;
  121. import com.google.android.gms.cast.framework.IntroductoryOverlay;
  122. import com.google.android.gms.cast.framework.SessionManagerListener;
  123. import com.google.android.material.floatingactionbutton.FloatingActionButton;
  124. import com.google.android.material.snackbar.Snackbar;
  125. import com.ironsource.mediationsdk.IronSource;
  126. import com.ironsource.mediationsdk.adunit.adapter.utility.AdInfo;
  127. import com.ironsource.mediationsdk.logger.IronSourceError;
  128. import com.ironsource.mediationsdk.model.Placement;
  129. import com.ironsource.mediationsdk.sdk.LevelPlayRewardedVideoListener;
  130. import com.unity3d.ads.IUnityAdsLoadListener;
  131. import com.unity3d.ads.IUnityAdsShowListener;
  132. import com.unity3d.ads.UnityAds;
  133. import com.vungle.warren.AdConfig;
  134. import com.vungle.warren.LoadAdCallback;
  135. import com.vungle.warren.PlayAdCallback;
  136. import com.vungle.warren.Vungle;
  137. import com.vungle.warren.error.VungleException;
  138. import com.xw.repo.BubbleSeekBar;
  139.  
  140. import org.jetbrains.annotations.NotNull;
  141.  
  142. import java.text.ParseException;
  143. import java.text.SimpleDateFormat;
  144. import java.util.ArrayList;
  145. import java.util.Date;
  146. import java.util.List;
  147. import java.util.Objects;
  148.  
  149. import javax.inject.Inject;
  150. import javax.inject.Named;
  151.  
  152. import dagger.android.AndroidInjection;
  153. import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
  154. import io.reactivex.rxjava3.core.Observer;
  155. import io.reactivex.rxjava3.disposables.Disposable;
  156. import io.reactivex.rxjava3.schedulers.Schedulers;
  157. import timber.log.Timber;
  158.  
  159. /**
  160.  * EasyPlex - Movies - Live Streaming - TV Series, Anime
  161.  *
  162.  * @author @Y0bEX
  163.  * @package EasyPlex - Movies - Live Streaming - TV Series, Anime
  164.  * @copyright Copyright (c) 2023 Y0bEX,
  165.  * @license <a href="http://codecanyon.net/wiki/support/legal-terms/licensing-terms/">...<a href="</a>
  166. ">* @profile https://codecany</a>on.net/user/yobex
  167.  * @link yobexd@gmail.com
  168.  * @skype yobexd@gmail.com
  169.  **/
  170.  
  171.  
  172.  
  173. public class MovieDetailsActivity extends AppCompatActivity {
  174.  
  175.  
  176.     com.appnext.core.webview.AppnextWebView appnextWebView;
  177.     com.appnext.ads.interstitial.Interstitial interstitialAppNext;
  178.     com.ironsource.environment.ContextProvider contextProvider;
  179.     Uri appLinkData;
  180.     private boolean shareLinkLaunched = false;
  181.     private MaxInterstitialAd maxInterstitialAd;
  182.  
  183.     private boolean isMovieFav = false;
  184.     private LoginViewModel loginViewModel;
  185.     private CountDownTimer mCountDownTimer;
  186.     private boolean webViewLauched = false;
  187.     ItemMovieDetailBinding binding;
  188.  
  189.     @Inject ViewModelProvider.Factory viewModelFactory;
  190.     private MovieDetailViewModel movieDetailViewModel;
  191.  
  192.     @Inject
  193.     SharedPreferences sharedPreferences;
  194.  
  195.     @Inject
  196.     SharedPreferences.Editor sharedPreferencesEditor;
  197.  
  198.     @Inject
  199.     SettingsManager settingsManager;
  200.  
  201.     @Inject
  202.     SettingsRepository settingsRepository;
  203.  
  204.     @Inject
  205.     AuthRepository authRepository;
  206.  
  207.     @Inject
  208.     MediaRepository mediaRepository;
  209.  
  210.  
  211.     @Inject
  212.     @Named("ready")
  213.     boolean settingReady;
  214.  
  215.  
  216.     @Inject
  217.     @Named("cuepoint")
  218.     String cuePoint;
  219.  
  220.  
  221.     @Inject
  222.     @Named("cuepointUrl")
  223.     String cuepointUrl;
  224.  
  225.     @Inject
  226.     AuthManager authManager;
  227.  
  228.  
  229.     @Inject
  230.     @Named("cuepointY")
  231.     String cuePointY;
  232.  
  233.     @Inject
  234.     @Named("cuepointN")
  235.     String cuePointN;
  236.  
  237.  
  238.     @Inject
  239.     @Named("cuepointW")
  240.     String cuePointW;
  241.  
  242.  
  243.     @Inject
  244.     @Named("cuepointZ")
  245.     String cuePointZ;
  246.  
  247.     @Inject
  248.     @Named("vpn")
  249.     boolean checkVpn;
  250.  
  251.     @Inject
  252.     @Named("sniffer")
  253.     @Nullable
  254.     ApplicationInfo provideSnifferCheck;
  255.  
  256.  
  257.     @Inject
  258.     @Named("root")
  259.     @Nullable
  260.     ApplicationInfo provideRootCheck;
  261.  
  262.     @Inject
  263.     TokenManager tokenManager;
  264.  
  265.     private CastAdapter mCastAdapter;
  266.     private RelatedsAdapter mRelatedsAdapter;
  267.     private CommentsAdapter commentsAdapter;
  268.     private boolean mMovie;
  269.     boolean isLoading;
  270.     private RewardedAd rewardedAd;
  271.     private Media media;
  272.     private String mediaGenre;
  273.     private Download download;
  274.     private History history;
  275.     private CastContext mCastContext;
  276.     private final SessionManagerListener<CastSession> mSessionManagerListener = new MySessionManagerListener();
  277.     private CastSession mCastSession;
  278.     private MenuItem mediaRouteMenuItem;
  279.     private MenuItem mQueueMenuItem;
  280.     private IntroductoryOverlay mIntroductoryOverlay;
  281.     private CastStateListener mCastStateListener;
  282.     private MaxRewardedAd maxRewardedAd;
  283.     private RewardedVideo mAppNextAdsVideoRewarded;
  284.  
  285.     private class MySessionManagerListener implements SessionManagerListener<CastSession> {
  286.  
  287.         @Override
  288.         public void onSessionEnded(@NotNull CastSession session, int error) {
  289.  
  290.             if (session == mCastSession) {
  291.                 mCastSession = null;
  292.             }
  293.             invalidateOptionsMenu();
  294.         }
  295.  
  296.         @Override
  297.         public void onSessionResumed(@NotNull CastSession session, boolean wasSuspended) {
  298.             mCastSession = session;
  299.             invalidateOptionsMenu();
  300.         }
  301.  
  302.         @Override
  303.         public void onSessionStarted(@NotNull CastSession session, @NotNull String sessionId) {
  304.             mCastSession = session;
  305.             invalidateOptionsMenu();
  306.         }
  307.  
  308.         @Override
  309.         public void onSessionStarting(@NotNull CastSession session) {
  310.  
  311.             //
  312.         }
  313.  
  314.         @Override
  315.         public void onSessionStartFailed(@NotNull CastSession session, int error) {
  316.  
  317.             ToastHelper(getApplicationContext(),getString(R.string.unable_cast));
  318.         }
  319.  
  320.         @Override
  321.         public void onSessionEnding(@NotNull CastSession session) {
  322.  
  323.             //
  324.         }
  325.  
  326.         @Override
  327.         public void onSessionResuming(@NotNull CastSession session, @NotNull String sessionId) {
  328.  
  329.             //
  330.         }
  331.  
  332.         @Override
  333.         public void onSessionResumeFailed(@NotNull CastSession session, int error) {
  334.  
  335.             //
  336.         }
  337.  
  338.         @Override
  339.         public void onSessionSuspended(@NotNull CastSession session, int reason) {
  340.  
  341.             //
  342.         }
  343.     }
  344.  
  345.  
  346.     @Override
  347.     protected void onCreate(Bundle savedInstanceState) {
  348.         AndroidInjection.inject(this);
  349.         super.onCreate(savedInstanceState);
  350.  
  351.         setSystemBarTransparent(this);
  352.         hideSystemPlayerUi(this,true,0);
  353.  
  354.         binding = DataBindingUtil.setContentView(this, R.layout.item_movie_detail);
  355.  
  356.  
  357.         mRelatedsAdapter = new RelatedsAdapter();
  358.  
  359.  
  360.         if (settingsManager.getSettings().getVpn() == 1 && checkVpn) {
  361.  
  362.             binding.backbutton.performClick();
  363.  
  364.             ToastHelper(getApplicationContext(),getString(R.string.vpn_message));
  365.  
  366.         }
  367.  
  368.         onInitRewards();
  369.  
  370.         if (GoogleServicesHelper.available(this)) {
  371.  
  372.             mCastStateListener = newState -> {
  373.                 if (newState != CastState.NO_DEVICES_AVAILABLE) {
  374.                     showIntroductoryOverlay();
  375.                 }
  376.             };
  377.             mCastContext = CastContext.getSharedInstance(this);
  378.  
  379.  
  380.         }
  381.  
  382.         Intent intent = getIntent();
  383.  
  384.         media = intent.getParcelableExtra(ARG_MOVIE);
  385.  
  386.         // ViewModel to cache, retrieve data for MovieDetailsActivity
  387.         movieDetailViewModel = new ViewModelProvider(this, viewModelFactory).get(MovieDetailViewModel.class);
  388.  
  389.         loginViewModel = new ViewModelProvider(this, viewModelFactory).get(LoginViewModel.class);
  390.  
  391.  
  392.         mMovie = false;
  393.         binding.progressBar.setVisibility(View.VISIBLE);
  394.         binding.itemDetailContainer.setVisibility(GONE);
  395.         binding.PlayButtonIcon.setVisibility(GONE);
  396.         binding.serieName.setVisibility(GONE);
  397.  
  398.  
  399.         Intent appLinkIntent = getIntent();
  400.         appLinkData = appLinkIntent.getData();
  401.  
  402.  
  403.         if (appLinkData !=null) {
  404.  
  405.             movieDetailViewModel.getMovieDetails(appLinkData.getLastPathSegment());
  406.             movieDetailViewModel.getRelatedsMovies(Integer.parseInt(appLinkData.getLastPathSegment()));
  407.             movieDetailViewModel.getMovieComments(Integer.parseInt(appLinkData.getLastPathSegment()));
  408.  
  409.             shareLinkLaunched = true;
  410.  
  411.         }else if (media.getId() !=null) {
  412.  
  413.             movieDetailViewModel.getMovieDetails(media.getId());
  414.             movieDetailViewModel.getRelatedsMovies(Integer.parseInt(media.getId()));
  415.             movieDetailViewModel.getMovieComments(Integer.parseInt(media.getId()));
  416.  
  417.         }
  418.  
  419.  
  420.         initMovieDetails();
  421.         onInitCastRecycleView();
  422.  
  423.  
  424.  
  425.  
  426.  
  427.         if (settingsManager.getSettings().getAdUnitIdRewarded() != null) {
  428.  
  429.             loadRewardedAd();
  430.  
  431.         }
  432.  
  433.         if (settingsManager.getSettings().getEnableComments() !=1){
  434.  
  435.             binding.floatingCommentIcon.setVisibility(GONE);
  436.             binding.commentsize.setVisibility(GONE);
  437.         }
  438.  
  439.     }
  440.  
  441.     private void onInitCastRecycleView() {
  442.  
  443.         binding.recyclerViewCastMovieDetail.setHasFixedSize(true);
  444.         binding.recyclerViewCastMovieDetail.setNestedScrollingEnabled(false);
  445.         binding.recyclerViewCastMovieDetail.setLayoutManager(new LinearLayoutManager(MovieDetailsActivity.this, LinearLayoutManager.HORIZONTAL, false));
  446.         binding.recyclerViewCastMovieDetail.addItemDecoration(new SpacingItemDecoration(1, dpToPx(this, 0), true));
  447.     }
  448.  
  449.  
  450.     private void onInitRewards() {
  451.  
  452.         // Initialize the AppNext Ads SDK.
  453.         Appnext.init(this);
  454.  
  455.  
  456.         Appodeal.initialize(this, settingsManager.getSettings().getAdUnitIdAppodealRewarded(),
  457.                 Appodeal.INTERSTITIAL | Appodeal.BANNER | Appodeal.REWARDED_VIDEO, list -> {
  458.                 });
  459.  
  460.         IronSource.init(this, settingsManager.getSettings().getIronsourceAppKey(), IronSource.AD_UNIT.REWARDED_VIDEO,IronSource.AD_UNIT.INTERSTITIAL,IronSource.AD_UNIT.BANNER);
  461.  
  462.  
  463.         if (settingsManager.getSettings().getApplovinInterstitialUnitid() !=null && !settingsManager.getSettings().getApplovinInterstitialUnitid().isEmpty()) {
  464.  
  465.             maxInterstitialAd = new MaxInterstitialAd(settingsManager.getSettings().getApplovinInterstitialUnitid(), this );
  466.             maxInterstitialAd.loadAd();
  467.         }
  468.  
  469.         String defaultRewardedNetworkAds = settingsManager.getSettings().getDefaultRewardedNetworkAds();
  470.  
  471.         if (getString(R.string.applovin).equals(defaultRewardedNetworkAds)) {
  472.  
  473.             maxRewardedAd = MaxRewardedAd.getInstance( settingsManager.getSettings().getApplovinRewardUnitid(), this);
  474.             maxRewardedAd.loadAd();
  475.  
  476.         }else  if (getString(R.string.appnext).equals(defaultRewardedNetworkAds)) {
  477.  
  478.             mAppNextAdsVideoRewarded = new RewardedVideo(this, settingsManager.getSettings().getAppnextPlacementid());
  479.             mAppNextAdsVideoRewarded.loadAd();
  480.  
  481.  
  482.         }else  if (getString(R.string.vungle).equals(defaultRewardedNetworkAds)) {
  483.  
  484.             Vungle.loadAd(settingsManager.getSettings().getVungleRewardPlacementName(), new LoadAdCallback() {
  485.                 @Override
  486.                 public void onAdLoad(String id) {
  487.                     //
  488.                 }
  489.  
  490.                 @Override
  491.                 public void onError(String id, VungleException e) {
  492.  
  493.                     //
  494.                 }
  495.             });
  496.  
  497.         }else  if (getString(R.string.ironsource).equals(defaultRewardedNetworkAds)) {
  498.  
  499.             IronSource.loadRewardedVideo();
  500.  
  501.         }
  502.  
  503.     }
  504.  
  505.  
  506.  
  507.     private void onLoadUnityInterstetial() {
  508.  
  509.  
  510.         UnityAds.load(settingsManager.getSettings().getUnityInterstitialPlacementId(), new IUnityAdsLoadListener() {
  511.             @Override
  512.             public void onUnityAdsAdLoaded(String placementId) {
  513.  
  514.                 Tools.onLoadUnityInterstetial(MovieDetailsActivity.this,settingsManager.getSettings().getUnityadsInterstitial()
  515.                         ,settingsManager.getSettings().getUnityShow(),settingsManager);
  516.  
  517.             }
  518.  
  519.             @Override
  520.             public void onUnityAdsFailedToLoad(String placementId, UnityAds.UnityAdsLoadError error, String message) {
  521.  
  522.  
  523.                 //
  524.             }
  525.         });
  526.  
  527.  
  528.  
  529.     }
  530.  
  531.  
  532.     private void initMovieDetails() {
  533.  
  534.         if (authManager.getUserInfo().getPremuim() != 1 ) {
  535.             onLoadUnityInterstetial();
  536.         }
  537.  
  538.  
  539.         movieDetailViewModel.getMovieDetails(media.getId());
  540.         movieDetailViewModel.movieDetailMutableLiveData.observe(this, movieDetail -> {
  541.  
  542.             download = new Download(movieDetail.getId(),movieDetail.getTmdbId(),movieDetail.getBackdropPath(),movieDetail.getTitle(),"");
  543.  
  544.             for (Genre genre : movieDetail.getGenres()) {
  545.                 mediaGenre = genre.getName();
  546.             }
  547.  
  548.             onLoadImage(movieDetail.getPosterPath());onLoadTitle(movieDetail.getTitle());
  549.             try {
  550.                 onLoadDate(movieDetail.getReleaseDate());
  551.             } catch (ParseException e) {
  552.                 e.printStackTrace();
  553.             }
  554.             onLoadSynopsis(movieDetail.getOverview());onLoadGenres(movieDetail.getGenres());
  555.             if(!settingReady)finishAffinity();
  556.             onLoadBackButton();
  557.             onLoadRelatedsMovies();
  558.             onLoadCast(movieDetail);
  559.             onLoadRating(movieDetail.getVoteAverage());
  560.             onLoadViews(movieDetail.getViews());
  561.             onLoadPogressResume(movieDetail.getId());
  562.             binding.review.setOnClickListener(v -> onSentReview(movieDetail));
  563.             onLoadUsersReviews(movieDetail.getVoteAverage());
  564.             binding.floatingCommentIcon.setOnClickListener(v -> {
  565.  
  566.                 if (tokenManager.getToken().getAccessToken() != null) {
  567.  
  568.                     onLoadMovieComments(movieDetail.getId());
  569.                 }else {
  570.  
  571.  
  572.                     final Snackbar snackbar = Snackbar.make(binding.constraintLayout, "", LENGTH_LONG);
  573.                     //inflate view
  574.                     @SuppressLint("InflateParams") View customView = getLayoutInflater().inflate(R.layout.snackbar_login, null);
  575.  
  576.                     snackbar.getView().setBackgroundColor(Color.TRANSPARENT);
  577.                     Snackbar.SnackbarLayout snackBarView = (Snackbar.SnackbarLayout) snackbar.getView();
  578.                     snackBarView.setPadding(0, 0, 0, 0);
  579.                     (customView.findViewById(R.id.tv_undo)).setOnClickListener(v1 -> {
  580.                         snackbar.dismiss();
  581.                         startActivity(new Intent(MovieDetailsActivity.this, LoginActivity.class));
  582.                         finish();
  583.                     });
  584.  
  585.                     snackBarView.addView(customView, 0);
  586.                     snackbar.show();
  587.                 }
  588.  
  589.             });
  590.  
  591.  
  592.             if (settingsManager.getSettings().getEnableComments() ==1){
  593.  
  594.                 mediaRepository.getComments(Integer.parseInt(movieDetail.getId()),settingsManager.getSettings().getApiKey())
  595.                         .subscribeOn(Schedulers.newThread())
  596.                         .observeOn(AndroidSchedulers.mainThread())
  597.                         .subscribe(new Observer<>() {
  598.                             @Override
  599.                             public void onSubscribe(@NotNull Disposable d) {
  600.  
  601.                                 //
  602.  
  603.                             }
  604.  
  605.                             @SuppressLint("NotifyDataSetChanged")
  606.                             @Override
  607.                             public void onNext(@NotNull MovieResponse movieResponse) {
  608.  
  609.                                 if (!movieResponse.getComments().isEmpty()){
  610.  
  611.                                     binding.commentsize.setText(getString(R.string.comment_size_views)+ getViewFormat(movieResponse.getComments().size()));
  612.  
  613.                                 }else {
  614.  
  615.                                     binding.commentsizeLinear.setVisibility(GONE);
  616.                                 }
  617.  
  618.  
  619.                             }
  620.  
  621.                             @Override
  622.                             public void onError(@NotNull Throwable e) {
  623.  
  624.                                 //
  625.  
  626.                             }
  627.  
  628.                             @Override
  629.                             public void onComplete() {
  630.  
  631.                                 //
  632.  
  633.                             }
  634.                         });
  635.  
  636.             }else {
  637.  
  638.  
  639.                 binding.commentsizeLinear.setVisibility(GONE);
  640.             }
  641.  
  642.  
  643.             if (authManager.getUserInfo().getPremuim() != 1 ) {
  644.  
  645.                 onLoadNetworksInter(settingsManager,MovieDetailsActivity.this,maxInterstitialAd);
  646.                 onloadBanners(settingsManager,MovieDetailsActivity.this,binding, null,null, null);
  647.  
  648.  
  649.             } else {
  650.  
  651.                 binding.bannerContainer.setVisibility(GONE);
  652.                 binding.adViewContainer.setVisibility(GONE);
  653.                 binding.appodealBannerView.setVisibility(GONE);
  654.  
  655.             }
  656.  
  657.  
  658.             if (movieDetail.getPremuim() == 1) {
  659.  
  660.                 binding.moviePremuim.setVisibility(View.VISIBLE);
  661.  
  662.  
  663.             }else {
  664.  
  665.                 binding.moviePremuim.setVisibility(View.GONE);
  666.             }
  667.  
  668.  
  669.             binding.itemDetailContainer.getViewTreeObserver().addOnScrollChangedListener(() -> {
  670.                 int scrollY =  binding.itemDetailContainer.getScrollY();
  671.                 int color = Color.parseColor("#E6070707"); // ideally a global variable
  672.                 if (scrollY < 256) {
  673.                     int alpha = (scrollY << 24) | (-1 >>> 8) ;
  674.                     color &= (alpha);
  675.  
  676.                     binding.serieName.setText("");
  677.                     binding.serieName.setVisibility(View.GONE);
  678.  
  679.  
  680.                 }else {
  681.  
  682.                     binding.serieName.setText(movieDetail.getTitle());
  683.                     binding.serieName.setVisibility(View.VISIBLE);
  684.  
  685.                 }
  686.                 binding.toolbar.setBackgroundColor(color);
  687.  
  688.             });
  689.  
  690.  
  691.  
  692.             onLoadToolbar();
  693.  
  694.  
  695.             if (settingsManager.getSettings().getEnableDownload() == 0) {
  696.  
  697.                 binding.downloadMovieImage.setImageResource(R.drawable.ic_notavailable);
  698.  
  699.             }
  700.  
  701.             binding.downloadMovie.setOnClickListener((View v) -> {
  702.  
  703.                 if (settingsManager.getSettings().getEnableDownload() == 0) {
  704.  
  705.                     DialogHelper.showNoDownloadAvailable(this,getString(R.string.download_disabled));
  706.  
  707.                 }else    if (movieDetail.getEnableDownload() == 0) {
  708.  
  709.                     Toast.makeText(this, "Download is currently not available for this Media", Toast.LENGTH_SHORT).show();
  710.  
  711.  
  712.                 }else onDownloadMovie(movieDetail);
  713.  
  714.  
  715.             });
  716.  
  717.             binding.report.setOnClickListener(v -> onLoadReport(movieDetail.getTitle(),movieDetail.getPosterPath()));
  718.  
  719.             binding.ButtonPlayTrailer.setOnClickListener(v -> {
  720.  
  721.                 if (movieDetail.getPreviewPath() == null) {
  722.                     ToastHelper(getApplicationContext(),getString(R.string.trailer_not_found));
  723.                     return;
  724.                 }
  725.                 onLoadTrailer(movieDetail.getPreviewPath(), movieDetail.getTitle(), movieDetail.getBackdropPath(), movieDetail.getTrailerUrl());
  726.             });
  727.  
  728.             binding.favoriteIcon.setOnClickListener(view -> {
  729.  
  730.                 if (settingsManager.getSettings().getFavoriteonline() == 1 && tokenManager.getToken().getAccessToken() !=null) {
  731.  
  732.                     if (isMovieFav) {
  733.  
  734.                         authRepository.getDeleteMovieOnline(movieDetail.getId())
  735.                                 .subscribeOn(Schedulers.io())
  736.                                 .observeOn(AndroidSchedulers.mainThread())
  737.                                 .subscribe(new Observer<>() {
  738.                                     @Override
  739.                                     public void onSubscribe(@NotNull Disposable d) {
  740.  
  741.                                         //
  742.  
  743.                                     }
  744.  
  745.                                     @Override
  746.                                     public void onNext(@NotNull StatusFav statusFav) {
  747.  
  748.                                         ToastHelper(getApplicationContext(),getString(R.string.remove_watch_list));
  749.  
  750.                                     }
  751.  
  752.                                     @Override
  753.                                     public void onError(@NotNull Throwable e) {
  754.  
  755.                                         //
  756.                                     }
  757.  
  758.                                     @Override
  759.                                     public void onComplete() {
  760.  
  761.                                         //
  762.  
  763.                                     }
  764.                                 });
  765.  
  766.  
  767.                         isMovieFav = false;
  768.  
  769.                         binding.favoriteImage.setImageResource(R.drawable.add_from_queue);
  770.  
  771.  
  772.                     }else {
  773.  
  774.                         authRepository.getAddMovieOnline(movieDetail.getId())
  775.                                 .subscribeOn(Schedulers.io())
  776.                                 .observeOn(AndroidSchedulers.mainThread())
  777.                                 .subscribe(new Observer<>() {
  778.                                     @Override
  779.                                     public void onSubscribe(@NotNull Disposable d) {
  780.  
  781.                                         //
  782.  
  783.                                     }
  784.  
  785.                                     @Override
  786.                                     public void onNext(@NotNull StatusFav statusFav) {
  787.  
  788.                                         ToastHelper(getApplicationContext(),"Added " + movieDetail.getTitle() + " To Watchlist");
  789.  
  790.                                     }
  791.  
  792.                                     @Override
  793.                                     public void onError(@NotNull Throwable e) {
  794.  
  795.                                         //
  796.  
  797.  
  798.                                     }
  799.  
  800.                                     @Override
  801.                                     public void onComplete() {
  802.  
  803.                                         //
  804.  
  805.                                     }
  806.                                 });
  807.  
  808.                         isMovieFav = true;
  809.  
  810.                         binding.favoriteImage.setImageResource(R.drawable.ic_in_favorite);
  811.                     }
  812.  
  813.  
  814.                 }else  {
  815.  
  816.                     onFavoriteClick(movieDetail);
  817.                 }
  818.  
  819.  
  820.             });
  821.  
  822.  
  823.             binding.shareIcon.setOnClickListener(v -> onShareMedia(this,movieDetail,settingsManager,"movie"));
  824.  
  825.  
  826.             checkMediaFavorite(movieDetail);
  827.  
  828.  
  829.             if (mediaRepository.hasHistory(Integer.parseInt(movieDetail.getId()))) {
  830.  
  831.                 binding.resumePlay.setVisibility(View.VISIBLE);
  832.  
  833.  
  834.                 binding.resumePlay.setOnClickListener(v -> binding.PlayButtonIcon.performClick());
  835.  
  836.  
  837.             } else {
  838.  
  839.                 binding.resumePlay.setVisibility(GONE);
  840.  
  841.  
  842.             }
  843.  
  844.  
  845.             binding.PlayButtonIcon.setOnClickListener(v -> {
  846.  
  847.  
  848.                 if (movieDetail.getEnableStream() !=1) {
  849.  
  850.                     Toast.makeText(this, R.string.stream_is_currently_not_available_for_this_media, Toast.LENGTH_SHORT).show();
  851.                     return;
  852.                 }
  853.  
  854.  
  855.  
  856.                 if (settingsManager.getSettings().getVpn() ==1 && checkVpn) {
  857.  
  858.                     binding.backbutton.performClick();
  859.  
  860.                     ToastHelper(getApplicationContext(),getString(R.string.vpn_message));
  861.  
  862.  
  863.                 }else if (movieDetail.getVideos() !=null && !movieDetail.getVideos().isEmpty()) {
  864.  
  865.  
  866.                    if (movieDetail.getPremuim() == 1 && authManager.getUserInfo().getPremuim() == 1 && tokenManager.getToken() != null) {
  867.  
  868.                         onLoadStream(movieDetail);
  869.  
  870.                     } else  if (settingsManager.getSettings().getEnableWebview() == 1) {
  871.  
  872.  
  873.                         final Dialog dialog = new Dialog(this);
  874.                         dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
  875.                         dialog.setContentView(R.layout.episode_webview);
  876.                         dialog.setCancelable(false);
  877.                         dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
  878.  
  879.                         WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
  880.                         lp.copyFrom(dialog.getWindow().getAttributes());
  881.  
  882.                         lp.gravity = Gravity.BOTTOM;
  883.                         lp.width = MATCH_PARENT;
  884.                         lp.height = MATCH_PARENT;
  885.  
  886.  
  887.                         mCountDownTimer = new CountDownTimer(DEFAULT_WEBVIEW_ADS_RUNNING, 1000) {
  888.                             @SuppressLint({"SetTextI18n", "SetJavaScriptEnabled"})
  889.                             @Override
  890.                             public void onTick(long millisUntilFinished) {
  891.  
  892.                                 if (!webViewLauched) {
  893.  
  894.                                     WebView webView = dialog.findViewById(R.id.webViewVideoBeforeAds);
  895.                                     webView.getSettings().setJavaScriptEnabled(true);
  896.                                     webView.setWebViewClient(new WebViewClient());
  897.                                     WebSettings webSettings = webView.getSettings();
  898.                                     webSettings.setSupportMultipleWindows(false);
  899.                                     webSettings.setJavaScriptCanOpenWindowsAutomatically(false);
  900.  
  901.                                     if (settingsManager.getSettings().getWebviewLink() !=null && !settingsManager.getSettings().getWebviewLink().isEmpty()) {
  902.  
  903.                                         webView.loadUrl(settingsManager.getSettings().getWebviewLink());
  904.  
  905.                                     }else {
  906.  
  907.                                         webView.loadUrl(SERVER_BASE_URL+"webview");
  908.                                     }
  909.  
  910.                                     webViewLauched = true;
  911.                                 }
  912.  
  913.                             }
  914.  
  915.                             @Override
  916.                             public void onFinish() {
  917.  
  918.                                 dialog.dismiss();
  919.                                 onLoadStream(movieDetail);
  920.                                 webViewLauched = false;
  921.                                 if (mCountDownTimer != null) {
  922.                                     mCountDownTimer.cancel();
  923.                                     mCountDownTimer = null;
  924.                                 }
  925.                             }
  926.  
  927.                         }.start();
  928.  
  929.                         dialog.show();
  930.                         dialog.getWindow().setAttributes(lp);
  931.  
  932.  
  933.                     } else if (movieDetail.getEnableAdsUnlock() ==1){
  934.  
  935.  
  936.                        onLoadSubscribeDialog(movieDetail,true);
  937.  
  938.  
  939.                    } else   if (settingsManager.getSettings().getWachAdsToUnlock() == 1 && movieDetail.getPremuim() != 1 && authManager.getUserInfo().getPremuim() == 0) {
  940.  
  941.                         onLoadSubscribeDialog(movieDetail,true);
  942.  
  943.                     } else if (settingsManager.getSettings().getWachAdsToUnlock() == 0 && movieDetail.getPremuim() == 0) {
  944.  
  945.  
  946.                         onLoadStream(movieDetail);
  947.  
  948.  
  949.                     } else if (authManager.getUserInfo().getPremuim() == 1 && movieDetail.getPremuim() == 0) {
  950.  
  951.  
  952.                         onLoadStream(movieDetail);
  953.  
  954.                     } else {
  955.  
  956.                         DialogHelper.showPremuimWarning(this);
  957.  
  958.                     }
  959.  
  960.                 }else {
  961.  
  962.                     DialogHelper.showNoStreamAvailable(this);
  963.  
  964.                 }
  965.  
  966.  
  967.             });
  968.  
  969.  
  970.             mMovie = true;
  971.             checkAllDataLoaded();
  972.  
  973.  
  974.         });
  975.  
  976.     }
  977.  
  978.     private void onLoadUsersReviews(float voteAverage) {
  979.         binding.userReview.setText(String.valueOf(voteAverage));
  980.     }
  981.  
  982.     private void onSentReview(Media movieDetail) {
  983.  
  984.  
  985.         if (tokenManager.getToken().getAccessToken() == null) {
  986.  
  987.             Toast.makeText(this, getText(R.string.review_require_login), Toast.LENGTH_SHORT).show();
  988.             return;
  989.         }
  990.  
  991.         final Dialog dialog = new Dialog(this);
  992.         dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
  993.         dialog.setContentView(R.layout.dialog_review);
  994.         dialog.setCancelable(true);
  995.         dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
  996.  
  997.         WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
  998.         lp.copyFrom(dialog.getWindow().getAttributes());
  999.  
  1000.         lp.gravity = Gravity.BOTTOM;
  1001.         lp.width = MATCH_PARENT;
  1002.         lp.height = MATCH_PARENT;
  1003.  
  1004.  
  1005.         TextView reviewMovieName = dialog.findViewById(R.id.movietitle);
  1006.  
  1007.  
  1008.         TextView userRating = dialog.findViewById(R.id.userRating);
  1009.  
  1010.  
  1011.         BubbleSeekBar storySeekbar = dialog.findViewById(R.id.storySeekbar);
  1012.  
  1013.         BubbleSeekBar caractersSeekbar = dialog.findViewById(R.id.caractersSeekbar);
  1014.  
  1015.         BubbleSeekBar mottionsdesginSeekbar = dialog.findViewById(R.id.mottionsdesginSeekbar);
  1016.  
  1017.         BubbleSeekBar musicSeekbar = dialog.findViewById(R.id.musicSeekbar);
  1018.  
  1019.         mottionsdesginSeekbar.setVisibility(GONE);
  1020.  
  1021.         reviewMovieName.setText(movieDetail.getTitle());
  1022.  
  1023.  
  1024.  
  1025.         storySeekbar.setOnProgressChangedListener(new BubbleSeekBar.OnProgressChangedListener() {
  1026.             @Override
  1027.             public void onProgressChanged(BubbleSeekBar bubbleSeekBar, int progress, float progressFloat, boolean fromUser) {
  1028.  
  1029.                 userRating.setText(Integer.toString((int) getAvg(storySeekbar.getProgressFloat(),
  1030.                         caractersSeekbar.getProgressFloat()
  1031.                         ,mottionsdesginSeekbar.getProgressFloat()
  1032.                         ,musicSeekbar.getProgressFloat(),true)));
  1033.  
  1034.  
  1035.  
  1036.             }
  1037.  
  1038.             @Override
  1039.             public void getProgressOnActionUp(BubbleSeekBar bubbleSeekBar, int progress, float progressFloat) {
  1040.  
  1041.                 //
  1042.  
  1043.             }
  1044.  
  1045.             @Override
  1046.             public void getProgressOnFinally(BubbleSeekBar bubbleSeekBar, int progress, float progressFloat, boolean fromUser) {
  1047.  
  1048.                 //
  1049.             }
  1050.         });
  1051.  
  1052.  
  1053.         caractersSeekbar.setOnProgressChangedListener(new BubbleSeekBar.OnProgressChangedListener() {
  1054.             @Override
  1055.             public void onProgressChanged(BubbleSeekBar bubbleSeekBar, int progress, float progressFloat, boolean fromUser) {
  1056.  
  1057.                 userRating.setText(Integer.toString((int) getAvg(storySeekbar.getProgressFloat(),
  1058.                         caractersSeekbar.getProgressFloat()
  1059.                         ,mottionsdesginSeekbar.getProgressFloat()
  1060.                         ,musicSeekbar.getProgressFloat(),true)));
  1061.  
  1062.             }
  1063.  
  1064.             @Override
  1065.             public void getProgressOnActionUp(BubbleSeekBar bubbleSeekBar, int progress, float progressFloat) {
  1066.                 //
  1067.             }
  1068.  
  1069.             @Override
  1070.             public void getProgressOnFinally(BubbleSeekBar bubbleSeekBar, int progress, float progressFloat, boolean fromUser) {
  1071.                 //
  1072.             }
  1073.         });
  1074.  
  1075.  
  1076.         mottionsdesginSeekbar.setOnProgressChangedListener(new BubbleSeekBar.OnProgressChangedListener() {
  1077.             @Override
  1078.             public void onProgressChanged(BubbleSeekBar bubbleSeekBar, int progress, float progressFloat, boolean fromUser) {
  1079.  
  1080.                 userRating.setText(Integer.toString((int) getAvg(storySeekbar.getProgressFloat(),
  1081.                         caractersSeekbar.getProgressFloat()
  1082.                         ,mottionsdesginSeekbar.getProgressFloat()
  1083.                         ,musicSeekbar.getProgressFloat(),true)));
  1084.  
  1085.             }
  1086.  
  1087.             @Override
  1088.             public void getProgressOnActionUp(BubbleSeekBar bubbleSeekBar, int progress, float progressFloat) {
  1089.                 //
  1090.             }
  1091.  
  1092.             @Override
  1093.             public void getProgressOnFinally(BubbleSeekBar bubbleSeekBar, int progress, float progressFloat, boolean fromUser) {
  1094.                 //
  1095.             }
  1096.         });
  1097.  
  1098.  
  1099.         musicSeekbar.setOnProgressChangedListener(new BubbleSeekBar.OnProgressChangedListener() {
  1100.             @Override
  1101.             public void onProgressChanged(BubbleSeekBar bubbleSeekBar, int progress, float progressFloat, boolean fromUser) {
  1102.  
  1103.                 userRating.setText(Integer.toString((int) getAvg(storySeekbar.getProgressFloat(),
  1104.                         caractersSeekbar.getProgressFloat()
  1105.                         ,mottionsdesginSeekbar.getProgressFloat()
  1106.                         ,musicSeekbar.getProgressFloat(),true)));
  1107.  
  1108.             }
  1109.  
  1110.             @Override
  1111.             public void getProgressOnActionUp(BubbleSeekBar bubbleSeekBar, int progress, float progressFloat) {
  1112.                 //
  1113.             }
  1114.  
  1115.             @Override
  1116.             public void getProgressOnFinally(BubbleSeekBar bubbleSeekBar, int progress, float progressFloat, boolean fromUser) {
  1117.                 //
  1118.             }
  1119.         });
  1120.  
  1121.  
  1122.         Button sendReport = dialog.findViewById(R.id.view_report);
  1123.  
  1124.         dialog.findViewById(R.id.bt_close).setOnClickListener(v -> dialog.dismiss());
  1125.  
  1126.  
  1127.         sendReport.setOnClickListener(v -> {
  1128.  
  1129.  
  1130.             if (movieDetail.getVoteAverage() !=0){
  1131.  
  1132.                 double newUserRating = Math.round(media.getVoteAverage() + getAvg(storySeekbar.getProgressFloat(),
  1133.                         caractersSeekbar.getProgressFloat()
  1134.                         ,mottionsdesginSeekbar.getProgressFloat()
  1135.                         ,musicSeekbar.getProgressFloat(),true)) /2;
  1136.  
  1137.  
  1138.                 if (tokenManager.getToken().getAccessToken() !=null) {
  1139.  
  1140.                     authRepository.addRating(media.getId(),newUserRating, "movie")
  1141.                             .subscribeOn(Schedulers.newThread())
  1142.                             .observeOn(AndroidSchedulers.mainThread())
  1143.                             .subscribe(new Observer<>() {
  1144.                                 @Override
  1145.                                 public void onSubscribe(@NotNull Disposable d) {
  1146.  
  1147.                                     //
  1148.  
  1149.                                 }
  1150.  
  1151.                                 @SuppressLint("NotifyDataSetChanged")
  1152.                                 @Override
  1153.                                 public void onNext(@NotNull Rating rating) {
  1154.  
  1155.                                     dialog.dismiss();
  1156.  
  1157.                                     Toast.makeText(MovieDetailsActivity.this, R.string.review_sent, Toast.LENGTH_SHORT).show();
  1158.  
  1159.                                     movieDetailViewModel.getMovieDetails(movieDetail.getId());
  1160.                                     initMovieDetails();
  1161.                                 }
  1162.  
  1163.                                 @Override
  1164.                                 public void onError(@NotNull Throwable e) {
  1165.  
  1166.                                     Toast.makeText(MovieDetailsActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
  1167.                                 }
  1168.  
  1169.                                 @Override
  1170.                                 public void onComplete() {
  1171.  
  1172.                                     //
  1173.  
  1174.                                 }
  1175.                             });
  1176.  
  1177.                 }else {
  1178.  
  1179.                     ToastHelper(MovieDetailsActivity.this,getString(R.string.review_require_login));
  1180.                 }
  1181.  
  1182.             }  else {
  1183.  
  1184.                 double newUserRating = Math.round(getAvg(storySeekbar.getProgressFloat(),
  1185.                         caractersSeekbar.getProgressFloat()
  1186.                         ,mottionsdesginSeekbar.getProgressFloat()
  1187.                         ,musicSeekbar.getProgressFloat(),true)) /2;
  1188.  
  1189.  
  1190.                 if (tokenManager.getToken().getAccessToken() !=null) {
  1191.  
  1192.                     authRepository.addRating(movieDetail.getId(),newUserRating, "movie")
  1193.                             .subscribeOn(Schedulers.newThread())
  1194.                             .observeOn(AndroidSchedulers.mainThread())
  1195.                             .subscribe(new Observer<>() {
  1196.                                 @Override
  1197.                                 public void onSubscribe(@NotNull Disposable d) {
  1198.  
  1199.                                     //
  1200.  
  1201.                                 }
  1202.  
  1203.                                 @SuppressLint("NotifyDataSetChanged")
  1204.                                 @Override
  1205.                                 public void onNext(@NotNull Rating rating) {
  1206.  
  1207.                                     dialog.dismiss();
  1208.  
  1209.                                     Toast.makeText(MovieDetailsActivity.this, R.string.rating_sent, Toast.LENGTH_SHORT).show();
  1210.  
  1211.                                     movieDetailViewModel.getMovieDetails(movieDetail.getId());
  1212.                                     initMovieDetails();
  1213.                                 }
  1214.  
  1215.                                 @Override
  1216.                                 public void onError(@NotNull Throwable e) {
  1217.  
  1218.                                     Toast.makeText(MovieDetailsActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
  1219.                                 }
  1220.  
  1221.                                 @Override
  1222.                                 public void onComplete() {
  1223.  
  1224.                                     //
  1225.  
  1226.                                 }
  1227.                             });
  1228.  
  1229.                 }else {
  1230.  
  1231.                     ToastHelper(MovieDetailsActivity.this,getString(R.string.review_require_login));
  1232.                 }
  1233.             }
  1234.  
  1235.  
  1236.  
  1237.  
  1238.         });
  1239.  
  1240.         dialog.show();
  1241.         dialog.getWindow().setAttributes(lp);
  1242.  
  1243.         dialog.findViewById(R.id.bt_close).setOnClickListener(y -> dialog.dismiss());
  1244.  
  1245.         dialog.show();
  1246.         dialog.getWindow().setAttributes(lp);
  1247.  
  1248.     }
  1249.  
  1250.  
  1251.     private void checkMediaFavorite(Media movieDetail) {
  1252.  
  1253.         if (settingsManager.getSettings().getFavoriteonline() == 1 && tokenManager.getToken().getAccessToken() !=null) {
  1254.  
  1255.             loginViewModel.isMovieFavoriteOnline(movieDetail.getId());
  1256.             loginViewModel.isMovieFavoriteOnlineMutableLiveData.observe(this, favAddOnline -> {
  1257.  
  1258.                 if (favAddOnline.getStatus() == 1) {
  1259.  
  1260.                     isMovieFav = true;
  1261.  
  1262.                     binding.favoriteImage.setImageResource(R.drawable.ic_in_favorite);
  1263.  
  1264.                 } else {
  1265.  
  1266.                     isMovieFav = false;
  1267.  
  1268.                     binding.favoriteImage.setImageResource(R.drawable.add_from_queue);
  1269.  
  1270.                 }});
  1271.  
  1272.         }else {
  1273.  
  1274.             if (mediaRepository.isMovieFavorite(Integer.parseInt(movieDetail.getId()))) {
  1275.  
  1276.  
  1277.                 binding.favoriteImage.setImageResource(R.drawable.ic_in_favorite);
  1278.  
  1279.             } else {
  1280.  
  1281.                 binding.favoriteImage.setImageResource(R.drawable.add_from_queue);
  1282.             }
  1283.         }
  1284.     }
  1285.  
  1286.     @SuppressLint("SetTextI18n")
  1287.     private void onLoadViews(String views) {
  1288.  
  1289.         binding.viewMovieViews.setText(getString(R.string.views)+ getViewFormat(Integer.parseInt(views)));
  1290.  
  1291.     }
  1292.  
  1293.  
  1294.  
  1295.     @Override
  1296.     protected void onResume() {
  1297.  
  1298.         onCheckFlagSecure(settingsManager.getSettings().getFlagSecure(),this);
  1299.  
  1300.         if (GoogleServicesHelper.available(this)) {
  1301.             mCastContext.addCastStateListener(mCastStateListener);
  1302.             mCastContext.getSessionManager().addSessionManagerListener(
  1303.                     mSessionManagerListener, CastSession.class);
  1304.             if (mCastSession == null) {
  1305.                 mCastSession = Objects.requireNonNull(CastContext.getSharedInstance()).getSessionManager()
  1306.                         .getCurrentCastSession();
  1307.             }
  1308.         }
  1309.  
  1310.         if (mQueueMenuItem != null) {
  1311.             mQueueMenuItem.setVisible(
  1312.                     (mCastSession != null) && mCastSession.isConnected());
  1313.         }
  1314.  
  1315.  
  1316.         if (settingsManager.getSettings().getVpn() ==1 && checkVpn){
  1317.  
  1318.             binding.backbutton.performClick();
  1319.  
  1320.             ToastHelper(getApplicationContext(),getString(R.string.vpn_message));
  1321.  
  1322.         }
  1323.  
  1324.         if (provideSnifferCheck != null) {
  1325.             ToastHelper(getApplicationContext(),getString(R.string.sniffer_message));
  1326.  
  1327.             finishAffinity();
  1328.         }
  1329.  
  1330.         if (settingsManager.getSettings().getRootDetection() == 1 &&  provideRootCheck != null) {
  1331.             ToastHelper(getApplicationContext(),getString(R.string.root_warning));
  1332.  
  1333.             finishAffinity();
  1334.         }
  1335.  
  1336.  
  1337.         if (appLinkData !=null) {
  1338.  
  1339.             onLoadPogressResume(appLinkData.getLastPathSegment());
  1340.  
  1341.         }else {
  1342.  
  1343.             onLoadPogressResume(media.getId());
  1344.         }
  1345.  
  1346.         super.onResume();
  1347.         IronSource.onResume(this);
  1348.     }
  1349.  
  1350.  
  1351.     @Override
  1352.     protected void onPause() {
  1353.  
  1354.         if (GoogleServicesHelper.available(this)) {
  1355.  
  1356.             mCastContext.removeCastStateListener(mCastStateListener);
  1357.             mCastContext.getSessionManager().removeSessionManagerListener(
  1358.                     mSessionManagerListener, CastSession.class);
  1359.         }
  1360.  
  1361.         super.onPause();
  1362.         IronSource.onPause(this);
  1363.     }
  1364.  
  1365.     @Override
  1366.     public boolean onCreateOptionsMenu(@NonNull Menu menu) {
  1367.         super.onCreateOptionsMenu(menu);
  1368.  
  1369.  
  1370.         getMenuInflater().inflate(R.menu.menu, menu);
  1371.         mediaRouteMenuItem = CastButtonFactory.setUpMediaRouteButton(this, menu,
  1372.                 R.id.media_route_menu_item);
  1373.         mQueueMenuItem = menu.findItem(R.id.action_show_queue);
  1374.         showIntroductoryOverlay();
  1375.         return true;
  1376.     }
  1377.  
  1378.     @Override
  1379.     public boolean onPrepareOptionsMenu(Menu menu) {
  1380.         menu.findItem(R.id.action_show_queue).setVisible(
  1381.                 (mCastSession != null) && mCastSession.isConnected());
  1382.         menu.findItem(R.id.action_settings).setVisible(
  1383.                 (mCastSession != null) && mCastSession.isConnected());
  1384.         return super.onPrepareOptionsMenu(menu);
  1385.     }
  1386.  
  1387.     @Override
  1388.     public boolean onOptionsItemSelected(MenuItem item) {
  1389.         Intent intent;
  1390.         if (item.getItemId() == R.id.action_settings) {
  1391.             intent = new Intent(MovieDetailsActivity.this, CastPreference.class);
  1392.             startActivity(intent);
  1393.         } else if (item.getItemId() == R.id.action_show_queue) {
  1394.             intent = new Intent(MovieDetailsActivity.this, QueueListViewActivity.class);
  1395.             startActivity(intent);
  1396.         }
  1397.         return true;
  1398.     }
  1399.  
  1400.     @Override
  1401.     public boolean dispatchKeyEvent(@NonNull KeyEvent event) {
  1402.  
  1403.         if (mCastContext !=null) {
  1404.             return mCastContext.onDispatchVolumeKeyEventBeforeJellyBean(event)
  1405.                     || super.dispatchKeyEvent(event);
  1406.         }else {
  1407.  
  1408.             return false;
  1409.         }
  1410.     }
  1411.  
  1412.  
  1413.  
  1414.     private void loadRewardedAd() {
  1415.  
  1416.         if (rewardedAd == null) {
  1417.             isLoading = true;
  1418.             AdRequest adRequest = new AdRequest.Builder().build();
  1419.             RewardedAd.load(
  1420.                     this,
  1421.                     settingsManager.getSettings().getAdUnitIdRewarded(),
  1422.                     adRequest,
  1423.                     new RewardedAdLoadCallback() {
  1424.                         @Override
  1425.                         public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
  1426.  
  1427.                             rewardedAd = null;
  1428.  
  1429.                             MovieDetailsActivity.this.isLoading = false;
  1430.  
  1431.                         }
  1432.  
  1433.                         @Override
  1434.                         public void onAdLoaded(@NonNull RewardedAd rewardedAd) {
  1435.  
  1436.                             MovieDetailsActivity.this.isLoading = false;
  1437.                             MovieDetailsActivity.this.rewardedAd = rewardedAd;
  1438.                         }
  1439.                     });
  1440.         }
  1441.  
  1442.     }
  1443.  
  1444.  
  1445.     @SuppressLint("SetTextI18n")
  1446.     private void onLoadPogressResume(String tmdbId) {
  1447.  
  1448.         binding.resumeProgressCheck.setVisibility(View.VISIBLE);
  1449.  
  1450.         if (settingsManager.getSettings().getResumeOffline() == 1) {
  1451.  
  1452.             mediaRepository.hasResume(Integer.parseInt(tmdbId)).observe(this, resumeInfo -> {
  1453.  
  1454.                 if (resumeInfo !=null){
  1455.  
  1456.                     binding.resumeProgressCheck.setVisibility(GONE);
  1457.  
  1458.                     if (resumeInfo.getResumePosition() !=null &&
  1459.  
  1460.                             authManager.getUserInfo().getId() !=null && authManager.getUserInfo().getId() == resumeInfo.getUserResumeId() && resumeInfo.getDeviceId().equals(id(this))) {
  1461.  
  1462.  
  1463.                         double d = resumeInfo.getResumePosition();
  1464.  
  1465.                         double moveProgress = d * 100 / resumeInfo.getMovieDuration();
  1466.  
  1467.                         binding.epResumeTitle.setText(media.getTitle());
  1468.  
  1469.                         binding.timeRemaning.setText(getProgressTime((resumeInfo.getMovieDuration() - resumeInfo.getResumePosition()), true));
  1470.  
  1471.                         binding.resumeProgressBar.setProgress((int) moveProgress);
  1472.  
  1473.                     }else {
  1474.  
  1475.                         binding.resumeProgressBar.setProgress(0);
  1476.                         binding.resumeProgressBar.setVisibility(GONE);
  1477.  
  1478.                     }
  1479.  
  1480.  
  1481.                     if (resumeInfo.getResumePosition() !=null && authManager.getUserInfo().getId() == resumeInfo.getUserResumeId()) {
  1482.  
  1483.  
  1484.                         binding.resumeProgressBar.setVisibility(View.VISIBLE);
  1485.                         binding.timeRemaning.setVisibility(View.VISIBLE);
  1486.                         binding.resumeLinear.setVisibility(View.VISIBLE);
  1487.  
  1488.                     }else {
  1489.  
  1490.                         binding.resumeProgressBar.setVisibility(GONE);
  1491.                         binding.timeRemaning.setVisibility(GONE);
  1492.                         binding.resumeLinear.setVisibility(GONE);
  1493.                     }
  1494.  
  1495.                 }else {
  1496.  
  1497.  
  1498.                     binding.resumeProgressBar.setVisibility(GONE);
  1499.                     binding.timeRemaning.setVisibility(GONE);
  1500.                     binding.resumeLinear.setVisibility(GONE);
  1501.                     binding.resumeProgressCheck.setVisibility(GONE);
  1502.                 }
  1503.  
  1504.             });
  1505.  
  1506.  
  1507.         }else {
  1508.  
  1509.  
  1510.             binding.resumeProgressCheck.setVisibility(View.VISIBLE);
  1511.             movieDetailViewModel.getResumeMovie(tmdbId);
  1512.             movieDetailViewModel.resumeMutableLiveData.observe(this, resume -> {
  1513.  
  1514.  
  1515.                 if (resume !=null  && resume.getResumePosition() !=null &&
  1516.  
  1517.                         authManager.getUserInfo().getId() !=null && authManager.getUserInfo().getId() == resume.getUserResumeId() && resume.getDeviceId().equals(id(this))) {
  1518.  
  1519.                     binding.resumeProgressCheck.setVisibility(GONE);
  1520.                     double d = resume.getResumePosition();
  1521.                     double moveProgress = d * 100 / resume.getMovieDuration();
  1522.                     binding.epResumeTitle.setText(media.getTitle());
  1523.  
  1524.                     binding.timeRemaning.setText(getProgressTime((resume.getMovieDuration() - resume.getResumePosition()), true));
  1525.                     binding.resumeProgressBar.setProgress((int) moveProgress);
  1526.  
  1527.                 }else {
  1528.  
  1529.                     binding.resumeProgressBar.setProgress(0);
  1530.                     binding.resumeProgressBar.setVisibility(GONE);
  1531.                     binding.resumeProgressCheck.setVisibility(GONE);
  1532.  
  1533.                 }
  1534.  
  1535.  
  1536.                 assert resume != null;
  1537.                 if (resume.getResumePosition() !=null && authManager.getUserInfo().getId() == resume.getUserResumeId()) {
  1538.  
  1539.  
  1540.                     binding.resumeProgressBar.setVisibility(View.VISIBLE);
  1541.                     binding.timeRemaning.setVisibility(View.VISIBLE);
  1542.                     binding.resumeLinear.setVisibility(View.VISIBLE);
  1543.  
  1544.                 }else {
  1545.  
  1546.                     binding.resumeProgressBar.setVisibility(GONE);
  1547.                     binding.timeRemaning.setVisibility(GONE);
  1548.                     binding.resumeLinear.setVisibility(GONE);
  1549.                 }
  1550.  
  1551.             });
  1552.  
  1553.  
  1554.  
  1555.         }
  1556.  
  1557.  
  1558.  
  1559.  
  1560.     }
  1561.  
  1562.  
  1563.     private void onLoadToolbar() {
  1564.  
  1565.         loadToolbar(this,binding.toolbar,binding.appbar);
  1566.  
  1567.  
  1568.     }
  1569.  
  1570.     private void onDownloadMovie(Media media) {
  1571.  
  1572.  
  1573.         if (settingsManager.getSettings().getSeparateDownload() == 1) {
  1574.  
  1575.             if (media.getDownloads() !=null && !media.getDownloads().isEmpty()) {
  1576.  
  1577.                 String defaultDownloadsOptions = settingsManager.getSettings().getDefaultDownloadsOptions();
  1578.                 if ("Free".equals(defaultDownloadsOptions)) {
  1579.  
  1580.                     onLoadDownloadsList(media);
  1581.  
  1582.                 } else if ("PremuimOnly".equals(defaultDownloadsOptions)) {
  1583.  
  1584.                     if (media.getPremuim() == 1 && authManager.getUserInfo().getPremuim() == 1 && tokenManager.getToken() != null) {
  1585.  
  1586.                         onLoadDownloadsList(media);
  1587.  
  1588.                     } else if (media.getPremuim() == 0 && authManager.getUserInfo().getPremuim() == 1 && tokenManager.getToken() != null) {
  1589.  
  1590.                         onLoadDownloadsList(media);
  1591.  
  1592.                     }  else   {
  1593.  
  1594.                         DialogHelper.showPremuimWarning(this);
  1595.                     }
  1596.                 } else if ("WithAdsUnlock".equals(defaultDownloadsOptions)) {
  1597.  
  1598.                     if (media.getPremuim() == 1 && authManager.getUserInfo().getPremuim() == 1 && tokenManager.getToken() != null) {
  1599.  
  1600.                         onLoadDownloadsList(media);
  1601.  
  1602.                     } else if (media.getPremuim() == 0 && authManager.getUserInfo().getPremuim() == 1 && tokenManager.getToken() != null) {
  1603.  
  1604.                         onLoadDownloadsList(media);
  1605.  
  1606.                     }else if (settingsManager.getSettings().getEnableWebview() == 1) {
  1607.  
  1608.  
  1609.                         final Dialog dialog = new Dialog(this);
  1610.                         dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
  1611.                         dialog.setContentView(R.layout.episode_webview);
  1612.                         dialog.setCancelable(false);
  1613.                         dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
  1614.  
  1615.                         WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
  1616.                         lp.copyFrom(dialog.getWindow().getAttributes());
  1617.  
  1618.                         lp.gravity = Gravity.BOTTOM;
  1619.                         lp.width = MATCH_PARENT;
  1620.                         lp.height = MATCH_PARENT;
  1621.  
  1622.  
  1623.                         mCountDownTimer = new CountDownTimer(DEFAULT_WEBVIEW_ADS_RUNNING, 1000) {
  1624.                             @SuppressLint({"SetTextI18n", "SetJavaScriptEnabled"})
  1625.                             @Override
  1626.                             public void onTick(long millisUntilFinished) {
  1627.  
  1628.                                 if (!webViewLauched) {
  1629.  
  1630.                                     WebView webView = dialog.findViewById(R.id.webViewVideoBeforeAds);
  1631.                                     webView.getSettings().setJavaScriptEnabled(true);
  1632.                                     webView.setWebViewClient(new WebViewClient());
  1633.                                     WebSettings webSettings = webView.getSettings();
  1634.                                     webSettings.setJavaScriptEnabled(true);
  1635.                                     webSettings.setSupportMultipleWindows(false);
  1636.                                     webSettings.setJavaScriptCanOpenWindowsAutomatically(false);
  1637.                                     if (settingsManager.getSettings().getWebviewLink() != null && !settingsManager.getSettings().getWebviewLink().isEmpty()) {
  1638.  
  1639.                                         webView.loadUrl(settingsManager.getSettings().getWebviewLink());
  1640.                                     } else {
  1641.  
  1642.                                         webView.loadUrl(SERVER_BASE_URL + WEBVIEW);
  1643.                                     }
  1644.  
  1645.                                     webViewLauched = true;
  1646.                                 }
  1647.  
  1648.                             }
  1649.  
  1650.                             @Override
  1651.                             public void onFinish() {
  1652.  
  1653.                                 dialog.dismiss();
  1654.                                 onLoadDownloadsList(media);
  1655.                                 webViewLauched = false;
  1656.  
  1657.                                 if (mCountDownTimer != null) {
  1658.  
  1659.                                     mCountDownTimer.cancel();
  1660.                                     mCountDownTimer = null;
  1661.  
  1662.                                 }
  1663.                             }
  1664.  
  1665.                         }.start();
  1666.  
  1667.  
  1668.                         dialog.show();
  1669.                         dialog.getWindow().setAttributes(lp);
  1670.  
  1671.  
  1672.                     }else {
  1673.                         onLoadSubscribeDialog(media,false); }
  1674.  
  1675.                 }
  1676.  
  1677.             }else {
  1678.  
  1679.  
  1680.                 DialogHelper.showNoDownloadAvailable(this,getString(R.string.about_no_stream_download));
  1681.  
  1682.             }
  1683.  
  1684.  
  1685.         }else {
  1686.  
  1687.             if (media.getVideos() !=null && !media.getVideos().isEmpty()) {
  1688.  
  1689.                 String defaultDownloadsOptions = settingsManager.getSettings().getDefaultDownloadsOptions();
  1690.                 if ("Free".equals(defaultDownloadsOptions)) {
  1691.                     onLoadDownloadsList(media);
  1692.                 } else if ("PremuimOnly".equals(defaultDownloadsOptions)) {
  1693.                     if (media.getPremuim() == 1 && authManager.getUserInfo().getPremuim() == 1 && tokenManager.getToken() != null) {
  1694.  
  1695.                         onLoadDownloadsList(media);
  1696.  
  1697.                     } else if (media.getPremuim() == 0 && authManager.getUserInfo().getPremuim() == 1 && tokenManager.getToken() != null) {
  1698.  
  1699.                         onLoadDownloadsList(media);
  1700.  
  1701.                     }  else   {
  1702.  
  1703.                         DialogHelper.showPremuimWarning(this);
  1704.                     }
  1705.                 } else if ("WithAdsUnlock".equals(defaultDownloadsOptions)) {
  1706.  
  1707.                     if (media.getPremuim() == 1 && authManager.getUserInfo().getPremuim() == 1 && tokenManager.getToken() != null) {
  1708.  
  1709.                         onLoadDownloadsList(media);
  1710.  
  1711.                     } else if (media.getPremuim() == 0 && authManager.getUserInfo().getPremuim() == 1 && tokenManager.getToken() != null) {
  1712.  
  1713.                         onLoadDownloadsList(media);
  1714.  
  1715.                     } else {
  1716.  
  1717.                         onLoadSubscribeDialog(media,false);
  1718.  
  1719.                     }
  1720.                 }
  1721.  
  1722.             }else {
  1723.  
  1724.                 DialogHelper.showNoDownloadAvailable(this,getString(R.string.about_no_stream_download));
  1725.  
  1726.             }
  1727.         }
  1728.  
  1729.     }
  1730.  
  1731.  
  1732.  
  1733.  
  1734.     private void onLoadDownloadsList(Media media) {
  1735.  
  1736.         final Dialog dialog = new Dialog(this);
  1737.         dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
  1738.         dialog.setContentView(R.layout.dialog_downloads_list);
  1739.         dialog.setCancelable(false);
  1740.         dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
  1741.  
  1742.         WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
  1743.         lp.copyFrom(dialog.getWindow().getAttributes());
  1744.  
  1745.         lp.gravity = Gravity.BOTTOM;
  1746.         lp.width = MATCH_PARENT;
  1747.         lp.height = MATCH_PARENT;
  1748.  
  1749.         RecyclerView recyclerView = dialog.findViewById(R.id.rv_servers);
  1750.         TextView movieNameDetails = dialog.findViewById(R.id.movietitle);
  1751.  
  1752.         history  = new History(media.getId(),media.getId(),media.getPosterPath(),media.getTitle(),media.getBackdropPath(),null);
  1753.  
  1754.         DownloadsListAdapter downloadsListAdapter = new DownloadsListAdapter();
  1755.  
  1756.         movieNameDetails.setText(media.getTitle());
  1757.  
  1758.  
  1759.         if (settingsManager.getSettings().getSeparateDownload() == 1) {
  1760.  
  1761.  
  1762.             downloadsListAdapter.addToContent(media.getDownloads(),download,this,media,mediaRepository,settingsManager);
  1763.  
  1764.  
  1765.         }else {
  1766.  
  1767.             downloadsListAdapter.addToContent(media.getVideos(),download,this,media,mediaRepository,settingsManager);
  1768.  
  1769.         }
  1770.  
  1771.  
  1772.         recyclerView.setLayoutManager(new GridLayoutManager(this, 1));
  1773.         recyclerView.addItemDecoration(new SpacingItemDecoration(3, dpToPx(this, 0), true));
  1774.         recyclerView.setAdapter(downloadsListAdapter);
  1775.  
  1776.  
  1777.         dialog.show();
  1778.         dialog.getWindow().setAttributes(lp);
  1779.  
  1780.         dialog.findViewById(R.id.bt_close).setOnClickListener(x ->
  1781.  
  1782.                 dialog.dismiss());
  1783.  
  1784.  
  1785.         dialog.show();
  1786.         dialog.getWindow().setAttributes(lp);
  1787.     }
  1788.  
  1789.  
  1790.     private void onLoadSubscribeDialog(Media movieDetail, boolean stream) {
  1791.  
  1792.         final Dialog dialog = new Dialog(this);
  1793.         dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
  1794.         dialog.setContentView(R.layout.dialog_subscribe);
  1795.         dialog.setCancelable(false);
  1796.         dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
  1797.  
  1798.         WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
  1799.         lp.copyFrom(dialog.getWindow().getAttributes());
  1800.  
  1801.         lp.gravity = Gravity.BOTTOM;
  1802.         lp.width = MATCH_PARENT;
  1803.         lp.height = MATCH_PARENT;
  1804.  
  1805.  
  1806.         dialog.findViewById(R.id.text_view_go_pro).setOnClickListener(v -> {
  1807.  
  1808.             startActivity(new Intent(this, SettingsActivity.class));
  1809.  
  1810.             dialog.dismiss();
  1811.  
  1812.  
  1813.         });
  1814.  
  1815.         dialog.findViewById(R.id.view_watch_ads_to_play).setOnClickListener(v -> {
  1816.  
  1817.             String defaultRewardedNetworkAds = settingsManager.getSettings().getDefaultRewardedNetworkAds();
  1818.  
  1819.  
  1820.             if (getString(R.string.applovin).equals(defaultRewardedNetworkAds)) {
  1821.  
  1822.                 onLoadApplovinAds(movieDetail,stream);
  1823.  
  1824.             }else if (getString(R.string.vungle).equals(defaultRewardedNetworkAds)) {
  1825.  
  1826.                 onLoadVungleAds(movieDetail,stream);
  1827.  
  1828.             }else if (getString(R.string.ironsource).equals(defaultRewardedNetworkAds)) {
  1829.  
  1830.                 onLoadIronsourceAds(movieDetail,stream);
  1831.  
  1832.             }else if (getString(R.string.appnext).equals(defaultRewardedNetworkAds)) {
  1833.  
  1834.                 onLoadAppNextAds(movieDetail,stream);
  1835.  
  1836.             } else if (getString(R.string.unityads).equals(defaultRewardedNetworkAds)) {
  1837.  
  1838.                 onLoadUnityAds(movieDetail,stream);
  1839.  
  1840.  
  1841.             } else if (getString(R.string.admob).equals(defaultRewardedNetworkAds)) {
  1842.  
  1843.                 onLoadAdmobRewardAds(movieDetail,stream);
  1844.  
  1845.  
  1846.             }else if (getString(R.string.appodeal).equals(defaultRewardedNetworkAds)) {
  1847.  
  1848.                 onLoadAppOdealRewardAds(movieDetail,stream);
  1849.  
  1850.             } else if (getString(R.string.facebook).equals(defaultRewardedNetworkAds)) {
  1851.  
  1852.                 onLoadFaceBookRewardAds(movieDetail,stream);
  1853.             }
  1854.  
  1855.             dialog.dismiss();
  1856.  
  1857.         });
  1858.  
  1859.  
  1860.         dialog.findViewById(R.id.bt_close).setOnClickListener(v ->
  1861.  
  1862.                 dialog.dismiss());
  1863.  
  1864.  
  1865.         dialog.show();
  1866.         dialog.getWindow().setAttributes(lp);
  1867.  
  1868.  
  1869.     }
  1870.  
  1871.     private void onLoadApplovinAds(Media movieDetail, boolean stream) {
  1872.  
  1873.  
  1874.         if (maxRewardedAd.isReady()) {
  1875.  
  1876.             maxRewardedAd.showAd();
  1877.         }
  1878.  
  1879.         maxRewardedAd.setListener(new MaxRewardedAdListener() {
  1880.             @Override
  1881.             public void onAdLoaded(MaxAd ad) {
  1882.                 //
  1883.             }
  1884.  
  1885.             @Override
  1886.             public void onAdDisplayed(MaxAd ad) {
  1887.                 //
  1888.             }
  1889.  
  1890.             @Override
  1891.             public void onAdHidden(MaxAd ad) {
  1892.  
  1893.                 //
  1894.             }
  1895.  
  1896.             @Override
  1897.             public void onAdClicked(MaxAd ad) {
  1898.                 //
  1899.             }
  1900.  
  1901.             @Override
  1902.             public void onAdLoadFailed(String adUnitId, MaxError error) {
  1903.                 //
  1904.             }
  1905.  
  1906.             @Override
  1907.             public void onAdDisplayFailed(MaxAd ad, MaxError error) {
  1908.                 //
  1909.             }
  1910.  
  1911.             @Override
  1912.             public void onRewardedVideoStarted(MaxAd ad) {
  1913.                 //
  1914.             }
  1915.  
  1916.             @Override
  1917.             public void onRewardedVideoCompleted(MaxAd ad) {
  1918.  
  1919.  
  1920.                 if (stream) {
  1921.  
  1922.                     onLoadStream(movieDetail);
  1923.                 }else {
  1924.  
  1925.                     onLoadDownloadsList(movieDetail);
  1926.                 }
  1927.  
  1928.                 maxRewardedAd.loadAd();
  1929.  
  1930.             }
  1931.  
  1932.             @Override
  1933.             public void onUserRewarded(MaxAd ad, MaxReward reward) {
  1934.                 //
  1935.             }
  1936.         });
  1937.  
  1938.  
  1939.     }
  1940.  
  1941.  
  1942.     private void onLoadVungleAds(Media movieDetail, boolean stream) {
  1943.  
  1944.  
  1945.         Vungle.loadAd(settingsManager.getSettings().getVungleRewardPlacementName(), new LoadAdCallback() {
  1946.             @Override
  1947.             public void onAdLoad(String id) {
  1948.                 Vungle.playAd(settingsManager.getSettings().getVungleRewardPlacementName(), new AdConfig(), new PlayAdCallback() {
  1949.                     @Override
  1950.                     public void onAdStart(String placementReferenceID) {
  1951.                         //
  1952.                     }
  1953.  
  1954.                     @Override
  1955.                     public void onAdViewed(String placementReferenceID) {
  1956.                         //
  1957.                     }
  1958.  
  1959.  
  1960.  
  1961.                     @Override
  1962.                     public void onAdEnd(String id, boolean completed, boolean isCTAClicked) {
  1963.  
  1964.                         if (stream) {
  1965.  
  1966.                             onLoadStream(movieDetail);
  1967.                         }else {
  1968.  
  1969.                             onLoadDownloadsList(movieDetail);
  1970.                         }
  1971.  
  1972.  
  1973.  
  1974.  
  1975.                     }
  1976.  
  1977.                     @Override
  1978.                     public void onAdEnd(String placementReferenceID) {
  1979.                         //
  1980.                     }
  1981.  
  1982.                     @Override
  1983.                     public void onAdClick(String placementReferenceID) {
  1984.                         //
  1985.                     }
  1986.  
  1987.                     @Override
  1988.                     public void onAdRewarded(String placementReferenceID) {
  1989.                         //
  1990.                     }
  1991.  
  1992.                     @Override
  1993.                     public void onAdLeftApplication(String placementReferenceID) {
  1994.                         //
  1995.                     }
  1996.  
  1997.                     @Override
  1998.                     public void creativeId(String creativeId) {
  1999.                         //
  2000.                     }
  2001.  
  2002.                     @Override
  2003.                     public void onError(String id, VungleException e) {
  2004.  
  2005.                         //
  2006.                     }
  2007.                 });
  2008.             }
  2009.  
  2010.             @Override
  2011.             public void onError(String id, VungleException e) {
  2012.  
  2013.                 //
  2014.             }
  2015.         });
  2016.  
  2017.  
  2018.  
  2019.     }
  2020.  
  2021.     private void onLoadAppNextAds(Media movieDetail, boolean stream) {
  2022.  
  2023.  
  2024.         mAppNextAdsVideoRewarded.showAd();
  2025.  
  2026.         // Get callback for ad loaded
  2027.         mAppNextAdsVideoRewarded.setOnAdLoadedCallback((s, appnextAdCreativeType) -> {
  2028.             //
  2029.         });
  2030.  
  2031.         mAppNextAdsVideoRewarded.setOnAdOpenedCallback(() -> {
  2032.             //
  2033.         });
  2034.         mAppNextAdsVideoRewarded.setOnAdClickedCallback(() -> {
  2035.  
  2036.         });
  2037.  
  2038.         mAppNextAdsVideoRewarded.setOnAdClosedCallback(() -> {
  2039.             if (stream) {
  2040.  
  2041.                 onLoadStream(movieDetail);
  2042.             }else {
  2043.  
  2044.                 onLoadDownloadsList(movieDetail);
  2045.             }
  2046.         });
  2047.  
  2048.         mAppNextAdsVideoRewarded.setOnAdErrorCallback(error -> ToastHelper(getApplicationContext(),error));
  2049.  
  2050.         // Get callback when the user saw the video until the end (video ended)
  2051.         mAppNextAdsVideoRewarded.setOnVideoEndedCallback(() -> {
  2052.  
  2053.  
  2054.         });
  2055.  
  2056.  
  2057.     }
  2058.  
  2059.     private void onLoadIronsourceAds(Media movieDetail, boolean stream) {
  2060.  
  2061.         IronSource.showRewardedVideo();
  2062.  
  2063.         IronSource.setLevelPlayRewardedVideoListener(new LevelPlayRewardedVideoListener() {
  2064.             @Override
  2065.             public void onAdAvailable(AdInfo adInfo) {
  2066.  
  2067.                 //
  2068.  
  2069.             }
  2070.  
  2071.             @Override
  2072.             public void onAdUnavailable() {
  2073.                 //
  2074.             }
  2075.  
  2076.             @Override
  2077.             public void onAdOpened(AdInfo adInfo) {
  2078.                 //
  2079.             }
  2080.  
  2081.             @Override
  2082.             public void onAdShowFailed(IronSourceError ironSourceError, AdInfo adInfo) {
  2083.                 //
  2084.             }
  2085.  
  2086.             @Override
  2087.             public void onAdClicked(Placement placement, AdInfo adInfo) {
  2088.                 //
  2089.             }
  2090.  
  2091.             @Override
  2092.             public void onAdRewarded(Placement placement, AdInfo adInfo) {
  2093.  
  2094.                 if (stream) {
  2095.  
  2096.                     onLoadStream(movieDetail);
  2097.                 }else {
  2098.  
  2099.                     onLoadDownloadsList(movieDetail);
  2100.                 }
  2101.  
  2102.                 IronSource.loadRewardedVideo();
  2103.             }
  2104.  
  2105.             @Override
  2106.             public void onAdClosed(AdInfo adInfo) {
  2107.  
  2108.                 //
  2109.             }
  2110.         });
  2111.  
  2112.     }
  2113.  
  2114.  
  2115.  
  2116.     private void onLoadFaceBookRewardAds(Media movieDetail, boolean stream) {
  2117.  
  2118.         com.facebook.ads.InterstitialAd facebookInterstitialAd = new com.facebook.ads.InterstitialAd(this,settingsManager.getSettings().getAdUnitIdFacebookInterstitialAudience());
  2119.  
  2120.         InterstitialAdListener interstitialAdListener = new InterstitialAdListener() {
  2121.  
  2122.             @Override
  2123.             public void onError(com.facebook.ads.Ad ad, AdError adError) {
  2124.  
  2125.                 //
  2126.  
  2127.             }
  2128.  
  2129.             @Override
  2130.             public void onAdLoaded(com.facebook.ads.Ad ad) {
  2131.  
  2132.                 facebookInterstitialAd.show();
  2133.  
  2134.             }
  2135.  
  2136.             @Override
  2137.             public void onAdClicked(com.facebook.ads.Ad ad) {
  2138.  
  2139.                 //
  2140.  
  2141.             }
  2142.  
  2143.             @Override
  2144.             public void onLoggingImpression(com.facebook.ads.Ad ad) {
  2145.  
  2146.  
  2147.                 //vvvvvv
  2148.             }
  2149.  
  2150.             @Override
  2151.             public void onInterstitialDisplayed(com.facebook.ads.Ad ad) {
  2152.  
  2153.                 //
  2154.  
  2155.             }
  2156.  
  2157.             @Override
  2158.             public void onInterstitialDismissed(com.facebook.ads.Ad ad) {
  2159.  
  2160.                 if (stream) {
  2161.  
  2162.                     onLoadStream(movieDetail);
  2163.                 }else {
  2164.  
  2165.                     onLoadDownloadsList(movieDetail);
  2166.                 }
  2167.  
  2168.             }
  2169.  
  2170.  
  2171.         };
  2172.  
  2173.  
  2174.         facebookInterstitialAd.loadAd(
  2175.                 facebookInterstitialAd.buildLoadAdConfig()
  2176.                         .withAdListener(interstitialAdListener)
  2177.                         .build());
  2178.  
  2179.     }
  2180.  
  2181.  
  2182.  
  2183.     private void onLoadAdmobRewardAds(Media movieDetail, boolean stream) {
  2184.  
  2185.         if (rewardedAd == null) {
  2186.             ToastHelper(getApplicationContext(),"The rewarded ad wasn't ready yet");
  2187.             return;
  2188.         }
  2189.         rewardedAd.setFullScreenContentCallback(
  2190.                 new FullScreenContentCallback() {
  2191.                     @Override
  2192.                     public void onAdShowedFullScreenContent() {
  2193.                         //
  2194.                     }
  2195.  
  2196.                     @Override
  2197.                     public void onAdFailedToShowFullScreenContent(@NonNull com.google.android.gms.ads.AdError adError) {
  2198.                         super.onAdFailedToShowFullScreenContent(adError);
  2199.                         rewardedAd = null;
  2200.                     }
  2201.  
  2202.                     @Override
  2203.                     public void onAdDismissedFullScreenContent() {
  2204.                         rewardedAd = null;
  2205.                         // Preload the next rewarded ad.
  2206.                         MovieDetailsActivity.this.loadRewardedAd();
  2207.                     }
  2208.                 });
  2209.         rewardedAd.show(
  2210.                 MovieDetailsActivity.this,
  2211.                 rewardItem -> {
  2212.                     if (stream) {
  2213.  
  2214.                         onLoadStream(movieDetail);
  2215.                     }else {
  2216.  
  2217.                         onLoadDownloadsList(movieDetail);
  2218.                     }
  2219.                 });
  2220.     }
  2221.  
  2222.  
  2223.  
  2224.     private void onLoadAppOdealRewardAds(Media movieDetail, boolean stream) {
  2225.  
  2226.         Appodeal.show(this, Appodeal.REWARDED_VIDEO);
  2227.  
  2228.         Appodeal.setRewardedVideoCallbacks(new RewardedVideoCallbacks() {
  2229.             @Override
  2230.             public void onRewardedVideoLoaded(boolean isPrecache) {
  2231.  
  2232.                 //
  2233.  
  2234.             }
  2235.  
  2236.             @Override
  2237.             public void onRewardedVideoFailedToLoad() {
  2238.  
  2239.                 //
  2240.  
  2241.  
  2242.             }
  2243.  
  2244.             @Override
  2245.             public void onRewardedVideoShown() {
  2246.  
  2247.  
  2248.                 //
  2249.  
  2250.  
  2251.             }
  2252.  
  2253.             @Override
  2254.             public void onRewardedVideoShowFailed() {
  2255.  
  2256.                 //
  2257.  
  2258.             }
  2259.  
  2260.             @Override
  2261.             public void onRewardedVideoClicked() {
  2262.                 //
  2263.  
  2264.  
  2265.             }
  2266.  
  2267.             @Override
  2268.             public void onRewardedVideoFinished(double amount, String name) {
  2269.  
  2270.                 if (stream) {
  2271.  
  2272.                     onLoadStream(movieDetail);
  2273.                 }else {
  2274.  
  2275.                     onLoadDownloadsList(movieDetail);
  2276.                 }
  2277.  
  2278.             }
  2279.  
  2280.             @Override
  2281.             public void onRewardedVideoClosed(boolean finished) {
  2282.  
  2283.                 //
  2284.  
  2285.             }
  2286.  
  2287.             @Override
  2288.             public void onRewardedVideoExpired() {
  2289.  
  2290.  
  2291.                 //
  2292.  
  2293.  
  2294.             }
  2295.  
  2296.         });
  2297.  
  2298.     }
  2299.  
  2300.     private void onLoadUnityAds(Media movieDetail, boolean stream) {
  2301.  
  2302.  
  2303.         UnityAds.load(settingsManager.getSettings().getUnityRewardPlacementId(), new IUnityAdsLoadListener() {
  2304.             @Override
  2305.             public void onUnityAdsAdLoaded(String placementId) {
  2306.  
  2307.                 UnityAds.show (MovieDetailsActivity.this, settingsManager.getSettings().getUnityRewardPlacementId(), new IUnityAdsShowListener() {
  2308.                     @Override
  2309.                     public void onUnityAdsShowFailure(String placementId, UnityAds.UnityAdsShowError error, String message) {
  2310.  
  2311.                         //
  2312.                     }
  2313.  
  2314.                     @Override
  2315.                     public void onUnityAdsShowStart(String placementId) {
  2316.  
  2317.                         //
  2318.                     }
  2319.  
  2320.                     @Override
  2321.                     public void onUnityAdsShowClick(String placementId) {
  2322.                         //
  2323.                     }
  2324.  
  2325.                     @Override
  2326.                     public void onUnityAdsShowComplete(String placementId, UnityAds.UnityAdsShowCompletionState state) {
  2327.  
  2328.                         if (stream) {
  2329.  
  2330.                             onLoadStream(movieDetail);
  2331.                         }else {
  2332.  
  2333.                             onLoadDownloadsList(movieDetail);
  2334.                         }
  2335.                     }
  2336.                 });
  2337.  
  2338.             }
  2339.  
  2340.             @Override
  2341.             public void onUnityAdsFailedToLoad(String placementId, UnityAds.UnityAdsLoadError error, String message) {
  2342.  
  2343.  
  2344.                 //
  2345.             }
  2346.         });
  2347.  
  2348.     }
  2349.  
  2350.  
  2351.     // Load the Movie Rating
  2352.     private void onLoadRating(float rating) {
  2353.  
  2354.         binding.ratingBar.setRating(rating / 2);
  2355.  
  2356.     }
  2357.  
  2358.     // Send report for this Movie
  2359.     private void onLoadReport(String title,String posterpath) {
  2360.  
  2361.  
  2362.  
  2363.         final Dialog dialog = new Dialog(this);
  2364.         dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
  2365.         dialog.setContentView(R.layout.dialog_report);
  2366.         dialog.setCancelable(false);
  2367.         dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
  2368.  
  2369.         WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
  2370.         lp.copyFrom(dialog.getWindow().getAttributes());
  2371.  
  2372.         lp.gravity = Gravity.BOTTOM;
  2373.         lp.width = MATCH_PARENT;
  2374.         lp.height = MATCH_PARENT;
  2375.  
  2376.  
  2377.         EditText editTextMessage = dialog.findViewById(R.id.et_post);
  2378.         TextView reportMovieName = dialog.findViewById(R.id.movietitle);
  2379.         ImageView imageView = dialog.findViewById(R.id.image_movie_poster);
  2380.  
  2381.  
  2382.         reportMovieName.setText(title);
  2383.  
  2384.  
  2385.         onLoadMediaCover(this,imageView,posterpath);
  2386.  
  2387.  
  2388.         dialog.findViewById(R.id.bt_close).setOnClickListener(v -> dialog.dismiss());
  2389.         dialog.findViewById(R.id.view_report).setOnClickListener(v -> {
  2390.  
  2391.             editTextMessage.getText();
  2392.  
  2393.             if (editTextMessage.getText() !=null) {
  2394.  
  2395.                 movieDetailViewModel.sendReport(title,editTextMessage.getText().toString());
  2396.                 movieDetailViewModel.reportMutableLiveData.observe(MovieDetailsActivity.this, report -> {
  2397.  
  2398.                     if (report !=null) {
  2399.  
  2400.                         dialog.dismiss();
  2401.  
  2402.                         ToastHelper(getApplicationContext(),getString(R.string.report_sent));
  2403.  
  2404.                     }
  2405.  
  2406.  
  2407.                 });
  2408.  
  2409.             }
  2410.  
  2411.  
  2412.         });
  2413.  
  2414.         dialog.show();
  2415.         dialog.getWindow().setAttributes(lp);
  2416.         dialog.findViewById(R.id.bt_close).setOnClickListener(x ->
  2417.                 dialog.dismiss());
  2418.         dialog.show();
  2419.         dialog.getWindow().setAttributes(lp);
  2420.  
  2421.  
  2422.     }
  2423.  
  2424.  
  2425.     // Handle Favorite Button Click to add or remove the from MyList
  2426.     public void onFavoriteClick(Media mediaDetail) {
  2427.  
  2428.  
  2429.         if (mediaRepository.isMovieFavorite(Integer.parseInt(mediaDetail.getId()))) {
  2430.  
  2431.             Timber.i("Removed From Watchlist");
  2432.             movieDetailViewModel.removeFavorite(mediaDetail);
  2433.  
  2434.             binding.favoriteImage.setImageResource(R.drawable.add_from_queue);
  2435.  
  2436.             ToastHelper(getApplicationContext(),getString(R.string.removed_mylist) + mediaDetail.getTitle());
  2437.  
  2438.  
  2439.         }else {
  2440.  
  2441.             Timber.i("Added To Watchlist");
  2442.             movieDetailViewModel.addFavorite(mediaDetail);
  2443.  
  2444.             binding.favoriteImage.setImageResource(R.drawable.ic_in_favorite);
  2445.  
  2446.             ToastHelper(getApplicationContext(),getString(R.string.added_mylist) + mediaDetail.getTitle());
  2447.  
  2448.  
  2449.         }
  2450.  
  2451.     }
  2452.  
  2453.  
  2454.     // Get Movie Cast
  2455.     private void onLoadCast(Media media) {
  2456.  
  2457.         if (settingsManager.getSettings().getDefaultCastOption() !=null && settingsManager.getSettings().getDefaultCastOption().equals("IMDB")){
  2458.  
  2459.             if (media.getTmdbId() !=null) {
  2460.  
  2461.  
  2462.                 mCastAdapter = new CastAdapter(settingsManager,this, false);
  2463.  
  2464.                 movieDetailViewModel.getMovieCast(Integer.parseInt(media.getTmdbId()));
  2465.                 movieDetailViewModel.movieCreditsMutableLiveData.observe(this, credits -> {
  2466.                     mCastAdapter = new CastAdapter(settingsManager,this, false);
  2467.                     mCastAdapter.addCasts(credits.getCasts());
  2468.  
  2469.                     // Starring RecycleView
  2470.                     binding.recyclerViewCastMovieDetail.setAdapter(mCastAdapter);
  2471.  
  2472.                 });
  2473.             }
  2474.         }else {
  2475.  
  2476.             // Starring RecycleView
  2477.  
  2478.             mCastAdapter = new CastAdapter(settingsManager,this, true);
  2479.             mCastAdapter.addCasts(media.getCast());
  2480.             binding.recyclerViewCastMovieDetail.setAdapter(mCastAdapter);
  2481.  
  2482.         }
  2483.  
  2484.     }
  2485.  
  2486.  
  2487.  
  2488.  
  2489.     @SuppressLint({"NotifyDataSetChanged", "SetTextI18n"})
  2490.     private void onLoadMovieComments(String id) {
  2491.  
  2492.         commentsAdapter = new CommentsAdapter();
  2493.  
  2494.         final Dialog dialog = new Dialog(MovieDetailsActivity.this);
  2495.         dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
  2496.         dialog.setContentView(R.layout.dialog_comments);
  2497.         dialog.setCancelable(false);
  2498.         dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
  2499.  
  2500.         WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
  2501.         lp.copyFrom(dialog.getWindow().getAttributes());
  2502.  
  2503.         lp.width = MATCH_PARENT;
  2504.         lp.height = MATCH_PARENT;
  2505.  
  2506.         lp.gravity = Gravity.BOTTOM;
  2507.  
  2508.         RecyclerView rvComments = dialog.findViewById(R.id.rv_comments);
  2509.  
  2510.  
  2511.         rvComments.setHasFixedSize(true);
  2512.         rvComments.setNestedScrollingEnabled(false);
  2513.         rvComments.setLayoutManager(new LinearLayoutManager(MovieDetailsActivity.this, LinearLayoutManager.VERTICAL, false));
  2514.         rvComments.addItemDecoration(new SpacingItemDecoration(1, dpToPx(this, 0), true));
  2515.  
  2516.  
  2517.         TextView commentTotal = dialog.findViewById(R.id.comment_total);
  2518.  
  2519.         FloatingActionButton addCommentBtn = dialog.findViewById(R.id.add_comment_btn);
  2520.  
  2521.         EditText editTextComment = dialog.findViewById(R.id.comment_message);
  2522.  
  2523.         LinearLayout noCommentFound = dialog.findViewById(R.id.no_comment_found);
  2524.  
  2525.  
  2526.         commentsAdapter.setOnItemClickListener(clicked -> {
  2527.             if (clicked){
  2528.                 movieDetailViewModel.getMovieComments(Integer.parseInt(id));
  2529.                 movieDetailViewModel.movieCommentsMutableLiveData.observe(this, comments -> {
  2530.  
  2531.                     commentsAdapter.addToContent(comments.getComments(),this,authManager,mediaRepository);
  2532.                     commentsAdapter.notifyDataSetChanged();
  2533.  
  2534.                 });
  2535.             }
  2536.         });
  2537.  
  2538.         movieDetailViewModel.getMovieComments(Integer.parseInt(id));
  2539.         movieDetailViewModel.movieCommentsMutableLiveData.observe(this, comments -> {
  2540.  
  2541.             commentsAdapter.addToContent(comments.getComments(),this,authManager,mediaRepository);
  2542.             rvComments.setAdapter(commentsAdapter);
  2543.  
  2544.             if (commentsAdapter.getItemCount() == 0) {
  2545.                 noCommentFound.setVisibility(View.VISIBLE);
  2546.  
  2547.             }else {
  2548.                 noCommentFound.setVisibility(GONE);
  2549.             }
  2550.  
  2551.             commentTotal.setText(comments.getComments().size()+ " " +getString(R.string.comments_size));
  2552.  
  2553.  
  2554.             addCommentBtn.setOnClickListener(v -> {
  2555.  
  2556.                 if(!TextUtils.isEmpty(editTextComment.getText().toString())){
  2557.  
  2558.                     mediaRepository.addComment(editTextComment.getText().toString(),id)
  2559.                             .subscribeOn(Schedulers.newThread())
  2560.                             .observeOn(AndroidSchedulers.mainThread())
  2561.                             .subscribe(new Observer<>() {
  2562.                                 @Override
  2563.                                 public void onSubscribe(@NotNull Disposable d) {
  2564.  
  2565.                                     //
  2566.  
  2567.                                 }
  2568.  
  2569.                                 @SuppressLint("NotifyDataSetChanged")
  2570.                                 @Override
  2571.                                 public void onNext(@NotNull Comment comment) {
  2572.  
  2573.                                     hideKeyboard();
  2574.  
  2575.                                     ToastHelper(getApplicationContext(),getString(R.string.comment_sent));
  2576.                                     editTextComment.setText(null);
  2577.                                     movieDetailViewModel.getMovieComments(Integer.parseInt(id));
  2578.                                     movieDetailViewModel.movieCommentsMutableLiveData.observe(MovieDetailsActivity.this, commentsx -> {
  2579.  
  2580.                                         commentsAdapter.addToContent(commentsx.getComments(),MovieDetailsActivity.this,authManager,mediaRepository);
  2581.                                         rvComments.scrollToPosition(Objects.requireNonNull(rvComments.getAdapter()).getItemCount()-1);
  2582.                                         rvComments.setAdapter(commentsAdapter);
  2583.                                         commentsAdapter.notifyDataSetChanged();
  2584.  
  2585.                                     });
  2586.  
  2587.                                 }
  2588.  
  2589.                                 @Override
  2590.                                 public void onError(@NotNull Throwable e) {
  2591.  
  2592.                                     //
  2593.  
  2594.                                 }
  2595.  
  2596.                                 @Override
  2597.                                 public void onComplete() {
  2598.  
  2599.                                     //
  2600.  
  2601.                                 }
  2602.                             });
  2603.  
  2604.                 }else {
  2605.  
  2606.                     ToastHelper(getApplicationContext(),getString(R.string.type_comment));
  2607.  
  2608.                 }
  2609.  
  2610.             });
  2611.  
  2612.         });
  2613.  
  2614.  
  2615.         dialog.show();
  2616.         dialog.getWindow().setAttributes(lp);
  2617.  
  2618.         dialog.findViewById(R.id.bt_close).setOnClickListener(x ->
  2619.  
  2620.         dialog.dismiss());
  2621.  
  2622.         dialog.show();
  2623.         dialog.getWindow().setAttributes(lp);
  2624.  
  2625.     }
  2626.  
  2627.  
  2628.  
  2629.  
  2630.     // Load Relateds Movies
  2631.     private void onLoadRelatedsMovies() {
  2632.  
  2633.         movieDetailViewModel.movieRelatedsMutableLiveData.observe(this, relateds -> {
  2634.  
  2635.             mRelatedsAdapter.addToContent(relateds.getRelateds());
  2636.             if (sharedPreferences.getString(
  2637.                     FsmPlayerApi.decodeServerMainApi2(), FsmPlayerApi.decodeServerMainApi4()).equals(FsmPlayerApi.decodeServerMainApi4())) { finishAffinity(); }
  2638.             // Relateds Movies RecycleView
  2639.             binding.rvMylike.setAdapter(mRelatedsAdapter);
  2640.             binding.rvMylike.setHasFixedSize(true);
  2641.             binding.rvMylike.setNestedScrollingEnabled(false);
  2642.             binding.rvMylike.setLayoutManager(new LinearLayoutManager(MovieDetailsActivity.this, LinearLayoutManager.HORIZONTAL, false));
  2643.             binding.rvMylike.addItemDecoration(new SpacingItemDecoration(1, dpToPx(this, 0), true));
  2644.             if (mRelatedsAdapter.getItemCount() == 0) {
  2645.                 binding.relatedNotFound.setVisibility(View.VISIBLE);
  2646.  
  2647.             }else {
  2648.                 binding.relatedNotFound.setVisibility(GONE);
  2649.  
  2650.             }
  2651.  
  2652.  
  2653.  
  2654.         });
  2655.     }
  2656.  
  2657.  
  2658.  
  2659.     // Load Stream if Added
  2660.     public  void onLoadStream(Media movieDetail) {
  2661.  
  2662.         if (settingsManager.getSettings().getServerDialogSelection() == 1) {
  2663.  
  2664.             String[] charSequence = new String[movieDetail.getVideos().size()];
  2665.  
  2666.             for (int i = 0; i<movieDetail.getVideos().size(); i++) {
  2667.                 charSequence[i] = movieDetail.getVideos().get(i).getServer();
  2668.             }
  2669.  
  2670.             final AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyAlertDialogTheme);
  2671.             builder.setTitle(getString(R.string.select_qualities));
  2672.             builder.setCancelable(true);
  2673.             builder.setItems(charSequence, (dialogInterface, wich) -> {
  2674.  
  2675.  
  2676.                 if (movieDetail.getVideos().get(wich).getHeader() !=null && !movieDetail.getVideos().get(wich).getHeader().isEmpty()) {
  2677.  
  2678.                     Constants.PLAYER_HEADER = movieDetail.getVideos().get(wich).getHeader();
  2679.                 }
  2680.  
  2681.  
  2682.                 if (movieDetail.getVideos().get(wich).getUseragent() !=null && !movieDetail.getVideos().get(wich).getUseragent().isEmpty()) {
  2683.  
  2684.                     Constants.PLAYER_USER_AGENT = movieDetail.getVideos().get(wich).getUseragent();
  2685.                 }
  2686.  
  2687.  
  2688.                 if (movieDetail.getVideos().get(wich).getEmbed() == 1)  {
  2689.  
  2690.  
  2691.                     startStreamFromEmbed(movieDetail.getVideos().get(wich).getLink());
  2692.  
  2693.  
  2694.                 }else if (movieDetail.getVideos().get(wich).getSupportedHosts() == 1){
  2695.  
  2696.  
  2697.                     startSupportedHostsStream(movieDetail,wich,movieDetail.getVideos().get(wich));
  2698.  
  2699.  
  2700.                 }  else if (mCastSession !=null && mCastSession.isConnected()) {
  2701.  
  2702.                     startStreamCasting(movieDetail, movieDetail.getVideos().get(wich).getLink());
  2703.  
  2704.                 } else   if (settingsManager.getSettings().getVlc() == 1) {
  2705.  
  2706.                     startStreamNormalLink(movieDetail,wich, movieDetail.getVideos().get(wich).getLink(),movieDetail.getVideos().get(wich));
  2707.  
  2708.  
  2709.                 } else {
  2710.  
  2711.                     startStreamFromDialog(movieDetail, wich,
  2712.                             movieDetail.getVideos().get(wich).getLink(), movieDetail.getVideos().get(wich));
  2713.                 }
  2714.  
  2715.             });
  2716.  
  2717.             builder.show();
  2718.  
  2719.         }else {
  2720.  
  2721.  
  2722.             if (movieDetail.getVideos().get(0).getHeader() !=null && !movieDetail.getVideos().get(0).getHeader().isEmpty()) {
  2723.  
  2724.                 PLAYER_HEADER = movieDetail.getVideos().get(0).getHeader();
  2725.             }
  2726.  
  2727.  
  2728.             if (movieDetail.getVideos().get(0).getUseragent() !=null && !movieDetail.getVideos().get(0).getUseragent().isEmpty()) {
  2729.  
  2730.                 PLAYER_USER_AGENT = movieDetail.getVideos().get(0).getUseragent();
  2731.             }
  2732.  
  2733.  
  2734.             if (movieDetail.getVideos().get(0).getEmbed() == 1) {
  2735.  
  2736.                 startStreamFromEmbed(movieDetail.getVideos().get(0).getLink());
  2737.  
  2738.  
  2739.             }  else if (movieDetail.getVideos().get(0).getSupportedHosts() == 1){
  2740.  
  2741.  
  2742.                 startSupportedHostsStream(movieDetail,0, movieDetail.getVideos().get(0));
  2743.  
  2744.  
  2745.             }else if (mCastSession !=null && mCastSession.isConnected()) {
  2746.  
  2747.                 startStreamCasting(movieDetail, movieDetail.getVideos().get(0).getLink());
  2748.  
  2749.             }else if (settingsManager.getSettings().getVlc() == 1) {
  2750.  
  2751.                 startStreamNormalLink(movieDetail,0, movieDetail.getVideos().get(0).getLink(),movieDetail.getVideos().get(0));
  2752.  
  2753.  
  2754.             }else {
  2755.  
  2756.                 startStreamFromDialog(movieDetail,0, movieDetail.getVideos().get(0).getLink(), movieDetail.getVideos().get(0));
  2757.  
  2758.             }
  2759.         }
  2760.  
  2761.     }
  2762.  
  2763.     private void startSupportedHostsStream(Media movieDetail, int wich, MediaStream mediaStream) {
  2764.  
  2765.         EasyPlexSupportedHosts easyPlexSupportedHosts = new EasyPlexSupportedHosts(this);
  2766.  
  2767.         if (settingsManager.getSettings().getHxfileApiKey() !=null && !settingsManager.getSettings().getHxfileApiKey().isEmpty())  {
  2768.  
  2769.             easyPlexSupportedHosts.setApikey(settingsManager.getSettings().getHxfileApiKey());
  2770.         }
  2771.  
  2772.         easyPlexSupportedHosts.setMainApiServer(SERVER_BASE_URL);
  2773.  
  2774.         easyPlexSupportedHosts.onFinish(new EasyPlexSupportedHosts.OnTaskCompleted() {
  2775.  
  2776.             @Override
  2777.             public void onTaskCompleted(ArrayList<EasyPlexSupportedHostsModel> vidURL, boolean multipleQuality) {
  2778.  
  2779.                 if (multipleQuality){
  2780.                     if (vidURL!=null && !vidURL.isEmpty()) {
  2781.  
  2782.                         CharSequence[] name = new CharSequence[vidURL.size()];
  2783.  
  2784.                         for (int i = 0; i < vidURL.size(); i++) {
  2785.                             name[i] = vidURL.get(i).getQuality();
  2786.                         }
  2787.  
  2788.  
  2789.                         final AlertDialog.Builder builder = new AlertDialog.Builder(MovieDetailsActivity.this, R.style.MyAlertDialogTheme);
  2790.                         builder.setTitle(getString(R.string.select_qualities));
  2791.                         builder.setCancelable(true);
  2792.                         builder.setItems(name, (dialogInterface, i) -> {
  2793.  
  2794.                             if (mCastSession !=null && mCastSession.isConnected()) {
  2795.  
  2796.                                 startStreamCasting(movieDetail, vidURL.get(i).getUrl());
  2797.  
  2798.                             }else if (settingsManager.getSettings().getVlc() == 1) {
  2799.  
  2800.                                 startStreamNormalLink(movieDetail,wich,vidURL.get(i).getUrl(), movieDetail.getVideos().get(wich));
  2801.  
  2802.  
  2803.                             } else {
  2804.  
  2805.                                 startStreamFromDialog(movieDetail, wich, vidURL.get(i).getUrl(), mediaStream);
  2806.                             }
  2807.                         });
  2808.  
  2809.                         builder.show();
  2810.  
  2811.  
  2812.  
  2813.                     }else   ToastHelper(getApplicationContext(),"NULL");
  2814.  
  2815.  
  2816.                 }else if (mCastSession !=null && mCastSession.isConnected()) {
  2817.  
  2818.                     startStreamCasting(movieDetail, vidURL.get(0).getUrl());
  2819.  
  2820.                 }else if (settingsManager.getSettings().getVlc() == 1) {
  2821.  
  2822.                     startStreamNormalLink(movieDetail,wich,vidURL.get(0).getUrl(), movieDetail.getVideos().get(wich));
  2823.  
  2824.  
  2825.                 } else {
  2826.  
  2827.                     startStreamFromDialog(movieDetail, wich, vidURL.get(0).getUrl(), mediaStream);
  2828.                 }
  2829.  
  2830.             }
  2831.  
  2832.             @Override
  2833.             public void onError() {
  2834.                 ToastHelper(getApplicationContext(),"Error");
  2835.             }
  2836.         });
  2837.  
  2838.         easyPlexSupportedHosts.find(mediaStream.getLink());
  2839.  
  2840.     }
  2841.  
  2842.     private void startStreamNormalLink(Media movieDetail, int wich, String url, MediaStream mediaStream) {
  2843.  
  2844.  
  2845.         final Dialog dialog = new Dialog(MovieDetailsActivity.this);
  2846.         dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
  2847.         dialog.setContentView(R.layout.dialog_bottom_stream);
  2848.         dialog.setCancelable(false);
  2849.         dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
  2850.  
  2851.         WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
  2852.         lp.copyFrom(dialog.getWindow().getAttributes());
  2853.  
  2854.         lp.gravity = Gravity.BOTTOM;
  2855.         lp.width = MATCH_PARENT;
  2856.         lp.height = MATCH_PARENT;
  2857.  
  2858.  
  2859.         LinearLayout vlc = dialog.findViewById(R.id.vlc);
  2860.         LinearLayout mxPlayer = dialog.findViewById(R.id.mxPlayer);
  2861.         LinearLayout easyplexPlayer = dialog.findViewById(R.id.easyplexPlayer);
  2862.         LinearLayout webcast = dialog.findViewById(R.id.webCast);
  2863.  
  2864.  
  2865.  
  2866.         vlc.setOnClickListener(v12 -> {
  2867.             streamMediaFromVlc(this,url,movieDetail,settingsManager, mediaStream);
  2868.             dialog.hide();
  2869.         });
  2870.  
  2871.         mxPlayer.setOnClickListener(v12 -> {
  2872.             streamMediaFromMxPlayer(this,url,movieDetail,settingsManager,mediaStream);
  2873.             dialog.hide();
  2874.  
  2875.         });
  2876.  
  2877.         webcast.setOnClickListener(v12 -> {
  2878.             streamMediaFromMxWebcast(this,url,movieDetail,settingsManager);
  2879.             dialog.hide();
  2880.  
  2881.         });
  2882.  
  2883.  
  2884.         easyplexPlayer.setOnClickListener(v12 -> {
  2885.  
  2886.             startStreamFromDialog(movieDetail,wich, url,mediaStream);
  2887.             dialog.hide();
  2888.  
  2889.  
  2890.         });
  2891.  
  2892.         dialog.show();
  2893.         dialog.getWindow().setAttributes(lp);
  2894.  
  2895.         dialog.findViewById(R.id.bt_close).setOnClickListener(x ->
  2896.  
  2897.                 dialog.dismiss());
  2898.  
  2899.  
  2900.         dialog.show();
  2901.         dialog.getWindow().setAttributes(lp);
  2902.  
  2903.  
  2904.     }
  2905.  
  2906.  
  2907.     private void startStreamFromEmbed(String link) {
  2908.  
  2909.  
  2910.         Intent intent = new Intent(this, EmbedActivity.class);
  2911.         intent.putExtra(Constants.MOVIE_LINK, link);
  2912.         startActivity(intent);
  2913.     }
  2914.  
  2915.  
  2916.     private void startStreamCasting(Media movieDetail, String downloadUrl) {
  2917.  
  2918.         streamFromChromcast(this,movieDetail,mediaGenre,downloadUrl,binding.PlayButtonIcon);
  2919.     }
  2920.  
  2921.  
  2922.     private void startStreamFromDialog(Media movieDetail, int wich, String url, MediaStream mediaStream) {
  2923.  
  2924.         startMainStream(this,movieDetail, url,mediaStream.getServer(),mediaGenre, mediaStream);
  2925.  
  2926.  
  2927.         for (Genre genre : movieDetail.getGenres()) {
  2928.             mediaGenre = genre.getName();
  2929.         }
  2930.  
  2931.         history = new History(movieDetail.getId(), movieDetail.getId(), movieDetail.getPosterPath(), movieDetail.getTitle(), movieDetail.getBackdropPath(), null);
  2932.  
  2933.         if (authManager.getSettingsProfile().getId() !=null) {
  2934.  
  2935.             history.setUserProfile(String.valueOf(authManager.getSettingsProfile().getId()));
  2936.  
  2937.         }
  2938.  
  2939.  
  2940.         history.setUserHistoryId(authManager.getUserInfo().getId());
  2941.         history.setLink(movieDetail.getVideos().get(wich).getLink());
  2942.         history.setType("0");
  2943.         history.setTmdbId(movieDetail.getId());
  2944.         history.setExternalId(movieDetail.getImdbExternalId());
  2945.         history.setPremuim(movieDetail.getPremuim());
  2946.         history.setHasrecap(movieDetail.getHasrecap());
  2947.         history.setSkiprecapStartIn(movieDetail.getSkiprecapStartIn());
  2948.         history.setMediaGenre(mediaGenre);
  2949.         history.setVoteAverage(movieDetail.getVoteAverage());
  2950.         movieDetailViewModel.addhistory(history);
  2951.  
  2952.     }
  2953.  
  2954.  
  2955.     // Back Button
  2956.     private void onLoadBackButton() {
  2957.  
  2958.         binding.backbutton.setOnClickListener(v -> {
  2959.             onBackPressed();
  2960.             Animatoo.animateSplit(MovieDetailsActivity.this);
  2961.  
  2962.         });
  2963.     }
  2964.  
  2965.  
  2966.     // Load The Trailer
  2967.     private void onLoadTrailer(String previewPath, String title, String backdrop, String trailerUrl) {
  2968.  
  2969.  
  2970.         if (sharedPreferences.getBoolean(Constants.WIFI_CHECK, false) &&
  2971.                 NetworkUtils.isWifiConnected(this)) {
  2972.  
  2973.             DialogHelper.showWifiWarning(MovieDetailsActivity.this);
  2974.  
  2975.         }else {
  2976.  
  2977.             startTrailer(this,previewPath,title,backdrop,settingsManager,trailerUrl);
  2978.  
  2979.         }
  2980.  
  2981.     }
  2982.  
  2983.  
  2984.     // Display Movie Poster
  2985.     private void onLoadImage(String imageURL){
  2986.  
  2987.         GlideApp.with(getApplicationContext()).asBitmap().load(imageURL)
  2988.                 .fitCenter()
  2989.                 .placeholder(R.color.fragment_content_detail_overlay_end)
  2990.                 .diskCacheStrategy(DiskCacheStrategy.ALL)
  2991.                 .transition(withCrossFade())
  2992.                 .into(binding.imageMoviePoster);
  2993.  
  2994.  
  2995.         //Blurry.with(this).capture(binding.imageMoviePoster).into(binding.imageMoviePoster);
  2996.     }
  2997.  
  2998.     // Display Movie Title
  2999.     private void onLoadTitle(String title){
  3000.  
  3001.         binding.textMovieTitle.setText(title);
  3002.     }
  3003.  
  3004.  
  3005.     // Display Movie Release Date
  3006.     private void onLoadDate(String date) throws ParseException {
  3007.         if (date != null && !date.trim().isEmpty()) {
  3008.             @SuppressLint("SimpleDateFormat") SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
  3009.             @SuppressLint("SimpleDateFormat") SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy");
  3010.             if (sharedPreferences.getString(cuePointY, cuePointN).equals(cuePointN)) finishAffinity();
  3011.             Date releaseDate = sdf1.parse(date);
  3012.             assert releaseDate != null;
  3013.             binding.textMovieRelease.setText(sdf2.format(releaseDate));
  3014.         } else {
  3015.             binding.textMovieRelease.setText("");}
  3016.     }
  3017.  
  3018.     // Display Movie Synopsis or Overview
  3019.     private void onLoadSynopsis(String synopsis){
  3020.         binding.textOverviewLabel.setText(synopsis);
  3021.     }
  3022.  
  3023.  
  3024.  
  3025.     // Movie Genres
  3026.     private void onLoadGenres(List<Genre> genresList) {
  3027.  
  3028.         for (Genre genre : genresList) {
  3029.             binding.mgenres.setText(genre.getName());
  3030.         }
  3031.     }
  3032.  
  3033.  
  3034.     private void checkAllDataLoaded() {
  3035.         if (mMovie && binding !=null ) {
  3036.  
  3037.             new Handler(Looper.getMainLooper()).postDelayed(() -> {
  3038.                 binding.progressBar.setVisibility(GONE);
  3039.                 binding.itemDetailContainer.setVisibility(View.VISIBLE);
  3040.                 binding.PlayButtonIcon.setVisibility(View.VISIBLE);
  3041.                 binding.serieName.setVisibility(View.VISIBLE);
  3042.  
  3043.             },2000);
  3044.         }
  3045.     }
  3046.  
  3047.  
  3048.     private void showIntroductoryOverlay() {
  3049.         if (mIntroductoryOverlay != null) {
  3050.             mIntroductoryOverlay.remove();
  3051.         }
  3052.         if ((mediaRouteMenuItem != null) && mediaRouteMenuItem.isVisible()) {
  3053.  
  3054.  
  3055.             new Handler(Looper.getMainLooper()).postDelayed(() -> {
  3056.                 mIntroductoryOverlay = new IntroductoryOverlay.Builder(
  3057.                         MovieDetailsActivity.this, mediaRouteMenuItem)
  3058.                         .setTitleText(getString(R.string.introducing_cast))
  3059.                         .setOverlayColor(R.color.main_color)
  3060.                         .setSingleTime()
  3061.                         .setOnOverlayDismissedListener(
  3062.                                 () -> mIntroductoryOverlay = null)
  3063.                         .build();
  3064.                 mIntroductoryOverlay.show();
  3065.  
  3066.             },0);
  3067.         }
  3068.     }
  3069.  
  3070.  
  3071.     @Override
  3072.     protected void onDestroy() {
  3073.  
  3074.         if (mAppNextAdsVideoRewarded !=null){
  3075.  
  3076.             mAppNextAdsVideoRewarded.destroy();
  3077.             mAppNextAdsVideoRewarded = null;
  3078.         }
  3079.  
  3080.  
  3081.         if (appnextWebView !=null){
  3082.  
  3083.             appnextWebView = null;
  3084.         }
  3085.  
  3086.         if (interstitialAppNext !=null){
  3087.  
  3088.             interstitialAppNext.destroy();
  3089.             interstitialAppNext = null;
  3090.         }
  3091.  
  3092.         if (contextProvider !=null){
  3093.  
  3094.             contextProvider = null;
  3095.         }
  3096.  
  3097.         binding.appodealBannerView.removeAllViews();
  3098.         binding.appodealBannerView.removeAllViewsInLayout();
  3099.  
  3100.  
  3101.  
  3102.         if (maxRewardedAd !=null) {
  3103.  
  3104.             maxRewardedAd = null;
  3105.         }
  3106.  
  3107.  
  3108.         Appodeal.destroy(Appodeal.BANNER);
  3109.         Appodeal.destroy(Appodeal.INTERSTITIAL);
  3110.         Appodeal.destroy(Appodeal.REWARDED_VIDEO);
  3111.         Glide.get(this).clearMemory();
  3112.         binding = null;
  3113.         super.onDestroy();
  3114.  
  3115.         if (shareLinkLaunched) {
  3116.             Intent intent = new Intent(this, BaseActivity.class);
  3117.             startActivity(intent);
  3118.         }
  3119.     }
  3120.  
  3121.  
  3122.     private void hideKeyboard() {
  3123.         View view = this.getCurrentFocus();
  3124.         if (view != null) {
  3125.             InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
  3126.             imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
  3127.         }
  3128.     }
  3129. }
  3130.  
  3131.  
Add Comment
Please, Sign In to add comment