Remove RPAN.

This commit is contained in:
Docile-Alligator 2022-12-04 09:44:37 +11:00
parent bc03d20845
commit f173a5d576
33 changed files with 1 additions and 1616 deletions

View File

@ -70,12 +70,6 @@
android:parentActivityName=".activities.MainActivity"
android:theme="@style/AppTheme.NoActionBar"
android:windowSoftInputMode="adjustResize" />
<activity
android:name=".activities.RPANActivity"
android:configChanges="orientation|screenSize|layoutDirection"
android:parentActivityName=".activities.MainActivity"
android:theme="@style/AppTheme.TranslucentStatusBar"
android:windowSoftInputMode="adjustPan" />
<activity
android:name=".activities.LockScreenActivity"
android:theme="@style/AppTheme.NoActionBar" />

View File

@ -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);

View File

@ -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);
}
}
}

View File

@ -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;
}
}

View File

@ -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));

View File

@ -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) {

View File

@ -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();
}
}
}

View File

@ -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);
}
}
}
}

View File

@ -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;

View File

@ -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);
}

View File

@ -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);
}
}
}

View File

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M21,6h-7.59l3.29,-3.29L16,2l-4,4 -4,-4 -0.71,0.71L10.59,6L3,6c-1.1,0 -2,0.89 -2,2v12c0,1.1 0.9,2 2,2h18c1.1,0 2,-0.9 2,-2L23,8c0,-1.11 -0.9,-2 -2,-2zM21,20L3,20L3,8h18v12zM9,10v8l7,-4z"/>
</vector>

View File

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/black"
android:pathData="M21,6h-7.59l3.29,-3.29L16,2l-4,4 -4,-4 -0.71,0.71L10.59,6L3,6c-1.1,0 -2,0.89 -2,2v12c0,1.1 0.9,2 2,2h18c1.1,0 2,-0.9 2,-2L23,8c0,-1.11 -0.9,-2 -2,-2zM21,20L3,20L3,8h18v12zM9,10v8l7,-4z"/>
</vector>

View File

