1 Commits

Author SHA1 Message Date
Bazsalanszky
1d9854cb0e Test build1 2024-08-12 09:46:48 +02:00
68 changed files with 804 additions and 2074 deletions

View File

@@ -6,12 +6,12 @@ clone:
steps:
build:
image: alvrme/alpine-android:android-34-jdk17
image: alvrme/alpine-android:android-34-jdk11
commands:
- apk add --no-cache python3
- ./gradlew :app:assembleNightly
sign:
image: alvrme/alpine-android:android-34-jdk17
image: alvrme/alpine-android:android-34-jdk11
commands:
- ./scripts/apk-sign.sh eu.toldi.infinityforlemmy.nightly.apk app/build/outputs/apk/nightly/eu.toldi.infinityforlemmy.nightly.apk
secrets: [ APK_KS_PASS, APK_KS, APK_KS_ALIAS ]

View File

@@ -245,7 +245,6 @@ dependencies {
implementation "io.noties.markwon:simple-ext:$markwonVersion"
implementation "io.noties.markwon:inline-parser:$markwonVersion"
implementation "io.noties.markwon:image-glide:$markwonVersion"
implementation "io.noties.markwon:html:$markwonVersion"
implementation 'com.atlassian.commonmark:commonmark-ext-gfm-tables:0.14.0'
implementation 'me.saket:better-link-movement-method:2.2.0'

View File

@@ -5,7 +5,7 @@ import androidx.annotation.NonNull;
import java.util.HashMap;
import java.util.Map;
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
import eu.toldi.infinityforlemmy.dto.DeleteCommentDTO;
import eu.toldi.infinityforlemmy.dto.DeletePostDTO;
import eu.toldi.infinityforlemmy.utils.APIUtils;
@@ -19,7 +19,7 @@ public class DeleteThing {
public static void deletePost(Retrofit retrofit, int post_id, String accessToken, DeleteThingListener deleteThingListener) {
Map<String, String> params = new HashMap<>();
params.put(APIUtils.ID_KEY, String.valueOf(post_id));
retrofit.create(LemmyBetaAPI.class).postDelete(new DeletePostDTO(post_id, true, accessToken)).enqueue(new Callback<String>() {
retrofit.create(LemmyAPI.class).postDelete(new DeletePostDTO(post_id, true, accessToken)).enqueue(new Callback<String>() {
@Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if (response.isSuccessful()) {
@@ -39,7 +39,7 @@ public class DeleteThing {
public static void deleteComment(Retrofit retrofit, int comment_id, String accessToken, DeleteThingListener deleteThingListener) {
Map<String, String> params = new HashMap<>();
params.put(APIUtils.ID_KEY, String.valueOf(comment_id));
retrofit.create(LemmyBetaAPI.class).commentDelete(new DeleteCommentDTO(comment_id, true, accessToken)).enqueue(new Callback<String>() {
retrofit.create(LemmyAPI.class).commentDelete(new DeleteCommentDTO(comment_id, true, accessToken)).enqueue(new Callback<String>() {
@Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if (response.isSuccessful()) {

View File

@@ -4,7 +4,7 @@ import androidx.annotation.NonNull;
import java.util.ArrayList;
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
import eu.toldi.infinityforlemmy.subscribeduser.SubscribedUserData;
@@ -19,7 +19,7 @@ public class FetchSubscribedThing {
final ArrayList<SubscribedUserData> subscribedUserData,
final ArrayList<SubredditData> subredditData,
final FetchSubscribedThingListener fetchSubscribedThingListener) {
LemmyBetaAPI api = retrofit.create(LemmyBetaAPI.class);
LemmyAPI api = retrofit.create(LemmyAPI.class);
Call<String> subredditDataCall = api.listCommunities("Subscribed",null,page,null,accessToken);
subredditDataCall.enqueue(new Callback<String>() {

View File

@@ -11,7 +11,6 @@ import dagger.Module;
import dagger.Provides;
import eu.toldi.infinityforlemmy.apis.RedgifsAPI;
import eu.toldi.infinityforlemmy.apis.StreamableAPI;
import eu.toldi.infinityforlemmy.apis.provider.ApiHandlerProvider;
import eu.toldi.infinityforlemmy.comment.LemmyCommentAPI;
import eu.toldi.infinityforlemmy.post.LemmyPostAPI;
import eu.toldi.infinityforlemmy.privatemessage.LemmyPrivateMessageAPI;
@@ -59,12 +58,6 @@ abstract class NetworkModule {
return new RetrofitHolder(okHttpClient);
}
@Provides
@Singleton
static ApiHandlerProvider provideApiHandlerProvider(@Named("base") OkHttpClient okHttpClient) {
return new ApiHandlerProvider(okHttpClient);
}
/*@Provides
@Named("base")
@Singleton

View File

@@ -30,7 +30,7 @@ import javax.inject.Named;
import eu.toldi.infinityforlemmy.account.Account;
import eu.toldi.infinityforlemmy.activities.InboxActivity;
import eu.toldi.infinityforlemmy.activities.LinkResolverActivity;
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
import eu.toldi.infinityforlemmy.comment.Comment;
import eu.toldi.infinityforlemmy.comment.ParseComment;
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
@@ -182,7 +182,7 @@ public class PullNotificationWorker extends Worker {
if (retryCount < 0) {
return null;
}
Call<String> call = mRetrofit.getRetrofit().create(LemmyBetaAPI.class).userReplies("New", 1, 25, true, account.getAccessToken());
Call<String> call = mRetrofit.getRetrofit().create(LemmyAPI.class).userReplies("New", 1, 25, true, account.getAccessToken());
Response<String> response = call.execute();
if (response.isSuccessful()) {

View File

@@ -0,0 +1,53 @@
package eu.toldi.infinityforlemmy;
import androidx.annotation.NonNull;
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
import eu.toldi.infinityforlemmy.dto.SaveCommentDTO;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
public class SaveComment implements SaveThing {
@Override
public void saveThing(Retrofit retrofit, String accessToken, int id, SaveThingListener saveThingListener) {
retrofit.create(LemmyAPI.class).commentSave(new SaveCommentDTO(id, true, accessToken)).enqueue(new Callback<String>() {
@Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if (response.isSuccessful()) {
saveThingListener.success();
} else {
saveThingListener.failed();
}
}
@Override
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
saveThingListener.failed();
}
});
}
@Override
public void unsaveThing(Retrofit retrofit, String accessToken, int id, SaveThingListener saveThingListener) {
retrofit.create(LemmyAPI.class).commentSave(new SaveCommentDTO(id, false, accessToken)).enqueue(new Callback<String>() {
@Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if (response.isSuccessful()) {
saveThingListener.success();
} else {
saveThingListener.failed();
}
}
@Override
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
saveThingListener.failed();
}
});
}
}

View File

@@ -0,0 +1,55 @@
package eu.toldi.infinityforlemmy;
import androidx.annotation.NonNull;
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
import eu.toldi.infinityforlemmy.dto.SavePostDTO;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
public class SavePost implements SaveThing {
@Override
public void saveThing(Retrofit retrofit, String accessToken, int id, SaveThingListener saveThingListener) {
retrofit.create(LemmyAPI.class).postSave(new SavePostDTO(id, true, accessToken)).enqueue(new Callback<String>() {
@Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if (response.isSuccessful()) {
saveThingListener.success();
} else {
saveThingListener.failed();
}
}
@Override
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
saveThingListener.failed();
}
});
}
@Override
public void unsaveThing(Retrofit retrofit, String accessToken, int id, SaveThingListener saveThingListener) {
retrofit.create(LemmyAPI.class).postSave(new SavePostDTO(id, false, accessToken)).enqueue(new Callback<String>() {
@Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if (response.isSuccessful()) {
saveThingListener.success();
} else {
saveThingListener.failed();
}
}
@Override
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
saveThingListener.failed();
}
});
}
}

View File

@@ -0,0 +1,136 @@
package eu.toldi.infinityforlemmy;
import android.content.Context;
import android.widget.Toast;
import androidx.annotation.NonNull;
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
import eu.toldi.infinityforlemmy.dto.CommentVoteDTO;
import eu.toldi.infinityforlemmy.dto.PostVoteDTO;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Retrofit;
/**
* Created by alex on 3/14/18.
*/
public class VoteThing {
public static void votePost(Context context, final Retrofit retrofit, String accessToken,
final VoteThingListener voteThingListener, final int postID,
final int point, final int position) {
LemmyAPI api = retrofit.create(LemmyAPI.class);
Call<String> voteThingCall = api.postLike(new PostVoteDTO(postID, point, accessToken));
voteThingCall.enqueue(new Callback<String>() {
@Override
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
if (response.isSuccessful()) {
voteThingListener.onVoteThingSuccess(position);
} else {
voteThingListener.onVoteThingFail(position);
Toast.makeText(context, "Code " + response.code() + " Body: " + response.body(), Toast.LENGTH_LONG).show();
}
}
@Override
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
voteThingListener.onVoteThingFail(position);
Toast.makeText(context, "Network error " + "Body: " + t.getMessage(), Toast.LENGTH_LONG).show();
}
});
}
public static void votePost(Context context, final Retrofit retrofit, String accessToken,
final VoteThingWithoutPositionListener voteThingWithoutPositionListener,
final int postID, final int point) {
LemmyAPI api = retrofit.create(LemmyAPI.class);
Call<String> voteThingCall = api.postLike(new PostVoteDTO(postID, point, accessToken));
voteThingCall.enqueue(new Callback<String>() {
@Override
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
if (response.isSuccessful()) {
voteThingWithoutPositionListener.onVoteThingSuccess();
} else {
voteThingWithoutPositionListener.onVoteThingFail();
Toast.makeText(context, "Code " + response.code() + " Body: " + response.body(), Toast.LENGTH_LONG).show();
}
}
@Override
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
voteThingWithoutPositionListener.onVoteThingFail();
Toast.makeText(context, "Network error " + "Body: " + t.getMessage(), Toast.LENGTH_LONG).show();
}
});
}
public static void voteComment(Context context, final Retrofit retrofit, String accessToken,
final VoteThingListener voteThingListener, final int commentId,
final int point, final int position) {
LemmyAPI api = retrofit.create(LemmyAPI.class);
Call<String> voteThingCall = api.commentLike(new CommentVoteDTO(commentId, point, accessToken));
voteThingCall.enqueue(new Callback<String>() {
@Override
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
if (response.isSuccessful()) {
voteThingListener.onVoteThingSuccess(position);
} else {
voteThingListener.onVoteThingFail(position);
Toast.makeText(context, "Code " + response.code() + " Body: " + response.body(), Toast.LENGTH_LONG).show();
}
}
@Override
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
voteThingListener.onVoteThingFail(position);
Toast.makeText(context, "Network error " + "Body: " + t.getMessage(), Toast.LENGTH_LONG).show();
}
});
}
public static void voteComment(Context context, final Retrofit retrofit, String accessToken,
final VoteThingWithoutPositionListener voteThingWithoutPositionListener,
final int commentId, final int point) {
LemmyAPI api = retrofit.create(LemmyAPI.class);
Call<String> voteThingCall = api.commentLike(new CommentVoteDTO(commentId, point, accessToken));
voteThingCall.enqueue(new Callback<String>() {
@Override
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
if (response.isSuccessful()) {
voteThingWithoutPositionListener.onVoteThingSuccess();
} else {
voteThingWithoutPositionListener.onVoteThingFail();
Toast.makeText(context, "Code " + response.code() + " Body: " + response.body(), Toast.LENGTH_LONG).show();
}
}
@Override
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
voteThingWithoutPositionListener.onVoteThingFail();
Toast.makeText(context, "Network error " + "Body: " + t.getMessage(), Toast.LENGTH_LONG).show();
}
});
}
public interface VoteThingListener {
void onVoteThingSuccess(int position);
void onVoteThingFail(int position);
}
public interface VoteThingWithoutPositionListener {
void onVoteThingSuccess();
void onVoteThingFail();
}
}

View File

@@ -7,7 +7,7 @@ import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
import eu.toldi.infinityforlemmy.blockedcommunity.BlockedCommunityData;
import eu.toldi.infinityforlemmy.blockedinstances.BlockedInstanceData;
import eu.toldi.infinityforlemmy.blockeduser.BlockedUserData;
@@ -21,9 +21,9 @@ import retrofit2.Retrofit;
public class FetchBlockedThings {
public static void fetchBlockedThings(Retrofit mRetrofit, String accessToken, String accountName, FetchBlockedThingsListener fetchBlockedThingsListener) {
LemmyBetaAPI lemmyBetaAPI = mRetrofit.create(LemmyBetaAPI.class);
LemmyAPI lemmyAPI = mRetrofit.create(LemmyAPI.class);
Call<String> call = lemmyBetaAPI.getSiteInfo(accessToken);
Call<String> call = lemmyAPI.getSiteInfo(accessToken);
call.enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String> call, retrofit2.Response<String> response) {

View File

@@ -45,7 +45,7 @@ import eu.toldi.infinityforlemmy.RetrofitHolder;
import eu.toldi.infinityforlemmy.UploadImageEnabledActivity;
import eu.toldi.infinityforlemmy.UploadedImage;
import eu.toldi.infinityforlemmy.adapters.MarkdownBottomBarRecyclerViewAdapter;
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
import eu.toldi.infinityforlemmy.bottomsheetfragments.UploadedImagesBottomSheetFragment;
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
@@ -227,7 +227,7 @@ public class EditCommentActivity extends BaseActivity implements UploadImageEnab
String content = contentEditText.getText().toString();
retrofit.getRetrofit().create(LemmyBetaAPI.class).commentEdit(new EditCommentDTO(mCommentId, content, null, null, mAccessToken))
retrofit.getRetrofit().create(LemmyAPI.class).commentEdit(new EditCommentDTO(mCommentId, content, null, null, mAccessToken))
.enqueue(new Callback<String>() {
@Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {

View File

@@ -55,7 +55,7 @@ import eu.toldi.infinityforlemmy.RetrofitHolder;
import eu.toldi.infinityforlemmy.UploadImageEnabledActivity;
import eu.toldi.infinityforlemmy.UploadedImage;
import eu.toldi.infinityforlemmy.adapters.MarkdownBottomBarRecyclerViewAdapter;
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
import eu.toldi.infinityforlemmy.bottomsheetfragments.UploadedImagesBottomSheetFragment;
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
@@ -308,7 +308,7 @@ public class EditPostActivity extends BaseActivity implements UploadImageEnabled
isSubmitting = true;
Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_SHORT).show();
mRetrofit.getRetrofit().create(LemmyBetaAPI.class).postUpdate(new EditPostDTO(mPost.getId(), titleEditText.getText().toString(), (linkEditText.getText().toString().isEmpty()) ? null : linkEditText.getText().toString(), contentEditText.getText().toString(), mPost.isNSFW(), null, mAccessToken))
mRetrofit.getRetrofit().create(LemmyAPI.class).postUpdate(new EditPostDTO(mPost.getId(), titleEditText.getText().toString(), (linkEditText.getText().toString().isEmpty()) ? null : linkEditText.getText().toString(), contentEditText.getText().toString(), mPost.isNSFW(), null, mAccessToken))
.enqueue(new Callback<String>() {
@Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {

View File

@@ -32,7 +32,6 @@ import eu.toldi.infinityforlemmy.Infinity;
import eu.toldi.infinityforlemmy.R;
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
import eu.toldi.infinityforlemmy.RetrofitHolder;
import eu.toldi.infinityforlemmy.apis.provider.ApiHandlerProvider;
import eu.toldi.infinityforlemmy.asynctasks.SwitchAccount;
import eu.toldi.infinityforlemmy.comment.Comment;
import eu.toldi.infinityforlemmy.comment.FetchComment;
@@ -88,9 +87,6 @@ public class LinkResolverActivity extends AppCompatActivity {
@Named("no_oauth")
RetrofitHolder mRetrofit;
@Inject
ApiHandlerProvider apiHandlerProvider;
@Inject
Executor mExecutor;
@@ -120,7 +116,6 @@ public class LinkResolverActivity extends AppCompatActivity {
mRetrofit.setBaseURL(instance);
if (mCurrentAccountSharedPreferences.getBoolean(SharedPreferencesUtils.BEARER_TOKEN_AUTH, true)) {
mRetrofit.setAccessToken(mAccessToken);
apiHandlerProvider.setAccessToken(mAccessToken);
}
}

View File

@@ -44,7 +44,7 @@ import eu.toldi.infinityforlemmy.R;
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
import eu.toldi.infinityforlemmy.RetrofitHolder;
import eu.toldi.infinityforlemmy.adapters.CustomArrayAdapter;
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
import eu.toldi.infinityforlemmy.asynctasks.ParseAndInsertNewAccount;
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
@@ -196,7 +196,7 @@ public class LoginActivity extends BaseActivity {
Log.i("LoginActivity", "Instance: " + instance);
AccountLoginDTO accountLoginDTO = new AccountLoginDTO(username, password_input.getText().toString(), token_2fa_input.getText().toString());
mRetrofit.setBaseURL(instance);
LemmyBetaAPI api = mRetrofit.getRetrofit().create(LemmyBetaAPI.class);
LemmyAPI api = mRetrofit.getRetrofit().create(LemmyAPI.class);
Call<String> accessTokenCall = api.userLogin(accountLoginDTO);
String finalInstance = instance;
accessTokenCall.enqueue(new Callback<String>() {

View File

@@ -90,7 +90,6 @@ import eu.toldi.infinityforlemmy.account.AccountViewModel;
import eu.toldi.infinityforlemmy.adapters.SubredditAutocompleteRecyclerViewAdapter;
import eu.toldi.infinityforlemmy.adapters.navigationdrawer.NavigationDrawerRecyclerViewMergedAdapter;
import eu.toldi.infinityforlemmy.apis.RedditAPI;
import eu.toldi.infinityforlemmy.apis.provider.ApiHandlerProvider;
import eu.toldi.infinityforlemmy.asynctasks.InsertSubscribedThings;
import eu.toldi.infinityforlemmy.asynctasks.SwitchAccount;
import eu.toldi.infinityforlemmy.asynctasks.SwitchToAnonymousMode;
@@ -184,8 +183,6 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
@Named("no_oauth")
RetrofitHolder mRetrofit;
@Inject
ApiHandlerProvider apiHandlerProvider;
@Inject
@Named("oauth")
Retrofit mOauthRetrofit;
@Inject
@@ -350,7 +347,6 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
mRetrofit.setAccessToken(mAccessToken);
apiHandlerProvider.setAccessToken(mAccessToken);
mBearerTokenUsed = mCurrentAccountSharedPreferences.getBoolean(SharedPreferencesUtils.BEARER_TOKEN_AUTH, true);
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
@@ -358,7 +354,6 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
String instance = (mAccessToken == null) ? mSharedPreferences.getString(SharedPreferencesUtils.ANONYMOUS_ACCOUNT_INSTANCE, APIUtils.API_BASE_URI) : mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_INSTANCE, null);
if (instance != null) {
mRetrofit.setBaseURL(instance);
apiHandlerProvider.setBaseUrl(instance);
}
if (savedInstanceState != null) {
@@ -384,7 +379,6 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
String instancePreference = mSharedPreferences.getString(SharedPreferencesUtils.ANONYMOUS_ACCOUNT_INSTANCE, APIUtils.API_BASE_URI);
if (!instancePreference.startsWith(mRetrofit.getBaseURL())) {
mRetrofit.setBaseURL(instancePreference);
apiHandlerProvider.setBaseUrl(instancePreference);
this.recreate();
}
} else {
@@ -871,12 +865,12 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
}
} else if (stringId == R.string.enable_nsfw) {
if (sectionsPagerAdapter != null) {
mNsfwAndSpoilerSharedPreferences.edit().putBoolean((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.NSFW_BASE, true).apply();
mNsfwAndSpoilerSharedPreferences.edit().putBoolean((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.NSFW_BASE, true).apply();
sectionsPagerAdapter.changeNSFW(true);
}
} else if (stringId == R.string.disable_nsfw) {
if (sectionsPagerAdapter != null) {
mNsfwAndSpoilerSharedPreferences.edit().putBoolean((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.NSFW_BASE, false).apply();
mNsfwAndSpoilerSharedPreferences.edit().putBoolean((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.NSFW_BASE, false).apply();
sectionsPagerAdapter.changeNSFW(false);
}
} else if (stringId == R.string.settings) {
@@ -934,17 +928,17 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
navDrawerRecyclerView.setLayoutManager(new LinearLayoutManagerBugFixed(this));
navDrawerRecyclerView.setAdapter(adapter.getConcatAdapter());
int tabCount = mMainActivityTabsSharedPreferences.getInt((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.MAIN_PAGE_TAB_COUNT, 3);
mShowFavoriteMultiReddits = mMainActivityTabsSharedPreferences.getBoolean((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.MAIN_PAGE_SHOW_FAVORITE_MULTIREDDITS, false);
mShowMultiReddits = mMainActivityTabsSharedPreferences.getBoolean((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.MAIN_PAGE_SHOW_MULTIREDDITS, false);
mShowFavoriteSubscribedSubreddits = mMainActivityTabsSharedPreferences.getBoolean((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.MAIN_PAGE_SHOW_FAVORITE_SUBSCRIBED_SUBREDDITS, false);
mShowSubscribedSubreddits = mMainActivityTabsSharedPreferences.getBoolean((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.MAIN_PAGE_SHOW_SUBSCRIBED_SUBREDDITS, false);
int tabCount = mMainActivityTabsSharedPreferences.getInt((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.MAIN_PAGE_TAB_COUNT, 3);
mShowFavoriteMultiReddits = mMainActivityTabsSharedPreferences.getBoolean((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.MAIN_PAGE_SHOW_FAVORITE_MULTIREDDITS, false);
mShowMultiReddits = mMainActivityTabsSharedPreferences.getBoolean((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.MAIN_PAGE_SHOW_MULTIREDDITS, false);
mShowFavoriteSubscribedSubreddits = mMainActivityTabsSharedPreferences.getBoolean((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.MAIN_PAGE_SHOW_FAVORITE_SUBSCRIBED_SUBREDDITS, false);
mShowSubscribedSubreddits = mMainActivityTabsSharedPreferences.getBoolean((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.MAIN_PAGE_SHOW_SUBSCRIBED_SUBREDDITS, false);
sectionsPagerAdapter = new SectionsPagerAdapter(this, tabCount, mShowFavoriteMultiReddits,
mShowMultiReddits, mShowFavoriteSubscribedSubreddits, mShowSubscribedSubreddits);
viewPager2.setAdapter(sectionsPagerAdapter);
viewPager2.setOffscreenPageLimit(ViewPager2.OFFSCREEN_PAGE_LIMIT_DEFAULT);
viewPager2.setUserInputEnabled(!mDisableSwipingBetweenTabs);
if (mMainActivityTabsSharedPreferences.getBoolean((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.MAIN_PAGE_SHOW_TAB_NAMES, true)) {
if (mMainActivityTabsSharedPreferences.getBoolean((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.MAIN_PAGE_SHOW_TAB_NAMES, true)) {
if (mShowFavoriteMultiReddits || mShowMultiReddits || mShowFavoriteSubscribedSubreddits || mShowSubscribedSubreddits) {
tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
} else {
@@ -953,13 +947,13 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
new TabLayoutMediator(tabLayout, viewPager2, (tab, position) -> {
switch (position) {
case 0:
Utils.setTitleWithCustomFontToTab(typeface, tab, mMainActivityTabsSharedPreferences.getString((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.MAIN_PAGE_TAB_1_TITLE, getString(R.string.subscribed_feed)));
Utils.setTitleWithCustomFontToTab(typeface, tab, mMainActivityTabsSharedPreferences.getString((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.MAIN_PAGE_TAB_1_TITLE, getString(R.string.subscribed_feed)));
break;
case 1:
Utils.setTitleWithCustomFontToTab(typeface, tab, mMainActivityTabsSharedPreferences.getString((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.MAIN_PAGE_TAB_2_TITLE, getString(R.string.local)));
Utils.setTitleWithCustomFontToTab(typeface, tab, mMainActivityTabsSharedPreferences.getString((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.MAIN_PAGE_TAB_2_TITLE, getString(R.string.local)));
break;
case 2:
Utils.setTitleWithCustomFontToTab(typeface, tab, mMainActivityTabsSharedPreferences.getString((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.MAIN_PAGE_TAB_3_TITLE, getString(R.string.all)));
Utils.setTitleWithCustomFontToTab(typeface, tab, mMainActivityTabsSharedPreferences.getString((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.MAIN_PAGE_TAB_3_TITLE, getString(R.string.all)));
break;
}
if (position >= tabCount && (mShowFavoriteMultiReddits || mShowMultiReddits ||
@@ -1007,7 +1001,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
loadSubscriptions();
multiRedditViewModel = new ViewModelProvider(this, new MultiRedditViewModel.Factory(getApplication(),
mRedditDataRoomDatabase, mAccountQualifiedName == null ? "-" : mAccountQualifiedName))
mRedditDataRoomDatabase, mAccountName == null ? "-" : mAccountName))
.get(MultiRedditViewModel.class);
multiRedditViewModel.getAllFavoriteMultiReddits().observe(this, multiReddits -> {
@@ -1168,12 +1162,10 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
int minorVersion = Integer.parseInt(version[1]);
if (majorVersion > 0 || (majorVersion == 0 && minorVersion >= 19)) {
mRetrofit.setAccessToken(mAccessToken);
apiHandlerProvider.setAccessToken(mAccessToken);
mCurrentAccountSharedPreferences.edit().putBoolean(SharedPreferencesUtils.BEARER_TOKEN_AUTH, true).apply();
checkUserToken();
} else {
mRetrofit.setAccessToken(null);
apiHandlerProvider.setAccessToken(null);
mCurrentAccountSharedPreferences.edit().putBoolean(SharedPreferencesUtils.BEARER_TOKEN_AUTH, false).apply();
}
}
@@ -1527,7 +1519,6 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
url = urlObj.getProtocol() + "://" + urlObj.getHost() + "/";
mSharedPreferences.edit().putString(SharedPreferencesUtils.ANONYMOUS_ACCOUNT_INSTANCE, url).apply();
mRetrofit.setBaseURL(url);
apiHandlerProvider.setBaseUrl(url);
sectionsPagerAdapter.getCurrentFragment().refresh();
} catch (MalformedURLException e) {
thingEditText.setError("Invalid URL");
@@ -1557,7 +1548,6 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
url = urlObj.getProtocol() + "://" + urlObj.getHost() + "/";
mSharedPreferences.edit().putString(SharedPreferencesUtils.ANONYMOUS_ACCOUNT_INSTANCE, url).apply();
mRetrofit.setBaseURL(url);
apiHandlerProvider.setBaseUrl(url);
sectionsPagerAdapter.getCurrentFragment().refresh();
} catch (MalformedURLException e) {
thingEditText.setError("Invalid URL");
@@ -1604,7 +1594,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
return false;
});
boolean nsfw = mNsfwAndSpoilerSharedPreferences.getBoolean((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.NSFW_BASE, false);
boolean nsfw = mNsfwAndSpoilerSharedPreferences.getBoolean((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.NSFW_BASE, false);
thingEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
@@ -1716,7 +1706,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
private void randomThing() {
RandomBottomSheetFragment randomBottomSheetFragment = new RandomBottomSheetFragment();
Bundle bundle = new Bundle();
bundle.putBoolean(RandomBottomSheetFragment.EXTRA_IS_NSFW, !mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_NSFW_FOREVER, false) && mNsfwAndSpoilerSharedPreferences.getBoolean((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.NSFW_BASE, false));
bundle.putBoolean(RandomBottomSheetFragment.EXTRA_IS_NSFW, !mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_NSFW_FOREVER, false) && mNsfwAndSpoilerSharedPreferences.getBoolean((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.NSFW_BASE, false));
randomBottomSheetFragment.setArguments(bundle);
randomBottomSheetFragment.show(getSupportFragmentManager(), randomBottomSheetFragment.getTag());
}
@@ -1777,8 +1767,8 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
@Override
public Fragment createFragment(int position) {
if (position == 0) {
int postType = mMainActivityTabsSharedPreferences.getInt((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.MAIN_PAGE_TAB_1_POST_TYPE, SharedPreferencesUtils.MAIN_PAGE_TAB_POST_TYPE_HOME);
String name = mMainActivityTabsSharedPreferences.getString((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.MAIN_PAGE_TAB_1_NAME, "");
int postType = mMainActivityTabsSharedPreferences.getInt((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.MAIN_PAGE_TAB_1_POST_TYPE, SharedPreferencesUtils.MAIN_PAGE_TAB_POST_TYPE_HOME);
String name = mMainActivityTabsSharedPreferences.getString((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.MAIN_PAGE_TAB_1_NAME, "");
return generatePostFragment(postType, name);
} else {
if (showFavoriteMultiReddits) {
@@ -1820,11 +1810,11 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
int postType;
String name;
if (position == 1) {
postType = mMainActivityTabsSharedPreferences.getInt((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.MAIN_PAGE_TAB_2_POST_TYPE, SharedPreferencesUtils.MAIN_PAGE_TAB_POST_TYPE_POPULAR);
name = mMainActivityTabsSharedPreferences.getString((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.MAIN_PAGE_TAB_2_NAME, "");
postType = mMainActivityTabsSharedPreferences.getInt((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.MAIN_PAGE_TAB_2_POST_TYPE, SharedPreferencesUtils.MAIN_PAGE_TAB_POST_TYPE_POPULAR);
name = mMainActivityTabsSharedPreferences.getString((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.MAIN_PAGE_TAB_2_NAME, "");
} else {
postType = mMainActivityTabsSharedPreferences.getInt((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.MAIN_PAGE_TAB_3_POST_TYPE, SharedPreferencesUtils.MAIN_PAGE_TAB_POST_TYPE_ALL);
name = mMainActivityTabsSharedPreferences.getString((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.MAIN_PAGE_TAB_3_NAME, "");
postType = mMainActivityTabsSharedPreferences.getInt((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.MAIN_PAGE_TAB_3_POST_TYPE, SharedPreferencesUtils.MAIN_PAGE_TAB_POST_TYPE_ALL);
name = mMainActivityTabsSharedPreferences.getString((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.MAIN_PAGE_TAB_3_NAME, "");
}
return generatePostFragment(postType, name);
}

View File

@@ -63,12 +63,12 @@ import eu.toldi.infinityforlemmy.LoadingMorePostsStatus;
import eu.toldi.infinityforlemmy.R;
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
import eu.toldi.infinityforlemmy.RetrofitHolder;
import eu.toldi.infinityforlemmy.SaveComment;
import eu.toldi.infinityforlemmy.SaveThing;
import eu.toldi.infinityforlemmy.SortType;
import eu.toldi.infinityforlemmy.SortTypeSelectionCallback;
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
import eu.toldi.infinityforlemmy.apis.RedditAPI;
import eu.toldi.infinityforlemmy.apis.apihandler.ApiHandler;
import eu.toldi.infinityforlemmy.apis.provider.ApiHandlerProvider;
import eu.toldi.infinityforlemmy.asynctasks.SwitchAccount;
import eu.toldi.infinityforlemmy.comment.Comment;
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
@@ -139,8 +139,6 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
@Named("oauth")
Retrofit mOauthRetrofit;
@Inject
ApiHandlerProvider apiHandlerProvider;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
@Named("default")
@@ -458,10 +456,10 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
}
public void saveComment(@NonNull Comment comment, int position) {
SaveComment saveComment = new SaveComment();
if (comment.isSaved()) {
comment.setSaved(false);
apiHandlerProvider.getApiHandler().unsaveComment(comment.getId(),mAccessToken, new ApiHandler.SaveCommentListener() {
saveComment.unsaveThing(mOauthRetrofit, mAccessToken, comment.getId(), new SaveThing.SaveThingListener() {
@Override
public void success() {
ViewPostDetailFragment fragment = sectionsPagerAdapter.getCurrentFragment();
@@ -472,7 +470,7 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
}
@Override
public void onFailure() {
public void failed() {
ViewPostDetailFragment fragment = sectionsPagerAdapter.getCurrentFragment();
if (fragment != null) {
fragment.saveComment(position, true);
@@ -482,7 +480,7 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
});
} else {
comment.setSaved(true);
apiHandlerProvider.getApiHandler().saveComment(comment.getId(), mAccessToken,new ApiHandler.SaveCommentListener() {
saveComment.saveThing(mRetrofit.getRetrofit(), mAccessToken, comment.getId(), new SaveThing.SaveThingListener() {
@Override
public void success() {
ViewPostDetailFragment fragment = sectionsPagerAdapter.getCurrentFragment();
@@ -493,7 +491,7 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
}
@Override
public void onFailure() {
public void failed() {
ViewPostDetailFragment fragment = sectionsPagerAdapter.getCurrentFragment();
if (fragment != null) {
fragment.saveComment(position, false);
@@ -539,7 +537,7 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
int nextPage = posts.size() / 25 + 1;
mExecutor.execute(() -> {
LemmyBetaAPI api = mRetrofit.getRetrofit().create(LemmyBetaAPI.class);
LemmyAPI api = mRetrofit.getRetrofit().create(LemmyAPI.class);
Call<String> call;
switch (postType) {

View File

@@ -33,17 +33,21 @@ import butterknife.BindView;
import butterknife.ButterKnife;
import eu.toldi.infinityforlemmy.NetworkState;
import eu.toldi.infinityforlemmy.R;
import eu.toldi.infinityforlemmy.SaveComment;
import eu.toldi.infinityforlemmy.SaveThing;
import eu.toldi.infinityforlemmy.VoteThing;
import eu.toldi.infinityforlemmy.activities.BaseActivity;
import eu.toldi.infinityforlemmy.activities.LinkResolverActivity;
import eu.toldi.infinityforlemmy.activities.ViewPostDetailActivity;
import eu.toldi.infinityforlemmy.activities.ViewSubredditDetailActivity;
import eu.toldi.infinityforlemmy.apis.apihandler.ApiHandler;
import eu.toldi.infinityforlemmy.bottomsheetfragments.CommentMoreBottomSheetFragment;
import eu.toldi.infinityforlemmy.bottomsheetfragments.UrlMenuBottomSheetFragment;
import eu.toldi.infinityforlemmy.comment.Comment;
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
import eu.toldi.infinityforlemmy.customviews.CommentIndentationView;
import eu.toldi.infinityforlemmy.customviews.CustomMarkwonAdapter;
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
import eu.toldi.infinityforlemmy.customviews.SpoilerOnClickTextView;
import eu.toldi.infinityforlemmy.customviews.SwipeLockInterface;
import eu.toldi.infinityforlemmy.customviews.SwipeLockLinearLayoutManager;
import eu.toldi.infinityforlemmy.databinding.ItemCommentBinding;
@@ -76,7 +80,6 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
};
private BaseActivity mActivity;
private Retrofit retrofit;
private ApiHandler apiHandler;
private Locale mLocale;
private Markwon mMarkwon;
private RecyclerView.RecycledViewPool recycledViewPool;
@@ -103,14 +106,13 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
private NetworkState networkState;
private RetryLoadingMoreCallback mRetryLoadingMoreCallback;
public CommentsListingRecyclerViewAdapter(BaseActivity activity, Retrofit oauthRetrofit,ApiHandler apiHandler,
public CommentsListingRecyclerViewAdapter(BaseActivity activity, Retrofit oauthRetrofit,
CustomThemeWrapper customThemeWrapper, Locale locale,
SharedPreferences sharedPreferences, String accessToken,
String accountName, RetryLoadingMoreCallback retryLoadingMoreCallback) {
super(DIFF_CALLBACK);
mActivity = activity;
retrofit = oauthRetrofit;
this.apiHandler = apiHandler;
mCommentColor = customThemeWrapper.getCommentColor();
int commentSpoilerBackgroundColor = mCommentColor | 0xFF000000;
mLocale = locale;
@@ -201,7 +203,10 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
} else {
((CommentBaseViewHolder) holder).commentTimeTextView.setText(Utils.getFormattedTime(mLocale, comment.getCommentTimeMillis(), mTimeFormatPattern));
}
mMarkwon.setMarkdown(((CommentBaseViewHolder) holder).commentMarkdownView, comment.getCommentMarkdown());
((CommentViewHolder) holder).markwonAdapter.setMarkdown(mMarkwon, comment.getCommentMarkdown());
// noinspection NotifyDataSetChanged
((CommentBaseViewHolder) holder).markwonAdapter.notifyDataSetChanged();
String commentText = Utils.getNVotes(mShowAbsoluteNumberOfVotes,
comment.getScore() + comment.getVoteType());
@@ -249,6 +254,8 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
if (holder instanceof CommentBaseViewHolder) {
((CommentBaseViewHolder) holder).authorFlairTextView.setText("");
((CommentBaseViewHolder) holder).authorFlairTextView.setVisibility(View.GONE);
((CommentBaseViewHolder) holder).awardsTextView.setText("");
((CommentBaseViewHolder) holder).awardsTextView.setVisibility(View.GONE);
((CommentBaseViewHolder) holder).upvoteButton.setIconResource(R.drawable.ic_upvote_24dp);
((CommentBaseViewHolder) holder).upvoteButton.setIconTint(ColorStateList.valueOf(mCommentIconAndInfoColor));
((CommentBaseViewHolder) holder).scoreTextView.setTextColor(mCommentIconAndInfoColor);
@@ -320,7 +327,8 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
TextView authorTextView;
TextView authorFlairTextView;
TextView commentTimeTextView;
TextView commentMarkdownView;
TextView awardsTextView;
RecyclerView commentMarkdownView;
ConstraintLayout bottomConstraintLayout;
MaterialButton upvoteButton;
TextView scoreTextView;
@@ -330,6 +338,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
MaterialButton saveButton;
MaterialButton replyButton;
View commentDivider;
CustomMarkwonAdapter markwonAdapter;
CommentBaseViewHolder(@NonNull View itemView) {
super(itemView);
@@ -339,7 +348,8 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
TextView authorTextView,
TextView authorFlairTextView,
TextView commentTimeTextView,
TextView commentMarkdownView,
TextView awardsTextView,
RecyclerView commentMarkdownView,
ConstraintLayout bottomConstraintLayout,
MaterialButton upvoteButton,
TextView scoreTextView,
@@ -355,6 +365,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
this.authorTextView = authorTextView;
this.authorFlairTextView = authorFlairTextView;
this.commentTimeTextView = commentTimeTextView;
this.awardsTextView = awardsTextView;
this.commentMarkdownView = commentMarkdownView;
this.bottomConstraintLayout = bottomConstraintLayout;
this.upvoteButton = upvoteButton;
@@ -419,12 +430,14 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
authorTextView.setTypeface(mActivity.typeface);
authorFlairTextView.setTypeface(mActivity.typeface);
commentTimeTextView.setTypeface(mActivity.typeface);
awardsTextView.setTypeface(mActivity.typeface);
upvoteButton.setTypeface(mActivity.typeface);
}
itemView.setBackgroundColor(mCommentBackgroundColor);
authorTextView.setTextColor(mUsernameColor);
authorFlairTextView.setTextColor(mAuthorFlairColor);
commentTimeTextView.setTextColor(mSecondaryTextColor);
awardsTextView.setTextColor(mSecondaryTextColor);
upvoteButton.setIconTint(ColorStateList.valueOf(mCommentIconAndInfoColor));
scoreTextView.setTextColor(mCommentIconAndInfoColor);
downvoteButton.setIconTint(ColorStateList.valueOf(mCommentIconAndInfoColor));
@@ -482,7 +495,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
}
});
commentMarkdownView.setRecycledViewPool(recycledViewPool);
LinearLayoutManagerBugFixed linearLayoutManager = new SwipeLockLinearLayoutManager(mActivity, new SwipeLockInterface() {
@Override
public void lockSwipe() {
@@ -494,7 +507,18 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
mActivity.unlockSwipeRightToGoBack();
}
});
commentMarkdownView.setLayoutManager(linearLayoutManager);
markwonAdapter = MarkdownUtils.createCustomTablesAdapter();
markwonAdapter.setOnClickListener(view -> {
if (view instanceof SpoilerOnClickTextView) {
if (((SpoilerOnClickTextView) view).isSpoilerOnClick()) {
((SpoilerOnClickTextView) view).setSpoilerOnClick(false);
return;
}
}
itemView.callOnClick();
});
commentMarkdownView.setAdapter(markwonAdapter);
upvoteButton.setOnClickListener(view -> {
if (mAccessToken == null) {
@@ -534,39 +558,40 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
comment.getScore() + comment.getVoteType()));
apiHandler.voteComment(comment.getId(), newVoteType, mAccessToken, new ApiHandler.VoteListener() {
@Override
public void onVoteThingSuccess() {
int currentPosition = getBindingAdapterPosition();
if (newVoteType == Integer.parseInt(APIUtils.DIR_UPVOTE)) {
comment.setVoteType(Comment.VOTE_TYPE_UPVOTE);
if (currentPosition == position) {
upvoteButton.setIconResource(R.drawable.ic_upvote_filled_24dp);
upvoteButton.setIconTint(ColorStateList.valueOf(mUpvotedColor));
scoreTextView.setTextColor(mUpvotedColor);
}
} else {
comment.setVoteType(Comment.VOTE_TYPE_NO_VOTE);
if (currentPosition == position) {
upvoteButton.setIconResource(R.drawable.ic_upvote_24dp);
upvoteButton.setIconTint(ColorStateList.valueOf(mCommentIconAndInfoColor));
scoreTextView.setTextColor(mCommentIconAndInfoColor);
}
}
if (currentPosition == position) {
downvoteButton.setIconResource(R.drawable.ic_downvote_24dp);
downvoteButton.setIconTint(ColorStateList.valueOf(mCommentIconAndInfoColor));
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
comment.getScore() + comment.getVoteType()));
}
VoteThing.voteComment(mActivity, retrofit, mAccessToken, new VoteThing.VoteThingListener() {
@Override
public void onVoteThingSuccess(int position1) {
int currentPosition = getBindingAdapterPosition();
if (newVoteType == Integer.parseInt(APIUtils.DIR_UPVOTE)) {
comment.setVoteType(Comment.VOTE_TYPE_UPVOTE);
if (currentPosition == position) {
upvoteButton.setIconResource(R.drawable.ic_upvote_filled_24dp);
upvoteButton.setIconTint(ColorStateList.valueOf(mUpvotedColor));
scoreTextView.setTextColor(mUpvotedColor);
}
@Override
public void onVoteThingFail() {
} else {
comment.setVoteType(Comment.VOTE_TYPE_NO_VOTE);
if (currentPosition == position) {
upvoteButton.setIconResource(R.drawable.ic_upvote_24dp);
upvoteButton.setIconTint(ColorStateList.valueOf(mCommentIconAndInfoColor));
scoreTextView.setTextColor(mCommentIconAndInfoColor);
}
});
}
if (currentPosition == position) {
downvoteButton.setIconResource(R.drawable.ic_downvote_24dp);
downvoteButton.setIconTint(ColorStateList.valueOf(mCommentIconAndInfoColor));
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
comment.getScore() + comment.getVoteType()));
}
}
@Override
public void onVoteThingFail(int position) {
}
}, comment.getId(), newVoteType, getBindingAdapterPosition());
}
});
@@ -613,9 +638,9 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
comment.getScore() + comment.getVoteType()));
apiHandler.voteComment(comment.getId(), newVoteType, mAccessToken, new ApiHandler.VoteListener() {
VoteThing.voteComment(mActivity, retrofit, mAccessToken, new VoteThing.VoteThingListener() {
@Override
public void onVoteThingSuccess() {
public void onVoteThingSuccess(int position1) {
int currentPosition = getBindingAdapterPosition();
if (newVoteType == Integer.parseInt(APIUtils.DIR_DOWNVOTE)) {
comment.setVoteType(Comment.VOTE_TYPE_DOWNVOTE);
@@ -642,9 +667,9 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
}
@Override
public void onVoteThingFail() {
public void onVoteThingFail(int position1) {
}
});
}, comment.getId(), newVoteType, getBindingAdapterPosition());
}
});
@@ -655,10 +680,10 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
}
Comment comment = getItem(position);
if (comment != null) {
SaveComment saveComment = new SaveComment();
if (comment.isSaved()) {
comment.setSaved(false);
apiHandler.unsaveComment(comment.getId(), mAccessToken, new ApiHandler.SaveCommentListener() {
saveComment.unsaveThing(retrofit, mAccessToken, comment.getId(), new SaveThing.SaveThingListener() {
@Override
public void success() {
comment.setSaved(false);
@@ -669,7 +694,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
}
@Override
public void onFailure() {
public void failed() {
comment.setSaved(true);
if (getBindingAdapterPosition() == position) {
saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp);
@@ -679,7 +704,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
});
} else {
comment.setSaved(true);
apiHandler.saveComment(comment.getId(), mAccessToken, new ApiHandler.SaveCommentListener() {
saveComment.saveThing(retrofit, mAccessToken, comment.getId(), new SaveThing.SaveThingListener() {
@Override
public void success() {
comment.setSaved(true);
@@ -690,7 +715,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
}
@Override
public void onFailure() {
public void failed() {
comment.setSaved(false);
if (getBindingAdapterPosition() == position) {
saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp);
@@ -714,6 +739,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
binding.authorTextViewItemPostComment,
binding.authorFlairTextViewItemPostComment,
binding.commentTimeTextViewItemPostComment,
binding.awardsTextViewItemComment,
binding.commentMarkdownViewItemPostComment,
binding.bottomConstraintLayoutItemPostComment,
binding.upvoteButtonItemPostComment,

View File

@@ -46,13 +46,15 @@ import butterknife.ButterKnife;
import eu.toldi.infinityforlemmy.DualBadgeDrawable;
import eu.toldi.infinityforlemmy.R;
import eu.toldi.infinityforlemmy.RetrofitHolder;
import eu.toldi.infinityforlemmy.SaveComment;
import eu.toldi.infinityforlemmy.SaveThing;
import eu.toldi.infinityforlemmy.SortType;
import eu.toldi.infinityforlemmy.VoteThing;
import eu.toldi.infinityforlemmy.activities.BaseActivity;
import eu.toldi.infinityforlemmy.activities.CommentActivity;
import eu.toldi.infinityforlemmy.activities.LinkResolverActivity;
import eu.toldi.infinityforlemmy.activities.ViewPostDetailActivity;
import eu.toldi.infinityforlemmy.activities.ViewUserDetailActivity;
import eu.toldi.infinityforlemmy.apis.apihandler.ApiHandler;
import eu.toldi.infinityforlemmy.bottomsheetfragments.CommentMoreBottomSheetFragment;
import eu.toldi.infinityforlemmy.bottomsheetfragments.UrlMenuBottomSheetFragment;
import eu.toldi.infinityforlemmy.comment.Comment;
@@ -60,7 +62,9 @@ import eu.toldi.infinityforlemmy.comment.FetchComment;
import eu.toldi.infinityforlemmy.commentfilter.CommentFilter;
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
import eu.toldi.infinityforlemmy.customviews.CommentIndentationView;
import eu.toldi.infinityforlemmy.customviews.CustomMarkwonAdapter;
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
import eu.toldi.infinityforlemmy.customviews.SpoilerOnClickTextView;
import eu.toldi.infinityforlemmy.customviews.SwipeLockInterface;
import eu.toldi.infinityforlemmy.customviews.SwipeLockLinearLayoutManager;
import eu.toldi.infinityforlemmy.databinding.ItemCommentBinding;
@@ -97,7 +101,6 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
private ViewPostDetailFragment mFragment;
private Executor mExecutor;
private RetrofitHolder mRetrofit;
private ApiHandler mApiHandler;
private Retrofit mOauthRetrofit;
private Markwon mCommentMarkwon;
private String mAccessToken;
@@ -170,7 +173,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
public CommentsRecyclerViewAdapter(BaseActivity activity, ViewPostDetailFragment fragment,
CustomThemeWrapper customThemeWrapper,
Executor executor, RetrofitHolder retrofit, ApiHandler apiHandler,
Executor executor, RetrofitHolder retrofit,
String accessToken, String accountName,
Post post, Locale locale, Integer singleCommentId,
boolean isSingleCommentThreadMode,
@@ -181,7 +184,6 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
mFragment = fragment;
mExecutor = executor;
mRetrofit = retrofit;
mApiHandler = apiHandler;
mGlide = Glide.with(activity.getApplicationContext());
mSecondaryTextColor = customThemeWrapper.getSecondaryTextColor();
mCommentTextColor = customThemeWrapper.getCommentColor();
@@ -463,8 +465,10 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
text = "*"+mActivity.getString(R.string.deleted_by_creator)+"*";
}
mCommentMarkwon.setMarkdown(((CommentBaseViewHolder) holder).commentMarkdownView,text);
((CommentBaseViewHolder) holder).mMarkwonAdapter.setMarkdown(mCommentMarkwon,text);
// noinspection NotifyDataSetChanged
((CommentBaseViewHolder) holder).mMarkwonAdapter.notifyDataSetChanged();
if (mHideDownvotes) {
((CommentBaseViewHolder) holder).downvoteButton.setVisibility(View.GONE);
((CommentBaseViewHolder) holder).downvoteTextView.setVisibility(View.GONE);
@@ -1176,6 +1180,8 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
((CommentBaseViewHolder) holder).authorTextView.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
mGlide.clear(((CommentBaseViewHolder) holder).authorIconImageView);
((CommentBaseViewHolder) holder).topScoreTextView.setTextColor(mSecondaryTextColor);
((CommentBaseViewHolder) holder).awardsTextView.setText("");
((CommentBaseViewHolder) holder).awardsTextView.setVisibility(View.GONE);
((CommentBaseViewHolder) holder).expandButton.setVisibility(View.GONE);
((CommentBaseViewHolder) holder).upvoteButton.setIconResource(R.drawable.ic_upvote_24dp);
((CommentBaseViewHolder) holder).upvoteButton.setIconTint(ColorStateList.valueOf(mCommentIconAndInfoColor));
@@ -1225,7 +1231,8 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
TextView authorFlairTextView;
TextView commentTimeTextView;
TextView topScoreTextView;
TextView commentMarkdownView;
TextView awardsTextView;
RecyclerView commentMarkdownView;
TextView editedTextView;
ConstraintLayout bottomConstraintLayout;
MaterialButton upvoteButton;
@@ -1239,6 +1246,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
MaterialButton replyButton;
CommentIndentationView commentIndentationView;
View commentDivider;
CustomMarkwonAdapter mMarkwonAdapter;
CommentBaseViewHolder(@NonNull View itemView) {
super(itemView);
@@ -1250,7 +1258,8 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
TextView authorFlairTextView,
TextView commentTimeTextView,
TextView topScoreTextView,
TextView commentMarkdownView,
TextView awardsTextView,
RecyclerView commentMarkdownView,
TextView editedTextView,
ConstraintLayout bottomConstraintLayout,
MaterialButton upvoteButton,
@@ -1270,6 +1279,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
this.authorFlairTextView = authorFlairTextView;
this.commentTimeTextView = commentTimeTextView;
this.topScoreTextView = topScoreTextView;
this.awardsTextView = awardsTextView;
this.commentMarkdownView = commentMarkdownView;
this.editedTextView = editedTextView;
this.bottomConstraintLayout = bottomConstraintLayout;
@@ -1347,7 +1357,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
authorFlairTextView.setTypeface(mActivity.typeface);
topScoreTextView.setTypeface(mActivity.typeface);
editedTextView.setTypeface(mActivity.typeface);
awardsTextView.setTypeface(mActivity.typeface);
scoreTextView.setTypeface(mActivity.typeface);
downvoteTextView.setTypeface(mActivity.typeface);
expandButton.setTypeface(mActivity.typeface);
@@ -1360,7 +1370,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
((ConstraintLayout.LayoutParams) authorFlairTextView.getLayoutParams()).leftMargin = 0;
}
commentMarkdownView.setRecycledViewPool(recycledViewPool);
LinearLayoutManagerBugFixed linearLayoutManager = new SwipeLockLinearLayoutManager(mActivity, new SwipeLockInterface() {
@Override
public void lockSwipe() {
@@ -1372,6 +1382,9 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
((ViewPostDetailActivity) mActivity).unlockSwipeRightToGoBack();
}
});
commentMarkdownView.setLayoutManager(linearLayoutManager);
mMarkwonAdapter = MarkdownUtils.createCustomTablesAdapter();
commentMarkdownView.setAdapter(mMarkwonAdapter);
itemView.setBackgroundColor(mCommentBackgroundColor);
authorTextView.setTextColor(mUsernameColor);
@@ -1380,6 +1393,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
topScoreTextView.setTextColor(mSecondaryTextColor);
downvoteTextView.setTextColor(mSecondaryTextColor);
editedTextView.setTextColor(mSecondaryTextColor);
awardsTextView.setTextColor(mSecondaryTextColor);
commentDivider.setBackgroundColor(mDividerColor);
upvoteButton.setIconTint(ColorStateList.valueOf(mCommentIconAndInfoColor));
scoreTextView.setTextColor(mCommentIconAndInfoColor);
@@ -1514,31 +1528,31 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
comment.getScore() + comment.getVoteType())));
}
mApiHandler.voteComment(comment.getId(), newVoteType, mAccessToken, new ApiHandler.VoteListener() {
VoteThing.voteComment(mActivity, mRetrofit.getRetrofit(), mAccessToken, new VoteThing.VoteThingListener() {
@Override
public void onVoteThingSuccess() {
public void onVoteThingSuccess(int position) {
int currentPosition = getBindingAdapterPosition();
if (newVoteType == Integer.parseInt(APIUtils.DIR_UPVOTE)) {
comment.setVoteType(Comment.VOTE_TYPE_UPVOTE);
// if (currentPosition == position) {
if (currentPosition == position) {
upvoteButton.setIconResource(R.drawable.ic_upvote_filled_24dp);
upvoteButton.setIconTint(ColorStateList.valueOf(mUpvotedColor));
scoreTextView.setTextColor(mUpvotedColor);
topScoreTextView.setTextColor(mUpvotedColor);
downvoteTextView.setTextColor(mCommentIconAndInfoColor);
//}
}
} else {
comment.setVoteType(Comment.VOTE_TYPE_NO_VOTE);
// if (currentPosition == position) {
if (currentPosition == position) {
upvoteButton.setIconResource(R.drawable.ic_upvote_24dp);
upvoteButton.setIconTint(ColorStateList.valueOf(mCommentIconAndInfoColor));
scoreTextView.setTextColor(mCommentIconAndInfoColor);
topScoreTextView.setTextColor(mSecondaryTextColor);
downvoteTextView.setTextColor(mCommentIconAndInfoColor);
// }
}
}
//if (currentPosition == position) {
if (currentPosition == position) {
downvoteButton.setIconResource(R.drawable.ic_downvote_24dp);
downvoteButton.setIconTint(ColorStateList.valueOf(mCommentIconAndInfoColor));
if (!mHideTheNumberOfVotes) {
@@ -1557,13 +1571,13 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
Utils.getNVotes(mShowAbsoluteNumberOfVotes,
comment.getScore() + comment.getVoteType())));
}
// }
}
}
@Override
public void onVoteThingFail() {
public void onVoteThingFail(int position) {
}
});
}, comment.getId(), newVoteType, getBindingAdapterPosition());
}
});
@@ -1635,9 +1649,9 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
}
int position = getBindingAdapterPosition();
mApiHandler.voteComment(comment.getId(), newVoteType, mAccessToken, new ApiHandler.VoteListener() {
VoteThing.voteComment(mActivity, mRetrofit.getRetrofit(), mAccessToken, new VoteThing.VoteThingListener() {
@Override
public void onVoteThingSuccess() {
public void onVoteThingSuccess(int position1) {
int currentPosition = getBindingAdapterPosition();
if (newVoteType == Integer.parseInt(APIUtils.DIR_DOWNVOTE)) {
comment.setVoteType(Comment.VOTE_TYPE_DOWNVOTE);
@@ -1684,9 +1698,9 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
}
@Override
public void onVoteThingFail() {
public void onVoteThingFail(int position1) {
}
});
}, comment.getId(), newVoteType, getBindingAdapterPosition());
}
});
@@ -1694,10 +1708,10 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
Comment comment = getCurrentComment(this);
if (comment != null) {
int position = getBindingAdapterPosition();
SaveComment saveComment = new SaveComment();
if (comment.isSaved()) {
comment.setSaved(false);
mApiHandler.unsaveComment(comment.getId(),mAccessToken, new ApiHandler.SaveCommentListener() {
saveComment.unsaveThing(mRetrofit.getRetrofit(), mAccessToken, comment.getId(), new SaveThing.SaveThingListener() {
@Override
public void success() {
comment.setSaved(false);
@@ -1708,7 +1722,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
}
@Override
public void onFailure() {
public void failed() {
comment.setSaved(true);
if (getBindingAdapterPosition() == position) {
saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp);
@@ -1718,7 +1732,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
});
} else {
comment.setSaved(true);
mApiHandler.saveComment(comment.getId(),mAccessToken, new ApiHandler.SaveCommentListener() {
saveComment.saveThing(mRetrofit.getRetrofit(), mAccessToken, comment.getId(), new SaveThing.SaveThingListener() {
@Override
public void success() {
comment.setSaved(true);
@@ -1729,7 +1743,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
}
@Override
public void onFailure() {
public void failed() {
comment.setSaved(false);
if (getBindingAdapterPosition() == position) {
saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp);
@@ -1800,19 +1814,41 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
View.OnLongClickListener hideToolbarOnLongClickListener = view -> hideToolbar();
itemView.setOnLongClickListener(hideToolbarOnLongClickListener);
commentTimeTextView.setOnLongClickListener(hideToolbarOnLongClickListener);
commentMarkdownView.setOnLongClickListener(v -> {
hideToolbar();
mMarkwonAdapter.setOnLongClickListener(v -> {
if (v instanceof TextView) {
if (((TextView) v).getSelectionStart() == -1 && ((TextView) v).getSelectionEnd() == -1) {
hideToolbar();
}
}
return true;
});
}
mMarkwonAdapter.setOnClickListener(v -> {
if (v instanceof SpoilerOnClickTextView) {
if (((SpoilerOnClickTextView) v).isSpoilerOnClick()) {
((SpoilerOnClickTextView) v).setSpoilerOnClick(false);
return;
}
}
expandComments();
});
itemView.setOnClickListener(view -> expandComments());
} else {
if (mCommentToolbarHideOnClick) {
mMarkwonAdapter.setOnClickListener(view -> {
if (view instanceof SpoilerOnClickTextView) {
if (((SpoilerOnClickTextView) view).isSpoilerOnClick()) {
((SpoilerOnClickTextView) view).setSpoilerOnClick(false);
return;
}
}
hideToolbar();
});
View.OnClickListener hideToolbarOnClickListener = view -> hideToolbar();
itemView.setOnClickListener(hideToolbarOnClickListener);
commentTimeTextView.setOnClickListener(hideToolbarOnClickListener);
}
commentMarkdownView.setOnLongClickListener(view -> {
mMarkwonAdapter.setOnLongClickListener(view -> {
if (view instanceof TextView) {
if (((TextView) view).getSelectionStart() == -1 && ((TextView) view).getSelectionEnd() == -1) {
expandComments();
@@ -1860,6 +1896,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
binding.authorFlairTextViewItemPostComment,
binding.commentTimeTextViewItemPostComment,
binding.topScoreTextViewItemPostComment,
binding.awardsTextViewItemComment,
binding.commentMarkdownViewItemPostComment,
binding.editedTextViewItemPostComment,
binding.bottomConstraintLayoutItemPostComment,

View File

@@ -65,7 +65,10 @@ import eu.toldi.infinityforlemmy.R;
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
import eu.toldi.infinityforlemmy.RetrofitHolder;
import eu.toldi.infinityforlemmy.SaveMemoryCenterInisdeDownsampleStrategy;
import eu.toldi.infinityforlemmy.SavePost;
import eu.toldi.infinityforlemmy.SaveThing;
import eu.toldi.infinityforlemmy.StreamableVideo;
import eu.toldi.infinityforlemmy.VoteThing;
import eu.toldi.infinityforlemmy.activities.BaseActivity;
import eu.toldi.infinityforlemmy.activities.CommentActivity;
import eu.toldi.infinityforlemmy.activities.FilteredPostsActivity;
@@ -78,7 +81,6 @@ import eu.toldi.infinityforlemmy.activities.ViewUserDetailActivity;
import eu.toldi.infinityforlemmy.activities.ViewVideoActivity;
import eu.toldi.infinityforlemmy.apis.RedgifsAPI;
import eu.toldi.infinityforlemmy.apis.StreamableAPI;
import eu.toldi.infinityforlemmy.apis.apihandler.ApiHandler;
import eu.toldi.infinityforlemmy.asynctasks.LoadSubredditIcon;
import eu.toldi.infinityforlemmy.asynctasks.LoadUserData;
import eu.toldi.infinityforlemmy.bottomsheetfragments.CopyTextBottomSheetFragment;
@@ -87,6 +89,8 @@ import eu.toldi.infinityforlemmy.bottomsheetfragments.UrlMenuBottomSheetFragment
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
import eu.toldi.infinityforlemmy.customviews.AspectRatioGifImageView;
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
import eu.toldi.infinityforlemmy.customviews.SwipeLockInterface;
import eu.toldi.infinityforlemmy.customviews.SwipeLockLinearLayoutManager;
import eu.toldi.infinityforlemmy.databinding.ItemPostDetailGalleryBinding;
import eu.toldi.infinityforlemmy.databinding.ItemPostDetailImageAndGifAutoplayBinding;
import eu.toldi.infinityforlemmy.databinding.ItemPostDetailLinkBinding;
@@ -136,7 +140,6 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
private ViewPostDetailFragment mFragment;
private Executor mExecutor;
private RetrofitHolder mRetrofit;
private ApiHandler apiHandler;
private Retrofit mRedgifsRetrofit;
private final Provider<StreamableAPI> mStreamableApiProvider;
private RedditDataRoomDatabase mRedditDataRoomDatabase;
@@ -223,7 +226,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
public PostDetailRecyclerViewAdapter(BaseActivity activity, ViewPostDetailFragment fragment,
Executor executor, CustomThemeWrapper customThemeWrapper,
RetrofitHolder retrofit, ApiHandler apiHandler1,
RetrofitHolder retrofit,
Retrofit redgifsRetrofit, Provider<StreamableAPI> streamableApiProvider,
RedditDataRoomDatabase redditDataRoomDatabase, RequestManager glide,
boolean separatePostAndComments, String accessToken,
@@ -238,7 +241,6 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
mFragment = fragment;
mExecutor = executor;
mRetrofit = retrofit;
apiHandler = apiHandler1;
mRedgifsRetrofit = redgifsRetrofit;
mStreamableApiProvider = streamableApiProvider;
mRedditDataRoomDatabase = redditDataRoomDatabase;
@@ -679,7 +681,10 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
if (mPost.getSelfText() != null && !mPost.getSelfText().equals("")) {
((PostDetailBaseViewHolder) holder).contentMarkdownView.setVisibility(View.VISIBLE);
mPostDetailMarkwon.setMarkdown(((PostDetailBaseViewHolder) holder).contentMarkdownView,mPost.getSelfText());
((PostDetailBaseViewHolder) holder).contentMarkdownView.setAdapter(mMarkwonAdapter);
mMarkwonAdapter.setMarkdown(mPostDetailMarkwon, mPost.getSelfText());
// noinspection NotifyDataSetChanged
mMarkwonAdapter.notifyDataSetChanged();
}
if (holder instanceof PostDetailBaseVideoAutoplayViewHolder) {
@@ -1211,7 +1216,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
CustomTextView flairTextView;
TextView awardsTextView;
TextView upvoteRatioTextView;
TextView contentMarkdownView;
RecyclerView contentMarkdownView;
ConstraintLayout bottomConstraintLayout;
MaterialButton upvoteButton;
TextView scoreTextView;
@@ -1243,7 +1248,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
CustomTextView flairTextView,
TextView awardsTextView,
TextView upvoteRatioTextView,
TextView contentMarkdownView,
RecyclerView contentMarkdownView,
ConstraintLayout bottomConstraintLayout,
MaterialButton upvoteButton,
TextView scoreTextView,
@@ -1339,7 +1344,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
mActivity.startActivity(intent);
});
/*contentMarkdownView.setLayoutManager(new SwipeLockLinearLayoutManager(mActivity, new SwipeLockInterface() {
contentMarkdownView.setLayoutManager(new SwipeLockLinearLayoutManager(mActivity, new SwipeLockInterface() {
@Override
public void lockSwipe() {
((ViewPostDetailActivity) mActivity).lockSwipeRightToGoBack();
@@ -1349,7 +1354,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
public void unlockSwipe() {
((ViewPostDetailActivity) mActivity).unlockSwipeRightToGoBack();
}
}));*/
}));
upvoteButton.setOnClickListener(view -> {
if (mPost.isArchived()) {
@@ -1404,64 +1409,65 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
}
mPostDetailRecyclerViewAdapterCallback.updatePost(mPost);
apiHandler.votePost(mPost.getId(), newVoteType, mAccessToken, new ApiHandler.VoteListener() {
@Override
public void onVoteThingSuccess() {
if (newVoteType == Integer.parseInt(APIUtils.DIR_UPVOTE)) {
mPost.setVoteType(1);
upvoteButton.setIconResource(R.drawable.ic_upvote_filled_24dp);
upvoteButton.setIconTint(ColorStateList.valueOf(mUpvotedColor));
scoreTextView.setTextColor(mUpvotedColor);
} else {
mPost.setVoteType(0);
upvoteButton.setIconResource(R.drawable.ic_upvote_24dp);
upvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor));
scoreTextView.setTextColor(mPostIconAndInfoColor);
}
downvoteButton.setIconResource(R.drawable.ic_downvote_24dp);
downvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor));
if (!mHideTheNumberOfVotes) {
if (mSeperateUpvoteAndDownvote) {
int upvotes = (mPost.getVoteType() == 1) ? mPost.getUpvotes() + 1 : mPost.getUpvotes();
int downvotes = (mPost.getVoteType() == -1) ? mPost.getDownvotes() + 1 : Math.max(mPost.getDownvotes(), 0);
;
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, upvotes));
mDownvoteTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, downvotes));
} else {
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
mPost.getScore() + mPost.getVoteType()));
}
}
VoteThing.votePost(mActivity, mRetrofit.getRetrofit(), mAccessToken, new VoteThing.VoteThingWithoutPositionListener() {
@Override
public void onVoteThingSuccess() {
if (newVoteType == Integer.parseInt(APIUtils.DIR_UPVOTE)) {
mPost.setVoteType(1);
upvoteButton.setIconResource(R.drawable.ic_upvote_filled_24dp);
upvoteButton.setIconTint(ColorStateList.valueOf(mUpvotedColor));
scoreTextView.setTextColor(mUpvotedColor);
} else {
mPost.setVoteType(0);
upvoteButton.setIconResource(R.drawable.ic_upvote_24dp);
upvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor));
scoreTextView.setTextColor(mPostIconAndInfoColor);
}
mPostDetailRecyclerViewAdapterCallback.updatePost(mPost);
downvoteButton.setIconResource(R.drawable.ic_downvote_24dp);
downvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor));
if (!mHideTheNumberOfVotes) {
if (mSeperateUpvoteAndDownvote) {
int upvotes = (mPost.getVoteType() == 1) ? mPost.getUpvotes() + 1 : mPost.getUpvotes();
int downvotes = (mPost.getVoteType() == -1) ? mPost.getDownvotes() + 1 : Math.max(mPost.getDownvotes(), 0);
;
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, upvotes));
mDownvoteTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, downvotes));
} else {
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
mPost.getScore() + mPost.getVoteType()));
}
}
@Override
public void onVoteThingFail() {
Toast.makeText(mActivity, R.string.vote_failed, Toast.LENGTH_SHORT).show();
mPost.setVoteType(previousVoteType);
if (!mHideTheNumberOfVotes) {
if (mSeperateUpvoteAndDownvote) {
int upvotes = (previousVoteType == 1) ? mPost.getUpvotes() + 1 : mPost.getUpvotes();
int downvotes = (previousVoteType == -1) ? mPost.getDownvotes() - 1 : Math.max(mPost.getDownvotes(), 0);
;
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, upvotes));
mDownvoteTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, downvotes));
} else {
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
mPost.getScore() + previousVoteType));
}
}
upvoteButton.setIcon(previousUpvoteButtonDrawable);
upvoteButton.setIconTint(ColorStateList.valueOf(previousUpvoteButtonTextColor));
scoreTextView.setTextColor(previousScoreTextViewColor);
downvoteButton.setIcon(previousDownvoteButtonDrawable);
downvoteButton.setIconTint(ColorStateList.valueOf(previousDownvoteButtonTextColor));
mPostDetailRecyclerViewAdapterCallback.updatePost(mPost);
}
mPostDetailRecyclerViewAdapterCallback.updatePost(mPost);
@Override
public void onVoteThingFail() {
Toast.makeText(mActivity, R.string.vote_failed, Toast.LENGTH_SHORT).show();
mPost.setVoteType(previousVoteType);
if (!mHideTheNumberOfVotes) {
if (mSeperateUpvoteAndDownvote) {
int upvotes = (previousVoteType == 1) ? mPost.getUpvotes() + 1 : mPost.getUpvotes();
int downvotes = (previousVoteType == -1) ? mPost.getDownvotes() - 1 : Math.max(mPost.getDownvotes(), 0);
;
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, upvotes));
mDownvoteTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, downvotes));
} else {
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
mPost.getScore() + previousVoteType));
}
});
}
upvoteButton.setIcon(previousUpvoteButtonDrawable);
upvoteButton.setIconTint(ColorStateList.valueOf(previousUpvoteButtonTextColor));
scoreTextView.setTextColor(previousScoreTextViewColor);
downvoteButton.setIcon(previousDownvoteButtonDrawable);
downvoteButton.setIconTint(ColorStateList.valueOf(previousDownvoteButtonTextColor));
mPostDetailRecyclerViewAdapterCallback.updatePost(mPost);
}
}, mPost.getId(), newVoteType);
});
scoreTextView.setOnClickListener(view -> {
@@ -1525,7 +1531,8 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
}
mPostDetailRecyclerViewAdapterCallback.updatePost(mPost);
apiHandler.votePost(mPost.getId(), newVoteType, mAccessToken, new ApiHandler.VoteListener() {
VoteThing.votePost(mActivity, mRetrofit.getRetrofit(), mAccessToken, new VoteThing.VoteThingWithoutPositionListener() {
@Override
public void onVoteThingSuccess() {
if (newVoteType == Integer.parseInt(APIUtils.DIR_DOWNVOTE)) {
@@ -1586,7 +1593,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
mPostDetailRecyclerViewAdapterCallback.updatePost(mPost);
}
});
}, mPost.getId(), newVoteType);
});
if (!mHideTheNumberOfComments) {
@@ -1624,11 +1631,11 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
Toast.makeText(mActivity, R.string.login_first, Toast.LENGTH_SHORT).show();
return;
}
SavePost savePost = new SavePost();
if (mPost.isSaved()) {
this.saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp);
apiHandler.unsavePost(mPost.getId(),mAccessToken,
new ApiHandler.SavePostListener() {
savePost.unsaveThing(mRetrofit.getRetrofit(), mAccessToken, mPost.getId(),
new SaveThing.SaveThingListener() {
@Override
public void success() {
mPost.setSaved(false);
@@ -1638,7 +1645,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
}
@Override
public void onFailure() {
public void failed() {
mPost.setSaved(true);
PostDetailBaseViewHolder.this.saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp);
Toast.makeText(mActivity, R.string.post_unsaved_failed, Toast.LENGTH_SHORT).show();
@@ -1647,10 +1654,8 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
});
} else {
this.saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp);
apiHandler.savePost(mPost.getId(),mAccessToken,
new ApiHandler.SavePostListener() {
savePost.saveThing(mRetrofit.getRetrofit(), mAccessToken, mPost.getId(),
new SaveThing.SaveThingListener() {
@Override
public void success() {
mPost.setSaved(true);
@@ -1660,7 +1665,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
}
@Override
public void onFailure() {
public void failed() {
mPost.setSaved(false);
PostDetailBaseViewHolder.this.saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp);
Toast.makeText(mActivity, R.string.post_saved_failed, Toast.LENGTH_SHORT).show();
@@ -1800,9 +1805,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
public PostDetailBaseVideoAutoplayViewHolder(@NonNull View itemView,
AspectRatioGifImageView iconGifImageView,
TextView subredditTextView,
TextView communityInstance,
TextView userTextView,
TextView userInstanceTextView,
TextView authorFlairTextView,
TextView postTimeTextView,
TextView titleTextView,
@@ -1824,11 +1827,10 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
ImageView pauseButton,
ImageView playButton,
DefaultTimeBar progressBar,
TextView contentMarkdownView,
RecyclerView contentMarkdownView,
ConstraintLayout bottomConstraintLayout,
MaterialButton upvoteButton,
TextView scoreTextView,
TextView downvoteTextView,
MaterialButton downvoteButton,
MaterialButton commentsCountButton,
MaterialButton saveButton,
@@ -1836,9 +1838,9 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
super(itemView);
setBaseView(iconGifImageView,
subredditTextView,
communityInstance,
mCommunityInstanceTextView,
userTextView,
userInstanceTextView,
mUserInstanceTextView,
authorFlairTextView,
postTimeTextView,
titleTextView,
@@ -1855,7 +1857,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
bottomConstraintLayout,
upvoteButton,
scoreTextView,
downvoteTextView,
mDownvoteTextView,
downvoteButton,
commentsCountButton,
saveButton,
@@ -2076,9 +2078,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
super(binding.getRoot(),
binding.iconGifImageViewItemPostDetailVideoAutoplay,
binding.subredditTextViewItemPostDetailVideoAutoplay,
binding.communityInstanceTextViewItemPostDetailVideoAutoplay,
binding.userTextViewItemPostDetailVideoAutoplay,
binding.userInstanceTextViewItemPostDetailVideoAutoplay,
binding.authorFlairTextViewItemPostDetailVideoAutoplay,
binding.postTimeTextViewItemPostDetailVideoAutoplay,
binding.titleTextViewItemPostDetailVideoAutoplay,
@@ -2104,7 +2104,6 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
binding.bottomConstraintLayoutItemPostDetailVideoAutoplay,
binding.upvoteButtonItemPostDetailVideoAutoplay,
binding.scoreTextViewItemPostDetailVideoAutoplay,
binding.downvoteTextViewItemPostDetailVideoAutoplay,
binding.downvoteButtonItemPostDetailVideoAutoplay,
binding.commentsCountButtonItemPostDetailVideoAutoplay,
binding.saveButtonItemPostDetailVideoAutoplay,
@@ -2117,9 +2116,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
super(binding.getRoot(),
binding.iconGifImageViewItemPostDetailVideoAutoplay,
binding.subredditTextViewItemPostDetailVideoAutoplay,
binding.communityInstanceTextViewItemPostDetailVideoAutoplay,
binding.userTextViewItemPostDetailVideoAutoplay,
binding.userInstanceTextViewItemPostDetailVideoAutoplay,
binding.authorFlairTextViewItemPostDetailVideoAutoplay,
binding.postTimeTextViewItemPostDetailVideoAutoplay,
binding.titleTextViewItemPostDetailVideoAutoplay,
@@ -2145,7 +2142,6 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
binding.bottomConstraintLayoutItemPostDetailVideoAutoplay,
binding.upvoteButtonItemPostDetailVideoAutoplay,
binding.scoreTextViewItemPostDetailVideoAutoplay,
binding.downvoteTextViewItemPostDetailVideoAutoplay,
binding.downvoteButtonItemPostDetailVideoAutoplay,
binding.commentsCountButtonItemPostDetailVideoAutoplay,
binding.saveButtonItemPostDetailVideoAutoplay,

View File

@@ -74,7 +74,10 @@ import eu.toldi.infinityforlemmy.MarkPostAsReadInterface;
import eu.toldi.infinityforlemmy.R;
import eu.toldi.infinityforlemmy.RetrofitHolder;
import eu.toldi.infinityforlemmy.SaveMemoryCenterInisdeDownsampleStrategy;
import eu.toldi.infinityforlemmy.SavePost;
import eu.toldi.infinityforlemmy.SaveThing;
import eu.toldi.infinityforlemmy.StreamableVideo;
import eu.toldi.infinityforlemmy.VoteThing;
import eu.toldi.infinityforlemmy.activities.BaseActivity;
import eu.toldi.infinityforlemmy.activities.FilteredPostsActivity;
import eu.toldi.infinityforlemmy.activities.LinkResolverActivity;
@@ -86,8 +89,6 @@ import eu.toldi.infinityforlemmy.activities.ViewUserDetailActivity;
import eu.toldi.infinityforlemmy.activities.ViewVideoActivity;
import eu.toldi.infinityforlemmy.apis.RedgifsAPI;
import eu.toldi.infinityforlemmy.apis.StreamableAPI;
import eu.toldi.infinityforlemmy.apis.apihandler.ApiHandler;
import eu.toldi.infinityforlemmy.apis.provider.ApiHandlerProvider;
import eu.toldi.infinityforlemmy.bottomsheetfragments.ShareLinkBottomSheetFragment;
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
import eu.toldi.infinityforlemmy.customviews.AspectRatioGifImageView;
@@ -170,7 +171,6 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
private SharedPreferences mCurrentAccountSharedPreferences;
private Executor mExecutor;
private RetrofitHolder retrofit;
private ApiHandlerProvider apiHandlerProvider;
private Retrofit mRedgifsRetrofit;
private Provider<StreamableAPI> mStreamableApiProvider;
private String mAccessToken;
@@ -267,7 +267,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
private boolean canPlayVideo = true;
private RecyclerView.RecycledViewPool mGalleryRecycledViewPool;
public PostRecyclerViewAdapter(BaseActivity activity, PostFragment fragment, Executor executor, RetrofitHolder retrofit, ApiHandlerProvider apiHandler,
public PostRecyclerViewAdapter(BaseActivity activity, PostFragment fragment, Executor executor, RetrofitHolder retrofit,
Retrofit redgifsRetrofit, Provider<StreamableAPI> streamableApiProvider,
CustomThemeWrapper customThemeWrapper, Locale locale,
String accessToken, String accountName, int postType, int postLayout, boolean displaySubredditName,
@@ -283,7 +283,6 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
mCurrentAccountSharedPreferences = currentAccountSharedPreferences;
mExecutor = executor;
this.retrofit = retrofit;
this.apiHandlerProvider = apiHandler;
mRedgifsRetrofit = redgifsRetrofit;
mStreamableApiProvider = streamableApiProvider;
mAccessToken = accessToken;
@@ -3213,9 +3212,10 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType()));
}
}
apiHandlerProvider.getApiHandler().votePost(post.getId(), newVoteType, mAccessToken, new ApiHandler.VoteListener() {
VoteThing.votePost(mActivity, retrofit.getRetrofit(), mAccessToken, new VoteThing.VoteThingListener() {
@Override
public void onVoteThingSuccess() {
public void onVoteThingSuccess(int position1) {
int currentPosition = getBindingAdapterPosition();
if (newVoteType == Integer.parseInt(APIUtils.DIR_UPVOTE)) {
post.setVoteType(1);
@@ -3252,7 +3252,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
}
@Override
public void onVoteThingFail() {
public void onVoteThingFail(int position1) {
Toast.makeText(mActivity, R.string.vote_failed, Toast.LENGTH_SHORT).show();
post.setVoteType(previousVoteType);
if (getBindingAdapterPosition() == position) {
@@ -3268,7 +3268,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post));
}
});
}, post.getId(), newVoteType, getBindingAdapterPosition());
}
});
@@ -3342,9 +3342,9 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
}
}
apiHandlerProvider.getApiHandler().votePost(post.getId(), newVoteType, mAccessToken, new ApiHandler.VoteListener() {
VoteThing.votePost(mActivity, retrofit.getRetrofit(), mAccessToken, new VoteThing.VoteThingListener() {
@Override
public void onVoteThingSuccess() {
public void onVoteThingSuccess(int position1) {
int currentPosition = getBindingAdapterPosition();
if (newVoteType == Integer.parseInt(APIUtils.DIR_DOWNVOTE)) {
post.setVoteType(-1);
@@ -3386,7 +3386,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
}
@Override
public void onVoteThingFail() {
public void onVoteThingFail(int position1) {
Toast.makeText(mActivity, R.string.vote_failed, Toast.LENGTH_SHORT).show();
post.setVoteType(previousVoteType);
if (getBindingAdapterPosition() == position) {
@@ -3402,7 +3402,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post));
}
});
}, post.getId(), newVoteType, getBindingAdapterPosition());
}
});
@@ -3419,11 +3419,11 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
Toast.makeText(mActivity, R.string.login_first, Toast.LENGTH_SHORT).show();
return;
}
SavePost savePost = new SavePost();
if (post.isSaved()) {
saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp);
apiHandlerProvider.getApiHandler().unsavePost(post.getId(),mAccessToken,
new ApiHandler.SavePostListener() {
savePost.unsaveThing(retrofit.getRetrofit(), mAccessToken, post.getId(),
new SaveThing.SaveThingListener() {
@Override
public void success() {
post.setSaved(false);
@@ -3435,7 +3435,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
}
@Override
public void onFailure() {
public void failed() {
post.setSaved(true);
if (getBindingAdapterPosition() == position) {
saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp);
@@ -3446,8 +3446,8 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
});
} else {
saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp);
apiHandlerProvider.getApiHandler().savePost(post.getId(),mAccessToken,
new ApiHandler.SavePostListener() {
savePost.saveThing(retrofit.getRetrofit(), mAccessToken, post.getId(),
new SaveThing.SaveThingListener() {
@Override
public void success() {
post.setSaved(true);
@@ -3459,7 +3459,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
}
@Override
public void onFailure() {
public void failed() {
post.setSaved(false);
if (getBindingAdapterPosition() == position) {
saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp);
@@ -4641,9 +4641,9 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType()));
}
apiHandlerProvider.getApiHandler().votePost(post.getId(), newVoteType, mAccessToken, new ApiHandler.VoteListener() {
VoteThing.votePost(mActivity, retrofit.getRetrofit(), mAccessToken, new VoteThing.VoteThingListener() {
@Override
public void onVoteThingSuccess() {
public void onVoteThingSuccess(int position1) {
int currentPosition = getBindingAdapterPosition();
if (newVoteType == Integer.parseInt(APIUtils.DIR_UPVOTE)) {
post.setVoteType(1);
@@ -4673,7 +4673,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
}
@Override
public void onVoteThingFail() {
public void onVoteThingFail(int position1) {
Toast.makeText(mActivity, R.string.vote_failed, Toast.LENGTH_SHORT).show();
post.setVoteType(previousVoteType);
if (getBindingAdapterPosition() == position) {
@@ -4689,7 +4689,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post));
}
});
}, post.getId(), newVoteType, getBindingAdapterPosition());
}
});
@@ -4756,9 +4756,9 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
}
}
apiHandlerProvider.getApiHandler().votePost(post.getId(), newVoteType, mAccessToken, new ApiHandler.VoteListener() {
VoteThing.votePost(mActivity, retrofit.getRetrofit(), mAccessToken, new VoteThing.VoteThingListener() {
@Override
public void onVoteThingSuccess() {
public void onVoteThingSuccess(int position1) {
int currentPosition = getBindingAdapterPosition();
if (newVoteType == Integer.parseInt(APIUtils.DIR_DOWNVOTE)) {
post.setVoteType(-1);
@@ -4798,7 +4798,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
}
@Override
public void onVoteThingFail() {
public void onVoteThingFail(int position1) {
Toast.makeText(mActivity, R.string.vote_failed, Toast.LENGTH_SHORT).show();
post.setVoteType(previousVoteType);
if (getBindingAdapterPosition() == position) {
@@ -4814,7 +4814,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post));
}
});
}, post.getId(), newVoteType, getBindingAdapterPosition());
}
});
@@ -4832,11 +4832,11 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
}
Post post = getItem(position);
if (post != null) {
SavePost postSave = new SavePost();
if (post.isSaved()) {
saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp);
apiHandlerProvider.getApiHandler().unsavePost(post.getId(),mAccessToken,
new ApiHandler.SavePostListener() {
postSave.unsaveThing(retrofit.getRetrofit(), mAccessToken, post.getId(),
new SaveThing.SaveThingListener() {
@Override
public void success() {
post.setSaved(false);
@@ -4848,7 +4848,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
}
@Override
public void onFailure() {
public void failed() {
post.setSaved(true);
if (getBindingAdapterPosition() == position) {
saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp);
@@ -4859,8 +4859,8 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
});
} else {
saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp);
apiHandlerProvider.getApiHandler().savePost( post.getId(),mAccessToken,
new ApiHandler.SavePostListener() {
postSave.saveThing(retrofit.getRetrofit(), mAccessToken, post.getId(),
new SaveThing.SaveThingListener() {
@Override
public void success() {
post.setSaved(true);
@@ -4872,7 +4872,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
}
@Override
public void onFailure() {
public void failed() {
post.setSaved(false);
if (getBindingAdapterPosition() == position) {
saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp);
@@ -6122,9 +6122,9 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType()));
}
apiHandlerProvider.getApiHandler().votePost(post.getId(), newVoteType, mAccessToken, new ApiHandler.VoteListener() {
VoteThing.votePost(mActivity, retrofit.getRetrofit(), mAccessToken, new VoteThing.VoteThingListener() {
@Override
public void onVoteThingSuccess() {
public void onVoteThingSuccess(int position1) {
int currentPosition = getBindingAdapterPosition();
if (newVoteType == Integer.parseInt(APIUtils.DIR_UPVOTE)) {
post.setVoteType(1);
@@ -6154,7 +6154,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
}
@Override
public void onVoteThingFail() {
public void onVoteThingFail(int position1) {
Toast.makeText(mActivity, R.string.vote_failed, Toast.LENGTH_SHORT).show();
post.setVoteType(previousVoteType);
if (getBindingAdapterPosition() == position) {
@@ -6170,7 +6170,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post));
}
});
}, post.getId(), newVoteType, getBindingAdapterPosition());
}
});
@@ -6226,9 +6226,10 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
if (!mHideTheNumberOfVotes) {
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType()));
}
apiHandlerProvider.getApiHandler().votePost(post.getId(), newVoteType, mAccessToken, new ApiHandler.VoteListener() {
VoteThing.votePost(mActivity, retrofit.getRetrofit(), mAccessToken, new VoteThing.VoteThingListener() {
@Override
public void onVoteThingSuccess() {
public void onVoteThingSuccess(int position1) {
int currentPosition = getBindingAdapterPosition();
if (newVoteType == Integer.parseInt(APIUtils.DIR_DOWNVOTE)) {
post.setVoteType(-1);
@@ -6259,7 +6260,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
}
@Override
public void onVoteThingFail() {
public void onVoteThingFail(int position1) {
Toast.makeText(mActivity, R.string.vote_failed, Toast.LENGTH_SHORT).show();
post.setVoteType(previousVoteType);
if (getBindingAdapterPosition() == position) {
@@ -6275,7 +6276,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post));
}
});
}, post.getId(), newVoteType, getBindingAdapterPosition());
}
});
@@ -6292,11 +6293,11 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
Toast.makeText(mActivity, R.string.login_first, Toast.LENGTH_SHORT).show();
return;
}
SavePost savePost = new SavePost();
if (post.isSaved()) {
saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp);
apiHandlerProvider.getApiHandler().unsavePost(post.getId(),mAccessToken,
new ApiHandler.SavePostListener() {
savePost.unsaveThing(retrofit.getRetrofit(), mAccessToken, post.getId(),
new SaveThing.SaveThingListener() {
@Override
public void success() {
post.setSaved(false);
@@ -6308,7 +6309,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
}
@Override
public void onFailure() {
public void failed() {
post.setSaved(true);
if (getBindingAdapterPosition() == position) {
saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp);
@@ -6319,8 +6320,8 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
});
} else {
saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp);
apiHandlerProvider.getApiHandler().savePost(post.getId(),mAccessToken,
new ApiHandler.SavePostListener() {
savePost.saveThing(retrofit.getRetrofit(), mAccessToken, post.getId(),
new SaveThing.SaveThingListener() {
@Override
public void success() {
post.setSaved(true);
@@ -6332,7 +6333,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
}
@Override
public void onFailure() {
public void failed() {
post.setSaved(false);
if (getBindingAdapterPosition() == position) {
saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp);

View File

@@ -43,7 +43,7 @@ import retrofit2.http.PUT;
import retrofit2.http.Part;
import retrofit2.http.Query;
public interface LemmyBetaAPI {
public interface LemmyAPI {
@Headers("Content-Type: application/json")
@POST("api/v3/user/login")
Call<String> userLogin(@Body AccountLoginDTO params);

View File

@@ -1,351 +0,0 @@
package eu.toldi.infinityforlemmy.apis.apihandler
import android.os.Handler
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase
import eu.toldi.infinityforlemmy.SortType
import eu.toldi.infinityforlemmy.blockedcommunity.BlockedCommunityData
import eu.toldi.infinityforlemmy.blockedinstances.BlockedInstanceData
import eu.toldi.infinityforlemmy.blockeduser.BlockedUserData
import eu.toldi.infinityforlemmy.comment.Comment
import eu.toldi.infinityforlemmy.commentfilter.CommentFilter
import eu.toldi.infinityforlemmy.post.Post
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher
import eu.toldi.infinityforlemmy.site.SiteInfo
import eu.toldi.infinityforlemmy.subreddit.SubredditData
import eu.toldi.infinityforlemmy.user.MyUserInfo
import eu.toldi.infinityforlemmy.user.UserData
import retrofit2.Retrofit
import java.util.concurrent.Executor
interface ApiHandler {
// Community-related
fun blockCommunity(
communityId: Int,
auth: String,
listener: BlockCommunityListener
)
fun unblockCommunity(
communityId: Int,
auth: String,
listener: BlockCommunityListener
)
// Instance-related
fun blockInstance(
instanceId: Int,
block: Boolean,
listener: BlockInstanceListener
)
fun unblockInstance(
instanceId: Int,
listener: BlockInstanceListener
)
// User-related
fun blockUser(
userId: Int,
auth: String,
listener: BlockUserListener
)
fun unblockUser(
userId: Int,
auth: String,
listener: BlockUserListener
)
// Post-related
fun reportPost(
postId: Int,
reason: String,
auth: String,
listener: ReportPostListener
)
fun savePost(
postId: Int,
auth: String,
listener: SavePostListener
)
fun unsavePost(
postId: Int,
auth: String,
listener: SavePostListener
)
// Comment-related
fun reportComment(
commentId: Int,
reason: String,
auth: String,
listener: ReportCommentListener
)
fun saveComment(
commentId: Int,
auth: String,
listener: SaveCommentListener
)
fun unsaveComment(
commentId: Int,
auth: String,
listener: SaveCommentListener
)
// Post-related (submit, edit, delete)
fun submitPost(
executor: Executor,
handler: Handler,
accessToken: String,
communityId: Int,
title: String,
content: String,
isNSFW: Boolean,
receivePostReplyNotifications: Boolean,
kind: String,
posterUrl: String?,
postEnricher: PostEnricher,
submitPostListener: SubmitPostListener
)
fun editPost(
postId: Int,
title: String,
content: String,
posterUrl: String,
isNSFW: Boolean,
auth: String,
listener: ApiHandler.EditPostListener
)
fun deletePost(
postId: Int,
auth: String,
listener: DeletePostListener
)
// Comment-related (submit, edit, delete)
fun submitComment(
executor:Executor,
handler: Handler,
postId: Int,
content: String,
parentId: Int?,
auth: String,
listener: SubmitCommentListener
)
fun editComment(
commentId: Int,
content: String,
auth: String,
listener: EditCommentListener
)
fun deleteComment(
commentId: Int,
auth: String,
listener: DeleteCommentListener
)
// Fetch-related
fun fetchComments(
executor: Executor,
handler: Handler,
retrofit: Retrofit,
accessToken: String?,
article: Int,
commentId: Int,
sortType: SortType.Type,
expandChildren: Boolean,
page: Int,
commentFilter: CommentFilter,
listener: FetchCommentListListener
)
fun fetchSubscribedThings(
retrofit: Retrofit,
accessToken: String,
accountName: String,
listener: FetchSubscribedThingsListener
)
fun fetchCommunityData(
retrofit: Retrofit,
subredditName: String,
accessToken: String,
listener: FetchCommunityDataListener
)
fun fetchPost(
executor: Executor,
handler: Handler,
postId: Int,
accessToken: String,
postEnricher: PostEnricher,
listener: ApiHandler.FetchPostListener
)
fun fetchUser(
redditDataRoomDatabase: RedditDataRoomDatabase,
username: String,
auth: String?,
listener: ApiHandler.FetchUserListener
)
fun fetchSiteInfo(
retrofit: Retrofit,
accessToken: String,
listener: FetchSiteInfoListener
)
fun fetchComment(
commentId: Int,
accessToken: String,
listener: FetchCommentListener
)
// Other operations
fun markPostAsRead(
postId: Int,
isRead: Boolean,
auth: String,
listener: MarkPostAsReadListener
)
fun markCommentAsRead(
commentId: Int,
isRead: Boolean,
auth: String,
listener: MarkCommentAsReadListener
)
//Voting
fun votePost(
postId: Int,
point: Int,
accessToken: String,
listener: VoteListener
)
fun voteComment(
commentId: Int,
point: Int,
accessToken: String,
listener: VoteListener
)
interface BlockCommunityListener {
fun onSuccess()
fun onFailure()
}
interface BlockInstanceListener {
fun onResponse()
fun onFailure()
}
interface BlockUserListener {
fun success()
fun failed()
}
interface ReportPostListener {
fun success()
fun onFailure()
}
interface SavePostListener {
fun success()
fun onFailure()
}
interface SaveCommentListener {
fun success()
fun onFailure()
}
interface SubmitPostListener {
fun success(post: Post)
fun onFailure(error: String?)
}
interface SubmitCommentListener {
fun success(comment: Comment)
fun onFailure(error: String?)
}
interface EditPostListener {
fun success()
fun onFailure()
}
interface EditCommentListener {
fun success(comment: Comment)
fun onFailure()
}
interface DeletePostListener {
fun success()
fun onFailure()
}
interface DeleteCommentListener {
fun success()
fun onFailure()
}
interface FetchCommentsListener {
fun onSuccess(comments: List<Comment>)
fun onFailure()
}
interface FetchSubscribedThingsListener {
fun onSuccess(blockedUsers: List<BlockedUserData>, blockedCommunities: List<BlockedCommunityData>, blockedInstances: List<BlockedInstanceData>)
fun onFailure()
}
interface FetchCommunityDataListener {
fun onSuccess(subredditData: SubredditData)
fun onFailure()
}
interface FetchPostListener {
fun onSuccess(post: Post)
fun onFailure()
}
interface FetchUserListener {
fun onSuccess(userData: UserData)
fun onFailure()
}
interface FetchSiteInfoListener {
fun onSuccess(siteInfo: SiteInfo, myUserInfo: MyUserInfo)
fun onFailure(parseFailed: Boolean)
}
interface FetchCommentListListener {
fun onSuccess(topLevelComments: ArrayList<Comment>,
expandedComments: ArrayList<Comment>,
parentId: Int, moreChildrenIds: ArrayList<Int>)
fun onFailure()
}
interface FetchCommentListener {
fun onSuccess(comment: Comment)
fun onFailure()
}
interface MarkPostAsReadListener {
fun onSuccess()
fun onFailure()
}
interface MarkCommentAsReadListener {
fun onSuccess()
fun onFailure()
}
interface VoteListener {
fun onVoteThingSuccess()
fun onVoteThingFail()
}
interface ReportCommentListener {
fun onSuccess()
fun onFailure()
}
}

View File

@@ -1,972 +0,0 @@
package eu.toldi.infinityforlemmy.apis.apihandler
import android.os.Handler
import android.widget.Toast
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase
import eu.toldi.infinityforlemmy.SortType
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI
import eu.toldi.infinityforlemmy.apis.apihandler.ApiHandler.SubmitPostListener
import eu.toldi.infinityforlemmy.comment.Comment
import eu.toldi.infinityforlemmy.comment.ParseComment
import eu.toldi.infinityforlemmy.comment.ParseComment.ParseCommentListener
import eu.toldi.infinityforlemmy.comment.ParseComment.ParseSentCommentListener
import eu.toldi.infinityforlemmy.commentfilter.CommentFilter
import eu.toldi.infinityforlemmy.dto.*
import eu.toldi.infinityforlemmy.post.ParsePost
import eu.toldi.infinityforlemmy.post.ParsePost.ParsePostListener
import eu.toldi.infinityforlemmy.post.Post
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher
import eu.toldi.infinityforlemmy.site.SiteInfo
import eu.toldi.infinityforlemmy.subreddit.ParseSubredditData
import eu.toldi.infinityforlemmy.subreddit.ParseSubredditData.ParseSubredditDataListener
import eu.toldi.infinityforlemmy.subreddit.SubredditData
import eu.toldi.infinityforlemmy.user.MyUserInfo
import eu.toldi.infinityforlemmy.user.ParseUserData
import eu.toldi.infinityforlemmy.user.ParseUserData.ParseUserDataListener
import eu.toldi.infinityforlemmy.user.UserData
import org.json.JSONException
import org.json.JSONObject
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import retrofit2.Retrofit
import java.io.IOException
import java.util.concurrent.Executor
class LemmyBetaApiHandler(private val retrofit: Retrofit) : ApiHandler {
private val api: LemmyBetaAPI = retrofit.create(LemmyBetaAPI::class.java)
// Community Block
override fun blockCommunity(
communityId: Int,
auth: String,
listener: ApiHandler.BlockCommunityListener
) {
api.communityBlock(BlockCommunityDTO(communityId, true, auth))
.enqueue(object : Callback<String> {
override fun onResponse(
call: Call<String>,
response: Response<String>
) {
if (response.isSuccessful) {
listener.onSuccess()
} else {
listener.onFailure()
}
}
override fun onFailure(
call: Call<String>,
t: Throwable
) {
listener.onFailure()
}
})
}
override fun unblockCommunity(
communityId: Int,
auth: String,
listener: ApiHandler.BlockCommunityListener
) {
api.communityBlock(BlockCommunityDTO(communityId, false, auth))
.enqueue(object : Callback<String> {
override fun onResponse(
call: Call<String>,
response: Response<String>
) {
if (response.isSuccessful) {
listener.onSuccess()
} else {
listener.onFailure()
}
}
override fun onFailure(
call: Call<String>,
t: Throwable
) {
listener.onFailure()
}
})
}
// Instance Block
override fun blockInstance(
instanceId: Int,
block: Boolean,
listener: ApiHandler.BlockInstanceListener
) {
api.blockInstance(BlockInstanceDTO(instanceId, block))
.enqueue(object : Callback<String> {
override fun onResponse(
call: Call<String>,
response: Response<String>
) {
if (response.isSuccessful) {
listener.onResponse()
} else {
listener.onFailure()
}
}
override fun onFailure(
call: Call<String>,
t: Throwable
) {
listener.onFailure()
}
})
}
override fun unblockInstance(
instanceId: Int,
listener: ApiHandler.BlockInstanceListener
) {
api.blockInstance(BlockInstanceDTO(instanceId, false))
.enqueue(object : Callback<String> {
override fun onResponse(
call: Call<String>,
response: Response<String>
) {
if (response.isSuccessful) {
listener.onResponse()
} else {
listener.onFailure()
}
}
override fun onFailure(
call: Call<String>,
t: Throwable
) {
listener.onFailure()
}
})
}
// User Block
override fun blockUser(
userId: Int,
auth: String,
listener: ApiHandler.BlockUserListener
) {
api.userBlock(UserBlockDTO(userId, true, auth))
.enqueue(object : Callback<String> {
override fun onResponse(
call: Call<String>,
response: Response<String>
) {
if (response.isSuccessful) {
listener.success()
} else {
listener.failed()
}
}
override fun onFailure(
call: Call<String>,
t: Throwable
) {
listener.failed()
}
})
}
override fun unblockUser(
userId: Int,
auth: String,
listener: ApiHandler.BlockUserListener
) {
api.userBlock(UserBlockDTO(userId, false, auth))
.enqueue(object : Callback<String> {
override fun onResponse(
call: Call<String>,
response: Response<String>
) {
if (response.isSuccessful) {
listener.success()
} else {
listener.failed()
}
}
override fun onFailure(
call: Call<String>,
t: Throwable
) {
listener.failed()
}
})
}
// Report Post
override fun reportPost(
postId: Int,
reason: String,
auth: String,
listener: ApiHandler.ReportPostListener
) {
api.postReport(ReportPostDTO(postId, reason, auth))
.enqueue(object : Callback<String> {
override fun onResponse(
call: Call<String>,
response: Response<String>
) {
if (response.isSuccessful) {
listener.success()
} else {
listener.onFailure()
}
}
override fun onFailure(
call: Call<String>,
t: Throwable
) {
listener.onFailure()
}
})
}
// Save Post
override fun savePost(
postId: Int,
auth: String,
listener: ApiHandler.SavePostListener
) {
api.postSave(SavePostDTO(postId, true, auth))
.enqueue(object : Callback<String> {
override fun onResponse(
call: Call<String>,
response: Response<String>
) {
if (response.isSuccessful) {
listener.success()
} else {
listener.onFailure()
}
}
override fun onFailure(
call: Call<String>,
t: Throwable
) {
listener.onFailure()
}
})
}
override fun unsavePost(
postId: Int,
auth: String,
listener: ApiHandler.SavePostListener
) {
api.postSave(SavePostDTO(postId, false, auth))
.enqueue(object : Callback<String> {
override fun onResponse(
call: Call<String>,
response: Response<String>
) {
if (response.isSuccessful) {
listener.success()
} else {
listener.onFailure()
}
}
override fun onFailure(
call: Call<String>,
t: Throwable
) {
listener.onFailure()
listener.onFailure()
}
})
}
override fun reportComment(
commentId: Int,
reason: String,
auth: String,
listener: ApiHandler.ReportCommentListener
) {
TODO("Not yet implemented")
}
// Save Comment
override fun saveComment(
commentId: Int,
auth: String,
listener: ApiHandler.SaveCommentListener
) {
api.commentSave(SaveCommentDTO(commentId, true, auth))
.enqueue(object : Callback<String> {
override fun onResponse(
call: Call<String>,
response: Response<String>
) {
if (response.isSuccessful) {
listener.success()
} else {
listener.onFailure()
}
}
override fun onFailure(
call: Call<String>,
t: Throwable
) {
listener.onFailure()
}
})
}
override fun unsaveComment(
commentId: Int,
auth: String,
listener: ApiHandler.SaveCommentListener
) {
api.commentSave(SaveCommentDTO(commentId, false, auth))
.enqueue(object : Callback<String> {
override fun onResponse(
call: Call<String>,
response: Response<String>
) {
if (response.isSuccessful) {
listener.success()
} else {
listener.onFailure()
}
}
override fun onFailure(call: Call<String>, t: Throwable) {
listener.onFailure()
}
})
}
// Submit Post
override fun submitPost(executor:Executor,
handler: Handler, accessToken: String,
communityId: Int, title: String, content: String,
isNSFW: Boolean,
receivePostReplyNotifications: Boolean, kind: String,
posterUrl: String?, postEnricher: PostEnricher,
submitPostListener: SubmitPostListener
){
val submitPostCall = api.postCreate(
SubmitPostDTO(
title,
communityId,
posterUrl,
content,
null,
isNSFW,
null,
accessToken
)
)
try {
val response = submitPostCall.execute()
if (response.isSuccessful) {
ParsePost.parsePost(
executor,
handler,
postEnricher,
response.body(),
object : ParsePostListener {
override fun onParsePostSuccess(post: Post) {
submitPostListener.success(post)
}
override fun onParsePostFail() {
submitPostListener.onFailure(null)
}
})
} else {
submitPostListener.onFailure(response.message())
}
} catch (e: IOException) {
e.printStackTrace()
submitPostListener.onFailure(e.message)
} catch (e: JSONException) {
e.printStackTrace()
submitPostListener.onFailure(e.message)
}
}
// Submit Comment
override fun submitComment(
executor:Executor,
handler: Handler,
postId: Int,
content: String,
parentId: Int?,
auth: String,
listener: ApiHandler.SubmitCommentListener
) {
api.postComment(
CommentDTO(content, postId, parentId, null, null, auth))
.enqueue(object : Callback<String> {
override fun onResponse(
call: Call<String>,
response: Response<String>
) {
if (response.isSuccessful) {
ParseComment.parseSentComment(
executor,
handler,
response.body(),
object : ParseSentCommentListener {
override fun onParseSentCommentSuccess(comment: Comment) {
listener.success(comment)
}
override fun onParseSentCommentFailed(errorMessage: String?) {
listener.onFailure(errorMessage)
}
})
} else {
listener.onFailure(null)
}
}
override fun onFailure(
call: Call<String>,
t: Throwable
) {
listener.onFailure(null)
}
})
}
override fun editComment(
commentId: Int,
content: String,
auth: String,
listener: ApiHandler.EditCommentListener
) {
TODO("Not yet implemented")
}
// Edit Post
override fun editPost(
postId: Int,
title: String,
content: String,
posterUrl: String,
isNSFW: Boolean,
auth: String,
listener: ApiHandler.EditPostListener
) {
api.postUpdate(
EditPostDTO(postId, title, content,posterUrl, isNSFW,null, auth)
)
.enqueue(object : Callback<String> {
override fun onResponse(
call: Call<String>,
response: Response<String>
) {
if (response.isSuccessful) {
listener.success()
} else {
listener.onFailure()
}
}
override fun onFailure(
call: Call<String>,
t: Throwable
) {
listener.onFailure()
}
})
}
// Delete Post
override fun deletePost(
postId: Int,
auth: String,
listener: ApiHandler.DeletePostListener
) {
api.postDelete(DeletePostDTO(postId,true, auth))
.enqueue(object : Callback<String> {
override fun onResponse(
call: Call<String>,
response: Response<String>
) {
if (response.isSuccessful) {
listener.success()
} else {
listener.onFailure()
}
}
override fun onFailure(
call: Call<String>,
t: Throwable
) {
listener.onFailure()
}
})
}
// Delete Comment
override fun deleteComment(
commentId: Int,
auth: String,
listener: ApiHandler.DeleteCommentListener
) {
api.commentDelete(DeleteCommentDTO(commentId,true, auth))
.enqueue(object : Callback<String> {
override fun onResponse(
call: Call<String>,
response: Response<String>
) {
if (response.isSuccessful) {
listener.success()
} else {
listener.onFailure()
}
}
override fun onFailure(
call: Call<String>,
t: Throwable
) {
listener.onFailure()
}
})
}
// Fetch Comments
override fun fetchComments(
executor: Executor,
handler: Handler,
retrofit: Retrofit,
accessToken: String?,
article: Int,
commentId: Int,
sortType: SortType.Type,
expandChildren: Boolean,
page: Int,
commentFilter: CommentFilter,
listener: ApiHandler.FetchCommentListListener
) {
val comments = api.getComments(
"All",
sortType.value,
8,
page,
25,
null,
null,
article,
commentId,
false,
accessToken
)
comments.enqueue(object : Callback<String?> {
override fun onResponse(call: Call<String?>, response: Response<String?>) {
if (response.isSuccessful) {
ParseComment.parseComments(
executor, handler, response.body(), commentId,
expandChildren, commentFilter,
object : ParseCommentListener {
override fun onParseCommentSuccess(
topLevelComments: ArrayList<Comment>,
expandedComments: ArrayList<Comment>,
parentId: Int, moreChildrenIds: ArrayList<Int>
) {
listener.onSuccess( topLevelComments, expandedComments, parentId, moreChildrenIds)
}
override fun onParseCommentFailed() {
listener.onFailure()
}
})
} else {
listener.onFailure()
}
}
override fun onFailure(call: Call<String?>, t: Throwable) {
listener.onFailure()
}
})
}
// Fetch Subscribed Things
override fun fetchSubscribedThings(
retrofit: Retrofit,
accessToken: String,
accountName: String,
listener: ApiHandler.FetchSubscribedThingsListener
) {
api.listCommunities("Subscribed", null, 1, null, accessToken)
.enqueue(object : Callback<String> {
override fun onResponse(
call: Call<String>,
response: Response<String>
) {
if (response.isSuccessful) {
// Parse and return the data
listener.onSuccess(listOf(), listOf(), listOf())
} else {
listener.onFailure()
}
}
override fun onFailure(
call: Call<String>,
t: Throwable
) {
listener.onFailure()
}
})
}
// Fetch Subreddit Data
override fun fetchCommunityData(
retrofit: Retrofit,
subredditName: String,
accessToken: String,
listener: ApiHandler.FetchCommunityDataListener
) {
api.communityInfo(subredditName, accessToken)
.enqueue(object : Callback<String> {
override fun onResponse(
call: Call<String>,
response: Response<String>
) {
if (response.isSuccessful) {
ParseSubredditData.parseSubredditData(
response.body(),
object : ParseSubredditDataListener {
override fun onParseSubredditDataSuccess(
subredditData: SubredditData,
nCurrentOnlineSubscribers: Int
) {
listener.onSuccess(
subredditData
)
}
override fun onParseSubredditDataFail() {
listener.onFailure()
}
})
} else {
listener.onFailure()
}
}
override fun onFailure(
call: Call<String>,
t: Throwable
) {
listener.onFailure()
}
})
}
// Fetch Post
override fun fetchPost(
executor: Executor,
handler: Handler,
postId: Int,
accessToken: String,
postEnricher: PostEnricher,
listener: ApiHandler.FetchPostListener
) {
api.postInfo(postId, null, accessToken)
.enqueue(object : Callback<String> {
override fun onResponse(
call: Call<String>,
response: Response<String>
) {
if (response.isSuccessful) {
ParsePost.parsePost(
executor,
handler,
postEnricher,
response.body(),
object : ParsePostListener {
override fun onParsePostSuccess(post: Post) {
listener.onSuccess(post)
}
override fun onParsePostFail() {
listener.onFailure()
}
})
} else {
listener.onFailure()
}
}
override fun onFailure(
call: Call<String>,
t: Throwable
) {
listener.onFailure()
}
})
}
// Fetch User
override fun fetchUser(
redditDataRoomDatabase: RedditDataRoomDatabase,
username: String,
auth: String?,
listener: ApiHandler.FetchUserListener
) {
api.userInfo(username,auth)
.enqueue(object : Callback<String> {
override fun onResponse(
call: Call<String>,
response: Response<String>
) {
if (response.isSuccessful) {
ParseUserData.parseUserData(
redditDataRoomDatabase,
response.body(),
object : ParseUserDataListener {
override fun onParseUserDataSuccess(
userData: UserData,
inboxCount: Int
) {
listener.onSuccess(
userData
)
}
override fun onParseUserDataFailed() {
listener.onFailure()
}
})
} else {
listener.onFailure()
}
}
override fun onFailure(
call: Call<String>,
t: Throwable
) {
listener.onFailure()
}
})
}
// Fetch Site Info
override fun fetchSiteInfo(
retrofit: Retrofit,
accessToken: String,
listener: ApiHandler.FetchSiteInfoListener
) {
api.getSiteInfo(accessToken)
.enqueue(object : Callback<String> {
override fun onResponse(
call: Call<String>,
response: Response<String>
) {
if (response.isSuccessful) {
try {
val siteInfoJson = response.body()
val siteInfo = SiteInfo.parseSiteInfo(siteInfoJson)
val myUserInfo = MyUserInfo.parseFromSiteInfo(siteInfoJson)
listener.onSuccess(siteInfo, myUserInfo)
} catch (e: JSONException) {
listener.onFailure(true)
}
} else {
listener.onFailure(false)
}
}
override fun onFailure(
call: Call<String>,
t: Throwable
) {
listener.onFailure(false)
}
})
}
// Fetch Comment
override fun fetchComment(
commentId: Int,
accessToken: String,
listener: ApiHandler.FetchCommentListener
) {
api.getComment(commentId, accessToken)
.enqueue(object : Callback<String> {
override fun onResponse(
call: Call<String>,
response: Response<String>
) {
if (response.isSuccessful) {
try {
val comment = ParseComment.parseSingleComment(
response.body()
?.let { JSONObject(it).getJSONObject("comment_view") }
)
listener.onSuccess(comment)
} catch (e: JSONException) {
listener.onFailure()
}
} else {
listener.onFailure()
}
}
override fun onFailure(
call: Call<String>,
t: Throwable
) {
listener.onFailure()
}
})
}
// Mark Post as Read
override fun markPostAsRead(
postId: Int,
isRead: Boolean,
auth: String,
listener: ApiHandler.MarkPostAsReadListener
) {
api.postRead(ReadPostDTO(postId, isRead, auth))
.enqueue(object : Callback<String> {
override fun onResponse(
call: Call<String>,
response: Response<String>
) {
if (response.isSuccessful) {
listener.onSuccess()
} else {
listener.onFailure()
}
}
override fun onFailure(
call: Call<String>,
t: Throwable
) {
listener.onFailure()
}
})
}
// Mark Comment as Read
override fun markCommentAsRead(
commentId: Int,
isRead: Boolean,
auth: String,
listener: ApiHandler.MarkCommentAsReadListener
) {
api.commentMarkAsRead(ReadCommentDTO(commentId, isRead, auth))
.enqueue(object : Callback<String> {
override fun onResponse(
call: Call<String>,
response: Response<String>
) {
if (response.isSuccessful) {
listener.onSuccess()
} else {
listener.onFailure()
}
}
override fun onFailure(
call: Call<String>,
t: Throwable
) {
listener.onFailure()
}
})
}
override fun votePost(
postId: Int,
point: Int,
accessToken: String,
listener: ApiHandler.VoteListener
) {
val voteThingCall = api.postLike(PostVoteDTO(postId, point, accessToken))
voteThingCall.enqueue(object : Callback<String> {
override fun onResponse(call: Call<String>, response: Response<String>) {
if (response.isSuccessful) {
listener.onVoteThingSuccess()
} else {
listener.onVoteThingFail()
}
}
override fun onFailure(call: Call<String>, t: Throwable) {
listener.onVoteThingFail()
}
})
}
override fun voteComment(
commentId: Int,
point: Int,
accessToken: String,
listener: ApiHandler.VoteListener
) {
val voteThingCall = api.commentLike(CommentVoteDTO(commentId, point, accessToken))
voteThingCall.enqueue(object : Callback<String> {
override fun onResponse(call: Call<String>, response: Response<String>) {
if (response.isSuccessful) {
listener.onVoteThingSuccess()
} else {
listener.onVoteThingFail()
}
}
override fun onFailure(call: Call<String>, t: Throwable) {
listener.onVoteThingFail()
}
})
}
}

View File

@@ -1,66 +0,0 @@
package eu.toldi.infinityforlemmy.apis.provider
import android.util.Log
import eu.toldi.infinityforlemmy.apis.apihandler.ApiHandler
import eu.toldi.infinityforlemmy.apis.apihandler.LemmyBetaApiHandler
import eu.toldi.infinityforlemmy.network.SortTypeConverterFactory
import eu.toldi.infinityforlemmy.utils.APIUtils
import okhttp3.Interceptor
import okhttp3.OkHttpClient
import retrofit2.Retrofit
import retrofit2.adapter.guava.GuavaCallAdapterFactory
import retrofit2.converter.gson.GsonConverterFactory
import retrofit2.converter.scalars.ScalarsConverterFactory
class ApiHandlerProvider(private val okHttpClientBase: OkHttpClient) {
private var _baseURL = APIUtils.API_BASE_URI
private var retrofit = createRetrofit(okHttpClientBase,_baseURL)
private var _accessToken: String? = null;
private var oAuthInterceptor: Interceptor? = null
private var okHttpClient = okHttpClientBase
private var _apiHandler : ApiHandler = LemmyBetaApiHandler(retrofit)
var baseUrl: String
get() {
var result: String = _baseURL
if (_baseURL.endsWith("/")) {
result = _baseURL.substring(0, _baseURL.length - 1)
}
return result
}
set(value) {
_baseURL = value
retrofit = createRetrofit(okHttpClientBase,_baseURL)
_apiHandler = LemmyBetaApiHandler(retrofit)
}
var accessToken: String?
get() = _accessToken
set(value) {
_accessToken = value
val builder = okHttpClientBase.newBuilder()
Log.d("ApiHandlerProvider", "Access token changed")
if (accessToken != null && accessToken != "") {
Log.i("ApiHandlerProvider", "Setting access token interceptor")
oAuthInterceptor = APIUtils.getOAuthInterceptor(accessToken)
builder.addInterceptor(oAuthInterceptor!!)
}
okHttpClient = builder.build()
retrofit = createRetrofit(okHttpClient, baseUrl)
_apiHandler = LemmyBetaApiHandler(retrofit)
}
val apiHandler: ApiHandler
get() = _apiHandler
private fun createRetrofit(okHttpClient: OkHttpClient, baseUrl: String): Retrofit {
return Retrofit.Builder()
.baseUrl(baseUrl)
.client(okHttpClient)
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(SortTypeConverterFactory.create())
.addCallAdapterFactory(GuavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build()
}
}

View File

@@ -16,7 +16,7 @@ import java.util.Locale;
import eu.toldi.infinityforlemmy.NetworkState;
import eu.toldi.infinityforlemmy.SortType;
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
@@ -73,7 +73,7 @@ public class CommentDataSource extends PageKeyedDataSource<Integer, Comment> {
@Override
public void loadInitial(@NonNull LoadInitialParams<Integer> params, @NonNull LoadInitialCallback<Integer, Comment> callback) {
updateNetworkState(initialLoadStateLiveData, NetworkState.LOADING);
LemmyBetaAPI api = retrofit.create(LemmyBetaAPI.class);
LemmyAPI api = retrofit.create(LemmyAPI.class);
if (query != null && !query.isEmpty()) {
fetchComments(api.search(query, null, null, null,"Comments", sortType.getType().value,"All",1, 25, accessToken), callback, true);
} else {
@@ -85,7 +85,7 @@ public void loadInitial(@NonNull LoadInitialParams<Integer> params, @NonNull Loa
public void loadAfter(@NonNull LoadParams<Integer> params, @NonNull LoadCallback<Integer, Comment> callback) {
this.params = params;
updateNetworkState(paginationNetworkStateLiveData, NetworkState.LOADING);
LemmyBetaAPI api = retrofit.create(LemmyBetaAPI.class);
LemmyAPI api = retrofit.create(LemmyAPI.class);
if (query != null && !query.isEmpty()) {
fetchComments(api.search(query, null, null, null,"Comments", sortType.getType().value,"All",params.key, 25, accessToken), callback, false);
} else {

View File

@@ -12,8 +12,7 @@ import java.util.ArrayList;
import java.util.concurrent.Executor;
import eu.toldi.infinityforlemmy.SortType;
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
import eu.toldi.infinityforlemmy.commentfilter.CommentFilter;
import retrofit2.Call;
import retrofit2.Callback;
@@ -25,7 +24,7 @@ public class FetchComment {
@Nullable String accessToken, Integer article,
Integer commentId, SortType.Type sortType, boolean expandChildren,
Integer page, CommentFilter commentFilter, FetchCommentListener fetchCommentListener) {
LemmyBetaAPI api = retrofit.create(LemmyBetaAPI.class);
LemmyAPI api = retrofit.create(LemmyAPI.class);
Call<String> comments;
comments = api.getComments("All", sortType.value, 8, page, 25, null, null, article, commentId, false, accessToken);
@@ -67,7 +66,7 @@ public class FetchComment {
@Nullable String accessToken, int article,
int commentId, SortType.Type sortType, boolean expandChildren,
Integer page, FetchMoreCommentListener fetchMoreCommentListener) {
LemmyBetaAPI api = retrofit.create(LemmyBetaAPI.class);
LemmyAPI api = retrofit.create(LemmyAPI.class);
Call<String> moreComments;
moreComments = api.getComments("All", sortType.value, 8, page, 25, null, null, article, commentId, false, accessToken);
@@ -106,7 +105,7 @@ public class FetchComment {
public static void fetchSingleComment(Retrofit retrofit, @Nullable String accessToken, int commentId,
FetchCommentListener fetchCommentListener) {
LemmyBetaAPI api = retrofit.create(LemmyBetaAPI.class);
LemmyAPI api = retrofit.create(LemmyAPI.class);
Call<String> comment = api.getComment(commentId, accessToken);
comment.enqueue(new Callback<String>() {
@Override

View File

@@ -201,7 +201,7 @@ public class ParseComment {
});
}
public static void parseSentComment(Executor executor, Handler handler, String response,
static void parseSentComment(Executor executor, Handler handler, String response,
ParseSentCommentListener parseSentCommentListener) {
executor.execute(() -> {
try {
@@ -432,7 +432,7 @@ public class ParseComment {
void onParseCommentFailed();
}
public interface ParseSentCommentListener {
interface ParseSentCommentListener {
void onParseSentCommentSuccess(Comment comment);
void onParseSentCommentFailed(@Nullable String errorMessage);

View File

@@ -5,11 +5,15 @@ import android.os.Handler;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Executor;
import eu.toldi.infinityforlemmy.account.Account;
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
import eu.toldi.infinityforlemmy.apis.RedditAPI;
import eu.toldi.infinityforlemmy.dto.CommentDTO;
import eu.toldi.infinityforlemmy.utils.APIUtils;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
@@ -23,7 +27,7 @@ public class SendComment {
retrofit.create(LemmyBetaAPI.class).postComment(new CommentDTO(commentMarkdown, post_id,parent_id, null,null,account.getAccessToken())).enqueue(new Callback<String>() {
retrofit.create(LemmyAPI.class).postComment(new CommentDTO(commentMarkdown, post_id,parent_id, null,null,account.getAccessToken())).enqueue(new Callback<String>() {
@Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if (response.isSuccessful()) {

View File

@@ -263,64 +263,69 @@ public class CustomTheme {
customTheme.readPostFilledCardViewBackgroundColor = customThemeSettingsItems.get(23).colorValue;
customTheme.commentBackgroundColor = customThemeSettingsItems.get(24).colorValue;
customTheme.fullyCollapsedCommentBackgroundColor = customThemeSettingsItems.get(25).colorValue;
customTheme.receivedMessageBackgroundColor = customThemeSettingsItems.get(26).colorValue;
customTheme.sentMessageBackgroundColor = customThemeSettingsItems.get(27).colorValue;
customTheme.bottomAppBarBackgroundColor = customThemeSettingsItems.get(28).colorValue;
customTheme.primaryIconColor = customThemeSettingsItems.get(29).colorValue;
customTheme.bottomAppBarIconColor = customThemeSettingsItems.get(30).colorValue;
customTheme.postIconAndInfoColor = customThemeSettingsItems.get(31).colorValue;
customTheme.commentIconAndInfoColor = customThemeSettingsItems.get(32).colorValue;
customTheme.fabIconColor = customThemeSettingsItems.get(33).colorValue;
customTheme.sendMessageIconColor = customThemeSettingsItems.get(34).colorValue;
customTheme.toolbarPrimaryTextAndIconColor = customThemeSettingsItems.get(35).colorValue;
customTheme.toolbarSecondaryTextColor = customThemeSettingsItems.get(36).colorValue;
customTheme.circularProgressBarBackground = customThemeSettingsItems.get(37).colorValue;
customTheme.mediaIndicatorIconColor = customThemeSettingsItems.get(38).colorValue;
customTheme.mediaIndicatorBackgroundColor = customThemeSettingsItems.get(39).colorValue;
customTheme.tabLayoutWithExpandedCollapsingToolbarTabBackground = customThemeSettingsItems.get(40).colorValue;
customTheme.tabLayoutWithExpandedCollapsingToolbarTextColor = customThemeSettingsItems.get(41).colorValue;
customTheme.tabLayoutWithExpandedCollapsingToolbarTabIndicator = customThemeSettingsItems.get(42).colorValue;
customTheme.tabLayoutWithCollapsedCollapsingToolbarTabBackground = customThemeSettingsItems.get(43).colorValue;
customTheme.tabLayoutWithCollapsedCollapsingToolbarTextColor = customThemeSettingsItems.get(44).colorValue;
customTheme.tabLayoutWithCollapsedCollapsingToolbarTabIndicator = customThemeSettingsItems.get(45).colorValue;
customTheme.upvoted = customThemeSettingsItems.get(46).colorValue;
customTheme.downvoted = customThemeSettingsItems.get(47).colorValue;
customTheme.postTypeBackgroundColor = customThemeSettingsItems.get(48).colorValue;
customTheme.postTypeTextColor = customThemeSettingsItems.get(49).colorValue;
customTheme.spoilerBackgroundColor = customThemeSettingsItems.get(50).colorValue;
customTheme.spoilerTextColor = customThemeSettingsItems.get(51).colorValue;
customTheme.nsfwBackgroundColor = customThemeSettingsItems.get(52).colorValue;
customTheme.nsfwTextColor = customThemeSettingsItems.get(53).colorValue;
customTheme.archivedTint = customThemeSettingsItems.get(54).colorValue;
customTheme.lockedIconTint = customThemeSettingsItems.get(55).colorValue;
customTheme.crosspostIconTint = customThemeSettingsItems.get(56).colorValue;
customTheme.upvoteRatioIconTint = customThemeSettingsItems.get(57).colorValue;
customTheme.stickiedPostIconTint = customThemeSettingsItems.get(58).colorValue;
customTheme.noPreviewPostTypeIconTint = customThemeSettingsItems.get(59).colorValue;
customTheme.subscribed = customThemeSettingsItems.get(60).colorValue;
customTheme.unsubscribed = customThemeSettingsItems.get(61).colorValue;
customTheme.username = customThemeSettingsItems.get(62).colorValue;
customTheme.subreddit = customThemeSettingsItems.get(63).colorValue;
customTheme.submitter = customThemeSettingsItems.get(64).colorValue;
customTheme.moderator = customThemeSettingsItems.get(65).colorValue;
customTheme.currentUser = customThemeSettingsItems.get(66).colorValue;
customTheme.singleCommentThreadBackgroundColor = customThemeSettingsItems.get(67).colorValue;
customTheme.unreadMessageBackgroundColor = customThemeSettingsItems.get(68).colorValue;
customTheme.dividerColor = customThemeSettingsItems.get(69).colorValue;
customTheme.noPreviewPostTypeBackgroundColor = customThemeSettingsItems.get(70).colorValue;
customTheme.voteAndReplyUnavailableButtonColor = customThemeSettingsItems.get(71).colorValue;
customTheme.commentVerticalBarColor1 = customThemeSettingsItems.get(72).colorValue;
customTheme.commentVerticalBarColor2 = customThemeSettingsItems.get(73).colorValue;
customTheme.commentVerticalBarColor3 = customThemeSettingsItems.get(74).colorValue;
customTheme.commentVerticalBarColor4 = customThemeSettingsItems.get(75).colorValue;
customTheme.commentVerticalBarColor5 = customThemeSettingsItems.get(76).colorValue;
customTheme.commentVerticalBarColor6 = customThemeSettingsItems.get(77).colorValue;
customTheme.commentVerticalBarColor7 = customThemeSettingsItems.get(78).colorValue;
customTheme.navBarColor = customThemeSettingsItems.get(79).colorValue;
customTheme.isLightStatusBar = customThemeSettingsItems.get(80).isEnabled;
customTheme.isLightNavBar = customThemeSettingsItems.get(81).isEnabled;
customTheme.isChangeStatusBarIconColorAfterToolbarCollapsedInImmersiveInterface = customThemeSettingsItems.get(82).isEnabled;
customTheme.awardedCommentBackgroundColor = customThemeSettingsItems.get(26).colorValue;
customTheme.receivedMessageBackgroundColor = customThemeSettingsItems.get(27).colorValue;
customTheme.sentMessageBackgroundColor = customThemeSettingsItems.get(28).colorValue;
customTheme.bottomAppBarBackgroundColor = customThemeSettingsItems.get(29).colorValue;
customTheme.primaryIconColor = customThemeSettingsItems.get(30).colorValue;
customTheme.bottomAppBarIconColor = customThemeSettingsItems.get(31).colorValue;
customTheme.postIconAndInfoColor = customThemeSettingsItems.get(32).colorValue;
customTheme.commentIconAndInfoColor = customThemeSettingsItems.get(33).colorValue;
customTheme.fabIconColor = customThemeSettingsItems.get(34).colorValue;
customTheme.sendMessageIconColor = customThemeSettingsItems.get(35).colorValue;
customTheme.toolbarPrimaryTextAndIconColor = customThemeSettingsItems.get(36).colorValue;
customTheme.toolbarSecondaryTextColor = customThemeSettingsItems.get(37).colorValue;
customTheme.circularProgressBarBackground = customThemeSettingsItems.get(38).colorValue;
customTheme.mediaIndicatorIconColor = customThemeSettingsItems.get(39).colorValue;
customTheme.mediaIndicatorBackgroundColor = customThemeSettingsItems.get(40).colorValue;
customTheme.tabLayoutWithExpandedCollapsingToolbarTabBackground = customThemeSettingsItems.get(41).colorValue;
customTheme.tabLayoutWithExpandedCollapsingToolbarTextColor = customThemeSettingsItems.get(42).colorValue;
customTheme.tabLayoutWithExpandedCollapsingToolbarTabIndicator = customThemeSettingsItems.get(43).colorValue;
customTheme.tabLayoutWithCollapsedCollapsingToolbarTabBackground = customThemeSettingsItems.get(44).colorValue;
customTheme.tabLayoutWithCollapsedCollapsingToolbarTextColor = customThemeSettingsItems.get(45).colorValue;
customTheme.tabLayoutWithCollapsedCollapsingToolbarTabIndicator = customThemeSettingsItems.get(46).colorValue;
customTheme.upvoted = customThemeSettingsItems.get(47).colorValue;
customTheme.downvoted = customThemeSettingsItems.get(48).colorValue;
customTheme.postTypeBackgroundColor = customThemeSettingsItems.get(49).colorValue;
customTheme.postTypeTextColor = customThemeSettingsItems.get(50).colorValue;
customTheme.spoilerBackgroundColor = customThemeSettingsItems.get(51).colorValue;
customTheme.spoilerTextColor = customThemeSettingsItems.get(52).colorValue;
customTheme.nsfwBackgroundColor = customThemeSettingsItems.get(53).colorValue;
customTheme.nsfwTextColor = customThemeSettingsItems.get(54).colorValue;
customTheme.flairBackgroundColor = customThemeSettingsItems.get(55).colorValue;
customTheme.flairTextColor = customThemeSettingsItems.get(56).colorValue;
customTheme.awardsBackgroundColor = customThemeSettingsItems.get(57).colorValue;
customTheme.awardsTextColor = customThemeSettingsItems.get(58).colorValue;
customTheme.archivedTint = customThemeSettingsItems.get(59).colorValue;
customTheme.lockedIconTint = customThemeSettingsItems.get(60).colorValue;
customTheme.crosspostIconTint = customThemeSettingsItems.get(61).colorValue;
customTheme.upvoteRatioIconTint = customThemeSettingsItems.get(62).colorValue;
customTheme.stickiedPostIconTint = customThemeSettingsItems.get(63).colorValue;
customTheme.noPreviewPostTypeIconTint = customThemeSettingsItems.get(64).colorValue;
customTheme.subscribed = customThemeSettingsItems.get(65).colorValue;
customTheme.unsubscribed = customThemeSettingsItems.get(66).colorValue;
customTheme.username = customThemeSettingsItems.get(67).colorValue;
customTheme.subreddit = customThemeSettingsItems.get(68).colorValue;
customTheme.authorFlairTextColor = customThemeSettingsItems.get(69).colorValue;
customTheme.submitter = customThemeSettingsItems.get(70).colorValue;
customTheme.moderator = customThemeSettingsItems.get(71).colorValue;
customTheme.currentUser = customThemeSettingsItems.get(72).colorValue;
customTheme.singleCommentThreadBackgroundColor = customThemeSettingsItems.get(73).colorValue;
customTheme.unreadMessageBackgroundColor = customThemeSettingsItems.get(74).colorValue;
customTheme.dividerColor = customThemeSettingsItems.get(75).colorValue;
customTheme.noPreviewPostTypeBackgroundColor = customThemeSettingsItems.get(76).colorValue;
customTheme.voteAndReplyUnavailableButtonColor = customThemeSettingsItems.get(77).colorValue;
customTheme.commentVerticalBarColor1 = customThemeSettingsItems.get(78).colorValue;
customTheme.commentVerticalBarColor2 = customThemeSettingsItems.get(79).colorValue;
customTheme.commentVerticalBarColor3 = customThemeSettingsItems.get(80).colorValue;
customTheme.commentVerticalBarColor4 = customThemeSettingsItems.get(81).colorValue;
customTheme.commentVerticalBarColor5 = customThemeSettingsItems.get(82).colorValue;
customTheme.commentVerticalBarColor6 = customThemeSettingsItems.get(83).colorValue;
customTheme.commentVerticalBarColor7 = customThemeSettingsItems.get(84).colorValue;
customTheme.navBarColor = customThemeSettingsItems.get(85).colorValue;
customTheme.isLightStatusBar = customThemeSettingsItems.get(86).isEnabled;
customTheme.isLightNavBar = customThemeSettingsItems.get(87).isEnabled;
customTheme.isChangeStatusBarIconColorAfterToolbarCollapsedInImmersiveInterface = customThemeSettingsItems.get(88).isEnabled;
return customTheme;
}

View File

@@ -831,7 +831,7 @@ public class CustomThemeWrapper {
customTheme.colorPrimary = Color.parseColor("#FFFFFF");
customTheme.colorPrimaryDark = Color.parseColor("#FFFFFF");
customTheme.colorAccent = Color.parseColor("#000000");
customTheme.colorPrimaryLightTheme = Color.parseColor("#000000");
customTheme.colorPrimaryLightTheme = Color.parseColor("#FFFFFF");
customTheme.primaryTextColor = Color.parseColor("#000000");
customTheme.secondaryTextColor = Color.parseColor("#8A000000");
customTheme.postTitleColor = Color.parseColor("#000000");
@@ -839,7 +839,7 @@ public class CustomThemeWrapper {
customTheme.readPostTitleColor = Color.parseColor("#9D9D9D");
customTheme.readPostContentColor = Color.parseColor("#9D9D9D");
customTheme.commentColor = Color.parseColor("#000000");
customTheme.buttonTextColor = Color.parseColor("#FFFFFF");
customTheme.buttonTextColor = Color.parseColor("#000000");
customTheme.backgroundColor = Color.parseColor("#FFFFFF");
customTheme.cardViewBackgroundColor = Color.parseColor("#FFFFFF");
customTheme.readPostCardViewBackgroundColor = Color.parseColor("#F5F5F5");

View File

@@ -47,7 +47,6 @@ import eu.toldi.infinityforlemmy.RetrofitHolder;
import eu.toldi.infinityforlemmy.SortType;
import eu.toldi.infinityforlemmy.activities.BaseActivity;
import eu.toldi.infinityforlemmy.adapters.CommentsListingRecyclerViewAdapter;
import eu.toldi.infinityforlemmy.apis.provider.ApiHandlerProvider;
import eu.toldi.infinityforlemmy.comment.CommentViewModel;
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
@@ -100,8 +99,6 @@ public class CommentsListingFragment extends Fragment implements FragmentCommuni
CustomThemeWrapper customThemeWrapper;
@Inject
Executor mExecutor;
@Inject
ApiHandlerProvider apiHandlerProvider;
private String mAccessToken;
private RequestManager mGlide;
private BaseActivity mActivity;
@@ -264,7 +261,7 @@ public class CommentsListingFragment extends Fragment implements FragmentCommuni
mLinearLayoutManager = new LinearLayoutManagerBugFixed(mActivity);
mCommentRecyclerView.setLayoutManager(mLinearLayoutManager);
mAdapter = new CommentsListingRecyclerViewAdapter(mActivity, mRetrofit.getRetrofit(), apiHandlerProvider.getApiHandler(), customThemeWrapper,
mAdapter = new CommentsListingRecyclerViewAdapter(mActivity, mRetrofit.getRetrofit(), customThemeWrapper,
getResources().getConfiguration().locale, mSharedPreferences,
getArguments().getString(EXTRA_ACCESS_TOKEN), getArguments().getString(EXTRA_ACCOUNT_NAME),
() -> mCommentViewModel.retryLoadingMore());

View File

@@ -84,7 +84,6 @@ import eu.toldi.infinityforlemmy.activities.ViewSubredditDetailActivity;
import eu.toldi.infinityforlemmy.adapters.Paging3LoadingStateAdapter;
import eu.toldi.infinityforlemmy.adapters.PostRecyclerViewAdapter;
import eu.toldi.infinityforlemmy.apis.StreamableAPI;
import eu.toldi.infinityforlemmy.apis.provider.ApiHandlerProvider;
import eu.toldi.infinityforlemmy.asynctasks.LoadSubredditIcon;
import eu.toldi.infinityforlemmy.asynctasks.LoadUserData;
import eu.toldi.infinityforlemmy.bottomsheetfragments.FABMoreOptionsBottomSheetFragment;
@@ -185,8 +184,6 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
@Named("no_oauth")
RetrofitHolder mRetrofit;
@Inject
ApiHandlerProvider apiHandlerProvider;
@Inject
@Named("oauth")
Retrofit mOauthRetrofit;
@Inject
@@ -468,7 +465,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
sortType = new SortType(st == null ? SortType.Type.TOP_ALL : st,sortTime != null ? SortType.Time.valueOf(sortTime) : null);
postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_SEARCH_POST, defaultPostLayout);
mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit, apiHandlerProvider,
mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit,
mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
accessToken, accountName, postType, postLayout, true,
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
@@ -543,7 +540,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_SUBREDDIT_POST_BASE + subredditName, defaultPostLayout);
mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit,apiHandlerProvider,
mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit,
mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
accessToken, accountName, postType, postLayout, displaySubredditName,
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
@@ -612,7 +609,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
defaultPostLayout);
mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit, apiHandlerProvider,
mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit,
mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
accessToken, accountName, postType, postLayout, true,
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
@@ -678,7 +675,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_USER_POST_BASE + username, defaultPostLayout);
mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit, apiHandlerProvider,
mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit,
mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
accessToken, accountName, postType, postLayout, true,
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
@@ -740,7 +737,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_FRONT_PAGE_POST, defaultPostLayout);
mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit, apiHandlerProvider,
mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit,
mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
accessToken, accountName, postType, postLayout, true,
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
@@ -799,7 +796,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_MULTI_REDDIT_POST_BASE + multiRedditPath, defaultPostLayout);
mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit, apiHandlerProvider,
mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit,
mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
accessToken, accountName, postType, postLayout, true,
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
@@ -855,7 +852,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
sortType = newSortType(sort, sortTime);
postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_FRONT_PAGE_POST, defaultPostLayout);
mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit, apiHandlerProvider,
mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit,
mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
accessToken, accountName, postType, postLayout, true,
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,

View File

@@ -239,7 +239,7 @@ public class SubredditListingFragment extends Fragment implements FragmentCommun
}
public void changeSortType(SortType sortType) {
mSortTypeSharedPreferences.edit().putString(SharedPreferencesUtils.SORT_TYPE_SEARCH_SUBREDDIT, sortType.getType().value).apply();
mSortTypeSharedPreferences.edit().putString(SharedPreferencesUtils.SORT_TYPE_SEARCH_SUBREDDIT, sortType.getType().name()).apply();
mSubredditListingViewModel.changeSortType(sortType);
this.sortType = sortType;
}

View File

@@ -77,6 +77,8 @@ import eu.toldi.infinityforlemmy.Infinity;
import eu.toldi.infinityforlemmy.R;
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
import eu.toldi.infinityforlemmy.RetrofitHolder;
import eu.toldi.infinityforlemmy.SavePost;
import eu.toldi.infinityforlemmy.SaveThing;
import eu.toldi.infinityforlemmy.SortType;
import eu.toldi.infinityforlemmy.activities.CommentActivity;
import eu.toldi.infinityforlemmy.activities.EditPostActivity;
@@ -85,10 +87,8 @@ import eu.toldi.infinityforlemmy.activities.SubmitCrosspostActivity;
import eu.toldi.infinityforlemmy.activities.ViewPostDetailActivity;
import eu.toldi.infinityforlemmy.adapters.CommentsRecyclerViewAdapter;
import eu.toldi.infinityforlemmy.adapters.PostDetailRecyclerViewAdapter;
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
import eu.toldi.infinityforlemmy.apis.StreamableAPI;
import eu.toldi.infinityforlemmy.apis.apihandler.ApiHandler;
import eu.toldi.infinityforlemmy.apis.provider.ApiHandlerProvider;
import eu.toldi.infinityforlemmy.asynctasks.LoadUserData;
import eu.toldi.infinityforlemmy.bottomsheetfragments.PostCommentSortTypeBottomSheetFragment;
import eu.toldi.infinityforlemmy.comment.Comment;
@@ -161,8 +161,6 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
@Named("no_oauth")
RetrofitHolder mRetrofit;
@Inject
ApiHandlerProvider apiHandlerProvider;
@Inject
@Named("pushshift")
Retrofit pushshiftRetrofit;
@Inject
@@ -621,13 +619,13 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
setupMenu();
mPostAdapter = new PostDetailRecyclerViewAdapter(activity,
this, mExecutor, mCustomThemeWrapper, mRetrofit, apiHandlerProvider.getApiHandler(),
this, mExecutor, mCustomThemeWrapper, mRetrofit,
mRedgifsRetrofit, mStreamableApiProvider, mRedditDataRoomDatabase, mGlide,
mSeparatePostAndComments, mAccessToken, mAccountName, mPost, mLocale,
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostDetailsSharedPreferences,
mExoCreator, post -> EventBus.getDefault().post(new PostUpdateEventToPostList(mPost, postListPosition)));
mCommentsAdapter = new CommentsRecyclerViewAdapter(activity,
this, mCustomThemeWrapper, mExecutor, mRetrofit, apiHandlerProvider.getApiHandler(),
this, mCustomThemeWrapper, mExecutor, mRetrofit,
mAccessToken, mAccountQualifiedName, mPost, mLocale, mSingleCommentId
, isSingleCommentThreadMode, mSharedPreferences, mCurrentAccountSharedPreferences,
new CommentsRecyclerViewAdapter.CommentRecyclerViewAdapterCallback() {
@@ -961,10 +959,11 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
return true;
} else if (itemId == R.id.action_save_view_post_detail_fragment) {
if (mPost != null && mAccessToken != null) {
SavePost savePost = new SavePost();
if (mPost.isSaved()) {
item.setIcon(mUnsavedIcon);
apiHandlerProvider.getApiHandler().unsavePost(mPost.getId(),mAccessToken,
new ApiHandler.SavePostListener() {
savePost.unsaveThing(mRetrofit.getRetrofit(), mAccessToken, mPost.getId(),
new SaveThing.SaveThingListener() {
@Override
public void success() {
if (isAdded()) {
@@ -976,7 +975,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
}
@Override
public void onFailure() {
public void failed() {
if (isAdded()) {
mPost.setSaved(true);
item.setIcon(mSavedIcon);
@@ -987,8 +986,8 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
});
} else {
item.setIcon(mSavedIcon);
apiHandlerProvider.getApiHandler().savePost(mPost.getId(),mAccessToken,
new ApiHandler.SavePostListener() {
savePost.saveThing(mRetrofit.getRetrofit(), mAccessToken, mPost.getId(),
new SaveThing.SaveThingListener() {
@Override
public void success() {
if (isAdded()) {
@@ -1000,7 +999,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
}
@Override
public void onFailure() {
public void failed() {
if (isAdded()) {
mPost.setSaved(false);
item.setIcon(mUnsavedIcon);
@@ -1356,7 +1355,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
mPost = post;
mPostAdapter = new PostDetailRecyclerViewAdapter(activity,
ViewPostDetailFragment.this, mExecutor, mCustomThemeWrapper,
mRetrofit, apiHandlerProvider.getApiHandler(),mRedgifsRetrofit,
mRetrofit, mRedgifsRetrofit,
mStreamableApiProvider, mRedditDataRoomDatabase, mGlide, mSeparatePostAndComments,
mAccessToken, mAccountName, mPost, mLocale, mSharedPreferences,
mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences,
@@ -1369,7 +1368,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
pages_loaded++;
mCommentsAdapter = new CommentsRecyclerViewAdapter(activity,
ViewPostDetailFragment.this, mCustomThemeWrapper, mExecutor,
mRetrofit, apiHandlerProvider.getApiHandler(), mAccessToken, mAccountQualifiedName, mPost, mLocale,
mRetrofit, mAccessToken, mAccountQualifiedName, mPost, mLocale,
mSingleCommentId, isSingleCommentThreadMode, mSharedPreferences, mCurrentAccountSharedPreferences,
new CommentsRecyclerViewAdapter.CommentRecyclerViewAdapterCallback() {
@Override
@@ -1614,7 +1613,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
Map<String, String> params = new HashMap<>();
params.put(APIUtils.ID_KEY, mPost.getFullName());
mRetrofit.getRetrofit().create(LemmyBetaAPI.class).postUpdate(new EditPostDTO(mPost.getId(), mPost.getTitle(), mPost.getUrl(), mPost.getSelfText(), true, null, mAccessToken))
mRetrofit.getRetrofit().create(LemmyAPI.class).postUpdate(new EditPostDTO(mPost.getId(), mPost.getTitle(), mPost.getUrl(), mPost.getSelfText(), true, null, mAccessToken))
.enqueue(new Callback<String>() {
@Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
@@ -1652,7 +1651,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
Map<String, String> params = new HashMap<>();
params.put(APIUtils.ID_KEY, mPost.getFullName());
mRetrofit.getRetrofit().create(LemmyBetaAPI.class).postUpdate(new EditPostDTO(mPost.getId(), mPost.getTitle(), mPost.getUrl(), mPost.getSelfText(), false, null, mAccessToken))
mRetrofit.getRetrofit().create(LemmyAPI.class).postUpdate(new EditPostDTO(mPost.getId(), mPost.getTitle(), mPost.getUrl(), mPost.getSelfText(), false, null, mAccessToken))
.enqueue(new Callback<String>() {
@Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {

View File

@@ -18,8 +18,6 @@ import eu.toldi.infinityforlemmy.customviews.CustomMarkwonAdapter;
import io.noties.markwon.Markwon;
import io.noties.markwon.MarkwonPlugin;
import io.noties.markwon.ext.strikethrough.StrikethroughPlugin;
import io.noties.markwon.ext.tables.TablePlugin;
import io.noties.markwon.html.HtmlPlugin;
import io.noties.markwon.image.glide.GlideImagesPlugin;
import io.noties.markwon.inlineparser.BangInlineProcessor;
import io.noties.markwon.inlineparser.HtmlInlineProcessor;
@@ -46,27 +44,35 @@ public class MarkdownUtils {
Markwon result;
if (dataSaverEnabled) {
result = Markwon.builder(context)
.usePlugin(MarkwonInlineParserPlugin.create(plugin -> {
plugin.excludeInlineProcessor(HtmlInlineProcessor.class);
}))
.usePlugin(miscPlugin)
.usePlugin(new ScriptRewriteSupportPlugin())
.usePlugin(new MarkwonSpoilerPlugin(true))
.usePlugin(HtmlPlugin.create())
.usePlugin(SuperscriptPlugin.create())
.usePlugin(SpoilerParserPlugin.create(markdownColor, spoilerBackgroundColor))
.usePlugin(RedditHeadingPlugin.create())
.usePlugin(StrikethroughPlugin.create())
.usePlugin(TablePlugin.create(context))
.usePlugin(MovementMethodPlugin.create(new SpoilerAwareMovementMethod()
.setOnLinkLongClickListener(onLinkLongClickListener)))
.usePlugin(LinkifyPlugin.create(Linkify.WEB_URLS))
.usePlugin(TableEntryPlugin.create(context))
.usePlugin(new MarkwonLemmyLinkPlugin())
.build();
} else {
result = Markwon.builder(context)
.usePlugin(GlideImagesPlugin.create(new GlideMarkdownLoader(mGlide)))
.usePlugin(MarkwonInlineParserPlugin.create(plugin -> {
plugin.excludeInlineProcessor(HtmlInlineProcessor.class);
}))
.usePlugin(miscPlugin)
.usePlugin(new ScriptRewriteSupportPlugin())
.usePlugin(new MarkwonSpoilerPlugin(true))
.usePlugin(HtmlPlugin.create())
.usePlugin(SuperscriptPlugin.create())
.usePlugin(SpoilerParserPlugin.create(markdownColor, spoilerBackgroundColor))
.usePlugin(RedditHeadingPlugin.create())
.usePlugin(StrikethroughPlugin.create())
.usePlugin(MovementMethodPlugin.create(new SpoilerAwareMovementMethod()
.setOnLinkLongClickListener(onLinkLongClickListener)))
.usePlugin(LinkifyPlugin.create(Linkify.WEB_URLS))
.usePlugin(TablePlugin.create(context))
.usePlugin(TableEntryPlugin.create(context))
.usePlugin(ClickableGlideImagesPlugin.create(context))
.usePlugin(new MarkwonLemmyLinkPlugin())
.build();
@@ -81,27 +87,32 @@ public class MarkdownUtils {
Markwon result;
if (dataSaverEnabled) {
result = Markwon.builder(context)
.usePlugin(MarkwonInlineParserPlugin.create(plugin -> {
plugin.excludeInlineProcessor(HtmlInlineProcessor.class);
}))
.usePlugin(miscPlugin)
.usePlugin(new ScriptRewriteSupportPlugin())
.usePlugin(new MarkwonSpoilerPlugin(true))
.usePlugin(HtmlPlugin.create())
.usePlugin(SuperscriptPlugin.create())
.usePlugin(RedditHeadingPlugin.create())
.usePlugin(StrikethroughPlugin.create())
.usePlugin(MovementMethodPlugin.create(new SpoilerAwareMovementMethod()
.setOnLinkLongClickListener(onLinkLongClickListener)))
.usePlugin(LinkifyPlugin.create(Linkify.WEB_URLS))
.usePlugin(TablePlugin.create(context))
.usePlugin(TableEntryPlugin.create(context))
.usePlugin(new MarkwonLemmyLinkPlugin())
.build();
} else {
result = Markwon.builder(context)
.usePlugin(MarkwonInlineParserPlugin.create(plugin -> {
plugin.excludeInlineProcessor(HtmlInlineProcessor.class);
}))
.usePlugin(miscPlugin)
.usePlugin(new ScriptRewriteSupportPlugin())
.usePlugin(new MarkwonSpoilerPlugin(true))
.usePlugin(HtmlPlugin.create())
.usePlugin(SuperscriptPlugin.create())
.usePlugin(RedditHeadingPlugin.create())
.usePlugin(StrikethroughPlugin.create())
.usePlugin(MovementMethodPlugin.create(new SpoilerAwareMovementMethod()
.setOnLinkLongClickListener(onLinkLongClickListener)))
.usePlugin(LinkifyPlugin.create(Linkify.WEB_URLS))
.usePlugin(TablePlugin.create(context))
.usePlugin(TableEntryPlugin.create(context))
.usePlugin(GlideImagesPlugin.create(context.getApplicationContext()))
.usePlugin(new MarkwonLemmyLinkPlugin())
.build();

View File

@@ -7,7 +7,7 @@ import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
import eu.toldi.infinityforlemmy.comment.Comment;
import eu.toldi.infinityforlemmy.comment.ParseComment;
import retrofit2.Call;
@@ -17,7 +17,7 @@ import retrofit2.Retrofit;
public class FetchCommentInteractions {
public static void fetchReplies(Retrofit retrofit, Integer page, boolean unreadOnly, String auth, FetchCommentInteractionsListener fetchMessagesListener) {
LemmyBetaAPI api = retrofit.create(LemmyBetaAPI.class);
LemmyAPI api = retrofit.create(LemmyAPI.class);
api.userReplies("New", page, 25, unreadOnly, auth).enqueue(
new Callback<String>() {
@@ -55,7 +55,7 @@ public class FetchCommentInteractions {
}
static void fetchMentions(Retrofit retrofit, Integer page, boolean unreadOnly, String auth, FetchCommentInteractionsListener fetchMessagesListener) {
LemmyBetaAPI api = retrofit.create(LemmyBetaAPI.class);
LemmyAPI api = retrofit.create(LemmyAPI.class);
api.userMentions("New", page, 25, unreadOnly, auth).enqueue(
new Callback<String>() {

View File

@@ -2,7 +2,7 @@ package eu.toldi.infinityforlemmy.message;
import androidx.annotation.NonNull;
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
import eu.toldi.infinityforlemmy.dto.AuthDTO;
import eu.toldi.infinityforlemmy.dto.ReadCommentDTO;
import retrofit2.Call;
@@ -13,7 +13,7 @@ import retrofit2.Retrofit;
public class ReadMessage {
public static void readMessage(Retrofit oauthRetrofit, String accessToken, int messageId,
ReadMessageListener readMessageListener) {
oauthRetrofit.create(LemmyBetaAPI.class).commentMarkAsRead(new ReadCommentDTO(messageId, true, accessToken))
oauthRetrofit.create(LemmyAPI.class).commentMarkAsRead(new ReadCommentDTO(messageId, true, accessToken))
.enqueue(new Callback<String>() {
@Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
@@ -33,7 +33,7 @@ public class ReadMessage {
public static void readAllMessages(Retrofit retrofit, String accessToken,
ReadMessageListener readMessageListener) {
retrofit.create(LemmyBetaAPI.class).userMarkAllAsRead(new AuthDTO(accessToken))
retrofit.create(LemmyAPI.class).userMarkAllAsRead(new AuthDTO(accessToken))
.enqueue(new Callback<String>() {
@Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {

View File

@@ -6,7 +6,7 @@ import androidx.annotation.NonNull;
import java.util.concurrent.Executor;
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
import eu.toldi.infinityforlemmy.apis.RedditAPI;
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher;
import retrofit2.Call;
@@ -19,7 +19,7 @@ public class FetchPost {
PostEnricher postEnricher, FetchPostListener fetchPostListener) {
Call<String> postCall;
// Use LemmyAPI.postInfo() instead of RedditAPI.getPost()
postCall = retrofit.create(LemmyBetaAPI.class).postInfo(Integer.parseInt(id), null, accessToken);
postCall = retrofit.create(LemmyAPI.class).postInfo(Integer.parseInt(id), null, accessToken);
postCall.enqueue(new Callback<>() {
@Override

View File

@@ -1,7 +1,7 @@
package eu.toldi.infinityforlemmy.post;
import eu.toldi.infinityforlemmy.RetrofitHolder;
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
import eu.toldi.infinityforlemmy.dto.ReadPostDTO;
import retrofit2.Call;
import retrofit2.Callback;
@@ -15,9 +15,9 @@ public class MarkPostAsRead {
}
private void setPostAsRead(int post_id, boolean markAsRead, String auth, MarkPostAsReadListener markPostAsReadListener) {
LemmyBetaAPI lemmyBetaAPI = retrofitHolder.getRetrofit().create(LemmyBetaAPI.class);
LemmyAPI lemmyAPI = retrofitHolder.getRetrofit().create(LemmyAPI.class);
lemmyBetaAPI.postRead(new ReadPostDTO(post_id, markAsRead, auth)).enqueue(new Callback<String>() {
lemmyAPI.postRead(new ReadPostDTO(post_id, markAsRead, auth)).enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String> call, Response<String> response) {
if (response.isSuccessful()

View File

@@ -6,7 +6,7 @@ import org.json.JSONObject;
import java.util.Objects;
import eu.toldi.infinityforlemmy.RetrofitHolder;
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
import eu.toldi.infinityforlemmy.comment.Comment;
import eu.toldi.infinityforlemmy.comment.ParseComment;
import retrofit2.Call;
@@ -22,9 +22,9 @@ public class ObjectResolver {
}
public void resolvePost(String query, String auth, ObjectResolverListener objectResolverListener) {
LemmyBetaAPI lemmyBetaAPI = retrofitHolder.getRetrofit().create(LemmyBetaAPI.class);
LemmyAPI lemmyAPI = retrofitHolder.getRetrofit().create(LemmyAPI.class);
Call<String> response = lemmyBetaAPI.resolveObject(query, auth);
Call<String> response = lemmyAPI.resolveObject(query, auth);
response.enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String> call, Response<String> response) {
@@ -52,9 +52,9 @@ public class ObjectResolver {
}
public void resolveComment(String query, String auth, ObjectResolverListener objectResolverListener) {
LemmyBetaAPI lemmyBetaAPI = retrofitHolder.getRetrofit().create(LemmyBetaAPI.class);
LemmyAPI lemmyAPI = retrofitHolder.getRetrofit().create(LemmyAPI.class);
Call<String> response = lemmyBetaAPI.resolveObject(query, auth);
Call<String> response = lemmyAPI.resolveObject(query, auth);
response.enqueue(
new Callback<String>() {
@Override

View File

@@ -24,7 +24,7 @@ import java.util.regex.Pattern;
import eu.toldi.infinityforlemmy.RetrofitHolder;
import eu.toldi.infinityforlemmy.SortType;
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher;
import eu.toldi.infinityforlemmy.postfilter.PostFilter;
import eu.toldi.infinityforlemmy.utils.MultiCommunityUtils;
@@ -169,7 +169,7 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
@NonNull
@Override
public ListenableFuture<LoadResult<Integer, Post>> loadFuture(@NonNull LoadParams<Integer> loadParams) {
LemmyBetaAPI api = retrofit.getRetrofit().create(LemmyBetaAPI.class);
LemmyAPI api = retrofit.getRetrofit().create(LemmyAPI.class);
switch (postType) {
case TYPE_FRONT_PAGE:
@@ -220,7 +220,7 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
}
}
private ListenableFuture<LoadResult<Integer, Post>> loadHomePosts(@NonNull LoadParams<Integer> loadParams, LemmyBetaAPI api) {
private ListenableFuture<LoadResult<Integer, Post>> loadHomePosts(@NonNull LoadParams<Integer> loadParams, LemmyAPI api) {
ListenableFuture<Response<String>> bestPost;
Integer page;
if (loadParams.getKey() == null) {
@@ -249,7 +249,7 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
IOException.class, LoadResult.Error::new, executor);
}
private ListenableFuture<LoadResult<Integer, Post>> loadSubredditPosts(@NonNull LoadParams<Integer> loadParams, LemmyBetaAPI api) {
private ListenableFuture<LoadResult<Integer, Post>> loadSubredditPosts(@NonNull LoadParams<Integer> loadParams, LemmyAPI api) {
ListenableFuture<Response<String>> subredditPost;
subredditPost = api.getPostsListenableFuture(null, sortType.getType().value, loadParams.getKey(), 25, null, subredditOrUserName, false, accessToken);
@@ -265,7 +265,7 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
IOException.class, LoadResult.Error::new, executor);
}
private ListenableFuture<LoadResult<Integer, Post>> loadUserPosts(@NonNull LoadParams<Integer> loadParams, LemmyBetaAPI api) {
private ListenableFuture<LoadResult<Integer, Post>> loadUserPosts(@NonNull LoadParams<Integer> loadParams, LemmyAPI api) {
ListenableFuture<Response<String>> userPosts;
userPosts = api.getUserPostsListenableFuture(subredditOrUserName, sortType.getType().value, loadParams.getKey(), 25, userWhere.equals(USER_WHERE_SAVED), accessToken);
@@ -280,7 +280,7 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
IOException.class, LoadResult.Error::new, executor);
}
private ListenableFuture<LoadResult<Integer, Post>> loadSearchPosts(@NonNull LoadParams<Integer> loadParams, LemmyBetaAPI api) {
private ListenableFuture<LoadResult<Integer, Post>> loadSearchPosts(@NonNull LoadParams<Integer> loadParams, LemmyAPI api) {
ListenableFuture<Response<String>> searchPosts;
searchPosts = api.searchLive(query, null, subredditOrUserName, null, "Posts", sortType.getType().value, "All", loadParams.getKey(), 25, accessToken);
@@ -298,7 +298,7 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
Map<String, List<Post>> undisplayedPosts = new HashMap<>();
private ListenableFuture<LoadResult<Integer, Post>> loadMultipleSubredditPosts(@NonNull LoadParams<Integer> loadParams, LemmyBetaAPI api, List<String> communities) {
private ListenableFuture<LoadResult<Integer, Post>> loadMultipleSubredditPosts(@NonNull LoadParams<Integer> loadParams, LemmyAPI api, List<String> communities) {
List<ListenableFuture<LoadResult<Integer, Post>>> futures = new ArrayList<>();
List<Post> combinedPostsFromCache = new ArrayList<>();
@@ -352,7 +352,7 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
}, executor);
}
private ListenableFuture<LoadResult<Integer, Post>> fetchPostsFromCommunity(LemmyBetaAPI api, LoadParams<Integer> loadParams, String community) {
private ListenableFuture<LoadResult<Integer, Post>> fetchPostsFromCommunity(LemmyAPI api, LoadParams<Integer> loadParams, String community) {
ListenableFuture<Response<String>> subredditPost;
@@ -390,7 +390,7 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
IOException.class, LoadResult.Error::new, executor);
}*/
private ListenableFuture<LoadResult<Integer, Post>> loadAnonymousHomePosts(@NonNull LoadParams<Integer> loadParams, LemmyBetaAPI api) {
private ListenableFuture<LoadResult<Integer, Post>> loadAnonymousHomePosts(@NonNull LoadParams<Integer> loadParams, LemmyAPI api) {
if (subredditOrUserName == null) {
// Return empty list
return Futures.immediateFuture(new LoadResult.Page<>(new ArrayList<>(), null, null));

View File

@@ -26,7 +26,7 @@ import java.util.regex.Pattern;
import eu.toldi.infinityforlemmy.RetrofitHolder;
import eu.toldi.infinityforlemmy.SortType;
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
import eu.toldi.infinityforlemmy.multicommunity.MulticommunityPagingSource;
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher;
import eu.toldi.infinityforlemmy.postfilter.PostFilter;
@@ -252,7 +252,7 @@ public class PostViewModel extends ViewModel {
case PostPagingSource.TYPE_MULTI_REDDIT:
case PostPagingSource.TYPE_ANONYMOUS_FRONT_PAGE:
String[] communities = (name != null) ? name.split(Pattern.quote(",")) : new String[0];
paging3PagingSource = new MulticommunityPagingSource(retrofit.getRetrofit().create(LemmyBetaAPI.class), List.of(communities), accessToken,
paging3PagingSource = new MulticommunityPagingSource(retrofit.getRetrofit().create(LemmyAPI.class), List.of(communities), accessToken,
sortType, executor, postFilter, (readPostList != null) ? readPostList : new ArrayList<>(), postEnricher);
break;
case PostPagingSource.TYPE_SEARCH:

View File

@@ -13,7 +13,7 @@ import java.util.concurrent.Executor;
import eu.toldi.infinityforlemmy.Flair;
import eu.toldi.infinityforlemmy.RetrofitHolder;
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
import eu.toldi.infinityforlemmy.dto.SubmitPostDTO;
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher;
import eu.toldi.infinityforlemmy.utils.APIUtils;
@@ -68,7 +68,7 @@ public class SubmitPost {
boolean receivePostReplyNotifications, String kind,
@Nullable String posterUrl, PostEnricher postEnricher,
SubmitPostListener submitPostListener) {
LemmyBetaAPI api = oauthRetrofit.create(LemmyBetaAPI.class);
LemmyAPI api = oauthRetrofit.create(LemmyAPI.class);
Call<String> submitPostCall = api.postCreate(new SubmitPostDTO(title, communityId, posterUrl, content, null, isNSFW, null, accessToken));

View File

@@ -2,14 +2,14 @@ package eu.toldi.infinityforlemmy.site;
import org.json.JSONException;
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
import eu.toldi.infinityforlemmy.user.MyUserInfo;
import retrofit2.Retrofit;
public class FetchSiteInfo {
public static void fetchSiteInfo(Retrofit retrofit, String accesToken, FetchSiteInfoListener fetchSiteInfoListener) {
retrofit.create(LemmyBetaAPI.class).getSiteInfo(accesToken).enqueue(
retrofit.create(LemmyAPI.class).getSiteInfo(accesToken).enqueue(
new retrofit2.Callback<String>() {
@Override
public void onResponse(retrofit2.Call<String> call, retrofit2.Response<String> response) {

View File

@@ -8,7 +8,7 @@ import java.util.concurrent.Executor;
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
import eu.toldi.infinityforlemmy.account.Account;
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
import eu.toldi.infinityforlemmy.dto.FollowCommunityDTO;
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
import eu.toldi.infinityforlemmy.utils.LemmyUtils;
@@ -63,7 +63,7 @@ public class CommunitySubscription {
String accountName, String action,
RedditDataRoomDatabase redditDataRoomDatabase,
SubredditSubscriptionListener subredditSubscriptionListener) {
LemmyBetaAPI api = retrofit.create(LemmyBetaAPI.class);
LemmyAPI api = retrofit.create(LemmyAPI.class);
Call<String> subredditSubscriptionCall = api.communityFollow(new FollowCommunityDTO(communityId, action.equals("sub"), accessToken));

View File

@@ -5,7 +5,7 @@ import androidx.annotation.NonNull;
import java.util.ArrayList;
import eu.toldi.infinityforlemmy.SortType;
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
@@ -13,7 +13,7 @@ import retrofit2.Retrofit;
public class FetchSubredditData {
public static void fetchSubredditData(Retrofit retrofit, String subredditName, String accessToken, final FetchSubredditDataListener fetchSubredditDataListener) {
LemmyBetaAPI api = retrofit.create(LemmyBetaAPI.class);
LemmyAPI api = retrofit.create(LemmyAPI.class);
Call<String> subredditData;
subredditData = api.communityInfo(subredditName, accessToken);
@@ -47,7 +47,7 @@ public class FetchSubredditData {
static void fetchSubredditListingData(Retrofit retrofit, String query, Integer page, SortType.Type sortType, String accessToken,
boolean nsfw, final FetchSubredditListingDataListener fetchSubredditListingDataListener) {
LemmyBetaAPI api = retrofit.create(LemmyBetaAPI.class);
LemmyAPI api = retrofit.create(LemmyAPI.class);
Call<String> subredditDataCall = api.search(query, null, null, null, "Communities", sortType.value, "All", page, 25, accessToken);

View File

@@ -85,7 +85,7 @@ public class ParseSubredditData {
return new SubredditData(id, name, title, description, removed, published, updated, deleted, isNSFW, actorId, local, iconUrl, bannerImageUrl, hidden, postingRestrictedToMods, instanceId, subscribers, blocked, stats);
}
public interface ParseSubredditDataListener {
interface ParseSubredditDataListener {
void onParseSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers);
void onParseSubredditDataFail();

View File

@@ -2,7 +2,7 @@ package eu.toldi.infinityforlemmy.user;
import androidx.annotation.NonNull;
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
import eu.toldi.infinityforlemmy.dto.UserBlockDTO;
import retrofit2.Call;
import retrofit2.Callback;
@@ -17,7 +17,7 @@ public class BlockUser {
}
public static void blockUser(Retrofit retrofit, String accessToken, int userID, boolean block, BlockUserListener blockUserListener) {
LemmyBetaAPI api = retrofit.create(LemmyBetaAPI.class);
LemmyAPI api = retrofit.create(LemmyAPI.class);
api.userBlock(new UserBlockDTO(userID, block, accessToken)).enqueue(new Callback<>() {
@Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {

View File

@@ -6,7 +6,7 @@ import java.util.ArrayList;
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
import eu.toldi.infinityforlemmy.SortType;
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
import eu.toldi.infinityforlemmy.message.MessageCount;
import retrofit2.Call;
import retrofit2.Callback;
@@ -19,7 +19,7 @@ public class FetchUserData {
public static void fetchUserData(RedditDataRoomDatabase redditDataRoomDatabase, Retrofit retrofit,
String accessToken, String userName, FetchUserDataListener fetchUserDataListener) {
LemmyBetaAPI api = retrofit.create(LemmyBetaAPI.class);
LemmyAPI api = retrofit.create(LemmyAPI.class);
Call<String> userInfo;
if (redditDataRoomDatabase == null) {
@@ -56,7 +56,7 @@ public class FetchUserData {
public static void fetchUserListingData(Retrofit retrofit, String query, Integer page, SortType.Type sortType, boolean nsfw,
FetchUserListingDataListener fetchUserListingDataListener) {
LemmyBetaAPI api = retrofit.create(LemmyBetaAPI.class);
LemmyAPI api = retrofit.create(LemmyAPI.class);
Call<String> userInfo = api.search(query, null, null, null, "Users", sortType.value, "All", page, 25, null);
userInfo.enqueue(new Callback<>() {
@@ -87,7 +87,7 @@ public class FetchUserData {
}
public static void fetchUnreadCount(Retrofit retrofit, String accessToken, FetchUserUnreadCountListener fetchUserUnreadCountListener) {
LemmyBetaAPI api = retrofit.create(LemmyBetaAPI.class);
LemmyAPI api = retrofit.create(LemmyAPI.class);
Call<MessageCount> userUnreadCount = api.userUnreadCount(accessToken);
userUnreadCount.enqueue(new Callback<>() {
@@ -108,7 +108,7 @@ public class FetchUserData {
}
public static void validateAuthToken(Retrofit retrofit, ValidateAuthTokenListener validateAuthTokenListener) {
LemmyBetaAPI api = retrofit.create(LemmyBetaAPI.class);
LemmyAPI api = retrofit.create(LemmyAPI.class);
Call<String> validateAuthToken = api.userValidateAuth();
validateAuthToken.enqueue(new Callback<>() {

View File

@@ -12,7 +12,7 @@ import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
import eu.toldi.infinityforlemmy.utils.JSONUtils;
public class ParseUserData {
public static void parseUserData(RedditDataRoomDatabase redditDataRoomDatabase, String response,
static void parseUserData(RedditDataRoomDatabase redditDataRoomDatabase, String response,
ParseUserDataListener parseUserDataListener) {
new ParseUserDataAsyncTask(redditDataRoomDatabase, response, parseUserDataListener).execute();
}
@@ -69,7 +69,7 @@ public class ParseUserData {
return new UserData(account_id, userName, title, iconImageUrl, isBanned, cakeday, actor_id, isLocal, isDeleted, isAdmin, isBot, instance_id, userStats);
}
public interface ParseUserDataListener {
interface ParseUserDataListener {
void onParseUserDataSuccess(UserData userData, int inboxCount);
void onParseUserDataFailed();

View File

@@ -18,7 +18,7 @@ import java.util.HashMap;
import java.util.Map;
import eu.toldi.infinityforlemmy.RetrofitHolder;
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
@@ -43,7 +43,7 @@ public class UploadImageUtils {
RequestBody fileBody = RequestBody.create(byteArray, MediaType.parse("application/octet-stream"));
MultipartBody.Part fileToUpload = MultipartBody.Part.createFormData("images[]", "post_image.jpg", fileBody);
LemmyBetaAPI api = mRetrofit.getRetrofit().create(LemmyBetaAPI.class);
LemmyAPI api = mRetrofit.getRetrofit().create(LemmyAPI.class);
Call<String> uploadMedia = api.uploadImage("jwt=" + accessToken, fileToUpload);
Response<String> uploadMediaResponse = uploadMedia.execute();
if (uploadMediaResponse.isSuccessful()) {

View File

@@ -1,7 +1,7 @@
package eu.toldi.infinityforlemmy.comment
import eu.toldi.infinityforlemmy.RetrofitHolder
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI
import eu.toldi.infinityforlemmy.apis.LemmyAPI
import eu.toldi.infinityforlemmy.dto.ReportCommentDTO
import retrofit2.Call
import retrofit2.Callback
@@ -9,7 +9,7 @@ import retrofit2.Callback
class LemmyCommentAPI(val retrofitHolder: RetrofitHolder) {
fun reportComment(id: Int, reason: String, auth: String, callback: ReportCommentCallback) {
val api = retrofitHolder.retrofit.create(LemmyBetaAPI::class.java)
val api = retrofitHolder.retrofit.create(LemmyAPI::class.java)
api.commentReport(ReportCommentDTO(id, reason, auth)).enqueue(object : Callback<String> {
override fun onResponse(
call: retrofit2.Call<String>,

View File

@@ -1,6 +1,6 @@
package eu.toldi.infinityforlemmy.community
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI
import eu.toldi.infinityforlemmy.apis.LemmyAPI
import eu.toldi.infinityforlemmy.dto.BlockCommunityDTO
import retrofit2.Call
import retrofit2.Callback
@@ -15,7 +15,7 @@ object BlockCommunity {
auth: String,
blockCommunityListener: BlockCommunityListener
) {
val api = retrofit.create(LemmyBetaAPI::class.java)
val api = retrofit.create(LemmyAPI::class.java)
api.communityBlock(BlockCommunityDTO(communityId, true, auth))?.enqueue(
object : Callback<String> {
override fun onResponse(call: Call<String>, response: Response<String>) {
@@ -39,7 +39,7 @@ object BlockCommunity {
auth: String,
blockCommunityListener: BlockCommunityListener
) {
val api = retrofit.create(LemmyBetaAPI::class.java)
val api = retrofit.create(LemmyAPI::class.java)
api.communityBlock(BlockCommunityDTO(communityId, false, auth))?.enqueue(
object : Callback<String> {
override fun onResponse(call: Call<String>, response: Response<String>) {

View File

@@ -1,158 +0,0 @@
package eu.toldi.infinityforlemmy.markdown
import android.text.SpannableStringBuilder
import android.text.Spanned
import android.text.TextPaint
import android.text.style.ClickableSpan
import android.util.Log
import android.view.View
import android.widget.TextView
import io.noties.markwon.AbstractMarkwonPlugin
import io.noties.markwon.MarkwonPlugin
import io.noties.markwon.MarkwonVisitor
import io.noties.markwon.core.CorePlugin
import io.noties.markwon.image.AsyncDrawableScheduler
// Source copied from https://github.com/LemmyNet/jerboa/blob/main/app/src/main/java/com/jerboa/util/markwon/MarkwonSpoilerPlugin.kt
data class SpoilerTitleSpan(
val title: CharSequence,
)
class SpoilerCloseSpan
class MarkwonSpoilerPlugin(
val enableInteraction: Boolean,
) : AbstractMarkwonPlugin() {
override fun configure(registry: MarkwonPlugin.Registry) {
registry.require(CorePlugin::class.java) {
it.addOnTextAddedListener(
SpoilerTextAddedListener(),
)
}
}
private class SpoilerTextAddedListener : CorePlugin.OnTextAddedListener {
override fun onTextAdded(
visitor: MarkwonVisitor,
text: String,
start: Int,
) {
val spoilerTitleRegex = Regex("(:::\\s+spoiler\\s+)(.*)")
// Find all spoiler "start" lines
val spoilerTitles = spoilerTitleRegex.findAll(text)
for (match in spoilerTitles) {
val spoilerTitle = match.groups[2]!!.value
visitor.builder().setSpan(
SpoilerTitleSpan(spoilerTitle),
start,
start + match.groups[2]!!.range.last,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE,
)
}
val spoilerCloseRegex = Regex("^(?!.*spoiler).*:::")
// Find all spoiler "end" lines
val spoilerCloses = spoilerCloseRegex.findAll(text)
for (match in spoilerCloses) {
visitor
.builder()
.setSpan(SpoilerCloseSpan(), start, start + 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
}
}
}
override fun afterSetText(textView: TextView) {
try {
val spanned = SpannableStringBuilder(textView.text)
val spoilerTitleSpans =
spanned.getSpans(0, spanned.length, SpoilerTitleSpan::class.java)
val spoilerCloseSpans =
spanned.getSpans(0, spanned.length, SpoilerCloseSpan::class.java)
spoilerTitleSpans.sortBy { spanned.getSpanStart(it) }
spoilerCloseSpans.sortBy { spanned.getSpanStart(it) }
spoilerTitleSpans.forEachIndexed { index, spoilerTitleSpan ->
val spoilerStart = spanned.getSpanStart(spoilerTitleSpan)
var spoilerEnd = spanned.length
if (index < spoilerCloseSpans.size) {
val spoilerCloseSpan = spoilerCloseSpans[index]
spoilerEnd = spanned.getSpanEnd(spoilerCloseSpan)
}
var open = false
// The space at the end is necessary for the lengths to be the same
// This reduces complexity as else it would need complex logic to determine the replacement length
val getSpoilerTitle = { openParam: Boolean ->
if (openParam) "${spoilerTitleSpan.title}\n" else "${spoilerTitleSpan.title}\u200B"
}
val spoilerTitle = getSpoilerTitle(false)
val spoilerContent =
spanned.subSequence(
spanned.getSpanEnd(spoilerTitleSpan) + 1,
spoilerEnd - 3,
) as SpannableStringBuilder
// Remove spoiler content from span
spanned.replace(spoilerStart, spoilerEnd, spoilerTitle)
// Set span block title
spanned.setSpan(
spoilerTitle,
spoilerStart,
spoilerStart + spoilerTitle.length,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE,
)
val wrapper =
object : ClickableSpan() {
override fun onClick(p0: View) {
if (enableInteraction) {
textView.cancelPendingInputEvents()
open = !open
val spoilerStartCurrent = spanned.getSpanStart(spoilerTitle)
spanned.replace(
spoilerStartCurrent,
spoilerStartCurrent + spoilerTitle.length,
getSpoilerTitle(open),
)
if (open) {
spanned.insert(spoilerStartCurrent + spoilerTitle.length, spoilerContent)
} else {
spanned.replace(
spoilerStartCurrent + spoilerTitle.length,
spoilerStartCurrent + spoilerTitle.length + spoilerContent.length,
"",
)
}
textView.text = spanned
AsyncDrawableScheduler.schedule(textView)
}
}
override fun updateDrawState(ds: TextPaint) {
}
}
// Set spoiler block type as ClickableSpan
spanned.setSpan(
wrapper,
spoilerStart,
spoilerStart + spoilerTitle.length,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE,
)
textView.text = spanned
}
} catch (e: Exception) {
Log.w("jerboa", "Failed to parse spoiler tag. Format incorrect")
}
}
}

View File

@@ -1,26 +0,0 @@
package eu.toldi.infinityforlemmy.markdown
import io.noties.markwon.AbstractMarkwonPlugin
// Source copied from https://github.com/LemmyNet/jerboa/blob/main/app/src/main/java/com/jerboa/util/markwon/ScriptRewriteSupportPlugin.kt
class ScriptRewriteSupportPlugin : AbstractMarkwonPlugin() {
override fun processMarkdown(markdown: String): String =
super.processMarkdown(
if (markdown.contains("^") || markdown.contains("~")) {
rewriteLemmyScriptToMarkwonScript(markdown)
} else { // Fast path: if there are no markdown characters, we don't need to do anything
markdown
},
)
companion object {
val SUPERSCRIPT_RGX = Regex("""\^([^\n^]+)\^""")
val SUBSCRIPT_RGX = Regex("""(?<!~)~([^\n~]+)~""")
fun rewriteLemmyScriptToMarkwonScript(text: String): String =
text
.replace(SUPERSCRIPT_RGX, "<sup>$1</sup>")
.replace(SUBSCRIPT_RGX, "<sub>$1</sub>")
}
}

View File

@@ -6,7 +6,7 @@ import com.google.common.base.Function
import com.google.common.util.concurrent.Futures
import com.google.common.util.concurrent.ListenableFuture
import eu.toldi.infinityforlemmy.SortType
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI
import eu.toldi.infinityforlemmy.apis.LemmyAPI
import eu.toldi.infinityforlemmy.post.ParsePost
import eu.toldi.infinityforlemmy.post.Post
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher
@@ -21,7 +21,7 @@ import java.util.concurrent.Executor
class MulticommunityPagingSource(
private val api: LemmyBetaAPI,
private val api: LemmyAPI,
private val communities: List<String>,
private val accessToken: String?,
private val sortType: SortType,
@@ -133,7 +133,7 @@ class MulticommunityPagingSource(
}
private fun fetchPostsFromCommunity(
api: LemmyBetaAPI,
api: LemmyAPI,
pageNumber: Int,
community: String
): ListenableFuture<LoadResult<Int, Post>> {

View File

@@ -1,7 +1,7 @@
package eu.toldi.infinityforlemmy.post
import eu.toldi.infinityforlemmy.RetrofitHolder
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI
import eu.toldi.infinityforlemmy.apis.LemmyAPI
import eu.toldi.infinityforlemmy.dto.ReportPostDTO
import retrofit2.Call
import retrofit2.Callback
@@ -9,7 +9,7 @@ import retrofit2.Callback
class LemmyPostAPI(val retrofitHolder: RetrofitHolder) {
fun reportPost(postId: Int, reason: String, auth: String, callback: ReportPostCallback) {
val api = retrofitHolder.retrofit.create(LemmyBetaAPI::class.java)
val api = retrofitHolder.retrofit.create(LemmyAPI::class.java)
api.postReport(ReportPostDTO(postId, reason, auth)).enqueue(object : Callback<String> {
override fun onResponse(
call: retrofit2.Call<String>,

View File

@@ -1,7 +1,7 @@
package eu.toldi.infinityforlemmy.privatemessage
import eu.toldi.infinityforlemmy.RetrofitHolder
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI
import eu.toldi.infinityforlemmy.apis.LemmyAPI
import eu.toldi.infinityforlemmy.dto.PrivateMessageDTO
import eu.toldi.infinityforlemmy.dto.PrivateMessageReadDTO
import eu.toldi.infinityforlemmy.utils.LemmyUtils
@@ -17,7 +17,7 @@ class LemmyPrivateMessageAPI(val retrofitHolder: RetrofitHolder) {
limit: Int = 25,
unreadOnly: Boolean = false
) {
val api = retrofitHolder.retrofit.create(LemmyBetaAPI::class.java)
val api = retrofitHolder.retrofit.create(LemmyAPI::class.java)
api.privateMessagesList(page, limit, unreadOnly, auth).enqueue(
object : retrofit2.Callback<String> {
override fun onResponse(
@@ -51,7 +51,7 @@ class LemmyPrivateMessageAPI(val retrofitHolder: RetrofitHolder) {
privateMessageId: Int,
listener: PrivateMessageMarkedAsReadListener
) {
val api = retrofitHolder.retrofit.create(LemmyBetaAPI::class.java)
val api = retrofitHolder.retrofit.create(LemmyAPI::class.java)
api.privateMessageMarkAsRead(PrivateMessageReadDTO(privateMessageId, auth, true)).enqueue(
object : retrofit2.Callback<String> {
override fun onResponse(
@@ -78,7 +78,7 @@ class LemmyPrivateMessageAPI(val retrofitHolder: RetrofitHolder) {
content: String,
listener: PrivateMessageSentListener
) {
val api = retrofitHolder.retrofit.create(LemmyBetaAPI::class.java)
val api = retrofitHolder.retrofit.create(LemmyAPI::class.java)
api.privateMessageSend(PrivateMessageDTO(recipientId, content, auth)).enqueue(
object : retrofit2.Callback<String> {

View File

@@ -1,13 +1,13 @@
package eu.toldi.infinityforlemmy.site
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI
import eu.toldi.infinityforlemmy.apis.LemmyAPI
import eu.toldi.infinityforlemmy.dto.BlockInstanceDTO
import retrofit2.Retrofit
object BlockInstance {
fun blockInstance(retrofit: Retrofit, instance_id: Int, block: Boolean, blockInstanceResponse: BlockInstanceResponse) {
val LemmyBetaAPI = retrofit.create(LemmyBetaAPI::class.java)
val response = LemmyBetaAPI.blockInstance(BlockInstanceDTO(instance_id,block)).enqueue(
val LemmyAPI = retrofit.create(LemmyAPI::class.java)
val response = LemmyAPI.blockInstance(BlockInstanceDTO(instance_id,block)).enqueue(
object : retrofit2.Callback<String> {
override fun onResponse(call: retrofit2.Call<String>, response: retrofit2.Response<String>) {
if (response.isSuccessful) {

View File

@@ -125,11 +125,23 @@
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/awards_text_view_item_comment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:visibility="gone"
android:textSize="?attr/font_default"
android:fontFamily="?attr/font_family"
tools:visibility="visible" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/comment_markdown_view_item_post_comment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="8dp"
android:layout_marginStart="16dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:nestedScrollingEnabled="false" />

View File

@@ -256,13 +256,13 @@
android:src="@drawable/ic_link"
android:visibility="gone" />
<TextView
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/content_markdown_view_item_post_detail_gallery"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="8dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:visibility="gone"
android:nestedScrollingEnabled="false" />

View File

@@ -262,13 +262,13 @@
</RelativeLayout>
<TextView
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/content_markdown_view_item_post_detail_image_and_gif_autoplay"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="8dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:visibility="gone"
android:nestedScrollingEnabled="false" />

View File

@@ -271,13 +271,13 @@
</RelativeLayout>
<TextView
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/content_markdown_view_item_post_detail_link"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="8dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:visibility="gone"
android:nestedScrollingEnabled="false" />

View File

@@ -106,17 +106,17 @@
android:focusable="true"
android:longClickable="true" />
<TextView
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/content_markdown_view_item_post_detail_no_preview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="8dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:visibility="gone"
android:nestedScrollingEnabled="false" >
</TextView>
</androidx.recyclerview.widget.RecyclerView>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"

View File

@@ -106,17 +106,17 @@
android:textIsSelectable="true"
android:textSize="?attr/title_font_18" />
<TextView
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/content_markdown_view_item_post_detail_text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="8dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:visibility="gone"
android:nestedScrollingEnabled="false" >
</TextView>
</androidx.recyclerview.widget.RecyclerView>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"

View File

@@ -274,13 +274,13 @@
</RelativeLayout>
<TextView
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/content_markdown_view_item_post_detail_video_and_gif_preview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="8dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:visibility="gone"
android:nestedScrollingEnabled="false" />

View File

@@ -255,13 +255,13 @@
</com.google.android.exoplayer2.ui.AspectRatioFrameLayout>
<TextView
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/content_markdown_view_item_post_detail_video_autoplay"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="8dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:visibility="gone"
android:nestedScrollingEnabled="false" />

View File

@@ -258,13 +258,13 @@
</com.google.android.exoplayer2.ui.AspectRatioFrameLayout>
<TextView
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/content_markdown_view_item_post_detail_video_autoplay"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="8dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:visibility="gone"
android:nestedScrollingEnabled="false" />