aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java')
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/AppComponent.java6
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/RPANBroadcast.java236
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/RPANComment.java15
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/activities/LinkResolverActivity.java5
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/activities/MainActivity.java2
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/activities/RPANActivity.java426
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/adapters/RPANCommentStreamRecyclerViewAdapter.java89
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/adapters/navigationdrawer/RedditSectionRecyclerViewAdapter.java6
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/apis/Strapi.java13
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewRPANBroadcastFragment.java423
10 files changed, 1 insertions, 1220 deletions
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/AppComponent.java b/app/src/main/java/ml/docilealligator/infinityforreddit/AppComponent.java
index 8b8f5533..2bf647ec 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/AppComponent.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/AppComponent.java
@@ -37,7 +37,6 @@ import ml.docilealligator.infinityforreddit.activities.PostLinkActivity;
import ml.docilealligator.infinityforreddit.activities.PostPollActivity;
import ml.docilealligator.infinityforreddit.activities.PostTextActivity;
import ml.docilealligator.infinityforreddit.activities.PostVideoActivity;
-import ml.docilealligator.infinityforreddit.activities.RPANActivity;
import ml.docilealligator.infinityforreddit.activities.ReportActivity;
import ml.docilealligator.infinityforreddit.activities.RulesActivity;
import ml.docilealligator.infinityforreddit.activities.SearchActivity;
@@ -81,7 +80,6 @@ import ml.docilealligator.infinityforreddit.fragments.UserListingFragment;
import ml.docilealligator.infinityforreddit.fragments.ViewImgurImageFragment;
import ml.docilealligator.infinityforreddit.fragments.ViewImgurVideoFragment;
import ml.docilealligator.infinityforreddit.fragments.ViewPostDetailFragment;
-import ml.docilealligator.infinityforreddit.fragments.ViewRPANBroadcastFragment;
import ml.docilealligator.infinityforreddit.fragments.ViewRedditGalleryImageOrGifFragment;
import ml.docilealligator.infinityforreddit.fragments.ViewRedditGalleryVideoFragment;
import ml.docilealligator.infinityforreddit.services.DownloadMediaService;
@@ -281,10 +279,6 @@ public interface AppComponent {
void inject(LockScreenActivity lockScreenActivity);
- void inject(RPANActivity rpanActivity);
-
- void inject(ViewRPANBroadcastFragment viewRPANBroadcastFragment);
-
void inject(PostGalleryActivity postGalleryActivity);
void inject(TrendingActivity trendingActivity);
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/RPANBroadcast.java b/app/src/main/java/ml/docilealligator/infinityforreddit/RPANBroadcast.java
deleted file mode 100644
index d7c936c2..00000000
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/RPANBroadcast.java
+++ /dev/null
@@ -1,236 +0,0 @@
-package ml.docilealligator.infinityforreddit;
-
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import ml.docilealligator.infinityforreddit.utils.APIUtils;
-
-public class RPANBroadcast implements Parcelable {
-
- public int upvotes;
- public int downvotes;
- public int uniqueWatchers;
- public int continuousWatchers;
- public int totalContinuousWatchers;
- public boolean chatDisabled;
- public double broadcastTime;
- public double estimatedRemainingTime;
-
- public RPANPost rpanPost;
- public RPANStream rpanStream;
-
- public RPANBroadcast(int upvotes, int downvotes, int uniqueWatchers, int continuousWatchers,
- int totalContinuousWatchers, boolean chatDisabled, double broadcastTime,
- double estimatedRemainingTime, RPANPost rpanPost, RPANStream rpanStream) {
- this.upvotes = upvotes;
- this.downvotes = downvotes;
- this.uniqueWatchers = uniqueWatchers;
- this.continuousWatchers = continuousWatchers;
- this.totalContinuousWatchers = totalContinuousWatchers;
- this.chatDisabled = chatDisabled;
- this.broadcastTime = broadcastTime;
- this.estimatedRemainingTime = estimatedRemainingTime;
- this.rpanPost = rpanPost;
- this.rpanStream = rpanStream;
- }
-
- protected RPANBroadcast(Parcel in) {
- upvotes = in.readInt();
- downvotes = in.readInt();
- uniqueWatchers = in.readInt();
- continuousWatchers = in.readInt();
- totalContinuousWatchers = in.readInt();
- chatDisabled = in.readByte() != 0;
- broadcastTime = in.readDouble();
- estimatedRemainingTime = in.readDouble();
- rpanPost = in.readParcelable(RPANPost.class.getClassLoader());
- rpanStream = in.readParcelable(RPANStream.class.getClassLoader());
- }
-
- public static final Creator<RPANBroadcast> CREATOR = new Creator<RPANBroadcast>() {
- @Override
- public RPANBroadcast createFromParcel(Parcel in) {
- return new RPANBroadcast(in);
- }
-
- @Override
- public RPANBroadcast[] newArray(int size) {
- return new RPANBroadcast[size];
- }
- };
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- @Override
- public void writeToParcel(Parcel parcel, int i) {
- parcel.writeInt(upvotes);
- parcel.writeInt(downvotes);
- parcel.writeInt(uniqueWatchers);
- parcel.writeInt(continuousWatchers);
- parcel.writeInt(totalContinuousWatchers);
- parcel.writeByte((byte) (chatDisabled ? 1 : 0));
- parcel.writeDouble(broadcastTime);
- parcel.writeDouble(estimatedRemainingTime);
- parcel.writeParcelable(rpanPost, i);
- parcel.writeParcelable(rpanStream, i);
- }
-
- public static class RPANPost implements Parcelable {
- public String fullname;
- public String title;
- public String subredditName;
- public String subredditIconUrl;
- public String username;
- public int postScore;
- public String voteState;
- public double upvoteRatio;
- public String postPermalink;
- public String rpanUrl;
- public boolean isNsfw;
- public boolean isLocked;
- public boolean isArchived;
- public boolean isSpoiler;
- public String suggestedCommentSort;
- public String liveCommentsWebsocketUrl;
-
- public RPANPost(String fullname, String title, String subredditName, String subredditIconUrl, String username,
- int postScore, String voteState, double upvoteRatio, String postPermalink, String rpanUrl,
- boolean isNsfw, boolean isLocked, boolean isArchived, boolean isSpoiler,
- String suggestedCommentSort, String liveCommentsWebsocketUrl) {
- this.fullname = fullname;
- this.title = title;
- this.subredditName = subredditName;
- this.subredditIconUrl = subredditIconUrl;
- this.username = username;
- this.postScore = postScore;
- this.voteState = voteState;
- this.upvoteRatio = upvoteRatio;
- this.postPermalink = APIUtils.API_BASE_URI + postPermalink;
- this.rpanUrl = rpanUrl;
- this.isNsfw = isNsfw;
- this.isLocked = isLocked;
- this.isArchived = isArchived;
- this.isSpoiler = isSpoiler;
- this.suggestedCommentSort = suggestedCommentSort;
- this.liveCommentsWebsocketUrl = liveCommentsWebsocketUrl;
- }
-
- protected RPANPost(Parcel in) {
- fullname = in.readString();
- title = in.readString();
- subredditName = in.readString();
- subredditIconUrl = in.readString();
- username = in.readString();
- postScore = in.readInt();
- voteState = in.readString();
- upvoteRatio = in.readDouble();
- postPermalink = in.readString();
- rpanUrl = in.readString();
- isNsfw = in.readByte() != 0;
- isLocked = in.readByte() != 0;
- isArchived = in.readByte() != 0;
- isSpoiler = in.readByte() != 0;
- suggestedCommentSort = in.readString();
- liveCommentsWebsocketUrl = in.readString();
- }
-
- public static final Creator<RPANPost> CREATOR = new Creator<RPANPost>() {
- @Override
- public RPANPost createFromParcel(Parcel in) {
- return new RPANPost(in);
- }
-
- @Override
- public RPANPost[] newArray(int size) {
- return new RPANPost[size];
- }
- };
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- @Override
- public void writeToParcel(Parcel parcel, int i) {
- parcel.writeString(fullname);
- parcel.writeString(title);
- parcel.writeString(subredditName);
- parcel.writeString(subredditIconUrl);
- parcel.writeString(username);
- parcel.writeInt(postScore);
- parcel.writeString(voteState);
- parcel.writeDouble(upvoteRatio);
- parcel.writeString(postPermalink);
- parcel.writeString(rpanUrl);
- parcel.writeByte((byte) (isNsfw ? 1 : 0));
- parcel.writeByte((byte) (isLocked ? 1 : 0));
- parcel.writeByte((byte) (isArchived ? 1 : 0));
- parcel.writeByte((byte) (isSpoiler ? 1 : 0));
- parcel.writeString(suggestedCommentSort);
- parcel.writeString(liveCommentsWebsocketUrl);
- }
- }
-
- public static class RPANStream implements Parcelable {
- public String streamId;
- public String hlsUrl;
- public String thumbnail;
- public int width;
- public int height;
- public long publishAt;
- public String state;
-
- public RPANStream(String streamId, String hlsUrl, String thumbnail, int width, int height, long publishAt,
- String state) {
- this.streamId = streamId;
- this.hlsUrl = hlsUrl;
- this.thumbnail = thumbnail;
- this.width = width;
- this.height = height;
- this.publishAt = publishAt;
- this.state = state;
- }
-
- protected RPANStream(Parcel in) {
- streamId = in.readString();
- hlsUrl = in.readString();
- thumbnail = in.readString();
- width = in.readInt();
- height = in.readInt();
- publishAt = in.readLong();
- state = in.readString();
- }
-
- public static final Creator<RPANStream> CREATOR = new Creator<RPANStream>() {
- @Override
- public RPANStream createFromParcel(Parcel in) {
- return new RPANStream(in);
- }
-
- @Override
- public RPANStream[] newArray(int size) {
- return new RPANStream[size];
- }
- };
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- @Override
- public void writeToParcel(Parcel parcel, int i) {
- parcel.writeString(streamId);
- parcel.writeString(hlsUrl);
- parcel.writeString(thumbnail);
- parcel.writeInt(width);
- parcel.writeInt(height);
- parcel.writeLong(publishAt);
- parcel.writeString(state);
- }
- }
-}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/RPANComment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/RPANComment.java
deleted file mode 100644
index 077031bf..00000000
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/RPANComment.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package ml.docilealligator.infinityforreddit;
-
-public class RPANComment {
- public String author;
- public String authorIconImage;
- public String content;
- public long createdUTC;
-
- public RPANComment(String author, String authorIconImage, String content, long createdUTC) {
- this.author = author;
- this.authorIconImage = authorIconImage;
- this.content = content;
- this.createdUTC = createdUTC;
- }
-}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/LinkResolverActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/LinkResolverActivity.java
index 5bba98bc..9fba9cdf 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/LinkResolverActivity.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/LinkResolverActivity.java
@@ -49,7 +49,6 @@ public class LinkResolverActivity extends AppCompatActivity {
private static final String IMGUR_GALLERY_PATTERN = "/gallery/\\w+/?";
private static final String IMGUR_ALBUM_PATTERN = "/(album|a)/\\w+/?";
private static final String IMGUR_IMAGE_PATTERN = "/\\w+/?";
- private static final String RPAN_BROADCAST_PATTERN = "/rpan/r/[\\w-]+/\\w+/?\\w+/?";
private static final String WIKI_PATTERN = "/[rR]/[\\w-]+/(wiki|w)(?:/[\\w-]+)*";
private static final String GOOGLE_AMP_PATTERN = "/amp/s/amp.reddit.com/.*";
private static final String STREAMABLE_PATTERN = "/\\w+/?";
@@ -248,10 +247,6 @@ public class LinkResolverActivity extends AppCompatActivity {
intent.putExtra(ViewSubredditDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname);
intent.putExtra(ViewSubredditDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName);
startActivity(intent);
- } else if (path.matches(RPAN_BROADCAST_PATTERN)) {
- Intent intent = new Intent(this, RPANActivity.class);
- intent.putExtra(RPANActivity.EXTRA_RPAN_BROADCAST_FULLNAME_OR_ID, path.substring(path.lastIndexOf('/') + 1));
- startActivity(intent);
} else if (authority.equals("redd.it") && path.matches(REDD_IT_POST_PATTERN)) {
Intent intent = new Intent(this, ViewPostDetailActivity.class);
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, path.substring(1));
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/MainActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/MainActivity.java
index 43d41e8a..bbc23811 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/MainActivity.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/MainActivity.java
@@ -779,8 +779,6 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
intent.putExtra(SubscribedThingListingActivity.EXTRA_SHOW_MULTIREDDITS, true);
} else if (stringId == R.string.history) {
intent = new Intent(MainActivity.this, HistoryActivity.class);
- } else if (stringId == R.string.rpan) {
- intent = new Intent(MainActivity.this, RPANActivity.class);
} else if (stringId == R.string.trending) {
intent = new Intent(MainActivity.this, TrendingActivity.class);
} else if (stringId == R.string.upvoted) {
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/RPANActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/RPANActivity.java
deleted file mode 100644
index ecc459a4..00000000
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/RPANActivity.java
+++ /dev/null
@@ -1,426 +0,0 @@
-package ml.docilealligator.infinityforreddit.activities;
-
-import android.content.ActivityNotFoundException;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.graphics.Color;
-import android.graphics.Typeface;
-import android.graphics.drawable.ColorDrawable;
-import android.graphics.drawable.Drawable;
-import android.media.AudioManager;
-import android.os.Bundle;
-import android.os.Handler;
-import android.text.Html;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.widget.ProgressBar;
-import android.widget.Toast;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.appcompat.app.ActionBar;
-import androidx.appcompat.app.AppCompatActivity;
-import androidx.coordinatorlayout.widget.CoordinatorLayout;
-import androidx.fragment.app.Fragment;
-import androidx.fragment.app.FragmentActivity;
-import androidx.recyclerview.widget.RecyclerView;
-import androidx.viewpager2.adapter.FragmentStateAdapter;
-import androidx.viewpager2.widget.ViewPager2;
-
-import com.evernote.android.state.State;
-import com.google.android.material.snackbar.Snackbar;
-import com.livefront.bridge.Bridge;
-
-import org.greenrobot.eventbus.EventBus;
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-
-import java.io.IOException;
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.concurrent.Executor;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-
-import butterknife.BindView;
-import butterknife.ButterKnife;
-import ml.docilealligator.infinityforreddit.CustomFontReceiver;
-import ml.docilealligator.infinityforreddit.Infinity;
-import ml.docilealligator.infinityforreddit.R;
-import ml.docilealligator.infinityforreddit.RPANBroadcast;
-import ml.docilealligator.infinityforreddit.apis.Strapi;
-import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
-import ml.docilealligator.infinityforreddit.font.ContentFontFamily;
-import ml.docilealligator.infinityforreddit.font.ContentFontStyle;
-import ml.docilealligator.infinityforreddit.font.FontFamily;
-import ml.docilealligator.infinityforreddit.font.FontStyle;
-import ml.docilealligator.infinityforreddit.font.TitleFontFamily;
-import ml.docilealligator.infinityforreddit.font.TitleFontStyle;
-import ml.docilealligator.infinityforreddit.fragments.ViewRPANBroadcastFragment;
-import ml.docilealligator.infinityforreddit.utils.JSONUtils;
-import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
-import ml.docilealligator.infinityforreddit.utils.Utils;
-import okhttp3.ResponseBody;
-import retrofit2.Call;
-import retrofit2.Callback;
-import retrofit2.Response;
-import retrofit2.Retrofit;
-
-public class RPANActivity extends AppCompatActivity implements CustomFontReceiver {
-
- public static final String EXTRA_RPAN_BROADCAST_FULLNAME_OR_ID = "ERBFOI";
-
- @BindView(R.id.coordinator_layout_rpan_activity)
- CoordinatorLayout coordinatorLayout;
- @BindView(R.id.view_pager_2_rpan_activity)
- ViewPager2 viewPager2;
- @BindView(R.id.progress_bar_rpan_activity)
- ProgressBar progressBar;
- @Inject
- @Named("strapi")
- Retrofit strapiRetrofit;
- @Inject
- @Named("default")
- SharedPreferences mSharedPreferences;
- @Inject
- CustomThemeWrapper mCustomThemeWrapper;
- @Inject
- Executor mExecutor;
- @State
- ArrayList<RPANBroadcast> rpanBroadcasts;
- @State
- String nextCursor;
- public Typeface typeface;
- private SectionsPagerAdapter sectionsPagerAdapter;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- ((Infinity) getApplication()).getAppComponent().inject(this);
-
- super.onCreate(savedInstanceState);
-
- getTheme().applyStyle(R.style.Theme_Normal, true);
-
- getTheme().applyStyle(FontStyle.valueOf(mSharedPreferences
- .getString(SharedPreferencesUtils.FONT_SIZE_KEY, FontStyle.Normal.name())).getResId(), true);
-
- getTheme().applyStyle(TitleFontStyle.valueOf(mSharedPreferences
- .getString(SharedPreferencesUtils.TITLE_FONT_SIZE_KEY, TitleFontStyle.Normal.name())).getResId(), true);
-
- getTheme().applyStyle(ContentFontStyle.valueOf(mSharedPreferences
- .getString(SharedPreferencesUtils.CONTENT_FONT_SIZE_KEY, ContentFontStyle.Normal.name())).getResId(), true);
-
- getTheme().applyStyle(FontFamily.valueOf(mSharedPreferences
- .getString(SharedPreferencesUtils.FONT_FAMILY_KEY, FontFamily.Default.name())).getResId(), true);
-
- getTheme().applyStyle(TitleFontFamily.valueOf(mSharedPreferences
- .getString(SharedPreferencesUtils.TITLE_FONT_FAMILY_KEY, TitleFontFamily.Default.name())).getResId(), true);
-
- getTheme().applyStyle(ContentFontFamily.valueOf(mSharedPreferences
- .getString(SharedPreferencesUtils.CONTENT_FONT_FAMILY_KEY, ContentFontFamily.Default.name())).getResId(), true);
-
- setContentView(R.layout.activity_rpanactivity);
-
- setVolumeControlStream(AudioManager.STREAM_MUSIC);
-
- Bridge.restoreInstanceState(this, savedInstanceState);
-
- ButterKnife.bind(this);
-
- ActionBar actionBar = getSupportActionBar();
- Drawable upArrow = getResources().getDrawable(R.drawable.ic_arrow_back_white_24dp);
- actionBar.setHomeAsUpIndicator(upArrow);
- actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#00000000")));
- actionBar.setTitle(Utils.getTabTextWithCustomFont(typeface, Html.fromHtml("<font color=\"#FFFFFF\">" + getString(R.string.rpan_activity_label) + "</font>")));
-
- if (rpanBroadcasts == null) {
- loadRPANVideos();
- } else {
- initializeViewPager();
- }
- }
-
- private void loadRPANVideos() {
- String rpanBroadcastFullNameOrId = getIntent().getStringExtra(EXTRA_RPAN_BROADCAST_FULLNAME_OR_ID);
- if (rpanBroadcastFullNameOrId == null) {
- strapiRetrofit.create(Strapi.class).getAllBroadcasts().enqueue(new Callback<String>() {
- @Override
- public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
- progressBar.setVisibility(View.GONE);
- if (response.isSuccessful()) {
- parseRPANBroadcasts(response.body());
- } else {
- try {
- ResponseBody responseBody = response.errorBody();
- if (responseBody != null) {
- JSONObject errorObject = new JSONObject(responseBody.string());
- String errorMessage = errorObject.getString(JSONUtils.DATA_KEY);
- if (!errorMessage.isEmpty() && !errorMessage.equals("null")) {
- Snackbar.make(coordinatorLayout, errorMessage, Snackbar.LENGTH_LONG).show();
- } else {
- Toast.makeText(RPANActivity.this,
- R.string.load_rpan_broadcasts_failed, Toast.LENGTH_SHORT).show();
- }
- } else {
- Toast.makeText(RPANActivity.this,
- R.string.load_rpan_broadcasts_failed, Toast.LENGTH_SHORT).show();
- }
- } catch (IOException | JSONException e) {
- e.printStackTrace();
- Toast.makeText(RPANActivity.this,
- R.string.load_rpan_broadcasts_failed, Toast.LENGTH_SHORT).show();
- }
- }
- }
-
- @Override
- public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
- progressBar.setVisibility(View.GONE);
- Toast.makeText(RPANActivity.this,
- R.string.load_rpan_broadcasts_failed, Toast.LENGTH_SHORT).show();
- }
- });
- } else {
- strapiRetrofit.create(Strapi.class).getRPANBroadcast(rpanBroadcastFullNameOrId).enqueue(new Callback<String>() {
- @Override
- public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
- progressBar.setVisibility(View.GONE);
- if (response.isSuccessful()) {
- Handler handler = new Handler();
- mExecutor.execute(() -> {
- try {
- rpanBroadcasts = new ArrayList<>();
- rpanBroadcasts.add(parseSingleRPANBroadcast(new JSONObject(response.body()).getJSONObject(JSONUtils.DATA_KEY)));
- handler.post(() -> initializeViewPager());
- } catch (JSONException e) {
- e.printStackTrace();
- handler.post(() -> Toast.makeText(RPANActivity.this,
- R.string.parse_rpan_broadcasts_failed, Toast.LENGTH_SHORT).show());
- }
- });
- } else {
- try {
- ResponseBody responseBody = response.errorBody();
- if (responseBody != null) {
- JSONObject errorObject = new JSONObject(responseBody.string());
- String errorMessage = errorObject.getString(JSONUtils.DATA_KEY);
- if (!errorMessage.isEmpty() && !errorMessage.equals("null")) {
- Snackbar.make(coordinatorLayout, errorMessage, Snackbar.LENGTH_LONG).show();
- } else {
- Toast.makeText(RPANActivity.this,
- R.string.load_rpan_broadcasts_failed, Toast.LENGTH_SHORT).show();
- }
- } else {
- Toast.makeText(RPANActivity.this,
- R.string.load_rpan_broadcasts_failed, Toast.LENGTH_SHORT).show();
- }
- } catch (IOException | JSONException e) {
- e.printStackTrace();
- Toast.makeText(RPANActivity.this,
- R.string.load_rpan_broadcasts_failed, Toast.LENGTH_SHORT).show();
- }
- }
- }
-
- @Override
- public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
- progressBar.setVisibility(View.GONE);
- Toast.makeText(RPANActivity.this,
- R.string.load_rpan_broadcasts_failed, Toast.LENGTH_SHORT).show();
- }
- });
- }
- }
-
- private void parseRPANBroadcasts(String response) {
- Handler handler = new Handler();
- mExecutor.execute(() -> {
- try {
- ArrayList<RPANBroadcast> rpanBroadcasts = new ArrayList<>();
- JSONObject responseObject = new JSONObject(response);
- String nextCursor = responseObject.getString(JSONUtils.NEXT_CURSOR_KEY);
-
- JSONArray dataArray = responseObject.getJSONArray(JSONUtils.DATA_KEY);
- for (int i = 0; i < dataArray.length(); i++) {
- try {
- JSONObject singleData = dataArray.getJSONObject(i);
- rpanBroadcasts.add(parseSingleRPANBroadcast(singleData));
- } catch (JSONException e) {
- e.printStackTrace();
- }
- }
-
- handler.post(() -> {
- RPANActivity.this.rpanBroadcasts = rpanBroadcasts;
- RPANActivity.this.nextCursor = nextCursor;
-
- initializeViewPager();
- });
- } catch (JSONException e) {
- e.printStackTrace();
- handler.post(() -> Toast.makeText(RPANActivity.this,
- R.string.parse_rpan_broadcasts_failed, Toast.LENGTH_SHORT).show());
- }
- });
- }
-
- private RPANBroadcast parseSingleRPANBroadcast(JSONObject singleData) throws JSONException {
- JSONObject rpanPostObject = singleData.getJSONObject(JSONUtils.POST_KEY);
- RPANBroadcast.RPANPost rpanPost = new RPANBroadcast.RPANPost(
- rpanPostObject.getString(JSONUtils.ID_KEY),
- rpanPostObject.getString(JSONUtils.TITLE_KEY),
- rpanPostObject.getJSONObject(JSONUtils.SUBREDDIT_KEY).getString(JSONUtils.NAME_KEY),
- rpanPostObject.getJSONObject(JSONUtils.SUBREDDIT_KEY).getJSONObject(JSONUtils.STYLES_KEY).getString(JSONUtils.ICON_KEY),
- rpanPostObject.getJSONObject(JSONUtils.AUTHOR_INFO_KEY).getString(JSONUtils.NAME_KEY),
- rpanPostObject.getInt(JSONUtils.SCORE_KEY),
- rpanPostObject.getString(JSONUtils.VOTE_STATE_KEY),
- rpanPostObject.getDouble(JSONUtils.UPVOTE_RATIO_CAMEL_CASE_KEY),
- rpanPostObject.getString(JSONUtils.PERMALINK_KEY),
- rpanPostObject.getJSONObject(JSONUtils.OUTBOUND_LINK_KEY).getString(JSONUtils.URL_KEY),
- rpanPostObject.getBoolean(JSONUtils.IS_NSFW_KEY),
- rpanPostObject.getBoolean(JSONUtils.IS_LOCKED_KEY),
- rpanPostObject.getBoolean(JSONUtils.IS_ARCHIVED_KEY),
- rpanPostObject.getBoolean(JSONUtils.IS_SPOILER),
- rpanPostObject.getString(JSONUtils.SUGGESTED_COMMENT_SORT_CAMEL_CASE_KEY),
- rpanPostObject.getString(JSONUtils.LIVE_COMMENTS_WEBSOCKET_KEY)
- );
-
- JSONObject rpanStreamObject = singleData.getJSONObject(JSONUtils.STREAM_KEY);
- RPANBroadcast.RPANStream rpanStream = new RPANBroadcast.RPANStream(
- rpanStreamObject.getString(JSONUtils.STREAM_ID_KEY),
- rpanStreamObject.getString(JSONUtils.HLS_URL_KEY),
- rpanStreamObject.getString(JSONUtils.THUMBNAIL_KEY),
- rpanStreamObject.getInt(JSONUtils.WIDTH_KEY),
- rpanStreamObject.getInt(JSONUtils.HEIGHT_KEY),
- rpanStreamObject.getLong(JSONUtils.PUBLISH_AT_KEY),
- rpanStreamObject.getString(JSONUtils.STATE_KEY)
- );
-
- return new RPANBroadcast(
- singleData.getInt(JSONUtils.UPVOTES_KEY),
- singleData.getInt(JSONUtils.DOWNVOTES_KEY),
- singleData.getInt(JSONUtils.UNIQUE_WATCHERS_KEY),
- singleData.getInt(JSONUtils.CONTINUOUS_WATCHERS_KEY),
- singleData.getInt(JSONUtils.TOTAL_CONTINUOUS_WATCHERS_KEY),
- singleData.getBoolean(JSONUtils.CHAT_DISABLED_KEY),
- singleData.getDouble(JSONUtils.BROADCAST_TIME_KEY),
- singleData.getDouble(JSONUtils.ESTIMATED_REMAINING_TIME_KEY),
- rpanPost,
- rpanStream
- );
- }
-
- private void initializeViewPager() {
- sectionsPagerAdapter = new SectionsPagerAdapter(this);
- viewPager2.setAdapter(sectionsPagerAdapter);
- viewPager2.setOffscreenPageLimit(3);
- fixViewPager2Sensitivity(viewPager2);
- }
-
- private void fixViewPager2Sensitivity(ViewPager2 viewPager2) {
- try {
- Field recyclerViewField = ViewPager2.class.getDeclaredField("mRecyclerView");
- recyclerViewField.setAccessible(true);
-
- RecyclerView recyclerView = (RecyclerView) recyclerViewField.get(viewPager2);
-
- Field touchSlopField = RecyclerView.class.getDeclaredField("mTouchSlop");
- touchSlopField.setAccessible(true);
-
- Object touchSlopBox = touchSlopField.get(recyclerView);
- if (touchSlopBox != null) {
- int touchSlop = (int) touchSlopBox;
- touchSlopField.set(recyclerView, touchSlop * 4);
- }
- } catch (NoSuchFieldException | IllegalAccessException ignore) {}
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.rpan_activity, menu);
- for (int i = 0; i < menu.size(); i++) {
- Utils.setTitleWithCustomFontToMenuItem(typeface, menu.getItem(i), null);
- }
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(@NonNull MenuItem item) {
- if (item.getItemId() == android.R.id.home) {
- finish();
- return true;
- } else if (item.getItemId() == R.id.action_share_rpan_link_rpan_activity) {
- if (rpanBroadcasts != null) {
- int position = viewPager2.getCurrentItem();
- if (position >= 0 && position < rpanBroadcasts.size()) {
- shareLink(rpanBroadcasts.get(position).rpanPost.rpanUrl);
- return true;
- }
- }
- } else if (item.getItemId() == R.id.action_share_post_link_rpan_activity) {
- if (rpanBroadcasts != null) {
- int position = viewPager2.getCurrentItem();
- if (position >= 0 && position < rpanBroadcasts.size()) {
- shareLink(rpanBroadcasts.get(position).rpanPost.postPermalink);
- return true;
- }
- }
- }
- return false;
- }
-
- @Override
- protected void onDestroy() {
- super.onDestroy();
- EventBus.getDefault().unregister(this);
- }
-
- private void shareLink(String link) {
- try {
- Intent intent = new Intent(Intent.ACTION_SEND);
- intent.setType("text/plain");
- intent.putExtra(Intent.EXTRA_TEXT, link);
- startActivity(Intent.createChooser(intent, getString(R.string.share)));
- } catch (ActivityNotFoundException e) {
- Toast.makeText(this, R.string.no_activity_found_for_share, Toast.LENGTH_SHORT).show();
- }
- }
-
- @Override
- public void setCustomFont(Typeface typeface, Typeface titleTypeface, Typeface contentTypeface) {
- this.typeface = typeface;
- }
-
- private class SectionsPagerAdapter extends FragmentStateAdapter {
-
- public SectionsPagerAdapter(FragmentActivity fa) {
- super(fa);
- }
-
- @NonNull
- @Override
- public Fragment createFragment(int position) {
- ViewRPANBroadcastFragment fragment = new ViewRPANBroadcastFragment();
- Bundle bundle = new Bundle();
- bundle.putParcelable(ViewRPANBroadcastFragment.EXTRA_RPAN_BROADCAST, rpanBroadcasts.get(position));
- fragment.setArguments(bundle);
- return fragment;
- }
-
- @Nullable
- private Fragment getCurrentFragment() {
- if (viewPager2 == null || getSupportFragmentManager() == null) {
- return null;
- }
- return getSupportFragmentManager().findFragmentByTag("f" + viewPager2.getCurrentItem());
- }
-
- @Override
- public int getItemCount() {
- return rpanBroadcasts == null ? 0 : rpanBroadcasts.size();
- }
- }
-} \ No newline at end of file
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/RPANCommentStreamRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/RPANCommentStreamRecyclerViewAdapter.java
deleted file mode 100644
index d3c029af..00000000
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/RPANCommentStreamRecyclerViewAdapter.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package ml.docilealligator.infinityforreddit.adapters;
-
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import androidx.annotation.NonNull;
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.bumptech.glide.Glide;
-import com.bumptech.glide.RequestManager;
-import com.bumptech.glide.request.RequestOptions;
-
-import java.util.ArrayList;
-
-import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
-import ml.docilealligator.infinityforreddit.R;
-import ml.docilealligator.infinityforreddit.RPANComment;
-import ml.docilealligator.infinityforreddit.activities.RPANActivity;
-
-public class RPANCommentStreamRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
- private RPANActivity activity;
- private RequestManager glide;
- private ArrayList<RPANComment> rpanComments;
-
- public RPANCommentStreamRecyclerViewAdapter(RPANActivity activity) {
- this.activity = activity;
- glide = Glide.with(activity);
- rpanComments = new ArrayList<>();
- }
-
- @NonNull
- @Override
- public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
- return new RPANCommentViewHolder(LayoutInflater.from(parent.getContext()).inflate(
- R.layout.item_rpan_comment, parent, false));
- }
-
- @Override
- public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
- if (holder instanceof RPANCommentViewHolder) {
- ((RPANCommentViewHolder) holder).authorTextView.setText(rpanComments.get(position).author);
- ((RPANCommentViewHolder) holder).contentTextView.setText(rpanComments.get(position).content);
- glide.load(rpanComments.get(position).authorIconImage)
- .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
- .error(glide.load(R.drawable.subreddit_default_icon)
- .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))))
- .into(((RPANCommentViewHolder) holder).iconImageView);
- }
- }
-
- @Override
- public int getItemCount() {
- return rpanComments == null ? 0 : rpanComments.size();
- }
-
- @Override
- public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
- super.onViewRecycled(holder);
- if (holder instanceof RPANCommentViewHolder) {
- glide.clear(((RPANCommentViewHolder) holder).iconImageView);
- }
- }
-
- public void addRPANComment(RPANComment rpanComment) {
- rpanComments.add(rpanComment);
- notifyItemInserted(rpanComments.size() - 1);
- }
-
- class RPANCommentViewHolder extends RecyclerView.ViewHolder {
- ImageView iconImageView;
- TextView authorTextView;
- TextView contentTextView;
-
- public RPANCommentViewHolder(@NonNull View itemView) {
- super(itemView);
- iconImageView = itemView.findViewById(R.id.icon_image_view_item_rpan_comment);
- authorTextView = itemView.findViewById(R.id.author_text_view_item_rpan_comment);
- contentTextView = itemView.findViewById(R.id.content_text_view_item_rpan_comment);
-
- if (activity.typeface != null) {
- authorTextView.setTypeface(activity.typeface);
- contentTextView.setTypeface(activity.typeface);
- }
- }
- }
-}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/navigationdrawer/RedditSectionRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/navigationdrawer/RedditSectionRecyclerViewAdapter.java
index ab6ed539..487e9d33 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/navigationdrawer/RedditSectionRecyclerViewAdapter.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/navigationdrawer/RedditSectionRecyclerViewAdapter.java
@@ -22,7 +22,7 @@ public class RedditSectionRecyclerViewAdapter extends RecyclerView.Adapter<Recyc
private static final int VIEW_TYPE_MENU_GROUP_TITLE = 1;
private static final int VIEW_TYPE_MENU_ITEM = 2;
- private static final int REDDIT_SECTION_ITEMS = 2;
+ private static final int REDDIT_SECTION_ITEMS = 1;
private BaseActivity baseActivity;
private int primaryTextColor;
@@ -85,10 +85,6 @@ public class RedditSectionRecyclerViewAdapter extends RecyclerView.Adapter<Recyc
switch (position) {
case 1:
- stringId = R.string.rpan;
- drawableId = R.drawable.ic_rpan_24dp;
- break;
- case 2:
stringId = R.string.trending;
drawableId = R.drawable.ic_trending_24dp;
break;
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/apis/Strapi.java b/app/src/main/java/ml/docilealligator/infinityforreddit/apis/Strapi.java
deleted file mode 100644
index e68b8850..00000000
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/apis/Strapi.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package ml.docilealligator.infinityforreddit.apis;
-
-import retrofit2.Call;
-import retrofit2.http.GET;
-import retrofit2.http.Path;
-
-public interface Strapi {
- @GET("/broadcasts")
- Call<String> getAllBroadcasts();
-
- @GET("/videos/{rpan_id_or_fullname}")
- Call<String> getRPANBroadcast(@Path("rpan_id_or_fullname") String rpanIdOrFullname);
-}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewRPANBroadcastFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewRPANBroadcastFragment.java
deleted file mode 100644
index b00f6d4c..00000000
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewRPANBroadcastFragment.java
+++ /dev/null
@@ -1,423 +0,0 @@
-package ml.docilealligator.infinityforreddit.fragments;
-
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.content.res.Configuration;
-import android.os.Bundle;
-import android.os.Handler;
-import android.view.LayoutInflater;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageButton;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import androidx.annotation.NonNull;
-import androidx.constraintlayout.widget.ConstraintLayout;
-import androidx.fragment.app.Fragment;
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.bumptech.glide.Glide;
-import com.bumptech.glide.request.RequestOptions;
-import com.google.android.exoplayer2.ExoPlaybackException;
-import com.google.android.exoplayer2.ExoPlayer;
-import com.google.android.exoplayer2.MediaItem;
-import com.google.android.exoplayer2.Player;
-import com.google.android.exoplayer2.Tracks;
-import com.google.android.exoplayer2.source.BehindLiveWindowException;
-import com.google.android.exoplayer2.source.hls.HlsMediaSource;
-import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
-import com.google.android.exoplayer2.ui.PlayerView;
-import com.google.android.exoplayer2.ui.TrackSelectionDialogBuilder;
-import com.google.android.exoplayer2.upstream.DataSource;
-import com.google.android.exoplayer2.upstream.DefaultHttpDataSource;
-import com.google.android.exoplayer2.upstream.cache.CacheDataSource;
-import com.google.android.exoplayer2.upstream.cache.SimpleCache;
-import com.google.common.collect.ImmutableList;
-
-import org.json.JSONException;
-import org.json.JSONObject;
-
-import java.util.concurrent.Executor;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-
-import butterknife.BindView;
-import butterknife.ButterKnife;
-import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
-import ml.docilealligator.infinityforreddit.Infinity;
-import ml.docilealligator.infinityforreddit.R;
-import ml.docilealligator.infinityforreddit.RPANBroadcast;
-import ml.docilealligator.infinityforreddit.RPANComment;
-import ml.docilealligator.infinityforreddit.activities.RPANActivity;
-import ml.docilealligator.infinityforreddit.adapters.RPANCommentStreamRecyclerViewAdapter;
-import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
-import ml.docilealligator.infinityforreddit.customviews.LinearLayoutManagerBugFixed;
-import ml.docilealligator.infinityforreddit.utils.APIUtils;
-import ml.docilealligator.infinityforreddit.utils.JSONUtils;
-import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
-import okhttp3.OkHttpClient;
-import okhttp3.Request;
-import okhttp3.WebSocket;
-import okhttp3.WebSocketListener;
-import retrofit2.Retrofit;
-
-public class ViewRPANBroadcastFragment extends Fragment {
-
- public static final String EXTRA_RPAN_BROADCAST = "ERB";
- private static final String IS_MUTE_STATE = "IMS";
-
- @BindView(R.id.constraint_layout_exo_rpan_broadcast_playback_control_view)
- ConstraintLayout constraintLayout;
- @BindView(R.id.player_view_view_rpan_broadcast_fragment)
- PlayerView playerView;
- @BindView(R.id.subreddit_icon_image_view_exo_rpan_broadcast_playback_control_view)
- ImageView subredditIconImageView;
- @BindView(R.id.subreddit_name_text_view_exo_rpan_broadcast_playback_control_view)
- TextView subredditNameTextView;
- @BindView(R.id.username_text_view_exo_rpan_broadcast_playback_control_view)
- TextView usernameTextView;
- @BindView(R.id.title_text_view_exo_rpan_broadcast_playback_control_view)
- TextView titleTextView;
- @BindView(R.id.recycler_view_exo_rpan_broadcast_playback_control_view)
- RecyclerView recyclerView;
- @BindView(R.id.mute_exo_rpan_broadcast_playback_control_view)
- ImageButton muteButton;
- @BindView(R.id.hd_exo_rpan_broadcast_playback_control_view)
- ImageButton hdButton;
- @Inject
- @Named("strapi")
- Retrofit mStrapiRetrofit;
- @Inject
- @Named("default")
- SharedPreferences mSharedPreferences;
- @Inject
- @Named("current_account")
- SharedPreferences mCurrentAccountSharedPreferences;
- @Inject
- CustomThemeWrapper mCustomThemeWrapper;
- @Inject
- Executor mExecutor;
- @Inject
- @Named("rpan")
- OkHttpClient okHttpClient;
- @Inject
- SimpleCache mSimpleCache;
- private RPANActivity mActivity;
- private RPANBroadcast rpanBroadcast;
- private ExoPlayer player;
- private DefaultTrackSelector trackSelector;
- private DataSource.Factory dataSourceFactory;
- private Handler handler;
- private RPANCommentStreamRecyclerViewAdapter adapter;
- private WebSocket webSocket;
-
- private boolean wasPlaying;
- private boolean isMute = false;
- private long resumePosition = -1;
- private boolean isDataSavingMode;
-
- public ViewRPANBroadcastFragment() {
- // Required empty public constructor
- }
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- // Inflate the layout for this fragment
- View rootView = inflater.inflate(R.layout.fragment_view_rpan_broadcast, container, false);
-
- ((Infinity) mActivity.getApplication()).getAppComponent().inject(this);
-
- ButterKnife.bind(this, rootView);
-
- if (mActivity.typeface != null) {
- subredditNameTextView.setTypeface(mActivity.typeface);
- usernameTextView.setTypeface(mActivity.typeface);
- titleTextView.setTypeface(mActivity.typeface);
- }
-
- rpanBroadcast = getArguments().getParcelable(EXTRA_RPAN_BROADCAST);
-
- if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT || getResources().getBoolean(R.bool.isTablet)) {
- //Set player controller bottom margin in order to display it above the navbar
- int resourceId = getResources().getIdentifier("navigation_bar_height", "dimen", "android");
- //LinearLayout controllerLinearLayout = findViewById(R.id.linear_layout_exo_playback_control_view);
- ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) constraintLayout.getLayoutParams();
- params.bottomMargin = getResources().getDimensionPixelSize(resourceId);
- } else {
- //Set player controller right margin in order to display it above the navbar
- int resourceId = getResources().getIdentifier("navigation_bar_height", "dimen", "android");
- //LinearLayout controllerLinearLayout = findViewById(R.id.linear_layout_exo_playback_control_view);
- ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) constraintLayout.getLayoutParams();
- params.rightMargin = getResources().getDimensionPixelSize(resourceId);
- }
-
- playerView.setControllerVisibilityListener(visibility -> {
- switch (visibility) {
- case View.GONE:
- mActivity.getWindow().getDecorView().setSystemUiVisibility(
- View.SYSTEM_UI_FLAG_LAYOUT_STABLE
- | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
- | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
- | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
- | View.SYSTEM_UI_FLAG_FULLSCREEN
- | View.SYSTEM_UI_FLAG_IMMERSIVE);
- playerView.setControllerShowTimeoutMs(0);
- break;
- case View.VISIBLE:
- mActivity.getWindow().getDecorView().setSystemUiVisibility(
- View.SYSTEM_UI_FLAG_LAYOUT_STABLE
- | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
- | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
- }
- });
-
- trackSelector = new DefaultTrackSelector(mActivity);
- player = new ExoPlayer.Builder(mActivity).setTrackSelector(trackSelector).build();
- playerView.setPlayer(player);
-
- wasPlaying = true;
-
- boolean muteVideo = mSharedPreferences.getBoolean(SharedPreferencesUtils.MUTE_VIDEO, false) ||
- (mSharedPreferences.getBoolean(SharedPreferencesUtils.MUTE_NSFW_VIDEO, false) && rpanBroadcast.rpanPost.isNsfw);
-
- if (savedInstanceState != null) {
- isMute = savedInstanceState.getBoolean(IS_MUTE_STATE);
- if (isMute) {
- player.setVolume(0f);
- muteButton.setImageResource(R.drawable.ic_mute_24dp);
- } else {
- player.setVolume(1f);
- muteButton.setImageResource(R.drawable.ic_unmute_24dp);
- }
- } else if (muteVideo) {
- isMute = true;
- player.setVolume(0f);
- muteButton.setImageResource(R.drawable.ic_mute_24dp);
- } else {
- muteButton.setImageResource(R.drawable.ic_unmute_24dp);
- }
-
- player.addListener(new Player.Listener() {
- @Override
- public void onTracksChanged(@NonNull Tracks tracks) {
- ImmutableList<Tracks.Group> trackGroups = tracks.getGroups();
- if (!trackGroups.isEmpty()) {
- if (isDataSavingMode) {
- trackSelector.setParameters(
- trackSelector.buildUponParameters()
- .setMaxVideoSize(720, 720));
- }
-
- hdButton.setVisibility(View.VISIBLE);
- hdButton.setOnClickListener(view -> {
- TrackSelectionDialogBuilder builder = new TrackSelectionDialogBuilder(mActivity, getString(R.string.select_video_quality), player, 0);
- builder.setShowDisableOption(true);
- builder.setAllowAdaptiveSelections(false);
- Dialog dialog = builder.build();
- dialog.show();
- if (dialog instanceof AlertDialog) {
- ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(mCustomThemeWrapper.getPrimaryTextColor());
- ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(mCustomThemeWrapper.getPrimaryTextColor());
- }
- });
-
- for (int i = 0; i < trackGroups.size(); i++) {
- String mimeType = trackGroups.get(i).getTrackFormat(0).sampleMimeType;
- if (mimeType != null && mimeType.contains("audio")) {
- muteButton.setVisibility(View.VISIBLE);
- muteButton.setOnClickListener(view -> {
- if (isMute) {
- isMute = false;
- player.setVolume(1f);
- muteButton.setImageResource(R.drawable.ic_unmute_24dp);
- } else {
- isMute = true;
- player.setVolume(0f);
- muteButton.setImageResource(R.drawable.ic_mute_24dp);
- }
- });
- break;
- }
- }
- } else {
- muteButton.setVisibility(View.GONE);
- }
- }
- });
-
- Glide.with(mActivity).load(rpanBroadcast.rpanPost.subredditIconUrl)
- .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
- .error(Glide.with(mActivity).load(R.drawable.subreddit_default_icon)
- .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))))
- .into(subredditIconImageView);
- subredditNameTextView.setText(rpanBroadcast.rpanPost.subredditName);
- usernameTextView.setText(rpanBroadcast.rpanPost.username);
- titleTextView.setText(rpanBroadcast.rpanPost.title);
-
- recyclerView.setOnTouchListener(new View.OnTouchListener() {
- float x1;
- float x2;
- float y1;
- float y2;
-
- @Override
- public boolean onTouch(View view, MotionEvent motionEvent) {
- switch (motionEvent.getAction()) {
- case MotionEvent.ACTION_DOWN:
- x1 = motionEvent.getX();
- y1 = motionEvent.getY();
- return true;
- case MotionEvent.ACTION_UP:
- x2 = motionEvent.getX();
- y2 = motionEvent.getY();
-
- if (x1 == x2 && y1 == y2) {
- playerView.hideController();
- }
-
- return true;
- }
-
- return false;
- }
- });
- adapter = new RPANCommentStreamRecyclerViewAdapter(mActivity);
- recyclerView.setAdapter(adapter);
-
- handler = new Handler();
-
- return rootView;
- }
-
- private boolean isBehindLiveWindow(ExoPlaybackException e) {
- if (e.type != ExoPlaybackException.TYPE_SOURCE) {
- return false;
- }
- Throwable cause = e.getSourceException();
- while (cause != null) {
- if (cause instanceof BehindLiveWindowException) {
- return true;
- }
- cause = cause.getCause();
- }
- return false;
- }
-
- private void parseComment(String commentJson) {
- mExecutor.execute(() -> {
- try {
- JSONObject commentObject = new JSONObject(commentJson);
- if (commentObject.getString(JSONUtils.TYPE_KEY).equals("new_comment")) {
- JSONObject payload = commentObject.getJSONObject(JSONUtils.PAYLOAD_KEY);
- RPANComment rpanComment = new RPANComment(
- payload.getString(JSONUtils.AUTHOR_KEY),
- payload.getString(JSONUtils.AUTHOR_ICON_IMAGE),
- payload.getString(JSONUtils.BODY_KEY),
- payload.getLong(JSONUtils.CREATED_UTC_KEY));
-
- handler.post(() -> {
- LinearLayoutManagerBugFixed manager = ((LinearLayoutManagerBugFixed) recyclerView.getLayoutManager());
- boolean shouldScrollToBottom = false;
- if (manager != null) {
- int lastPosition = manager.findLastCompletelyVisibleItemPosition();
- int currentItemCount = adapter.getItemCount();
- if (currentItemCount > 0 && lastPosition == currentItemCount - 1) {
- shouldScrollToBottom = true;
- }
- }
- adapter.addRPANComment(rpanComment);
- if (shouldScrollToBottom) {
- recyclerView.smoothScrollToPosition(adapter.getItemCount() - 1);
- }
- });
- }
- } catch (JSONException e) {
- e.printStackTrace();
- }
- });
- }
-
- @Override
- public void onSaveInstanceState(@NonNull Bundle outState) {
- super.onSaveInstanceState(outState);
- outState.putBoolean(IS_MUTE_STATE, isMute);
- }
-
- @Override
- public void onResume() {
- super.onResume();
- if (dataSourceFactory == null) {
- dataSourceFactory = new CacheDataSource.Factory().setCache(mSimpleCache)
- .setUpstreamDataSourceFactory(new DefaultHttpDataSource.Factory().setUserAgent(APIUtils.USER_AGENT));
- // Prepare the player with the source.
- player.prepare();
- player.setMediaSource(new HlsMediaSource.Factory(dataSourceFactory).createMediaSource(MediaItem.fromUri(rpanBroadcast.rpanStream.hlsUrl)));
- if (mSharedPreferences.getBoolean(SharedPreferencesUtils.LOOP_VIDEO, true)) {
- player.setRepeatMode(Player.REPEAT_MODE_ALL);
- } else {
- player.setRepeatMode(Player.REPEAT_MODE_OFF);
- }
- if (resumePosition > 0) {
- player.seekTo(resumePosition);
- }
- }
-
- if (wasPlaying) {
- player.setPlayWhenReady(true);
- }
-
- if (webSocket == null) {
- Request request = new Request.Builder().url(rpanBroadcast.rpanPost.liveCommentsWebsocketUrl).build();
- CommentStreamWebSocketListener listener = new CommentStreamWebSocketListener(this::parseComment);
- webSocket = okHttpClient.newWebSocket(request, listener);
- }
- }
-
- @Override
- public void onPause() {
- super.onPause();
- wasPlaying = player.getPlayWhenReady();
- player.setPlayWhenReady(false);
- }
-
- @Override
- public void onDestroy() {
- super.onDestroy();
- player.seekToDefaultPosition();
- player.stop(true);
- player.release();
-
- if (webSocket != null) {
- webSocket.cancel();
- }
- }
-
- @Override
- public void onAttach(@NonNull Context context) {
- super.onAttach(context);
- mActivity = (RPANActivity) context;
- }
-
- private static class CommentStreamWebSocketListener extends WebSocketListener {
- MessageReceivedListener messageReceivedListener;
-
- CommentStreamWebSocketListener(MessageReceivedListener messageReceivedListener) {
- this.messageReceivedListener = messageReceivedListener;
- }
-
- @Override
- public void onMessage(@NonNull WebSocket webSocket, @NonNull String text) {
- messageReceivedListener.onMessage(text);
- }
-
- interface MessageReceivedListener {
- void onMessage(String text);
- }
- }
-} \ No newline at end of file