@ -1,23 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
android:id="@+id/coordinator_layout_rpan_activity"
android:keepScreenOn="true"
tools:context=".activities.RPANActivity">
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/view_pager_2_rpan_activity"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ProgressBar
android:id="@+id/progress_bar_rpan_activity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@ -1,192 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#44000000"
android:id="@+id/constraint_layout_exo_rpan_broadcast_playback_control_view"
android:focusableInTouchMode="true"
xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="16dp"
android:paddingEnd="16dp"
app:layout_constraintBottom_toTopOf="@id/title_text_view_exo_rpan_broadcast_playback_control_view"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="1">
<ImageView
android:id="@+id/subreddit_icon_image_view_exo_rpan_broadcast_playback_control_view"
android:layout_width="24dp"
android:layout_height="24dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:id="@+id/subreddit_name_text_view_exo_rpan_broadcast_playback_control_view"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:paddingBottom="4dp"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:textColor="@color/colorAccent"
app:layout_constraintBottom_toTopOf="@id/username_text_view_exo_rpan_broadcast_playback_control_view"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toEndOf="@id/barrier5" />
<TextView
android:id="@+id/username_text_view_exo_rpan_broadcast_playback_control_view"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:textColor="#02BAEE"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/barrier5" />
<androidx.constraintlayout.widget.Barrier
android:id="@+id/barrier5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:barrierDirection="end"
app:constraint_referenced_ids="subreddit_icon_image_view_exo_rpan_broadcast_playback_control_view" />
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/title_text_view_exo_rpan_broadcast_playback_control_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:textColor="#FFFFFF"
android:textSize="20sp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/control_linear_layout"
app:layout_constraintVertical_bias="1" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/control_linear_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal"
android:paddingTop="4dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageButton
android:id="@+id/hd_exo_rpan_broadcast_playback_control_view"
style="@style/ExoMediaButton"
android:src="@drawable/ic_video_quality_24dp"
android:visibility="gone"
app:layout_constraintEnd_toStartOf="@+id/exo_rew"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintHorizontal_chainStyle="spread_inside"
app:layout_constraintStart_toStartOf="parent"
tools:layout_editor_absoluteY="4dp" />
<ImageButton
android:id="@id/exo_rew"
style="@style/ExoMediaButton.Rewind"
app:layout_constraintEnd_toStartOf="@+id/exo_play"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/hd_exo_rpan_broadcast_playback_control_view"
tools:layout_editor_absoluteY="4dp" />
<ImageButton
android:id="@id/exo_play"
style="@style/ExoMediaButton.Play"
app:layout_constraintEnd_toStartOf="@+id/exo_pause"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/exo_rew"
tools:layout_editor_absoluteY="4dp" />
<ImageButton
android:id="@id/exo_pause"
style="@style/ExoMediaButton.Pause"
app:layout_constraintEnd_toStartOf="@+id/exo_ffwd"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/exo_play"
tools:layout_editor_absoluteY="4dp" />
<ImageButton
android:id="@id/exo_ffwd"
style="@style/ExoMediaButton.FastForward"
app:layout_constraintEnd_toStartOf="@+id/mute_exo_rpan_broadcast_playback_control_view"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/exo_pause"
tools:layout_editor_absoluteY="4dp" />
<ImageButton
android:id="@+id/mute_exo_rpan_broadcast_playback_control_view"
style="@style/ExoMediaButton"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/exo_ffwd"
tools:layout_editor_absoluteY="4dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view_exo_rpan_broadcast_playback_control_view"
android:layout_width="match_parent"
android:layout_height="0dp"
android:paddingTop="16dp"
android:paddingStart="16dp"
android:paddingEnd="16dp"
app:layout_constraintTop_toBottomOf="@id/control_linear_layout"
app:layout_constraintBottom_toTopOf="@id/time_bar_linear_layout"
app:layoutManager="ml.docilealligator.infinityforreddit.customviews.LinearLayoutManagerBugFixed" />
<LinearLayout
android:id="@+id/time_bar_linear_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:padding="16dp"
android:gravity="center_vertical"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent">
<TextView android:id="@id/exo_position"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14sp"
android:textStyle="bold"
android:paddingStart="0dp"
android:paddingEnd="4dp"
android:includeFontPadding="false"
android:textColor="#FFFFFF"
android:fontFamily="?attr/font_family" />
<com.google.android.exoplayer2.ui.DefaultTimeBar
android:id="@id/exo_progress"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="26dp"
app:bar_height="2dp"
app:scrubber_color="@color/colorAccent"
app:played_color="@color/colorAccent" />
<TextView android:id="@id/exo_duration"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14sp"
android:textStyle="bold"
android:paddingStart="4dp"
android:paddingEnd="0dp"
android:includeFontPadding="false"
android:textColor="#FFFFFF"
android:fontFamily="?attr/font_family" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".fragments.ViewRPANBroadcastFragment">
<com.google.android.exoplayer2.ui.PlayerView
android:id="@+id/player_view_view_rpan_broadcast_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:controller_layout_id="@layout/exo_rpan_broadcast_playback_control_view" />
</FrameLayout>

View File

@ -1,38 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp">
<ImageView
android:id="@+id/icon_image_view_item_rpan_comment"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="center_vertical" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="center_vertical"
android:layout_marginStart="16dp"
android:layout_marginEnd="0dp"
android:orientation="vertical">
<TextView
android:id="@+id/author_text_view_item_rpan_comment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#02BAEE" />
<TextView
android:id="@+id/content_text_view_item_rpan_comment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:textColor="#FFFFFF" />
</LinearLayout>
</LinearLayout>

View File

@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_share_rpan_link_rpan_activity"
android:orderInCategory="1"
android:title="@string/action_share_rpan_link"
app:showAsAction="never" />
<item
android:id="@+id/action_share_post_link_rpan_activity"
android:orderInCategory="1"
android:title="@string/action_share_post_link"
app:showAsAction="never" />
</menu>

View File

