mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2025-11-01 01:18:08 +01:00
Compare commits
58 Commits
d9f9fb51db
...
v0.1.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6ff46f928a | ||
|
|
81e1c73c65 | ||
|
|
554dfff4ad | ||
|
|
741ec08386 | ||
|
|
f8a21fa3ba | ||
|
|
fd6bc82214 | ||
|
|
0ae8826732 | ||
|
|
5311edc404 | ||
|
|
d8dc8c39b2 | ||
|
|
c43ced8b00 | ||
|
|
908f294130 | ||
|
|
95408f8125 | ||
|
|
6d5ba059f8 | ||
|
|
ecdd9da9c8 | ||
|
|
1c17e6b7d2 | ||
|
|
9f60eca225 | ||
|
|
9deba8b10e | ||
|
|
05948d74f4 | ||
|
|
1007be50f8 | ||
|
|
28617cf9a8 | ||
|
|
5d2d43eebc | ||
|
|
f2b2525823 | ||
|
|
29547f4750 | ||
|
|
af63bba54a | ||
|
|
caf4f177d2 | ||
|
|
1e67b34440 | ||
|
|
67afcd7e88 | ||
|
|
9406f29562 | ||
|
|
b626c5fb73 | ||
|
|
0393ff6e77 | ||
|
|
30ecc17d55 | ||
|
|
7c5f184cc8 | ||
|
|
d5fff14cb0 | ||
|
|
5cdda037b2 | ||
|
|
0942f7c5ec | ||
|
|
efe90d0030 | ||
|
|
2d45f337d7 | ||
|
|
70cf6f3340 | ||
|
|
6542859892 | ||
|
|
143bc5e1b6 | ||
|
|
6e51ea6ee7 | ||
|
|
d7c4e3d5bc | ||
|
|
1ed86c138e | ||
|
|
2d83545865 | ||
|
|
3594f10fdd | ||
|
|
a903ac9dbd | ||
|
|
ed90a278a6 | ||
|
|
6221b33a3d | ||
|
|
2561ba8bd0 | ||
|
|
9859608764 | ||
|
|
b40077f83f | ||
|
|
76dc0ff083 | ||
|
|
6a2d59ed48 | ||
|
|
a09d6f85f8 | ||
|
|
2f3d39ed31 | ||
|
|
83e0fc039f | ||
|
|
d4ca682882 | ||
|
|
e2b75a3928 |
BIN
.assets/google-play-badge.png
Normal file
BIN
.assets/google-play-badge.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.8 KiB |
@@ -2,13 +2,14 @@ steps:
|
||||
build:
|
||||
image: alvrme/alpine-android:android-33-jdk11
|
||||
commands:
|
||||
- apk add --no-cache python3
|
||||
- ./gradlew :app:assembleRelease
|
||||
when:
|
||||
path: [ app/**, build.gradle ]
|
||||
sign:
|
||||
image: alvrme/alpine-android:android-33-jdk11
|
||||
commands:
|
||||
- ./scripts/apk-sign.sh LemmInfinity-signed.apk app/build/outputs/apk/release/app-release-unsigned.apk
|
||||
- ./scripts/apk-sign.sh Eternity-signed.apk app/build/outputs/apk/release/app-release-unsigned.apk
|
||||
secrets: [ APK_KS_PASS, APK_KS, APK_KS_ALIAS ]
|
||||
when:
|
||||
event: [ tag ]
|
||||
@@ -17,7 +18,7 @@ steps:
|
||||
settings:
|
||||
base_url: https://codeberg.org
|
||||
files:
|
||||
- LemmInfinity-signed.apk
|
||||
- Eternity-signed.apk
|
||||
api_key:
|
||||
from_secret: GITEA_ACCESS_TOKEN
|
||||
target: main
|
||||
|
||||
@@ -8,6 +8,7 @@ steps:
|
||||
build:
|
||||
image: alvrme/alpine-android:android-33-jdk11
|
||||
commands:
|
||||
- apk add --no-cache python3
|
||||
- ./gradlew :app:assembleNightly
|
||||
sign:
|
||||
image: alvrme/alpine-android:android-33-jdk11
|
||||
|
||||
90
README.md
90
README.md
@@ -1,5 +1,5 @@
|
||||
<h1 align="center">
|
||||
Eternity (formerly Infinity for Lemmy)
|
||||
Eternity for Lemmy
|
||||
</h1>
|
||||
|
||||
<div align="center">
|
||||
@@ -10,44 +10,88 @@ A Lemmy client for Android written in Java. It's a fork of the [Infinity for Red
|
||||
|
||||
<br>
|
||||
<div align="center">
|
||||
<img src="https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy/raw/branch/master/fastlane/metadata/android/en-US/images/icon.png" width=256>
|
||||
<img src="https://codeberg.org/Bazsalanszky/Eternity/raw/branch/master/fastlane/metadata/android/en-US/images/icon.png" width=256>
|
||||
|
||||
[](https://ci.codeberg.org/repos/12474)
|
||||
[](https://liberapay.com/Bazsalanszky)
|
||||
|
||||
<a href="https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy/issues">Report a Bug</a>
|
||||
<a href="https://codeberg.org/Bazsalanszky/Eternity/issues">Report a Bug</a>
|
||||
|
||||
</div>
|
||||
|
||||
<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">
|
||||
<img src="./.assets/IzzyOnDroid.png" height="80">
|
||||
</a>
|
||||
<a href="https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy/releases/">
|
||||
<a href="https://codeberg.org/Bazsalanszky/Eternity/releases/">
|
||||
<img src="./.assets/codeberg.png" height="80">
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
## Action Items for Eternity
|
||||
## Features
|
||||
|
||||
Eternity is currently in the early stages of development. Expect many unfinished features and bugs!
|
||||
|
||||
- [x] Implementation of basic post browsing feature
|
||||
- [x] Support for multiple account handling
|
||||
- [x] Functionality for post upvotes/downvotes
|
||||
- [x] Functionality to browse comments
|
||||
- [x] Capability for creating a new post
|
||||
- [x] Ability to create comments
|
||||
- [x] Edit/Delete posts and comments
|
||||
- [x] Basic inbox
|
||||
- [ ] Elimination of code/string references specific to Reddit
|
||||
- [x] Incorporation of private messaging feature
|
||||
- [x] Feature for saving posts/comments
|
||||
- [x] Resolving links
|
||||
- [ ] Account editing function
|
||||
- [ ] Multi community view?
|
||||
### Browsing Lemmy
|
||||
|
||||
- Explore various feeds (Subscribed/Local/All) and communities
|
||||
- Subscribe or unsubscribe from specific communities, with the option to block
|
||||
- Discover communities federated with the current instance
|
||||
- Favorite a community for quick access
|
||||
- Manage your subscriptions and blocked communities
|
||||
|
||||
### Content Engagement
|
||||
|
||||
- Engage with content by voting, saving, sharing, and creating posts or comments
|
||||
- Enjoy endless scrolling through feeds and posts
|
||||
- Tailor the view settings for posts (card,compact, gallery)
|
||||
- Set default preferences for post and comment sorting
|
||||
- Stay updated with notifications for replies
|
||||
|
||||
### Account Management
|
||||
|
||||
- Sign in to multiple accounts or instances, and effortlessly switch between them
|
||||
- Use the inbox features to view replies, mentions, and private messages
|
||||
- Access your profile to view your posts, comments, and saved content
|
||||
|
||||
### Customization
|
||||
|
||||
- Choose between various theme options including Light, Dark, OLED
|
||||
- Support Material You theming
|
||||
- Explore user-created themes
|
||||
- Customize font settings
|
||||
- Optional bottom navigation bar
|
||||
- Discover a plethora of other customization features
|
||||
|
||||
<img
|
||||
src="https://codeberg.org/Bazsalanszky/Eternity/raw/branch/master/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png"
|
||||
alt="Screenshot 1"
|
||||
height="200" >
|
||||
<img
|
||||
src="https://codeberg.org/Bazsalanszky/Eternity/raw/branch/master/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png"
|
||||
alt="Screenshot 2"
|
||||
height="200" >
|
||||
<img
|
||||
src="https://codeberg.org/Bazsalanszky/Eternity/raw/branch/master/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png"
|
||||
alt="Screenshot 3"
|
||||
height="200" >
|
||||
<img
|
||||
src="https://codeberg.org/Bazsalanszky/Eternity/raw/branch/master/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png"
|
||||
alt="Screenshot 4"
|
||||
height="200" >
|
||||
<img
|
||||
src="https://codeberg.org/Bazsalanszky/Eternity/raw/branch/master/fastlane/metadata/android/en-US/images/phoneScreenshots/5.png"
|
||||
alt="Screenshot 5"
|
||||
height="200" >
|
||||
|
||||
|
||||
## Contributing
|
||||
|
||||
@@ -68,17 +112,17 @@ Don't forget to give the project a star! Thanks again!
|
||||
|
||||
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/)!
|
||||
|
||||
[](https://translate.codeberg.org/engage/infinity-for-lemmy/)
|
||||
[](https://translate.codeberg.org/engage/Eternity/)
|
||||
|
||||
### Reporting bugs
|
||||
|
||||
You can also contribute by [reporting bugs](https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy/issues)
|
||||
You can also contribute by [reporting bugs](https://codeberg.org/Bazsalanszky/Eternity/issues)
|
||||
|
||||
<p align="right">(<a href="#top">back to top</a>)</p>
|
||||
|
||||
## License
|
||||
|
||||
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.
|
||||
Distributed under the AGPL-3.0 License. See <a href="https://codeberg.org/Bazsalanszky/Eternity/src/branch/master/LICENSE">LICENSE</a> for more information.
|
||||
|
||||
<p align="right">(<a href="#top">back to top</a>)</p>
|
||||
|
||||
@@ -86,6 +130,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)
|
||||
|
||||
Project Link: [https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy](https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy)
|
||||
Project Link: [https://codeberg.org/Bazsalanszky/Eternity](https://codeberg.org/Bazsalanszky/Eternity)
|
||||
|
||||
<p align="right">(<a href="#top">back to top</a>)</p>
|
||||
|
||||
@@ -21,8 +21,8 @@ android {
|
||||
applicationId "eu.toldi.infinityforlemmy"
|
||||
minSdk 21
|
||||
targetSdk 33
|
||||
versionCode 129
|
||||
versionName "0.1.0"
|
||||
versionCode 131
|
||||
versionName "0.1.2"
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
javaCompileOptions {
|
||||
annotationProcessorOptions {
|
||||
@@ -98,6 +98,30 @@ android {
|
||||
doNotStrip '**/*.so'
|
||||
}
|
||||
namespace 'eu.toldi.infinityforlemmy'
|
||||
|
||||
|
||||
task rearrangeClass(type: Exec) {
|
||||
commandLine 'python', '../scripts/fixEventBus.py'
|
||||
}
|
||||
|
||||
applicationVariants.all { variant ->
|
||||
if (variant.name == 'release') {
|
||||
task("compileSingleFile${variant.name.capitalize()}", type: JavaCompile, dependsOn: rearrangeClass) {
|
||||
def filePath = project.rootDir.absolutePath + '/app/build/generated/ap_generated_sources/release/out/eu/toldi/infinityforlemmy/'
|
||||
source = files(filePath)
|
||||
includes = ["**/EventBusIndex.java"]
|
||||
classpath = variant.getCompileClasspath() + files(project.rootDir.absolutePath + '/app/build/intermediates/javac/release/classes')
|
||||
destinationDir = file("$buildDir/intermediates/javac/release/classes")
|
||||
}
|
||||
|
||||
tasks.withType(JavaCompile).all { task ->
|
||||
if (task.name == 'compileReleaseJavaWithJavac') {
|
||||
task.finalizedBy "compileSingleFile${variant.name.capitalize()}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
dependencies {
|
||||
@@ -108,7 +132,7 @@ dependencies {
|
||||
implementation 'androidx.cardview:cardview:1.0.0'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
|
||||
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.9.0"
|
||||
|
||||
def lifecycleVersion = "2.5.1"
|
||||
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycleVersion"
|
||||
implementation "androidx.lifecycle:lifecycle-livedata:$lifecycleVersion"
|
||||
@@ -196,6 +220,7 @@ dependencies {
|
||||
def glideVersion = "4.12.0"
|
||||
implementation "com.github.bumptech.glide:glide:$glideVersion"
|
||||
annotationProcessor "com.github.bumptech.glide:compiler:$glideVersion"
|
||||
implementation "com.github.bumptech.glide:okhttp-integration:$glideVersion"
|
||||
implementation 'jp.wasabeef:glide-transformations:4.3.0'
|
||||
implementation 'com.github.santalu:aspect-ratio-imageview:1.0.9'
|
||||
implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.23'
|
||||
@@ -245,3 +270,34 @@ dependencies {
|
||||
//debugImplementation 'com.squareup.leakcanary:leakcanary-android:x.y'
|
||||
}
|
||||
|
||||
// NB: Android Studio can't find the imports; this does not affect the
|
||||
// actual build since Gradle can find them just fine.
|
||||
|
||||
import com.android.tools.profgen.ArtProfileKt
|
||||
import com.android.tools.profgen.ArtProfileSerializer
|
||||
import com.android.tools.profgen.DexFile
|
||||
|
||||
project.afterEvaluate {
|
||||
tasks.each { task ->
|
||||
if (task.name.startsWith("compile") && task.name.endsWith("ReleaseArtProfile")) {
|
||||
task.doLast {
|
||||
outputs.files.each { file ->
|
||||
if (file.name.endsWith(".profm")) {
|
||||
println("Sorting ${file} ...")
|
||||
def version = ArtProfileSerializer.valueOf("METADATA_0_0_2")
|
||||
def profile = ArtProfileKt.ArtProfile(file)
|
||||
def keys = new ArrayList(profile.profileData.keySet())
|
||||
def sortedData = new LinkedHashMap()
|
||||
Collections.sort keys, new DexFile.Companion()
|
||||
keys.each { key -> sortedData[key] = profile.profileData[key] }
|
||||
new FileOutputStream(file).with {
|
||||
write(version.magicBytes$profgen)
|
||||
write(version.versionBytes$profgen)
|
||||
version.write$profgen(it, sortedData, "")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -441,11 +441,36 @@
|
||||
android:theme="@style/AppTheme.Launcher"
|
||||
android:windowSoftInputMode="adjustPan">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<activity-alias
|
||||
android:name=".DefaultIcon"
|
||||
android:targetActivity=".activities.MainActivity"
|
||||
android:label="@string/application_name"
|
||||
android:enabled="true"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity-alias>
|
||||
|
||||
<activity-alias
|
||||
android:name=".OriginalIcon"
|
||||
android:targetActivity=".activities.MainActivity"
|
||||
android:label="@string/application_name"
|
||||
android:enabled="false"
|
||||
android:icon="@mipmap/original_ic_launcher"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity-alias>
|
||||
|
||||
<activity
|
||||
android:name=".activities.LoginActivity"
|
||||
android:configChanges="orientation|screenLayout|screenSize|layoutDirection"
|
||||
|
||||
@@ -113,7 +113,7 @@ import eu.toldi.infinityforlemmy.settings.TranslationFragment;
|
||||
import eu.toldi.infinityforlemmy.settings.VideoPreferenceFragment;
|
||||
|
||||
@Singleton
|
||||
@Component(modules = {AppModule.class, NetworkModule.class})
|
||||
@Component(modules = {AppModule.class, NetworkModule.class, PostEnricherModule.class})
|
||||
public interface AppComponent {
|
||||
void inject(MainActivity mainActivity);
|
||||
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
package eu.toldi.infinityforlemmy;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Handler;
|
||||
|
||||
import org.json.JSONException;
|
||||
@@ -12,9 +10,7 @@ import java.util.concurrent.Executor;
|
||||
|
||||
import eu.toldi.infinityforlemmy.apis.GfycatAPI;
|
||||
import eu.toldi.infinityforlemmy.apis.RedgifsAPI;
|
||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.JSONUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import retrofit2.Call;
|
||||
import retrofit2.Response;
|
||||
import retrofit2.Retrofit;
|
||||
@@ -44,14 +40,12 @@ public class FetchGfycatOrRedgifsVideoLinks {
|
||||
});
|
||||
}
|
||||
|
||||
public static void fetchRedgifsVideoLinks(Context context, Executor executor, Handler handler, Retrofit redgifsRetrofit,
|
||||
SharedPreferences currentAccountSharedPreferences,
|
||||
public static void fetchRedgifsVideoLinks(Executor executor, Handler handler, Retrofit redgifsRetrofit,
|
||||
String gfycatId,
|
||||
FetchGfycatOrRedgifsVideoLinksListener fetchGfycatOrRedgifsVideoLinksListener) {
|
||||
executor.execute(() -> {
|
||||
try {
|
||||
Response<String> response = redgifsRetrofit.create(RedgifsAPI.class).getRedgifsData(APIUtils.getRedgifsOAuthHeader(currentAccountSharedPreferences.getString(SharedPreferencesUtils.REDGIFS_ACCESS_TOKEN, "")),
|
||||
gfycatId, APIUtils.USER_AGENT).execute();
|
||||
Response<String> response = redgifsRetrofit.create(RedgifsAPI.class).getRedgifsData(gfycatId).execute();
|
||||
if (response.isSuccessful()) {
|
||||
parseRedgifsVideoLinks(handler, response.body(), fetchGfycatOrRedgifsVideoLinksListener);
|
||||
} else {
|
||||
|
||||
@@ -11,6 +11,16 @@ import android.os.Bundle;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.lifecycle.Lifecycle;
|
||||
import androidx.lifecycle.LifecycleObserver;
|
||||
import androidx.lifecycle.OnLifecycleEvent;
|
||||
import androidx.lifecycle.ProcessLifecycleOwner;
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.integration.okhttp3.OkHttpUrlLoader;
|
||||
import com.bumptech.glide.load.model.GlideUrl;
|
||||
import com.evernote.android.state.StateSaver;
|
||||
import com.livefront.bridge.Bridge;
|
||||
import com.livefront.bridge.SavedStateHandler;
|
||||
@@ -18,15 +28,11 @@ import com.livefront.bridge.SavedStateHandler;
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
|
||||
import java.io.InputStream;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.lifecycle.Lifecycle;
|
||||
import androidx.lifecycle.LifecycleObserver;
|
||||
import androidx.lifecycle.OnLifecycleEvent;
|
||||
import androidx.lifecycle.ProcessLifecycleOwner;
|
||||
import eu.toldi.infinityforlemmy.activities.LockScreenActivity;
|
||||
import eu.toldi.infinityforlemmy.broadcastreceivers.NetworkWifiStatusReceiver;
|
||||
import eu.toldi.infinityforlemmy.broadcastreceivers.WallpaperChangeReceiver;
|
||||
@@ -38,6 +44,8 @@ import eu.toldi.infinityforlemmy.font.FontFamily;
|
||||
import eu.toldi.infinityforlemmy.font.TitleFontFamily;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||
import okhttp3.Call;
|
||||
import okhttp3.OkHttpClient;
|
||||
|
||||
public class Infinity extends Application implements LifecycleObserver {
|
||||
public Typeface typeface;
|
||||
@@ -55,6 +63,9 @@ public class Infinity extends Application implements LifecycleObserver {
|
||||
@Inject
|
||||
@Named("security")
|
||||
SharedPreferences mSecuritySharedPreferences;
|
||||
@Inject
|
||||
@Named("glide")
|
||||
OkHttpClient glideOkHttpClient;
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
@@ -159,6 +170,9 @@ public class Infinity extends Application implements LifecycleObserver {
|
||||
registerReceiver(mNetworkWifiStatusReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
|
||||
|
||||
registerReceiver(new WallpaperChangeReceiver(mSharedPreferences), new IntentFilter(Intent.ACTION_WALLPAPER_CHANGED));
|
||||
|
||||
OkHttpUrlLoader.Factory factory = new OkHttpUrlLoader.Factory((Call.Factory) glideOkHttpClient);
|
||||
Glide.get(this).getRegistry().replace(GlideUrl.class, InputStream.class, factory);
|
||||
}
|
||||
|
||||
@OnLifecycleEvent(Lifecycle.Event.ON_START)
|
||||
|
||||
@@ -9,10 +9,11 @@ import javax.inject.Singleton;
|
||||
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
import eu.toldi.infinityforlemmy.apis.RedgifsAPI;
|
||||
import eu.toldi.infinityforlemmy.apis.StreamableAPI;
|
||||
import eu.toldi.infinityforlemmy.privatemessage.LemmyPrivateMessageAPI;
|
||||
import eu.toldi.infinityforlemmy.comment.LemmyCommentAPI;
|
||||
import eu.toldi.infinityforlemmy.post.LemmyPostAPI;
|
||||
import eu.toldi.infinityforlemmy.privatemessage.LemmyPrivateMessageAPI;
|
||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||
import okhttp3.ConnectionPool;
|
||||
import okhttp3.Interceptor;
|
||||
@@ -34,6 +35,21 @@ abstract class NetworkModule {
|
||||
.build();
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Named("glide")
|
||||
@Singleton
|
||||
static OkHttpClient provideGlideOkHttp(@Named("base") OkHttpClient baseOkHttp,
|
||||
@Named("RedgifsAccessTokenAuthenticator") Interceptor redGifsAuthenticator) {
|
||||
return baseOkHttp.newBuilder()
|
||||
.addInterceptor(chain -> chain.proceed(
|
||||
chain.request()
|
||||
.newBuilder()
|
||||
.header("User-Agent", APIUtils.USER_AGENT)
|
||||
.build()
|
||||
))
|
||||
.addInterceptor(redGifsAuthenticator)
|
||||
.build();
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Named("base")
|
||||
@@ -165,6 +181,12 @@ abstract class NetworkModule {
|
||||
.build();
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
static RedgifsAPI provideRedgifsAPI(@Named("redgifs") Retrofit redgifsRetrofit) {
|
||||
return redgifsRetrofit.create(RedgifsAPI.class);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Named("imgur")
|
||||
@Singleton
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
package eu.toldi.infinityforlemmy;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
import dagger.multibindings.IntoSet;
|
||||
import eu.toldi.infinityforlemmy.apis.RedgifsAPI;
|
||||
import eu.toldi.infinityforlemmy.post.enrich.CompositePostEnricher;
|
||||
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher;
|
||||
import eu.toldi.infinityforlemmy.post.enrich.RedGifsPostEnricher;
|
||||
|
||||
@Module
|
||||
abstract class PostEnricherModule {
|
||||
|
||||
@Provides
|
||||
@IntoSet
|
||||
static PostEnricher provideRedGifsPostEnricher(RedgifsAPI redgifsAPI) {
|
||||
return new RedGifsPostEnricher(redgifsAPI);
|
||||
}
|
||||
|
||||
@Provides
|
||||
static PostEnricher providePostEnricher(Set<PostEnricher> postEnrichers) {
|
||||
return new CompositePostEnricher(postEnrichers);
|
||||
}
|
||||
}
|
||||
@@ -14,7 +14,6 @@ import java.util.Map;
|
||||
import eu.toldi.infinityforlemmy.apis.RedgifsAPI;
|
||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import okhttp3.Headers;
|
||||
import okhttp3.Interceptor;
|
||||
import okhttp3.Response;
|
||||
import retrofit2.Call;
|
||||
@@ -22,6 +21,8 @@ import retrofit2.Retrofit;
|
||||
import retrofit2.converter.scalars.ScalarsConverterFactory;
|
||||
|
||||
public class RedgifsAccessTokenAuthenticator implements Interceptor {
|
||||
private static final String REDGIFS_HOST = "redgifs.com";
|
||||
|
||||
private SharedPreferences mCurrentAccountSharedPreferences;
|
||||
|
||||
public RedgifsAccessTokenAuthenticator(SharedPreferences currentAccountSharedPreferences) {
|
||||
@@ -60,7 +61,17 @@ public class RedgifsAccessTokenAuthenticator implements Interceptor {
|
||||
@NonNull
|
||||
@Override
|
||||
public Response intercept(@NonNull Chain chain) throws IOException {
|
||||
Response response = chain.proceed(chain.request());
|
||||
if (!chain.request().url().host().endsWith(REDGIFS_HOST)) {
|
||||
return chain.proceed(chain.request());
|
||||
}
|
||||
|
||||
String currentAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.REDGIFS_ACCESS_TOKEN, "");
|
||||
Response response = chain.proceed(
|
||||
chain.request().newBuilder()
|
||||
.addHeader(APIUtils.AUTHORIZATION_KEY, APIUtils.AUTHORIZATION_BASE + currentAccessToken)
|
||||
.build()
|
||||
);
|
||||
|
||||
if (response.code() == 401 || response.code() == 400) {
|
||||
String accessTokenHeader = response.request().header(APIUtils.AUTHORIZATION_KEY);
|
||||
if (accessTokenHeader == null) {
|
||||
@@ -74,13 +85,21 @@ public class RedgifsAccessTokenAuthenticator implements Interceptor {
|
||||
String newAccessToken = refreshAccessToken();
|
||||
if (!newAccessToken.equals("")) {
|
||||
response.close();
|
||||
return chain.proceed(response.request().newBuilder().headers(Headers.of(APIUtils.getRedgifsOAuthHeader(newAccessToken))).build());
|
||||
return chain.proceed(
|
||||
chain.request().newBuilder()
|
||||
.addHeader(APIUtils.AUTHORIZATION_KEY, APIUtils.AUTHORIZATION_BASE + newAccessToken)
|
||||
.build()
|
||||
);
|
||||
} else {
|
||||
return response;
|
||||
}
|
||||
} else {
|
||||
response.close();
|
||||
return chain.proceed(response.request().newBuilder().headers(Headers.of(APIUtils.getRedgifsOAuthHeader(accessTokenFromSharedPreferences))).build());
|
||||
return chain.proceed(
|
||||
chain.request().newBuilder()
|
||||
.addHeader(APIUtils.AUTHORIZATION_KEY, APIUtils.AUTHORIZATION_BASE + accessTokenFromSharedPreferences)
|
||||
.build()
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
package eu.toldi.infinityforlemmy;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
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;
|
||||
@@ -12,8 +15,14 @@ public class RetrofitHolder {
|
||||
|
||||
private Retrofit retrofit;
|
||||
private OkHttpClient okHttpClient;
|
||||
|
||||
private OkHttpClient okHttpClientBase;
|
||||
private String baseURL = APIUtils.API_BASE_URI;
|
||||
|
||||
private String accessToken = null;
|
||||
|
||||
private Interceptor oAuthInterceptor;
|
||||
|
||||
public Retrofit getRetrofit() {
|
||||
return retrofit;
|
||||
}
|
||||
@@ -33,6 +42,7 @@ public class RetrofitHolder {
|
||||
|
||||
public RetrofitHolder(OkHttpClient okHttpClient) {
|
||||
this.okHttpClient = okHttpClient;
|
||||
this.okHttpClientBase = okHttpClient;
|
||||
this.retrofit = createRetrofit(okHttpClient, APIUtils.API_BASE_URI);
|
||||
}
|
||||
|
||||
@@ -46,4 +56,18 @@ public class RetrofitHolder {
|
||||
.addConverterFactory(GsonConverterFactory.create())
|
||||
.build();
|
||||
}
|
||||
|
||||
public void setAccessToken(String accessToken) {
|
||||
this.accessToken = accessToken;
|
||||
OkHttpClient.Builder builder = okHttpClientBase.newBuilder();
|
||||
Log.d("RetrofitHolder", "Access token changed");
|
||||
if (accessToken != null && !accessToken.equals("")) {
|
||||
Log.i("RetrofitHolder", "Setting access token interceptor");
|
||||
oAuthInterceptor = APIUtils.getOAuthInterceptor(accessToken);
|
||||
builder.addInterceptor(oAuthInterceptor);
|
||||
}
|
||||
okHttpClient = builder.build();
|
||||
retrofit = createRetrofit(okHttpClient, baseURL);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -69,15 +69,15 @@ public class SortType {
|
||||
}
|
||||
|
||||
public enum Time {
|
||||
HOUR("TopHour", "Top Hour"),
|
||||
SIX_HOURS("TopSixHour", "Top Six Hours"),
|
||||
TWELVE_HOURS("TopTwelveHour", "Top Twelve Hours"),
|
||||
HOUR("hour", "Hour"),
|
||||
SIX_HOURS("SixHour", "Six Hours"),
|
||||
TWELVE_HOURS("TwelveHour", "Twelve Hours"),
|
||||
DAY("day", "Day"),
|
||||
WEEK("week", "Week"),
|
||||
MONTH("month", "Month"),
|
||||
THREE_MONTHS("TopThreeMonth", "Top Three Months"),
|
||||
SIX_MONTHS("TopSixMonth", "Top Six Months"),
|
||||
NINE_MONTHS("TopNineMonth", "Top Nine Months"),
|
||||
THREE_MONTHS("ThreeMonths", "Three Months"),
|
||||
SIX_MONTHS("SixMonths", "Six Months"),
|
||||
NINE_MONTHS("NineMonths", "Nine Months"),
|
||||
YEAR("year", "Year"),
|
||||
ALL("all", "All Time");
|
||||
|
||||
@@ -88,5 +88,14 @@ public class SortType {
|
||||
this.value = value;
|
||||
this.fullName = fullName;
|
||||
}
|
||||
|
||||
public static Time fromValue(String value) {
|
||||
for (Time time : values()) {
|
||||
if (time.value.equalsIgnoreCase(value)) {
|
||||
return time;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -283,7 +283,7 @@ public class AccountSavedThingActivity extends BaseActivity implements ActivityT
|
||||
PostFragment fragment = new PostFragment();
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putInt(PostFragment.EXTRA_POST_TYPE, PostPagingSource.TYPE_USER);
|
||||
bundle.putString(PostFragment.EXTRA_USER_NAME, mAccountName);
|
||||
bundle.putString(PostFragment.EXTRA_USER_NAME, mAccountQualifiedName);
|
||||
bundle.putString(PostFragment.EXTRA_USER_WHERE, PostPagingSource.USER_WHERE_SAVED);
|
||||
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||
bundle.putString(PostFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
||||
@@ -293,7 +293,7 @@ public class AccountSavedThingActivity extends BaseActivity implements ActivityT
|
||||
}
|
||||
CommentsListingFragment fragment = new CommentsListingFragment();
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString(CommentsListingFragment.EXTRA_USERNAME, mAccountName);
|
||||
bundle.putString(CommentsListingFragment.EXTRA_USERNAME, mAccountQualifiedName);
|
||||
bundle.putString(CommentsListingFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||
bundle.putString(CommentsListingFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
||||
bundle.putBoolean(CommentsListingFragment.EXTRA_ARE_SAVED_COMMENTS, true);
|
||||
|
||||
@@ -1,14 +1,19 @@
|
||||
package eu.toldi.infinityforlemmy.activities;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.PorterDuff;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.text.Spanned;
|
||||
import android.util.Log;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||
@@ -40,6 +45,9 @@ import eu.toldi.infinityforlemmy.user.BasicUserInfo;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import io.noties.markwon.AbstractMarkwonPlugin;
|
||||
import io.noties.markwon.Markwon;
|
||||
import io.noties.markwon.MarkwonConfiguration;
|
||||
import io.noties.markwon.MarkwonPlugin;
|
||||
import io.noties.markwon.core.MarkwonTheme;
|
||||
import io.noties.markwon.recycler.MarkwonAdapter;
|
||||
|
||||
public class InstanceInfoActivity extends BaseActivity {
|
||||
@@ -105,16 +113,43 @@ public class InstanceInfoActivity extends BaseActivity {
|
||||
|
||||
setSupportActionBar(toolbar);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
|
||||
|
||||
// Remove transparency from navigation bar
|
||||
getWindow().setNavigationBarColor(mCustomThemeWrapper.getBackgroundColor());
|
||||
|
||||
int markdownColor = customThemeWrapper.getPostContentColor();
|
||||
int postSpoilerBackgroundColor = markdownColor | 0xFF000000;
|
||||
int linkColor = customThemeWrapper.getLinkColor();
|
||||
|
||||
|
||||
MarkwonPlugin miscPlugin = new AbstractMarkwonPlugin() {
|
||||
@Override
|
||||
public void beforeSetText(@NonNull TextView textView, @NonNull Spanned markdown) {
|
||||
if (InstanceInfoActivity.this.contentTypeface != null) {
|
||||
textView.setTypeface(InstanceInfoActivity.this.contentTypeface);
|
||||
}
|
||||
textView.setTextColor(markdownColor);
|
||||
textView.setHighlightColor(Color.TRANSPARENT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void configureConfiguration(@NonNull MarkwonConfiguration.Builder builder) {
|
||||
builder.linkResolver((view, link) -> {
|
||||
Intent intent = new Intent(InstanceInfoActivity.this, LinkResolverActivity.class);
|
||||
Uri uri = Uri.parse(link);
|
||||
intent.setData(uri);
|
||||
InstanceInfoActivity.this.startActivity(intent);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void configureTheme(@NonNull MarkwonTheme.Builder builder) {
|
||||
builder.linkColor(linkColor);
|
||||
}
|
||||
};
|
||||
|
||||
mPostDetailMarkwon = MarkdownUtils.createFullRedditMarkwon(this,
|
||||
new AbstractMarkwonPlugin() {
|
||||
}, markdownColor, postSpoilerBackgroundColor, null);
|
||||
miscPlugin, markdownColor, postSpoilerBackgroundColor, null);
|
||||
mMarkwonAdapter = MarkdownUtils.createTablesAdapter();
|
||||
mContentMarkdownView.setAdapter(mMarkwonAdapter);
|
||||
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
|
||||
|
||||
@@ -7,6 +7,7 @@ import android.content.pm.PackageManager;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.webkit.URLUtil;
|
||||
import android.widget.Toast;
|
||||
|
||||
@@ -17,8 +18,11 @@ import androidx.browser.customtabs.CustomTabsService;
|
||||
|
||||
import org.apache.commons.io.FilenameUtils;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
@@ -29,8 +33,10 @@ import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||
import eu.toldi.infinityforlemmy.comment.Comment;
|
||||
import eu.toldi.infinityforlemmy.comment.FetchComment;
|
||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||
import eu.toldi.infinityforlemmy.post.FetchPost;
|
||||
import eu.toldi.infinityforlemmy.post.ObjectResolver;
|
||||
import eu.toldi.infinityforlemmy.post.Post;
|
||||
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher;
|
||||
import eu.toldi.infinityforlemmy.utils.LemmyUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
|
||||
@@ -75,6 +81,12 @@ public class LinkResolverActivity extends AppCompatActivity {
|
||||
@Named("no_oauth")
|
||||
RetrofitHolder mRetrofit;
|
||||
|
||||
@Inject
|
||||
Executor mExecutor;
|
||||
|
||||
@Inject
|
||||
PostEnricher postEnricher;
|
||||
|
||||
private String mAccessToken;
|
||||
|
||||
private Uri getRedditUriByPath(String path) {
|
||||
@@ -94,20 +106,23 @@ public class LinkResolverActivity extends AppCompatActivity {
|
||||
if (mAccessToken != null) {
|
||||
String instance = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_INSTANCE, null);
|
||||
mRetrofit.setBaseURL(instance);
|
||||
if (mCurrentAccountSharedPreferences.getBoolean(SharedPreferencesUtils.BEARER_TOKEN_AUTH, true)) {
|
||||
mRetrofit.setAccessToken(mAccessToken);
|
||||
}
|
||||
}
|
||||
|
||||
Uri uri = getIntent().getData();
|
||||
if (uri == null) {
|
||||
String url = getIntent().getStringExtra(Intent.EXTRA_TEXT);
|
||||
if (!URLUtil.isValidUrl(url)) {
|
||||
Toast.makeText(this, R.string.invalid_link, Toast.LENGTH_SHORT).show();
|
||||
Toast.makeText(getApplicationContext(), R.string.invalid_link, Toast.LENGTH_SHORT).show();
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
try {
|
||||
uri = Uri.parse(url);
|
||||
} catch (NullPointerException e) {
|
||||
Toast.makeText(this, R.string.invalid_link, Toast.LENGTH_SHORT).show();
|
||||
Toast.makeText(getApplicationContext(), R.string.invalid_link, Toast.LENGTH_SHORT).show();
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
@@ -115,7 +130,7 @@ public class LinkResolverActivity extends AppCompatActivity {
|
||||
|
||||
if (uri.getScheme() == null && uri.getHost() == null) {
|
||||
if (uri.toString().isEmpty()) {
|
||||
Toast.makeText(this, R.string.invalid_link, Toast.LENGTH_SHORT).show();
|
||||
Toast.makeText(getApplicationContext(), R.string.invalid_link, Toast.LENGTH_SHORT).show();
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
@@ -127,7 +142,7 @@ public class LinkResolverActivity extends AppCompatActivity {
|
||||
|
||||
private void handleUri(Uri uri) {
|
||||
if (uri == null) {
|
||||
Toast.makeText(this, R.string.no_link_available, Toast.LENGTH_SHORT).show();
|
||||
Toast.makeText(getApplicationContext(), R.string.no_link_available, Toast.LENGTH_SHORT).show();
|
||||
} else {
|
||||
String path = uri.getPath();
|
||||
if (path == null) {
|
||||
@@ -201,23 +216,52 @@ public class LinkResolverActivity extends AppCompatActivity {
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName);
|
||||
startActivity(intent);
|
||||
} else {
|
||||
mObjectResolver.resolvePost(uri.toString(), mAccessToken, new ObjectResolver.ObjectResolverListener() {
|
||||
@Override
|
||||
public void onResolveObjectSuccess(Object p) {
|
||||
Post post = (Post) p;
|
||||
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);
|
||||
}
|
||||
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, postEnricher, new FetchPost.FetchPostListener() {
|
||||
@Override
|
||||
public void fetchPostSuccess(Post post) {
|
||||
|
||||
@Override
|
||||
public void onResolveObjectFailed() {
|
||||
Toast.makeText(LinkResolverActivity.this, R.string.could_not_resolve_link, Toast.LENGTH_SHORT).show();
|
||||
finish();
|
||||
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() {
|
||||
@Override
|
||||
public void onResolveObjectSuccess(Object p) {
|
||||
Post post = (Post) p;
|
||||
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 onResolveObjectFailed() {
|
||||
Toast.makeText(getApplicationContext(), R.string.could_not_resolve_link, Toast.LENGTH_SHORT).show();
|
||||
finish();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
} else if (uri.toString().matches(COMMENT_PATTERN)) {
|
||||
if (mAccessToken == null) {
|
||||
@@ -237,30 +281,61 @@ public class LinkResolverActivity extends AppCompatActivity {
|
||||
|
||||
@Override
|
||||
public void onFetchCommentFailed() {
|
||||
Toast.makeText(LinkResolverActivity.this, R.string.could_not_resolve_link, Toast.LENGTH_SHORT).show();
|
||||
Toast.makeText(getApplicationContext(), R.string.could_not_resolve_link, Toast.LENGTH_SHORT).show();
|
||||
finish();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
mObjectResolver.resolveComment(uri.toString(), mAccessToken, new ObjectResolver.ObjectResolverListener() {
|
||||
@Override
|
||||
public void onResolveObjectSuccess(Object c) {
|
||||
Comment comment = (Comment) c;
|
||||
Intent intent = new Intent(LinkResolverActivity.this, ViewPostDetailActivity.class);
|
||||
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);
|
||||
}
|
||||
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 onResolveObjectFailed() {
|
||||
Toast.makeText(LinkResolverActivity.this, R.string.could_not_resolve_link, Toast.LENGTH_SHORT).show();
|
||||
finish();
|
||||
@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() {
|
||||
@Override
|
||||
public void onResolveObjectSuccess(Object c) {
|
||||
Comment comment = (Comment) c;
|
||||
Intent intent = new Intent(LinkResolverActivity.this, ViewPostDetailActivity.class);
|
||||
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 onResolveObjectFailed() {
|
||||
Toast.makeText(getApplicationContext(), R.string.could_not_resolve_link, Toast.LENGTH_SHORT).show();
|
||||
finish();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
} else if (authority.equals("v.redd.it")) {
|
||||
Intent intent = new Intent(this, ViewVideoActivity.class);
|
||||
|
||||
@@ -8,7 +8,6 @@ import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.text.Editable;
|
||||
import android.util.Log;
|
||||
import android.util.Patterns;
|
||||
import android.view.InflateException;
|
||||
import android.view.MenuItem;
|
||||
import android.widget.Button;
|
||||
@@ -180,6 +179,7 @@ public class LoginActivity extends BaseActivity {
|
||||
try {
|
||||
JSONObject responseJSON = new JSONObject(accountResponse);
|
||||
String accessToken = responseJSON.getString("jwt");
|
||||
mRetrofit.setAccessToken(null);
|
||||
|
||||
FetchMyInfo.fetchAccountInfo(mRetrofit.getRetrofit(), mRedditDataRoomDatabase, username,
|
||||
accessToken, new FetchMyInfo.FetchMyInfoListener() {
|
||||
@@ -189,13 +189,23 @@ public class LoginActivity extends BaseActivity {
|
||||
@Override
|
||||
public void onFetchSiteInfoSuccess(SiteInfo siteInfo) {
|
||||
boolean canDownvote = siteInfo.isEnable_downvotes();
|
||||
ParseAndInsertNewAccount.parseAndInsertNewAccount(mExecutor, new Handler(), name,display_name, accessToken, profileImageUrl, bannerImageUrl, authCode, finalInstance,canDownvote, mRedditDataRoomDatabase.accountDao(),
|
||||
ParseAndInsertNewAccount.parseAndInsertNewAccount(mExecutor, new Handler(), name, display_name, accessToken, profileImageUrl, bannerImageUrl, authCode, finalInstance, canDownvote, mRedditDataRoomDatabase.accountDao(),
|
||||
() -> {
|
||||
Intent resultIntent = new Intent();
|
||||
setResult(Activity.RESULT_OK, resultIntent);
|
||||
finish();
|
||||
});
|
||||
mCurrentAccountSharedPreferences.edit().putBoolean(SharedPreferencesUtils.CAN_DOWNVOTE, canDownvote).apply();
|
||||
String[] version = siteInfo.getVersion().split("\\.");
|
||||
if (version.length > 0) {
|
||||
Log.d("SwitchAccount", "Lemmy Version: " + version[0] + "." + version[1]);
|
||||
int majorVersion = Integer.parseInt(version[0]);
|
||||
int minorVersion = Integer.parseInt(version[1]);
|
||||
if (majorVersion > 0 || (majorVersion == 0 && minorVersion >= 19)) {
|
||||
mRetrofit.setAccessToken(accessToken);
|
||||
mCurrentAccountSharedPreferences.edit().putBoolean(SharedPreferencesUtils.BEARER_TOKEN_AUTH, true).apply();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -336,11 +336,13 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
||||
fragmentManager = getSupportFragmentManager();
|
||||
|
||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||
mRetrofit.setAccessToken(mAccessToken);
|
||||
|
||||
|
||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
||||
mAccountQualifiedName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
||||
String instance = (mAccessToken == null) ? mSharedPreferences.getString(SharedPreferencesUtils.ANONYMOUS_ACCOUNT_INSTANCE, APIUtils.API_BASE_URI) : mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_INSTANCE, null);
|
||||
if(instance != null) {
|
||||
if (instance != null) {
|
||||
mRetrofit.setBaseURL(instance);
|
||||
}
|
||||
|
||||
@@ -365,7 +367,8 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
||||
super.onResume();
|
||||
if (mAccessToken == null) {
|
||||
String instancePreference = mSharedPreferences.getString(SharedPreferencesUtils.ANONYMOUS_ACCOUNT_INSTANCE, APIUtils.API_BASE_URI);
|
||||
if (!mRetrofit.getBaseURL().equalsIgnoreCase(instancePreference)) {
|
||||
if (!instancePreference.startsWith(mRetrofit.getBaseURL())) {
|
||||
mRetrofit.setBaseURL(instancePreference);
|
||||
this.recreate();
|
||||
}
|
||||
}
|
||||
@@ -1510,7 +1513,12 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
||||
if (i == EditorInfo.IME_ACTION_DONE) {
|
||||
Utils.hideKeyboard(this);
|
||||
Intent subredditIntent = new Intent(this, ViewSubredditDetailActivity.class);
|
||||
subredditIntent.putExtra(ViewSubredditDetailActivity.EXTRA_COMMUNITY_FULL_NAME_KEY, thingEditText.getText().toString());
|
||||
String communityName = thingEditText.getText().toString();
|
||||
if (communityName.startsWith("!")) {
|
||||
communityName = communityName.substring(1);
|
||||
}
|
||||
subredditIntent.putExtra(ViewSubredditDetailActivity.EXTRA_COMMUNITY_FULL_NAME_KEY, communityName);
|
||||
|
||||
startActivity(subredditIntent);
|
||||
return true;
|
||||
}
|
||||
@@ -1568,7 +1576,11 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
||||
-> {
|
||||
Utils.hideKeyboard(this);
|
||||
Intent subredditIntent = new Intent(this, ViewSubredditDetailActivity.class);
|
||||
subredditIntent.putExtra(ViewSubredditDetailActivity.EXTRA_COMMUNITY_FULL_NAME_KEY, thingEditText.getText().toString());
|
||||
String communityName = thingEditText.getText().toString();
|
||||
if (communityName.startsWith("!")) {
|
||||
communityName = communityName.substring(1);
|
||||
}
|
||||
subredditIntent.putExtra(ViewSubredditDetailActivity.EXTRA_COMMUNITY_FULL_NAME_KEY, communityName);
|
||||
startActivity(subredditIntent);
|
||||
})
|
||||
.setNegativeButton(R.string.cancel, (dialogInterface, i) -> {
|
||||
@@ -1589,7 +1601,11 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
||||
if (i == EditorInfo.IME_ACTION_DONE) {
|
||||
Utils.hideKeyboard(this);
|
||||
Intent userIntent = new Intent(this, ViewUserDetailActivity.class);
|
||||
userIntent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_USER_NAME_KEY, thingEditText.getText().toString());
|
||||
String qualifiedName = thingEditText.getText().toString();
|
||||
if (qualifiedName.startsWith("@")) {
|
||||
qualifiedName = qualifiedName.substring(1);
|
||||
}
|
||||
userIntent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_USER_NAME_KEY, qualifiedName);
|
||||
startActivity(userIntent);
|
||||
return true;
|
||||
}
|
||||
@@ -1602,7 +1618,11 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
||||
-> {
|
||||
Utils.hideKeyboard(this);
|
||||
Intent userIntent = new Intent(this, ViewUserDetailActivity.class);
|
||||
userIntent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_USER_NAME_KEY, thingEditText.getText().toString());
|
||||
String qualifiedName = thingEditText.getText().toString();
|
||||
if (qualifiedName.startsWith("@")) {
|
||||
qualifiedName = qualifiedName.substring(1);
|
||||
}
|
||||
userIntent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_USER_NAME_KEY, qualifiedName);
|
||||
startActivity(userIntent);
|
||||
})
|
||||
.setNegativeButton(R.string.cancel, (dialogInterface, i) -> {
|
||||
|
||||
@@ -504,7 +504,7 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
|
||||
}
|
||||
|
||||
private void loadSubredditIcon() {
|
||||
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase, subredditName, mAccessToken, mOauthRetrofit, mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase, subredditName, mAccessToken, mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||
iconUrl = iconImageUrl;
|
||||
displaySubredditIcon();
|
||||
loadSubredditIconSuccessful = true;
|
||||
|
||||
@@ -475,6 +475,8 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
||||
nsfwTextView.setTextColor(primaryTextColor);
|
||||
titleEditText.setTextColor(primaryTextColor);
|
||||
titleEditText.setHintTextColor(secondaryTextColor);
|
||||
contentEditText.setTextColor(primaryTextColor);
|
||||
contentEditText.setHintTextColor(secondaryTextColor);
|
||||
boolean circleFab = mSharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false);
|
||||
applyFABTheme(captureFab, circleFab);
|
||||
applyFABTheme(selectFromLibraryFab, circleFab);
|
||||
@@ -487,6 +489,10 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
||||
titleEditText.setTypeface(typeface);
|
||||
selectAgainTextView.setTypeface(typeface);
|
||||
}
|
||||
|
||||
if (contentTypeface != null) {
|
||||
contentEditText.setTypeface(contentTypeface);
|
||||
}
|
||||
}
|
||||
|
||||
private void loadImage() {
|
||||
@@ -511,7 +517,7 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
||||
}
|
||||
|
||||
private void loadSubredditIcon() {
|
||||
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase, communityData.getQualified_name(), mAccessToken, mOauthRetrofit, mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase, communityData.getQualified_name(), mAccessToken, mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||
iconUrl = iconImageUrl;
|
||||
displaySubredditIcon();
|
||||
loadSubredditIconSuccessful = true;
|
||||
|
||||
@@ -458,6 +458,8 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
titleEditText.setHintTextColor(secondaryTextColor);
|
||||
suggestTitleButton.setBackgroundColor(mCustomThemeWrapper.getColorPrimaryLightTheme());
|
||||
suggestTitleButton.setTextColor(mCustomThemeWrapper.getButtonTextColor());
|
||||
contentEditText.setTextColor(primaryTextColor);
|
||||
contentEditText.setHintTextColor(secondaryTextColor);
|
||||
linkEditText.setTextColor(primaryTextColor);
|
||||
linkEditText.setHintTextColor(secondaryTextColor);
|
||||
if (typeface != null) {
|
||||
@@ -470,6 +472,7 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
}
|
||||
if (contentTypeface != null) {
|
||||
linkEditText.setTypeface(contentTypeface);
|
||||
contentEditText.setTypeface(contentTypeface);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -489,7 +492,7 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
|
||||
private void loadSubredditIcon() {
|
||||
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase, communityData.getQualified_name(),
|
||||
mAccessToken, mOauthRetrofit, mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||
mAccessToken, mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||
iconUrl = iconImageUrl;
|
||||
displaySubredditIcon();
|
||||
loadSubredditIconSuccessful = true;
|
||||
|
||||
@@ -500,7 +500,7 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
}
|
||||
|
||||
private void loadSubredditIcon() {
|
||||
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase, subredditName, mAccessToken, mOauthRetrofit, mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase, subredditName, mAccessToken, mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||
iconUrl = iconImageUrl;
|
||||
displaySubredditIcon();
|
||||
loadSubredditIconSuccessful = true;
|
||||
|
||||
@@ -451,11 +451,11 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
|
||||
private void loadSubredditIcon() {
|
||||
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase, communityData.getQualified_name(),
|
||||
mAccessToken, mOauthRetrofit, mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||
iconUrl = iconImageUrl;
|
||||
displaySubredditIcon();
|
||||
loadSubredditIconSuccessful = true;
|
||||
});
|
||||
mAccessToken, mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||
iconUrl = iconImageUrl;
|
||||
displaySubredditIcon();
|
||||
loadSubredditIconSuccessful = true;
|
||||
});
|
||||
}
|
||||
|
||||
private void promptAlertDialog(int titleResId, int messageResId) {
|
||||
|
||||
@@ -486,11 +486,11 @@ public class PostVideoActivity extends BaseActivity implements FlairBottomSheetF
|
||||
|
||||
private void loadSubredditIcon() {
|
||||
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase, subredditName,
|
||||
mAccessToken, mOauthRetrofit, mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||
iconUrl = iconImageUrl;
|
||||
displaySubredditIcon();
|
||||
loadSubredditIconSuccessful = true;
|
||||
});
|
||||
mAccessToken, mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||
iconUrl = iconImageUrl;
|
||||
displaySubredditIcon();
|
||||
loadSubredditIconSuccessful = true;
|
||||
});
|
||||
}
|
||||
|
||||
private void promptAlertDialog(int titleResId, int messageResId) {
|
||||
|
||||
@@ -433,12 +433,14 @@ public class SearchActivity extends BaseActivity {
|
||||
if (resultCode == RESULT_OK && data != null) {
|
||||
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
|
||||
communityData = data.getParcelableExtra(SubredditSelectionActivity.EXTRA_RETURN_COMMUNITY_DATA);
|
||||
subredditName = communityData.getName();
|
||||
|
||||
subredditIsUser = false;
|
||||
|
||||
if (subredditName == null) {
|
||||
if (communityData == null) {
|
||||
subredditNameTextView.setText(R.string.all_communities);
|
||||
} else {
|
||||
subredditName = communityData.getName();
|
||||
communityQualifiedName = communityData.getQualified_name();
|
||||
subredditNameTextView.setText(subredditName);
|
||||
}
|
||||
} else if (requestCode == SUBREDDIT_SEARCH_REQUEST_CODE) {
|
||||
|
||||
@@ -499,11 +499,11 @@ public class SubmitCrosspostActivity extends BaseActivity implements FlairBottom
|
||||
|
||||
private void loadSubredditIcon() {
|
||||
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase, subredditName,
|
||||
mAccessToken, mOauthRetrofit, mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||
iconUrl = iconImageUrl;
|
||||
displaySubredditIcon();
|
||||
loadSubredditIconSuccessful = true;
|
||||
});
|
||||
mAccessToken, mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||
iconUrl = iconImageUrl;
|
||||
displaySubredditIcon();
|
||||
loadSubredditIconSuccessful = true;
|
||||
});
|
||||
}
|
||||
|
||||
private void promptAlertDialog(int titleResId, int messageResId) {
|
||||
|
||||
@@ -78,6 +78,7 @@ import eu.toldi.infinityforlemmy.font.TitleFontStyle;
|
||||
import eu.toldi.infinityforlemmy.services.DownloadMediaService;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||
import okhttp3.OkHttpClient;
|
||||
|
||||
public class ViewImageOrGifActivity extends AppCompatActivity implements SetAsWallpaperCallback, CustomFontReceiver {
|
||||
|
||||
@@ -108,6 +109,9 @@ public class ViewImageOrGifActivity extends AppCompatActivity implements SetAsWa
|
||||
@Named("default")
|
||||
SharedPreferences mSharedPreferences;
|
||||
@Inject
|
||||
@Named("glide")
|
||||
OkHttpClient okHttpClient;
|
||||
@Inject
|
||||
Executor mExecutor;
|
||||
private boolean isActionBarHidden = false;
|
||||
private boolean isDownloading = false;
|
||||
@@ -146,7 +150,7 @@ public class ViewImageOrGifActivity extends AppCompatActivity implements SetAsWa
|
||||
getTheme().applyStyle(ContentFontFamily.valueOf(mSharedPreferences
|
||||
.getString(SharedPreferencesUtils.CONTENT_FONT_FAMILY_KEY, ContentFontFamily.Default.name())).getResId(), true);
|
||||
|
||||
BigImageViewer.initialize(GlideImageLoader.with(this.getApplicationContext()));
|
||||
BigImageViewer.initialize(GlideImageLoader.with(this.getApplicationContext(), okHttpClient));
|
||||
|
||||
setContentView(R.layout.activity_view_image_or_gif);
|
||||
|
||||
|
||||
@@ -67,6 +67,7 @@ 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.LemmyAPI;
|
||||
import eu.toldi.infinityforlemmy.apis.RedditAPI;
|
||||
import eu.toldi.infinityforlemmy.asynctasks.SwitchAccount;
|
||||
import eu.toldi.infinityforlemmy.comment.Comment;
|
||||
@@ -81,10 +82,12 @@ import eu.toldi.infinityforlemmy.post.HistoryPostPagingSource;
|
||||
import eu.toldi.infinityforlemmy.post.ParsePost;
|
||||
import eu.toldi.infinityforlemmy.post.Post;
|
||||
import eu.toldi.infinityforlemmy.post.PostPagingSource;
|
||||
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher;
|
||||
import eu.toldi.infinityforlemmy.postfilter.PostFilter;
|
||||
import eu.toldi.infinityforlemmy.readpost.ReadPost;
|
||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import okhttp3.OkHttpClient;
|
||||
import retrofit2.Call;
|
||||
import retrofit2.Response;
|
||||
import retrofit2.Retrofit;
|
||||
@@ -147,6 +150,11 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
|
||||
CustomThemeWrapper mCustomThemeWrapper;
|
||||
@Inject
|
||||
Executor mExecutor;
|
||||
@Inject
|
||||
@Named("glide")
|
||||
OkHttpClient okHttpClient;
|
||||
@Inject
|
||||
PostEnricher postEnricher;
|
||||
@State
|
||||
ArrayList<Post> posts;
|
||||
@State
|
||||
@@ -195,7 +203,7 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
|
||||
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
BigImageViewer.initialize(GlideImageLoader.with(this.getApplicationContext()));
|
||||
BigImageViewer.initialize(GlideImageLoader.with(this.getApplicationContext(), okHttpClient));
|
||||
|
||||
setContentView(R.layout.activity_view_post_detail);
|
||||
|
||||
@@ -526,69 +534,38 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
|
||||
Handler handler = new Handler(Looper.getMainLooper());
|
||||
|
||||
if (postType != HistoryPostPagingSource.TYPE_READ_POSTS) {
|
||||
int nextPage = posts.size() / 25 + 1;
|
||||
|
||||
mExecutor.execute(() -> {
|
||||
RedditAPI api = (mAccessToken == null ? mRetrofit.getRetrofit() : mOauthRetrofit).create(RedditAPI.class);
|
||||
LemmyAPI api = mRetrofit.getRetrofit().create(LemmyAPI.class);
|
||||
Call<String> call;
|
||||
String afterKey = posts.isEmpty() ? null : posts.get(posts.size() - 1).getFullName();
|
||||
|
||||
switch (postType) {
|
||||
case PostPagingSource.TYPE_SUBREDDIT:
|
||||
if (mAccessToken == null) {
|
||||
call = api.getSubredditBestPosts(subredditName, sortType, sortTime, afterKey);
|
||||
} else {
|
||||
call = api.getSubredditBestPostsOauth(subredditName, sortType,
|
||||
sortTime, afterKey, APIUtils.getOAuthHeader(mAccessToken));
|
||||
}
|
||||
call = api.getPosts(null, sortType.value, nextPage, 25, null, post.getSubredditNamePrefixed(), false, mAccessToken);
|
||||
break;
|
||||
case PostPagingSource.TYPE_USER:
|
||||
if (mAccessToken == null) {
|
||||
call = api.getUserPosts(username, afterKey, sortType, sortTime);
|
||||
} else {
|
||||
call = api.getUserPostsOauth(username, userWhere, afterKey, sortType,
|
||||
sortTime, APIUtils.getOAuthHeader(mAccessToken));
|
||||
}
|
||||
call = api.getUserPosts(username, sortType.value, nextPage, 25, false, mAccessToken);
|
||||
break;
|
||||
case PostPagingSource.TYPE_SEARCH:
|
||||
if (subredditName == null) {
|
||||
if (mAccessToken == null) {
|
||||
call = api.searchPosts(query, afterKey, sortType, sortTime,
|
||||
trendingSource);
|
||||
} else {
|
||||
call = api.searchPostsOauth(query, afterKey, sortType,
|
||||
sortTime, trendingSource, APIUtils.getOAuthHeader(mAccessToken));
|
||||
}
|
||||
} else {
|
||||
if (mAccessToken == null) {
|
||||
call = api.searchPostsInSpecificSubreddit(subredditName, query,
|
||||
sortType, sortTime, afterKey);
|
||||
} else {
|
||||
call = api.searchPostsInSpecificSubredditOauth(subredditName, query,
|
||||
sortType, sortTime, afterKey,
|
||||
APIUtils.getOAuthHeader(mAccessToken));
|
||||
}
|
||||
}
|
||||
call = api.search(query, null, subredditName, null, "Post", sortType.value, "All", nextPage, 25, mAccessToken);
|
||||
break;
|
||||
case PostPagingSource.TYPE_MULTI_REDDIT:
|
||||
if (mAccessToken == null) {
|
||||
call = api.getMultiRedditPosts(multiPath, afterKey, sortTime);
|
||||
} else {
|
||||
call = api.getMultiRedditPostsOauth(multiPath, afterKey,
|
||||
sortTime, APIUtils.getOAuthHeader(mAccessToken));
|
||||
}
|
||||
break;
|
||||
// TODO: Implement multi community
|
||||
|
||||
case PostPagingSource.TYPE_ANONYMOUS_FRONT_PAGE:
|
||||
//case PostPagingSource.TYPE_ANONYMOUS_MULTIREDDIT
|
||||
call = api.getSubredditBestPosts(subredditName, sortType, sortTime, afterKey);
|
||||
break;
|
||||
// TODO: Implement anonymous front page
|
||||
|
||||
default:
|
||||
call = api.getBestPosts(sortType, sortTime, afterKey,
|
||||
APIUtils.getOAuthHeader(mAccessToken));
|
||||
String type = (subredditName.equals("all")) ? "All" : (subredditName.equals("local")) ? "Local" : "Subscribed";
|
||||
call = api.getPosts(type, sortType.value, nextPage, 25, null, null, false, mAccessToken);
|
||||
}
|
||||
|
||||
try {
|
||||
Response<String> response = call.execute();
|
||||
if (response.isSuccessful()) {
|
||||
String responseString = response.body();
|
||||
LinkedHashSet<Post> newPosts = ParsePost.parsePostsSync(responseString, -1, postFilter, readPostList);
|
||||
LinkedHashSet<Post> newPosts = ParsePost.parsePostsSync(responseString, -1, postFilter, readPostList, postEnricher);
|
||||
if (newPosts == null) {
|
||||
handler.post(() -> {
|
||||
loadingMorePostsStatus = LoadingMorePostsStatus.NO_MORE_POSTS;
|
||||
@@ -670,7 +647,7 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
|
||||
Response<String> response = historyPosts.execute();
|
||||
if (response.isSuccessful()) {
|
||||
String responseString = response.body();
|
||||
LinkedHashSet<Post> newPosts = ParsePost.parsePostsSync(responseString, -1, postFilter, null);
|
||||
LinkedHashSet<Post> newPosts = ParsePost.parsePostsSync(responseString, -1, postFilter, null, postEnricher);
|
||||
if (newPosts == null || newPosts.isEmpty()) {
|
||||
handler.post(() -> {
|
||||
loadingMorePostsStatus = LoadingMorePostsStatus.NO_MORE_POSTS;
|
||||
|
||||
@@ -1518,7 +1518,11 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
||||
if (i == EditorInfo.IME_ACTION_DONE) {
|
||||
Utils.hideKeyboard(this);
|
||||
Intent subredditIntent = new Intent(this, ViewSubredditDetailActivity.class);
|
||||
subredditIntent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY, thingEditText.getText().toString());
|
||||
String communityName = thingEditText.getText().toString();
|
||||
if (communityName.startsWith("!")) {
|
||||
communityName = communityName.substring(1);
|
||||
}
|
||||
subredditIntent.putExtra(ViewSubredditDetailActivity.EXTRA_COMMUNITY_FULL_NAME_KEY, communityName);
|
||||
startActivity(subredditIntent);
|
||||
return true;
|
||||
}
|
||||
@@ -1576,7 +1580,11 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
||||
-> {
|
||||
Utils.hideKeyboard(this);
|
||||
Intent subredditIntent = new Intent(this, ViewSubredditDetailActivity.class);
|
||||
subredditIntent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY, thingEditText.getText().toString());
|
||||
String communityName = thingEditText.getText().toString();
|
||||
if (communityName.startsWith("!")) {
|
||||
communityName = communityName.substring(1);
|
||||
}
|
||||
subredditIntent.putExtra(ViewSubredditDetailActivity.EXTRA_COMMUNITY_FULL_NAME_KEY, communityName);
|
||||
startActivity(subredditIntent);
|
||||
})
|
||||
.setNegativeButton(R.string.cancel, (dialogInterface, i) -> {
|
||||
@@ -1597,7 +1605,11 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
||||
if (i == EditorInfo.IME_ACTION_DONE) {
|
||||
Utils.hideKeyboard(this);
|
||||
Intent userIntent = new Intent(this, ViewUserDetailActivity.class);
|
||||
userIntent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, thingEditText.getText().toString());
|
||||
String qualifiedName = thingEditText.getText().toString();
|
||||
if (qualifiedName.startsWith("@")) {
|
||||
qualifiedName = qualifiedName.substring(1);
|
||||
}
|
||||
userIntent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_USER_NAME_KEY, qualifiedName);
|
||||
startActivity(userIntent);
|
||||
return true;
|
||||
}
|
||||
@@ -1610,7 +1622,11 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
||||
-> {
|
||||
Utils.hideKeyboard(this);
|
||||
Intent userIntent = new Intent(this, ViewUserDetailActivity.class);
|
||||
userIntent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, thingEditText.getText().toString());
|
||||
String qualifiedName = thingEditText.getText().toString();
|
||||
if (qualifiedName.startsWith("@")) {
|
||||
qualifiedName = qualifiedName.substring(1);
|
||||
}
|
||||
userIntent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_USER_NAME_KEY, qualifiedName);
|
||||
startActivity(userIntent);
|
||||
})
|
||||
.setNegativeButton(R.string.cancel, (dialogInterface, i) -> {
|
||||
|
||||
@@ -1514,7 +1514,11 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
||||
if (i == EditorInfo.IME_ACTION_DONE) {
|
||||
Utils.hideKeyboard(this);
|
||||
Intent subredditIntent = new Intent(this, ViewSubredditDetailActivity.class);
|
||||
subredditIntent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY, thingEditText.getText().toString());
|
||||
String communityName = thingEditText.getText().toString();
|
||||
if (communityName.startsWith("!")) {
|
||||
communityName = communityName.substring(1);
|
||||
}
|
||||
subredditIntent.putExtra(ViewSubredditDetailActivity.EXTRA_COMMUNITY_FULL_NAME_KEY, communityName);
|
||||
startActivity(subredditIntent);
|
||||
return true;
|
||||
}
|
||||
@@ -1572,7 +1576,11 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
||||
-> {
|
||||
Utils.hideKeyboard(this);
|
||||
Intent subredditIntent = new Intent(this, ViewSubredditDetailActivity.class);
|
||||
subredditIntent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY, thingEditText.getText().toString());
|
||||
String communityName = thingEditText.getText().toString();
|
||||
if (communityName.startsWith("!")) {
|
||||
communityName = communityName.substring(1);
|
||||
}
|
||||
subredditIntent.putExtra(ViewSubredditDetailActivity.EXTRA_COMMUNITY_FULL_NAME_KEY, communityName);
|
||||
startActivity(subredditIntent);
|
||||
})
|
||||
.setNegativeButton(R.string.cancel, (dialogInterface, i) -> {
|
||||
@@ -1593,7 +1601,11 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
||||
if (i == EditorInfo.IME_ACTION_DONE) {
|
||||
Utils.hideKeyboard(this);
|
||||
Intent userIntent = new Intent(this, ViewUserDetailActivity.class);
|
||||
userIntent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, thingEditText.getText().toString());
|
||||
String userName = thingEditText.getText().toString();
|
||||
if (userName.startsWith("@")) {
|
||||
userName = userName.substring(1);
|
||||
}
|
||||
userIntent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_USER_NAME_KEY, userName);
|
||||
startActivity(userIntent);
|
||||
return true;
|
||||
}
|
||||
@@ -1606,7 +1618,11 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
||||
-> {
|
||||
Utils.hideKeyboard(this);
|
||||
Intent userIntent = new Intent(this, ViewUserDetailActivity.class);
|
||||
userIntent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, thingEditText.getText().toString());
|
||||
String userName = thingEditText.getText().toString();
|
||||
if (userName.startsWith("@")) {
|
||||
userName = userName.substring(1);
|
||||
}
|
||||
userIntent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, userName);
|
||||
startActivity(userIntent);
|
||||
})
|
||||
.setNegativeButton(R.string.cancel, (dialogInterface, i) -> {
|
||||
|
||||
@@ -108,6 +108,7 @@ import eu.toldi.infinityforlemmy.font.TitleFontFamily;
|
||||
import eu.toldi.infinityforlemmy.font.TitleFontStyle;
|
||||
import eu.toldi.infinityforlemmy.post.FetchPost;
|
||||
import eu.toldi.infinityforlemmy.post.Post;
|
||||
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher;
|
||||
import eu.toldi.infinityforlemmy.services.DownloadMediaService;
|
||||
import eu.toldi.infinityforlemmy.services.DownloadRedditVideoService;
|
||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||
@@ -222,10 +223,6 @@ public class ViewVideoActivity extends AppCompatActivity implements CustomFontRe
|
||||
@Named("default")
|
||||
SharedPreferences mSharedPreferences;
|
||||
|
||||
@Inject
|
||||
@Named("current_account")
|
||||
SharedPreferences mCurrentAccountSharedPreferences;
|
||||
|
||||
@Inject
|
||||
CustomThemeWrapper mCustomThemeWrapper;
|
||||
|
||||
@@ -235,6 +232,9 @@ public class ViewVideoActivity extends AppCompatActivity implements CustomFontRe
|
||||
@Inject
|
||||
SimpleCache mSimpleCache;
|
||||
|
||||
@Inject
|
||||
PostEnricher postEnricher;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
@@ -756,8 +756,8 @@ public class ViewVideoActivity extends AppCompatActivity implements CustomFontRe
|
||||
}
|
||||
});
|
||||
} else {
|
||||
FetchGfycatOrRedgifsVideoLinks.fetchRedgifsVideoLinks(this, mExecutor, new Handler(), redgifsRetrofit,
|
||||
mCurrentAccountSharedPreferences, gfycatId, new FetchGfycatOrRedgifsVideoLinks.FetchGfycatOrRedgifsVideoLinksListener() {
|
||||
FetchGfycatOrRedgifsVideoLinks.fetchRedgifsVideoLinks(mExecutor, new Handler(), redgifsRetrofit,
|
||||
gfycatId, new FetchGfycatOrRedgifsVideoLinks.FetchGfycatOrRedgifsVideoLinksListener() {
|
||||
@Override
|
||||
public void success(String webm, String mp4) {
|
||||
progressBar.setVisibility(View.GONE);
|
||||
@@ -791,7 +791,7 @@ public class ViewVideoActivity extends AppCompatActivity implements CustomFontRe
|
||||
int commentsIndex = segments.lastIndexOf("comments");
|
||||
String postId = segments.get(commentsIndex + 1);
|
||||
FetchPost.fetchPost(mExecutor, new Handler(), retrofit.getRetrofit(), postId, null,
|
||||
new FetchPost.FetchPostListener() {
|
||||
postEnricher, new FetchPost.FetchPostListener() {
|
||||
@Override
|
||||
public void fetchPostSuccess(Post post) {
|
||||
if (post.isGfycat()) {
|
||||
|
||||
@@ -15,6 +15,7 @@ import com.bumptech.glide.request.RequestOptions;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
@@ -186,6 +187,10 @@ public class BlockedCommunitiesRecyclerViewAdapter extends RecyclerView.Adapter<
|
||||
.into(((SubredditViewHolder) viewHolder).iconGifImageView);
|
||||
}
|
||||
((SubredditViewHolder) viewHolder).subredditNameTextView.setText(name);
|
||||
if (fullname.contains("@")) {
|
||||
((SubredditViewHolder) viewHolder).communityInstanceTextView.setText("@" + fullname.split(Pattern.quote("@"), 2)[1]);
|
||||
((SubredditViewHolder) viewHolder).communityInstanceTextView.setTextColor(CustomThemeWrapper.darkenColor(primaryTextColor, 0.7f));
|
||||
}
|
||||
} else if (viewHolder instanceof FavoriteSubredditViewHolder) {
|
||||
int offset;
|
||||
if (itemClickListener != null) {
|
||||
@@ -318,6 +323,9 @@ public class BlockedCommunitiesRecyclerViewAdapter extends RecyclerView.Adapter<
|
||||
@BindView(R.id.thing_name_text_view_item_subscribed_thing)
|
||||
TextView subredditNameTextView;
|
||||
|
||||
@BindView(R.id.thing_instance_text_view_item_subscribed_thing)
|
||||
TextView communityInstanceTextView;
|
||||
|
||||
SubredditViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
ButterKnife.bind(this, itemView);
|
||||
|
||||
@@ -572,7 +572,9 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
} else if (holder instanceof CommentFullyCollapsedViewHolder) {
|
||||
Comment comment = getCurrentComment(position);
|
||||
if (comment != null) {
|
||||
String authorWithPrefix = "u/" + comment.getAuthorName();
|
||||
String author_name = (mShowUserDisplayName) ? comment.getAuthorName() : comment.getAuthor().getUsername();
|
||||
String authorInstance = (mHideUserInstance) ? "" : "@" + comment.getAuthor().getQualifiedName().split(Pattern.quote("@"))[1];
|
||||
String authorWithPrefix = author_name + authorInstance;
|
||||
((CommentFullyCollapsedViewHolder) holder).usernameTextView.setText(authorWithPrefix);
|
||||
|
||||
if (comment.getAuthorIconUrl() == null) {
|
||||
@@ -662,21 +664,21 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
mExpandChildren, 1, new FetchComment.FetchCommentListener() {
|
||||
@Override
|
||||
public void onFetchCommentSuccess(ArrayList<Comment> expandedComments, Integer parentId, ArrayList<Integer> children) {
|
||||
if (mVisibleComments.size() > parentPosition
|
||||
&& parentComment.getId() == mVisibleComments.get(parentPosition).getId()) {
|
||||
if (parentComment.getId() == mVisibleComments.get(parentPosition).getId()) {
|
||||
if (mVisibleComments.get(parentPosition).isExpanded()) {
|
||||
|
||||
mVisibleComments.get(parentPosition).getChildren()
|
||||
.remove(mVisibleComments.get(parentPosition).getChildren().size() - 1);
|
||||
// mVisibleComments.get(parentPosition).removeMoreChildrenIds();
|
||||
|
||||
int placeholderPosition = findLoadMoreCommentsPlaceholderPosition(parentComment.getFullName(), commentPosition);
|
||||
if (placeholderPosition != -1) {
|
||||
mVisibleComments.remove(placeholderPosition);
|
||||
if (position != -1) {
|
||||
|
||||
if (mIsSingleCommentThreadMode) {
|
||||
notifyItemRemoved(placeholderPosition + 1);
|
||||
mVisibleComments.remove(position - 1);
|
||||
notifyItemRemoved(position + 1);
|
||||
} else {
|
||||
notifyItemRemoved(placeholderPosition);
|
||||
mVisibleComments.remove(position);
|
||||
notifyItemRemoved(position);
|
||||
}
|
||||
List<Comment> trulyNewComments = new ArrayList<>();
|
||||
for (int i = 0; i < expandedComments.size(); i++) {
|
||||
@@ -686,11 +688,13 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
trulyNewComments.add(expandedComments.get(i));
|
||||
loadedComments.add(expandedComments.get(i).getId());
|
||||
}
|
||||
mVisibleComments.addAll(placeholderPosition, trulyNewComments);
|
||||
if (mIsSingleCommentThreadMode) {
|
||||
notifyItemRangeInserted(placeholderPosition + 1, trulyNewComments.size());
|
||||
} else {
|
||||
notifyItemRangeInserted(placeholderPosition, trulyNewComments.size());
|
||||
if (!trulyNewComments.isEmpty()) {
|
||||
mVisibleComments.addAll(position, trulyNewComments);
|
||||
if (mIsSingleCommentThreadMode) {
|
||||
notifyItemRangeInserted(position + 1, trulyNewComments.size());
|
||||
} else {
|
||||
notifyItemRangeInserted(position, trulyNewComments.size());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -720,7 +724,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
if (mVisibleComments.get(i).getFullName().equals(parentComment.getFullName())) {
|
||||
if (mVisibleComments.get(i).isExpanded()) {
|
||||
int placeholderPositionHint = i + mVisibleComments.get(i).getChildren().size();
|
||||
int placeholderPosition = findLoadMoreCommentsPlaceholderPosition(parentComment.getFullName(), placeholderPositionHint);
|
||||
int placeholderPosition = findLoadMoreCommentsPlaceholderPosition(parentComment.getId(), placeholderPositionHint);
|
||||
|
||||
if (placeholderPosition != -1) {
|
||||
mVisibleComments.get(placeholderPosition).setLoadingMoreChildren(false);
|
||||
@@ -758,7 +762,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
|
||||
@Override
|
||||
public void onFetchCommentFailed() {
|
||||
int currentParentPosition = findCommentPosition(parentComment.getFullName(), parentPosition);
|
||||
int currentParentPosition = findCommentPosition(parentComment.getId(), parentPosition);
|
||||
if (currentParentPosition == -1) {
|
||||
// note: returning here is probably a mistake, because
|
||||
// parent is just not visible, but it can still exist in the comments tree.
|
||||
@@ -768,7 +772,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
|
||||
if (currentParentComment.isExpanded()) {
|
||||
int placeholderPositionHint = currentParentPosition + currentParentComment.getChildren().size();
|
||||
int placeholderPosition = findLoadMoreCommentsPlaceholderPosition(parentComment.getFullName(), placeholderPositionHint);
|
||||
int placeholderPosition = findLoadMoreCommentsPlaceholderPosition(parentComment.getId(), placeholderPositionHint);
|
||||
|
||||
if (placeholderPosition != -1) {
|
||||
mVisibleComments.get(placeholderPosition).setLoadingMoreChildren(false);
|
||||
@@ -817,7 +821,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
*
|
||||
* @return position of the placeholder or -1 if not found
|
||||
*/
|
||||
private int findCommentPosition(String fullName, int positionHint) {
|
||||
private int findCommentPosition(int fullName, int positionHint) {
|
||||
return findCommentPosition(fullName, positionHint, Comment.NOT_PLACEHOLDER);
|
||||
}
|
||||
|
||||
@@ -827,20 +831,20 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
*
|
||||
* @return position of the placeholder or -1 if not found
|
||||
*/
|
||||
private int findLoadMoreCommentsPlaceholderPosition(String fullName, int positionHint) {
|
||||
return findCommentPosition(fullName, positionHint, Comment.PLACEHOLDER_LOAD_MORE_COMMENTS);
|
||||
private int findLoadMoreCommentsPlaceholderPosition(int id, int positionHint) {
|
||||
return findCommentPosition(id, positionHint, Comment.PLACEHOLDER_LOAD_MORE_COMMENTS);
|
||||
}
|
||||
|
||||
private int findCommentPosition(String fullName, int positionHint, int placeholderType) {
|
||||
private int findCommentPosition(int id, int positionHint, int placeholderType) {
|
||||
if (0 <= positionHint && positionHint < mVisibleComments.size()
|
||||
&& mVisibleComments.get(positionHint).getFullName().equals(fullName)
|
||||
&& mVisibleComments.get(positionHint).getId() == id
|
||||
&& mVisibleComments.get(positionHint).getPlaceholderType() == placeholderType) {
|
||||
return positionHint;
|
||||
}
|
||||
|
||||
for (int i = 0; i < mVisibleComments.size(); i++) {
|
||||
Comment comment = mVisibleComments.get(i);
|
||||
if (comment.getFullName().equals(fullName) && comment.getPlaceholderType() == placeholderType) {
|
||||
if (comment.getId() == id && comment.getPlaceholderType() == placeholderType) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -139,7 +139,6 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
||||
private BaseActivity mActivity;
|
||||
private HistoryPostFragment mFragment;
|
||||
private SharedPreferences mSharedPreferences;
|
||||
private SharedPreferences mCurrentAccountSharedPreferences;
|
||||
private Executor mExecutor;
|
||||
private Retrofit retrofit;
|
||||
private Retrofit mGfycatRetrofit;
|
||||
@@ -227,7 +226,7 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
||||
Retrofit gfycatRetrofit, Retrofit redgifsRetrofit, Provider<StreamableAPI> streambleApiProvider,
|
||||
CustomThemeWrapper customThemeWrapper, Locale locale,
|
||||
String accessToken, String accountName, int postType, int postLayout, boolean displaySubredditName,
|
||||
SharedPreferences sharedPreferences, SharedPreferences currentAccountSharedPreferences,
|
||||
SharedPreferences sharedPreferences,
|
||||
SharedPreferences nsfwAndSpoilerSharedPreferences,
|
||||
ExoCreator exoCreator, Callback callback) {
|
||||
super(DIFF_CALLBACK);
|
||||
@@ -235,7 +234,6 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
||||
mActivity = activity;
|
||||
mFragment = fragment;
|
||||
mSharedPreferences = sharedPreferences;
|
||||
mCurrentAccountSharedPreferences = currentAccountSharedPreferences;
|
||||
mExecutor = executor;
|
||||
retrofit = oauthRetrofit;
|
||||
mGfycatRetrofit = gfycatRetrofit;
|
||||
@@ -698,7 +696,7 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
||||
if ((post.isGfycat() || post.isRedgifs()) && !post.isLoadGfycatOrStreamableVideoSuccess()) {
|
||||
((PostVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall =
|
||||
post.isGfycat() ? mGfycatRetrofit.create(GfycatAPI.class).getGfycatData(post.getGfycatId()) :
|
||||
mRedgifsRetrofit.create(RedgifsAPI.class).getRedgifsData(APIUtils.getRedgifsOAuthHeader(mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.REDGIFS_ACCESS_TOKEN, "")), post.getGfycatId(), APIUtils.USER_AGENT);
|
||||
mRedgifsRetrofit.create(RedgifsAPI.class).getRedgifsData(post.getGfycatId());
|
||||
FetchGfycatOrRedgifsVideoLinks.fetchGfycatOrRedgifsVideoLinksInRecyclerViewAdapter(mExecutor, new Handler(),
|
||||
((PostVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall,
|
||||
post.isGfycat(), mAutomaticallyTryRedgifs,
|
||||
@@ -875,7 +873,7 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
||||
if ((post.isGfycat() || post.isRedgifs()) && !post.isLoadGfycatOrStreamableVideoSuccess()) {
|
||||
((PostCard2VideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall =
|
||||
post.isGfycat() ? mGfycatRetrofit.create(GfycatAPI.class).getGfycatData(post.getGfycatId()) :
|
||||
mRedgifsRetrofit.create(RedgifsAPI.class).getRedgifsData(APIUtils.getRedgifsOAuthHeader(mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.REDGIFS_ACCESS_TOKEN, "")), post.getGfycatId(), APIUtils.USER_AGENT);
|
||||
mRedgifsRetrofit.create(RedgifsAPI.class).getRedgifsData(post.getGfycatId());
|
||||
FetchGfycatOrRedgifsVideoLinks.fetchGfycatOrRedgifsVideoLinksInRecyclerViewAdapter(mExecutor, new Handler(),
|
||||
((PostCard2VideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall,
|
||||
post.isGfycat(), mAutomaticallyTryRedgifs,
|
||||
|
||||
@@ -67,6 +67,7 @@ import eu.toldi.infinityforlemmy.FetchGfycatOrRedgifsVideoLinks;
|
||||
import eu.toldi.infinityforlemmy.FetchStreamableVideo;
|
||||
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;
|
||||
@@ -135,8 +136,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
private BaseActivity mActivity;
|
||||
private ViewPostDetailFragment mFragment;
|
||||
private Executor mExecutor;
|
||||
private Retrofit mRetrofit;
|
||||
private Retrofit mOauthRetrofit;
|
||||
private RetrofitHolder mRetrofit;
|
||||
private Retrofit mGfycatRetrofit;
|
||||
private Retrofit mRedgifsRetrofit;
|
||||
private final Provider<StreamableAPI> mStreamableApiProvider;
|
||||
@@ -172,6 +172,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
private boolean mHideUpvoteRatio;
|
||||
private boolean mHideTheNumberOfAwards;
|
||||
private boolean mHideSubredditAndUserPrefix;
|
||||
private boolean mShareOnLocalInstance;
|
||||
|
||||
private boolean mShowDisplayNames;
|
||||
private boolean mHideTheNumberOfVotes;
|
||||
@@ -223,7 +224,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
|
||||
public PostDetailRecyclerViewAdapter(BaseActivity activity, ViewPostDetailFragment fragment,
|
||||
Executor executor, CustomThemeWrapper customThemeWrapper,
|
||||
Retrofit retrofit, Retrofit gfycatRetrofit,
|
||||
RetrofitHolder retrofit, Retrofit gfycatRetrofit,
|
||||
Retrofit redgifsRetrofit, Provider<StreamableAPI> streamableApiProvider,
|
||||
RedditDataRoomDatabase redditDataRoomDatabase, RequestManager glide,
|
||||
boolean separatePostAndComments, String accessToken,
|
||||
@@ -347,6 +348,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
mHideUpvoteRatio = postDetailsSharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_UPVOTE_RATIO, false);
|
||||
mHideTheNumberOfAwards = postDetailsSharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_THE_NUMBER_OF_AWARDS, false);
|
||||
mHideSubredditAndUserPrefix = postDetailsSharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_SUBREDDIT_AND_USER_PREFIX, false);
|
||||
mShareOnLocalInstance = postDetailsSharedPreferences.getBoolean(SharedPreferencesUtils.SHARE_LINK_ON_LOCAL_INSTANCE, false);
|
||||
mShowDisplayNames = postDetailsSharedPreferences.getBoolean(SharedPreferencesUtils.POST_DETAIL_DISPLAY_NAME_INSTEAD_OF_USERNAME, true);
|
||||
mHideTheNumberOfVotes = postDetailsSharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_THE_NUMBER_OF_VOTES, false);
|
||||
mHideDownvotes = !currentAccountSharedPreferences.getBoolean(SharedPreferencesUtils.CAN_DOWNVOTE, true);
|
||||
@@ -485,7 +487,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
((PostDetailBaseViewHolder) holder).mTitleTextView.setText(mPost.getTitle());
|
||||
if (mPost.getSubredditNamePrefixed().startsWith("u/")) {
|
||||
if (mPost.getAuthorIconUrl() == null) {
|
||||
LoadUserData.loadUserData(mExecutor, new Handler(), mRedditDataRoomDatabase,mPost.getAuthorNamePrefixed(), mOauthRetrofit, iconImageUrl -> {
|
||||
LoadUserData.loadUserData(mExecutor, new Handler(), mRedditDataRoomDatabase, mPost.getAuthorNamePrefixed(), mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||
if (mActivity != null && getItemCount() > 0) {
|
||||
if (iconImageUrl == null || iconImageUrl.equals("")) {
|
||||
mGlide.load(R.drawable.subreddit_default_icon)
|
||||
@@ -519,7 +521,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
if (mPost.getSubredditIconUrl() == null) {
|
||||
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(),
|
||||
mRedditDataRoomDatabase, mPost.getSubredditNamePrefixed(),
|
||||
mAccessToken, mOauthRetrofit, mRetrofit, iconImageUrl -> {
|
||||
mAccessToken, mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||
if (iconImageUrl == null || iconImageUrl.equals("")) {
|
||||
mGlide.load(R.drawable.subreddit_default_icon)
|
||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
||||
@@ -696,7 +698,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
if (mPost.isGfycat() || mPost.isRedgifs() && !mPost.isLoadGfycatOrStreamableVideoSuccess()) {
|
||||
((PostDetailVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall =
|
||||
mPost.isGfycat() ? mGfycatRetrofit.create(GfycatAPI.class).getGfycatData(mPost.getGfycatId()) :
|
||||
mRedgifsRetrofit.create(RedgifsAPI.class).getRedgifsData(APIUtils.getRedgifsOAuthHeader(mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.REDGIFS_ACCESS_TOKEN, "")), mPost.getGfycatId(), APIUtils.USER_AGENT);
|
||||
mRedgifsRetrofit.create(RedgifsAPI.class).getRedgifsData(mPost.getGfycatId());
|
||||
FetchGfycatOrRedgifsVideoLinks.fetchGfycatOrRedgifsVideoLinksInRecyclerViewAdapter(mExecutor, new Handler(),
|
||||
((PostDetailVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall,
|
||||
mPost.isGfycat(), mAutomaticallyTryRedgifs,
|
||||
@@ -1385,7 +1387,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
|
||||
mPostDetailRecyclerViewAdapterCallback.updatePost(mPost);
|
||||
|
||||
VoteThing.votePost(mActivity, mRetrofit, mAccessToken, new VoteThing.VoteThingWithoutPositionListener() {
|
||||
VoteThing.votePost(mActivity, mRetrofit.getRetrofit(), mAccessToken, new VoteThing.VoteThingWithoutPositionListener() {
|
||||
@Override
|
||||
public void onVoteThingSuccess() {
|
||||
if (newVoteType == Integer.parseInt(APIUtils.DIR_UPVOTE)) {
|
||||
@@ -1491,13 +1493,13 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
|
||||
mPostDetailRecyclerViewAdapterCallback.updatePost(mPost);
|
||||
|
||||
VoteThing.votePost(mActivity, mRetrofit, mAccessToken, new VoteThing.VoteThingWithoutPositionListener() {
|
||||
VoteThing.votePost(mActivity, mRetrofit.getRetrofit(), mAccessToken, new VoteThing.VoteThingWithoutPositionListener() {
|
||||
@Override
|
||||
public void onVoteThingSuccess() {
|
||||
if (newVoteType == Integer.parseInt(APIUtils.DIR_DOWNVOTE)) {
|
||||
mPost.setVoteType(-1);
|
||||
mDownvoteButton.setColorFilter(mDownvotedColor, PorterDuff.Mode.SRC_IN);
|
||||
if(mSeperateUpvoteAndDownvote) {
|
||||
if (mSeperateUpvoteAndDownvote) {
|
||||
mDownvoteTextView.setTextColor(mDownvotedColor);
|
||||
} else {
|
||||
mScoreTextView.setTextColor(mDownvotedColor);
|
||||
@@ -1587,7 +1589,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
SavePost savePost = new SavePost();
|
||||
if (mPost.isSaved()) {
|
||||
mSaveButton.setImageResource(R.drawable.ic_bookmark_border_grey_24dp);
|
||||
savePost.unsaveThing(mRetrofit, mAccessToken, mPost.getId(),
|
||||
savePost.unsaveThing(mRetrofit.getRetrofit(), mAccessToken, mPost.getId(),
|
||||
new SaveThing.SaveThingListener() {
|
||||
@Override
|
||||
public void success() {
|
||||
@@ -1607,7 +1609,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
});
|
||||
} else {
|
||||
mSaveButton.setImageResource(R.drawable.ic_bookmark_grey_24dp);
|
||||
savePost.saveThing(mRetrofit, mAccessToken, mPost.getId(),
|
||||
savePost.saveThing(mRetrofit.getRetrofit(), mAccessToken, mPost.getId(),
|
||||
new SaveThing.SaveThingListener() {
|
||||
@Override
|
||||
public void success() {
|
||||
@@ -1629,8 +1631,9 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
});
|
||||
|
||||
mShareButton.setOnClickListener(view -> {
|
||||
String link = (mShareOnLocalInstance) ? mRetrofit.getBaseURL() + "/post/" + mPost.getId() : mPost.getPermalink();
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString(ShareLinkBottomSheetFragment.EXTRA_POST_LINK, mPost.getPermalink());
|
||||
bundle.putString(ShareLinkBottomSheetFragment.EXTRA_POST_LINK, link);
|
||||
if (mPost.getPostType() != Post.TEXT_TYPE) {
|
||||
bundle.putInt(ShareLinkBottomSheetFragment.EXTRA_MEDIA_TYPE, mPost.getPostType());
|
||||
switch (mPost.getPostType()) {
|
||||
@@ -1651,7 +1654,8 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
});
|
||||
|
||||
mShareButton.setOnLongClickListener(view -> {
|
||||
mActivity.copyLink(mPost.getPermalink());
|
||||
String link = (mShareOnLocalInstance) ? mRetrofit.getBaseURL() + "/post/" + mPost.getId() : mPost.getPermalink();
|
||||
mActivity.copyLink(link);
|
||||
return true;
|
||||
});
|
||||
|
||||
|
||||
@@ -71,6 +71,7 @@ import eu.toldi.infinityforlemmy.FetchGfycatOrRedgifsVideoLinks;
|
||||
import eu.toldi.infinityforlemmy.FetchStreamableVideo;
|
||||
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;
|
||||
@@ -150,7 +151,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
||||
private SharedPreferences mSharedPreferences;
|
||||
private SharedPreferences mCurrentAccountSharedPreferences;
|
||||
private Executor mExecutor;
|
||||
private Retrofit retrofit;
|
||||
private RetrofitHolder retrofit;
|
||||
private Retrofit mGfycatRetrofit;
|
||||
private Retrofit mRedgifsRetrofit;
|
||||
private Provider<StreamableAPI> mStreamableApiProvider;
|
||||
@@ -230,6 +231,8 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
||||
private boolean mShowDisplayNames;
|
||||
private boolean mHideTheNumberOfVotes;
|
||||
|
||||
private boolean mShareLinkOnLocalInstance;
|
||||
|
||||
private boolean mSeparateUpandDownVotes;
|
||||
|
||||
private boolean mHideDownvotes;
|
||||
@@ -244,7 +247,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
||||
private boolean canPlayVideo = true;
|
||||
private RecyclerView.RecycledViewPool mGalleryRecycledViewPool;
|
||||
|
||||
public PostRecyclerViewAdapter(BaseActivity activity, PostFragment fragment, Executor executor, Retrofit oauthRetrofit,
|
||||
public PostRecyclerViewAdapter(BaseActivity activity, PostFragment fragment, Executor executor, RetrofitHolder retrofit,
|
||||
Retrofit gfycatRetrofit, Retrofit redgifsRetrofit, Provider<StreamableAPI> streamableApiProvider,
|
||||
CustomThemeWrapper customThemeWrapper, Locale locale,
|
||||
String accessToken, String accountName, int postType, int postLayout, boolean displaySubredditName,
|
||||
@@ -259,7 +262,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
||||
mSharedPreferences = sharedPreferences;
|
||||
mCurrentAccountSharedPreferences = currentAccountSharedPreferences;
|
||||
mExecutor = executor;
|
||||
retrofit = oauthRetrofit;
|
||||
this.retrofit = retrofit;
|
||||
mGfycatRetrofit = gfycatRetrofit;
|
||||
mRedgifsRetrofit = redgifsRetrofit;
|
||||
mStreamableApiProvider = streamableApiProvider;
|
||||
@@ -316,6 +319,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
||||
mHideSubredditAndUserPrefix = sharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_SUBREDDIT_AND_USER_PREFIX, false);
|
||||
mShowDisplayNames = sharedPreferences.getBoolean(SharedPreferencesUtils.POST_DISPLAY_NAME_INSTEAD_OF_USERNAME, true);
|
||||
mHideTheNumberOfVotes = sharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_THE_NUMBER_OF_VOTES, false);
|
||||
mShareLinkOnLocalInstance = sharedPreferences.getBoolean(SharedPreferencesUtils.SHARE_LINK_ON_LOCAL_INSTANCE, false);
|
||||
mHideDownvotes = !currentAccountSharedPreferences.getBoolean(SharedPreferencesUtils.CAN_DOWNVOTE, true);
|
||||
mSeparateUpandDownVotes = sharedPreferences.getBoolean(SharedPreferencesUtils.POST_SEPARATE_UP_AND_DOWN_VOTES, true) && !mHideDownvotes;
|
||||
mHideTheNumberOfComments = sharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_THE_NUMBER_OF_COMMENTS, false);
|
||||
@@ -783,7 +787,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
||||
if ((post.isGfycat() || post.isRedgifs()) && !post.isLoadGfycatOrStreamableVideoSuccess()) {
|
||||
((PostVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall =
|
||||
post.isGfycat() ? mGfycatRetrofit.create(GfycatAPI.class).getGfycatData(post.getGfycatId()) :
|
||||
mRedgifsRetrofit.create(RedgifsAPI.class).getRedgifsData(APIUtils.getRedgifsOAuthHeader(mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.REDGIFS_ACCESS_TOKEN, "")), post.getGfycatId(), APIUtils.USER_AGENT);
|
||||
mRedgifsRetrofit.create(RedgifsAPI.class).getRedgifsData(post.getGfycatId());
|
||||
FetchGfycatOrRedgifsVideoLinks.fetchGfycatOrRedgifsVideoLinksInRecyclerViewAdapter(mExecutor, new Handler(),
|
||||
((PostVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall,
|
||||
post.isGfycat(), mAutomaticallyTryRedgifs,
|
||||
@@ -975,7 +979,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
||||
if ((post.isGfycat() || post.isRedgifs()) && !post.isLoadGfycatOrStreamableVideoSuccess()) {
|
||||
((PostCard2VideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall =
|
||||
post.isGfycat() ? mGfycatRetrofit.create(GfycatAPI.class).getGfycatData(post.getGfycatId()) :
|
||||
mRedgifsRetrofit.create(RedgifsAPI.class).getRedgifsData(APIUtils.getRedgifsOAuthHeader(mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.REDGIFS_ACCESS_TOKEN, "")), post.getGfycatId(), APIUtils.USER_AGENT);
|
||||
mRedgifsRetrofit.create(RedgifsAPI.class).getRedgifsData(post.getGfycatId());
|
||||
FetchGfycatOrRedgifsVideoLinks.fetchGfycatOrRedgifsVideoLinksInRecyclerViewAdapter(mExecutor, new Handler(),
|
||||
((PostCard2VideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall,
|
||||
post.isGfycat(), mAutomaticallyTryRedgifs,
|
||||
@@ -1893,8 +1897,9 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
||||
}
|
||||
|
||||
private void shareLink(Post post) {
|
||||
String link = (mShareLinkOnLocalInstance) ? retrofit.getBaseURL() + "/post/" + post.getId() : post.getPermalink();
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString(ShareLinkBottomSheetFragment.EXTRA_POST_LINK, post.getPermalink());
|
||||
bundle.putString(ShareLinkBottomSheetFragment.EXTRA_POST_LINK, link);
|
||||
if (post.getPostType() != Post.TEXT_TYPE) {
|
||||
bundle.putInt(ShareLinkBottomSheetFragment.EXTRA_MEDIA_TYPE, post.getPostType());
|
||||
switch (post.getPostType()) {
|
||||
@@ -2666,7 +2671,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
||||
}
|
||||
}
|
||||
|
||||
VoteThing.votePost(mActivity, retrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
||||
VoteThing.votePost(mActivity, retrofit.getRetrofit(), mAccessToken, new VoteThing.VoteThingListener() {
|
||||
@Override
|
||||
public void onVoteThingSuccess(int position1) {
|
||||
int currentPosition = getBindingAdapterPosition();
|
||||
@@ -2782,7 +2787,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
||||
}
|
||||
}
|
||||
|
||||
VoteThing.votePost(mActivity, retrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
||||
VoteThing.votePost(mActivity, retrofit.getRetrofit(), mAccessToken, new VoteThing.VoteThingListener() {
|
||||
@Override
|
||||
public void onVoteThingSuccess(int position1) {
|
||||
int currentPosition = getBindingAdapterPosition();
|
||||
@@ -2790,9 +2795,9 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
||||
post.setVoteType(-1);
|
||||
if (currentPosition == position) {
|
||||
downvoteButton.setColorFilter(mDownvotedColor, android.graphics.PorterDuff.Mode.SRC_IN);
|
||||
if(mSeparateUpandDownVotes){
|
||||
if (mSeparateUpandDownVotes) {
|
||||
downvoteTextView.setTextColor(mDownvotedColor);
|
||||
}else {
|
||||
} else {
|
||||
scoreTextView.setTextColor(mDownvotedColor);
|
||||
}
|
||||
}
|
||||
@@ -2855,7 +2860,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
||||
SavePost savePost = new SavePost();
|
||||
if (post.isSaved()) {
|
||||
saveButton.setImageResource(R.drawable.ic_bookmark_border_grey_24dp);
|
||||
savePost.unsaveThing(retrofit, mAccessToken, post.getId(),
|
||||
savePost.unsaveThing(retrofit.getRetrofit(), mAccessToken, post.getId(),
|
||||
new SaveThing.SaveThingListener() {
|
||||
@Override
|
||||
public void success() {
|
||||
@@ -2879,7 +2884,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
||||
});
|
||||
} else {
|
||||
saveButton.setImageResource(R.drawable.ic_bookmark_grey_24dp);
|
||||
savePost.saveThing(retrofit, mAccessToken, post.getId(),
|
||||
savePost.saveThing(retrofit.getRetrofit(), mAccessToken, post.getId(),
|
||||
new SaveThing.SaveThingListener() {
|
||||
@Override
|
||||
public void success() {
|
||||
@@ -2923,7 +2928,8 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
||||
}
|
||||
Post post = getItem(position);
|
||||
if (post != null) {
|
||||
mActivity.copyLink(post.getPermalink());
|
||||
String link = (mShareLinkOnLocalInstance) ? retrofit.getBaseURL() + "/post/" + post.getId() : post.getPermalink();
|
||||
mActivity.copyLink(link);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -4118,7 +4124,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
||||
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType()));
|
||||
}
|
||||
|
||||
VoteThing.votePost(mActivity, retrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
||||
VoteThing.votePost(mActivity, retrofit.getRetrofit(), mAccessToken, new VoteThing.VoteThingListener() {
|
||||
@Override
|
||||
public void onVoteThingSuccess(int position1) {
|
||||
int currentPosition = getBindingAdapterPosition();
|
||||
@@ -4224,7 +4230,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
||||
}
|
||||
}
|
||||
|
||||
VoteThing.votePost(mActivity, retrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
||||
VoteThing.votePost(mActivity, retrofit.getRetrofit(), mAccessToken, new VoteThing.VoteThingListener() {
|
||||
@Override
|
||||
public void onVoteThingSuccess(int position1) {
|
||||
int currentPosition = getBindingAdapterPosition();
|
||||
@@ -4232,7 +4238,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
||||
post.setVoteType(-1);
|
||||
if (currentPosition == position) {
|
||||
downvoteButton.setColorFilter(mDownvotedColor, android.graphics.PorterDuff.Mode.SRC_IN);
|
||||
if(mSeparateUpandDownVotes) {
|
||||
if (mSeparateUpandDownVotes) {
|
||||
downvoteTextView.setTextColor(mDownvotedColor);
|
||||
} else {
|
||||
scoreTextView.setTextColor(mDownvotedColor);
|
||||
@@ -4297,7 +4303,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
||||
SavePost postSave = new SavePost();
|
||||
if (post.isSaved()) {
|
||||
saveButton.setImageResource(R.drawable.ic_bookmark_border_grey_24dp);
|
||||
postSave.unsaveThing(retrofit, mAccessToken, post.getId(),
|
||||
postSave.unsaveThing(retrofit.getRetrofit(), mAccessToken, post.getId(),
|
||||
new SaveThing.SaveThingListener() {
|
||||
@Override
|
||||
public void success() {
|
||||
@@ -4321,7 +4327,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
||||
});
|
||||
} else {
|
||||
saveButton.setImageResource(R.drawable.ic_bookmark_grey_24dp);
|
||||
postSave.saveThing(retrofit, mAccessToken, post.getId(),
|
||||
postSave.saveThing(retrofit.getRetrofit(), mAccessToken, post.getId(),
|
||||
new SaveThing.SaveThingListener() {
|
||||
@Override
|
||||
public void success() {
|
||||
@@ -4365,7 +4371,8 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
||||
}
|
||||
Post post = getItem(position);
|
||||
if (post != null) {
|
||||
mActivity.copyLink(post.getPermalink());
|
||||
String link = (mShareLinkOnLocalInstance) ? retrofit.getBaseURL() + "/post/" + post.getId() : post.getPermalink();
|
||||
mActivity.copyLink(link);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
@@ -141,7 +141,8 @@ public class SubredditListingRecyclerViewAdapter extends PagedListAdapter<Subred
|
||||
.into(((DataViewHolder) holder).iconGifImageView);
|
||||
}
|
||||
|
||||
((DataViewHolder) holder).subredditNameTextView.setText(subredditData.getName());
|
||||
((DataViewHolder) holder).subredditNameTextView.setText(subredditData.getTitle());
|
||||
((DataViewHolder) holder).communityInstanceTextView.setText('@' + LemmyUtils.actorID2FullName(subredditData.getActorId()).split("@")[1]);
|
||||
((DataViewHolder) holder).subscriberCountTextView.setText(activity.getString(R.string.subscribers_number_detail, subredditData.getNSubscribers()));
|
||||
|
||||
if (!isMultiSelection) {
|
||||
@@ -262,6 +263,9 @@ public class SubredditListingRecyclerViewAdapter extends PagedListAdapter<Subred
|
||||
GifImageView iconGifImageView;
|
||||
@BindView(R.id.subreddit_name_text_view_item_subreddit_listing)
|
||||
TextView subredditNameTextView;
|
||||
|
||||
@BindView(R.id.community_instance_text_view_item_subreddit_listing)
|
||||
TextView communityInstanceTextView;
|
||||
@BindView(R.id.subscriber_count_text_view_item_subreddit_listing)
|
||||
TextView subscriberCountTextView;
|
||||
@BindView(R.id.subscribe_image_view_item_subreddit_listing)
|
||||
@@ -273,6 +277,7 @@ public class SubredditListingRecyclerViewAdapter extends PagedListAdapter<Subred
|
||||
super(itemView);
|
||||
ButterKnife.bind(this, itemView);
|
||||
subredditNameTextView.setTextColor(primaryTextColor);
|
||||
communityInstanceTextView.setTextColor(CustomThemeWrapper.darkenColor(primaryTextColor, 0.7f));
|
||||
subscriberCountTextView.setTextColor(secondaryTextColor);
|
||||
subscribeButton.setColorFilter(unsubscribed, android.graphics.PorterDuff.Mode.SRC_IN);
|
||||
if (isMultiSelection) {
|
||||
|
||||
@@ -84,12 +84,10 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
|
||||
if (mFavoriteSubscribedSubredditData != null && mFavoriteSubscribedSubredditData.size() > 0) {
|
||||
if (itemClickListener != null && !hasClearSelectionRow) {
|
||||
if (position == 0) {
|
||||
return VIEW_TYPE_SUBREDDIT;
|
||||
} else if (position == 1) {
|
||||
return VIEW_TYPE_FAVORITE_SUBREDDIT_DIVIDER;
|
||||
} else if (position == mFavoriteSubscribedSubredditData.size() + 2) {
|
||||
} else if (position == mFavoriteSubscribedSubredditData.size() + 1) {
|
||||
return VIEW_TYPE_SUBREDDIT_DIVIDER;
|
||||
} else if (position <= mFavoriteSubscribedSubredditData.size() + 1) {
|
||||
} else if (position <= mFavoriteSubscribedSubredditData.size()) {
|
||||
return VIEW_TYPE_FAVORITE_SUBREDDIT;
|
||||
} else {
|
||||
return VIEW_TYPE_SUBREDDIT;
|
||||
@@ -98,12 +96,10 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
|
||||
if (position == 0) {
|
||||
return VIEW_TYPE_SUBREDDIT;
|
||||
} else if (position == 1) {
|
||||
return VIEW_TYPE_SUBREDDIT;
|
||||
} else if (position == 2) {
|
||||
return VIEW_TYPE_FAVORITE_SUBREDDIT_DIVIDER;
|
||||
} else if (position == mFavoriteSubscribedSubredditData.size() + 3) {
|
||||
} else if (position == mFavoriteSubscribedSubredditData.size() + 2) {
|
||||
return VIEW_TYPE_SUBREDDIT_DIVIDER;
|
||||
} else if (position <= mFavoriteSubscribedSubredditData.size() + 2) {
|
||||
} else if (position < mFavoriteSubscribedSubredditData.size() + 2) {
|
||||
return VIEW_TYPE_FAVORITE_SUBREDDIT;
|
||||
} else {
|
||||
return VIEW_TYPE_SUBREDDIT;
|
||||
@@ -155,8 +151,22 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
|
||||
viewHolder.itemView.setOnClickListener(view -> itemClickListener.onClick(null));
|
||||
return;
|
||||
} else {
|
||||
int offset = hasClearSelectionRow ? 1 : 0;
|
||||
SubscribedSubredditData communityData = mSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset);
|
||||
int offset;
|
||||
if (itemClickListener != null) {
|
||||
if (hasClearSelectionRow) {
|
||||
offset = (mFavoriteSubscribedSubredditData != null && mFavoriteSubscribedSubredditData.size() > 0) ?
|
||||
mFavoriteSubscribedSubredditData.size() + 3 : 1;
|
||||
} else {
|
||||
offset = (mFavoriteSubscribedSubredditData != null && mFavoriteSubscribedSubredditData.size() > 0) ?
|
||||
mFavoriteSubscribedSubredditData.size() + 2 : 0;
|
||||
}
|
||||
} else {
|
||||
offset = (mFavoriteSubscribedSubredditData != null && mFavoriteSubscribedSubredditData.size() > 0) ?
|
||||
mFavoriteSubscribedSubredditData.size() + 2 : 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
name = mSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).getName();
|
||||
fullname = mSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).getQualified_name();
|
||||
iconUrl = mSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).getIconUrl();
|
||||
@@ -181,6 +191,7 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
|
||||
});
|
||||
|
||||
if (itemClickListener != null) {
|
||||
SubscribedSubredditData communityData = mSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset);
|
||||
viewHolder.itemView.setOnClickListener(view -> itemClickListener.onClick(communityData));
|
||||
}
|
||||
}
|
||||
@@ -209,19 +220,23 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
|
||||
.into(((SubredditViewHolder) viewHolder).iconGifImageView);
|
||||
}
|
||||
((SubredditViewHolder) viewHolder).subredditNameTextView.setText(name);
|
||||
if (fullname.contains("@")) {
|
||||
((SubredditViewHolder) viewHolder).communityInstanceTextView.setText(fullname.substring(fullname.indexOf("@")));
|
||||
}
|
||||
} else if (viewHolder instanceof FavoriteSubredditViewHolder) {
|
||||
int offset;
|
||||
if (itemClickListener != null) {
|
||||
if (hasClearSelectionRow) {
|
||||
offset = 3;
|
||||
} else {
|
||||
offset = 2;
|
||||
} else {
|
||||
offset = 1;
|
||||
}
|
||||
} else {
|
||||
offset = 1;
|
||||
}
|
||||
SubscribedSubredditData communityData = mFavoriteSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset);
|
||||
String name = mFavoriteSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).getName();
|
||||
String fullname = mFavoriteSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).getQualified_name();
|
||||
String iconUrl = mFavoriteSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).getIconUrl();
|
||||
|
||||
if (mFavoriteSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).isFavorite()) {
|
||||
@@ -267,15 +282,26 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
|
||||
.into(((FavoriteSubredditViewHolder) viewHolder).iconGifImageView);
|
||||
}
|
||||
((FavoriteSubredditViewHolder) viewHolder).subredditNameTextView.setText(name);
|
||||
if (fullname.contains("@")) {
|
||||
((FavoriteSubredditViewHolder) viewHolder).communityInstanceTextView.setText(fullname.substring(fullname.indexOf("@")));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
if (mSubscribedSubredditData != null) {
|
||||
if (mFavoriteSubscribedSubredditData != null && mFavoriteSubscribedSubredditData.size() > 0) {
|
||||
if (itemClickListener != null) {
|
||||
return mSubscribedSubredditData.size() > 0 ?
|
||||
mFavoriteSubscribedSubredditData.size() + mSubscribedSubredditData.size() + ((hasClearSelectionRow) ? 3 : 2) : 0;
|
||||
}
|
||||
return mSubscribedSubredditData.size() > 0 ?
|
||||
mFavoriteSubscribedSubredditData.size() + mSubscribedSubredditData.size() + 2 : 0;
|
||||
}
|
||||
|
||||
if (itemClickListener != null) {
|
||||
return mSubscribedSubredditData.size() > 0 ? mSubscribedSubredditData.size() + ((hasClearSelectionRow) ? 1 : 0) : 0;
|
||||
return (hasClearSelectionRow) ? mSubscribedSubredditData.size() + 1 : mSubscribedSubredditData.size();
|
||||
}
|
||||
|
||||
return mSubscribedSubredditData.size();
|
||||
@@ -283,6 +309,7 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
|
||||
if(holder instanceof SubredditViewHolder) {
|
||||
@@ -324,10 +351,10 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
|
||||
if (itemClickListener != null) {
|
||||
if (hasClearSelectionRow) {
|
||||
offset = (mFavoriteSubscribedSubredditData != null && mFavoriteSubscribedSubredditData.size() > 0) ?
|
||||
mFavoriteSubscribedSubredditData.size() + 4 : 0;
|
||||
mFavoriteSubscribedSubredditData.size() + 3 : 0;
|
||||
} else {
|
||||
offset = (mFavoriteSubscribedSubredditData != null && mFavoriteSubscribedSubredditData.size() > 0) ?
|
||||
mFavoriteSubscribedSubredditData.size() + 3 : 0;
|
||||
mFavoriteSubscribedSubredditData.size() + 2 : 0;
|
||||
}
|
||||
} else {
|
||||
offset = (mFavoriteSubscribedSubredditData != null && mFavoriteSubscribedSubredditData.size() > 0) ?
|
||||
@@ -340,9 +367,9 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
|
||||
int offset;
|
||||
if (itemClickListener != null) {
|
||||
if (hasClearSelectionRow) {
|
||||
offset = 3;
|
||||
} else {
|
||||
offset = 2;
|
||||
} else {
|
||||
offset = 1;
|
||||
}
|
||||
} else {
|
||||
offset = 1;
|
||||
@@ -362,6 +389,9 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
|
||||
GifImageView iconGifImageView;
|
||||
@BindView(R.id.thing_name_text_view_item_subscribed_thing)
|
||||
TextView subredditNameTextView;
|
||||
|
||||
@BindView(R.id.thing_instance_text_view_item_subscribed_thing)
|
||||
TextView communityInstanceTextView;
|
||||
@BindView(R.id.favorite_image_view_item_subscribed_thing)
|
||||
ImageView favoriteImageView;
|
||||
|
||||
@@ -370,8 +400,10 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
|
||||
ButterKnife.bind(this, itemView);
|
||||
if (mActivity.typeface != null) {
|
||||
subredditNameTextView.setTypeface(mActivity.typeface);
|
||||
communityInstanceTextView.setTypeface(mActivity.typeface);
|
||||
}
|
||||
subredditNameTextView.setTextColor(primaryTextColor);
|
||||
communityInstanceTextView.setTextColor(CustomThemeWrapper.darkenColor(primaryTextColor, 0.7f));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -380,6 +412,9 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
|
||||
GifImageView iconGifImageView;
|
||||
@BindView(R.id.thing_name_text_view_item_subscribed_thing)
|
||||
TextView subredditNameTextView;
|
||||
|
||||
@BindView(R.id.thing_instance_text_view_item_subscribed_thing)
|
||||
TextView communityInstanceTextView;
|
||||
@BindView(R.id.favorite_image_view_item_subscribed_thing)
|
||||
ImageView favoriteImageView;
|
||||
|
||||
@@ -389,8 +424,10 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
|
||||
ButterKnife.bind(this, itemView);
|
||||
if (mActivity.typeface != null) {
|
||||
subredditNameTextView.setTypeface(mActivity.typeface);
|
||||
communityInstanceTextView.setTypeface(mActivity.typeface);
|
||||
}
|
||||
subredditNameTextView.setTextColor(primaryTextColor);
|
||||
communityInstanceTextView.setTextColor(CustomThemeWrapper.darkenColor(primaryTextColor, 0.7f));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -136,7 +136,9 @@ public class UserListingRecyclerViewAdapter extends PagedListAdapter<UserData, R
|
||||
.into(((DataViewHolder) holder).iconGifImageView);
|
||||
}
|
||||
|
||||
((DataViewHolder) holder).userNameTextView.setText(userData.getName());
|
||||
((DataViewHolder) holder).userNameTextView.setText(userData.getTitle().equals("") ? userData.getName() : userData.getTitle());
|
||||
String qualifiedName = LemmyUtils.actorID2FullName(userData.getActorId());
|
||||
((DataViewHolder) holder).userInstanceTextView.setText(qualifiedName.substring(qualifiedName.indexOf('@')));
|
||||
|
||||
if (!isMultiSelection) {
|
||||
CheckIsFollowingUser.checkIsFollowingUser(executor, new Handler(), redditDataRoomDatabase,
|
||||
@@ -237,6 +239,9 @@ public class UserListingRecyclerViewAdapter extends PagedListAdapter<UserData, R
|
||||
GifImageView iconGifImageView;
|
||||
@BindView(R.id.user_name_text_view_item_user_listing)
|
||||
TextView userNameTextView;
|
||||
|
||||
@BindView(R.id.user_instance_text_view_item_user_listing)
|
||||
TextView userInstanceTextView;
|
||||
@BindView(R.id.subscribe_image_view_item_user_listing)
|
||||
ImageView subscribeButton;
|
||||
@BindView(R.id.checkbox__item_user_listing)
|
||||
@@ -246,6 +251,7 @@ public class UserListingRecyclerViewAdapter extends PagedListAdapter<UserData, R
|
||||
super(itemView);
|
||||
ButterKnife.bind(this, itemView);
|
||||
userNameTextView.setTextColor(primaryTextColor);
|
||||
userInstanceTextView.setTextColor(CustomThemeWrapper.darkenColor(primaryTextColor, 0.7f));
|
||||
subscribeButton.setColorFilter(unsubscribedColor, android.graphics.PorterDuff.Mode.SRC_IN);
|
||||
|
||||
if (activity.typeface != null) {
|
||||
|
||||
@@ -101,7 +101,16 @@ public interface LemmyAPI {
|
||||
Call<String> postDelete(@Body DeletePostDTO params);
|
||||
|
||||
@GET("api/v3/user")
|
||||
ListenableFuture<Response<String>> getUserPosts(
|
||||
ListenableFuture<Response<String>> getUserPostsListenableFuture(
|
||||
@Query("username") String username,
|
||||
@Query("sort") String sort,
|
||||
@Query("page") Integer page,
|
||||
@Query("limit") Integer limit,
|
||||
@Query("saved_only") Boolean saved_only,
|
||||
@Query("auth") String access_token);
|
||||
|
||||
@GET("api/v3/user")
|
||||
Call<String> getUserPosts(
|
||||
@Query("username") String username,
|
||||
@Query("sort") String sort,
|
||||
@Query("page") Integer page,
|
||||
@@ -129,7 +138,19 @@ public interface LemmyAPI {
|
||||
);
|
||||
|
||||
@GET("api/v3/post/list")
|
||||
ListenableFuture<Response<String>> getPosts(
|
||||
ListenableFuture<Response<String>> getPostsListenableFuture(
|
||||
@Query("type_") String type_,
|
||||
@Query("sort") String sort,
|
||||
@Query("page") Integer page,
|
||||
@Query("limit") Integer limit,
|
||||
@Query("community_id") Integer community_id,
|
||||
@Query("community_name") String community_name,
|
||||
@Query("saved_only") Boolean saved_only,
|
||||
@Query("auth") String auth
|
||||
);
|
||||
|
||||
@GET("api/v3/post/list")
|
||||
Call<String> getPosts(
|
||||
@Query("type_") String type_,
|
||||
@Query("sort") String sort,
|
||||
@Query("page") Integer page,
|
||||
|
||||
@@ -6,14 +6,16 @@ import retrofit2.Call;
|
||||
import retrofit2.http.FieldMap;
|
||||
import retrofit2.http.FormUrlEncoded;
|
||||
import retrofit2.http.GET;
|
||||
import retrofit2.http.HeaderMap;
|
||||
import retrofit2.http.POST;
|
||||
import retrofit2.http.Path;
|
||||
import retrofit2.http.Query;
|
||||
|
||||
public interface RedgifsAPI {
|
||||
@GET("/v2/gifs/{id}")
|
||||
Call<String> getRedgifsData(@HeaderMap Map<String, String> headers, @Path("id") String id, @Query("user-agent") String userAgent);
|
||||
Call<String> getRedgifsData(@Path("id") String id);
|
||||
|
||||
@GET("/v2/gifs")
|
||||
Call<String> getRedgifsMultipleData(@Query("ids") String ids);
|
||||
|
||||
@FormUrlEncoded
|
||||
@POST("/v2/oauth/client")
|
||||
|
||||
@@ -49,6 +49,7 @@ public class InsertSubscribedThings {
|
||||
|
||||
for (SubscribedSubredditData s : subscribedSubredditDataList) {
|
||||
if (existingSubscribedSubredditDataList.contains(s)) {
|
||||
subscribedSubredditDao.updateSubscribedSubreddit(s.getQualified_name(), s.getName(), s.getIconUrl(), accountName);
|
||||
continue;
|
||||
}
|
||||
subscribedSubredditDao.insert(s);
|
||||
@@ -118,25 +119,20 @@ public class InsertSubscribedThings {
|
||||
(List<SubscribedSubredditData> newSubscribedSubreddits,
|
||||
List<SubscribedSubredditData> oldSubscribedSubreddits,
|
||||
List<String> unsubscribedSubredditNames) {
|
||||
int newIndex = 0;
|
||||
for (int oldIndex = 0; oldIndex < oldSubscribedSubreddits.size(); oldIndex++) {
|
||||
if (newIndex >= newSubscribedSubreddits.size()) {
|
||||
for (; oldIndex < oldSubscribedSubreddits.size(); oldIndex++) {
|
||||
unsubscribedSubredditNames.add(oldSubscribedSubreddits.get(oldIndex).getQualified_name());
|
||||
}
|
||||
return;
|
||||
}
|
||||
List<String> oldSubredditNames = new ArrayList<>();
|
||||
for (SubscribedSubredditData subredditData : oldSubscribedSubreddits) {
|
||||
oldSubredditNames.add(subredditData.getQualified_name());
|
||||
}
|
||||
|
||||
SubscribedSubredditData old = oldSubscribedSubreddits.get(oldIndex);
|
||||
for (; newIndex < newSubscribedSubreddits.size(); newIndex++) {
|
||||
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;
|
||||
}
|
||||
List<String> newSubredditNames = new ArrayList<>();
|
||||
for (SubscribedSubredditData subredditData : newSubscribedSubreddits) {
|
||||
newSubredditNames.add(subredditData.getQualified_name());
|
||||
}
|
||||
|
||||
|
||||
for (String subredditName : oldSubredditNames) {
|
||||
if (!newSubredditNames.contains(subredditName)) {
|
||||
unsubscribedSubredditNames.add(subredditName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ import retrofit2.Retrofit;
|
||||
public class LoadSubredditIcon {
|
||||
|
||||
public static void loadSubredditIcon(Executor executor, Handler handler, RedditDataRoomDatabase redditDataRoomDatabase,
|
||||
String subredditName, String accessToken, Retrofit oauthRetrofit, Retrofit retrofit,
|
||||
String subredditName, String accessToken, Retrofit retrofit,
|
||||
LoadSubredditIconAsyncTaskListener loadSubredditIconAsyncTaskListener) {
|
||||
executor.execute(() -> {
|
||||
SubredditDao subredditDao = redditDataRoomDatabase.subredditDao();
|
||||
|
||||
@@ -2,6 +2,7 @@ package eu.toldi.infinityforlemmy.asynctasks;
|
||||
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Handler;
|
||||
import android.util.Log;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
@@ -25,18 +26,31 @@ public class SwitchAccount {
|
||||
.putString(SharedPreferencesUtils.ACCESS_TOKEN, account.getAccessToken())
|
||||
.putString(SharedPreferencesUtils.ACCOUNT_NAME, account.getDisplay_name())
|
||||
.putString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, account.getAccountName())
|
||||
.putString(SharedPreferencesUtils.ACCOUNT_INSTANCE,account.getInstance_url())
|
||||
.putString(SharedPreferencesUtils.ACCOUNT_INSTANCE, account.getInstance_url())
|
||||
.putBoolean(SharedPreferencesUtils.BEARER_TOKEN_AUTH, false)
|
||||
.putString(SharedPreferencesUtils.ACCOUNT_IMAGE_URL, account.getProfileImageUrl()).apply();
|
||||
retrofitHolder.setBaseURL(account.getInstance_url());
|
||||
retrofitHolder.setAccessToken(null);
|
||||
FetchSiteInfo.fetchSiteInfo(retrofitHolder.getRetrofit(), account.getAccessToken(), new FetchSiteInfo.FetchSiteInfoListener() {
|
||||
@Override
|
||||
public void onFetchSiteInfoSuccess(SiteInfo siteInfo) {
|
||||
boolean canDownvote = siteInfo.isEnable_downvotes();
|
||||
currentAccountSharedPreferences.edit().putBoolean(SharedPreferencesUtils.CAN_DOWNVOTE, canDownvote).apply();
|
||||
String[] version = siteInfo.getVersion().split("\\.");
|
||||
if (version.length > 0) {
|
||||
Log.d("SwitchAccount", "Lemmy Version: " + version[0] + "." + version[1]);
|
||||
int majorVersion = Integer.parseInt(version[0]);
|
||||
int minorVersion = Integer.parseInt(version[1]);
|
||||
if (majorVersion > 0 || (majorVersion == 0 && minorVersion >= 19)) {
|
||||
retrofitHolder.setAccessToken(account.getAccessToken());
|
||||
currentAccountSharedPreferences.edit().putBoolean(SharedPreferencesUtils.BEARER_TOKEN_AUTH, true).apply();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFetchSiteInfoFailed() {
|
||||
Log.e("SwitchAccount", "Failed to fetch site info");
|
||||
currentAccountSharedPreferences.edit().putBoolean(SharedPreferencesUtils.CAN_DOWNVOTE, true).apply();
|
||||
}
|
||||
});
|
||||
|
||||
@@ -4,6 +4,7 @@ package eu.toldi.infinityforlemmy.bottomsheetfragments;
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.res.Configuration;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
@@ -23,6 +24,7 @@ import androidx.fragment.app.Fragment;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
@@ -37,6 +39,7 @@ import eu.toldi.infinityforlemmy.comment.Comment;
|
||||
import eu.toldi.infinityforlemmy.comment.LemmyCommentAPI;
|
||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||
import eu.toldi.infinityforlemmy.customviews.LandscapeExpandedRoundedBottomSheetDialogFragment;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||
|
||||
|
||||
@@ -72,8 +75,14 @@ public class CommentMoreBottomSheetFragment extends LandscapeExpandedRoundedBott
|
||||
@Inject
|
||||
CustomThemeWrapper mCustomThemeWrapper;
|
||||
|
||||
@Inject
|
||||
@Named("default")
|
||||
SharedPreferences mSharedPreferences;
|
||||
|
||||
private BaseActivity activity;
|
||||
|
||||
private boolean mShareLinksOnLocalInstance;
|
||||
|
||||
public CommentMoreBottomSheetFragment() {
|
||||
// Required empty public constructor
|
||||
}
|
||||
@@ -103,6 +112,7 @@ public class CommentMoreBottomSheetFragment extends LandscapeExpandedRoundedBott
|
||||
String accessToken = bundle.getString(EXTRA_ACCESS_TOKEN);
|
||||
boolean editAndDeleteAvailable = bundle.getBoolean(EXTRA_EDIT_AND_DELETE_AVAILABLE, false);
|
||||
boolean showReplyAndSaveOption = bundle.getBoolean(EXTRA_SHOW_REPLY_AND_SAVE_OPTION, false);
|
||||
mShareLinksOnLocalInstance = mSharedPreferences.getBoolean(SharedPreferencesUtils.SHARE_LINK_ON_LOCAL_INSTANCE, false);
|
||||
|
||||
if (accessToken != null && !accessToken.equals("")) {
|
||||
|
||||
@@ -167,13 +177,13 @@ public class CommentMoreBottomSheetFragment extends LandscapeExpandedRoundedBott
|
||||
dismiss();
|
||||
});
|
||||
}
|
||||
|
||||
String link = (mShareLinksOnLocalInstance) ? lemmyCommentAPI.getRetrofitHolder().getBaseURL() + "/comment/" + comment.getId() : comment.getPermalink();
|
||||
shareTextView.setOnClickListener(view -> {
|
||||
dismiss();
|
||||
try {
|
||||
Intent intent = new Intent(Intent.ACTION_SEND);
|
||||
intent.setType("text/plain");
|
||||
intent.putExtra(Intent.EXTRA_TEXT, comment.getPermalink());
|
||||
intent.putExtra(Intent.EXTRA_TEXT, link);
|
||||
activity.startActivity(Intent.createChooser(intent, getString(R.string.share)));
|
||||
} catch (ActivityNotFoundException e) {
|
||||
Toast.makeText(activity, R.string.no_activity_found_for_share, Toast.LENGTH_SHORT).show();
|
||||
@@ -182,7 +192,7 @@ public class CommentMoreBottomSheetFragment extends LandscapeExpandedRoundedBott
|
||||
|
||||
shareTextView.setOnLongClickListener(view -> {
|
||||
dismiss();
|
||||
activity.copyLink(comment.getPermalink());
|
||||
activity.copyLink(link);
|
||||
return true;
|
||||
});
|
||||
|
||||
@@ -201,6 +211,12 @@ public class CommentMoreBottomSheetFragment extends LandscapeExpandedRoundedBott
|
||||
LayoutInflater dialog_inflater = LayoutInflater.from(activity);
|
||||
View dialog_view = dialog_inflater.inflate(R.layout.dialog_report, null);
|
||||
EditText reasonEditText = dialog_view.findViewById(R.id.reasonEditText);
|
||||
reasonEditText.setTextColor(mCustomThemeWrapper.getPrimaryTextColor());
|
||||
reasonEditText.setHintTextColor(mCustomThemeWrapper.getSecondaryTextColor());
|
||||
if (activity.typeface != null) {
|
||||
reasonEditText.setTypeface(activity.typeface);
|
||||
}
|
||||
reasonEditText.setHighlightColor(mCustomThemeWrapper.getColorAccent());
|
||||
|
||||
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(activity)
|
||||
.setTitle(R.string.report_post)
|
||||
|
||||
@@ -124,6 +124,7 @@ import eu.toldi.infinityforlemmy.events.ShowThumbnailOnTheRightInCompactLayoutEv
|
||||
import eu.toldi.infinityforlemmy.post.HistoryPostPagingSource;
|
||||
import eu.toldi.infinityforlemmy.post.HistoryPostViewModel;
|
||||
import eu.toldi.infinityforlemmy.post.Post;
|
||||
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher;
|
||||
import eu.toldi.infinityforlemmy.postfilter.PostFilter;
|
||||
import eu.toldi.infinityforlemmy.postfilter.PostFilterUsage;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
@@ -178,9 +179,6 @@ public class HistoryPostFragment extends Fragment implements FragmentCommunicato
|
||||
@Named("default")
|
||||
SharedPreferences mSharedPreferences;
|
||||
@Inject
|
||||
@Named("current_account")
|
||||
SharedPreferences mCurrentAccountSharedPreferences;
|
||||
@Inject
|
||||
@Named("post_layout")
|
||||
SharedPreferences mPostLayoutSharedPreferences;
|
||||
@Inject
|
||||
@@ -198,6 +196,8 @@ public class HistoryPostFragment extends Fragment implements FragmentCommunicato
|
||||
ExoCreator mExoCreator;
|
||||
@Inject
|
||||
Executor mExecutor;
|
||||
@Inject
|
||||
PostEnricher postEnricher;
|
||||
private RequestManager mGlide;
|
||||
private BaseActivity activity;
|
||||
private LinearLayoutManagerBugFixed mLinearLayoutManager;
|
||||
@@ -383,7 +383,7 @@ public class HistoryPostFragment extends Fragment implements FragmentCommunicato
|
||||
mAdapter = new HistoryPostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit.getRetrofit(), mGfycatRetrofit,
|
||||
mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
|
||||
accessToken, accountName, postType, postLayout, true,
|
||||
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences,
|
||||
mSharedPreferences, mNsfwAndSpoilerSharedPreferences,
|
||||
mExoCreator, new HistoryPostRecyclerViewAdapter.Callback() {
|
||||
@Override
|
||||
public void typeChipClicked(int filter) {
|
||||
@@ -654,15 +654,10 @@ public class HistoryPostFragment extends Fragment implements FragmentCommunicato
|
||||
}
|
||||
|
||||
private void initializeAndBindPostViewModel(String accessToken) {
|
||||
if (postType == HistoryPostPagingSource.TYPE_READ_POSTS) {
|
||||
mHistoryPostViewModel = new ViewModelProvider(HistoryPostFragment.this, new HistoryPostViewModel.Factory(mExecutor,
|
||||
accessToken == null ? mRetrofit.getRetrofit() : mOauthRetrofit, mRedditDataRoomDatabase, accessToken,
|
||||
accountName, mSharedPreferences, HistoryPostPagingSource.TYPE_READ_POSTS, postFilter)).get(HistoryPostViewModel.class);
|
||||
} else {
|
||||
mHistoryPostViewModel = new ViewModelProvider(HistoryPostFragment.this, new HistoryPostViewModel.Factory(mExecutor,
|
||||
accessToken == null ? mRetrofit.getRetrofit() : mOauthRetrofit, mRedditDataRoomDatabase, accessToken,
|
||||
accountName, mSharedPreferences, HistoryPostPagingSource.TYPE_READ_POSTS, postFilter)).get(HistoryPostViewModel.class);
|
||||
}
|
||||
mHistoryPostViewModel = new ViewModelProvider(HistoryPostFragment.this, new HistoryPostViewModel.Factory(mExecutor,
|
||||
accessToken == null ? mRetrofit.getRetrofit() : mOauthRetrofit, mRedditDataRoomDatabase, accessToken,
|
||||
accountName, mSharedPreferences, HistoryPostPagingSource.TYPE_READ_POSTS, postFilter, postEnricher))
|
||||
.get(HistoryPostViewModel.class);
|
||||
|
||||
bindPostViewModel();
|
||||
}
|
||||
@@ -933,7 +928,7 @@ public class HistoryPostFragment extends Fragment implements FragmentCommunicato
|
||||
} else {
|
||||
if (isSubreddit) {
|
||||
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase,
|
||||
subredditOrUserName, accessToken, mOauthRetrofit, mRetrofit.getRetrofit(),
|
||||
subredditOrUserName, accessToken, mRetrofit.getRetrofit(),
|
||||
iconImageUrl -> {
|
||||
subredditOrUserIcons.put(subredditOrUserName, iconImageUrl);
|
||||
loadIconListener.loadIconSuccess(subredditOrUserName, iconImageUrl);
|
||||
@@ -1447,4 +1442,4 @@ public class HistoryPostFragment extends Fragment implements FragmentCommunicato
|
||||
public interface LoadIconListener {
|
||||
void loadIconSuccess(String subredditOrUserName, String iconUrl);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -135,6 +135,7 @@ import eu.toldi.infinityforlemmy.events.ShowThumbnailOnTheRightInCompactLayoutEv
|
||||
import eu.toldi.infinityforlemmy.post.Post;
|
||||
import eu.toldi.infinityforlemmy.post.PostPagingSource;
|
||||
import eu.toldi.infinityforlemmy.post.PostViewModel;
|
||||
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher;
|
||||
import eu.toldi.infinityforlemmy.postfilter.PostFilter;
|
||||
import eu.toldi.infinityforlemmy.postfilter.PostFilterUsage;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
@@ -222,6 +223,8 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
|
||||
ExoCreator mExoCreator;
|
||||
@Inject
|
||||
Executor mExecutor;
|
||||
@Inject
|
||||
PostEnricher postEnricher;
|
||||
private RequestManager mGlide;
|
||||
private BaseActivity activity;
|
||||
private LinearLayoutManagerBugFixed mLinearLayoutManager;
|
||||
@@ -465,7 +468,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.getRetrofit(), mGfycatRetrofit,
|
||||
mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit, mGfycatRetrofit,
|
||||
mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
|
||||
accessToken, accountName, postType, postLayout, true,
|
||||
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
|
||||
@@ -533,16 +536,14 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
|
||||
sortTime = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TIME_SUBREDDIT_POST_BASE + subredditName,
|
||||
mSharedPreferences.getString(SharedPreferencesUtils.SUBREDDIT_DEFAULT_SORT_TIME, SortType.Time.ALL.name()));
|
||||
}
|
||||
|
||||
sortType = newSortType(sort, sortTime);
|
||||
|
||||
boolean displaySubredditName = subredditName != null && (subredditName.equals("local") || subredditName.equals("all"));
|
||||
postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_SUBREDDIT_POST_BASE + subredditName, defaultPostLayout);
|
||||
|
||||
if (sortTime != null) {
|
||||
sortType = new SortType(SortType.Type.fromValue(sortTime));
|
||||
} else {
|
||||
sortType = new SortType(SortType.Type.valueOf(sort));
|
||||
}
|
||||
|
||||
mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit.getRetrofit(), mGfycatRetrofit,
|
||||
mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit, mGfycatRetrofit,
|
||||
mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
|
||||
accessToken, accountName, postType, postLayout, displaySubredditName,
|
||||
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
|
||||
@@ -604,16 +605,14 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
|
||||
sortTime = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TIME_MULTI_REDDIT_POST_BASE + multiRedditPath,
|
||||
SortType.Time.ALL.name());
|
||||
}
|
||||
|
||||
sortType = newSortType(sort, sortTime);
|
||||
|
||||
postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_MULTI_REDDIT_POST_BASE + multiRedditPath,
|
||||
defaultPostLayout);
|
||||
|
||||
if (sortTime != null) {
|
||||
sortType = new SortType(SortType.Type.valueOf(sort), SortType.Time.valueOf(sortTime));
|
||||
} else {
|
||||
sortType = new SortType(SortType.Type.valueOf(sort));
|
||||
}
|
||||
|
||||
mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit.getRetrofit(), mGfycatRetrofit,
|
||||
mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit, mGfycatRetrofit,
|
||||
mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
|
||||
accessToken, accountName, postType, postLayout, true,
|
||||
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
|
||||
@@ -669,16 +668,17 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
|
||||
|
||||
String sort = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TYPE_USER_POST_BASE + username,
|
||||
mSharedPreferences.getString(SharedPreferencesUtils.USER_DEFAULT_SORT_TYPE, SortType.Type.NEW.name()));
|
||||
String sortTime = null;
|
||||
if (sort.equalsIgnoreCase(SortType.Type.TOP.value)) {
|
||||
String sortTime = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TIME_USER_POST_BASE + username,
|
||||
sortTime = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TIME_USER_POST_BASE + username,
|
||||
mSharedPreferences.getString(SharedPreferencesUtils.USER_DEFAULT_SORT_TIME, SortType.Time.ALL.name()));
|
||||
sortType = new SortType(SortType.Type.fromValue(sortTime));
|
||||
} else {
|
||||
sortType = new SortType(SortType.Type.valueOf(sort));
|
||||
}
|
||||
|
||||
sortType = newSortType(sort, sortTime);
|
||||
|
||||
postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_USER_POST_BASE + username, defaultPostLayout);
|
||||
|
||||
mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit.getRetrofit(), mGfycatRetrofit,
|
||||
mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit, mGfycatRetrofit,
|
||||
mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
|
||||
accessToken, accountName, postType, postLayout, true,
|
||||
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
|
||||
@@ -732,16 +732,15 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
|
||||
subredditName = getArguments().getString(EXTRA_NAME);
|
||||
|
||||
String sort = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TYPE_SUBREDDIT_POST_BASE + "-", SortType.Type.HOT.name());
|
||||
String sortTime = null;
|
||||
if (sort.equals(SortType.Type.TOP.name())) {
|
||||
String sortTime = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TIME_SUBREDDIT_POST_BASE + "-", SortType.Time.ALL.name());
|
||||
sortType = new SortType(SortType.Type.valueOf(sort), SortType.Time.valueOf(sortTime));
|
||||
} else {
|
||||
sortType = new SortType(SortType.Type.valueOf(sort));
|
||||
sortTime = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TIME_SUBREDDIT_POST_BASE + "-", SortType.Time.ALL.name());
|
||||
}
|
||||
sortType = newSortType(sort, sortTime);
|
||||
|
||||
postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_FRONT_PAGE_POST, defaultPostLayout);
|
||||
|
||||
mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit.getRetrofit(), mGfycatRetrofit,
|
||||
mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit, mGfycatRetrofit,
|
||||
mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
|
||||
accessToken, accountName, postType, postLayout, true,
|
||||
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
|
||||
@@ -792,16 +791,15 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
|
||||
nameOfUsage = multiRedditPath;
|
||||
|
||||
String sort = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TYPE_MULTI_REDDIT_POST_BASE + multiRedditPath, SortType.Type.HOT.name());
|
||||
String sortTime = null;
|
||||
if (sort.equals(SortType.Type.TOP.name())) {
|
||||
String sortTime = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TIME_MULTI_REDDIT_POST_BASE + multiRedditPath, SortType.Time.ALL.name());
|
||||
sortType = new SortType(SortType.Type.valueOf(sort), SortType.Time.valueOf(sortTime));
|
||||
} else {
|
||||
sortType = new SortType(SortType.Type.valueOf(sort));
|
||||
sortTime = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TIME_MULTI_REDDIT_POST_BASE + multiRedditPath, SortType.Time.ALL.name());
|
||||
}
|
||||
sortType = newSortType(sort, sortTime);
|
||||
|
||||
postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_MULTI_REDDIT_POST_BASE + multiRedditPath, defaultPostLayout);
|
||||
|
||||
mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit.getRetrofit(), mGfycatRetrofit,
|
||||
mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit, mGfycatRetrofit,
|
||||
mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
|
||||
accessToken, accountName, postType, postLayout, true,
|
||||
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
|
||||
@@ -850,15 +848,14 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
|
||||
nameOfUsage = PostFilterUsage.NO_USAGE;
|
||||
subredditName = getArguments().getString(EXTRA_NAME);
|
||||
String sort = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TYPE_BEST_POST, SortType.Type.ACTIVE.name());
|
||||
String sortTime = null;
|
||||
if (sort.equals(SortType.Type.TOP.name())) {
|
||||
String sortTime = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TIME_BEST_POST, SortType.Time.ALL.name());
|
||||
sortType = new SortType(SortType.Type.valueOf(sort), SortType.Time.valueOf(sortTime));
|
||||
} else {
|
||||
sortType = new SortType(SortType.Type.valueOf(sort));
|
||||
sortTime = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TIME_BEST_POST, SortType.Time.ALL.name());
|
||||
}
|
||||
sortType = newSortType(sort, sortTime);
|
||||
postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_FRONT_PAGE_POST, defaultPostLayout);
|
||||
|
||||
mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit.getRetrofit(), mGfycatRetrofit,
|
||||
mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit, mGfycatRetrofit,
|
||||
mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
|
||||
accessToken, accountName, postType, postLayout, true,
|
||||
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
|
||||
@@ -1206,30 +1203,36 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
|
||||
mRetrofit, accessToken,
|
||||
accountName, mSharedPreferences,
|
||||
mPostFeedScrolledPositionSharedPreferences, mPostHistorySharedPreferences, subredditName,
|
||||
query, trendingSource, postType, sortType, postFilter, readPosts)).get(PostViewModel.class);
|
||||
query, trendingSource, postType, sortType, postFilter, readPosts, postEnricher))
|
||||
.get(PostViewModel.class);
|
||||
} else if (postType == PostPagingSource.TYPE_SUBREDDIT) {
|
||||
mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(mExecutor,
|
||||
mRetrofit, accessToken,
|
||||
accountName, mSharedPreferences, mPostFeedScrolledPositionSharedPreferences,
|
||||
mPostHistorySharedPreferences, subredditName, postType, sortType, postFilter, readPosts))
|
||||
mPostHistorySharedPreferences, subredditName, postType, sortType, postFilter, readPosts,
|
||||
postEnricher))
|
||||
.get(PostViewModel.class);
|
||||
} else if (postType == PostPagingSource.TYPE_MULTI_REDDIT) {
|
||||
mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(mExecutor,
|
||||
mRetrofit, accessToken,
|
||||
accountName, mSharedPreferences, mPostFeedScrolledPositionSharedPreferences,
|
||||
mPostHistorySharedPreferences, multiRedditPath, postType, sortType, postFilter, readPosts))
|
||||
mPostHistorySharedPreferences, multiRedditPath, postType, sortType, postFilter, readPosts,
|
||||
postEnricher))
|
||||
.get(PostViewModel.class);
|
||||
} else if (postType == PostPagingSource.TYPE_USER) {
|
||||
mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(mExecutor,
|
||||
mRetrofit, accessToken,
|
||||
accountName, mSharedPreferences, mPostFeedScrolledPositionSharedPreferences,
|
||||
mPostHistorySharedPreferences, username, postType, sortType, postFilter, where, readPosts))
|
||||
mPostHistorySharedPreferences, username, postType, sortType, postFilter, where, readPosts,
|
||||
postEnricher))
|
||||
.get(PostViewModel.class);
|
||||
} else {
|
||||
mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(mExecutor,
|
||||
mRetrofit, accessToken,
|
||||
accountName, mSharedPreferences, mPostFeedScrolledPositionSharedPreferences,
|
||||
mPostHistorySharedPreferences, postType, sortType, postFilter, readPosts, subredditName)).get(PostViewModel.class);
|
||||
mPostHistorySharedPreferences, postType, sortType, postFilter, readPosts, subredditName,
|
||||
postEnricher))
|
||||
.get(PostViewModel.class);
|
||||
}
|
||||
|
||||
bindPostViewModel();
|
||||
@@ -1241,26 +1244,27 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
|
||||
mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(mExecutor,
|
||||
mRetrofit, null, accountName, mSharedPreferences,
|
||||
mPostFeedScrolledPositionSharedPreferences, null, subredditName, query, trendingSource,
|
||||
postType, sortType, postFilter, readPosts)).get(PostViewModel.class);
|
||||
postType, sortType, postFilter, readPosts, postEnricher)).get(PostViewModel.class);
|
||||
} else if (postType == PostPagingSource.TYPE_SUBREDDIT) {
|
||||
mPostViewModel = new ViewModelProvider(this, new PostViewModel.Factory(mExecutor,
|
||||
mRetrofit, null, accountName, mSharedPreferences,
|
||||
mPostFeedScrolledPositionSharedPreferences, null, subredditName, postType, sortType,
|
||||
postFilter, readPosts)).get(PostViewModel.class);
|
||||
postFilter, readPosts, postEnricher)).get(PostViewModel.class);
|
||||
} else if (postType == PostPagingSource.TYPE_MULTI_REDDIT) {
|
||||
mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(mExecutor,
|
||||
mRetrofit, null, accountName, mSharedPreferences,
|
||||
mPostFeedScrolledPositionSharedPreferences, null, multiRedditPath,
|
||||
postType, sortType, postFilter, readPosts)).get(PostViewModel.class);
|
||||
postType, sortType, postFilter, readPosts, postEnricher)).get(PostViewModel.class);
|
||||
} else if (postType == PostPagingSource.TYPE_USER) {
|
||||
mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(mExecutor,
|
||||
mRetrofit, null, accountName, mSharedPreferences,
|
||||
mPostFeedScrolledPositionSharedPreferences, null, username, postType, sortType, postFilter,
|
||||
where, readPosts)).get(PostViewModel.class);
|
||||
where, readPosts, postEnricher)).get(PostViewModel.class);
|
||||
} else {
|
||||
//Anonymous Front Page
|
||||
mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(mExecutor,
|
||||
mRetrofit, mSharedPreferences, concatenatedSubredditNames, postType, sortType, postFilter, subredditName))
|
||||
mRetrofit, mSharedPreferences, concatenatedSubredditNames, postType, sortType, postFilter, subredditName,
|
||||
postEnricher))
|
||||
.get(PostViewModel.class);
|
||||
}
|
||||
|
||||
@@ -1364,25 +1368,25 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
|
||||
if (mSharedPreferences.getBoolean(SharedPreferencesUtils.SAVE_SORT_TYPE, true)) {
|
||||
switch (postType) {
|
||||
case PostPagingSource.TYPE_FRONT_PAGE:
|
||||
mSortTypeSharedPreferences.edit().putString(SharedPreferencesUtils.SORT_TYPE_BEST_POST, sortType.getType().name()).apply();
|
||||
mSortTypeSharedPreferences.edit().putString(SharedPreferencesUtils.SORT_TYPE_BEST_POST, sortType.getType().value).apply();
|
||||
if (sortType.getTime() != null) {
|
||||
mSortTypeSharedPreferences.edit().putString(SharedPreferencesUtils.SORT_TIME_BEST_POST, sortType.getTime().name()).apply();
|
||||
}
|
||||
break;
|
||||
case PostPagingSource.TYPE_SUBREDDIT:
|
||||
mSortTypeSharedPreferences.edit().putString(SharedPreferencesUtils.SORT_TYPE_SUBREDDIT_POST_BASE + subredditName, sortType.getType().name()).apply();
|
||||
mSortTypeSharedPreferences.edit().putString(SharedPreferencesUtils.SORT_TYPE_SUBREDDIT_POST_BASE + subredditName, sortType.getType().value).apply();
|
||||
if (sortType.getTime() != null) {
|
||||
mSortTypeSharedPreferences.edit().putString(SharedPreferencesUtils.SORT_TIME_SUBREDDIT_POST_BASE + subredditName, sortType.getTime().name()).apply();
|
||||
}
|
||||
break;
|
||||
case PostPagingSource.TYPE_USER:
|
||||
mSortTypeSharedPreferences.edit().putString(SharedPreferencesUtils.SORT_TYPE_USER_POST_BASE + username, sortType.getType().name()).apply();
|
||||
mSortTypeSharedPreferences.edit().putString(SharedPreferencesUtils.SORT_TYPE_USER_POST_BASE + username, sortType.getType().value).apply();
|
||||
if (sortType.getTime() != null) {
|
||||
mSortTypeSharedPreferences.edit().putString(SharedPreferencesUtils.SORT_TIME_USER_POST_BASE + username, sortType.getTime().name()).apply();
|
||||
}
|
||||
break;
|
||||
case PostPagingSource.TYPE_SEARCH:
|
||||
mSortTypeSharedPreferences.edit().putString(SharedPreferencesUtils.SORT_TYPE_SEARCH_POST, sortType.getType().name()).apply();
|
||||
mSortTypeSharedPreferences.edit().putString(SharedPreferencesUtils.SORT_TYPE_SEARCH_POST, sortType.getType().value).apply();
|
||||
if (sortType.getTime() != null) {
|
||||
mSortTypeSharedPreferences.edit().putString(SharedPreferencesUtils.SORT_TIME_SEARCH_POST, sortType.getTime().name()).apply();
|
||||
}else {
|
||||
@@ -1392,14 +1396,14 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
|
||||
case PostPagingSource.TYPE_MULTI_REDDIT:
|
||||
case PostPagingSource.TYPE_ANONYMOUS_MULTIREDDIT:
|
||||
mSortTypeSharedPreferences.edit().putString(SharedPreferencesUtils.SORT_TYPE_MULTI_REDDIT_POST_BASE + multiRedditPath,
|
||||
sortType.getType().name()).apply();
|
||||
sortType.getType().value).apply();
|
||||
if (sortType.getTime() != null) {
|
||||
mSortTypeSharedPreferences.edit().putString(SharedPreferencesUtils.SORT_TIME_MULTI_REDDIT_POST_BASE + multiRedditPath,
|
||||
sortType.getTime().name()).apply();
|
||||
}
|
||||
break;
|
||||
case PostPagingSource.TYPE_ANONYMOUS_FRONT_PAGE:
|
||||
mSortTypeSharedPreferences.edit().putString(SharedPreferencesUtils.SORT_TYPE_SUBREDDIT_POST_BASE + "-", sortType.getType().name()).apply();
|
||||
mSortTypeSharedPreferences.edit().putString(SharedPreferencesUtils.SORT_TYPE_SUBREDDIT_POST_BASE + "-", sortType.getType().value).apply();
|
||||
if (sortType.getTime() != null) {
|
||||
mSortTypeSharedPreferences.edit().putString(SharedPreferencesUtils.SORT_TIME_SUBREDDIT_POST_BASE + "-", sortType.getTime().name()).apply();
|
||||
}
|
||||
@@ -1750,7 +1754,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
|
||||
} else {
|
||||
if (isSubreddit) {
|
||||
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase,
|
||||
subredditOrUserName, accessToken, mRetrofit.getRetrofit(), mRetrofit.getRetrofit(),
|
||||
subredditOrUserName, accessToken, mRetrofit.getRetrofit(),
|
||||
iconImageUrl -> {
|
||||
subredditOrUserIcons.put(subredditOrUserName, iconImageUrl);
|
||||
loadIconListener.loadIconSuccess(subredditOrUserName, iconImageUrl);
|
||||
@@ -2238,6 +2242,24 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
|
||||
return false;
|
||||
}
|
||||
|
||||
public SortType newSortType(String sortTypeText, String sortTimeText) {
|
||||
SortType.Type st = SortType.Type.fromValue(sortTypeText);
|
||||
st = st == null ? SortType.Type.NEW : st;
|
||||
SortType result;
|
||||
if (sortTypeText.startsWith("Top")) {
|
||||
sortTimeText = st.value.substring(3);
|
||||
result = new SortType(st, SortType.Time.fromValue(sortTimeText));
|
||||
} else if (sortTimeText != null) {
|
||||
SortType.Time sortTime = SortType.Time.fromValue(sortTimeText);
|
||||
SortType.Type sortType = SortType.Type.fromValue("Top" + sortTimeText);
|
||||
result = new SortType(sortType != null ? sortType : st, sortTime);
|
||||
} else {
|
||||
result = new SortType(st);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static abstract class LazyModeRunnable implements Runnable {
|
||||
private int currentPosition = -1;
|
||||
|
||||
|
||||
@@ -112,6 +112,7 @@ import eu.toldi.infinityforlemmy.post.HidePost;
|
||||
import eu.toldi.infinityforlemmy.post.LemmyPostAPI;
|
||||
import eu.toldi.infinityforlemmy.post.MarkPostAsRead;
|
||||
import eu.toldi.infinityforlemmy.post.Post;
|
||||
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher;
|
||||
import eu.toldi.infinityforlemmy.readpost.InsertReadPost;
|
||||
import eu.toldi.infinityforlemmy.subreddit.FetchSubredditData;
|
||||
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
||||
@@ -200,6 +201,8 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
|
||||
MarkPostAsRead markPostAsRead;
|
||||
@Inject
|
||||
LemmyPostAPI mLemmyPostAPI;
|
||||
@Inject
|
||||
PostEnricher postEnricher;
|
||||
@State
|
||||
Post mPost;
|
||||
@State
|
||||
@@ -324,7 +327,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
|
||||
mLockFab = mSharedPreferences.getBoolean(SharedPreferencesUtils.LOCK_JUMP_TO_NEXT_TOP_LEVEL_COMMENT_BUTTON, false);
|
||||
mSwipeUpToHideFab = mSharedPreferences.getBoolean(SharedPreferencesUtils.SWIPE_UP_TO_HIDE_JUMP_TO_NEXT_TOP_LEVEL_COMMENT_BUTTON, false);
|
||||
mExpandChildren = !mSharedPreferences.getBoolean(SharedPreferencesUtils.SHOW_TOP_LEVEL_COMMENTS_FIRST, false);
|
||||
mMarkPostsAsRead = mPostHistorySharedPreferences.getBoolean(mAccountQualifiedName + SharedPreferencesUtils.MARK_POSTS_AS_READ_BASE, false);
|
||||
mMarkPostsAsRead = mPostHistorySharedPreferences.getBoolean(mAccountName + SharedPreferencesUtils.MARK_POSTS_AS_READ_BASE, false);
|
||||
if (savedInstanceState == null) {
|
||||
mRespectSubredditRecommendedSortType = mSharedPreferences.getBoolean(SharedPreferencesUtils.RESPECT_SUBREDDIT_RECOMMENDED_COMMENT_SORT_TYPE, false);
|
||||
viewPostDetailFragmentId = System.currentTimeMillis();
|
||||
@@ -614,7 +617,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
|
||||
setupMenu();
|
||||
|
||||
mPostAdapter = new PostDetailRecyclerViewAdapter(activity,
|
||||
this, mExecutor, mCustomThemeWrapper, mRetrofit.getRetrofit(), mGfycatRetrofit,
|
||||
this, mExecutor, mCustomThemeWrapper, mRetrofit, mGfycatRetrofit,
|
||||
mRedgifsRetrofit, mStreamableApiProvider, mRedditDataRoomDatabase, mGlide,
|
||||
mSeparatePostAndComments, mAccessToken, mAccountName, mPost, mLocale,
|
||||
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostDetailsSharedPreferences,
|
||||
@@ -1155,10 +1158,6 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
|
||||
.show();
|
||||
return true;
|
||||
} else if (itemId == R.id.action_report_view_post_detail_fragment) {
|
||||
if (mAccessToken == null) {
|
||||
Toast.makeText(activity, R.string.login_first, Toast.LENGTH_SHORT).show();
|
||||
return true;
|
||||
}
|
||||
if (mAccessToken == null) {
|
||||
Toast.makeText(activity, R.string.login_first, Toast.LENGTH_SHORT).show();
|
||||
return true;
|
||||
@@ -1166,7 +1165,11 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
|
||||
LayoutInflater inflater = LayoutInflater.from(activity);
|
||||
View view = inflater.inflate(R.layout.dialog_report, null);
|
||||
EditText reasonEditText = view.findViewById(R.id.reasonEditText);
|
||||
|
||||
reasonEditText.setTextColor(mCustomThemeWrapper.getPrimaryTextColor());
|
||||
reasonEditText.setHintTextColor(mCustomThemeWrapper.getSecondaryTextColor());
|
||||
if (activity.typeface != null) {
|
||||
reasonEditText.setTypeface(activity.typeface);
|
||||
}
|
||||
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(activity)
|
||||
.setTitle(R.string.report_post)
|
||||
.setView(view)
|
||||
@@ -1329,7 +1332,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
|
||||
mSwipeRefreshLayout.setRefreshing(true);
|
||||
mGlide.clear(mFetchPostInfoImageView);
|
||||
FetchPost.fetchPost(mExecutor, new Handler(), mRetrofit.getRetrofit(), String.valueOf(subredditId), mAccessToken,
|
||||
new FetchPost.FetchPostListener() {
|
||||
postEnricher, new FetchPost.FetchPostListener() {
|
||||
@Override
|
||||
public void fetchPostSuccess(Post post) {
|
||||
if (!isAdded()) {
|
||||
@@ -1338,7 +1341,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
|
||||
mPost = post;
|
||||
mPostAdapter = new PostDetailRecyclerViewAdapter(activity,
|
||||
ViewPostDetailFragment.this, mExecutor, mCustomThemeWrapper,
|
||||
mRetrofit.getRetrofit(), mGfycatRetrofit, mRedgifsRetrofit,
|
||||
mRetrofit, mGfycatRetrofit, mRedgifsRetrofit,
|
||||
mStreamableApiProvider, mRedditDataRoomDatabase, mGlide, mSeparatePostAndComments,
|
||||
mAccessToken, mAccountName, mPost, mLocale, mSharedPreferences,
|
||||
mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences,
|
||||
@@ -1588,7 +1591,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
|
||||
Retrofit retrofit = mRetrofit.getRetrofit();
|
||||
|
||||
FetchPost.fetchPost(mExecutor, new Handler(), retrofit, String.valueOf(mPost.getId()), mAccessToken,
|
||||
new FetchPost.FetchPostListener() {
|
||||
postEnricher, new FetchPost.FetchPostListener() {
|
||||
@Override
|
||||
public void fetchPostSuccess(Post post) {
|
||||
if (isAdded()) {
|
||||
|
||||
@@ -52,6 +52,7 @@ import java.io.File;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
@@ -69,6 +70,7 @@ import eu.toldi.infinityforlemmy.bottomsheetfragments.UrlMenuBottomSheetFragment
|
||||
import eu.toldi.infinityforlemmy.post.Post;
|
||||
import eu.toldi.infinityforlemmy.services.DownloadMediaService;
|
||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||
import okhttp3.OkHttpClient;
|
||||
|
||||
public class ViewRedditGalleryImageOrGifFragment extends Fragment {
|
||||
|
||||
@@ -105,6 +107,9 @@ public class ViewRedditGalleryImageOrGifFragment extends Fragment {
|
||||
ImageView wallpaperImageView;
|
||||
@Inject
|
||||
Executor mExecutor;
|
||||
@Inject
|
||||
@Named("glide")
|
||||
OkHttpClient okHttpClient;
|
||||
|
||||
private ViewRedditGalleryActivity activity;
|
||||
private RequestManager glide;
|
||||
@@ -122,7 +127,7 @@ public class ViewRedditGalleryImageOrGifFragment extends Fragment {
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
BigImageViewer.initialize(GlideImageLoader.with(activity.getApplicationContext()));
|
||||
BigImageViewer.initialize(GlideImageLoader.with(activity.getApplicationContext(), okHttpClient));
|
||||
|
||||
View rootView = inflater.inflate(R.layout.fragment_view_reddit_gallery_image_or_gif, container, false);
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ import java.util.concurrent.Executor;
|
||||
|
||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
|
||||
import eu.toldi.infinityforlemmy.apis.RedditAPI;
|
||||
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher;
|
||||
import retrofit2.Call;
|
||||
import retrofit2.Callback;
|
||||
import retrofit2.Response;
|
||||
@@ -15,7 +16,7 @@ import retrofit2.Retrofit;
|
||||
|
||||
public class FetchPost {
|
||||
public static void fetchPost(Executor executor, Handler handler, Retrofit retrofit, String id, String accessToken,
|
||||
FetchPostListener fetchPostListener) {
|
||||
PostEnricher postEnricher, FetchPostListener fetchPostListener) {
|
||||
Call<String> postCall;
|
||||
// Use LemmyAPI.postInfo() instead of RedditAPI.getPost()
|
||||
postCall = retrofit.create(LemmyAPI.class).postInfo(Integer.parseInt(id), null, accessToken);
|
||||
@@ -24,7 +25,7 @@ public class FetchPost {
|
||||
@Override
|
||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
||||
if (response.isSuccessful()) {
|
||||
ParsePost.parsePost(executor, handler, response.body(), new ParsePost.ParsePostListener() {
|
||||
ParsePost.parsePost(executor, handler, postEnricher, response.body(), new ParsePost.ParsePostListener() {
|
||||
@Override
|
||||
public void onParsePostSuccess(Post post) {
|
||||
fetchPostListener.fetchPostSuccess(post);
|
||||
|
||||
@@ -19,6 +19,7 @@ import java.util.concurrent.Executor;
|
||||
|
||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||
import eu.toldi.infinityforlemmy.apis.RedditAPI;
|
||||
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher;
|
||||
import eu.toldi.infinityforlemmy.postfilter.PostFilter;
|
||||
import eu.toldi.infinityforlemmy.readpost.ReadPost;
|
||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||
@@ -39,10 +40,11 @@ public class HistoryPostPagingSource extends ListenableFuturePagingSource<String
|
||||
private String username;
|
||||
private int postType;
|
||||
private PostFilter postFilter;
|
||||
private PostEnricher postEnricher;
|
||||
|
||||
public HistoryPostPagingSource(Retrofit retrofit, Executor executor, RedditDataRoomDatabase redditDataRoomDatabase,
|
||||
String accessToken, String accountName, SharedPreferences sharedPreferences,
|
||||
String username, int postType, PostFilter postFilter) {
|
||||
String username, int postType, PostFilter postFilter, PostEnricher postEnricher) {
|
||||
this.retrofit = retrofit;
|
||||
this.executor = executor;
|
||||
this.redditDataRoomDatabase = redditDataRoomDatabase;
|
||||
@@ -52,6 +54,7 @@ public class HistoryPostPagingSource extends ListenableFuturePagingSource<String
|
||||
this.username = username;
|
||||
this.postType = postType;
|
||||
this.postFilter = postFilter;
|
||||
this.postEnricher = postEnricher;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -92,7 +95,7 @@ public class HistoryPostPagingSource extends ListenableFuturePagingSource<String
|
||||
Response<String> response = historyPosts.execute();
|
||||
if (response.isSuccessful()) {
|
||||
String responseString = response.body();
|
||||
LinkedHashSet<Post> newPosts = ParsePost.parsePostsSync(responseString, -1, postFilter, null);
|
||||
LinkedHashSet<Post> newPosts = ParsePost.parsePostsSync(responseString, -1, postFilter, null, postEnricher);
|
||||
if (newPosts == null) {
|
||||
return new LoadResult.Error<>(new Exception("Error parsing posts"));
|
||||
} else {
|
||||
|
||||
@@ -17,6 +17,7 @@ import androidx.paging.PagingLiveData;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher;
|
||||
import eu.toldi.infinityforlemmy.postfilter.PostFilter;
|
||||
import retrofit2.Retrofit;
|
||||
|
||||
@@ -29,6 +30,7 @@ public class HistoryPostViewModel extends ViewModel {
|
||||
private SharedPreferences sharedPreferences;
|
||||
private int postType;
|
||||
private PostFilter postFilter;
|
||||
private PostEnricher postEnricher;
|
||||
|
||||
private LiveData<PagingData<Post>> posts;
|
||||
|
||||
@@ -36,7 +38,7 @@ public class HistoryPostViewModel extends ViewModel {
|
||||
|
||||
public HistoryPostViewModel(Executor executor, Retrofit retrofit, RedditDataRoomDatabase redditDataRoomDatabase,
|
||||
String accessToken, String accountName, SharedPreferences sharedPreferences,
|
||||
int postType, PostFilter postFilter) {
|
||||
int postType, PostFilter postFilter, PostEnricher postEnricher) {
|
||||
this.executor = executor;
|
||||
this.retrofit = retrofit;
|
||||
this.redditDataRoomDatabase = redditDataRoomDatabase;
|
||||
@@ -45,11 +47,12 @@ public class HistoryPostViewModel extends ViewModel {
|
||||
this.sharedPreferences = sharedPreferences;
|
||||
this.postType = postType;
|
||||
this.postFilter = postFilter;
|
||||
this.postEnricher = postEnricher;
|
||||
|
||||
postFilterLiveData = new MutableLiveData<>();
|
||||
postFilterLiveData.postValue(postFilter);
|
||||
|
||||
Pager<String, Post> pager = new Pager<>(new PagingConfig(25, 25, false), this::returnPagingSoruce);
|
||||
Pager<String, Post> pager = new Pager<>(new PagingConfig(25, 25, false), this::returnPagingSource);
|
||||
|
||||
posts = Transformations.switchMap(postFilterLiveData, postFilterValue -> PagingLiveData.cachedIn(PagingLiveData.getLiveData(pager), ViewModelKt.getViewModelScope(this)));
|
||||
}
|
||||
@@ -58,19 +61,9 @@ public class HistoryPostViewModel extends ViewModel {
|
||||
return posts;
|
||||
}
|
||||
|
||||
public HistoryPostPagingSource returnPagingSoruce() {
|
||||
HistoryPostPagingSource paging3PagingSource;
|
||||
switch (postType) {
|
||||
case HistoryPostPagingSource.TYPE_READ_POSTS:
|
||||
paging3PagingSource = new HistoryPostPagingSource(retrofit, executor, redditDataRoomDatabase, accessToken, accountName,
|
||||
sharedPreferences, accountName, postType, postFilter);
|
||||
break;
|
||||
default:
|
||||
paging3PagingSource = new HistoryPostPagingSource(retrofit, executor, redditDataRoomDatabase, accessToken, accountName,
|
||||
sharedPreferences, accountName, postType, postFilter);
|
||||
break;
|
||||
}
|
||||
return paging3PagingSource;
|
||||
public HistoryPostPagingSource returnPagingSource() {
|
||||
return new HistoryPostPagingSource(retrofit, executor, redditDataRoomDatabase, accessToken, accountName,
|
||||
sharedPreferences, accountName, postType, postFilter, postEnricher);
|
||||
}
|
||||
|
||||
public void changePostFilter(PostFilter postFilter) {
|
||||
@@ -86,10 +79,11 @@ public class HistoryPostViewModel extends ViewModel {
|
||||
private SharedPreferences sharedPreferences;
|
||||
private int postType;
|
||||
private PostFilter postFilter;
|
||||
private PostEnricher postEnricher;
|
||||
|
||||
public Factory(Executor executor, Retrofit retrofit, RedditDataRoomDatabase redditDataRoomDatabase,
|
||||
String accessToken, String accountName, SharedPreferences sharedPreferences, int postType,
|
||||
PostFilter postFilter) {
|
||||
PostFilter postFilter, PostEnricher postEnricher) {
|
||||
this.executor = executor;
|
||||
this.retrofit = retrofit;
|
||||
this.redditDataRoomDatabase = redditDataRoomDatabase;
|
||||
@@ -98,18 +92,14 @@ public class HistoryPostViewModel extends ViewModel {
|
||||
this.sharedPreferences = sharedPreferences;
|
||||
this.postType = postType;
|
||||
this.postFilter = postFilter;
|
||||
this.postEnricher = postEnricher;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
|
||||
if (postType == HistoryPostPagingSource.TYPE_READ_POSTS) {
|
||||
return (T) new HistoryPostViewModel(executor, retrofit, redditDataRoomDatabase, accessToken, accountName, sharedPreferences,
|
||||
postType, postFilter);
|
||||
} else {
|
||||
return (T) new HistoryPostViewModel(executor, retrofit, redditDataRoomDatabase, accessToken, accountName, sharedPreferences,
|
||||
postType, postFilter);
|
||||
}
|
||||
return (T) new HistoryPostViewModel(executor, retrofit, redditDataRoomDatabase, accessToken, accountName, sharedPreferences,
|
||||
postType, postFilter, postEnricher);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@ import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import eu.toldi.infinityforlemmy.community.BasicCommunityInfo;
|
||||
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher;
|
||||
import eu.toldi.infinityforlemmy.postfilter.PostFilter;
|
||||
import eu.toldi.infinityforlemmy.user.BasicUserInfo;
|
||||
import eu.toldi.infinityforlemmy.utils.JSONUtils;
|
||||
@@ -45,7 +46,8 @@ import eu.toldi.infinityforlemmy.utils.Utils;
|
||||
*/
|
||||
|
||||
public class ParsePost {
|
||||
public static LinkedHashSet<Post> parsePostsSync(String response, int nPosts, PostFilter postFilter, List<String> readPostList) {
|
||||
public static LinkedHashSet<Post> parsePostsSync(String response, int nPosts, PostFilter postFilter,
|
||||
List<String> readPostList, PostEnricher postEnricher) {
|
||||
LinkedHashSet<Post> newPosts = new LinkedHashSet<>();
|
||||
try {
|
||||
JSONObject jsonResponse = new JSONObject(response);
|
||||
@@ -80,6 +82,8 @@ public class ParsePost {
|
||||
}
|
||||
}
|
||||
|
||||
postEnricher.enrich(newPosts);
|
||||
|
||||
return newPosts;
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
@@ -87,21 +91,9 @@ public class ParsePost {
|
||||
}
|
||||
}
|
||||
|
||||
public static String getLastItem(String response) {
|
||||
try {
|
||||
JSONObject object = new JSONObject(response).getJSONObject(JSONUtils.DATA_KEY);
|
||||
return object.isNull(JSONUtils.AFTER_KEY) ? null : object.getString(JSONUtils.AFTER_KEY);
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static void parsePost(Executor executor, Handler handler, String response, ParsePostListener parsePostListener) {
|
||||
PostFilter postFilter = new PostFilter();
|
||||
postFilter.allowNSFW = true;
|
||||
|
||||
public static void parsePost(Executor executor, Handler handler, PostEnricher postEnricher,
|
||||
String response, ParsePostListener parsePostListener) {
|
||||
executor.execute(() -> {
|
||||
try {
|
||||
JSONObject allData = new JSONObject(response).getJSONObject("post_view");
|
||||
@@ -111,6 +103,7 @@ public class ParsePost {
|
||||
}
|
||||
|
||||
Post post = parseBasicData(allData);
|
||||
postEnricher.enrich(List.of(post));
|
||||
handler.post(() -> parsePostListener.onParsePostSuccess(post));
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
@@ -188,7 +181,7 @@ public class ParsePost {
|
||||
boolean nsfw = post.getBoolean("nsfw");
|
||||
boolean locked = post.getBoolean("locked");
|
||||
boolean saved = data.getBoolean("saved");
|
||||
String distinguished = (creator.getBoolean("admin") ? "admin" : "");
|
||||
String distinguished = creator.optBoolean("admin") ? "admin" : "";
|
||||
String suggestedSort = "";
|
||||
ArrayList<Post.Preview> previews = new ArrayList<>();
|
||||
if (!post.isNull("thumbnail_url")) {
|
||||
|
||||
@@ -21,6 +21,7 @@ import java.util.concurrent.Executor;
|
||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||
import eu.toldi.infinityforlemmy.SortType;
|
||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
|
||||
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher;
|
||||
import eu.toldi.infinityforlemmy.postfilter.PostFilter;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import retrofit2.HttpException;
|
||||
@@ -57,6 +58,7 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
|
||||
private List<String> readPostList;
|
||||
private String userWhere;
|
||||
private String multiRedditPath;
|
||||
private final PostEnricher postEnricher;
|
||||
private LinkedHashSet<Post> postLinkedHashSet;
|
||||
|
||||
private int page = 1;
|
||||
@@ -64,7 +66,8 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
|
||||
PostPagingSource(Executor executor, RetrofitHolder retrofit, String accessToken, String accountName,
|
||||
SharedPreferences sharedPreferences,
|
||||
SharedPreferences postFeedScrolledPositionSharedPreferences, int postType,
|
||||
SortType sortType, PostFilter postFilter, List<String> readPostList, String option) {
|
||||
SortType sortType, PostFilter postFilter, List<String> readPostList, String option,
|
||||
PostEnricher postEnricher) {
|
||||
this.executor = executor;
|
||||
this.retrofit = retrofit;
|
||||
this.accessToken = accessToken;
|
||||
@@ -76,13 +79,14 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
|
||||
this.sortType = sortType == null ? new SortType(SortType.Type.ACTIVE) : sortType;
|
||||
this.postFilter = postFilter;
|
||||
this.readPostList = readPostList;
|
||||
this.postEnricher = postEnricher;
|
||||
postLinkedHashSet = new LinkedHashSet<>();
|
||||
}
|
||||
|
||||
PostPagingSource(Executor executor, RetrofitHolder retrofit, String accessToken, String accountName,
|
||||
SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences,
|
||||
String path, int postType, SortType sortType, PostFilter postFilter,
|
||||
List<String> readPostList) {
|
||||
List<String> readPostList, PostEnricher postEnricher) {
|
||||
this.executor = executor;
|
||||
this.retrofit = retrofit;
|
||||
this.accessToken = accessToken;
|
||||
@@ -114,13 +118,14 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
|
||||
}
|
||||
this.postFilter = postFilter;
|
||||
this.readPostList = readPostList;
|
||||
this.postEnricher = postEnricher;
|
||||
postLinkedHashSet = new LinkedHashSet<>();
|
||||
}
|
||||
|
||||
PostPagingSource(Executor executor, RetrofitHolder retrofit, String accessToken, String accountName,
|
||||
SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences,
|
||||
String subredditOrUserName, int postType, SortType sortType, PostFilter postFilter,
|
||||
String where, List<String> readPostList) {
|
||||
String where, List<String> readPostList, PostEnricher postEnricher) {
|
||||
this.executor = executor;
|
||||
this.retrofit = retrofit;
|
||||
this.accessToken = accessToken;
|
||||
@@ -133,13 +138,14 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
|
||||
this.postFilter = postFilter;
|
||||
userWhere = where;
|
||||
this.readPostList = readPostList;
|
||||
this.postEnricher = postEnricher;
|
||||
postLinkedHashSet = new LinkedHashSet<>();
|
||||
}
|
||||
|
||||
PostPagingSource(Executor executor, RetrofitHolder retrofit, String accessToken, String accountName,
|
||||
SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences,
|
||||
String subredditOrUserName, String query, String trendingSource, int postType,
|
||||
SortType sortType, PostFilter postFilter, List<String> readPostList) {
|
||||
SortType sortType, PostFilter postFilter, List<String> readPostList, PostEnricher postEnricher) {
|
||||
this.executor = executor;
|
||||
this.retrofit = retrofit;
|
||||
this.accessToken = accessToken;
|
||||
@@ -152,8 +158,9 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
|
||||
this.postType = postType;
|
||||
this.sortType = sortType == null ? new SortType(SortType.Type.TOP) : sortType;
|
||||
this.postFilter = postFilter;
|
||||
postLinkedHashSet = new LinkedHashSet<>();
|
||||
this.readPostList = readPostList;
|
||||
this.postEnricher = postEnricher;
|
||||
postLinkedHashSet = new LinkedHashSet<>();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -190,7 +197,7 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
|
||||
public LoadResult<Integer, Post> transformData(Response<String> response) {
|
||||
if (response.isSuccessful()) {
|
||||
String responseString = response.body();
|
||||
LinkedHashSet<Post> newPosts = ParsePost.parsePostsSync(responseString, -1, postFilter, readPostList);
|
||||
LinkedHashSet<Post> newPosts = ParsePost.parsePostsSync(responseString, -1, postFilter, readPostList, postEnricher);
|
||||
|
||||
if (newPosts == null) {
|
||||
return new LoadResult.Error<>(new Exception("Error parsing posts"));
|
||||
@@ -236,7 +243,7 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
|
||||
}
|
||||
String feed_type = Objects.equals(subredditOrUserName, "all") ? "All" : Objects.equals(subredditOrUserName, "local") ? "Local" : "Subscribed";
|
||||
|
||||
bestPost = api.getPosts(feed_type,sortType.getType().value,page,25,null,null,false,accessToken);
|
||||
bestPost = api.getPostsListenableFuture(feed_type, sortType.getType().value, page, 25, null, null, false, accessToken);
|
||||
|
||||
ListenableFuture<LoadResult<Integer, Post>> pageFuture = Futures.transform(bestPost, this::transformData, executor);
|
||||
|
||||
@@ -251,7 +258,7 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
|
||||
private ListenableFuture<LoadResult<Integer, Post>> loadSubredditPosts(@NonNull LoadParams<Integer> loadParams, LemmyAPI api) {
|
||||
ListenableFuture<Response<String>> subredditPost;
|
||||
|
||||
subredditPost = api.getPosts(null,sortType.getType().value,loadParams.getKey(),25,null,subredditOrUserName,false,accessToken);
|
||||
subredditPost = api.getPostsListenableFuture(null, sortType.getType().value, loadParams.getKey(), 25, null, subredditOrUserName, false, accessToken);
|
||||
|
||||
|
||||
ListenableFuture<LoadResult<Integer, Post>> pageFuture = Futures.transform(subredditPost, this::transformData, executor);
|
||||
@@ -266,7 +273,7 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
|
||||
|
||||
private ListenableFuture<LoadResult<Integer, Post>> loadUserPosts(@NonNull LoadParams<Integer> loadParams, LemmyAPI api) {
|
||||
ListenableFuture<Response<String>> userPosts;
|
||||
userPosts = api.getUserPosts(subredditOrUserName, sortType.getType().value, loadParams.getKey(), 25, userWhere.equals(USER_WHERE_SAVED), accessToken);
|
||||
userPosts = api.getUserPostsListenableFuture(subredditOrUserName, sortType.getType().value, loadParams.getKey(), 25, userWhere.equals(USER_WHERE_SAVED), accessToken);
|
||||
|
||||
|
||||
ListenableFuture<LoadResult<Integer, Post>> pageFuture = Futures.transform(userPosts, this::transformData, executor);
|
||||
|
||||
@@ -23,6 +23,7 @@ import java.util.concurrent.Executor;
|
||||
|
||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||
import eu.toldi.infinityforlemmy.SortType;
|
||||
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher;
|
||||
import eu.toldi.infinityforlemmy.postfilter.PostFilter;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
|
||||
@@ -41,6 +42,7 @@ public class PostViewModel extends ViewModel {
|
||||
private PostFilter postFilter;
|
||||
private String userWhere;
|
||||
private List<String> readPostList;
|
||||
private PostEnricher postEnricher;
|
||||
private MutableLiveData<Boolean> currentlyReadPostIdsLiveData = new MutableLiveData<>();
|
||||
|
||||
private LiveData<PagingData<Post>> posts;
|
||||
@@ -53,7 +55,7 @@ public class PostViewModel extends ViewModel {
|
||||
public PostViewModel(Executor executor, RetrofitHolder retrofit, String accessToken, String accountName,
|
||||
SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences,
|
||||
@Nullable SharedPreferences postHistorySharedPreferences, int postType,
|
||||
SortType sortType, PostFilter postFilter, List<String> readPostList, String option) {
|
||||
SortType sortType, PostFilter postFilter, List<String> readPostList, String option, PostEnricher postEnricher) {
|
||||
this.executor = executor;
|
||||
this.retrofit = retrofit;
|
||||
this.accessToken = accessToken;
|
||||
@@ -65,6 +67,7 @@ public class PostViewModel extends ViewModel {
|
||||
this.postFilter = postFilter;
|
||||
this.readPostList = readPostList;
|
||||
this.name = option;
|
||||
this.postEnricher = postEnricher;
|
||||
|
||||
sortTypeLiveData = new MutableLiveData<>();
|
||||
sortTypeLiveData.postValue(sortType);
|
||||
@@ -95,7 +98,7 @@ public class PostViewModel extends ViewModel {
|
||||
public PostViewModel(Executor executor, RetrofitHolder retrofit, String accessToken, String accountName,
|
||||
SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences,
|
||||
@Nullable SharedPreferences postHistorySharedPreferences, String subredditName, int postType,
|
||||
SortType sortType, PostFilter postFilter, List<String> readPostList) {
|
||||
SortType sortType, PostFilter postFilter, List<String> readPostList, PostEnricher postEnricher) {
|
||||
this.executor = executor;
|
||||
this.retrofit = retrofit;
|
||||
this.accessToken = accessToken;
|
||||
@@ -107,6 +110,7 @@ public class PostViewModel extends ViewModel {
|
||||
this.postFilter = postFilter;
|
||||
this.readPostList = readPostList;
|
||||
this.name = subredditName;
|
||||
this.postEnricher = postEnricher;
|
||||
|
||||
sortTypeLiveData = new MutableLiveData<>();
|
||||
sortTypeLiveData.postValue(sortType);
|
||||
@@ -139,7 +143,7 @@ public class PostViewModel extends ViewModel {
|
||||
SharedPreferences postFeedScrolledPositionSharedPreferences,
|
||||
@Nullable SharedPreferences postHistorySharedPreferences, String username,
|
||||
int postType, SortType sortType, PostFilter postFilter, String userWhere,
|
||||
List<String> readPostList) {
|
||||
List<String> readPostList, PostEnricher postEnricher) {
|
||||
this.executor = executor;
|
||||
this.retrofit = retrofit;
|
||||
this.accessToken = accessToken;
|
||||
@@ -152,6 +156,7 @@ public class PostViewModel extends ViewModel {
|
||||
this.readPostList = readPostList;
|
||||
this.name = username;
|
||||
this.userWhere = userWhere;
|
||||
this.postEnricher = postEnricher;
|
||||
|
||||
sortTypeLiveData = new MutableLiveData<>();
|
||||
sortTypeLiveData.postValue(sortType);
|
||||
@@ -183,7 +188,7 @@ public class PostViewModel extends ViewModel {
|
||||
SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences,
|
||||
@Nullable SharedPreferences postHistorySharedPreferences, String subredditName, String query,
|
||||
String trendingSource, int postType, SortType sortType, PostFilter postFilter,
|
||||
List<String> readPostList) {
|
||||
List<String> readPostList, PostEnricher postEnricher) {
|
||||
this.executor = executor;
|
||||
this.retrofit = retrofit;
|
||||
this.accessToken = accessToken;
|
||||
@@ -197,6 +202,7 @@ public class PostViewModel extends ViewModel {
|
||||
this.name = subredditName;
|
||||
this.query = query;
|
||||
this.trendingSource = trendingSource;
|
||||
this.postEnricher = postEnricher;
|
||||
|
||||
sortTypeLiveData = new MutableLiveData<>();
|
||||
sortTypeLiveData.postValue(sortType);
|
||||
@@ -238,25 +244,25 @@ public class PostViewModel extends ViewModel {
|
||||
case PostPagingSource.TYPE_FRONT_PAGE:
|
||||
paging3PagingSource = new PostPagingSource(executor, retrofit, accessToken, accountName,
|
||||
sharedPreferences, postFeedScrolledPositionSharedPreferences, postType, sortType,
|
||||
postFilter, readPostList,name);
|
||||
postFilter, readPostList, name, postEnricher);
|
||||
break;
|
||||
case PostPagingSource.TYPE_SUBREDDIT:
|
||||
case PostPagingSource.TYPE_MULTI_REDDIT:
|
||||
case PostPagingSource.TYPE_ANONYMOUS_FRONT_PAGE:
|
||||
paging3PagingSource = new PostPagingSource(executor, retrofit, accessToken, accountName,
|
||||
sharedPreferences, postFeedScrolledPositionSharedPreferences, name, postType,
|
||||
sortType, postFilter, readPostList);
|
||||
sortType, postFilter, readPostList, postEnricher);
|
||||
break;
|
||||
case PostPagingSource.TYPE_SEARCH:
|
||||
paging3PagingSource = new PostPagingSource(executor, retrofit, accessToken, accountName,
|
||||
sharedPreferences, postFeedScrolledPositionSharedPreferences, name, query, trendingSource,
|
||||
postType, sortType, postFilter, readPostList);
|
||||
postType, sortType, postFilter, readPostList, postEnricher);
|
||||
break;
|
||||
default:
|
||||
//User
|
||||
paging3PagingSource = new PostPagingSource(executor, retrofit, accessToken, accountName,
|
||||
sharedPreferences, postFeedScrolledPositionSharedPreferences, name, postType,
|
||||
sortType, postFilter, userWhere, readPostList);
|
||||
sortType, postFilter, userWhere, readPostList, postEnricher);
|
||||
break;
|
||||
}
|
||||
return paging3PagingSource;
|
||||
@@ -291,11 +297,12 @@ public class PostViewModel extends ViewModel {
|
||||
private PostFilter postFilter;
|
||||
private String userWhere;
|
||||
private List<String> readPostList;
|
||||
private PostEnricher postEnricher;
|
||||
|
||||
public Factory(Executor executor, RetrofitHolder retrofit, String accessToken, String accountName,
|
||||
SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences,
|
||||
SharedPreferences postHistorySharedPreferences, int postType, SortType sortType,
|
||||
PostFilter postFilter, List<String> readPostList, String option) {
|
||||
PostFilter postFilter, List<String> readPostList, String option, PostEnricher postEnricher) {
|
||||
this.executor = executor;
|
||||
this.retrofit = retrofit;
|
||||
this.accessToken = accessToken;
|
||||
@@ -308,12 +315,13 @@ public class PostViewModel extends ViewModel {
|
||||
this.postFilter = postFilter;
|
||||
this.readPostList = readPostList;
|
||||
this.name = option;
|
||||
this.postEnricher = postEnricher;
|
||||
}
|
||||
|
||||
public Factory(Executor executor, RetrofitHolder retrofit, String accessToken, String accountName,
|
||||
SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences,
|
||||
SharedPreferences postHistorySharedPreferences, String name, int postType, SortType sortType,
|
||||
PostFilter postFilter, List<String> readPostList) {
|
||||
PostFilter postFilter, List<String> readPostList, PostEnricher postEnricher) {
|
||||
this.executor = executor;
|
||||
this.retrofit = retrofit;
|
||||
this.accessToken = accessToken;
|
||||
@@ -326,13 +334,15 @@ public class PostViewModel extends ViewModel {
|
||||
this.sortType = sortType;
|
||||
this.postFilter = postFilter;
|
||||
this.readPostList = readPostList;
|
||||
this.postEnricher = postEnricher;
|
||||
}
|
||||
|
||||
//User posts
|
||||
public Factory(Executor executor, RetrofitHolder retrofit, String accessToken, String accountName,
|
||||
SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences,
|
||||
SharedPreferences postHistorySharedPreferences, String username, int postType,
|
||||
SortType sortType, PostFilter postFilter, String where, List<String> readPostList) {
|
||||
SortType sortType, PostFilter postFilter, String where, List<String> readPostList,
|
||||
PostEnricher postEnricher) {
|
||||
this.executor = executor;
|
||||
this.retrofit = retrofit;
|
||||
this.accessToken = accessToken;
|
||||
@@ -346,12 +356,14 @@ public class PostViewModel extends ViewModel {
|
||||
this.postFilter = postFilter;
|
||||
userWhere = where;
|
||||
this.readPostList = readPostList;
|
||||
this.postEnricher = postEnricher;
|
||||
}
|
||||
|
||||
public Factory(Executor executor, RetrofitHolder retrofit, String accessToken, String accountName,
|
||||
SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences,
|
||||
SharedPreferences postHistorySharedPreferences, String name, String query, String trendingSource,
|
||||
int postType, SortType sortType, PostFilter postFilter, List<String> readPostList) {
|
||||
int postType, SortType sortType, PostFilter postFilter, List<String> readPostList,
|
||||
PostEnricher postEnricher) {
|
||||
this.executor = executor;
|
||||
this.retrofit = retrofit;
|
||||
this.accessToken = accessToken;
|
||||
@@ -366,19 +378,23 @@ public class PostViewModel extends ViewModel {
|
||||
this.sortType = sortType;
|
||||
this.postFilter = postFilter;
|
||||
this.readPostList = readPostList;
|
||||
this.postEnricher = postEnricher;
|
||||
}
|
||||
|
||||
//Anonymous Front Page
|
||||
public Factory(Executor executor, RetrofitHolder retrofit, SharedPreferences sharedPreferences,
|
||||
String concatenatedSubredditNames, int postType, SortType sortType, PostFilter postFilter, String opt) {
|
||||
String concatenatedSubredditNames, int postType, SortType sortType, PostFilter postFilter,
|
||||
String opt, PostEnricher postEnricher) {
|
||||
this.executor = executor;
|
||||
this.retrofit = retrofit;
|
||||
this.sharedPreferences = sharedPreferences;
|
||||
// TODO is this used? because it is getting overwritten with opt
|
||||
this.name = concatenatedSubredditNames;
|
||||
this.postType = postType;
|
||||
this.sortType = sortType;
|
||||
this.postFilter = postFilter;
|
||||
this.name = opt;
|
||||
this.postEnricher = postEnricher;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@@ -387,23 +403,23 @@ public class PostViewModel extends ViewModel {
|
||||
if (postType == PostPagingSource.TYPE_FRONT_PAGE) {
|
||||
return (T) new PostViewModel(executor, retrofit, accessToken, accountName, sharedPreferences,
|
||||
postFeedScrolledPositionSharedPreferences, postHistorySharedPreferences, postType,
|
||||
sortType, postFilter, readPostList,name);
|
||||
sortType, postFilter, readPostList,name, postEnricher);
|
||||
} else if (postType == PostPagingSource.TYPE_SEARCH) {
|
||||
return (T) new PostViewModel(executor, retrofit, accessToken, accountName, sharedPreferences,
|
||||
postFeedScrolledPositionSharedPreferences, postHistorySharedPreferences, name, query,
|
||||
trendingSource, postType, sortType, postFilter, readPostList);
|
||||
trendingSource, postType, sortType, postFilter, readPostList, postEnricher);
|
||||
} else if (postType == PostPagingSource.TYPE_SUBREDDIT || postType == PostPagingSource.TYPE_MULTI_REDDIT) {
|
||||
return (T) new PostViewModel(executor, retrofit, accessToken, accountName, sharedPreferences,
|
||||
postFeedScrolledPositionSharedPreferences, postHistorySharedPreferences, name,
|
||||
postType, sortType, postFilter, readPostList);
|
||||
postType, sortType, postFilter, readPostList, postEnricher);
|
||||
} else if (postType == PostPagingSource.TYPE_ANONYMOUS_FRONT_PAGE) {
|
||||
return (T) new PostViewModel(executor, retrofit, null, null, sharedPreferences,
|
||||
null, null, name, postType, sortType,
|
||||
postFilter, null);
|
||||
postFilter, null, postEnricher);
|
||||
} else {
|
||||
return (T) new PostViewModel(executor, retrofit, accessToken, accountName, sharedPreferences,
|
||||
postFeedScrolledPositionSharedPreferences, postHistorySharedPreferences, name,
|
||||
postType, sortType, postFilter, userWhere, readPostList);
|
||||
postType, sortType, postFilter, userWhere, readPostList, postEnricher);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ import eu.toldi.infinityforlemmy.Flair;
|
||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||
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;
|
||||
import eu.toldi.infinityforlemmy.utils.UploadImageUtils;
|
||||
import retrofit2.Call;
|
||||
@@ -25,22 +26,24 @@ public class SubmitPost {
|
||||
public static void submitTextOrLinkPost(Executor executor, Handler handler, Retrofit oauthRetrofit, String accessToken,
|
||||
int communityId, String title, String body, String url,
|
||||
Flair flair, boolean isSpoiler, boolean isNSFW,
|
||||
boolean receivePostReplyNotifications, String kind,
|
||||
boolean receivePostReplyNotifications, String kind, PostEnricher postEnricher,
|
||||
SubmitPostListener submitPostListener) {
|
||||
submitPost(executor, handler, oauthRetrofit, accessToken, communityId, title, body,
|
||||
isNSFW, receivePostReplyNotifications, kind, url, submitPostListener);
|
||||
isNSFW, receivePostReplyNotifications, kind, url, postEnricher, submitPostListener);
|
||||
}
|
||||
|
||||
public static void submitImagePost(Executor executor, Handler handler, RetrofitHolder mRetrofit,
|
||||
String accessToken, int communityId, String title, String body, Bitmap image,
|
||||
Flair flair, boolean isSpoiler, boolean isNSFW,
|
||||
boolean receivePostReplyNotifications, SubmitPostListener submitPostListener) {
|
||||
boolean receivePostReplyNotifications, PostEnricher postEnricher,
|
||||
SubmitPostListener submitPostListener) {
|
||||
try {
|
||||
String imageUrlOrError = UploadImageUtils.uploadImage(mRetrofit, accessToken, image);
|
||||
if (imageUrlOrError != null && !imageUrlOrError.startsWith("Error: ")) {
|
||||
submitPost(executor, handler, mRetrofit.getRetrofit(), accessToken,
|
||||
communityId, title, body, isNSFW,
|
||||
receivePostReplyNotifications, APIUtils.KIND_IMAGE, imageUrlOrError, submitPostListener);
|
||||
receivePostReplyNotifications, APIUtils.KIND_IMAGE, imageUrlOrError,
|
||||
postEnricher, submitPostListener);
|
||||
} else {
|
||||
submitPostListener.submitFailed(imageUrlOrError);
|
||||
}
|
||||
@@ -53,17 +56,18 @@ public class SubmitPost {
|
||||
public static void submitCrosspost(Executor executor, Handler handler, Retrofit oauthRetrofit, String accessToken,
|
||||
int communityId, String title, String crosspostFullname,
|
||||
Flair flair, boolean isSpoiler, boolean isNSFW,
|
||||
boolean receivePostReplyNotifications, String kind,
|
||||
boolean receivePostReplyNotifications, String kind, PostEnricher postEnricher,
|
||||
SubmitPostListener submitPostListener) {
|
||||
submitPost(executor, handler, oauthRetrofit, accessToken, communityId, title, crosspostFullname,
|
||||
isNSFW, receivePostReplyNotifications, kind, null, submitPostListener);
|
||||
isNSFW, receivePostReplyNotifications, kind, null, postEnricher, submitPostListener);
|
||||
}
|
||||
|
||||
private static void submitPost(Executor executor, Handler handler, Retrofit oauthRetrofit, String accessToken,
|
||||
int communityId, String title, String content,
|
||||
boolean isNSFW,
|
||||
boolean receivePostReplyNotifications, String kind,
|
||||
@Nullable String posterUrl, SubmitPostListener submitPostListener) {
|
||||
@Nullable String posterUrl, PostEnricher postEnricher,
|
||||
SubmitPostListener submitPostListener) {
|
||||
LemmyAPI api = oauthRetrofit.create(LemmyAPI.class);
|
||||
|
||||
|
||||
@@ -73,7 +77,7 @@ public class SubmitPost {
|
||||
Response<String> response = submitPostCall.execute();
|
||||
if (response.isSuccessful()) {
|
||||
getSubmittedPost(executor, handler, response.body(), kind, oauthRetrofit, accessToken,
|
||||
submitPostListener);
|
||||
postEnricher, submitPostListener);
|
||||
} else {
|
||||
submitPostListener.submitFailed(response.message());
|
||||
}
|
||||
@@ -84,10 +88,10 @@ public class SubmitPost {
|
||||
}
|
||||
|
||||
private static void getSubmittedPost(Executor executor, Handler handler, String response, String kind,
|
||||
Retrofit oauthRetrofit, String accessToken,
|
||||
Retrofit oauthRetrofit, String accessToken, PostEnricher postEnricher,
|
||||
SubmitPostListener submitPostListener) throws JSONException, IOException {
|
||||
|
||||
ParsePost.parsePost(executor, handler, response, new ParsePost.ParsePostListener() {
|
||||
ParsePost.parsePost(executor, handler, postEnricher, response, new ParsePost.ParsePostListener() {
|
||||
@Override
|
||||
public void onParsePostSuccess(Post post) {
|
||||
submitPostListener.submitSuccessful(post);
|
||||
|
||||
@@ -153,7 +153,7 @@ public class DownloadMediaService extends Service {
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
|
||||
File directory = getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
|
||||
if (directory != null) {
|
||||
String directoryPath = separateDownloadFolder && subredditName != null && !subredditName.equals("") ? directory.getAbsolutePath() + "/Infinity/" + subredditName + "/" : directory.getAbsolutePath() + "/Infinity/";
|
||||
String directoryPath = separateDownloadFolder && subredditName != null && !subredditName.equals("") ? directory.getAbsolutePath() + "/Eternity/" + subredditName + "/" : directory.getAbsolutePath() + "/Eternity/";
|
||||
File infinityDir = new File(directoryPath);
|
||||
if (!infinityDir.exists() && !infinityDir.mkdirs()) {
|
||||
downloadFinished(mediaType, randomNotificationIdOffset, mimeType,
|
||||
@@ -168,7 +168,7 @@ public class DownloadMediaService extends Service {
|
||||
}
|
||||
} else {
|
||||
String dir = mediaType == EXTRA_MEDIA_TYPE_VIDEO ? Environment.DIRECTORY_MOVIES : Environment.DIRECTORY_PICTURES;
|
||||
destinationFileUriString = separateDownloadFolder && subredditName != null && !subredditName.equals("") ? dir + "/Infinity/" + subredditName + "/" : dir + "/Infinity/";
|
||||
destinationFileUriString = separateDownloadFolder && subredditName != null && !subredditName.equals("") ? dir + "/Eternity/" + subredditName + "/" : dir + "/Eternity/";
|
||||
}
|
||||
isDefaultDestination = true;
|
||||
} else {
|
||||
|
||||
@@ -54,6 +54,7 @@ import eu.toldi.infinityforlemmy.events.SubmitPollPostEvent;
|
||||
import eu.toldi.infinityforlemmy.events.SubmitTextOrLinkPostEvent;
|
||||
import eu.toldi.infinityforlemmy.post.Post;
|
||||
import eu.toldi.infinityforlemmy.post.SubmitPost;
|
||||
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher;
|
||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.JSONUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.NotificationUtils;
|
||||
@@ -102,6 +103,8 @@ public class SubmitPostService extends Service {
|
||||
CustomThemeWrapper mCustomThemeWrapper;
|
||||
@Inject
|
||||
Executor mExecutor;
|
||||
@Inject
|
||||
PostEnricher postEnricher;
|
||||
private Handler handler;
|
||||
private ServiceHandler serviceHandler;
|
||||
|
||||
@@ -221,7 +224,7 @@ public class SubmitPostService extends Service {
|
||||
String kind) {
|
||||
SubmitPost.submitTextOrLinkPost(mExecutor, handler, newAuthenticatorOauthRetrofit, selectedAccount.getAccessToken(),
|
||||
communityId, title, body, url, flair, isSpoiler,
|
||||
isNSFW, receivePostReplyNotifications, kind, new SubmitPost.SubmitPostListener() {
|
||||
isNSFW, receivePostReplyNotifications, kind, postEnricher, new SubmitPost.SubmitPostListener() {
|
||||
@Override
|
||||
public void submitSuccessful(Post post) {
|
||||
handler.post(() -> EventBus.getDefault().post(new SubmitTextOrLinkPostEvent(true, post, null)));
|
||||
@@ -243,7 +246,7 @@ public class SubmitPostService extends Service {
|
||||
String title, String content, Flair flair, boolean isSpoiler, boolean isNSFW,
|
||||
boolean receivePostReplyNotifications) {
|
||||
SubmitPost.submitCrosspost(executor, handler, newAuthenticatorOauthRetrofit, selectedAccount.getAccessToken(), communityId, title,
|
||||
content, flair, isSpoiler, isNSFW, receivePostReplyNotifications, APIUtils.KIND_CROSSPOST,
|
||||
content, flair, isSpoiler, isNSFW, receivePostReplyNotifications, APIUtils.KIND_CROSSPOST, postEnricher,
|
||||
new SubmitPost.SubmitPostListener() {
|
||||
@Override
|
||||
public void submitSuccessful(Post post) {
|
||||
@@ -266,7 +269,8 @@ public class SubmitPostService extends Service {
|
||||
try {
|
||||
Bitmap resource = Glide.with(this).asBitmap().load(mediaUri).submit().get();
|
||||
SubmitPost.submitImagePost(mExecutor, handler, newAuthenticatorOauthRetrofit,
|
||||
selectedAccount.getAccessToken(), communityId, title, body, resource, flair, isSpoiler, isNSFW, receivePostReplyNotifications,
|
||||
selectedAccount.getAccessToken(), communityId, title, body, resource, flair, isSpoiler,
|
||||
isNSFW, receivePostReplyNotifications, postEnricher,
|
||||
new SubmitPost.SubmitPostListener() {
|
||||
@Override
|
||||
public void submitSuccessful(Post post) {
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package eu.toldi.infinityforlemmy.settings;
|
||||
|
||||
import android.content.ComponentName;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.Bundle;
|
||||
import android.widget.Toast;
|
||||
|
||||
@@ -42,6 +44,7 @@ public class MiscellaneousPreferenceFragment extends CustomFontPreferenceFragmen
|
||||
ListPreference languageListPreference = findPreference(SharedPreferencesUtils.LANGUAGE);
|
||||
EditTextPreference anonymousAccountInstance = findPreference(SharedPreferencesUtils.ANONYMOUS_ACCOUNT_INSTANCE);
|
||||
EditTextPreference postFeedMaxResolution = findPreference(SharedPreferencesUtils.POST_FEED_MAX_RESOLUTION);
|
||||
ListPreference iconPreference = findPreference(SharedPreferencesUtils.ICON_PREFERENCE);
|
||||
|
||||
if (mainPageBackButtonActionListPreference != null) {
|
||||
mainPageBackButtonActionListPreference.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||
@@ -102,5 +105,41 @@ public class MiscellaneousPreferenceFragment extends CustomFontPreferenceFragmen
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
if (iconPreference != null) {
|
||||
iconPreference.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||
updateIcon((String) newValue);
|
||||
return true;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void updateIcon(String iconValue) {
|
||||
PackageManager pm = getActivity().getPackageManager();
|
||||
|
||||
// Disable all the alternative icons
|
||||
pm.setComponentEnabledSetting(
|
||||
new ComponentName(getActivity(), "eu.toldi.infinityforlemmy.OriginalIcon"),
|
||||
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
|
||||
PackageManager.DONT_KILL_APP);
|
||||
|
||||
pm.setComponentEnabledSetting(
|
||||
new ComponentName(getActivity(), "eu.toldi.infinityforlemmy.DefaultIcon"),
|
||||
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
|
||||
PackageManager.DONT_KILL_APP);
|
||||
|
||||
// Enable the chosen icon
|
||||
if ("original_icon".equals(iconValue)) {
|
||||
pm.setComponentEnabledSetting(
|
||||
new ComponentName(getActivity(), "eu.toldi.infinityforlemmy.OriginalIcon"),
|
||||
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
|
||||
PackageManager.DONT_KILL_APP);
|
||||
} else {
|
||||
pm.setComponentEnabledSetting(
|
||||
new ComponentName(getActivity(), "eu.toldi.infinityforlemmy.DefaultIcon"),
|
||||
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
|
||||
PackageManager.DONT_KILL_APP);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -20,13 +20,16 @@ public class SiteInfo {
|
||||
private boolean enable_nsfw;
|
||||
private boolean community_creation_admin_only;
|
||||
|
||||
private String version;
|
||||
|
||||
private List<BasicUserInfo> admins;
|
||||
|
||||
SiteStatistics siteStatistics;
|
||||
|
||||
public SiteInfo(int id, String name, String sidebar, String description, boolean enable_downvotes, boolean enable_nsfw, boolean community_creation_admin_only, List<BasicUserInfo> admins, SiteStatistics siteStatistics) {
|
||||
public SiteInfo(int id, String name, String version, String sidebar, String description, boolean enable_downvotes, boolean enable_nsfw, boolean community_creation_admin_only, List<BasicUserInfo> admins, SiteStatistics siteStatistics) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
this.version = version;
|
||||
this.sidebar = sidebar;
|
||||
this.description = description;
|
||||
this.enable_downvotes = enable_downvotes;
|
||||
@@ -72,6 +75,10 @@ public class SiteInfo {
|
||||
return siteStatistics;
|
||||
}
|
||||
|
||||
public String getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
public static SiteInfo parseSiteInfo(String siteInfoJson) {
|
||||
try {
|
||||
JSONObject siteInfo = new JSONObject(siteInfoJson);
|
||||
@@ -84,6 +91,7 @@ public class SiteInfo {
|
||||
String sidebar = null;
|
||||
if (site.has("sidebar"))
|
||||
sidebar = site.getString("sidebar");
|
||||
String version = siteInfo.getString("version");
|
||||
|
||||
String description = null;
|
||||
if (site.has("description"))
|
||||
@@ -106,7 +114,7 @@ public class SiteInfo {
|
||||
}
|
||||
}
|
||||
|
||||
return new SiteInfo(id, name, sidebar, description, enable_downvotes, enable_nsfw, community_creation_admin_only, admins, SiteStatistics.parseSiteStatistics(counts));
|
||||
return new SiteInfo(id, name, version, sidebar, description, enable_downvotes, enable_nsfw, community_creation_admin_only, admins, SiteStatistics.parseSiteStatistics(counts));
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
|
||||
@@ -31,9 +31,12 @@ public interface SubscribedSubredditDao {
|
||||
@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);
|
||||
|
||||
@Query("DELETE FROM subscribed_subreddits WHERE name = :subredditName COLLATE NOCASE AND username = :accountName COLLATE NOCASE")
|
||||
@Query("DELETE FROM subscribed_subreddits WHERE qualified_name = :subredditName COLLATE NOCASE AND username = :accountName COLLATE NOCASE")
|
||||
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")
|
||||
LiveData<List<SubscribedSubredditData>> getAllFavoriteSubscribedSubredditsWithSearchQuery(String qualified_name, String searchQuery);
|
||||
|
||||
@Query("UPDATE subscribed_subreddits SET name = :displayName, icon = :icon WHERE qualified_name = :qualified_name AND username = :accountName COLLATE NOCASE")
|
||||
void updateSubscribedSubreddit(String qualified_name, String displayName, String icon, String accountName);
|
||||
}
|
||||
|
||||
@@ -129,13 +129,13 @@ public class SubscribedSubredditData implements Parcelable {
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return id;
|
||||
return id + username.hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(@Nullable Object obj) {
|
||||
if (obj instanceof SubscribedSubredditData) {
|
||||
return id == ((SubscribedSubredditData) obj).getId();
|
||||
return id == ((SubscribedSubredditData) obj).getId() && username.equalsIgnoreCase(((SubscribedSubredditData) obj).getUsername());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ public class ParseUserData {
|
||||
boolean isBot = personJson.getBoolean("bot_account");
|
||||
boolean isBanned = personJson.getBoolean("banned");
|
||||
boolean isLocal = personJson.getBoolean("local");
|
||||
boolean isAdmin = personJson.getBoolean("admin");
|
||||
boolean isAdmin = personJson.optBoolean("admin");
|
||||
boolean isDeleted = personJson.getBoolean("deleted");
|
||||
|
||||
String description = "";
|
||||
|
||||
@@ -5,7 +5,9 @@ import android.util.Base64;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import okhttp3.Interceptor;
|
||||
import okhttp3.MediaType;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.RequestBody;
|
||||
|
||||
/**
|
||||
@@ -142,12 +144,6 @@ public class APIUtils {
|
||||
return params;
|
||||
}
|
||||
|
||||
public static Map<String, String> getRedgifsOAuthHeader(String redgifsAccessToken) {
|
||||
Map<String, String> params = new HashMap<>();
|
||||
params.put(APIUtils.AUTHORIZATION_KEY, APIUtils.AUTHORIZATION_BASE + redgifsAccessToken);
|
||||
return params;
|
||||
}
|
||||
|
||||
public static RequestBody getRequestBody(String s) {
|
||||
return RequestBody.create(s, MediaType.parse("text/plain"));
|
||||
}
|
||||
@@ -159,4 +155,13 @@ public class APIUtils {
|
||||
params.put(APIUtils.USER_AGENT_KEY, APIUtils.USER_AGENT);
|
||||
return params;
|
||||
}
|
||||
|
||||
public static Interceptor getOAuthInterceptor(String accessToken) {
|
||||
return chain -> {
|
||||
Request newRequest = chain.request().newBuilder()
|
||||
.addHeader("Authorization", "Bearer " + accessToken)
|
||||
.build();
|
||||
return chain.proceed(newRequest);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -126,6 +126,7 @@ public class JSONUtils {
|
||||
public static final String Y_KEY = "y";
|
||||
public static final String DEST_KEY = "dest";
|
||||
public static final String GIF_KEY = "gif";
|
||||
public static final String GIFS_KEY = "gifs";
|
||||
public static final String MAX_EMOJIS_KEY = "max_emojis";
|
||||
public static final String RICHTEXT_KEY = "richtext";
|
||||
public static final String SUGGESTED_COMMENT_SORT_KEY = "suggested_comment_sort";
|
||||
|
||||
@@ -359,6 +359,8 @@ public class SharedPreferencesUtils {
|
||||
public static final String CURRENT_ACCOUNT_SHARED_PREFERENCES_FILE = "eu.toldi.infinityforlemmy.current_account";
|
||||
public static final String ACCOUNT_NAME = "account_name";
|
||||
public static final String ACCESS_TOKEN = "access_token";
|
||||
|
||||
public static final String BEARER_TOKEN_AUTH = "bearer_token_auth";
|
||||
public static final String ACCOUNT_IMAGE_URL = "account_image_url";
|
||||
public static final String REDGIFS_ACCESS_TOKEN = "redgifs_access_token";
|
||||
|
||||
@@ -416,4 +418,8 @@ public class SharedPreferencesUtils {
|
||||
public static final String CAN_DOWNVOTE = "can_downvote";
|
||||
public static final String SHOW_STATISTICS = "show_statistics";
|
||||
public static final String SHOW_POST_AND_COMMENT_SCORE = "show_score";
|
||||
|
||||
public static final String SHARE_LINK_ON_LOCAL_INSTANCE = "share_link_on_local_instance";
|
||||
|
||||
public static final String ICON_PREFERENCE = "icon_preference";
|
||||
}
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
package eu.toldi.infinityforlemmy.post.enrich
|
||||
|
||||
import eu.toldi.infinityforlemmy.post.Post
|
||||
|
||||
class CompositePostEnricher(private val enrichers: Set<PostEnricher>) : PostEnricher {
|
||||
override fun enrich(posts: Collection<Post>) {
|
||||
for (enricher in enrichers) {
|
||||
enricher.enrich(posts)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package eu.toldi.infinityforlemmy.post.enrich
|
||||
|
||||
import eu.toldi.infinityforlemmy.post.Post
|
||||
|
||||
interface PostEnricher {
|
||||
fun enrich(posts: Collection<Post>)
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
package eu.toldi.infinityforlemmy.post.enrich
|
||||
|
||||
import android.util.Log
|
||||
import eu.toldi.infinityforlemmy.apis.RedgifsAPI
|
||||
import eu.toldi.infinityforlemmy.post.Post
|
||||
import eu.toldi.infinityforlemmy.post.Post.Preview
|
||||
import eu.toldi.infinityforlemmy.utils.JSONUtils
|
||||
import org.json.JSONException
|
||||
import org.json.JSONObject
|
||||
import java.io.IOException
|
||||
|
||||
class RedGifsPostEnricher(private val redgifsAPI: RedgifsAPI) : PostEnricher {
|
||||
override fun enrich(posts: Collection<Post>) {
|
||||
val redGifsPosts = posts.filter { it.isRedgifs && it.previews.isEmpty() }
|
||||
.groupBy { it.gfycatId }
|
||||
|
||||
if (redGifsPosts.isEmpty()) {
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
val response = redgifsAPI.getRedgifsMultipleData(redGifsPosts.keys.joinToString(",")).execute()
|
||||
val body = response.body()
|
||||
if (response.isSuccessful && body != null) {
|
||||
try {
|
||||
val gifsJson = JSONObject(body).getJSONArray(JSONUtils.GIFS_KEY)
|
||||
for (i in 0 until gifsJson.length()) {
|
||||
val gifJson = gifsJson.getJSONObject(i)
|
||||
val id = gifJson.getString(JSONUtils.ID_KEY)
|
||||
val width = gifJson.getInt(JSONUtils.WIDTH_KEY)
|
||||
val height = gifJson.getInt(JSONUtils.HEIGHT_KEY)
|
||||
val thumbnail = gifJson.getJSONObject(JSONUtils.URLS_KEY)
|
||||
.getString(JSONUtils.THUMBNAIL_KEY)
|
||||
|
||||
val previews = ArrayList(listOf(Preview(thumbnail, width, height, null, null)))
|
||||
|
||||
redGifsPosts[id]?.forEach {
|
||||
it.previews = previews
|
||||
}
|
||||
}
|
||||
|
||||
} catch (e: JSONException) {
|
||||
Log.w(TAG, "Failed to parse JSON", e)
|
||||
}
|
||||
} else {
|
||||
Log.w(TAG, "Failed fetch data. Status code ${response.code()}")
|
||||
}
|
||||
} catch (e: IOException) {
|
||||
Log.w(TAG, "Failed fetch data", e)
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val TAG = "RedGifsPostEnricher"
|
||||
}
|
||||
}
|
||||
BIN
app/src/main/res/drawable-hdpi/icon_new.png
Normal file
BIN
app/src/main/res/drawable-hdpi/icon_new.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.1 KiB |
BIN
app/src/main/res/drawable-mdpi/icon_new.png
Normal file
BIN
app/src/main/res/drawable-mdpi/icon_new.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.4 KiB |
BIN
app/src/main/res/drawable-xhdpi/icon_new.png
Normal file
BIN
app/src/main/res/drawable-xhdpi/icon_new.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.9 KiB |
BIN
app/src/main/res/drawable-xxhdpi/icon_new.png
Normal file
BIN
app/src/main/res/drawable-xxhdpi/icon_new.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 10 KiB |
BIN
app/src/main/res/drawable-xxxhdpi/icon_new.png
Normal file
BIN
app/src/main/res/drawable-xxxhdpi/icon_new.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
30
app/src/main/res/drawable/icon_new_colour_background.xml
Normal file
30
app/src/main/res/drawable/icon_new_colour_background.xml
Normal file
@@ -0,0 +1,30 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="512dp"
|
||||
android:height="512dp"
|
||||
android:viewportWidth="512"
|
||||
android:viewportHeight="512">
|
||||
<path
|
||||
android:pathData="M0,0h512v512h-512z"
|
||||
android:fillColor="#F3DBB9" />
|
||||
<group>
|
||||
<clip-path android:pathData="M0,0h512v512h-512z" />
|
||||
<path
|
||||
android:pathData="M233.34,72.72m-169.34,0a169.34,169.34 0,1 1,338.68 0a169.34,169.34 0,1 1,-338.68 0"
|
||||
android:fillColor="#F94E3C" />
|
||||
<path
|
||||
android:pathData="M124.6,0l-124.6,0l0,145.83l275.01,366.17l236.99,0l-0,-214l-387.4,-298Z"
|
||||
android:fillColor="#FFB026" />
|
||||
<path
|
||||
android:pathData="M448,474.98m-121.24,0a121.24,121.24 0,1 1,242.48 0a121.24,121.24 0,1 1,-242.48 0"
|
||||
android:fillColor="#82F5D4" />
|
||||
<path
|
||||
android:pathData="M0,512c-21.42,-243.29 239.91,-279.77 239.91,-279.77c0,-0 -68.17,142.79 80.18,279.77c40.15,37.07 -315.52,51.92 -320.1,0Z"
|
||||
android:fillColor="#F1EA4F" />
|
||||
<group>
|
||||
<clip-path android:pathData="M18.97,-135.06c-85.05,-0 -156.55,81.43 -156.55,184.25c0,102.82 71.5,184.25 156.55,184.25c85.05,-0 156.55,-81.43 156.55,-184.25c0,-102.82 -71.5,-184.25 -156.55,-184.25ZM18.97,-111.06c73.16,-0 132.55,71.81 132.55,160.25c0,88.44 -59.4,160.25 -132.55,160.25c-73.16,-0 -132.55,-71.81 -132.55,-160.25c0,-88.45 59.4,-160.25 132.55,-160.25Z" />
|
||||
</group>
|
||||
<group>
|
||||
<clip-path android:pathData="M520.97,-177.56c-85.05,0 -156.55,81.43 -156.55,184.25c0,102.82 71.5,184.25 156.55,184.25c85.05,0 156.55,-81.43 156.55,-184.25c0,-102.82 -71.5,-184.25 -156.55,-184.25ZM520.97,-153.56c73.16,0 132.55,71.81 132.55,160.25c0,88.45 -59.4,160.25 -132.55,160.25c-73.16,0 -132.55,-71.81 -132.55,-160.25c0,-88.44 59.4,-160.25 132.55,-160.25Z" />
|
||||
</group>
|
||||
</group>
|
||||
</vector>
|
||||
72
app/src/main/res/drawable/icon_new_colour_foreground.xml
Normal file
72
app/src/main/res/drawable/icon_new_colour_foreground.xml
Normal file
@@ -0,0 +1,72 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="512dp"
|
||||
android:height="512dp"
|
||||
android:viewportWidth="740"
|
||||
android:viewportHeight="740">
|
||||
<group
|
||||
android:translateX="120"
|
||||
android:translateY="120">
|
||||
<clip-path android:pathData="M0,0h512v512h-512z" />
|
||||
<path
|
||||
android:pathData="M179.76,220.04a91.29,93.65 0,1 0,182.58 0a91.29,93.65 0,1 0,-182.58 0z"
|
||||
android:fillColor="#000F44" />
|
||||
<path
|
||||
android:pathData="M161.99,207.29c-0.42,14.79 121.94,114.37 139.21,105.89c5.22,-2.56 -11.67,-11.26 -5.25,-12.06c15.88,-1.97 12.87,-24.19 18.18,-30.99c20.97,-26.82 27.47,-71.3 -15.65,-97.84c-32.7,-20.13 -69.99,-7 -85.19,13.06c-7.59,10.02 -19.13,7.43 -22.99,12.82c-5.83,8.14 -4.47,3.14 -5.36,-2.2c-2.46,-14.77 -22.43,-7.04 -22.95,11.31Z"
|
||||
android:fillColor="#426367" />
|
||||
<path
|
||||
android:pathData="M256,174.58m-19.34,0a19.34,19.34 0,1 1,38.68 0a19.34,19.34 0,1 1,-38.68 0"
|
||||
android:fillColor="#426367" />
|
||||
<path
|
||||
android:pathData="M314.97,212.69m-19.34,0a19.34,19.34 0,1 1,38.68 0a19.34,19.34 0,1 1,-38.68 0"
|
||||
android:fillColor="#426367" />
|
||||
<path
|
||||
android:pathData="M205.75,274.58c13.55,17.51 71.46,47.84 93.99,25.51c11.36,-11.26 -1.88,-11.27 -0,-18.44c10.98,-41.87 -9.94,-35.84 -36.98,-56.33c-27.25,-20.65 -33.02,-38.56 -57.01,-17.37c-7.75,6.84 -14.71,-0.6 -18.91,4.54c-12.25,14.96 3.34,41.97 18.91,62.08Z"
|
||||
android:fillColor="#918279" />
|
||||
<path
|
||||
android:pathData="M264.29,224.92m-6.06,0a6.06,6.06 0,1 1,12.13 0a6.06,6.06 0,1 1,-12.13 0"
|
||||
android:fillColor="#000F44" />
|
||||
<path
|
||||
android:pathData="M260.1,187.88c5.34,3.55 6.78,10.77 3.23,16.1c-3.55,5.34 -8.39,4.41 -13.72,0.85c-5.34,-3.55 -9.16,-8.39 -5.61,-13.73c3.55,-5.34 10.77,-6.78 16.1,-3.23Z"
|
||||
android:fillColor="#000F44" />
|
||||
<path
|
||||
android:pathData="M302.1,213.76c5.34,3.55 6.78,10.77 3.23,16.1c-3.55,5.34 -8.39,4.41 -13.73,0.86c-5.34,-3.55 -9.16,-8.39 -5.61,-13.73c3.55,-5.34 10.77,-6.78 16.1,-3.23Z"
|
||||
android:fillColor="#000F44" />
|
||||
<path
|
||||
android:pathData="M251.24,185.73c2.14,-0.45 4.24,0.87 4.68,2.95c0.44,2.08 -0.95,4.13 -3.09,4.59c-2.14,0.45 -4.24,-0.87 -4.68,-2.95c-0.44,-2.08 0.95,-4.13 3.09,-4.59Z"
|
||||
android:fillColor="#82F5D4" />
|
||||
<path
|
||||
android:pathData="M294.81,211.51c2.22,-0.47 4.39,0.9 4.85,3.06c0.45,2.15 -0.98,4.28 -3.2,4.75c-2.22,0.47 -4.39,-0.9 -4.85,-3.06c-0.46,-2.15 0.98,-4.28 3.2,-4.75Z"
|
||||
android:fillColor="#82F5D4" />
|
||||
<path
|
||||
android:pathData="M229.32,420.89c-0.38,-9.41 -0.4,-12.12 -3.04,-21.61c-18.38,-66.06 15.68,-73.88 33.95,-69.82c12.06,2.67 30.13,2.04 33.66,-15.43c1.16,-5.77 -10.31,-7.13 -14.76,-7.68c-14.47,-1.78 -45.16,-4.09 -55.9,-13.06c-17.83,-14.89 -23.98,-46.08 -32.37,-73.04c-6.4,-20.58 -12.88,-35.01 -19.32,-42.08c-12.81,-14.06 -28.61,-6.82 -24.75,14.53c1.19,6.6 9.81,25.35 13.99,35.64c5.04,12.41 1.54,23.97 -0.39,35.46c-3.34,19.91 -3.27,52.95 -3.27,52.95c-0,0 -16.23,7.15 -18.11,22.41c-2.57,20.83 13.45,29.74 13.45,29.74c0,0 -1.15,12.65 -3.39,20.82c-2,7.26 6.16,9.73 9.54,5.03c7.25,-10.08 15.02,-25.48 15.02,-25.48c0,0 7.59,6.8 10.98,11.47c4.36,6.01 14.72,11.72 20.76,15.66c8.65,5.64 11.18,14.34 15.36,26.16c1.49,4.22 8.78,2.83 8.6,-1.64Z"
|
||||
android:fillColor="#000F44" />
|
||||
<path
|
||||
android:pathData="M218.27,304.12c1.45,-1.18 2.27,-2.97 2.22,-4.84c-0.05,-1.87 -0.96,-3.61 -2.47,-4.72c-5.72,-4.19 -14.14,-10.35 -20.1,-14.71c-1.61,-1.18 -3.7,-1.49 -5.58,-0.82c-1.88,0.66 -3.32,2.21 -3.83,4.14c-1.85,6.92 -4.39,16.38 -5.85,21.84c-0.69,2.59 0.4,5.32 2.68,6.72c2.93,1.8 6.94,4.27 9.83,6.04c2.19,1.35 5,1.16 6.99,-0.47c4.08,-3.33 11.07,-9.05 16.12,-13.16Z"
|
||||
android:fillColor="#426367" />
|
||||
<path
|
||||
android:pathData="M158.59,183.75m-8.2,0a8.2,8.2 0,1 1,16.41 0a8.2,8.2 0,1 1,-16.41 0"
|
||||
android:fillColor="#426367" />
|
||||
<path
|
||||
android:pathData="M226.47,318.64c0,-0 7.6,52.73 48.87,80.16c41.26,27.43 70.49,-12.13 118.23,-6.93c105.73,11.52 125.82,133.74 125.82,133.74"
|
||||
android:strokeWidth="8"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#000F44" />
|
||||
<path
|
||||
android:pathData="M182.47,209.44a95.4,98.97 0,1 0,190.81 0a95.4,98.97 0,1 0,-190.81 0z"
|
||||
android:strokeWidth="12"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#000F44" />
|
||||
<path
|
||||
android:pathData="M337.26,159.6c3.89,-0.82 7.81,2.17 8.76,6.68c0.95,4.51 -1.43,8.83 -5.32,9.65c-3.89,0.82 -7.81,-2.17 -8.77,-6.68c-0.95,-4.51 1.43,-8.83 5.32,-9.65Z"
|
||||
android:fillColor="#ffffff" />
|
||||
<path
|
||||
android:pathData="M323.37,175.31c1.51,-0.32 3.03,0.84 3.39,2.59c0.37,1.75 -0.56,3.42 -2.06,3.74c-1.5,0.32 -3.03,-0.84 -3.39,-2.59c-0.37,-1.75 0.56,-3.42 2.06,-3.74Z"
|
||||
android:fillColor="#ffffff" />
|
||||
<path
|
||||
android:pathData="M202.41,225.13c1.93,-0.62 3.14,9.33 6.65,20.17c3.51,10.83 8,18.47 6.07,19.09c-1.93,0.62 -8.98,-5.51 -12.49,-16.34c-3.51,-10.83 -2.16,-22.29 -0.23,-22.91Z"
|
||||
android:fillColor="#ffffff" />
|
||||
<path
|
||||
android:pathData="M278.08,313.74c4.52,0.32 8.05,2.53 7.88,4.95c-0.17,2.41 -3.97,4.12 -8.49,3.8c-4.52,-0.32 -8.05,-2.53 -7.88,-4.95c0.17,-2.41 3.97,-4.12 8.49,-3.8Z"
|
||||
android:fillColor="#426367" />
|
||||
</group>
|
||||
</vector>
|
||||
@@ -26,67 +26,69 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:textSize="?attr/font_default"
|
||||
android:maxWidth="170dp"
|
||||
android:maxLines="1"
|
||||
android:ellipsize="end"
|
||||
android:fontFamily="?attr/font_family"
|
||||
android:textSize="?attr/font_default"
|
||||
app:layout_constrainedWidth="true"
|
||||
app:layout_constraintStart_toEndOf="@+id/icon_gif_image_view_item_post_detail_video_autoplay"
|
||||
app:layout_constraintEnd_toStartOf="@id/guideline"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintHorizontal_bias="0"
|
||||
app:layout_constrainedWidth="true" />
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/community_instance_text_view_item_post_detail_video_autoplay"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:maxLines="1"
|
||||
android:ellipsize="end"
|
||||
android:fontFamily="?attr/font_family"
|
||||
android:textSize="?attr/font_default"
|
||||
app:layout_constrainedWidth="true"
|
||||
app:layout_constraintStart_toEndOf="@+id/subreddit_text_view_item_post_detail_video_autoplay"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/user_text_view_item_post_detail_video_autoplay"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:textSize="?attr/font_default"
|
||||
android:maxWidth="170dp"
|
||||
android:maxLines="1"
|
||||
android:ellipsize="end"
|
||||
android:fontFamily="?attr/font_family"
|
||||
android:textSize="?attr/font_default"
|
||||
app:layout_constrainedWidth="true"
|
||||
app:layout_constraintBottom_toTopOf="@+id/author_flair_text_view_item_post_detail_video_autoplay"
|
||||
app:layout_constraintStart_toEndOf="@+id/icon_gif_image_view_item_post_detail_video_autoplay"
|
||||
app:layout_constraintEnd_toStartOf="@id/guideline"
|
||||
app:layout_constraintTop_toBottomOf="@+id/subreddit_text_view_item_post_detail_video_autoplay"
|
||||
app:layout_constraintHorizontal_bias="0"
|
||||
app:layout_constrainedWidth="true" />
|
||||
app:layout_constraintTop_toBottomOf="@+id/subreddit_text_view_item_post_detail_video_autoplay" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/user_instance_text_view_item_post_detail_video_autoplay"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:maxLines="1"
|
||||
android:ellipsize="end"
|
||||
android:fontFamily="?attr/font_family"
|
||||
android:textSize="?attr/font_default"
|
||||
app:layout_constrainedWidth="true"
|
||||
app:layout_constraintBottom_toTopOf="@+id/author_flair_text_view_item_post_detail_video_autoplay"
|
||||
app:layout_constraintStart_toEndOf="@+id/user_text_view_item_post_detail_video_autoplay"
|
||||
app:layout_constraintTop_toBottomOf="@+id/subreddit_text_view_item_post_detail_video_autoplay" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/author_flair_text_view_item_post_detail_video_autoplay"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:textSize="?attr/font_12"
|
||||
android:fontFamily="?attr/font_family"
|
||||
android:textSize="?attr/font_12"
|
||||
android:visibility="gone"
|
||||
app:layout_constrainedWidth="true"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@+id/icon_gif_image_view_item_post_detail_video_autoplay"
|
||||
app:layout_constraintEnd_toStartOf="@id/guideline"
|
||||
app:layout_constraintTop_toBottomOf="@+id/user_text_view_item_post_detail_video_autoplay"
|
||||
app:layout_constraintHorizontal_bias="0"
|
||||
app:layout_constrainedWidth="true"
|
||||
tools:visibility="visible" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/post_time_text_view_item_post_detail_video_autoplay"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="end"
|
||||
android:textSize="?attr/font_default"
|
||||
android:fontFamily="?attr/font_family"
|
||||
app:layout_constraintHorizontal_bias="1"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@id/guideline"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<androidx.constraintlayout.widget.Guideline
|
||||
android:id="@+id/guideline"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
app:layout_constraintGuide_percent="0.6" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<TextView
|
||||
@@ -103,104 +105,124 @@
|
||||
android:focusable="true"
|
||||
android:longClickable="true" />
|
||||
|
||||
<com.nex3z.flowlayout.FlowLayout
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="16dp"
|
||||
app:flChildSpacing="16dp"
|
||||
app:flChildSpacingForLastRow="align"
|
||||
app:flRowSpacing="8dp"
|
||||
app:flRowVerticalGravity="center">
|
||||
|
||||
<com.libRG.CustomTextView
|
||||
android:id="@+id/type_text_view_item_post_detail_video_autoplay"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="4dp"
|
||||
android:text="@string/video"
|
||||
android:textSize="?attr/font_12"
|
||||
android:fontFamily="?attr/font_family"
|
||||
app:lib_setRadius="6dp"
|
||||
app:lib_setRoundedView="true"
|
||||
app:lib_setShape="rectangle" />
|
||||
|
||||
<com.libRG.CustomTextView
|
||||
android:id="@+id/spoiler_custom_text_view_item_post_detail_video_autoplay"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:text="@string/spoiler"
|
||||
android:textSize="?attr/font_12"
|
||||
android:fontFamily="?attr/font_family"
|
||||
android:padding="4dp"
|
||||
android:visibility="gone"
|
||||
app:lib_setRadius="6dp"
|
||||
app:lib_setRoundedView="true"
|
||||
app:lib_setShape="rectangle" />
|
||||
|
||||
<com.libRG.CustomTextView
|
||||
android:id="@+id/nsfw_text_view_item_post_detail_video_autoplay"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="4dp"
|
||||
android:text="@string/nsfw"
|
||||
android:textSize="?attr/font_12"
|
||||
android:fontFamily="?attr/font_family"
|
||||
android:visibility="gone"
|
||||
app:lib_setRadius="6dp"
|
||||
app:lib_setRoundedView="true"
|
||||
app:lib_setShape="rectangle" />
|
||||
|
||||
<com.libRG.CustomTextView
|
||||
android:id="@+id/flair_custom_text_view_item_post_detail_video_autoplay"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:padding="4dp"
|
||||
android:textSize="?attr/font_12"
|
||||
android:fontFamily="?attr/font_family"
|
||||
android:visibility="gone"
|
||||
app:lib_setRadius="6dp"
|
||||
app:lib_setRoundedView="true"
|
||||
app:lib_setShape="rectangle" />
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/upvote_ratio_text_view_item_post_detail_video_autoplay"
|
||||
android:layout_width="wrap_content"
|
||||
android:id="@+id/post_time_text_view_item_post_detail_video_autoplay"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="?attr/font_12"
|
||||
android:fontFamily="?attr/font_family" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/archived_image_view_item_post_detail_video_autoplay"
|
||||
android:layout_width="20dp"
|
||||
android:layout_height="20dp"
|
||||
android:src="@drawable/ic_archive_outline"
|
||||
android:visibility="gone" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/locked_image_view_item_post_detail_video_autoplay"
|
||||
android:layout_width="20dp"
|
||||
android:layout_height="20dp"
|
||||
android:src="@drawable/ic_outline_lock_24dp"
|
||||
android:visibility="gone" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/crosspost_image_view_item_post_detail_video_autoplay"
|
||||
android:layout_width="20dp"
|
||||
android:layout_height="20dp"
|
||||
android:src="@drawable/crosspost"
|
||||
android:visibility="gone" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/awards_text_view_item_post_detail_video_autoplay"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="?attr/font_12"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:fontFamily="?attr/font_family"
|
||||
android:visibility="gone" />
|
||||
android:gravity="end"
|
||||
android:textSize="?attr/font_default"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
</com.nex3z.flowlayout.FlowLayout>
|
||||
<com.nex3z.flowlayout.FlowLayout
|
||||
android:id="@+id/flowLayout10"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="16dp"
|
||||
app:flChildSpacing="16dp"
|
||||
app:flChildSpacingForLastRow="align"
|
||||
app:flRowSpacing="8dp"
|
||||
app:flRowVerticalGravity="center"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
|
||||
<com.libRG.CustomTextView
|
||||
android:id="@+id/type_text_view_item_post_detail_video_autoplay"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="?attr/font_family"
|
||||
android:padding="4dp"
|
||||
android:text="@string/video"
|
||||
android:textSize="?attr/font_12"
|
||||
app:lib_setRadius="6dp"
|
||||
app:lib_setRoundedView="true"
|
||||
app:lib_setShape="rectangle" />
|
||||
|
||||
<com.libRG.CustomTextView
|
||||
android:id="@+id/spoiler_custom_text_view_item_post_detail_video_autoplay"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:fontFamily="?attr/font_family"
|
||||
android:padding="4dp"
|
||||
android:text="@string/spoiler"
|
||||
android:textSize="?attr/font_12"
|
||||
android:visibility="gone"
|
||||
app:lib_setRadius="6dp"
|
||||
app:lib_setRoundedView="true"
|
||||
app:lib_setShape="rectangle" />
|
||||
|
||||
<com.libRG.CustomTextView
|
||||
android:id="@+id/nsfw_text_view_item_post_detail_video_autoplay"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="?attr/font_family"
|
||||
android:padding="4dp"
|
||||
android:text="@string/nsfw"
|
||||
android:textSize="?attr/font_12"
|
||||
android:visibility="gone"
|
||||
app:lib_setRadius="6dp"
|
||||
app:lib_setRoundedView="true"
|
||||
app:lib_setShape="rectangle" />
|
||||
|
||||
<com.libRG.CustomTextView
|
||||
android:id="@+id/flair_custom_text_view_item_post_detail_video_autoplay"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:fontFamily="?attr/font_family"
|
||||
android:padding="4dp"
|
||||
android:textSize="?attr/font_12"
|
||||
android:visibility="gone"
|
||||
app:lib_setRadius="6dp"
|
||||
app:lib_setRoundedView="true"
|
||||
app:lib_setShape="rectangle" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/upvote_ratio_text_view_item_post_detail_video_autoplay"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="?attr/font_family"
|
||||
android:textSize="?attr/font_12" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/archived_image_view_item_post_detail_video_autoplay"
|
||||
android:layout_width="20dp"
|
||||
android:layout_height="20dp"
|
||||
android:src="@drawable/ic_archive_outline"
|
||||
android:visibility="gone" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/locked_image_view_item_post_detail_video_autoplay"
|
||||
android:layout_width="20dp"
|
||||
android:layout_height="20dp"
|
||||
android:src="@drawable/ic_outline_lock_24dp"
|
||||
android:visibility="gone" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/crosspost_image_view_item_post_detail_video_autoplay"
|
||||
android:layout_width="20dp"
|
||||
android:layout_height="20dp"
|
||||
android:src="@drawable/crosspost"
|
||||
android:visibility="gone" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/awards_text_view_item_post_detail_video_autoplay"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="?attr/font_family"
|
||||
android:textSize="?attr/font_12"
|
||||
android:visibility="gone" />
|
||||
|
||||
</com.nex3z.flowlayout.FlowLayout>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<com.google.android.exoplayer2.ui.AspectRatioFrameLayout
|
||||
android:id="@+id/aspect_ratio_frame_layout_item_post_detail_video_autoplay"
|
||||
|
||||
@@ -36,6 +36,9 @@
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:maxWidth="170dp"
|
||||
android:maxLines="1"
|
||||
android:ellipsize="end"
|
||||
android:textSize="?attr/font_default"
|
||||
android:fontFamily="?attr/font_family"
|
||||
app:layout_constraintBottom_toTopOf="@id/user_text_view_item_post_video_type_autoplay"
|
||||
@@ -50,6 +53,8 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:maxLines="1"
|
||||
android:ellipsize="end"
|
||||
android:fontFamily="?attr/font_family"
|
||||
android:textSize="?attr/font_default"
|
||||
app:layout_constrainedWidth="true"
|
||||
@@ -65,6 +70,9 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:maxWidth="170dp"
|
||||
android:maxLines="1"
|
||||
android:ellipsize="end"
|
||||
android:textSize="?attr/font_default"
|
||||
android:fontFamily="?attr/font_family"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
@@ -78,6 +86,8 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:maxLines="1"
|
||||
android:ellipsize="end"
|
||||
android:fontFamily="?attr/font_family"
|
||||
android:textSize="?attr/font_default"
|
||||
app:layout_constrainedWidth="true"
|
||||
|
||||
@@ -36,6 +36,9 @@
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:maxWidth="170dp"
|
||||
android:maxLines="1"
|
||||
android:ellipsize="end"
|
||||
android:textSize="?attr/font_default"
|
||||
android:fontFamily="?attr/font_family"
|
||||
app:layout_constraintBottom_toTopOf="@id/user_text_view_item_post_video_type_autoplay"
|
||||
@@ -50,6 +53,8 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:maxLines="1"
|
||||
android:ellipsize="end"
|
||||
android:fontFamily="?attr/font_family"
|
||||
android:textSize="?attr/font_default"
|
||||
app:layout_constrainedWidth="true"
|
||||
@@ -65,6 +70,9 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:maxWidth="170dp"
|
||||
android:maxLines="1"
|
||||
android:ellipsize="end"
|
||||
android:textSize="?attr/font_default"
|
||||
android:fontFamily="?attr/font_family"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
@@ -78,6 +86,9 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:maxWidth="170dp"
|
||||
android:maxLines="1"
|
||||
android:ellipsize="end"
|
||||
android:fontFamily="?attr/font_family"
|
||||
android:textSize="?attr/font_default"
|
||||
app:layout_constrainedWidth="true"
|
||||
|
||||
@@ -36,6 +36,9 @@
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:maxWidth="170dp"
|
||||
android:maxLines="1"
|
||||
android:ellipsize="end"
|
||||
android:textSize="?attr/font_default"
|
||||
android:fontFamily="?attr/font_family"
|
||||
app:layout_constraintBottom_toTopOf="@id/user_text_view_item_post_with_preview"
|
||||
@@ -50,6 +53,8 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:maxLines="1"
|
||||
android:ellipsize="end"
|
||||
android:fontFamily="?attr/font_family"
|
||||
android:textSize="?attr/font_default"
|
||||
app:layout_constrainedWidth="true"
|
||||
@@ -65,6 +70,9 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:maxWidth="170dp"
|
||||
android:maxLines="1"
|
||||
android:ellipsize="end"
|
||||
android:textSize="?attr/font_default"
|
||||
android:fontFamily="?attr/font_family"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
@@ -78,6 +86,8 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:maxLines="1"
|
||||
android:ellipsize="end"
|
||||
android:fontFamily="?attr/font_family"
|
||||
android:textSize="?attr/font_default"
|
||||
app:layout_constrainedWidth="true"
|
||||
|
||||
@@ -20,15 +20,28 @@
|
||||
|
||||
<TextView
|
||||
android:id="@+id/subreddit_name_text_view_item_subreddit_listing"
|
||||
android:layout_width="0dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="32dp"
|
||||
android:fontFamily="?attr/font_family"
|
||||
android:maxLines="1"
|
||||
android:ellipsize="end"
|
||||
android:textSize="?attr/font_default"
|
||||
app:layout_constraintStart_toEndOf="@+id/subreddit_icon_gif_image_view_item_subreddit_listing"
|
||||
app:layout_constraintEnd_toStartOf="@id/barrier3"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/community_instance_text_view_item_subreddit_listing"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="?attr/font_family"
|
||||
android:maxLines="1"
|
||||
android:ellipsize="end"
|
||||
android:textSize="?attr/font_default"
|
||||
app:layout_constraintStart_toEndOf="@+id/subreddit_name_text_view_item_subreddit_listing"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/subscriber_count_text_view_item_subreddit_listing"
|
||||
android:layout_width="0dp"
|
||||
|
||||
@@ -15,14 +15,33 @@
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginEnd="32dp" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/thing_name_text_view_item_subscribed_thing"
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:textSize="?attr/font_default"
|
||||
android:fontFamily="?attr/font_family"
|
||||
android:layout_gravity="center_vertical" />
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/thing_name_text_view_item_subscribed_thing"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:ellipsize="end"
|
||||
android:fontFamily="?attr/font_family"
|
||||
android:gravity="start"
|
||||
android:maxLines="1"
|
||||
android:textSize="?attr/font_default" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/thing_instance_text_view_item_subscribed_thing"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:ellipsize="end"
|
||||
android:fontFamily="?attr/font_family"
|
||||
android:maxLines="1"
|
||||
android:textSize="?attr/font_default" />
|
||||
</LinearLayout>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/favorite_image_view_item_subscribed_thing"
|
||||
|
||||
@@ -24,12 +24,27 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginStart="32dp"
|
||||
android:maxLines="1"
|
||||
android:ellipsize="end"
|
||||
android:textSize="?attr/font_default"
|
||||
android:fontFamily="?attr/font_family"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@+id/user_icon_gif_image_view_item_user_listing"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/user_instance_text_view_item_user_listing"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:fontFamily="?attr/font_family"
|
||||
android:maxLines="1"
|
||||
android:ellipsize="end"
|
||||
android:textSize="?attr/font_default"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@+id/user_name_text_view_item_user_listing"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/subscribe_image_view_item_user_listing"
|
||||
android:layout_width="wrap_content"
|
||||
|
||||
@@ -28,6 +28,8 @@
|
||||
android:layout_marginTop="@dimen/nav_header_vertical_spacing"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:maxLines="1"
|
||||
android:ellipsize="end"
|
||||
android:layout_alignParentStart="true"
|
||||
android:textSize="?attr/font_default"
|
||||
android:fontFamily="?attr/font_family"
|
||||
@@ -40,6 +42,8 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:maxLines="1"
|
||||
android:ellipsize="end"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@id/name_text_view_nav_header_main"
|
||||
android:layout_toStartOf="@id/account_switcher_image_view_nav_header_main"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@drawable/ic_launcher_background" />
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
||||
<monochrome android:drawable="@drawable/ic_launcher_foreground_monochrome" />
|
||||
<background android:drawable="@drawable/icon_new_colour_background" />
|
||||
<foreground android:drawable="@drawable/icon_new_colour_foreground" />
|
||||
<monochrome android:drawable="@drawable/icon_new" />
|
||||
</adaptive-icon>
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@drawable/ic_launcher_background" />
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
||||
<monochrome android:drawable="@drawable/ic_launcher_foreground_monochrome" />
|
||||
<background android:drawable="@drawable/icon_new_colour_background" />
|
||||
<foreground android:drawable="@drawable/icon_new_colour_foreground" />
|
||||
<monochrome android:drawable="@drawable/icon_new" />
|
||||
</adaptive-icon>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@drawable/ic_launcher_background" />
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
||||
<monochrome android:drawable="@drawable/ic_launcher_foreground_monochrome" />
|
||||
</adaptive-icon>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@drawable/ic_launcher_background" />
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
||||
<monochrome android:drawable="@drawable/ic_launcher_foreground_monochrome" />
|
||||
</adaptive-icon>
|
||||
@@ -397,7 +397,7 @@
|
||||
<string name="settings_community_summary">!eternityapp@lemdro.id</string>
|
||||
<string name="settings_share_title">Teilen</string>
|
||||
<string name="settings_share_summary">Teile diese App mit anderen Leuten, wenn sie dir gefällt</string>
|
||||
<string name="settings_version_title">Infinity For Reddit</string>
|
||||
<string name="settings_version_title">Eternity</string>
|
||||
<string name="settings_version_summary">Version %s</string>
|
||||
<string name="settings_category_customization_title">Anpassung</string>
|
||||
<string name="settings_customize_light_theme_title">Helles Thema</string>
|
||||
@@ -1203,11 +1203,11 @@
|
||||
<string name="settings_custom_content_font_family_title">Benutzerdefinierte Inhaltschriftart-familie</string>
|
||||
<string name="settings_fixed_height_preview_in_card_title">Festgestellte Höhe in Kartenansicht</string>
|
||||
<string name="settings_hide_text_post_content">Text-Post Inhalt verstecken</string>
|
||||
<string name="settings_hide_comment_awards_title">"Kommentarauszeichnungen verstecken "</string>
|
||||
<string name="settings_hide_comment_awards_title">Kommentarauszeichnungen verstecken</string>
|
||||
<string name="settings_show_fewer_toolbar_options_threshold_title">Weniger Werkzeugleistenoptionen anzeigen</string>
|
||||
<string name="settings_show_fewer_toolbar_options_threshold_summary">Wert %1$d</string>
|
||||
<string name="settings_show_author_avatar_title">Autoravatar zeigen</string>
|
||||
<string name="settings_reddit_user_agreement_title">"Lemmy Nutzungsbestimmungen "</string>
|
||||
<string name="settings_reddit_user_agreement_title">Lemmy Nutzungsbestimmungen</string>
|
||||
<string name="settings_always_show_child_comment_count_title">Immer die Anzahl von untergeordneten Kommentaren anzeigen</string>
|
||||
<string name="settings_hide_upvote_ratio_title">Upvoteverhaltnis verstecken</string>
|
||||
<string name="settings_miscellaneous_dangerous_group_title">Gefährlich</string>
|
||||
@@ -1223,7 +1223,7 @@
|
||||
<string name="user_agreement_dialog_title">Nutzungsbedingungen</string>
|
||||
<string name="user_agreement_message">Du musst Reddit Nutzungsbedingungen (%1$s) und Infinity for reddit\'s Datenschutz-Bestimmungen (%2$s) zustimmen bevor du dich anmelden kannst.</string>
|
||||
<string name="agree">Zustimmen</string>
|
||||
<string name="do_not_agree">"Nicht zustimmen "</string>
|
||||
<string name="do_not_agree">Nicht zustimmen</string>
|
||||
<string name="option_1_hint">Option 1 (notwendig)</string>
|
||||
<string name="option_2_hint">Option 2 (notwendig)</string>
|
||||
<string name="option_3_hint">Option 3</string>
|
||||
|
||||
@@ -408,7 +408,7 @@
|
||||
<string name="settings_community_summary">!eternityapp@lemdro.id</string>
|
||||
<string name="settings_share_title">Partager</string>
|
||||
<string name="settings_share_summary">Partagez cette application avec d\'autres si vous l\'appréciez</string>
|
||||
<string name="settings_version_title">Infinity pour Reddit</string>
|
||||
<string name="settings_version_title">Eternity</string>
|
||||
<string name="settings_version_summary">Version %s</string>
|
||||
<string name="settings_category_customization_title">Personnalisations</string>
|
||||
<string name="settings_customize_light_theme_title">Thème clair</string>
|
||||
@@ -473,7 +473,7 @@
|
||||
<string name="error_getting_multi_reddit_data">Erreur de récupération des données de la multi-communauté</string>
|
||||
<string name="error_loading_multi_reddit_list">Impossible de synchroniser les multi-communautés</string>
|
||||
<string name="error_loading_subscriptions">Impossible de synchroniser les abonnements</string>
|
||||
<string name="share_this_app">Essaie Infinity pour Lemmy, un super client Lemmy !
|
||||
<string name="share_this_app">Essaie Eternity, un super client Lemmy !
|
||||
\nhttps://play.google.com/store/apps/details\?id=eu.toldi.infinityforlemmy</string>
|
||||
<string name="error_getting_community_name">Impossible de récupérer le nom de la communauté</string>
|
||||
<string name="share_post_link">Partager le lien du post</string>
|
||||
@@ -728,7 +728,7 @@ https://s3.eu-west-1.amazonaws.com/po-pub/i/dFZKKms9HbrDGOlcgW9QTcwF.jpg -->
|
||||
<!-- Fuzzy -->
|
||||
<string name="reset_all_settings_success">Réinitialisation des paramètres réussie</string>
|
||||
<string name="username_preview">u/Hostilenemy</string>
|
||||
<string name="community_preview">r/Infinity_For_Reddit</string>
|
||||
<string name="community_preview">!eternityapp@lemdro.id</string>
|
||||
<string name="primary_text_preview">Texte principal</string>
|
||||
<string name="secondary_text_preview">Texte secondaire</string>
|
||||
<string name="post_title_preview">C\'est une publication</string>
|
||||
@@ -1226,4 +1226,32 @@ https://s3.eu-west-1.amazonaws.com/po-pub/i/dFZKKms9HbrDGOlcgW9QTcwF.jpg -->
|
||||
<string name="app_lock_timeout_immediately">Immédiatement</string>
|
||||
<string name="settings_save_nsfw_media_in_different_folder_title">Sauvegarder les médias NSFW à un autre endroit</string>
|
||||
<string name="settings_app_lock_timeout_title">Expiration du verrouillage de l\'application</string>
|
||||
<string name="active_users_number_detail">%1$,d utilisateurs actifs</string>
|
||||
<string name="message_change_avatar_success">Avatar modifié</string>
|
||||
<string name="message_change_avatar_failed">Échec de la modification de l’avatar %s</string>
|
||||
<string name="unable_to_get_font_file">Impossible d’obtenir votre police</string>
|
||||
<string name="user_agreement_message">Vous devez accepter le contrat d’utilisation de Reddit (%1$s) et la politique de confidentialité d’Infinity pour Reddit (%2$s) avant de vous connecter.</string>
|
||||
<string name="user_agreement_dialog_title">Contrat d’utilisateur</string>
|
||||
<string name="agree">J’accepte</string>
|
||||
<string name="post_count_detail">%1$,d publications</string>
|
||||
<string name="comment_count_detail">%1$,d commentaires</string>
|
||||
<string name="message_change_banner_success">Bannière modifiée</string>
|
||||
<string name="message_change_banner_failed">Échec de la modification de la bannière %s</string>
|
||||
<string name="message_save_profile_success">Profil enregistré</string>
|
||||
<string name="message_save_profile_failed">Échec de l’enregistrement du profil %s</string>
|
||||
<string name="select_a_ttf_font">Sélectionnez un fichier de police TTF</string>
|
||||
<string name="unable_to_load_font">Impossible de charger votre police personnalisée</string>
|
||||
<string name="unable_to_copy_font_file">Impossible de copier votre police</string>
|
||||
<string name="reddit_gallery_item_caption_hint">Légende (180 caractères max)</string>
|
||||
<string name="reddit_gallery_item_url_hint">URL</string>
|
||||
<string name="do_not_agree">Je refuse</string>
|
||||
<string name="option_1_hint">Option 1 (Requise)</string>
|
||||
<string name="option_2_hint">Option 2 (Requise)</string>
|
||||
<string name="option_3_hint">Option 3</string>
|
||||
<string name="option_4_hint">Option 4</string>
|
||||
<string name="option_5_hint">Option 5</string>
|
||||
<string name="option_6_hint">Option 6</string>
|
||||
<string name="not_a_valid_number">Nombre non valide</string>
|
||||
<string name="post_karma">Karma de la publication :</string>
|
||||
<string name="comment_karma">Karma du commentaire :</string>
|
||||
</resources>
|
||||
@@ -861,7 +861,7 @@
|
||||
<string name="multireddit_selection_activity_label">Multireddit kiválasztása</string>
|
||||
<string name="action_save_to_database">Mentés adatbázisba</string>
|
||||
<string name="action_read_all_messages">Összes üzenet olvasása</string>
|
||||
<string name="action_add_to_multireddit">Multireddithez adás</string>
|
||||
<string name="action_add_to_multireddit">Mulitközösséghez adás</string>
|
||||
<string name="search_only_communities_hint">Közösségek keresése</string>
|
||||
<string name="search_only_users_hint">Felhasználók keresése</string>
|
||||
<string name="post_type_gif">Gif</string>
|
||||
@@ -1052,4 +1052,10 @@
|
||||
<string name="mark_post_as_read_failed">Nem sikerült a posztot olvasottként megjelölni</string>
|
||||
<string name="user_2fa_token">2FA token (ha szükséges)</string>
|
||||
<string name="instance_url_hint">Az Ön által preferált Lemmy példány URL címe a https:// előtaggal vagy anélkül.</string>
|
||||
<string name="settings_category_community_and_user_pages_title">Közösségi és Felhasználói oldalak</string>
|
||||
<string name="settings_show_statistics">Statisztikák mutatása</string>
|
||||
<string name="moderators">Moderátorok</string>
|
||||
<string name="admins">Adminok</string>
|
||||
<string name="settings_hide_user_instance">Felhasználó példányának elrejtése</string>
|
||||
<string name="report_post">Poszt jelentése</string>
|
||||
</resources>
|
||||
@@ -110,7 +110,7 @@
|
||||
<string name="saved">Guardado</string>
|
||||
<string name="gilded">Dourado</string>
|
||||
<string name="settings">Definições</string>
|
||||
<string name="subscribers_number_detail">Membros: %1$,d</string>
|
||||
<string name="subscribers_number_detail">%1$,d Membros</string>
|
||||
<string name="online_subscribers_number_detail">Online: %1$,d</string>
|
||||
<string name="cannot_fetch_community_info">Não é possível obter informações da comunidade</string>
|
||||
<string name="cannot_fetch_user_info">Não é possível obter informações do utilizador</string>
|
||||
@@ -680,7 +680,7 @@
|
||||
<string name="delete_all_front_page_scrolled_positions_success">Eliminação das posições de deslizamento com sucesso</string>
|
||||
<string name="reset_all_settings_success">Todas as definições repostas com sucesso</string>
|
||||
<string name="username_preview">u/Hostilenemy</string>
|
||||
<string name="community_preview">c/infinityforlemmy</string>
|
||||
<string name="community_preview">!eternityapp@lemdro.id</string>
|
||||
<string name="primary_text_preview">Texto Principal</string>
|
||||
<string name="secondary_text_preview">Texto Secundário</string>
|
||||
<string name="post_title_preview">Isto é uma publicação</string>
|
||||
@@ -1264,4 +1264,16 @@
|
||||
<string name="display_name_description">Isto será apresentado aos visualizadores da sua página de perfil e não altera o seu nome de utilizador.</string>
|
||||
<string name="reddit_gallery_item_caption_hint">Legenda (máx. 180 caracteres)</string>
|
||||
<string name="action_unblock_user">Desbloquear Utilizador</string>
|
||||
<string name="settings_show_statistics">Mostrar Estatísticas</string>
|
||||
<string name="active_users_number_detail">%1$,d Utilizadores Ativos</string>
|
||||
<string name="comment_count_detail">%1$,d Comentários</string>
|
||||
<string name="settings_category_community_and_user_pages_title">Paginas da comunidade e do utilizador</string>
|
||||
<string name="settings_show_post_and_comment_score">Mostrar pontuações de publicações e comentários</string>
|
||||
<string name="moderators">Moderadores</string>
|
||||
<string name="report_post">Denunciar publicação</string>
|
||||
<string name="separate_down_and_up_votes">Votos Positivos e Negativos separados</string>
|
||||
<string name="settings_show_display_name_instead_of_user_name">Mostrar nomes de exibição da comunidade e do utilizador</string>
|
||||
<string name="settings_hide_community_and_user_instance">Ocultar instância da comunidade e do utilizador</string>
|
||||
<string name="post_count_detail">%1$,d Publicações</string>
|
||||
<string name="send_report">Enviar Denuncia</string>
|
||||
</resources>
|
||||
@@ -144,7 +144,7 @@
|
||||
<string name="send_message_content_hint">Повідомлення</string>
|
||||
<string name="reply_message_failed">Не вдалося відповісти на це повідомлення</string>
|
||||
<string name="error_getting_message">Помилка отримання цього повідомлення</string>
|
||||
<string name="message_username_required">Чуєш, кому ти хочеш надіслати це повідомлення\?</string>
|
||||
<string name="message_username_required">Кому ж Ви хочете надіслати це повідомлення\?</string>
|
||||
<string name="message_subject_required">Ваше повідомлення повинно мати тему</string>
|
||||
<string name="message_content_required">Отримувачу треба щось написати</string>
|
||||
<string name="sending_message">Надсилання</string>
|
||||
@@ -152,7 +152,7 @@
|
||||
<string name="send_message_failed">Не вдалося надіслати це повідомлення</string>
|
||||
<string name="select_a_community">Спочатку оберіть спільноту</string>
|
||||
<string name="title_required">Допису треба дати хороший заголовок</string>
|
||||
<string name="link_required">Чуєш, де посилання\?</string>
|
||||
<string name="link_required">Де ж посилання\?</string>
|
||||
<string name="select_an_image">Спочатку оберіть зображення</string>
|
||||
<string name="posting">Публікування</string>
|
||||
<string name="post_failed">Не вдалося це опублікувати</string>
|
||||
@@ -1271,4 +1271,16 @@
|
||||
<string name="enable_random_adaptation">Увімкнути випадкову адаптацію</string>
|
||||
<string name="handle_link">Обробка посилань</string>
|
||||
<string name="sample_list_load_error">Не вдалося завантажити один або кілька списків зразків</string>
|
||||
<string name="community_number_detail">%1$,d спільнот</string>
|
||||
<string name="settings_hide_user_instance">Ховати сервер користувача</string>
|
||||
<string name="user_number_detail">%1$,d користувачів</string>
|
||||
<string name="admins">Адміністратори</string>
|
||||
<string name="reddit_api_info">Починаючи з 1 липня 2023 року, API Reddit стане платним за використання для сторонніх клієнтів, зокрема Infinity for Reddit. Оголошення від Reddit можна знайти тут: %1$s
|
||||
\n
|
||||
\nЩоб пережити цю зміну, після 1 липня Infinity стане додатком лише за підпискою. Більше про зміни можна дізнатися з цієї публікації: %2$s
|
||||
\n
|
||||
\nПісля 1 липня Infinity необхідно оновити, щоб отримати нову версію з можливістю підписки. Жодна з попередніх версій (включаючи цю) не працюватиме після 1 липня. Але через стислі терміни, надані Reddit, оновлення може не бути доступним одразу 1 липня, оскільки воно потребує належного тестування. Дякуємо за розуміння!</string>
|
||||
<string name="theme_name_dayfox">Dayfox</string>
|
||||
<string name="theme_name_carbonfox">Carbonfox</string>
|
||||
<string name="theme_name_nightfox">Nightfox</string>
|
||||
</resources>
|
||||
@@ -543,17 +543,17 @@
|
||||
</string-array>
|
||||
|
||||
<string-array name="settings_default_sort_time_values">
|
||||
<item>TopHour</item>
|
||||
<item>TopSixHour</item>
|
||||
<item>TopTwelveHour</item>
|
||||
<item>TopDay</item>
|
||||
<item>TopWeek</item>
|
||||
<item>TopMonth</item>
|
||||
<item>TopThreeMonths</item>
|
||||
<item>TopSixMonths</item>
|
||||
<item>TopNineMonths</item>
|
||||
<item>TopYear</item>
|
||||
<item>TopAll</item>
|
||||
<item>hour</item>
|
||||
<item>SixHour</item>
|
||||
<item>TwelveHour</item>
|
||||
<item>day</item>
|
||||
<item>week</item>
|
||||
<item>month</item>
|
||||
<item>ThreeMonths</item>
|
||||
<item>SixMonths</item>
|
||||
<item>NineMonths</item>
|
||||
<item>year</item>
|
||||
<item>all</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="settings_default_search_result_tab">
|
||||
@@ -691,4 +691,13 @@
|
||||
<item>1</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="icon_labels">
|
||||
<item>Cosmic Lemmy</item>
|
||||
<item>Galactic Cruiser Lemmy</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="icon_values">
|
||||
<item>default_icon</item>
|
||||
<item>original_icon</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="application_name" translatable="false">Eternity</string>
|
||||
<string name="login_activity_label">Login</string>
|
||||
@@ -84,7 +85,7 @@
|
||||
<string name="action_give_award">Give Award</string>
|
||||
<string name="action_save_to_database">Save to Database</string>
|
||||
<string name="action_read_all_messages">Read All Messages</string>
|
||||
<string name="action_add_to_multireddit">Add to Multicommuity</string>
|
||||
<string name="action_add_to_multireddit">Add to Multicommunity</string>
|
||||
<string name="action_share_link">Share Link</string>
|
||||
<string name="action_copy_link">Copy Link</string>
|
||||
<string name="action_open_external_browser">Open in browser</string>
|
||||
@@ -135,7 +136,7 @@
|
||||
|
||||
<string name="profile">Profile</string>
|
||||
<string name="subscriptions">Subscriptions</string>
|
||||
<string name="multi_reddit">Multicommuity</string>
|
||||
<string name="multi_reddit">Multicommunity</string>
|
||||
<string name="history">History</string>
|
||||
<string name="inbox">Inbox</string>
|
||||
<string name="inbox_with_count">Inbox (%1$,d)</string>
|
||||
@@ -1383,4 +1384,10 @@
|
||||
<string name="moderators">Moderators</string>
|
||||
<string name="admins">Admins</string>
|
||||
<string name="settings_hide_user_instance">Hide user instance</string>
|
||||
</resources>
|
||||
<string name="share_links_on_your_local_instance_rather_than_the_original_creation_instance">Share links on your local instance rather than the original creation instance.</string>
|
||||
<string name="share_links_on_your_local_instance">Share links on your local instance</string>
|
||||
|
||||
<string name="icon_original_label">Original Icon</string>
|
||||
<string name="settings_credits_new_icon">New app icon (Cosmic Lemmy)</string>
|
||||
<string name="settings_credits_new_icon_summary">Made by David Gerla</string>
|
||||
</resources>
|
||||
@@ -2,6 +2,11 @@
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<eu.toldi.infinityforlemmy.customviews.CustomFontPreference
|
||||
android:key="new_icon_foreground"
|
||||
app:title="@string/settings_credits_new_icon"
|
||||
android:summary="@string/settings_credits_new_icon_summary" />
|
||||
|
||||
<eu.toldi.infinityforlemmy.customviews.CustomFontPreference
|
||||
android:key="icon_foreground"
|
||||
app:title="@string/settings_credits_icon_foreground_title"
|
||||
|
||||
@@ -46,6 +46,19 @@
|
||||
app:title="@string/anonymous_account_instance"
|
||||
app:useSimpleSummaryProvider="true" />
|
||||
|
||||
<eu.toldi.infinityforlemmy.customviews.CustomFontSwitchPreference
|
||||
app:defaultValue="false"
|
||||
app:key="share_link_on_local_instance"
|
||||
app:title="@string/share_links_on_your_local_instance"
|
||||
app:summary="@string/share_links_on_your_local_instance_rather_than_the_original_creation_instance" />
|
||||
|
||||
<ListPreference
|
||||
app:key="icon_preference"
|
||||
app:title="Change App Icon"
|
||||
app:entries="@array/icon_labels"
|
||||
app:entryValues="@array/icon_values"
|
||||
app:defaultValue="default_icon" />
|
||||
|
||||
<eu.toldi.infinityforlemmy.customviews.CustomFontPreferenceCategory app:title="@string/settings_miscellaneous_dangerous_group_title" />
|
||||
|
||||
<eu.toldi.infinityforlemmy.customviews.CustomFontPreference
|
||||
|
||||
@@ -24,8 +24,4 @@ allprojects {
|
||||
maven { url "https://jitpack.io" }
|
||||
jcenter()
|
||||
}
|
||||
}
|
||||
|
||||
task clean(type: Delete) {
|
||||
delete rootProject.buildDir
|
||||
}
|
||||
}
|
||||
@@ -1,17 +1,45 @@
|
||||
<h1>Eternity</h1>
|
||||
<p>A client for Lemmy, specifically designed for Android and written in Java. This project is a fork of the Infinity for Reddit project, and it is currently in the early stages of development. As such, expect many unfinished features and potential bugs!</p>
|
||||
<h1>Eternity</h1>
|
||||
<p>A client for Lemmy, specifically designed for Android and written in Java. This project is a fork of the Infinity for
|
||||
Reddit project, and it is currently in the early stages of development. As such, expect many unfinished features and
|
||||
potential bugs!</p>
|
||||
|
||||
<h2>Development Progress</h2>
|
||||
<h2>Features</h2>
|
||||
<p>Eternity is currently in the early stages of development. Expect many
|
||||
unfinished features and bugs!</p>
|
||||
<h3>Browsing Lemmy</h3>
|
||||
<ul>
|
||||
<li>[x] Implementation of basic post browsing feature</li>
|
||||
<li>[x] Support for multiple account handling</li>
|
||||
<li>[x] Functionality for post upvotes/downvotes</li>
|
||||
<li>[x] Functionality to browse comments</li>
|
||||
<li>[ ] Capability for creating a new post</li>
|
||||
<li>[x] Ability to create comments</li>
|
||||
<li>[ ] Elimination of code/string references specific to Reddit</li>
|
||||
<li>[ ] Incorporation of private messaging feature</li>
|
||||
<li>[ ] Feature for saving posts</li>
|
||||
<li>[ ] Account editing function</li>
|
||||
<li>[ ] Multi community view?</li>
|
||||
<li>Explore various feeds (Subscribed/Local/All) and communities</li>
|
||||
<li>Subscribe or unsubscribe from specific communities, with the option
|
||||
to block</li>
|
||||
<li>Discover communities federated with the current instance</li>
|
||||
<li>Favorite a community for quick access</li>
|
||||
<li>Manage your subscriptions and blocked communities</li>
|
||||
</ul>
|
||||
<h3>Content Engagement</h3>
|
||||
<ul>
|
||||
<li>Engage with content by voting, saving, sharing, and creating posts
|
||||
or comments</li>
|
||||
<li>Enjoy endless scrolling through feeds and posts</li>
|
||||
<li>Tailor the view settings for posts (card,compact, gallery)</li>
|
||||
<li>Set default preferences for post and comment sorting</li>
|
||||
<li>Stay updated with notifications for replies</li>
|
||||
</ul>
|
||||
<h3>Account Management</h3>
|
||||
<ul>
|
||||
<li>Sign in to multiple accounts or instances, and effortlessly switch
|
||||
between them</li>
|
||||
<li>Use the inbox features to view replies, mentions, and private
|
||||
messages</li>
|
||||
<li>Access your profile to view your posts, comments, and saved
|
||||
content</li>
|
||||
</ul>
|
||||
<h3>Customization</h3>
|
||||
<ul>
|
||||
<li>Choose between various theme options including Light, Dark,
|
||||
OLED</li>
|
||||
<li>Support Material You theming</li>
|
||||
<li>Explore user-created themes</li>
|
||||
<li>Customize font settings</li>
|
||||
<li>Optional bottom navigation bar</li>
|
||||
<li>Discover a plethora of other customization features</li>
|
||||
</ul>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user