Compare commits

..

No commits in common. "2786e620da80ee386fe5c52ed42d8097b13f031f" and "b580eb5c3da0b3336ec098fabebfcc97b9a02e15" have entirely different histories.

18 changed files with 99 additions and 163 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

View File

@ -8,7 +8,7 @@ steps:
sign: sign:
image: alvrme/alpine-android:android-33-jdk11 image: alvrme/alpine-android:android-33-jdk11
commands: commands:
- ./scripts/apk-sign.sh Eternity-signed.apk app/build/outputs/apk/release/app-release-unsigned.apk - ./scripts/apk-sign.sh LemmInfinity-signed.apk app/build/outputs/apk/release/app-release-unsigned.apk
secrets: [ APK_KS_PASS, APK_KS, APK_KS_ALIAS ] secrets: [ APK_KS_PASS, APK_KS, APK_KS_ALIAS ]
when: when:
event: [ tag ] event: [ tag ]
@ -17,7 +17,7 @@ steps:
settings: settings:
base_url: https://codeberg.org base_url: https://codeberg.org
files: files:
- Eternity-signed.apk - LemmInfinity-signed.apk
api_key: api_key:
from_secret: GITEA_ACCESS_TOKEN from_secret: GITEA_ACCESS_TOKEN
target: main target: main

View File