@ -1021,12 +1021,9 @@ Zpráva: %2$s"</string>
Stále chcete tuto možnost povolit?"</string>
<string name="reply">"Odpovědět"</string>
<string name="rpan_activity_label">"RPAN"</string>
<string name="post_gallery_activity_label">"Příspěvek galerie"</string>
<string name="trending_activity_label">"Trendy"</string>
<string name="action_share_rpan_link">"Sdílet RPAN odkaz"</string>
<string name="action_share_post_link">"Sdílet odkaz příspěvku"</string>
<string name="rpan">"RPAN"</string>
<string name="trending">"Trendy"</string>
<string name="receive_post_reply_notifications">"Získávat oznámení o odpovědích na příspěvek"</string>
<string name="bottom_sheet_post_gallery">"Galerie"</string>
@ -1056,9 +1053,6 @@ Pokud ano, přejmenujte je, než povolíte Material You."</string>
<string name="upload_image_success">"Obrázek úspěšně nahrán. Klikněte znovu na tlačítko obrázku pro zobrazení nahraných obrázků."</string>
<string name="get_image_bitmap_failed">"Nepodařilo se získat bitmapu obrázku"</string>
<string name="upload_image_failed">"Nepodařilo se nahrát obrázek"</string>
<string name="load_rpan_broadcasts_failed">"Nepodařilo se načíst vysílání RPAN"</string>
<string name="parse_rpan_broadcasts_failed">"Nepodařilo se parsovat vysílání RPAN"</string>
<string name="parse_rpan_broadcast_failed">"Nepodařilo se parsovat vysílání RPAN"</string>
<string name="search_comments">"Hledat komentáře"</string>
<string name="please_wait_image_is_uploading">"Obrázek se stále nahrává. Čekejte prosím."</string>
<string name="error_fetch_trending_search">"Získávání trendů selhalo.

View File

@ -1104,12 +1104,9 @@ Nachricht: %2$s"</string>
Möchtest du trotzdem fortfahren?"</string>
<string name="reply">"Antworten"</string>
<string name="rpan_activity_label">"RPAN"</string>
<string name="post_gallery_activity_label">"Galeriebeitrag"</string>
<string name="trending_activity_label">"Trending"</string>
<string name="action_share_rpan_link">"Teile RPAN-Link"</string>
<string name="action_share_post_link">"Teile Beitragslink"</string>
<string name="rpan">"RPAN"</string>
<string name="trending">"Trending"</string>
<string name="receive_post_reply_notifications">"Benachrichtigungen für Antworten auf Beiträge empfangen"</string>
<string name="bottom_sheet_post_gallery">"Galerie"</string>
@ -1141,9 +1138,6 @@ Benenne diese Themen sonst neu."</string>
<string name="upload_image_success">"Bild erfolgreich hochgeladen. Klicken Sie nochmal auf Bilder um hochgeladene Bilder zu sehen."</string>
<string name="get_image_bitmap_failed">"Konnte das Bitmap des Bildes nicht herunterladen"</string>
<string name="upload_image_failed">"Das Bild konnte nicht hochgeladen werden"</string>
<string name="load_rpan_broadcasts_failed">"RPAN Broadcasts konnten nicht geladen werden"</string>
<string name="parse_rpan_broadcasts_failed">"RPAN Broadcasts konnten nicht gelesen werden"</string>
<string name="parse_rpan_broadcast_failed">"RPAN Broadcast konnte nicht gelesen werden"</string>
<string name="search_comments">"Kommentare durchsuchen"</string>
<string name="please_wait_image_is_uploading">"Ein Bild wird noch hochgeladen. Bitte warten Sie."</string>

View File

@ -1074,12 +1074,9 @@ Mensaje: %2$s"</string>
¿Seguro que quieres activarlo?"</string>
<string name="reply">"Responder"</string>
<string name="rpan_activity_label">"RPAN"</string>
<string name="post_gallery_activity_label">"Publicación de galería"</string>
<string name="trending_activity_label">"Tendencias"</string>
<string name="action_share_rpan_link">"Compartir enlace de RPAN"</string>
<string name="action_share_post_link">"Compartir enlace de publicación"</string>
<string name="rpan">"RPAN"</string>
<string name="trending">"Tendencias"</string>
<string name="receive_post_reply_notifications">"Recibir notificaciones de respuesta a publicaciones"</string>
<string name="bottom_sheet_post_gallery">"Galería"</string>
@ -1109,9 +1106,6 @@ De lo contrario, cambia el nombre antes de habilitar Material You."</string>
<string name="upload_image_success">"Imagen subida correctamente. Haga clic en el botón de imagen nuevamente para ver las imágenes cargadas."</string>
<string name="get_image_bitmap_failed">"No es posible obtener el mapa de bits de la imagen"</string>
<string name="upload_image_failed">"No es posible subir la imagen"</string>
<string name="load_rpan_broadcasts_failed">"No es posible cargar transmisiones RPAN"</string>
<string name="parse_rpan_broadcasts_failed">"No es posible analizar las transmisiones RPAN"</string>
<string name="parse_rpan_broadcast_failed">"No es posible analizar la transmisión RPAN"</string>
<string name="search_comments">"Buscar comentarios"</string>
<string name="please_wait_image_is_uploading">"Aún se está cargando una imagen. Espere por favor."</string>
<string name="error_fetch_trending_search">"Falló la obtención de las búsquedas de tendencias.

View File

@ -1091,11 +1091,8 @@ Les onglets pourraient perdre tout leur contenu quand vous passez d'un onglet à
Vous voulez toujours l'activer ?"</string>
<string name="reply">"Répondre"</string>
<string name="rpan_activity_label">"RPAN"</string>
<string name="trending_activity_label">"Tendance"</string>
<string name="action_share_rpan_link">"Partager le lien RPAN"</string>
<string name="action_share_post_link">"Partager le lien du Post"</string>
<string name="rpan">"RPAN"</string>
<string name="trending">"Tendance"</string>
<string name="receive_post_reply_notifications">"Recevoir des notifications de réponse de publication"</string>
<string name="bottom_sheet_post_gallery">"Gallerie"</string>
@ -1124,9 +1121,6 @@ Sinon, renommez-les avant d'activer Material You."</string>
<string name="upload_image_success">"Image uploadée avec succès. Clique sur le bouton image de nouveau pour voir les images uploadées."</string>
<string name="get_image_bitmap_failed">"Impossible d'obtenir le bitmap de l'image"</string>
<string name="upload_image_failed">"Impossible d'uploader l'image"</string>
<string name="load_rpan_broadcasts_failed">"Impossible de charger les diffusions RPAN"</string>
<string name="parse_rpan_broadcasts_failed">"Impossible d'analyser les diffusions RPAN"</string>
<string name="parse_rpan_broadcast_failed">"Impossible d'analyser la diffusion RPAN"</string>
<string name="search_comments">"Chercher des commentaires"</string>
<string name="please_wait_image_is_uploading">"Une image est toujours sn train d'être uploadée. Merci d'attendre"</string>
<string name="error_fetch_trending_search">"Échec de la récupération des recherches de tendance.

View File

@ -1010,12 +1010,9 @@ La riproduzione automatica video è disabilitata"</string>
Vuoi comunque abilitare l'opzione?"</string>
<string name="reply">"Rispondi"</string>
<string name="rpan_activity_label">"RPAN"</string>
<string name="post_gallery_activity_label">"Galleria post"</string>
<string name="trending_activity_label">"Popolari"</string>
<string name="action_share_rpan_link">"Condividi link RPAN"</string>
<string name="action_share_post_link">"Condividi post link"</string>
<string name="rpan">"RPAN"</string>
<string name="trending">"Popolari"</string>
<string name="receive_post_reply_notifications">"Ricevi notifiche per le risposte"</string>
<string name="bottom_sheet_post_gallery">"Galleria"</string>
@ -1045,9 +1042,6 @@ Se hai dei temi con questi nomi devi cambiarli prima di attivare la Personalizza
<string name="upload_image_success">"Immagine caricata. Clicca sul pulsante delle immagini per vedere le altre immagini caricate"</string>
<string name="get_image_bitmap_failed">"Impossibile prendere il bitmap dell'immagine"</string>
<string name="upload_image_failed">"Impossibile caricare l'immagine"</string>
<string name="load_rpan_broadcasts_failed">"Impossibile caricare RPAN"</string>
<string name="parse_rpan_broadcasts_failed">"Impossibile analizzare i broadcast RPAN"</string>
<string name="parse_rpan_broadcast_failed">"Impossibile analizzare il broadcast RPAN"</string>
<string name="search_comments">"Cerca tra i commenti"</string>
<string name="please_wait_image_is_uploading">"Attendere prego. Immagine in caricamento"</string>
<string name="error_fetch_trending_search">"Pagina non caricata. Tocca per riprovare"</string>

View File