@ -10,28 +10,22 @@ A Lemmy client for Android written in Java. It's a fork of the [Infinity for Red
<br> <br>
<div align="center"> <div align="center">
<img src="https://codeberg.org/Bazsalanszky/Eternity/raw/branch/master/fastlane/metadata/android/en-US/images/icon.png" width=256> <img src="https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy/raw/branch/master/fastlane/metadata/android/en-US/images/icon.png" width=256>
[![status-badge](https://ci.codeberg.org/api/badges/12474/status.svg)](https://ci.codeberg.org/repos/12474) [![status-badge](https://ci.codeberg.org/api/badges/12474/status.svg)](https://ci.codeberg.org/repos/12474)
[![Liberapay patrons](https://img.shields.io/liberapay/patrons/bazsalanszky)](https://liberapay.com/Bazsalanszky) [![Liberapay patrons](https://img.shields.io/liberapay/patrons/bazsalanszky)](https://liberapay.com/Bazsalanszky)
<a href="https://codeberg.org/Bazsalanszky/Eternity/issues">Report a Bug</a> <a href="https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy/issues">Report a Bug</a>
</div> </div>
<div align="center"> <div align="center">
<a href="https://play.google.com/store/apps/details?id=eu.toldi.infinityforlemmy">
<img src="./.assets/google-play-badge.png" height="80">
</a>
<a href="https://apt.izzysoft.de/fdroid/index/apk/eu.toldi.infinityforlemmy"> <a href="https://apt.izzysoft.de/fdroid/index/apk/eu.toldi.infinityforlemmy">
<img src="./.assets/IzzyOnDroid.png" height="80"> <img src="./.assets/IzzyOnDroid.png" height="80">
</a> </a>
<a href="https://codeberg.org/Bazsalanszky/Eternity/releases/"> <a href="https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy/releases/">
<img src="./.assets/codeberg.png" height="80"> <img src="./.assets/codeberg.png" height="80">
</a> </a>
</div> </div>
--- ---
@ -72,19 +66,19 @@ Don't forget to give the project a star! Thanks again!
### Translation ### Translation
You can alos help Eternity by translating it to your native langugage! Translations are done via [Weblate](https://translate.codeberg.org/projects/Eternity/app/)! You can alos help Eternity by translating it to your native langugage! Translations are done via [Weblate](https://translate.codeberg.org/projects/infinity-for-lemmy/app/)!
[![Translation](https://translate.codeberg.org/widgets/Eternity/-/app/multi-auto.svg)](https://translate.codeberg.org/engage/Eternity/) [![Translation](https://translate.codeberg.org/widgets/infinity-for-lemmy/-/app/multi-auto.svg)](https://translate.codeberg.org/engage/infinity-for-lemmy/)
### Reporting bugs ### Reporting bugs
You can also contribute by [reporting bugs](https://codeberg.org/Bazsalanszky/Eternity/issues) You can also contribute by [reporting bugs](https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy/issues)
<p align="right">(<a href="#top">back to top</a>)</p> <p align="right">(<a href="#top">back to top</a>)</p>
## License ## License
Distributed under the AGPL-3.0 License. See <a href="https://codeberg.org/Bazsalanszky/Eternity/src/branch/master/LICENSE">LICENSE</a> for more information. Distributed under the AGPL-3.0 License. See <a href="https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy/src/branch/master/LICENSE">LICENSE</a> for more information.
<p align="right">(<a href="#top">back to top</a>)</p> <p align="right">(<a href="#top">back to top</a>)</p>
@ -92,6 +86,6 @@ Distributed under the AGPL-3.0 License. See <a href="https://codeberg.org/Bazsal
[@bazsalanszky@lemmy.toldi.eu](https://lemmy.toldi.eu/u/bazsalanszky) - (Owner) [@bazsalanszky@lemmy.toldi.eu](https://lemmy.toldi.eu/u/bazsalanszky) - (Owner)
Project Link: [https://codeberg.org/Bazsalanszky/Eternity](https://codeberg.org/Bazsalanszky/Eternity) Project Link: [https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy](https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy)
<p align="right">(<a href="#top">back to top</a>)</p> <p align="right">(<a href="#top">back to top</a>)</p>

View File

@ -21,8 +21,8 @@ android {
applicationId "eu.toldi.infinityforlemmy" applicationId "eu.toldi.infinityforlemmy"
minSdk 21 minSdk 21
targetSdk 33 targetSdk 33
versionCode 130 versionCode 129
versionName "0.1.1" versionName "0.1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
javaCompileOptions { javaCompileOptions {
annotationProcessorOptions { annotationProcessorOptions {

View File

@ -7,7 +7,6 @@ import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo; import android.content.pm.ResolveInfo;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler;
import android.webkit.URLUtil; import android.webkit.URLUtil;
import android.widget.Toast; import android.widget.Toast;
@ -18,11 +17,8 @@ import androidx.browser.customtabs.CustomTabsService;
import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.FilenameUtils;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.Executor;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
@ -33,7 +29,6 @@ import eu.toldi.infinityforlemmy.RetrofitHolder;
import eu.toldi.infinityforlemmy.comment.Comment; import eu.toldi.infinityforlemmy.comment.Comment;
import eu.toldi.infinityforlemmy.comment.FetchComment; import eu.toldi.infinityforlemmy.comment.FetchComment;
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper; import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
import eu.toldi.infinityforlemmy.post.FetchPost;
import eu.toldi.infinityforlemmy.post.ObjectResolver; import eu.toldi.infinityforlemmy.post.ObjectResolver;
import eu.toldi.infinityforlemmy.post.Post; import eu.toldi.infinityforlemmy.post.Post;
import eu.toldi.infinityforlemmy.utils.LemmyUtils; import eu.toldi.infinityforlemmy.utils.LemmyUtils;
@ -80,9 +75,6 @@ public class LinkResolverActivity extends AppCompatActivity {
@Named("no_oauth") @Named("no_oauth")
RetrofitHolder mRetrofit; RetrofitHolder mRetrofit;
@Inject
Executor mExecutor;
private String mAccessToken; private String mAccessToken;
private Uri getRedditUriByPath(String path) { private Uri getRedditUriByPath(String path) {
@ -108,14 +100,14 @@ public class LinkResolverActivity extends AppCompatActivity {
if (uri == null) { if (uri == null) {
String url = getIntent().getStringExtra(Intent.EXTRA_TEXT); String url = getIntent().getStringExtra(Intent.EXTRA_TEXT);
if (!URLUtil.isValidUrl(url)) { if (!URLUtil.isValidUrl(url)) {
Toast.makeText(getApplicationContext(), R.string.invalid_link, Toast.LENGTH_SHORT).show(); Toast.makeText(this, R.string.invalid_link, Toast.LENGTH_SHORT).show();
finish(); finish();
return; return;
} }
try { try {
uri = Uri.parse(url); uri = Uri.parse(url);
} catch (NullPointerException e) { } catch (NullPointerException e) {
Toast.makeText(getApplicationContext(), R.string.invalid_link, Toast.LENGTH_SHORT).show(); Toast.makeText(this, R.string.invalid_link, Toast.LENGTH_SHORT).show();
finish(); finish();
return; return;
} }
@ -123,7 +115,7 @@ public class LinkResolverActivity extends AppCompatActivity {
if (uri.getScheme() == null && uri.getHost() == null) { if (uri.getScheme() == null && uri.getHost() == null) {
if (uri.toString().isEmpty()) { if (uri.toString().isEmpty()) {
Toast.makeText(getApplicationContext(), R.string.invalid_link, Toast.LENGTH_SHORT).show(); Toast.makeText(this, R.string.invalid_link, Toast.LENGTH_SHORT).show();
finish(); finish();
return; return;
} }
@ -135,7 +127,7 @@ public class LinkResolverActivity extends AppCompatActivity {
private void handleUri(Uri uri) { private void handleUri(Uri uri) {
if (uri == null) { if (uri == null) {
Toast.makeText(getApplicationContext(), R.string.no_link_available, Toast.LENGTH_SHORT).show(); Toast.makeText(this, R.string.no_link_available, Toast.LENGTH_SHORT).show();
} else { } else {
String path = uri.getPath(); String path = uri.getPath();
if (path == null) { if (path == null) {
@ -209,34 +201,6 @@ public class LinkResolverActivity extends AppCompatActivity {
intent.putExtra(ViewPostDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName); intent.putExtra(ViewPostDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName);
startActivity(intent); startActivity(intent);
} else { } else {
boolean local = false;
try {
URL baseURL = new URL(mRetrofit.getBaseURL());
if (baseURL.getHost().equalsIgnoreCase(uri.getHost())) {
local = true;
FetchPost.fetchPost(mExecutor, new Handler(), mRetrofit.getRetrofit(), segments.get(segments.size() - 1), mAccessToken, new FetchPost.FetchPostListener() {
@Override
public void fetchPostSuccess(Post post) {
Intent intent = new Intent(LinkResolverActivity.this, ViewPostDetailActivity.class);
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, post.getId());
intent.putExtra(ViewPostDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname);
intent.putExtra(ViewPostDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName);
startActivity(intent);
}
@Override
public void fetchPostFailed() {
Toast.makeText(getApplicationContext(), R.string.could_not_resolve_link, Toast.LENGTH_SHORT).show();
finish();
}
});
}
} catch (MalformedURLException e) {
Toast.makeText(getApplicationContext(), R.string.could_not_resolve_link, Toast.LENGTH_SHORT).show();
finish();
}
if (!local) {
mObjectResolver.resolvePost(uri.toString(), mAccessToken, new ObjectResolver.ObjectResolverListener() { mObjectResolver.resolvePost(uri.toString(), mAccessToken, new ObjectResolver.ObjectResolverListener() {
@Override @Override
public void onResolveObjectSuccess(Object p) { public void onResolveObjectSuccess(Object p) {
@ -250,12 +214,11 @@ public class LinkResolverActivity extends AppCompatActivity {
@Override @Override
public void onResolveObjectFailed() { public void onResolveObjectFailed() {
Toast.makeText(getApplicationContext(), R.string.could_not_resolve_link, Toast.LENGTH_SHORT).show(); Toast.makeText(LinkResolverActivity.this, R.string.could_not_resolve_link, Toast.LENGTH_SHORT).show();
finish(); finish();
} }
}); });
} }
}
} else if (uri.toString().matches(COMMENT_PATTERN)) { } else if (uri.toString().matches(COMMENT_PATTERN)) {
if (mAccessToken == null) { if (mAccessToken == null) {
mRetrofit.setBaseURL(uri.getScheme() + "://" + uri.getHost() + "/"); mRetrofit.setBaseURL(uri.getScheme() + "://" + uri.getHost() + "/");
@ -274,41 +237,11 @@ public class LinkResolverActivity extends AppCompatActivity {
@Override @Override
public void onFetchCommentFailed() { public void onFetchCommentFailed() {
Toast.makeText(getApplicationContext(), R.string.could_not_resolve_link, Toast.LENGTH_SHORT).show(); Toast.makeText(LinkResolverActivity.this, R.string.could_not_resolve_link, Toast.LENGTH_SHORT).show();
finish(); finish();
} }
}); });
} else { } else {
boolean local = false;
try {
URL baseURL = new URL(mRetrofit.getBaseURL());
if (baseURL.getHost().equalsIgnoreCase(uri.getHost())) {
local = true;
FetchComment.fetchSingleComment(mRetrofit.getRetrofit(), mAccessToken, Integer.parseInt(segments.get(segments.size() - 1)), new FetchComment.FetchCommentListener() {
@Override
public void onFetchCommentSuccess(ArrayList<Comment> comments, Integer parentId, ArrayList<Integer> moreChildrenIds) {
Intent intent = new Intent(LinkResolverActivity.this, ViewPostDetailActivity.class);
Comment comment = comments.get(0);
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, comment.getPostId());
intent.putExtra(ViewPostDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname);
intent.putExtra(ViewPostDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName);
intent.putExtra(ViewPostDetailActivity.EXTRA_SINGLE_COMMENT_ID, comment.getId());
intent.putExtra(ViewPostDetailActivity.EXTRA_SINGLE_COMMENT_PARENT_ID, comment.getParentId());
startActivity(intent);
}
@Override
public void onFetchCommentFailed() {
Toast.makeText(getApplicationContext(), R.string.could_not_resolve_link, Toast.LENGTH_SHORT).show();
finish();
}
});
}
} catch (MalformedURLException e) {
Toast.makeText(getApplicationContext(), R.string.could_not_resolve_link, Toast.LENGTH_SHORT).show();
finish();
}
if (!local) {
mObjectResolver.resolveComment(uri.toString(), mAccessToken, new ObjectResolver.ObjectResolverListener() { mObjectResolver.resolveComment(uri.toString(), mAccessToken, new ObjectResolver.ObjectResolverListener() {
@Override @Override
public void onResolveObjectSuccess(Object c) { public void onResolveObjectSuccess(Object c) {
@ -324,12 +257,11 @@ public class LinkResolverActivity extends AppCompatActivity {
@Override @Override
public void onResolveObjectFailed() { public void onResolveObjectFailed() {
Toast.makeText(getApplicationContext(), R.string.could_not_resolve_link, Toast.LENGTH_SHORT).show(); Toast.makeText(LinkResolverActivity.this, R.string.could_not_resolve_link, Toast.LENGTH_SHORT).show();
finish(); finish();
} }
}); });
} }
}
} else if (authority.equals("v.redd.it")) { } else if (authority.equals("v.redd.it")) {
Intent intent = new Intent(this, ViewVideoActivity.class); Intent intent = new Intent(this, ViewVideoActivity.class);
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_V_REDD_IT); intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_V_REDD_IT);

View File

@ -365,8 +365,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
super.onResume(); super.onResume();
if (mAccessToken == null) { if (mAccessToken == null) {
String instancePreference = mSharedPreferences.getString(SharedPreferencesUtils.ANONYMOUS_ACCOUNT_INSTANCE, APIUtils.API_BASE_URI); String instancePreference = mSharedPreferences.getString(SharedPreferencesUtils.ANONYMOUS_ACCOUNT_INSTANCE, APIUtils.API_BASE_URI);
if (!instancePreference.startsWith(mRetrofit.getBaseURL())) { if (!mRetrofit.getBaseURL().equalsIgnoreCase(instancePreference)) {
mRetrofit.setBaseURL(instancePreference);
this.recreate(); this.recreate();
} }
} }

View File

@ -433,14 +433,12 @@ public class SearchActivity extends BaseActivity {
if (resultCode == RESULT_OK && data != null) { if (resultCode == RESULT_OK && data != null) {
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) { if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
communityData = data.getParcelableExtra(SubredditSelectionActivity.EXTRA_RETURN_COMMUNITY_DATA); communityData = data.getParcelableExtra(SubredditSelectionActivity.EXTRA_RETURN_COMMUNITY_DATA);
subredditName = communityData.getName();
subredditIsUser = false; subredditIsUser = false;
if (communityData == null) { if (subredditName == null) {
subredditNameTextView.setText(R.string.all_communities); subredditNameTextView.setText(R.string.all_communities);
} else { } else {
subredditName = communityData.getName();
communityQualifiedName = communityData.getQualified_name();
subredditNameTextView.setText(subredditName); subredditNameTextView.setText(subredditName);
} }
} else if (requestCode == SUBREDDIT_SEARCH_REQUEST_CODE) { } else if (requestCode == SUBREDDIT_SEARCH_REQUEST_CODE) {

View File

@ -672,12 +672,10 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
// mVisibleComments.get(parentPosition).removeMoreChildrenIds(); // mVisibleComments.get(parentPosition).removeMoreChildrenIds();
if (position != -1) { if (position != -1) {
mVisibleComments.remove(position);
if (mIsSingleCommentThreadMode) { if (mIsSingleCommentThreadMode) {
mVisibleComments.remove(position - 1);
notifyItemRemoved(position + 1); notifyItemRemoved(position + 1);
} else { } else {
mVisibleComments.remove(position);
notifyItemRemoved(position); notifyItemRemoved(position);
} }
List<Comment> trulyNewComments = new ArrayList<>(); List<Comment> trulyNewComments = new ArrayList<>();

View File

@ -87,9 +87,9 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
return VIEW_TYPE_SUBREDDIT; return VIEW_TYPE_SUBREDDIT;
} else if (position == 1) { } else if (position == 1) {
return VIEW_TYPE_FAVORITE_SUBREDDIT_DIVIDER; return VIEW_TYPE_FAVORITE_SUBREDDIT_DIVIDER;
} else if (position == mFavoriteSubscribedSubredditData.size() + 1) { } else if (position == mFavoriteSubscribedSubredditData.size() + 2) {
return VIEW_TYPE_SUBREDDIT_DIVIDER; return VIEW_TYPE_SUBREDDIT_DIVIDER;
} else if (position < mFavoriteSubscribedSubredditData.size() + 1) { } else if (position <= mFavoriteSubscribedSubredditData.size() + 1) {
return VIEW_TYPE_FAVORITE_SUBREDDIT; return VIEW_TYPE_FAVORITE_SUBREDDIT;
} else { } else {
return VIEW_TYPE_SUBREDDIT; return VIEW_TYPE_SUBREDDIT;
@ -98,10 +98,12 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
if (position == 0) { if (position == 0) {
return VIEW_TYPE_SUBREDDIT; return VIEW_TYPE_SUBREDDIT;
} else if (position == 1) { } else if (position == 1) {
return VIEW_TYPE_SUBREDDIT;
} else if (position == 2) {
return VIEW_TYPE_FAVORITE_SUBREDDIT_DIVIDER; return VIEW_TYPE_FAVORITE_SUBREDDIT_DIVIDER;
} else if (position == mFavoriteSubscribedSubredditData.size() + 2) { } else if (position == mFavoriteSubscribedSubredditData.size() + 3) {
return VIEW_TYPE_SUBREDDIT_DIVIDER; return VIEW_TYPE_SUBREDDIT_DIVIDER;
} else if (position < mFavoriteSubscribedSubredditData.size() + 2) { } else if (position <= mFavoriteSubscribedSubredditData.size() + 2) {
return VIEW_TYPE_FAVORITE_SUBREDDIT; return VIEW_TYPE_FAVORITE_SUBREDDIT;
} else { } else {
return VIEW_TYPE_SUBREDDIT; return VIEW_TYPE_SUBREDDIT;
@ -157,7 +159,7 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
if (itemClickListener != null) { if (itemClickListener != null) {
if (hasClearSelectionRow) { if (hasClearSelectionRow) {
offset = (mFavoriteSubscribedSubredditData != null && mFavoriteSubscribedSubredditData.size() > 0) ? offset = (mFavoriteSubscribedSubredditData != null && mFavoriteSubscribedSubredditData.size() > 0) ?
mFavoriteSubscribedSubredditData.size() + 3 : 1; mFavoriteSubscribedSubredditData.size() + 4 : 2;
} else { } else {
offset = (mFavoriteSubscribedSubredditData != null && mFavoriteSubscribedSubredditData.size() > 0) ? offset = (mFavoriteSubscribedSubredditData != null && mFavoriteSubscribedSubredditData.size() > 0) ?
mFavoriteSubscribedSubredditData.size() + 3 : 1; mFavoriteSubscribedSubredditData.size() + 3 : 1;
@ -168,7 +170,7 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
} }
SubscribedSubredditData communityData = mSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset);
name = mSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).getName(); name = mSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).getName();
fullname = mSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).getQualified_name(); fullname = mSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).getQualified_name();
iconUrl = mSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).getIconUrl(); iconUrl = mSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).getIconUrl();
@ -193,7 +195,6 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
}); });
if (itemClickListener != null) { if (itemClickListener != null) {
SubscribedSubredditData communityData = mSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset);
viewHolder.itemView.setOnClickListener(view -> itemClickListener.onClick(communityData)); viewHolder.itemView.setOnClickListener(view -> itemClickListener.onClick(communityData));
} }
} }
@ -226,7 +227,7 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
int offset; int offset;
if (itemClickListener != null) { if (itemClickListener != null) {
if (hasClearSelectionRow) { if (hasClearSelectionRow) {
offset = 2; offset = 3;
} else { } else {
offset = 2; offset = 2;
} }
@ -288,16 +289,25 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
if (mSubscribedSubredditData != null) { if (mSubscribedSubredditData != null) {
if (mFavoriteSubscribedSubredditData != null && mFavoriteSubscribedSubredditData.size() > 0) { if (mFavoriteSubscribedSubredditData != null && mFavoriteSubscribedSubredditData.size() > 0) {
if (itemClickListener != null) { if (itemClickListener != null) {
if (hasClearSelectionRow) {
return mSubscribedSubredditData.size() > 0 ?
mFavoriteSubscribedSubredditData.size() + mSubscribedSubredditData.size() + 4 : 0;
} else {
return mSubscribedSubredditData.size() > 0 ? return mSubscribedSubredditData.size() > 0 ?
mFavoriteSubscribedSubredditData.size() + mSubscribedSubredditData.size() + 3 : 0; mFavoriteSubscribedSubredditData.size() + mSubscribedSubredditData.size() + 3 : 0;
} }
}
return mSubscribedSubredditData.size() > 0 ? return mSubscribedSubredditData.size() > 0 ?
mFavoriteSubscribedSubredditData.size() + mSubscribedSubredditData.size() + 2 : 0; mFavoriteSubscribedSubredditData.size() + mSubscribedSubredditData.size() + 2 : 0;
} }
if (itemClickListener != null) { if (itemClickListener != null) {
if (hasClearSelectionRow) {
return mSubscribedSubredditData.size() > 0 ? mSubscribedSubredditData.size() + 2 : 0;
} else {
return mSubscribedSubredditData.size() > 0 ? mSubscribedSubredditData.size() + 1 : 0; return mSubscribedSubredditData.size() > 0 ? mSubscribedSubredditData.size() + 1 : 0;
} }
}
return mSubscribedSubredditData.size(); return mSubscribedSubredditData.size();
} }
@ -346,7 +356,7 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
if (itemClickListener != null) { if (itemClickListener != null) {
if (hasClearSelectionRow) { if (hasClearSelectionRow) {
offset = (mFavoriteSubscribedSubredditData != null && mFavoriteSubscribedSubredditData.size() > 0) ? offset = (mFavoriteSubscribedSubredditData != null && mFavoriteSubscribedSubredditData.size() > 0) ?
mFavoriteSubscribedSubredditData.size() + 3 : 0; mFavoriteSubscribedSubredditData.size() + 4 : 0;
} else { } else {
offset = (mFavoriteSubscribedSubredditData != null && mFavoriteSubscribedSubredditData.size() > 0) ? offset = (mFavoriteSubscribedSubredditData != null && mFavoriteSubscribedSubredditData.size() > 0) ?
mFavoriteSubscribedSubredditData.size() + 3 : 0; mFavoriteSubscribedSubredditData.size() + 3 : 0;
@ -362,7 +372,7 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
int offset; int offset;
if (itemClickListener != null) { if (itemClickListener != null) {
if (hasClearSelectionRow) { if (hasClearSelectionRow) {
offset = 2; offset = 3;
} else { } else {
offset = 2; offset = 2;
} }

View File

@ -118,20 +118,25 @@ public class InsertSubscribedThings {
(List<SubscribedSubredditData> newSubscribedSubreddits, (List<SubscribedSubredditData> newSubscribedSubreddits,
List<SubscribedSubredditData> oldSubscribedSubreddits, List<SubscribedSubredditData> oldSubscribedSubreddits,
List<String> unsubscribedSubredditNames) { List<String> unsubscribedSubredditNames) {
List<String> oldSubredditNames = new ArrayList<>(); int newIndex = 0;
for (SubscribedSubredditData subredditData : oldSubscribedSubreddits) { for (int oldIndex = 0; oldIndex < oldSubscribedSubreddits.size(); oldIndex++) {
oldSubredditNames.add(subredditData.getQualified_name()); if (newIndex >= newSubscribedSubreddits.size()) {
for (; oldIndex < oldSubscribedSubreddits.size(); oldIndex++) {
unsubscribedSubredditNames.add(oldSubscribedSubreddits.get(oldIndex).getQualified_name());
}
return;
} }
List<String> newSubredditNames = new ArrayList<>(); SubscribedSubredditData old = oldSubscribedSubreddits.get(oldIndex);
for (SubscribedSubredditData subredditData : newSubscribedSubreddits) { for (; newIndex < newSubscribedSubreddits.size(); newIndex++) {
newSubredditNames.add(subredditData.getQualified_name()); if (newSubscribedSubreddits.get(newIndex).getQualified_name().compareToIgnoreCase(old.getQualified_name()) == 0) {
newIndex++;
break;
}
if (newSubscribedSubreddits.get(newIndex).getQualified_name().compareToIgnoreCase(old.getQualified_name()) > 0) {
unsubscribedSubredditNames.add(old.getQualified_name());
break;
} }
for (String subredditName : oldSubredditNames) {
if (!newSubredditNames.contains(subredditName)) {
unsubscribedSubredditNames.add(subredditName);
} }
} }
} }

View File

@ -153,7 +153,7 @@ public class DownloadMediaService extends Service {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
File directory = getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); File directory = getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
if (directory != null) { if (directory != null) {
String directoryPath = separateDownloadFolder && subredditName != null && !subredditName.equals("") ? directory.getAbsolutePath() + "/Eternity/" + subredditName + "/" : directory.getAbsolutePath() + "/Eternity/"; String directoryPath = separateDownloadFolder && subredditName != null && !subredditName.equals("") ? directory.getAbsolutePath() + "/Infinity/" + subredditName + "/" : directory.getAbsolutePath() + "/Infinity/";
File infinityDir = new File(directoryPath); File infinityDir = new File(directoryPath);
if (!infinityDir.exists() && !infinityDir.mkdirs()) { if (!infinityDir.exists() && !infinityDir.mkdirs()) {
downloadFinished(mediaType, randomNotificationIdOffset, mimeType, downloadFinished(mediaType, randomNotificationIdOffset, mimeType,
@ -168,7 +168,7 @@ public class DownloadMediaService extends Service {
} }
} else { } else {
String dir = mediaType == EXTRA_MEDIA_TYPE_VIDEO ? Environment.DIRECTORY_MOVIES : Environment.DIRECTORY_PICTURES; String dir = mediaType == EXTRA_MEDIA_TYPE_VIDEO ? Environment.DIRECTORY_MOVIES : Environment.DIRECTORY_PICTURES;
destinationFileUriString = separateDownloadFolder && subredditName != null && !subredditName.equals("") ? dir + "/Eternity/" + subredditName + "/" : dir + "/Eternity/"; destinationFileUriString = separateDownloadFolder && subredditName != null && !subredditName.equals("") ? dir + "/Infinity/" + subredditName + "/" : dir + "/Infinity/";
} }
isDefaultDestination = true; isDefaultDestination = true;
} else { } else {

View File

@ -31,7 +31,7 @@ public interface SubscribedSubredditDao {
@Query("SELECT * from subscribed_subreddits WHERE qualified_name = :qualified_name COLLATE NOCASE AND username = :accountName COLLATE NOCASE LIMIT 1") @Query("SELECT * from subscribed_subreddits WHERE qualified_name = :qualified_name COLLATE NOCASE AND username = :accountName COLLATE NOCASE LIMIT 1")
SubscribedSubredditData getSubscribedSubredditByQualifiedName(String qualified_name, String accountName); SubscribedSubredditData getSubscribedSubredditByQualifiedName(String qualified_name, String accountName);
@Query("DELETE FROM subscribed_subreddits WHERE qualified_name = :subredditName COLLATE NOCASE AND username = :accountName COLLATE NOCASE") @Query("DELETE FROM subscribed_subreddits WHERE name = :subredditName COLLATE NOCASE AND username = :accountName COLLATE NOCASE")
void deleteSubscribedSubreddit(String subredditName, String accountName); void deleteSubscribedSubreddit(String subredditName, String accountName);
@Query("SELECT * from subscribed_subreddits WHERE username = :qualified_name AND name LIKE '%' || :searchQuery || '%' COLLATE NOCASE AND is_favorite = 1 ORDER BY name COLLATE NOCASE ASC") @Query("SELECT * from subscribed_subreddits WHERE username = :qualified_name AND name LIKE '%' || :searchQuery || '%' COLLATE NOCASE AND is_favorite = 1 ORDER BY name COLLATE NOCASE ASC")

View File

@ -129,13 +129,13 @@ public class SubscribedSubredditData implements Parcelable {
@Override @Override
public int hashCode() { public int hashCode() {
return id + username.hashCode(); return id;
} }
@Override @Override
public boolean equals(@Nullable Object obj) { public boolean equals(@Nullable Object obj) {
if (obj instanceof SubscribedSubredditData) { if (obj instanceof SubscribedSubredditData) {
return id == ((SubscribedSubredditData) obj).getId() && username.equalsIgnoreCase(((SubscribedSubredditData) obj).getUsername()); return id == ((SubscribedSubredditData) obj).getId();
} }
return false; return false;
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 MiB

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

After

Width:  |  Height:  |  Size: 292 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 MiB

After

Width:  |  Height:  |  Size: 402 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 865 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 MiB