@ -1009,12 +1009,9 @@ Bericht: %2$s"</string>
Wil je het nog steeds activeren?"</string>
<string name="reply">"Antwoord"</string>
<string name="rpan_activity_label">"RPAN"</string>
<string name="post_gallery_activity_label">"Gallerijpost"</string>
<string name="trending_activity_label">"Trending"</string>
<string name="action_share_rpan_link">"Deel RPAN Link"</string>
<string name="action_share_post_link">"Deel Post Link"</string>
<string name="rpan">"RPAN"</string>
<string name="trending">"Trending"</string>
<string name="receive_post_reply_notifications">"Ontvang Post Reactie Notificaties"</string>
<string name="bottom_sheet_post_gallery">"Gallerij"</string>
@ -1039,7 +1036,6 @@ Zo wel, hernoem ze voordat je Material You aanzet."</string>
<string name="uploading_image">"Uploaden"</string>
<string name="upload_image_success">"Afbeelding succesvol geüpload. Klik de afbeelding knop nogmaals om de geüploade afbeeldingen te zien."</string>
<string name="upload_image_failed">"Niet in staat de afbeelding te uploaden"</string>
<string name="load_rpan_broadcasts_failed">"Kan RPAN uitzending Niet laden"</string>
<string name="search_comments">"Zoek reacties"</string>
<string name="please_wait_image_is_uploading">"Een afbeelding is nog aan het uploaden. Even geduld aub."</string>
<string name="no_trending_search">"Geen trending zoekopdrachten gevonden. Tik om het opnieuw te proberen."</string>

View File

@ -1019,12 +1019,9 @@ Mensagem: %2$s"</string>
Ainda deseja ativá-lo?"</string>
<string name="reply">"Responder"</string>
<string name="rpan_activity_label">"RPAN"</string>
<string name="post_gallery_activity_label">"Postar Galeria"</string>
<string name="trending_activity_label">"Tendências"</string>
<string name="action_share_rpan_link">"Compartilhar Link de RPAN"</string>
<string name="action_share_post_link">"Compartilhar Link do Post"</string>
<string name="rpan">"RPAN"</string>
<string name="trending">"Em Alta"</string>
<string name="receive_post_reply_notifications">"Receber Notificações de Respostas às Postagens"</string>
<string name="bottom_sheet_post_gallery">"Galeria"</string>
@ -1054,9 +1051,6 @@ Se você tiver, os renomeie antes de ativar o Material You."</string>
<string name="upload_image_success">"Imagem enviada com sucesso. Clique novamente no botão de imagem para ver as imagem enviadas."</string>
<string name="get_image_bitmap_failed">"Erro ao receber o bitmap da imagem"</string>
<string name="upload_image_failed">"Erro ao enviar a imagem"</string>
<string name="load_rpan_broadcasts_failed">"Não foi possível carregar transmissões RPAN"</string>
<string name="parse_rpan_broadcasts_failed">"Não foi possível analisar transmissões RPAN"</string>
<string name="parse_rpan_broadcast_failed">"Não foi possível analisar transmissão RPAN"</string>
<string name="search_comments">"Procurar Comentários"</string>
<string name="please_wait_image_is_uploading">"Uma imagem ainda está sendo enviada. Por favor, aguarde."</string>
<string name="error_fetch_trending_search">"Busca de pesquisas em alta falhou.

View File

@ -1020,12 +1020,9 @@ Mensagem: %2$s"</string>
Ainda deseja ativar esta opção?"</string>
<string name="reply">"Responder"</string>
<string name="rpan_activity_label">"RPAN"</string>
<string name="post_gallery_activity_label">"Publicação de Galeria"</string>
<string name="trending_activity_label">"Tendências"</string>
<string name="action_share_rpan_link">"Partilhar Endereço RPAN"</string>
<string name="action_share_post_link">"Partilhar Endereço da Publicação"</string>
<string name="rpan">"RPAN"</string>
<string name="trending">"Tendências"</string>
<string name="receive_post_reply_notifications">"Receber notificações de respostas de publicações"</string>
<string name="bottom_sheet_post_gallery">"Galeria"</string>
@ -1055,9 +1052,6 @@ Caso contrário, altere o nome antes de ativar Material You"</string>
<string name="upload_image_success">"Imagem enviada com sucesso. Clicar no botão da imagem para ver as imagens enviadas."</string>
<string name="get_image_bitmap_failed">"Incapaz de obter o bitmap da imagem"</string>
<string name="upload_image_failed">"Incapaz de enviar a imagem"</string>
<string name="load_rpan_broadcasts_failed">"Não é possível carregar as emissões RPAN"</string>
<string name="parse_rpan_broadcasts_failed">"Não é possível analisar as emissões de RPAN"</string>
<string name="parse_rpan_broadcast_failed">"Não é possível analisar a emissão de RPAN"</string>
<string name="search_comments">"Pesquisar Comentários"</string>
<string name="please_wait_image_is_uploading">"Uma imagem ainda a ser enviada. Por favor aguarde."</string>
<string name="error_fetch_trending_search">"A obtenção de tendências falharam.

View File

@ -1063,12 +1063,9 @@ Mesaj: %2$s"</string>
Încă dorești să-l activezi?"</string>
<string name="reply">"Răspunde"</string>
<string name="rpan_activity_label">"RPAN"</string>
<string name="post_gallery_activity_label">"Postare Galerie"</string>
<string name="trending_activity_label">"În Tendințe"</string>
<string name="action_share_rpan_link">"Distribuie Link-ul RPAN"</string>
<string name="action_share_post_link">"Distribuie Link-ul Postării"</string>
<string name="rpan">"RPAN"</string>
<string name="trending">"În Tendințe"</string>
<string name="receive_post_reply_notifications">"Primește notificări de răspuns la postări"</string>
<string name="bottom_sheet_post_gallery">"Galerie"</string>
@ -1098,9 +1095,6 @@ Mesaj: %2$s"</string>
<string name="upload_image_success">"Imaginea a fost încărcată cu succes. Apasă din nou pe butonul de imagine pentru a vedea imaginile încărcate."</string>
<string name="get_image_bitmap_failed">"Nu s-a putut obține bitmap-ul imaginii"</string>
<string name="upload_image_failed">"Nu s-a putut încărca imaginea"</string>
<string name="load_rpan_broadcasts_failed">"Nu s-a putut încărca emisiunile RPAN"</string>
<string name="parse_rpan_broadcasts_failed">"Nu s-a putut afișa emisiunile RPAN"</string>
<string name="parse_rpan_broadcast_failed">"Nu s-a putut afișa emisiunea RPAN"</string>
<string name="search_comments">"Caută Comentariile"</string>
<string name="please_wait_image_is_uploading">"O imagine este încă în curs de încărcare. Te rugăm să aștepți."</string>
<string name="error_fetch_trending_search">"Obținerea căutărilor în tendințe a eșuat.

View File

@ -1033,12 +1033,9 @@ https://play.google.com/store/apps/details?id=ml.docilealligator.infinityforredd
Всё ещё хотите включить его?"</string>
<string name="reply">"Ответ"</string>
<string name="rpan_activity_label">"RPAN"</string>
<string name="post_gallery_activity_label">"Пост в галерее"</string>
<string name="trending_activity_label">"Популярное"</string>
<string name="action_share_rpan_link">"Поделиться ссылкой RPAN"</string>
<string name="action_share_post_link">"Поделиться ссылкой на пост"</string>
<string name="rpan">"RPAN"</string>
<string name="trending">"Популярное"</string>
<string name="receive_post_reply_notifications">"Получать уведомления об ответах на пост"</string>
<string name="bottom_sheet_post_gallery">"Галерея"</string>
@ -1068,9 +1065,6 @@ https://play.google.com/store/apps/details?id=ml.docilealligator.infinityforredd
<string name="upload_image_success">"Изображение успешно загружено. Нажмите кнопку «Изображение» ещё раз, чтобы просмотреть загруженные изображения."</string>
<string name="get_image_bitmap_failed">"Невозможно получить растровое изображение"</string>
<string name="upload_image_failed">"Невозможно загрузить изображение"</string>
<string name="load_rpan_broadcasts_failed">"Невозможно загрузить широковещательные сообщения RPAN"</string>
<string name="parse_rpan_broadcasts_failed">"Невозможно разобрать широковещательные сообщения RPAN"</string>
<string name="parse_rpan_broadcast_failed">"Невозможно разобрать широковещательную передачу RPAN"</string>
<string name="search_comments">"Поиск комментариев"</string>
<string name="please_wait_image_is_uploading">"Изображение загружается, подождите."</string>
<string name="error_fetch_trending_search">"Невозможно получить популярные поисковые запросы.

View File

@ -1063,12 +1063,9 @@ Yine de etkinleştirmek istiyor musunuz?"</string>
<string name="reply">"Yanıtla"</string>
<!-- What is RPAN? -->
<string name="rpan_activity_label">"Canlı Yayın"</string>
<string name="post_gallery_activity_label">"Galeri Gönderisi"</string>
<string name="trending_activity_label">"Trendler"</string>
<string name="action_share_rpan_link">"Canlı Yayın Bağlantısını Paylaş"</string>
<string name="action_share_post_link">"Gönderi Bağlantısını Paylaş"</string>
<string name="rpan">"Canlı Yayın"</string>
<string name="trending">"Trendler"</string>
<string name="receive_post_reply_notifications">"Gönderi yanıtlanınca bildirimlerini al"</string>
<string name="bottom_sheet_post_gallery">"Galeri"</string>
@ -1098,9 +1095,6 @@ Yoksa, Material You'u etkinleştirmeden önce bunları yeniden adlandırın."</s
<string name="upload_image_success">"Fotoğraf başarıyla yüklendi. Yüklenen fotoğrafları görmek için fotoğraf düğmesine tekrar tıklayın."</string>
<string name="get_image_bitmap_failed">"Fotoğrafın bitmap'i alınamıyor"</string>
<string name="upload_image_failed">"Fotoğraf yüklenemiyor"</string>
<string name="load_rpan_broadcasts_failed">"Canlı Yayınlar yüklenemiyor"</string>
<string name="parse_rpan_broadcasts_failed">"Canlı Yayınlar ayrıştırılamıyor"</string>
<string name="parse_rpan_broadcast_failed">"Canlı Yayın ayrıştırılamıyor"</string>
<string name="search_comments">"Yorumları Ara"</string>
<string name="please_wait_image_is_uploading">"Hâlâ bir fotoğraf yükleniyor. Lütfen bekleyin."</string>
<string name="error_fetch_trending_search">"Trend aramalar getirilemedi.

View File

@ -1013,12 +1013,9 @@ https://play.google.com/store/apps/details?id=ml.docilealligator.infinityforredd
Усе ще бажаєте ввімкнути це?"</string>
<string name="reply">"Відповісти"</string>
<string name="rpan_activity_label">"RPAN"</string>
<string name="post_gallery_activity_label">"Допис галереї"</string>
<string name="trending_activity_label">"Тенденції"</string>
<string name="action_share_rpan_link">"Поширити ланку RPAN"</string>
<string name="action_share_post_link">"Поширити ланку допису"</string>
<string name="rpan">"RPAN"</string>
<string name="trending">"Тенденції"</string>
<string name="receive_post_reply_notifications">"Отримувати сповіщення про відповіді на дописи"</string>
<string name="bottom_sheet_post_gallery">"Галерея"</string>
@ -1048,9 +1045,6 @@ https://play.google.com/store/apps/details?id=ml.docilealligator.infinityforredd
<string name="upload_image_success">"Зображення успішно відвантажене. Клацніть кнопку зображення ще раз, щоб переглянути відвантажені зображення."</string>
<string name="get_image_bitmap_failed">"Неможливо отримати bitmap зображення"</string>
<string name="upload_image_failed">"Неможливо відвантажити зображення"</string>
<string name="load_rpan_broadcasts_failed">"Не вдалося завантажити трансляції RPAN"</string>
<string name="parse_rpan_broadcasts_failed">"Не вдалося проаналізувати трансляції RPAN"</string>
<string name="parse_rpan_broadcast_failed">"Не вдалося проаналізувати трансляцію RPAN"</string>
<string name="search_comments">"Пошук коментарів"</string>
<string name="please_wait_image_is_uploading">"Зображення все ще завантажується. Будь ласка, зачекайте."</string>
<string name="error_fetch_trending_search">"Не вдалося отримати тенденції пошуку.

View File

@ -1034,12 +1034,9 @@ Thông báo: %2$s"</string>
Bạn có vẫn muốn bật tuỳ chọn này không?"</string>
<string name="reply">"Trả lời"</string>
<string name="rpan_activity_label">"RPAN"</string>
<string name="post_gallery_activity_label">"Bài đăng bộ sưu tập"</string>
<string name="trending_activity_label">"Trending"</string>
<string name="action_share_rpan_link">"Chia sẻ đường link RPAN"</string>
<string name="action_share_post_link">"Chia sẻ đường link bài đăng"</string>
<string name="rpan">"RPAN"</string>
<string name="trending">"Trending"</string>
<string name="receive_post_reply_notifications">"Nhận thông báo trả lời trong bài đăng"</string>
<string name="bottom_sheet_post_gallery">"Bộ sưu tập"</string>
@ -1069,9 +1066,6 @@ Nếu không thì thay tên chúng trước khi Bật Material You."</string>
<string name="upload_image_success">"Tải hình ảnh thành công. Ấn vào nút hình ảnh lần nữa để thấy hình ảnh vửa tải lên."</string>
<string name="get_image_bitmap_failed">"Không thể lấy bitmap của hình ảnh"</string>
<string name="upload_image_failed">"Không thể tải hình ảnh lên"</string>
<string name="load_rpan_broadcasts_failed">"Không thể tải broadcast RPAN"</string>
<string name="parse_rpan_broadcasts_failed">"Không thể xử lý broadcast RPAN"</string>
<string name="parse_rpan_broadcast_failed">"Không thể xử lý broadcast RPAN"</string>
<string name="search_comments">"Tìm kiếm bình luận"</string>
<string name="please_wait_image_is_uploading">"Hình ảnh vẫn đang tải. Vui lòng đợi."</string>
<string name="error_fetch_trending_search">"Lấy mục tìm kiếm thịnh hành thất bại.

View File

@ -1102,12 +1102,9 @@ https://play.google.com/store/apps/details?id=ml.docilealligator.infinityforredd
仍然要继续吗?"</string>
<string name="reply">"回复"</string>
<string name="rpan_activity_label">"直播"</string>
<string name="post_gallery_activity_label">"相册帖"</string>
<string name="trending_activity_label">"热门"</string>
<string name="action_share_rpan_link">"分享直播链接"</string>
<string name="action_share_post_link">"分享帖子链接"</string>
<string name="rpan">"直播"</string>
<string name="trending">"热门"</string>
<string name="receive_post_reply_notifications">"接收帖子回复提醒"</string>
<string name="bottom_sheet_post_gallery">"相册"</string>
@ -1137,9 +1134,6 @@ https://play.google.com/store/apps/details?id=ml.docilealligator.infinityforredd
<string name="upload_image_success">"上传图片成功。再次点击图片按钮查看已上传的图片。"</string>
<string name="get_image_bitmap_failed">"无法获取图片位图"</string>
<string name="upload_image_failed">"无法上传图片"</string>
<string name="load_rpan_broadcasts_failed">"无法加载 RPAN 直播"</string>
<string name="parse_rpan_broadcasts_failed">"无法解析 RPAN 直播"</string>
<string name="parse_rpan_broadcast_failed">"无法解析 RPAN 直播"</string>
<string name="search_comments">"搜索评论"</string>
<string name="please_wait_image_is_uploading">"仍有图片正在上传,请稍候。"</string>
<string name="error_fetch_trending_search">"获取热搜失败。

View File

@ -39,7 +39,6 @@
<string name="post_filter_preference_activity_label">Post Filter</string>
<string name="search_users_result_activity_label">Users</string>
<string name="multireddit_selection_activity_label">Select a Multireddit</string>
<string name="rpan_activity_label">RPAN</string>
<string name="post_gallery_activity_label">Gallery Post</string>
<string name="trending_activity_label">Trending</string>
<string name="wiki_activity_label">Wiki</string>
@ -91,7 +90,6 @@
<string name="action_add_to_post_filter">Add to Post Filter</string>
<string name="action_delete_logs">Delete Logs</string>
<string name="action_create_github_issue">Create GitHub Issue</string>
<string name="action_share_rpan_link">Share RPAN Link</string>
<string name="action_share_post_link">Share Post Link</string>
<string name="action_go_to_wiki">Go to Wiki</string>
<string name="action_playback_speed">Playback Speed</string>
@ -139,7 +137,6 @@
<string name="history">History</string>
<string name="inbox">Inbox</string>
<string name="inbox_with_count">Inbox (%1$,d)</string>
<string name="rpan">RPAN</string>
<string name="trending">Trending</string>
<string name="upvoted">Upvoted</string>
<string name="downvoted">Downvoted</string>
@ -1211,10 +1208,6 @@
<string name="get_image_bitmap_failed">Unable to get the bitmap of the image</string>
<string name="upload_image_failed">Unable to upload the image</string>
<string name="load_rpan_broadcasts_failed">Cannot load RPAN broadcasts</string>
<string name="parse_rpan_broadcasts_failed">Cannot parse RPAN broadcasts</string>
<string name="parse_rpan_broadcast_failed">Cannot parse RPAN broadcast</string>
<string name="search_comments">Search Comments</string>
<string name="please_wait_image_is_uploading">An image is still being uploaded. Please wait.</string>